操作系统设计必须满足某些一般性的需求,大多数需求都涉及进程:
- 操作系统必许交替执行多个进程,在合理的相应时间范围内使处理器的使用率最大。
- 操作系统必须按照特定的策略(例如某些函数或应用城居具有较高的优先级)给进程分配资源,同时避免死锁。
- 操作系统可以支持进程间的通信和用户创建进程,它们对构造应用程序很有帮助。
3.1:进程和进程控制块
- 一个正在执行中的程序
- 一个正在计算机上执行的程序实例
- 能分配给处理器并由处理器执行的实体
- 一个具有以下特征大的活动单元:一组指令序列的执行、一个对当前状态和相关的系统资源的集合
- 标识符:跟这个进程相关的唯一标识符,用来区别其他进程
- 状态:如果进程正在执行,那么进程处于执行态
- 优先级:相对于其他进程的优先级
- 程序计数器:程序中即将被执行的下一条指令的地址
- 内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享内存块的指针
- 上下文数据:进程执行时处理器的寄存器中的数据
- I/O状态信息:包括显示的I/O请求、分配给进程的I/O设备和被进程使用的文件列表等
- 审计信息:可包括处理器时间综合、使用的时钟数综合、事件限制、审计号等
3.2.进程状态
- 运行态:该进程正在执行。如果只有一个处理器,一次最多只有一个进程处于改状态。
- 就绪态:进程做好了准备,只要有机会该开始执行。(注意:比如一个设备在等待I/O设备输入,这是阻塞态不是就绪态,就绪态是一切资源都准备好了)。
- 阻塞/等待态:进程在某些事件发生前不能执行,如I/O操作完成。
- 新建态:刚刚创建的进程,操作系统还没有把它加入到可执行进程组中。通常是进程控制块已经创建但还没有加载到内存中的新进程
- 退出态:操作系统从可执行的进程组中释放出的进程,或者是因为它自身停止了,或者是因为某种原因被取消
- 运行->就绪:这类转换最常见原因是,正在运行的进程达到了“允许不中断执行”的最大时间段。实际上所有多道程序操作系统都实行了这类时间限定。这类转换还有很多其他原因,例如操作系统给不同的进程分配不同的优先级,但这不是在所有操作系统中都实现了得。假设进程A给一个给定的优先级运行,且具有更高优先级的进程B正处于阻塞套。如果操作系统知道B等待事件发生,则将B转化为就绪态。然后因为优先级的原因中断A的执行,将处理器分派给进程B,我们说操作系统抢占(preempted)了进程A。最后一种情况是,进程资源自愿释放对处理器的控制,例如一个周期性地进行记账和维护的后台进程。
- 不存在:阻塞->运行。阻塞态不能直接到运行态。当锁等待的时间发生时,处于阻塞态的进程只能转换到就绪态,然后转换到运行态。
1496



被折叠的 条评论
为什么被折叠?



