前言:
开发操作系统是为了给应用程序提供一个方便、安全、一致的访问接口,以屏蔽硬件的复杂性。我们可以将操作系统理解为资源的统一抽象表示,可以被应用程序请求和访问。资源包括内存,文件等,一旦操作系统为应用程序创建了这些资源的抽象表示,就必须管理它们的使用。现代操作系统采用进程来管理应用程序的执行。
进程的概念:
1.一个具有以下特征的活动单元:一组指令序列的执行、一个当前状态和相关的系统资源集。
2.能分配给处理器并由处理器执行的实体。
3.一个正在计算机上执行的程序实例。
进程的组成:
进程由程序代码、相关数据以及进程控制块构成。
进程控制块组成:
1.进程标识信息
包括进程标识符,即进程id,创建这个进程的父进程标识符,用户标识符
2.进程状态信息
包括用户可见寄存器,控制和状态寄存器,栈指针
3.进程控制信息
进程状态、优先级、调度信息、事件、存储管理等等
进程控制块的作用:
进程控制块是操作系统中最重要的数据结构。每个进程控制块包含操作系统所需要的关于进程的所有信息。实际上,操作系统中的每个模块,包含那些涉及资源调度、资源分配、中断处理、性能监控和分析的模块,都能读取和修改它们。
进程的执行模式:
由于某些指令只能在特权态下运行,比如内存管理、进程切换等操作,故而为了保护进程控制块的内容不被用户程序破坏,操作系统定义了两种执行模式:
1.用户态;2.内核态
典型情况下, 当用户调用一个操作系统服务或中断触发系统例程的执行时,执行模式变为内核态,当系统服务返回到用户进程时,执行模式被设置为用户态。
进程创建的一些原因:
1.新的批处理作业;
2.交互登陆;
3.操作系统因为提供一项服务而创建;
4.由现有的进程派生;
进程终止的一些原因:
1.正常完成;
2.超过时限;
3.无可用内存;
4.越界(试图访问不允许访问的内存单元);
5.特权指令(进程试图使用为操作系统保留的指令);
6.父进程终止;
7.父进程请求。
进程的状态转化:
1.不考虑挂起态的五状态进程模型:
2.考虑挂起态的进程模型:
挂起的引入:
考虑没有使用虚存的系统,每个被执行的进程必须全部载入内存。假如某一时刻,所有的进程都在等待IO处理(由于IO的速度远远低于处理器),这将会导致处理器空闲,资源被浪费,解决方案是通过交换的方式,将部分阻塞的进程换出内存(放到磁盘中),虽然交换本身也是IO操作,但是通常磁盘IO相对于打印机等设备速度较快,因而此操作通常可以提高性能。所以,我们增加了挂起态:当内存中所有进程都处于阻塞态时,操作系统可以把其中一个进程置于挂起态,并将其移到磁盘中,内存中释放的空间可以被调入的另一个进程使用。之所以将挂起分为就绪/挂起和阻塞/挂起是为了判断何时应该将挂起的进程重新调入内存,当阻塞/挂起态的进程所等待的IO事件完成时,将阻塞/挂起态进程放到就绪/挂起态进程队列中,等待换入内存.
进程排队模型:
为了实现进程间的转换,需要有一个进程的排队规则,下面是两种常见的排队模型。
单阻塞队列中有两个队列,就绪队列和阻塞队列。进入系统的每个进程被放置在就绪队列中,当操作系统选择另一个进程运行时,将从就绪队列中选择,对于没有优先级的方案,这可以是是一个先进先出队列。当一个正在运行的进程被移除处理器时,它根据情况或者被终止或者被放入阻塞或者就绪队列中。最后,当一个事件发生时,所有位于阻塞队列中等待此事件的进程都将被转换到就绪队列中。多阻塞队列对单阻塞队列做了优化,即一个阻塞事件对应一个队列,当该阻塞事件发生时,位于该阻塞队列的所有进程都将进入就绪队列。
1.单阻塞队列:
2.多阻塞队列:
进程创建过程:
一旦操作系统决定基于某种原因创建一个进程,它将按照下面步骤进行:
1.给进程分配一个唯一的进程标识符;
2.给进程分配空间;
3.初始化进程控制块;
4.设置正确的连接(如果操作系统把每个调度队列都保存在链表中,则新进程必须放在就绪或者就绪挂起链表的适当位置上);
进程切换:
1.何时切换进程:
1.中断
包括时钟中断、IO中断、内存失效(所访问的内存单元不在内存)等等
2.陷阱
异常
3系统调用
2.进程切换过程:
1.保存处理器上下文环境;
2.更新当前处于运行态进程的进程控制块;
3.将进程的进程控制块移到相应队列;
4.选择另一进程执行;
5.更新所选择的进程控制块;
6.更新内存管理的数据结构
【操作系统】进程描述与控制