【操作系统-chapter2】进程管理

文章目录

1. 进程与线程

1.1 进程的概念与特征

1.1.1 进程的定义

1. 程序:是`静态`的,就是一个存放在磁盘中的可执行文件,就是一系列指令的集合。

2. 进程:是`动态`的,指程序的一次执行过程,是系统进行`资源分配`和`调度`的独立单位。
	* 注意:
		1. 调度是指OS决定让哪个进程在CPU上运行。
		2. 引入线程的概念后,调度的基本单位不再是“进程”,而是“线程”

3. 进程实体/进程映像:是`静态`的。指某一时刻进程的快照。
	* 注意:平时我们说的某个进程由什么组成,实际上是指进程快照而不是进程,如果不做说明默认进程指的是进程快照。

4. 进程控制块(PCB):是进程存在的唯一标识。当进程被创建时操作系统为其创建`PCB`,当进程结束时,会回收其`PCB`。
	* 注意:
		1. 操作系统根据`PCB`识别进程。
		2. `PCB`本质上是一个结构体,里面定义了进程ID(PID)、记录了分配了哪些资源(分配了多少内存,哪些I/O设备,哪些文件等)、记录了
			进程的运行情况(如CPU使用时间,流量等)等等。
		3. 操作系统对进程进行管理工作所需的信息都在PCB中。

1.1.2 进程的组成

在这里插入图片描述

注意:

  1. PCB是给操作系统用的,程序段和数据段是给进程自己用的,与进程自身的运行逻辑有关。
  2. 进程(实体)由PCB、数据段和程序段三部分组成
  3. 一个程序的共享程序段必须用可重入编码编写
    在这里插入图片描述

程序的运行过程:
在这里插入图片描述

1.1.3 进程的特征

在这里插入图片描述

注意:

  1. 进程是多道处理程序中的概念,所以提到进程,其肯定是具有并发性的。
  2. 单道程序具有:顺序性封闭性可再现性
  3. 进程的并发是无序的:即并发进程之间可能是有交往的,也可能是无交往的。

1.2 进程的状态与转换

1.2.1 进程的五种状态

在这里插入图片描述

1.2.2 进程的状态转换(丁字裤模型)

在这里插入图片描述

注意:进程进入阻塞态是主动行为标志是进行需要等待某个事件或资源。
在这里插入图片描述

1.2.3 进程的组织方式

* 进程的组织方式(进程之间是如何管理的)
	1. 链接方式
	2. 索引方式

在这里插入图片描述
在这里插入图片描述

1.2.4 小结

在这里插入图片描述

1.3 进程控制

1.3.1 基本概念

进程控制:实现进程的状态转换。

进程的状态转换必须一气呵成,而想要达到一气呵成的效果,我们就必须使用原语来实现。而原语的实现是使用关中断指令开中断指令两条特权指令完成的。

那么为什么进程的状态转换必须一气呵成?举一个例子:
在这里插入图片描述

那么如何用关中断和开中断两条特权指令实现原子性:
在这里插入图片描述

1.3.2 进程控制相关的原语

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

注意:

  • 使用原语对进程进行管理和控制。而信号量只是由于进程之间的同步机制管理。
    在这里插入图片描述

1.3.3 小结

在这里插入图片描述

1.4 进程通信

进程通信:指进程间的信息交换。

进程是系统分配资源和调度的独立单位,因此各进程是相互独立的,一个进程并不能直接访问另一个进程的地址(数据)。然而,实际上进程之间是需要相互通信的,OS提供了一些进程通信的方法:

  1. 共享存储
  2. 消息传递
  3. 管道通信
  4. 文件映射
  5. 套间字

1.4.1 共享存储

在这里插入图片描述

1.4.2 消息传递

在这里插入图片描述

1.4.3 管道通信

在这里插入图片描述

注意:

  1. 管道通信,实质上使用了队列实现的。
  2. 读进程最多只有一个。

1.4.4 利用文件进行通信(文件映射)

这个不难理解,大家都有编程的经验。如果我们运行两个源程序,也就是两个进程,一个进程创建一个文件并写入数据后,另一个进程去读该文件,可以获取相应的信息,从而进行通信。

1.4.5 套间字(socket)

