操作系统第二章总结/
第二章 进程管理
- 进程的定义:是程序的一次执行过程,是一个程序及其数据在处理机上的顺序执行时发生的活动,是具有独立功能的程序在数据集合上运行的过程
- 进程的特征:动态性、并发性、独立性、异步性、结构性。
- 进程结构上组成(进程映像):包括PCB块,程序段,数据段。
- 进程和程序的根本区别是动态和静态的特点。
- PCB是进程存在唯一标志,创建进程实质上是创建进程映像中的PCB,撤销进程实质上是撤销进程的PCB。
- 对进程的管理和控制使用各种原语。
- 进程创建过程:分配唯一的标识号申请空白PCB,为进程分配资源,初始化PCB,若就绪队列未满,将进程插入就绪队列。
- 引起进程创建的事件:用户登录,作业调度,提供服务,应用请求
- 进程切换过程:保存处理机上下文,更新PCB信息,把进程移入相应队列,选择另一进程执行更新其PCB,更新内存管理的数据结构,恢复处理机上下文。
- 进程终止过程:根据终止进程的标识符检索PCB读出进程的状态,若该进程处于运行状态,终止其运行将处理机分配给其他进程,若该进程还有子进程,终止所有子进程,归还进程所拥有的全部资源给父进程或操作系统。
- 引起进程终止的事件:正常结束,异常结束,外界干预
- 进程阻塞过程:找到需要被阻塞进程的标识号对应PCB,若该进程处于运行状态,将状态转为阻塞状态,停止运行,将该进程PCB插入相应队列。
- 进程唤醒过程:在该事件的等待队列中找到对应PCB,将其从等待队列移出,并将状态改为就绪状态,把该PCB插入就绪队列中,等待调度。
- PCB进程控制块:包括进程描述信息(进程标识符、用户标识符),进程控制和管理信息(进程状态、进程优先级,代码入口地址,外存地址----书32页),资源分配情况(代码段/数据段/堆栈段指针 ),处理机相关信息(通用/地址/控制/标志寄存器值)。
- 进程的五种状态切换
- 运行到阻塞是一种主动的行为,阻塞到运行是被动行为。
- 进程可以分为系统进程,和用户进程两类。
- 线程是一个轻型实体不拥有系统资源,没有独立地址空间,一个基本的cpu执行单元。
- 线程的属性一个轻型实体,不拥有系统资源,不同线程可以执行相同程序,同一进程的不同线程共享该进程资源,线程是处理机独立调度单位,多线程可并发,线程被创建就开始它的生命周期,直至终止。
- 引入线程目的:为了更好实现多道程序的并发,提高资源利用率和系统吞吐量。
- 同一个进程的线程通信可以直接通过共享的地址空间。
- 多线程模型:多对一(多个用户级线程对一个内核级线程,若一个内核服务被阻塞,整个被阻塞),一对一(占有很多内核空间,一个被阻塞,可选择另一个线程),多对多(nice)
- 原语是若干机器指令构成用于完成特定功能的一段程序,并在执行中不可分割。
- 原子操作是一个操作的所有动作,要么全做,要么全不做。在单机中采用屏蔽中断保证原子性,在多机系统采用信号量机制保证原子性。
- 进程通信根据交换信息量的多少分为高级通信(目的是交换信息,由系统提供send和receive两个操作)和低级通信(只传送几个字节信息,以达到控制执行速度,共享变量实现消息传递)。
- 高级进程通信方式有三类:共享存储器,消息传递,管道通信
- 共享存储器:在内存中分配一片空间作为共享存储区,需要进程通信的进程把它加入自己的地址空间,不需要时候则取消。
- 消息传递:它以消息为单位在进程间进行数据交换。发送/接收原语。信箱机制,
- 管道通信:建立一个连接两个命令的打开文件,一个命令是写命令向该文件中写入数据,一个读命令向该文件中读出数据。半双工(同一时刻只能有一个对其操作)读进程和写进程都可以对管道操作。不受磁盘容量大小限制。
- 消息缓冲技术:操作系统管理一个用于进程通信的缓冲池,每个缓冲区可存放一条消息,发送者从中申请一个可用缓冲区,存放消息,接受者取出该消息后再释放该缓存区,每个进程均设置一个消息队列,任何发送给该进程的消息暂存消息队列中。依次出队。
- 进程通信的类型分为直接通信方式,间接通信方式。
- 进程之间的通信得借助操作系统内核功能:每个进程有自己的独立的地址空间,在操作系统和硬件的地址保护下,不能访问其他进程地址空间,必须借助系统调用函数实现进程通信。
- 互斥和同步的解决方法有软件方法,中断方法,test-and-set指令,swap指令,信号量方法。
- 进程同步机制:空闲让进,忙则等待,有限等待,让权等待。
- 并发进程的执行会产生相互制约的关系
- 同步(进程之间协同完成,在关键点上等待另一进程发来的消息)和互斥(进程之间竞争使用临界资源,只能让它们逐个使用)
- 进程之间竞争使用临界资源,只能让它们逐个使用
- 临界资源:同时仅允许一个进程使用的资源。
- 临界区:每个进程访问临界资源的那段代码。(进入区,临界区,退出区,剩余区)
- P(s)操作步骤:s=s-1;若s<0阻塞当前进程,将其加入等待队列,调度其他进程;若s>=0当前进程继续执行;
- v(s)操作步骤:s=s+1;若s<=0唤醒第一个等待该资源的进程,当前进程继续运行;若s>0当前进程继续执行;
- 处理机的三级调度:作业调度(内存和辅存的调度),内存调度(提高内存利用率和系统吞吐量,将不能运行的进程调至外存等待称为挂起)进程调度
- 调度的基本准则:cpu利用率,系统吞吐量,周转时间,等待时间,响应时间。
- 调度算法:先来先服务,短作业优先,优先级调度,高响应比优先调度,时间片轮转调度,多级反馈队列调度
- 先来先服务:比较有利于长作业,而不利于短作业。 有利于CPU繁忙的作业,而不利于I/O繁忙的作业。不可被剥夺
- 短作业优先:长作业长期“饥饿”,没有考虑作业的紧迫,短作业调度算法平均等待时机,平均周转时间最少。可被剥夺。可不剥夺。
- 优先级调度:静态优先级,动态优先级。可剥夺被用于实时系统,或者要求快速的分时系统和批处理,可不剥夺用于批处理。
- 高响应比优先调度
(1) 如果作业的等待时间相同,则要求服务的时间愈短,其优先权愈高,因而该算法有利于短作业。
(2) 当要求服务的时间相同时,作业的优先权决定于其等待时间,等待时间愈长,其优先权愈高,因而它实现的是先来先服务。
(3) 对于长作业,作业的优先级可以随等待时间的增加而提高,当其等待时间足够长时,其优先级便可升到很高,从而也可获得处理机。
简言之,该算法既照顾了短作业,又考虑了作业到达的先后次序,不会使长作业长期得不到服务。因此,该算法实现了一种较好的折衷。当然,在利用该算法时,每要进行调度之前,都须先做响应比的计算,这会增加系统开销。 - 时间片轮转算法适用分时系统,如果时间片特别大,则退化为先来先服务,如果时间片小,进程间频繁切换(处理机开销大)
- 时间片长短通常影响因素:系统处理能力,就绪队列的进程数目,系统响应时间
- 多级反馈队列调度算法是公认较好算法
- 作业是从用户角度出发,由用户提交以用户任务为单位,进程是操作系统出发,操作系统生产,是资源分配和独立运行的基本单位。
- 管程:管程是为了解决信号量在临界区的PV操作上的配对的麻烦,把配对的PV操作集中在一起,生成的一种并发编程方法。其中使用了条件变量这种同步机制。
- 管程与临界区不同的是,在管程中的线程可以临时放弃管程的互斥访问,让其他线程进入到管程中来。而临界区中的线程只能在线程退出临界区时,才可以放弃对临界区的访问
- 管程的组成:局部于管程的共享数据结构;对共享数据结构进行操作的一组函数;对局部于管程的数据设置初始值的语句
- 管程的特性:局部于管程的数据只能被局部于管程内的函数所访问;一个进程只有通过调用管程内的函数才能进入管程访问共享数据;每次仅允许一个进程在管程内执行某个函数
- 死锁的定义:多个进程因竞争资源或推进顺序不当而形成的一种相互等待,若无外力,这个状态永久保持。
- 死锁产生原因:系统资源的竞争,进程推进顺序非法
- 死锁产生四个必要条件:互斥条件,不剥夺条件,请求和保持条件,循环等待条件
- 解决死锁的三种方法:死锁的预防,死锁的避免,死锁的检测和解除
- 死锁预防是破坏四个必要条件:破坏互斥不可行,破坏不剥夺(某一个进程申请资源不满足时候,释放已占有资源),破坏请求和保持条件(采用预先静态分配,缺点是浪费系统资源,其他进程会:“饥饿”),破坏循环等待条件(采用顺序资源分配法,给资源编号)
- 死锁避免:防止系统进入不安全状态,银行家算法
- 死锁的检测和解除:用死锁定理,资源分配图不可完全简化,在死锁发生前不做任何措施只是检测,发生后解除用资源剥夺法,撤销进程法,进程回退法