现代操作系统 第四版 第二章答案(待更)

1:
进程在阻塞之后不能直接运行,要先转为就绪态再由3转为运行。
就绪不能直接阻塞,因为就绪的进程并未运行,不会阻塞。

2:
应该有一个寄存器存储当前进程表项的指针,当I/O结束时,CPU把当前的机器状态存入当前的进程表项中,然后转到中断向量读取另一个过程表项的指针,启动这个进程。

3:
高级语言不能直接访问CPU硬件,但必须进行这种访问,而且使用汇编编写减少了对线程/程序的影响。

4:
防止操作系统崩溃, 因为有些用户程序不支持足够的堆栈空间, 防止恶意的用户程序挖掘其他进程的信息。

5:
0.55

6:
最多可以容纳(4 * 1024 – 512)/ 256 = 14个进程, 设每个进程的等待I/O的时间与总运行时间的比例为p, 1 – p14 > 99%, 所以p < 71.9%。

7:
每个作业总的运行时间为40分钟, 若为顺序执行,最后一个作业需要40+40 = 80分钟完成;
若为并行执行, cpu的利用率 = 1 – 0.5² = 0.75, 40 / 0.75 = 53.33分钟。

8:
1 – 0.46

9:
客户机进程创建多个线程, 每个线程从一个镜像服务器获取文件的不同部分。有助于减少停机时间

10:
难以保证文件系统的一致性。 若某客户进程给服务器进程1发送请求要更新文件, 然后另一个客户进程给服务器进程2发送请求要读数据,可能会读到更新前的数据。
若给每个进程都分配cache会导致资源浪费, 因为不是所有的进程都要频繁的读写数据。

11:
不会, 如果单线程进程发生阻塞, 就不能创建子进程。

12:
应适应内核级线程。
若使用用户级线程的话, 使用了阻塞的read调用,若被阻塞,整个进程中所有线程都会被阻塞, 因为用户级线程中内核不知道有线程的存在。

13:
多线程服务器, 分派线程去调用阻塞的工作线程。 工作线程去检查有关请求是否在web页面高速缓存中,如果没有, 该线程开始一个从磁盘调入页面的read操作, 并阻塞到该磁盘操作完成, 当工作线程阻塞时, 分派线程可以挑选另一个线程运行。 从而减少cpu空转的时间。
若cpu和服务器完全绑定, 则不需要多线程, 单线程可以简单化。

14:
当进行线程切换时, 必须要保存线程的寄存器,多线程跟多进程没有什么不同。

15:
进程中的线程要合作,不能一个线程一直运行。

16:
用户级线程不可以被时钟中断, 而内核级线程可以, 若线程运行过久,时钟会切断当前进程。

17:
单线程的情况下, cache命中需要12ms, cache未命中需要87秒,加权平均为 1/3 * 87 + 2/3 * 12 = 37ms,1s / 37ms = 27。
多线程的情况下,所有磁盘等待都是重叠的, 1s / 12ms = 83.3.

18:
用户级线程中,
优点: 保存该线程状态的过程和调度程序都是本地过程, 效率比内核级线程高很多, 线程切换时不需要陷入内核, 也不需要对cache刷新, 并且允许线程有自己定制的调度算法。
缺点: 在一个线程运行时, 在该进程中其他线程就不能运行, 除非该线程自动放弃cpu, 否则将一直运行下去。因为在一个进程内部, 没有时钟中断

19:
在创建线程后, 调用pthread_join等到刚刚创建的线程推出后再创建下一个线程。

20:
因为全局变量的类型位置, 要保存的话, 必须要传递给cread_globe。

21:
可能会出现不一致状态, 使用信号量。

22:
可能, 但效率很低, 线程请求一个系统调用, 需要先设定报警定时器,这种方法不好。

23:
有效。

24:
Peterson算法就是为抢占式调度而设计的。 而非抢占式调度可能会失败。

25:
优先级反转是指, 当低优先级进程进入临界区时,高优先级进程转为就绪态,但因为后者优先级高, 所以不会调度比他优先级低的进程,进而低优先级的进程无法离开临界区。
而用户级线程不可能存在这个问题, 因为用户级线程不能中断, 内核级线程会出现这个问题。

26:
轮转调度算法不会出现这样的问题, 因为给每个进程分配时间片, 时间到了之后系统剥夺其cpu使用权, 所以死循环。

27:
每个线程都是自己调用过程, 它必须有一个栈来保存局部变量, 返回地址等。
这一点用户级线程和内核级线程一样。

28:
竞争条件是指 多个进程或线程读写一个共享数据时, 其最终运行结果依赖于执行的相对时间。
会, 模拟计算机也是多道程序设计。

29:
仍然可行, 因为在某一个时刻, 只有一个生产者/消费者可以访问共享缓冲区。

