1.进程概念
1.1 进程和进程控制块
进程:程序在一个数据集上的一次执行过程
进程与程序的联系和区别
程序是静态的;进程是动态的(动态产生和消亡),而且一个进程运行时可以创建其他进程
一个程序可以对应一个进程,也可以对应多个进程(只要进程所对应的数据集不同)
进程的组成(进程映像):①程序代码 ②数据集、栈
③进程控制块(process control block 简写为PCB,PCB是进程存在的唯一标识,OS根据PCB中的属性控制进程)
概念补充
上下文:进程运行时CPU的寄存器数据集合(现场),包括用户可见寄存器和控制/状态寄存器等
分派器(即进程调度程序)调度时发生上下文切换:保存旧进程的上下文到它的PCB,从新进程的PCB恢复它的新上下文到寄存器
简单理解一个实例:设有一进程P0正在CPU上执行,某时刻P0发出I/O请求,发生了阻塞(或者是时间片结束,发生了中断),此时发生进程切换,这时候则引起上下文切换,保存现场到PCB0,放入队列,此时P1符合使用CPU的要求,则从PCB1中恢复现场,P1开始执行,执行过程发生中断(设此时P0的I/O结束,发生中断),发生进程切换,此时保存现场到PCB1,从PCB0中恢复现场,继续执行。
引入线程,由于实现了并发执行和资源共享,可带来资源利用率和吞吐率的好处,但却增加了系统的时间和空间开销
吞吐率原指一个业务系统在单位时间内提供的产量(或服务量)。在计算机或数据通信系统,指的是单位时间内通过某通信信道(a communication channel)或某个节点成功交付数据的平均速率,通常以每秒比特数(bps, bits per second )为单位。
资源利用率的定义各不相同,在操作系统层面上,可以集中观点在CPU上,即CPU的利用率等。
2.进程的创建和终止
分派器的作用:选择并调度一个进程,使之占用CPU运行
进程创建:OS为该进程建立PCB(唯一标识),分配内存空间。
进程终止:回收内存,释放资源,销毁PCB
3. 进程的五状态模型
新建(new):进程正被创建。分配内存后将被设为就绪态
就绪(ready):进程已得到除CPU以外的其它所需资源
运行(running):进程的指令正在被运行
阻塞(等待)(blocking):进程正等待资源或者某事件发生
退出(exit):进程已正常或者异常结束,回收资源,善后
首先一个进程被新建,加载必要资源(除CPU外)内存等后进入就绪状态,等待分派器调度,当分派器指定该进程被调度时,进入运行状态,当在运行过程中,进程时间片完或者是更高优先级的进程被调度时,进程从运行态进入就绪态,等待再次被调度,如果是进程在运行过程中需要等待某事完成(如I/O),则此时进入阻塞状态,此时若有其他进程需要使用CPU,则会发生进程切换,分派指派新的进程执行,当需要等待的某事完成后,该进程从阻塞态恢复为就绪态,等待被分派器调度,当运行完成后,结束,退出。
如图:
进程队列
处于同一状态的进程PCB组成一个进程队列
就绪队列:所有就绪进程按FCFS(first come first service)或者优先级顺序排队
等待(阻塞)队列:每一种等待事件对应于一个队列(比如说I/O的归到I/O的那一队,因为中断而阻塞的归到一队)
如图
PCB数量
OS中PCB数量固定或不固定,但总是有限的
1 、一个多任务双核处理机系统,其操作系统是 UNIX , PCB 表的规模是 100 行,则:最多有 ____ 2 _____ 个进程处于运行态;最多有 ____ 98 ____ 个进程处于就绪态最多有____100__个进程处于阻塞态解析:由于双核,由于CPU一个时刻内只能运行一个进程,那么最多只有两个进程同时运行当所有进程都是就绪时,不可能所有进程都不运行(或者是阻塞状态,这个阻塞的前提条件也是进程进入了运行状态),那么最多只有98个进程是就绪态的当所有的进程都因为I/O等时间需要阻塞时,这时候所有进程都阻塞。2.设某 UNIX 中每个用户创建进程数最大为 50 个, 现有一用户执行某程序,该程序执行一死循环,循 环创建新子进程。则当该进程创建了 ___ 4 9 ___ 个子进程后不能再创建,该进程处于阻塞状态解析:创建子进程可以以fork()函数来举例,此时相当于发生了系统调用(trap),是中断的一种,因此是阻塞状态
4.被挂起的进程-两种挂起态
为什么需要挂起?
内存不足,不得不把部分进程交换到磁盘
就绪挂起态、阻塞挂起态:外存就绪/阻塞态。由于内存有限,将原位于内存的就绪/阻塞进程(代码数据)换出到外存(磁盘)上
解除挂起:当挂起进程优先级高或内存空间足够时,把位于磁盘的挂起进程(代码数据)换入到内存中
一个基本挂起态机制如上图所示,其中与挂起态无关的过程与五状态模型的运行机制完全一致,变为就绪挂起态的时机有三个:①当进程刚刚新建,但是内存不足,就会被直接加载到磁盘中去②当进程变为就绪态时但没有被调度而且内存不足时,也会被加载到磁盘中③当进程在运行中,内存不足时也会被挂起运行,变为就绪挂起态,阻塞挂起态相对简单,当一个进程长时间阻塞而又占用内存时,此时就会被换出到磁盘中,需要注意的是尽管代码数据被换出到外存了,但是PCB始终还是在内存中,
假设有些进程处于就绪态,有些处于就绪挂起态,而且至少有一个就绪挂起态进程的优先级高于所有就绪态进程,有两种极端策略:①总是调度处于就绪态的进程,以减少交换②总是调度优先级最高的进程,会导致不必要的交换。
请给出一种均衡考虑优先级和交换性能的中间策略
一种折中的方案是:将就绪挂起进程降低1-2个优先级,如果它仍然高于所有就绪进程的最高优先级,那么就将它换入内存执行。
5.进程描述
5.1 操作系统的控制结构
OS构造而且维护所管理的每个实体的信息表,4类:
①内存表:跟踪内存(实存)和外存(虚拟内存)
②I/O表:管理I/O设备和通道
③文件表:文件属性
④进程表:PCB集合
5.2 进程的控制结构-PCB
PCB:进程属性的集合,在OS中进程表包含了所有进程的PCB,创建新进程时,分配进程表中一个空闲PCB,填写属性,在进程终止时回收PCB
该图解释了PCB表是如何与寄存器等基础设施进行进程控制的,首先PCB表中有索引,以该索引来表示表示该表项控制哪一个进程,基址寄存器则是标明了当前进程的代码数据所在内存的基址位置,而界限寄存器则是标明了当前进程的代码数据结束的地址位置,程序计数器则是存储了当前进程执行的指令,通过这么一套配合下来,实现进程的访问控制。
5.3 PCB的属性解析
5.4 进程控制结构-(program status word,psw)PSW
程序状态字寄存器:指明CPU当前特权级别、中断屏蔽码(中断优先级等)
6.进程控制
CPU有两种执行模式(CPU状态)该状态由PSW中的模式位指示:
用户态:只能执行非特权指令
系统态:也称核心态、内核态、特权态、控制态、管态。可以执行所有的指令(特权指令和非特权指令),使用所有资源以及改变CPU状态
两类指令:特权指令:在系统态下执行的指令(OS内核使用)非特权指令:用户态下执行(用户程序)
6.1 执行模式-CPU特权级别
当CPU要执行特权指令时,会引起“陷入trap”,也就是CPU由用户态切换到系统态(称为模式切换),然后去执行OS内核中的一段(特权指令)代码。可以简要描述为:首先CPU在执行用户指令,此时是用户态,此时要执行特权指令,则会转入系统态,执行内核代码,完成后则由转回用户态,继续执行非特权指令。
CPU从用户态到系统态的时机:①执行系统调用(即内核代码,由OS提供服务)时②发生中断或异常时,执行中断处理程序
从系统态到用户态的过程:系统调用或中断处理完毕之后,执行IRTE(中断返回)指令,恢复原进程的PSW,回到用户态。
一个简单的例子:当CPU在用户态下执行指令时,此时需要系统调用或者中断处理,就会从用户态转为系统态,注意,当在系统态下发生中断嵌套时,响应另一中断、中断返回在系统态运行时也可以响应中断
下列选项中,不可能在用户态下 发生 的是(C)A.系统调用 B.外部中断 C.进程切换 D.缺页解析:注意问题问的是在用户态下发生。A.系统调用可以是在用户程序执行时发出,请求操作系统的服务。B.外部中断也可以在用户执行时发生,例如外部的设备断电等C.进程切换是在进程调度中发生,而进程调度是在内核中进行的,因此是系统态下执行,故选CD.用户在请求Cache内的内容时,若所需要的数据不在页中,这时候就会发生缺页,是可以存在的可以在用户态下执行处理的指令是__(D)__A.关中断 B.输入/输出 C.系统调用 D.从内存中取数解析:注意输入、输出、系统调用和中断处理都属于OS内核发生模式切换可以不改变当前运行态进程的状态(√)
7.进程创建
创建新进程的步骤:
①给新进程分配一个新的PCB和唯一的PID
②给进程分配内存空间(代码、栈、数据)
③初始化PCB:各属性取默认值或者所请求的值,在UNIX中,子进程PCB基本复制自父进程PCB
④将PCB放置到就绪队列或就绪挂起队列
⑤创建其他数据结构:如记账、日志等
8.进程切换
何时进行进程切换?
中断发生时:如时钟中断。当前进程的时间片结束,让出CPU,调度新进程,因此发生新旧进程切换
陷阱发生时:当前进程的指令产生错误或异常,非致命时重试或者报告,致命时将直接结束本进程,调度新进程
当前进程执行系统调用时,通常会被阻塞,让出CPU
进程切换的步骤:
①保存当前的上下文到对应的进程PCB上(保存现场),更新PCB,将PCB转移到相应的就绪队列或者阻塞队列
②选择(调度)另外一个就绪进程,准备执行
③更新该进程PCB,从就绪队列中移出,更新内存管理的数据结构(如设置页表指针、基址/界限寄存器)将该进程的上下文恢复到寄存器中
进程创建时,不需要为该进程做的是(D)A.填写进程表(PCB)项B.分配内存C.将它插入就绪队列D.分配CPU解析:创建时未进入运行状态,在运行之前做的工作都仅仅是分配内存,分配地址等工作,分配CPU是在即将要运行时才进行___一定会引起进程切换A.一个进程创建后,进入就绪状态B.一个进程由运行状态变为就绪状态C.一个进程从阻塞状态变为就绪状态D.以上答案都不对解析:这道题可以这么理解,由于题目未提及发生中断的情况,因此都是①③种情况,此时都是针对CPU的,只需要在ABC中看哪个选项的CPU执行对象发生了变化,A只是将进程送入了就绪队列,未涉及CPU,不选,B一个进程由运行切换为就绪,那么是CPU让出了给别的进程,发生了进程切换,C与A同理
进程类型
孤儿进程:其父进程已经结束的进程
僵尸进程:已经exit(),但其PCB依然存在,但其父没有调用wait()函数等待其结束,也没有忽略SIGCHLD信号,该进程处于僵尸状态