第二章 进程管理【课后题目】

1. 操作系统中为什么要引入进程的概念?

进程是系统进行资源分配和调度的基本单位,能作为程序独立运行的载体保障程序的正常执行,同时提高资源的利用率。


2. 什么是进程?

进程是进程实体的运行程序,是对运行时程序的封装,是系统进行资源分配和调度的独立单位。


3. 七态模型中进程的状态有哪些?哪些事件可能引起不同状态之间的转换?

建立态 -》就绪态 -》执行态 -》终止态

挂起就绪《- 挂起阻塞《- 堵塞态

创建事件,调度事件,阻塞事件,完成事件,恢复事件,中断事件


4. 什么是进程控制块(PCB)?它包含哪些基本信息?

PCB是进程存在的唯一标识,是操作系统对进程进行控制,管理和调度的依据。每一个进程对应一个PCB,包含以下信息:进程名,进程优先数,轮转时间片,进程占用CPU时间,进程状态,当前队列指针等….


5. 在操作系统中引入进程的概念之后为什么还要引入线程的概念?

进程间的并发,切换进程的时候需要保存进程运行环境,还需要切换内存地址空间,开销很大。

而引入线程后,同一个进程内的各个线程并发,不需要切换进程运行环境和内存地址空间,开销小。


6. 什么是线程控制块(TCB)?它有哪些主要内容?
线程控制块(TCB)是操作系统中用于管理和控制线程的数据结构。每个线程在操作系统中都有对应的线程控制块,用于存储和跟踪线程的相关信息。线程控制块的主要作用是跟踪和管理线程的状态、资源和调度相关的信息。操作系统可以通过线程控制块来决定线程的调度顺序、状态切换、资源分配和回收等操作,从而实现多线程编程的高效管理和调度。线程控制块TCB通常包含:线程标识符、一组寄存器、线程运行状态、线程专有存储


7. 试述进程的互斥和同步两个概念之间的差异。

互斥:某一时刻只允许一个进程访问共享资源,其他进程需要等待该进程释放资源之后才能访问

同步:多个进程之间按照一定的顺序协调运行,具有前后性。


8. 什么是临界区和临界资源?

把一次只允许一个进程访问的资源称为临界资源,访问临界资源的程序段称为临界区


9. 什么是信号量?

表示某一类可用资源的数量,是一个整形变量


10. 如何区分公用信号量和私用信号量?

公用信号量用来实现进程之间的互斥,初值为1,允许它所连接的一组进程对它执行PV操作

私用信号量用来实现进程之间的同步,初值为0,仅允许拥有它的进程对它执行PV操作


11. 对信号量S执行PV操作时,S的值发生变化,当S>0,S=0,S<0时,其物理含义分别是什么?

S>0:表示可用资源的数量大于0。执行P操作时,表示存在可用资源,可以进行申请使用资源。执行P操作后,S的值-1,反映了资源被占用或者分配给进程的状态

S=0:表示可用的资源数量为0。执行P操作时,表示当前没有可用资源,需要等待。P操作执行后,进程进入阻塞,直到其他进程执行V来唤醒它

S<0:表示当前有进程等待资源。P操作执行时,表示已经有进程在等待资源。P操作执行后,进程进入等待队列。直到执行V操作时,会唤醒等待的进程。


12. 为什么PV操作均为不可分割的原语操作?

因为信号量在使用过程中是可变的,但对他们的改变不能中断,故只能PV操作来改变,必须要一气呵成,需要原语实现。


13. 若进程控制程序允许并发执行,将产生什么后果?试举例说明。

当多个进程同时访问共享资源时,由于执行顺序的不确定性,可能导致共享资源的状态不一致或发生错误。这种情况下的后果是无法预测的,并且可能导致程序崩溃、数据损坏等问题。

假设有多个进程同时对一个共享的文件进行写操作。如果这些进程没有合理地同步和互斥地访问文件,可能会导致文件的内容混乱和丢失。例如,两个进程同时向文件中写入数据,由于写操作不是原子性的,可能会出现其中一个进程覆盖了另一个进程已写入的数据,导致数据的丢失或错误。


14. 什么是管道通信?

是一种进程通信的方式,它是一种半双工的通信方式,允许一个进程向另一个进程发送数据,同时也允许另一个进程接收这些数据,通常基于Pipe来实现。用于实现进程间的协作和数据交换,例如父子进程之间的通信、进程管道之间的数据传输等。


