进程管理一(操作系统笔记二)
进程的概念和特征
进程的组成:PCB、程序段、数据段。 (确切的说是——进程实体或进程映像的组成)
PCB是给操作系统用的,程序段和数据段是给进程自己用的。
区分:程序是静态的,是存放在磁盘中的可执行文件,即一系列指令;进程是动态的,是程序的一次执行过程。
程序段:程序的代码,即指令序列。
数据段:运行过程中产生的各种数据。
进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。
进程的状态与转换、进程的组织
- 进程的组织方式有两种:
- 链接方式(大多数):按照进程的状态将PCB分为多个队列,通常将优先级高的放在队头,操作系统持有指向各个队列的指针。
- 索引方式:根据进程状态的不同,建立几张索引表,操作系统持有各个索引表的指针。
进程控制
进程控制的主要功能就是对系统中的所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能。
一般把进程控制用的程序段称为原语,原语的特点是执行期间不允许中断,它是一个不可分割的基本单位。可以用**“关中断指令”和“开中断指令”这两个特权指令实现原子性**。
进程的通信
进程通信是指进程之间的信息交换。PV操作是低级通信方式,高级通信方式是指以较高的效率传输大量数据的通信方式。共享存储、消息传递和管道通信都是高级通信方式。
进程是系统分配资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立。为了保证安全,一个进程不能直接访问另一个进程的地址空间。
Linux中,管道通信缓冲区的大小为4KB,这使得它的大小不像文件那样不加检验的增长
线程的概念
引入进程的目的是为了更好地使多道程序并发的执行,提高资源利用率和系统吞吐量,而引入线程的目的则是为了减小程序在并发执行时所付出的时空开销,提高系统的并发性能。
引入线程后,进程只作为除CPU之外的系统资源的分配单元(如打印机、内存地址空间等都是分配给进程的);线程则作为处理机的分配单元。
线程的实现方式和多线程模型
线程的实现可以分为两类:用户级线程(User-Level Thread, ULT)和内核级线程(Kernel-Level Thread, KLT)。内核级线程又称内核支持的线程。
内核级线程才是处理机分配的单位
进程的调度
处理机调度 是对处理机进行分配,即从就绪队列中按照一定的算法(公平、高效)选择一个进程并将处理机分配给它运行,以实现进程并发执行。
这里的 挂起态 进一步分为: 就绪挂起 、 阻塞挂起 。进程的状态可由五状态模型进一步划分为七状态模型。
进程调度的时机、切换与过程
进程调度和切换程序是操作系统内核程序。
现代操作系统中,不能进行进程的调度与切换有:① 在处理中断的过程中; ② 进程在操作系统内核程序临界区中,进入临界区后,需要独占式访问共享数据,理论上必须加锁,以防止其他并行程序进入,解锁前不应切换到其他进程运行,以加快该共享数据的释放; ③ 其他需要完全屏蔽中断的原子操作过程中。
临界资源:一个时间段内只允许一个进程使用的资源。各进程需要互斥的访问临界资源。
临界区:访问临界资源的那段代码。
内核程序临界区一般用来访问某种内核数据结构,比如进程的就绪队列。
注意:普通临界区的临界资源,如打印机等,不会影响进程的调度与切换。
狭义的进程调度 指的是从就绪队列中选中一个要运行的进程。
广义的进程调度 包含选择一个进程和进程切换两个步骤。
进程切换 是指一个进程让出处理机,由另一个进程占用处理机的过程。这一过程完成了 对原来进程各种数据的保存 和 对新的进程各种数据的恢复 。
注意:进程切换是有代价的 ,过于频繁的进程调度、切换必然会使整个系统效率降低。
进程调度方式
进程调度 有两种方式: ① 非剥夺调度方式(非抢占方式) :只能由当前运行的进程主动放弃CPU,只适用于大多数批处理操作系统。 ② 剥夺调度方式(抢占方式) :可由操作系统剥夺当前进程的CPU使用权,适用于分时系统和实时系统。
进程调度的基本准则
进程典型的调度算法
操作系统中存在多种调度算法,有的调度算法适用于作业调度,有的调度算法适用于进程调度,有的调度算法两种都适用。
先来先服务(FCFS)调度算法
短作业优先(SJF)调度算法
注意:
- 如果题目中 未特别说明 ,所提到的 “短作业/进程优先算法” 默认是非抢占式的
- 严格的说——SJF调度算法的平均等待时间、平均周转时间最少——这个表述***错误***。严格的话应加上条件:“在所有进程同时可运行时” 或者 “在所有进程都几乎同时到达时”。
- 最短剩余时间优先算法(SRTN) 得到的平均等待时间、平均周转时间比SJF调度算法最少
高响应比优先(HRRN)调度算法
以上的FCFS、SJF、HRRN这几种算法,主要关心对用户的公平性、平均周转时间、平均等待时间等评价系统整体性能的指标,但是不关心“响应时间”,也并不区分任务的紧急程序,因此对于用户来说,交互性很糟糕。所以适用于早期的批处理系统。
时间片轮转(RR)调度算法
优先级调度算法(优先权调度算法)
进程的优先级 可以分为两种:① 静态优先级 —— 优先级在创建进程时确定的,且在进程整个运行期间保持不变。确定静态优先级的主要依据有进程类型、进程对资源的要求、用户要求。② 动态优先级 —— 在进程运行过程中,根据进程情况的变化动态调整优先级。动态调整优先级的主要依据有进程占有CPU时间的长短、就绪进程等待CPU时间的长短。
- 进程优先级设置的参考原则:
- 系统进程 > 用户进程
- 交互型进程 > 非交互型进程(前台进程 > 后台进程)
- I/O 型进程 > 计算型进程(I/O 型进程:频繁使用 I/O 设备的进程)(计算型进程:频繁使用CPU的进程)
多级反馈队列调度算法
时间片轮转调度算法、优先级调度算法和多级反馈队列调度算法,能够较好的满足交互式系统的需求,所以三种算法都适用于 交互式系统 。(比如 UNIX 使用的就是多级反馈队列调度算法)