请注意,本文中的部分内容来自网络搜集和个人实践,如有任何错误,请随时向我们提出批评和指正。本文仅供学习和交流使用,不涉及任何商业目的。如果因本文内容引发版权或侵权问题,请通过私信告知我们,我们将立即予以删除。
I/O指令与计算指令运行时间差距极大,只执行一个程序CPU利用率低,为了使CPU忙碌起来、利用率提高
多道程序、交替执行(管理CPU核心,多进程图像)
程序一次执行过程,一次程序及其数据在处理机上顺序执行时所发生的活动
资源分配和调度的独立单位(未引入线程)
PCB
进程描述信息
进程控制和管理信息
资源分配清单
说明有关内存地址空间或虚拟地址空间状况,所打开的文件列表和所使用的输入/输出设备信息
代码段指针、数据段指针、堆栈段指针、文件描述符、键盘、鼠标
处理机相关信息
程序段
概念
共享正文段
数据段
概念
数据堆段
数据栈段
全局区(静态区)
描述进程的基本情况和运行状态,进而控制和管理进程
队列操作
调度(本章下文介绍)
共享内存
映射表(逻辑地址与物理地址)
引起创建的事件
用户登录
作业调度
提供服务
应用请求
原语执行过程
引起终止的事件
正常结束
异常结束
外界干预
原语执行过程
根据被终止进程的标识符,检索PCB,读取进程状态
若进程处于运行态,终止运行,剥夺处理机
终止进程之下的子进程,该进程所有资源还给父进程或操作系统
PCB从队列中删除
阻塞(自我阻塞)
引起
需要等待系统分配资源
需要等待相互合作的进程完成工作
原语执行过程
找到要被阻塞进程标识号对应PCB
若该进程处于运行态,保护现场,状态转为阻塞态停止运行
将PCB插入对应等待队列
唤醒(其他进程唤醒)
引起
时间片到
更高优先级到达
进程主动阻塞
当前进程终止
原语执行过程
概念(进程<—>共享空间<—>进程)
操作系统只负责为通信进程提供可共享使用的存储空间和同步互斥工具,数据交换由用户安排读写指令完成
概念
直接通信方式
间接通信方式
为减少程序在并发执行中的切换开销,引入线程概念(切线程不切进程则资源不用切换)
进程 = 资源 + 执行执行序列(将资源和指令执行分开)
线程
进程内(在一个资源下)启动多个轻巧的、可以来回切换的指令序列
保留了并发的优点,避免了进程切换的代价
此处李治军老师进程切换的内容,分离为线程的指令的切换与映射表上资源的切换两部分讲,讲解内存管理的时候再讲资源问题,两者分离讲解,进程切换问题迎刃而解
调度
引入线程前
引入线程后
线程是独立调度的基本单位,进程是资源的基本单元
进程的地址空间相互独立,统一进程的各线程之间共享进程的资源,某进程的线程对其他进程不可见
一对一模型
多对一模型
多对多模型
作业调度(高级调度)
内存调度(中级调度)
进程调度(低级调度)
什么是临界区?
答:每个进程中访问临界资源的那段程序称为临界区(临界资源是一次仅允许一个进程使用的共享资源)。每次只准许一个进程进入临界区,进入后不允许其他进程进入。
不能切换的情况
处理中断过程
进程在操作系统内核程序临界区的时候
其他需要完全屏蔽中断的原子操作过程
可以切换的情况
非剥夺调度方式
高优先级进程需要等待占用处理机的进程释放
实现简单开销小,适合大多数批处理系统,不适用于分时系统和大多数实时系统
剥夺调度方式
等待时间:作业等待处理机时间=周转时间-运行时间-I/O操作时间
响应时间小->切换次数多->系统内耗大->吞吐量小
前台任务关注响应时间,后台任务关注周转时间
CPU约束型任务:CPU多、I/O少
I/O约束型任务:I/O多、CPU少
例1,6~11
例2,0~16
原则
系统进程>用户进程
交互型进程>非交互型进程
I/O进程>计算型进程(CPU繁忙型)
前台进程>后台进程
可能饥饿
设置多个就绪队列,将不同类型或性质的进程固定分配到不同就绪队列
队列间可采用
固定优先级:高优先级空时优先级低才能调用
时间片划分:例如,列队分配时间50%、40%、10%
各队列可不同调度策略:系统队列采用优先级调度、交互式队列采用RR、批处理队列采用FCFS
概念:一次只允许一个进程使用的资源
访问过程
进入区:检查进程是否可以进入临界区(“上锁”)
临界区:可以访问临界资源的代码
退出区:将正在访问临界区的标志清除(“解锁”)
剩余区:代码中的其余部分
直接制约关系,为了完成某任务而建立的多个进程,需要互相通信同步
单标志法
双标志法先检查
双标志法后检查
皮特森算法
概念引入
由于进程异步问题,走走停停
需要发信号来约束
整形信号量
记录形信号量
解决一气呵成问题,无法“让权等待”
概念
组成
局部于管程的共享结构数据说明
对该数据结构进行操作的一组过程
对局部于管程的共享数据设置初始值的语句
基本特征
- 生产者-消费者问题
- 多生产者-多消费者问题
- 吸烟者问题
- 读者-写者问题
增加P(w)、V(w)使写优先,防止源源不断读者,饥饿问题
增加互斥信号量使count–和if(count==0)一气呵成
- 哲学家进餐
思路一:最多允许四位同时吃饭
思路二:奇数号哲学家先拿左筷子,偶数号相反
思路三:仅当哲学家左右能同时拿起筷子时进食(拿筷子的动作加互相信号,一气呵成)
系统资源的竞争(不可剥夺资源)
进程推进顺序非法
产生的必要条件(同时满足)
破坏互斥条件
破坏不剥夺条件
破坏请求并保持条件
破坏循环等待条件
系统安全状态
银行家算法
资源分配图
死锁定理
死锁解除
资源剥夺法
撤销进程法
强制撤销部分甚至全部死锁进程,剥夺他们的资源
进程回退法
死锁:各进程相互等待对方手里的资源,导致各进程都阻塞,无法向前推进的现象(操作系统解决)
饥饿:由于长期得不到想要的资源,某进程无法向前推进的现象(操作系统解决)
死循环:某进程执行过程中一直跳不出某个循环的现象(程序员解决)
问题: 下列操作完成时,导致CPU从内核态转为用户态的是( )。
A. 阻塞过程
B. 执行CPU调度
C. 唤醒进程
D. 执行系统调用
参考答案:
正确答案是选项 D:执行系统调用。
解析:
操作系统通过执行软中断指令陷入到内核态执行系统调用,也就是用户进程请求内核提供服务。在这个过程中,CPU从用户态切换到内核态。系统调用执行完成后,会恢复被中断的或设置新进程的CPU现场,然后返回被中断进程或新进程,这时CPU会从内核态切换回用户态。
选项 A、B、C 中的操作虽然都是在内核态进行的,但是它们并不导致CPU从内核态切换到用户态。阻塞过程、执行CPU调度和唤醒进程都是在操作系统内部进行的,并没有涉及用户程序的执行。只有执行系统调用时,用户进程才会调用内核提供的功能,此时CPU会从用户态切换到内核态,执行相应的内核代码,处理用户进程的请求,并在返回时将CPU从内核态切换回用户态。
因此,只有执行系统调用时,CPU才会从内核态转为用户态。
正确答案是选项 D:执行系统调用。
问题: 下列出当前线程引起的事件或执行的操作中,可能导致该线程由执行态变为就绪态的是( )。
A. 键盘输入
B. 缺页异常
C. 主动出让CPU
D. 执行信号量的wait()操作
参考答案:
正确答案是选项 C:主动出让CPU。
解析:
A. 键盘输入:当等待键盘输入的操作进行时,当前线程处于阻塞态。键盘输入完成后,会调用相应的中断服务程序来处理输入,而不是唤醒当前线程。因此,键盘输入不会导致线程由执行态变为就绪态。选项 A 错误。
B. 缺页异常:当线程检测到缺页异常时,会调用缺页异常处理程序从外存调入缺失的页面,但线程的状态从执行态转为阻塞态,而非就绪态。因此,缺页异常不会导致线程由执行态变为就绪态。选项 B 错误。
C. 主动出让CPU:当线程的时间片用完后,可以选择主动放弃CPU,以便其他线程能够执行。此时,线程会进入就绪队列,等待下次调度执行,因此导致线程由执行态变为就绪态。选项 C 正确。
D. 执行信号量的wait()操作:线程执行wait()操作后,若成功获取资源,则线程状态不会改变,仍然保持在执行态。若未能获取资源,则线程会进入阻塞态,而不是就绪态。因此,执行信号量的wait()操作不会导致线程由执行态变为就绪态。选项 D 错误。
综上所述,只有主动出让CPU的操作可以导致线程由执行态变为就绪态。
正确答案是选项 C:主动出让CPU。
问题: 进程Pl,P2和P3进入就绪队列的时刻,优先值(越大优先权越高)以及CPU的执行时间如下表所示。
系统采用基于优先权的抢占式CPU调度算法,从Oms时刻开始进行调度,则P1,P2,P3的平均周转时间为()
进程名 | 进入就绪队列的时刻 | 优先数 | CPU的执行时间 |
---|---|---|---|
P1 | Oms | 1 | 60ms |
P2 | 20ms | 10 | 42ms |
P3 | 30ms | 100 | 15ms |
A. 60ms
B. 61ms
C. 70ms
D. 71ms
参考答案:
正确答案是选项 B:61ms。
解析:
根据给定的进程信息和采用基于优先权的抢占式CPU调度算法,我们可以得出进程的执行顺序如下:
根据上述计算可得到每个进程的周转时间:
因此,平均周转时间 = (60ms + 42ms + 47ms) / 3 = 149ms / 3 ≈ 49.67ms ≈ 61ms。
因此,选项 B:61ms 是正确答案。
正确答案是选项 B:61ms。
问题: 进程P0、P1、P2和P3进入就绪队列的时刻、优先级(值越小优先权越高)及CPU执行时间如下表所示。
进程 | 进入就绪队列的时刻 | 优先级 | CPU执行时间 |
---|---|---|---|
P0 | 0ms | 15 | 100ms |
P1 | 10ms | 20 | 60ms |
P2 | 10ms | 10 | 20ms |
P3 | 15ms | 6 | 10ms |
若系统采用基于优先权的抢占式进程调度算法,则从0ms时刻开始调度,到4个进程都运行结束为止,发生进程调度的总次数为( )。
A. 4
B. 5
C. 6
D. 7
参考答案:
正确答案是选项 C:6。
解析:
根据给定的进程信息和使用的调度算法,我们可以推导出进程的调度情况。以下是每次发生进程调度的时刻:
总共发生进程调度的次数为6次。
因此,正确答案是选项 C:6。
问题: 系统中有三个进程P0、P1、P2及三类资源A、B、C。若某时刻系统分配资源的情况如下表所示,则此时系统中存在的安全序列的个数为( )。
进程 | 已分配资源数 | 尚需资源数 | 可用资源数 |
---|---|---|---|
A | B | C | |
P0 | 2 | 0 | 1 |
P1 | 0 | 2 | 0 |
P2 | 1 | 0 | 1 |
A. 1
B. 2
C. 3
D. 4
参考答案:
正确答案是选项 B:2。
解析:
根据给定的分配和需求资源情况,我们需要找到能够形成安全序列的调度顺序。以下是一种可能的安全序列:
首先,进程P0已经获得了所有所需的资源,因此可以执行,并在执行完毕后释放所占用的资源。此时可用资源数变为<3, 3, 3>。根据当前可用资源数,我们可以选择调度进程P2或P1。无论我们选择调度哪个进程,它们都能够满足它们的需求并执行完毕后释放资源。因此,我们可以形成两个不同的安全序列。
因此,存在两个安全序列。
正确答案是选项 B:2。
问题: 下列事件或操作中,可能导致进程P由执行态变为阻塞态的是( )。
Ⅰ. 进程P读文件
Ⅱ. 进程P的时间片用完
Ⅲ. 进程P申请外设
Ⅳ. 进程P执行信号量的wait()操作
A. 仅Ⅰ、Ⅳ
B. 仅Ⅱ、Ⅲ
C. 仅Ⅲ、Ⅳ
D. 仅Ⅰ、Ⅲ、Ⅳ
参考答案:
正确答案是选项 A:仅Ⅰ、Ⅳ。
解析:
在给定的事件和操作中,以下是可能导致进程P由执行态变为阻塞态的情况:
Ⅰ. 进程P读文件:当进程P读取文件时,它需要等待磁盘IO完成,这将导致进程从执行态变为阻塞态。
Ⅱ. 进程P的时间片用完:当进程P的时间片用完时,它会从执行态变为就绪态,并等待下次被调度。它不会直接从执行态变为阻塞态。
Ⅲ. 进程P申请外设:进程P申请外设,如果该外设是独占设备且正在被其他进程使用,那么进程P将从执行态变为阻塞态,等待系统分配外设。
Ⅳ. 进程P执行信号量的wait()操作:如果进程P执行信号量的wait()操作,并且该信号量的值小于等于0,那么进程将进入阻塞态,等待其他进程使用signal()操作唤醒。
综上所述,正确答案是选项 A:仅Ⅰ、Ⅳ。
正确答案是选项 A:仅Ⅰ、Ⅳ。
问题: 下列操作中,操作系统在创建新进程时,必须完成的是( )。
Ⅰ. 申请空白的进程控制块
Ⅱ. 初始化进程控制块
Ⅲ. 设置进程状态为执行态
A. 仅Ⅰ
B. 仅Ⅰ、Ⅱ
C. 仅Ⅰ、Ⅲ
D. 仅Ⅱ、Ⅲ
参考答案:
正确答案是选项 B:仅Ⅰ、Ⅱ。
解析:
在操作系统创建新进程时,必须完成以下两个操作:
Ⅰ. 申请空白的进程控制块:每个进程都需要一个进程控制块 (Process Control Block, PCB) 来描述和管理它的信息。PCB包含了进程的各种属性和状态,如进程标识符、优先级、程序计数器、寄存器值等。因此,在创建新进程之前,操作系统必须为其分配一个空白的进程控制块。所以选项 Ⅰ 正确。
Ⅱ. 初始化进程控制块:创建进程后,操作系统需要初始化进程控制块,将一些必要的信息填入其中。这包括设置进程的初始状态、分配资源、初始化处理机状态信息、设置进程优先级等。通过初始化进程控制块,操作系统确保了进程的正确运行和管理。因此,选项 Ⅱ 正确。
而设置进程状态为执行态是在进程调度过程中进行的,并不是创建新进程时必须完成的操作。所以,选项 Ⅲ 错误。
综上所述,操作系统在创建新进程时必须完成的操作是申请空白的进程控制块 (Ⅰ) 和初始化进程控制块 (Ⅱ)。
正确答案是选项 B:仅Ⅰ、Ⅱ。
问题: 下列内核的数据结构或程序中,分时系统实现时间片轮转调度需要使用的是( )。
Ⅰ. 进程控制块
Ⅱ. 时钟中断处理程序
Ⅲ. 进程就绪队列
Ⅳ. 进程阻塞队列
A. 仅Ⅱ、Ⅲ
B. 仅Ⅰ、Ⅳ
C. 仅Ⅰ、Ⅱ、Ⅲ
D. 仅Ⅰ、Ⅱ、Ⅳ
参考答案:
正确答案是选项 C:仅Ⅰ、Ⅱ、Ⅲ。
解析:
在分时系统中,时间片轮转调度算法是一种常用的调度算法。为了实现时间片轮转调度,操作系统需要使用以下数据结构或程序:
Ⅰ. 进程控制块 (Process Control Block, PCB):进程控制块用于描述和管理每个进程的信息。PCB包含了进程的各种属性和状态,如进程标识符、程序计数器、寄存器值等。在时间片轮转调度中,需要通过修改进程控制块中的一些信息来实现调度算法。因此,选项 Ⅰ 正确。
Ⅱ. 时钟中断处理程序:时钟中断处理程序是一种特殊的中断处理程序,负责在每个时钟周期结束时执行一些操作。它通常会检查当前进程的时间片是否用完,如果是,则触发进程调度。在时间片轮转调度中,时钟中断处理程序会从就绪队列中选择一个进程,并为其分配时间片。因此,选项 Ⅱ 正确。
Ⅲ. 进程就绪队列:进程就绪队列用于存储所有处于就绪态的进程。在时间片轮转调度中,调度程序会从就绪队列中选择下一个要执行的进程,并为其分配时间片。因此,选项 Ⅲ 正确。
而进程阻塞队列并不直接参与时间片轮转调度过程。进程阻塞队列用于存储处于阻塞态的进程,在满足某些条件后才能被唤醒并转移到就绪队列中。因此,选项 Ⅳ 错误。
综上所述,分时系统实现时间片轮转调度所需要使用的数据结构或程序是进程控制块 (Ⅰ)、时钟中断处理程序 (Ⅱ) 和进程就绪队列 (Ⅲ)。
正确答案是选项 C:仅Ⅰ、Ⅱ、Ⅲ。
问题: 下列事件中,可能引起进程调度程序执行的是( )。
Ⅰ. 中断处理结束
Ⅱ. 进程阻塞
Ⅲ. 进程执行结束
Ⅳ. 进程的时间片用完
A. 仅Ⅰ、Ⅲ
B. 仅Ⅱ、Ⅳ
C. 仅Ⅲ、Ⅳ
D. Ⅰ、Ⅱ、Ⅲ和Ⅳ
参考答案:
正确答案是选项 D:Ⅰ、Ⅱ、Ⅲ和Ⅳ。
解析:
以下是对每个事件进行解析:
Ⅰ. 中断处理结束:当系统发生中断时,会运行相应的中断处理程序。在中断处理程序执行完毕之后,需要根据具体情况来确定下一步的操作。如果中断处理程序触发了某些条件,例如当前进程的时间片用完,就会发生进程调度。因此,选项 Ⅰ 可能引起进程调度程序的执行。
Ⅱ. 进程阻塞:当一个进程发起阻塞请求时,它将被移出CPU,并放入阻塞队列等待满足其阻塞条件。此时,进程调度程序需要从就绪队列中选择另一个进程执行,以充分利用CPU资源。因此,选项 Ⅱ 可能引起进程调度程序的执行。
Ⅲ. 进程执行结束:当一个进程执行完毕时,它将释放CPU,并且进程调度程序需要选择下一个进程运行。因此,选项 Ⅲ 可能引起进程调度程序的执行。
Ⅳ. 进程的时间片用完:在一些调度算法中,例如时间片轮转调度算法,每个进程被分配一个时间片来使用CPU。当一个进程的时间片用完时,它将让出CPU,并且进程调度程序需要从就绪队列中选择下一个进程运行。因此,选项 Ⅳ 可能引起进程调度程序的执行。
综上所述,引起进程调度程序执行的事件包括中断处理结束(Ⅰ)、进程阻塞(Ⅱ)、进程执行结束(Ⅲ)和进程的时间片用完(Ⅳ)。
正确答案是选项 D:Ⅰ、Ⅱ、Ⅲ和Ⅳ。
问题: 若系统中有n(n≥2)个进程,每个进程均需要使用某类临界资源2个,则系统不会发生死锁所需的该类资源总数至少是( )。
A. 2
B. n
C. n+1
D. 2n
参考答案:
正确答案是选项 C:n+1。
解析:
死锁是指在多进程环境下,由于进程之间的互斥、占有和等待资源等特性,导致它们无法继续执行的状态。而避免死锁的关键在于合理地分配和管理资源。
根据题目给出的条件:
为了避免死锁发生,我们需要确保所有进程都能够获得足够的资源以继续执行,即不存在进程无法满足资源需求的情况。
考虑极端情况:
当临界资源数为n时,每个进程仅拥有1个临界资源并等待另一个资源,这种情况下会发生死锁。
当临界资源数为n+1时,至少有一个进程可以获得2个临界资源,顺利运行完后释放自己的临界资源,使得其他进程也能顺利运行,不会产生死锁。
另一种解释方式是使用死锁公式 m > n * (r-1),其中 m 是系统中临界资源的总数,n 是并发进程的个数,r 是每个进程所需临界资源的个数。如果这个不等式成立,那么系统不会发生死锁。将本题的数据代入,得到 m > n * (2-1),即只要系统中临界资源的总数至少是 n+1,就可以避免死锁。
因此,为了避免死锁发生,该类临界资源总数至少为 n+1。
正确答案是选项 C:n+1。