15. 低级通信与高级通信有什么区别?
在低级通信中,进程之间只传递状态和整数值,信号量机制属于低级通信方式。其优点是传递信息的速度快,缺点是传递的信息量少,通信效率低。\

在高级通信中,进程间可以传送任意数量的数据,传递的信息量大,操作系统隐藏了进程间通信的细节,简化了写代码的复杂性。


1. 若信号量的初值为3,当前值为-2,则表示有多少个进程在等待?请分析说明。

有2个进程在等待。s<0表示在等待的资源的进程数量。


2. 有m个进程共享同一临界资源,若使用信号量机制实现对该临界资源的互斥访问,计算信号量的变化范围。

[1,1-m]


3. 若有5个进程共享同一程序段,而且每次最多允许4个进程进入该程序段,则信号量的变化范围是什么?

S=4//还有剩余可容纳进程数量 S-5=-1 范围:4~-1


4. 一个阅览室有若干座位,一个读者的操作过程为:在进入前须在一张登入表中登记,然后进入阅览室找座位进行阅读,阅读完毕准备离开前须在一张登出表中登记退出时间。登入表和登出表是两给表格,均要求一次只允许一个人填写。若某一高峰时段,同时有多个读者涌入/准备离开阅览室,请用PV操作协调这些读者的操作。


![不会写的写](https://img-blog.csdnimg.cn/direct/a2d4254ce47e4f3aa824e38b5909084e.png) 【老师讲评版】

讲评答案



5. 水果盘中只能放一个水果,爸爸向其中放苹果,妈妈向其中放橙子,儿子只吃橙子,女儿只吃苹果。请用PV操作协调这四人之间的操作。
在这里插入图片描述

6. 桌上有一个能放下5个水果的空盘子。爸爸不停地向盘中放苹果和橘子,儿子不停地从盘中取橘子,女儿不停地从盘中取苹果。规定3人不能同时使用盘子(即不同时取或放水果)。试用信号量机制协调父、子、女三人之间的同步操作。
放水果问题


7. 有3个并发进程共享一个缓冲区,A负责从输入设备读入信息,B负责对A存入的信息进行加工,C负责将B加工后的信息打印输出。针对如下两种情况,分别用信号量和PV操作描述这3个进程的并发操作:该缓冲区只有一个单元,且缓冲区一次只允许一个进程使用。
在这里插入图片描述


8.有两个优先级相同的进程p1和p2,各自执行的操作如下,信号量S1和S2的初值均为0。试问p1和p2并发执行后,x、y、z的值各为多少?

在这里插入图片描述


9.两个并发进程p1和p2并发执行,其中A、B、C、D、E是原语,试给出可能的并发执行路径。
1.A B C D E

2.D E A B C

3.D A B C E

4.A D B C E

5.D A B E C

6.A D B E C

7.A B D E C

8.A D E B C

9.D A E B C

10.A B D C E


11.选做题

11.翻译(简述进程和线程的区别联系)
fork is expensive. Memory is copied from the parent to the child, all descriptors are duplicated in the child, and so on. Current implementations use a technique called copy-on-write, which avoids a copy of the parent’s data space to the child until the child needs its own copy. But, regardless of this optimization, fork is expensive.

IPC is required to pass information between the parent and child after the fork. Passing information from the parent to the child before the fork is easy, since the child starts with a copy of the parent’s data space and with a copy of all the parent’s descriptors. But, returning information from the child to the parent takes more work.

Threads help with both problems. Threads are sometimes called lightweight processes since a thread is “lighter weight” than a process. That is, thread creation can be 10–100 times faster than process creation.

All threads within a process share the same global memory. This makes the sharing of information easy between the threads, but along with this simplicity comes the problem.
分层的代价很高。内存要从父代复制到子代,所有描述符都要在子代中复制,等等。目前的实现采用了一种称为 “写时拷贝”)的技术,在子进程需要自己的拷贝之前,避免将父进程的数据空间拷贝到子进程。但是,无论如何优化,进程的成本都很高。

分叉后,父进程和子进程之间需要 IPC 来传递信息。在分叉前,从父代向子代传递信息很容易,因为子代一开始就拥有父代数据空间的副本和父代所有描述符的副本。但从子进程向父进程返回信息则需要更多的工作。

线程可以帮助解决这两个问题。线程有时被称为轻量级进程,因为线程比进程 “重量轻”。也就是说,线程的创建速度是进程创建速度的 10-100 倍。

进程中的所有线程共享相同的全局内存。这使得线程之间很容易共享信息,但问题也随之而来。


  • 32
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值