socket能够实现跨主机间的进程进行通信。

1.4.6 小结

在这里插入图片描述

注意:数据库不能用于进程的通信。

1.5 线程、多线程模式

1.5.1 线程的概念

为什么要引入线程?举一个例子:
在这里插入图片描述
线程:是CPU执行(或调度)的基本单元,也是程序执行流的最小单元。
进程:是系统分配资源的基本单元。

注意:引入线程之后,CPU调度的基本单元不再是“进程”,而是“线程”。

引入线程之后,带来的具体变化:
在这里插入图片描述
在这里插入图片描述

1.5.2 线程

在这里插入图片描述

1.5.2.1 线程实现的两种方式
1.5.2.1.1 用户级线程

在这里插入图片描述

1.5.2.1.2 内核级线程

在这里插入图片描述

1.5.2.2 多线程模式
1.5.2.2.1 一对一模型(内核级线程)

在这里插入图片描述

1.5.2.2.2 多对一模型(用户级线程)

在这里插入图片描述

注意:

  • 内核级的线程才是处理机分配的单元,而用户级线程不是,因为其不需要内核的支持,也不需要内核进行管理。
    在这里插入图片描述
1.5.2.2.3 多对多模型(用户级和内核级的组合)

在这里插入图片描述

1.5.2.3 小结

在这里插入图片描述

练习:
在这里插入图片描述

2. 处理机调度

2.1 调度的概念(七态模型、三级调度)

七态模型,在五态模型下加入了阻塞挂起就绪挂起两种状态:
在这里插入图片描述

注意:

  1. 暂时调入到外存【具体是外存的对换区】等待的进程状态称为挂起状态, 具体有阻塞挂起就绪挂起两种。
  2. 暂时挂起的进程,其PCB还在内存当中,可能在就绪队列中也可能在阻塞队列中。
  3. 挂起阻塞的区别:两种状态都是进程暂时得不到CPU的服务,但是挂起态是将进程调入到外存【具体是将程序段和数据段调入外存】,而阻塞态下进程还在内存中。

一个作业从提交开始到完成,要经历以下三级调度:
在这里插入图片描述
这三级调度会影响进程的五态之间的切换。

2.2 进程调度的时机、切换与过程

在这里插入图片描述