30:
当p1先运行的时候就会出问题。

31:
执行信号操作, 操作系统必须禁用中断, 然后它读取信号量的值,
若执行P操作, 信号量的值小于0的话, 该进程进去排队队列中,若大于0, 则该进程继续执行。
若为V操作, 信号量的值小于0的话, 释放等待队列中的一个进程, 若大于0, 则该进程继续执行。

32:
需要一个二元信号量M表示互斥, 一个二元信号量表示阻塞, 一个链表表示当前阻塞的进程, 一个counter表示执行v操作减去p执行p操作的数目。
P操作: 首先对M进行P操作, 然后对counter进行P操作, 判断counter的值,若大于等于0, 则对M进行V操作, 若小于0, 把该进程记录在链表上再执行V操作, 并对B进行P操作从而阻塞该进程。
V操作: 首先对M进行P操作, counter执行V操作, 若counter大于等于0, 则对M直接V操作, 若小于0, 从链表中选出一个进程, 然后对B、M依次执行V操作。
33:
只要两个进程不是生产者-消费者问题,就可以使用屏障。

34:
若在内核级线程中, 可以使用信号量, 该线程在信号量上阻塞, 而内核可以运行该进程中的其他线程, 可以实现同步。
若在用户级线程中, 若该线程在信号量上阻塞, 整个进程就会被阻塞, 所以无法实现同步。

35:
这样做代价很高, 而用用他们两个的方法 只需要执行signal原语就可以唤醒进程。

36:
消息传递。
食物, 订单, 袋子是消息。

37:
不会, 只会发生忙等待。

38:
nT

39:
3个

40:
可以让更重要的进程出现多次去获得更大的cpu使用时间, 若该进程阻塞时,能将该就绪进程列表中把当前进程包括当前进程的备份阻塞, 就允许出现多次。

41:
简单的情况下可以看出, 若程序开始时,读取所有输入文件, 则不是I/O密集型, 若经常对不同的文件进行读取, 则可能是I/O密集型。
可以使用UNIX的ps操作, 获得程序运行的cpu时间, 与整个时间运行对比。

42:
若时间片非常短, 进行上下文切换所占的时间片比例就大。
若时间片长, 上下文切换所占的时间比例就小。

43:
T / (T+S),
T / (T+S),
Q / (Q+S),
1/ 2,
~0.

44:
采用最短作业优先调度(SJF), 判断X的取值范围。

45:

轮转调度:

第一次分配10分钟cpu时间, 每个进程分配1/5的cpu时间, 第一次分配结束时, C进程结束。
第二次分配8分钟cpu时间, 每个进程分配1/4的cpu时间, 第二次分配结束时, D进程结束。
…………
A进程需要30分钟, B进程需要24分钟, C进程需要10分钟, D进程需要18分钟, E进程需要28分钟。 平均22分钟。

优先级调度:

按优先级运行, 进程依次的执行时间为 6, 14, 24, 26, 30. 平均20分钟

先来先服务

进程依次执行时间为10, 16, 18, 22, 30, 平均19.2分钟

最短作业优先

进程依次执行时间为2, 6, 12, 20, 30, 平均14分钟。

46:
最高优先级的运行1个时间片, 次优先级运行2个时间片……
运行之后进程优先级降低一级,
所以需要5次, 1、2、4、8、15.

47:
1 / 5 * 2 + 11 / 33 = 11 / 15 < 1
可以调度。

48:
1 / 5 * 2 + 11 / 33 * 2 > 1
不可以调度。

49:
[(40 * 1 / 2 + 20 * 1 / 2) * 1 / 2 + 40 * 1 / 2] * 1 / 2 + 15 * 1 / 2 = 25ms.

50:
35 / 50 + 20 / 100 + 10 / 200 + 2 / 250 < 1
x <= 12.5ms

51:
可以。

52:
1 / 6 * 2 + 20 / 1000 * 25 < 1, 可调度。

53:
内核通过任何方式调度进程, 进程严格按照优先级顺序执行。

54:
设置为HUNGRY之后, 在一个哲学家吃完之后, 就可以检查左右侧的哲学家是否为HUNGRY, 若此时他为HUNGRY并且他的左右叉子可用, 就可以设置为EATING。

55:
若这样改, 整个哲学家左右的哲学家永远是HUNGRY。

56:
读者优先: 只要有读者在读, 就不允许写者执行写操作, 当写者完成时, 全部读者进行读操作。
写者优先:只要有写者再写, 就不允许读者进行读操作,每当结束一个进程时, 若有若有写者存在, 就启动写者, 否则启动所有读者。
公平:一旦有读者开始读操作, 后续所有读者优先, 一旦有写者在写操作, 后续所有写者优先。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值