
操作系统
文章平均质量分 83
gswen
这个作者很懒,什么都没留下…
展开
-
从JOS源码了解系统调用
首先何为系统调用?根据维基百科的解释:a system call is how a program requests a service from an operating system's kernel. 简意就是用户程序对操作系统内核服务的请求。我们知道用户程序所能做的事情很有限,比如我们不能自己写代码直接操作硬盘,不能自己写代码控制控制台的输入输出等等,那怎么办呢?办法就是请求操作系统帮我们原创 2016-01-16 19:37:04 · 1214 阅读 · 0 评论 -
linux epoll中事件触发机制
epoll是linux中的一个系统调用。是linux中的一种I/O复用方式,最早是出现在linux内核2.5.44中。早期的I/O复用主要是基于select和poll实现,但是select方式在在检测具体发生I/O/事件的描述符时,需要对所有的描述符进行循环检测,所以检测时间是描述符总数量的常数倍。epoll实现机制是,当某个描述符发生I/O事件时,直接将描述符加入到相应的链表中,因此应用程序在常原创 2016-06-17 16:29:08 · 2931 阅读 · 0 评论 -
操作系统页面管理机制的启动流程-xv6
对在启动启动时,操作系统的页面管理机制的启动一直存在一些疑惑: 假设页面机制启动的指令(类似movl %eax,%cr0)的指令寄存器的值为ip=0x0001,则这条指令的下一条应该执行的指令对应的ip应该是ip=0x0002。但是问题是,对于下一条指令来说,此时虚拟内存的机制已经启动,ip=0x0002所对应的应该是虚拟地址,但是按道理,这里我们的下一条指令应该是存储在了物理地址**0x原创 2017-03-10 10:34:07 · 1115 阅读 · 0 评论 -
xv6进程切换-swtch函数
进程切换中由于需要保存当前进程的寄存器状态信息,又要将新进程记录的寄存器状态信息加载到寄存器,因此涉及到许多栈的操作,堆栈间的来回切换,容易让人眼花缭乱,难以理解。本文试图分析以下xv6中的进程切换过程。当前进程通过调用yield函数,进行进程切换。yield函数调用sched函数,sched函数启动swtch函数完成进程切换。整个流程是这样的:yield->sched->swtch在sched函数原创 2017-03-12 11:35:56 · 3092 阅读 · 4 评论 -
产生死锁的必要条件和解决方法
死锁:多个进程为了竞争资源而造成的僵局,如果没有外力作用,这些进程将再也不能向前推进。产生死锁的原因: 1. 竞争系统资源 2. 进程的推进顺序不当产生死锁的必要条件:互斥条件: 进行要求对其分配的资源进行排他控制,即在一段时间内某资源只能为这一个进程享有。请求和保持条件:当进程因请求资源而阻塞时,对已经获得的资源保持不放不剥夺条件: 进程的资源只能由自己释放环路等待条件:在发生死锁时转载 2017-03-22 00:01:14 · 640 阅读 · 0 评论