-
多道程序设计技术是操作系统中最早引入的软件技术,引入它的目的是
- 提高系统的实时响应速度
- 充分利用内存,有利于数据共享
- 充分利用CPU,提高CPU利用率
- 提高文件系统性能,减少内外存之间的信息传输量
-
下列关于进程控制块PCB的叙述中,哪一个是错误的?
操作系统利用PCB描述进程的基本特征
一个PCB唯一对应一个进程
PCB可用于描述进程的运动变化过程
-
PCB通常保存在磁盘上
PCB进程控制块是进程的静态描述,由PCB、有关程序段和该程序段对其进行操作的数据结构集三部分组成
PCB一般包括:
1.程序ID(PID、进程句柄):它是唯一的,一个进程都必须对应一个PID。PID一般是整形数字
2.特征信息:一般分系统进程、用户进程、或者内核进程等
3.进程状态:运行、就绪、阻塞,表示进程现的运行情况
4.优先级:表示获得CPU控制权的优先级大小
5.通信信息:进程之间的通信关系的反映,由于操作系统会提供通信信道
6.现场保护区:保护阻塞的进程用
7.资源需求、分配控制信息
8.进程实体信息,指明程序路径和名称,进程数据在物理内存还是在交换分区(分页)中
9.其他信息:工作单位,工作区,文件信息等
-
在某一条件下,进程会在状态之间相互转换。下列哪一种进程状态转换不会发生?
- 等待态→就绪态
- 就绪态→运行态
- 就绪态→等待态
- 运行态→等待态
-
假设某单处理器计算机系统中有10个进程,则系统中处于等待状态的进程最多有几个?
- 0
- 1
- 9
- 10
-
下列关于进程控制操作的叙述中,哪一个是不正确的?
- 一个进程可以使用创建原语建立一个新的进程
- 撤销进程就是释放该进程占有的内存资源
- 阻塞原语使一个进程变为等待状态
- 唤醒原语使从等待队列中撤出进程
进程撤销
释放进程占有的资源只是撤销进程过程的一部分。
当进程完成任务或在执行的过程中发生异常时,系统将调用进程终止原语来终止该进程。根据被终止进程的标识符从PCB集合中查找到该进程的PCB,从中读出该进程的状态,终止该进程的执行;若干该进程还有子孙进程,应该讲其所有子孙进程终止,防止它们成为不可控进程;然后回收进程所拥有的资源,最后将被终止进程从所在队列中移出,等待其它程序来收集信息
-
下列哪一项工作不是创建进程时所作的?
- 给新进程分配一个唯一标识
- 给新进程分配虚拟地址空间
- 初始化新进程的进程控制块
- 将处理器控制权交给新进程
-
进程控制原语有多种,下列哪一项不是进程控制原语?
- 改变进程优先级
- 挂起进程
- 进程唤醒
- 进程上下文切换
创建原语的执行过程:
- 为新进程分配一个唯一的进程标识号,并申请一个空白的PCB(PCB是有限的)。若PCB申请失败则创建失败。
- 为进程分配资源,为新进程的程序和数据、以及用户栈分配必要的内存空间(在PCB 中体现)。注意:这里如果资源不足(比如内存空间),并不是创建失败,而是处于”等待状态“,或称为“阻塞状态”,等待的是内存这个资源。
- 初始化PCB,主要包括初始化标志信息、初始化处理机状态信息和初始化处理机控制信息,以及设置进程的优先级等。
- 如果进程就绪队列能够接纳新进程,就将新进程插入到就绪队列,等待被调度运行。
撤销原语的执行过程:
- 根据被终止进程的标识符,检索PCB,从中读出该进程的状态。
- 若被终止进程处于执行状态,立即终止该进程的执行,将处理机资源分配给其他进程。
- 若该进程还有子进程,则应将其所有子进程终止。
- 将该进程所拥有的全部资源,或归还给其父进程或归还给操作系统。
- 将该PCB从所在队列(链表)中删除。
唤醒原语的执行过程:
- 在该事件的等待队列中找到相应进程的PCB。
- 将其从等待队列中移出,并置其状态为就绪状态。
- 把该PCB插入就绪队列中,等待调度程序调度。
阻塞原语的执行过程是:
- 找到将要被阻塞进程的标识号对应的PCB。
- 若该进程为运行状态,则保护其现场,将其状态转为阻塞状态,停止运行。
- 把该PCB插入到相应事件的等待队列中去。
进程切换的过程如下:
- 保存处理机上下文,包括程序计数器和其他寄存器。
- 更新PCB信息。
- 把进程的PCB移入相应的队列,如就绪、在某事件阻塞等队列。
- 选择另一个进程执行,并更新其PCB。
- 更新内存管理的数据结构。
- 恢复处理机上下文。
-
在UNIX操作系统中运行如下C语言程序:
int main() { pid_t pid; int a=5; pid = fork(); if (pid==0) printf ("This is the son process, a=%d ", --a); else printf ("This is the dad process, a=%d ", ++a); }
假设编译链接过程正确且程序正确执行,那么运行结果是
-
This is the son process, a=4
This is the dad process, a=6
This is the son process, a=4
This is the dad process, a=6
-
This is the dad process, a=4
This is the son process, a=6
fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:
1)在父进程中,fork返回新创建子进程的进程ID;
2)在子进程中,fork返回0;
3)如果出现错误,fork返回一个负值;在fork函数执行完毕后,如果创建新进程成功,则出现两个进程,一个是子进程,一个是父进程。在子进程中,fork函数返回0,在父进程中,fork返回新创建子进程的进程ID。我们可以通过fork返回的值来判断当前进程是子进程还是父进程。
-
-
进程映像由几部分组成,下列哪一项不属于进程映像?
- 进程控制块
- 程序代码
- 用户栈
- 就绪队列
进程映像是进程执行的上下文环境,包括处理机中各通用寄存器的值,进程的内存映像,打开文件的状态和进程占用资源的信息等。它是一个内存级的实体并由:
进程控制块(PCB)
进程执行的代码(code)/程序
进程执行时所用的数据/ 数据集合
进程执行时使用的工作区组成。 -
某操作系统在进程中引入了多个执行序列——线程,那么下列叙述中,哪些描述了进程与线程的联系和区别?
- 进程是资源分配的基本单位
- 进程是处理器调度的基本单位
- 线程是资源分配的基本单位
- 线程是处理器调度的基本单位
- 线程不能独立于进程而存在
-
下列各种事件中,一定产生进程状态改变的事件是
- 运行的进程正常退出
- 运行的进程因种种原因而阻塞
- 新进程创建成功
- 阻塞的进程被唤醒
- 运行的进程时间片用完
-
进程运行时,其硬件状态保存在相应寄存器中;当它被切换下CPU时,其硬件状态保存在内核栈中。(❌)
将CPU硬件状态从一个进程换到另一个进程的过程称为上下文切换
进程运行时,其硬件状态保存在CPU上的寄存器中,这些寄存器包括:程序计数器、程序状态寄存器、栈指针、通用寄存器、其他控制寄存器的值
进程不运行时,这些寄存器的值保存在进程控制块PCB中;当操作系统要运行一个新的进程时,将PCB中的相关值送到对应的寄存器中
-
当某个正在执行的进程需要进行I/O操作时,可以通过调用挂起原语将自己从运行状态变为等待状态。(❌)
阻塞原语
用户级线程执行时,同一进程不同线程的切换不需要内核支持。(✔️)
-
在支持线程的操作系统中,同一个进程中的各个线程共享该进程的用户栈。(❌)
线程共享的环境包括:进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID
堆:是大家共有的空间,分全局堆和局部堆。全局堆就是所有没有分配的空间,局部堆就是用户分配的空间。堆在操作系统对进程初始化的时候分配,运行过程中也可以向系统要额外的堆,但是记得用完了要还给操作系统,要不然就是内存泄漏。
栈:是个线程独有的,保存其运行状态和局部自动变量的。栈在线程开始的时候初始化,每个线程的栈互相独立,因此,栈是thread safe的。操作系统在切换线程的时候会自动的切换栈,就是切换SS/ESP寄存器。栈空间不需要在高级语言里面显式的分配和释放。
第三周测验:进程线程模型
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 又来到了一个老生常谈的问题,应用层软件开发的程序员要不要了解和深入学习操作系统呢? 今天就这个问题开始,来谈谈操...