注意:

  1. 进程在操作系统内核程序的临界区内不能进行调度与切换,但是在临界区内可以进行调度和切换。
    因为OS内核程序的临界区是非常重要的,如果临界资源不尽快释放(比如进入挂起状态),很可能影响OS的其他管理工作;而普通临界区就不是很重要。比如一个打印机互斥访问,正在访问该打印机时,CPU是空闲的,应该将进程变为阻塞态,将宝贵的CPU资源让给其他进程使用。
  2. “侠义的进程调度”:从就绪队列中选中一个要运行的进程。(这个进程可以是刚刚被暂停执行的进程,也可以是另一个进程,后者需要进程切换
    进程切换:一个进程让出CPU,由另一个进程占用CPU 。
    “广义的进程调度”:包括选择一个进程和进程切换两个步骤。
  3. 进程切换是以CPU为核心,故进程切换只能是运行态与就绪态运行态与阻塞态运行态与就绪挂起态间的转换。
    在这里插入图片描述
  4. 非抢占式方式的系统:开销小,但是无法处理紧急任务,适合于早期的批处理系统。
    抢占式方式的系统:开销大,可以处理紧急任务,也可以时间片轮转,适合于分时操作系统和实时操作系统。
  5. 进程的优先级改变时间不是在被调度后立即改变,而是在运行完后改变。
    在这里插入图片描述

2.3 调度算法的评价指标

在这里插入图片描述

2.4 调度算法

2.4.1 先来先服务算法(FCFS)

在这里插入图片描述

2.4.2 短作业优先算法(SJF:shortest job first)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意:抢占式的SJF比非抢占式的SJF的平均周转时间/平均带权周转时间/平均等待时间都要短,而非抢占式的SJF比其他算法的平均周转时间/平均带权周转时间/平均等待时间都要短。

2.4.3 高响应比优先算法(HRRN:Highest Response Ratio Next)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.4.5 时间片轮转(RR:Round Robin)

在这里插入图片描述

在这里插入图片描述

2.4.6 优先级调度

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.4.7 多级反馈队列调度

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.4.8 小结

在这里插入图片描述
在这里插入图片描述

注意:静态优先级:在创建进程时确定,整个运行期间不能改变。

3. 进程同步机制

注意:进程同步机制有类:

  1. 进程同步(直接同步)
  2. 进程互斥(间接同步)

3.1 基本概念

(1)进程同步:

进程同步直接制约关系,指为完成某个任务而建立的两个或者多个进程,这些进程因为需要在某些位置上协调他们的工作次序而产生的制约关系。简而言之,就是解决进程异步的不可预知性【异步由并发导致】,解决的途径就是规定他们的工作次序。

比如,管道通信时,通信的进程是同步的,而不是异步的。因为,我们一定是先写数据再读数据,有先后工作次序,即这两个进程是相互制约的,而不是独立的。
在这里插入图片描述

资源共享有两种方式:
在这里插入图片描述
(2)进程互斥:

进程互斥间接制约关系,指当一个进程访问某临界资源时,另一个想要访问该临界资源的进程必须等待。当前访问临界资源的进程访问结束,释放资源后,另一个进程才能去访问临界资源。

在这里插入图片描述

注意:

  1. 临界区是指访问临界区的那段代码,而不是临界资源。
    在这里插入图片描述
  2. 不同进程间的共享变量无关。
    在这里插入图片描述

3.2 实现临界区互斥的基本方法

3.2.1 软件实现

3.2.1.1 单标志法

在这里插入图片描述

注意:

  1. turn变量背后的逻辑是“谦让”
  2. 违反了”空闲让进“原则:进程只能P0-P1-P0-P1这样轮流的进行,如果此时轮到P0,但是P0一直不访问临界资源,会导致P1也无法访问,从而导致死锁。
3.2.1.2 双标志先检查

在这里插入图片描述

注意:

  1. 双标志位先检查违反了”忙则等待“原则,可能出现两个同时进入临界区的情况。原因是”检查“和”上琐“不是一气呵成的
3.2.1.3 双标志后检查

在这里插入图片描述

注意:

  1. 双标志后检查法虽然解决了”忙则等待“的问题,但是又违背了”空闲让进“和”有限等待“原则
  2. 双标志后检查会导致饥饿现象【各个进程都长时间无法访问临界资源】
3.2.1.4 Peterson算法

在这里插入图片描述

注意:

  1. 谁最后做出”谦让“动作,谁就失去了临界资源的使用权。
  2. Peterson算法遵循了”空闲让进“、”忙则等待“、”有限等待“原则,但是不遵循”让权等待“原则。【while循环会一直占用CPU】
3.2.1.5 小结

在这里插入图片描述

注意:先判断是哪个软件方法,从而得到不能实现什么。

  1. 只有turn变量的是单标志法,不能实现空闲让进
  2. flag[]数组变量,且whle()循环flag[0] = true前,是双标志先检查法,不满足忙则等待
  3. flag[]数组变量,且whle()循环flag[0] = true后,是双标志后检查法,不满足空闲让进有限等待
  4. flag[]数组变量,且有turn变量,是Peterson算法,不满足让权等待
    在这里插入图片描述

3.2.2 硬件实现

3.2.2.1 中断屏蔽方式

在这里插入图片描述

3.2.2.2 硬件指令
3.2.2.2.1 TS(TSL)指令

在这里插入图片描述

3.2.2.2.2 swap指令

在这里插入图片描述

3.2.2.4 小结

在这里插入图片描述

注意:硬件和软件实现临界区互斥都没有解决”让权等待“的问题。
在这里插入图片描述

3.3 信号量机制

  1. 信号量就是一个变量,用来标识系统中某种资源的数量。
  2. 用系统提供的一对原语wait(S)原语和signal(S)原语,又称P(S)、V(S)操作来对信号量进行操作。
  3. 原语是由开中断和关中断两条特权指令实现的。

上面提到,信号量就是一个变量,实际上他可以是一个整型信号量也可以是一个记录型信号量。

3.3.1 整型信号量

在这里插入图片描述

注意:

  1. 对信号量的操作只有三种:初始化、P操作、V操作。
  2. 整型信号量的P操作,本质上就是双标志先检查法的进入区的代码,但是在这里”检查“和”上琐“是一气呵成,在原语中的,不会出现并发的问题,所以,遵循”忙则等待“原则。
  3. 存在的问题:不遵循”让权等待“原则

3.3.2 记录型信号量

在这里插入图片描述

注意:

  1. 由于记录型信号量在不能访问临界区的时候用clock(S.L)进行自我阻塞,让出CPU的使用权,所以其满足”空闲让进“、”忙则等待“、”有限等待“、”让权等待“四个原则。

3.3.3 小结

在这里插入图片描述

注意:如果题目没有说明,则默认P、V操作指的是对记录型信号量操作。

3.4 使用信号量实现进程同步、进程互斥

3.4.1 使用信号量实现进程互斥

在这里插入图片描述

注意:

  1. 对于不同的临界资源需要设置不同的互斥信号量。
  2. P、V操作必须成对出现。
  3. 互斥信号量的初值必为1.

3.4.2 使用信号量实现进程同步

在这里插入图片描述

注意:

  1. 实现进程同步的信号量初始值为资源的个数,而进程互斥的信号量初始值必为1。
  2. 先V后P,因为后面的代码在睡眠,而睡眠通过P操作实现【因为P操作才是睡眠】,需要前面的用V操作唤醒【因为V操作才有唤醒功能】。

3.4.3 进程的前驱关系(多级进程同步问题)

在这里插入图片描述

3.4.4 小结

在这里插入图片描述

3.5 经典进程同步问题

3.5.1 消费者与生产者问题(典型同步问题)

注意:

  1. 关于缓冲区,有两点需要注意
    1. 缓冲区必须是半双工
    2. 类似于缓冲区的问题中,"缓冲区"大小为1,则可以只设置一个变量。若"缓冲区"大小大于1,则需要设置full 和 empty两个变量。
  2. 关于连续取出的问题,用for循环:
    在这里插入图片描述
3.5.1.1 单类生产者与单类消费者

在这里插入图片描述
最终代码:
在这里插入图片描述

注意:

  1. 互斥的P操作必须在同步的P操作之后,否则会导致死锁问题。所以这里的P操作的先后顺序不可以互换。
  2. 互斥的V操作和同步的V操作是可以互换的。
3.5.1.2 多类生产者与多类消费者

在这里插入图片描述

最终代码:
在这里插入图片描述

注意:如果缓冲区大小为1,则可以不设置互斥信号量也可以实现互斥。也就是这里可以不设置,mutex变量。

3.5.1.3 吸烟者问题(一个多类生产者与多类消费者)

在这里插入图片描述
最终代码:
在这里插入图片描述

注意:这里缓冲区大小为1,可以用mutex进行互斥也可以不用。

3.5.2 读者和写者问题(典型互斥问题)

在这里插入图片描述

在这里插入图片描述

注意:

  1. 解决的问题:以上用RW信号量解决了写者-写者互斥写者-读者互斥问题。
  2. 存在的问题:读者-读者应该是不互斥的。

在这里插入图片描述

注意:

  1. 解决的问题:用count信号量【表示当前读文件的读者个数】,第一个读者加锁,最后一个读者解锁的方式解决了读者-读者应该是不互斥的问题。
  2. 存在的问题:如果两个读者并发执行到P(rw),会使得两个读者都阻塞。原因是if(count==0)P(rw)语句不能一气呵成,同理if(count==0)V(rw)也是

在这里插入图片描述

注意:

  1. 解决的问题:用mutex信号量使得if(count==0)P(rw)变为一对原语操作,能一气呵成,解决了读者并发带来的问题。
  2. 存在的问题:如果读者一直读,写者就一直不能写,相当于是读者优先,会导致写者饥饿。

在这里插入图片描述

注意:

  1. 解决的问题:用w信号量实现”写优先“或者”读写公平“。

3.5.3 哲学家就餐问题

在这里插入图片描述
采用第三种方法:
在这里插入图片描述

3.5.4 生产者消费者问题、读者、写者问题、哲学家就餐问题的区别

生产者、消费者问题与读者、写者问题的区别:

  1. 生产者、消费者问题中,缓冲区的内容会因生产者生产而增加,因消费者的消费而减少。
  2. 读者、写者问题中,读者不会改变缓冲区内容,因此多个读者可同时访问缓冲区;只有写者能改变缓冲区,且必须缓冲区没有其他读者和写者时才能改变。
  3. 生产者、消费者问题一般用来解决复杂发同步问题,而读者、写者问题一般用来解决复杂的互斥问题。

哲学家就餐问题是使用两个临界资源,生产者、消费者问题与读者、写者问题只是使用一个临界资源。

3.6 管程

3.6.1 为什么引入管程

在信号量机制中,每个要访问临界资源的进程必须自备同步的PV操作,大量分散的同步操作给系统管理带来了麻烦,且容易造成死锁。于是,出现了管程,每个进程无须自己实现PV操作,调用管程中的过程就可以实现进程互斥与同步。

定义一个管程就相对于定义一个类,在这个类的函数里面使用P, V操作实现进程同步和进程互斥,然后外部想实现同类型问题的进程同步和进程互斥问题时直接调用管程里的函数就可以实现。

由此可见,管程就是对进程同步和进程互斥问题的封装,使得调用者不需要关心如何实现进程同步和进程互斥的。

即管程的目的:简化信号量机制编程的麻烦、易出错的问题,更方便的实现进程互斥和进程同步。

3.6.2 管程的组成与特征

在这里插入图片描述

注意:管程特征详细说明:
在这里插入图片描述

注意:管程中的signal操作和信号量中的V操作不同。同理,管程中的wait操作和信号量中的P操作不同。

  • 原因:参数不同。信号量中的V一定会改变信号量的值S = S + 1,而管程中的signal操作是针对某个变量的值,要想使得进程进入阻塞是需要调用变量的wait()方法,这样其他进程就能进入管程。唤醒是signal()
    在这里插入图片描述

3.6.3 管程的实际应用例子

在这里插入图片描述
在这里插入图片描述

3.6.4 小结

在这里插入图片描述

4. 死锁

4.1 死锁的概念

4.1.1 死锁、饥饿、死循环的区别

在这里插入图片描述

4.1.2 死锁的必要条件

在这里插入图片描述

注意:死锁一定满足循环等待条件,但是循环等待条件不一定导致死锁。

4.1.3 什么时候发生死锁

在这里插入图片描述

4.1.4 死锁的处理策略

在这里插入图片描述

4.1.5 小结

在这里插入图片描述

4.2 死锁的处理

在这里插入图片描述

4.2.1 预防死锁

在这里插入图片描述

4.2.2 避免死锁(银行家算法)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.2.3 死锁的检查和解除

4.2.3.1 死锁的检查

资源分配图:是一个有向图,用于表示某时刻系统资源与进程之间的状态。

死锁定理:根据资源分配图判断是否死锁的过程。(死锁定理用于检测死锁)

注意:

  1. 资源方框进程圆圈
  2. 指向资源的是请求边指向进程的是分配边
  3. 出现了环路,并不一定导致死锁,因为循环等待只是死锁的必要条件。
  4. 没有环路,则一定不会产生死锁

以下消除边的过程称为死锁定理:(死锁定理用于检测死锁)
在这里插入图片描述

注意:如果最后整个图中没有边了,则说明不会产生死锁,否则会产生死锁。

在这里插入图片描述

例子:

  1. 死锁的一定有环,而有环不一定死锁。
    在这里插入图片描述
  2. 题形:
    在这里插入图片描述
  3. 题形:
    在这里插入图片描述
4.2.3.2 死锁的解除

在这里插入图片描述

4.2.3.3 小结

在这里插入图片描述

练习:
在这里插入图片描述
在这里插入图片描述

5. 补充

1. 线程可以独立执行程序<=>线程是CPU执行的基本单元

2. 进程与程序的根本区别:动态和静态的区别,而不是是否调入内存的区别。

3. 判断:在单处理器系统中,任何时刻都只有一个进程处于运行态。
		错,当发生死锁时,所有的进程都处于阻塞态。

4. 判断:进程申请处理器得不到满足时,进入阻塞态。
		错,是进入就绪态。

5. 判断:在单处理器中,有10个进程,则最多有10个进程处于就绪态。
		错,最多只能9个。最多10个处于阻塞态。

6. 系统进程所请求一次I/O操作完成后,将使得进程由__态变为__态。
		系统进程发出请求,自己会变为阻塞态;要求得到满足后,变为就绪态。

7. 判断:进程是在多程序环境中的完整程序
		错,核心进程是程序,这明显错误。

8. 系统动态DLL库中的系统线程,被不同的进程所调用,他们是__(相同/不同/可能相同可能不同/不能被调用)的线程。
	相同。“系统”中的同一个进程/线程可以由系统调用的方式被不同的进程/线程多次使用。
	DLL库:可以让进程调用不属于其可执行代码的函数。该函数位于DLL进程中的某个线程中,允许多个进程同时访问,类似于只读。

9. 下列不属于PCB的是( )  A.进程ID  B.CPU状态  C.堆栈指针  D.全局变量
	选D。PCB有四类信息:
		1. 进程描述信息 eg:进程ID
		2. 进程控制和管理信息 eg:程序和数据地址、进程同步和通信机制、资源清单、链接指针。
		3. 进程资源信息 eg:堆栈指针
		4. CPU现场信息 eg:CPU的状态 

10. 在一个多道系统中,若就绪队列队列不空,就绪的进程数目越多,处理器的效率__
		不变。因为题目说了就绪队列不空,CPU会一直给进程提供服务。如果是就绪队列为空,则CPU效率下降。

11. 进程自身决定从__态到__态(三态模型中)。
		就绪态->运行态:由调度算法决定
		运行态->就绪态:时间片用完,优先更高的进程来临,有更紧急的任务处理,这都是“被动”放弃。
		运行态->阻塞态:程序自身决定,比如发生异常,主动阻塞(等待I/O等)
		阻塞态->就绪态:由协作进程决定。

12. 下列选项,导致新进程被创建的是( )
		A. 用户登入成功   B.设备分配   C.启动程序执行
		A、C. 用户登入成功后,要创建相应的进程,至少应该有用户权限的相关信息。设备分配是由操作系统决定的,
		或者用户指定,并不需要创建新的进程。

13. 判断:多道程序设计系统中,同一进程内的线程和不同进程间的线程都可以并发执行。
		正确。

14. 多线程系统中,进程P创建的若干线程不能共享的是( )
		A. 进程P的代码段         B.进程P中打开的文件。
		C. 进程P的全局变量     D.进程P中某线程的栈指针。
		D。进程中的线程可以共享进程内的全部资源,但是线程间不应该知道对方的存在,即线程的栈指针不应该被共享

15. 进程被唤醒,指的是进程从阻塞态进入了就绪态。从运行态到就绪态的不算。

16. 进程可以创建进程或者线程,线程只能创建线程。(线程不能创建进程)

17. 管道:实际上是一种固定大小的缓冲区,管道对于管道两端的进程而言,就是一个文件。但是他不是普通文件,
	也不是某种系统文件而是自立门户、单独构成的一种文件,并且只存在于内存中。采用类似半双工的通信方式。
	当管道满时,写操作会被阻塞;当管道空时,读操作会被阻塞。

18. 判断:OS为每个用户级线程创建一个线程控制块。
	错误。用户级线程是多对一的,而这里是一对一,这是内核级线程的特点。
	正确说法应该是:OS为所有的用户级线程创建一个线程控制块。

19. ( )有利于CPU繁忙型作业,而不利于I/O繁忙型作业。
	A.时间片轮转   B.FCFS   C.SJF   D.优先级调度算法
	选B。 CPU繁忙型指该作业需要大量的CPU时间处理,是长作业。I/O繁忙型指CPU处理时要频繁的请求I/O操作。

20. 某系统正在执行进程P1,P2,P3.各个进程的计算时间和I/O时间比例如下:
		进程		计算时间		I/O时间
		 P1           90%         10%	
		 P2           50%         50%	
		 P3           15%         85%	
	为提高系统资源利用率,优先级的设置为_____
	答案:P3 > P2 > P1
	原因:I/O时间的优先级高于计算时间的优先级;系统进程高于用户进程;前台进程高于后台进程。

21. 判断:作业以用户任务为单位,进程以操作系统控制为单位。
	正确。作业是从用户角度出发,他由用户提交,以用户任务为单位。进程是从OS角度出发,由OS生成,OS资源分配和管理的基本单元。

22. ①分时系统的时间片固定,因此用户数越多,响应时间越长。
	②UNIX是一个强大的多用户、多任务系统,按照操作系统的分类,属于分时操作系统。
	③中断向量地址是中断服务例行程序的入口地址。
	④中断发生时,由硬件处理。主要原因是为了提高处理速度。
	正确的有哪些?
	答案:①② 中断向量用于存放中断服务例行程序的入口地址,因此中断向量地址是该入口地址的地址。主要为了安全、可靠。

23. 判断:在进程结束时、创建新进程、系统调用完成后都能进行处理机调度。进程处于临界区不能进行处理器调度。
	错误。前面部分是对的,后面是错的。进程只有在非常重要的地方才不允许调度,比如内核临界区,其他地方都允
	许被调度。比如I/O设备临界区就允许被调度。

24. 判断:一个正在访问临界资源的进程由于申请等待I/O而被中断时,允许其他进程抢占处理器,但不得进入该临界区。
	正确。不允许进入是因为受到“锁”的限制。

25. 临界区:不是指临界资源,如共享的数据、代码或硬件设备,而是访问临界资源的那段代码,如PV操作,加减锁等。

26. 读者-写者问题即存在互斥关系,也存在同步关系。(开始时,必须先写再读)

27. 判断:共享程序段必须用可重入编码编写。
	正确。因为共享程序段可能被多个进程使用,所以必须使用可重入编码编写,否则无法实现共享。

28. 若系统中有5个并发进程涉及某个相同的变量A,则变量A的相关临界区是由__个临界区组成。
	答案:5。临界区定义:“访问”临界资源的那段代码【注意是“访问”,不是“实现”】,每个进程都有,所以是5

29. 判断:管程是由编程语言支持的进程同步机制。
	正确。管程是由编程语言支持的进程异步机制也是正确的。

30. 并发进程之间可能是无关的,也可能是有交往的。

31. 硬件方法实现进程同步时,不能实现“让权等待”,Peterson算法也无法实现“让权等待”。只有记录型信号量PV才能实现。

32. 以下正确的是:
	①一个进程进入死循环。
	②多个进程竞争资源出现了循环等待条件。
	③多个进程竞争使用共享型设备
	答案:②。
	死锁一定要有多个进程,且满足死锁的必要条件才可以。
	共享型设备允许多个进程申请使用,是不会造成死锁的。
	一个进程自己进入死循环会产生饥饿,不会产生死锁。

33. 死锁是原因是“独占资源分配不当”,而不是“系统资源不足”

34. 死锁的避免是根据__采取措施实现的。
	①使进程的推进顺序合理。
	②防止系统进入不安全状态。
	答案:②。①是②导致的的结果,②才是依据。

35. 三个进程共享四个同类资源,已知每个进程最多需要两个该类资源,则该系统( )
	A. 有些进程可能永远得不到该类资源   B.必然有死锁   C.进程请求该类资源必然能得到   D.必然是死锁
	选C。不会产生死锁,那么进程请求的资源必定会被满足。A答案指的是部分死锁,而不是“饥饿”(不好区分题意,找最优答案)

36. 死锁与不安全状态的关系:死锁是不安全状态的子集。

37. 若系统S1采用死锁避免的方法。S2采用死锁检测的方法。判断:
	①S1会限制用户申请资源的顺序,而S2不会。
	②S1需要进程运行所需要的资源总量信息,而S2不需要
	③S1不会给可能导致死锁的进程分配资源,而S2会。
	①错,②③对。
	①的前部分是死锁的避免。银行家算法会会检查此次资源分配后,系统是否处于安全状态,若不处于安全状态,则将本次试探分配作废。
	在死锁的检查和避免中,系统为进程分配资源时,不采取任何措施,只有在死锁发生后才用资源剥夺、撤销进程、进程回退解除死锁。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ElegantCodingWH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值