[Operating.System.Concepts(9th,2012.12)].Abraham.Silberschatz.文字版(恐龙书——操作系统概念 原书第九版)课后习题 参考答案
Posted YoOAOoY
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Operating.System.Concepts(9th,2012.12)].Abraham.Silberschatz.文字版(恐龙书——操作系统概念 原书第九版)课后习题 参考答案相关的知识,希望对你有一定的参考价值。
目录
写在前面:
本答案仅供学习参考分享,未经作者允许不得转载;
本文章所含答案均为标准答案,纯手码,请放心食用(CSDN设计师!!!!你知道我的痛吗!!!!36000多字啊!!!!!)。若未找到所需题目的答案,欢迎在评论区进行补充;
文章中的题目序号对应英文版教材课后习题顺序;
离线word版下载链接:操作系统原理(恐龙书第九版)课后习题答案-OS文档类资源-CSDN文库
Chap01 导论
1.OS的三个主要目的是啥?
- 为电脑使用者提供一个在电脑硬件上方便、高效地执行程序地环境;
- 根据需要分配计算机的单独资源以解决给定的问题,分配进程要尽可能地公平和高效;
- 作为一个控制程序,它有两个主要功能:(1)监督用户程序的执行,以防止错误和不当使用计算机;(2)管理输入/输出设备的操作和控制。
2.我们强调需要一个操作系统来有效利用计算硬件。操作系统何时应该放弃这一原则并“浪费”资源?为什么这样的系统不是真正的浪费?
单一用户系统需最大化的为用户提供服务。GUI可能会“浪费”CPU周期,但它优化了用户与系统的交互。
3.程序员在为实时环境编写操作系统时必须克服的主要困难是什么?
主要的困难是将操作系统保持在实时系统的固定时间限制内。如果系统在特定时间段内未完成任务,则可能会导致其正在运行的整个系统崩溃。因此,在为实时系统编写操作系统时,编写器必须确保其调度方案不允许响应时间超过时间限制。
4.牢记操作系统的各种定义,考虑操作系统是否应包括Web浏览器和邮件程序等应用程序。争论它应该和不应该,并支持你的答案。
支持将流行应用程序包括在操作系统中的一个论点是,如果应用程序嵌入到操作系统中,那么它很可能更好地利用内核中的功能,因此与在内核之外运行的应用程序相比,它具有性能优势
反对在操作系统中嵌入应用程序的论点通常占主导地位:(1)应用程序是应用程序,而不是操作系统的一部分,(2)在内核中运行的任何性能优势都会被安全漏洞所抵消,(3)它会导致操作系统臃肿。
5.作为保护(安全)系统的基本形式,内核模式和用户模式之间的区别如何发挥作用?
内核模式和用户模式之间的区别以以下方式提供了一种基本的保护形式。某些指令只能在CPU处于内核模式时执行。类似地,只有当程序以内核模式执行时,才能访问硬件设备。只有当CPU处于内核模式时,才能控制何时启用或禁用中断。因此,在用户模式下执行时,CPU的能力非常有限,从而强制保护关键资源。
6.以下哪项操作应具有特权?
a、 设置计时器的值。 Yes
b、 阅读时钟。
c、 清除内存。 Yes
d、 发出陷阱指令。
e、 关闭中断。 Yes
f、 修改设备状态表中的条目。 Yes
g、 从用户模式切换到内核模式。
h、 访问输入/输出设备。 Yes
7.一些早期的计算机通过将操作系统放置在用户作业或操作系统本身都无法修改的内存分区中来保护操作系统。描述你认为这样一个计划可能会出现的两个困难。
操作系统所需的数据(密码、访问控制、会计信息等)必须存储在未受保护的内存中或通过未经保护的内存传递,因此未经授权的用户可以访问这些数据.
8.一些CPU提供两种以上的操作模式。这些多模式的两种可能用途是什么.
- 可以使用多种模式来提供更细粒度的安全策略。例如,您可以区分不同类型的用户模式,而不是仅区分用户模式和内核模式。也许属于同一组的用户可以执行彼此的代码。当其中一个用户运行代码时,计算机将进入指定模式。当计算机处于此模式时,组成员可以运行属于组中其他任何人的代码。
- 另一种可能是在内核代码中提供不同的区别。例如,特定模式可以允许运行USB设备驱动程序。这意味着可以在不必切换到内核模式的情况下为USB设备提供服务,从而本质上允许USB设备驱动程序在准用户/内核模式下运行。
9.定时器可用于计算当前时间。简要描述如何实现这一点。
程序可以使用以下方法使用定时器中断计算当前时间。
该程序可以在将来设置一段时间的定时器,然后进入睡眠状态。当它被中断唤醒时,它可以更新它的本地状态,它使用本地状态来跟踪到目前为止收到的中断的数量。然后,它可以重复这个过程,不断设置定时器中断,并在实际引发中断时更新其本地状态。
10.给出cashes有用的两个原因。它们解决了什么问题?它们会导致什么问题?如果一个cash可以与它所缓存的设备一样大(例如,一个与磁盘一样大的缓存),为什么不将其设置为如此大并删除该设备?
- 当两个或多个组件需要交换数据,并且组件以不同的速度执行传输时,缓存非常有用。
- 缓存通过在组件之间提供中间速度的缓冲来解决传输问题。如果快速设备在缓存中找到所需的数据,则无需等待速度较慢的设备。缓存中的数据必须与组件中的数据保持一致。如果组件的数据值发生更改,并且数据也在缓存中,则缓存也必须更新。这在多处理器系统中尤其是一个问题,其中多个进程可能正在访问一个数据。
- 可以通过大小相等的缓存消除组件,但前提是:(A)缓存和组件具有等效的状态保存容量(即,如果组件在断电时保留其数据),缓存也必须同时保留数据(b)缓存价格合理,因为更快的存储往往更昂贵.
11.区分分布式系统的客户机-服务器模型和对等模型。
- 客户机-服务器模型明确区分了客户机和服务器的角色。在此模型下,客户机请求服务器提供的服务。
- 对等模型没有如此严格的角色。事实上,系统中的所有节点都被视为对等节点,因此可以充当客户端或服务器,或者两者兼有。节点可以从另一个对等方请求服务,或者该节点实际上可以向系统中的其他对等方提供这样的服务。
12.在多道程序设计和分时环境中,多个用户同时共享系统。这种情况可能导致各种安全问题。
a、 这两个问题是什么?
b、 我们能否确保分时机器与专用机器具有相同的安全性?解释你的答案。
a.窃取或复制用户的程序或数据;
在没有授权的情况下使用系统资源;
b.不行,以为所有人为设计的分时系统保护方案都可能被破坏。
14.在什么情况下,用户使用分时系统比使用PC或单用户工作站更好?
当其他用户很少,任务量大,硬件速度快,分时是合理的,系统的全部功能可以用来解决用户的问题这个问题可以比在PC上更快地解决。
19.中断的目的是什么?陷阱和中断之间有什么区别? 陷阱可以由用户程序有意生成吗?如果是这样,出于什么目的?
中断是系统中由硬件生成的流变更。一个中断处理器被调用来处理中断的原因;然后将控制返回给中断的上下文和指令。
陷阱是一种软件生成的中断。
中断可以用来发出I/O完成的信号,以避免设备轮询的需要。陷阱可以用来调用操作系统例程或捕获算术错误。
21.有些计算机系统在硬件上不提供特殊的操作模式/有可能为这些计算机系统构建一个安全的OS吗?给出论据。
这类机器的操作系统需要始终处于控制状态(或监控模式)。这可以通过两种方法来实现:
a:所有用户程序的软件解释(例如一些BASIC、Java和LISP系统)。软件解释器可以在软件中提供硬件不能提供的东西。
b:所有的程序都要用高级语言编写,这样所有的目标代码都是由编译器生成的。编译器将生成(内联或通过函数调用)保护检查,以确定硬件是否缺失。
Chap02 OS结构
1.系统调用的目的是什么?
允许用户级进程请求操作系统服务。
2.在进程管理中OS的五个主要活动是啥?
a.创建和删除用户和系统进程
b.暂停和恢复进程
c.提供进程同步机制
d.提供进程通信机制
e.提供死锁处理机制
3.在内存管理中OS的三个主要活动是啥?
a、 跟踪当前正在使用内存的哪些部分以及由谁使用。
b、 当内存空间可用时,决定将哪些进程加载到内存中。
c、 根据需要分配和释放内存空间
4.在大容量存储管理中OS的三个主要活动。
•空闲空间管理。
•存储分配。
•磁盘调度。
5.命令解释程序(command interpreter)的目的是什么?为什么它通常与内核分离?
它从用户或命令文件中读取命令并执行它们,通常是将它们转换为一个或多个系统调用。它通常不是内核的一部分,是因为命令解释器可能会发生更改。
6.为了启动新进程,命令解释器或shell必须执行哪些系统调用?
在Unix系统中,需要先执行fork系统调用,然后执行exec系统调用,以启动新进程。fork调用克隆当前正在执行的进程,而exec调用基于调用进程上的不同可执行文件覆盖新进程。
7.系统程序的目的是什么?
系统程序可以被视为有用的系统调用包。
它们为用户提供基本功能,因此用户无需编写自己的程序来解决常见问题。
8.分层系统设计方法的主要优点是什么?使用分层方法的缺点是什么?
优点:
系统更容易调试和修改,因为更改只影响系统的有限部分,而不影响操作系统的所有部分。
缺点:
信息只保存在需要的地方,并且只能在定义和限制的区域内访问,因此任何影响该数据的错误都必须限制在特定的模块或层中
9.列出操作系统提供的五项服务,并解释每项服务如何为用户带来便利。在哪些情况下,用户级程序不可能提供这些服务?解释你的答案。
- 程序执行。操作系统将文件的内容(或节)加载到内存中并开始执行。当用户级程序不被信任时无法提供。
- I/O操作。磁盘、磁带、串行线和其他设备必须以非常低的级别进行通信。用户只需指定设备和要在其上执行的操作,而系统会将该请求转换为特定于设备或控制器的命令。不受信任的用户级程序仅访问其所有权访问的并且未被使用中的设备。
- 文件系统操作。在文件创建、删除、分配和命名方面有许多用户不必执行的细节。磁盘空间块由文件使用,必须进行跟踪。删除文件需要删除名称文件信息并释放分配的块。还必须检查保护措施,以确保正确访问文件。用户程序既不能确保遵守保护方法,也不能在文件删除时仅分配空闲块和释放块。
- 通信。系统间的消息传递要求将消息转换为信息包,发送给网络控制器,通过通信介质传输,并由目标系统重新组装。必须进行数据包排序和数据更正。同样,用户程序可能无法协调对网络设备的访问,或者它们可能接收到目的地为其他进程的数据包
- 错误检测。错误检测发生在硬件和软件级别。在硬件层面,必须检查所有数据传输,以确保数据在传输过程中没有损坏。必须检查介质上的所有数据,以确保这些数据在写入介质后未发生更改。在软件层面,必须检查介质的数据一致性;例如,已分配和未分配的存储块数是否与设备上的总数匹配。在那里,错误通常与进程无关(例如,磁盘上的数据损坏),因此必须有一个全局程序(操作系统)来处理所有类型的错误。此外,通过操作系统处理错误,进程不需要包含捕获和更正系统上所有可能错误的代码
10.为什么有些系统将操作系统存储在固件中,而另一些系统将其存储在磁盘上?
对于某些设备,如手持PDA和蜂窝电话,可能无法为设备提供带有文件系统的磁盘。在这种情况下,操作系统必须存储在固件中。
11.系统如何设计为允许选择引导哪个操作系统?引导程序需要做什么?
考虑一个希望同时运行Windows XP和三种不同Linux发行版(例如RedHat、Debian和Mandrake)的系统。
每个操作系统都将存储在磁盘上。在系统引导期间,一个特殊的程序(我们称之为引导管理器)将决定要引导到哪个操作系统。这意味着,启动管理器将在系统启动期间首先运行,而不是最初启动到操作系统。正是这个引导管理器负责确定要引导到哪个系统。通常,引导管理器必须存储在系统启动期间要识别的硬盘的某些位置。引导管理器通常为用户提供要引导到的系统选择;引导管理器通常设计为在用户没有选择的情况下引导到默认操作系统。
12.操作系统提供的服务和功能可以分为两大类。简要描述这两类并讨论它们的区别。
操作系统提供的一类服务是在系统中同时运行的不同进程之间实施保护。 进程只允许访问与其地址空间相关联的那些内存位置。 此外,不允许进程损坏与其他用户关联的文件。 进程也不允许在没有操作系统干预的情况下直接访问设备。 操作系统提供的第二类服务是提供底层硬件不直接支持的新功能。 虚拟内存和文件系统就是操作系统提供的两个这样的新服务示例。
16.使用相同的系统调用接口来操作文件和设备有什么优点和缺点?
可以像访问文件系统中的文件一样访问每个设备。 由于大多数内核通过这个文件接口处理设备,通过实现特定于硬件的代码来支持这个抽象文件接口来添加新的设备驱动程序相对容易。 因此,这有利于开发用户程序代码(可以编写为以相同方式访问设备和文件)和设备驱动程序代码(可以编写为支持定义良好的 API)。缺点是可能难以在文件访问 API 的上下文中捕获某些设备的功能,从而导致功能损失或性能损失。 其中一些问题可以通过使用 ioctl 操作来克服,该操作为进程调用设备上的操作提供了一个通用接口。
17.用户是否可以使用操作系统提供的系统调用接口来开发一个新的命令解释程序?
用户应该能够使用操作系统提供的系统调用接口开发新的命令解释程序。 命令解释程序允许用户创建和管理进程并确定它们通信的方式(例如通过管道和文件)。 由于所有这些功能都可以由用户级程序使用系统调用来访问,因此用户应该可以开发一个新的命令行解释程序。
21.系统设计的微内核方法的主要优势是什么?在微内核体系结构中,用户程序和系统服务如何交互?使用微内核方法的缺点是什么?
优势:
(a)添加新服务不需要修改内核
(b)它更安全,因为在用户模式下比在内核模式下完成更多操作(c)更简单的内核设计和功能通常带来更可靠的操作系统。
用户程序和系统服务通过使用进程间通信机制(例如消息传递)在微内核体系结构中进行交互。这些消息由操作系统传送。
缺点:
与进程间通信相关的开销以及频繁使用操作系统的消息传递功能以使用户进程和系统服务能够相互交互,会使内核性能受损。
知识点:
系统调用主要由高级语言编写,对某些底层任务,则可使用汇编语言。
系统调用时,向OS传参的3种方法:
- 通过寄存器(最简单);
- 将参数存在表或块中,再将表或块的地址放在寄存器中(不限制传递参数的长度或数量);
- 将参数通过程序放在或压入到堆栈;
系统调用类型:进程控制、文件管理、设备管理、信息维护、通信、保护。
OS设计的首要问题:定义目标和规范;
Chap03 进程
1.在图所示的程序,解释line A上的输出。
使用fork()创建子进程后,子进程拥有自己的内存地址,在子进程中返回值为0,即pid=0,修改value为20,因为子进程中value和父进程的value内存地址不一样,所以父进程的value仍为5;而在父进程中,fork()返回的是子进程的进程id>0,直接打印PARENT: value = 5
2.包括初始父进程,图显示的程序创建了多少进程?
总共创建了8个进程。
3.Sun UltraSPARC处理器具有多个寄存器集。描述如果新上下文已加载到其中一个寄存器集中,则发生上下文切换时会发生什么情况。如果新上下文在内存中而不是在寄存器集中,并且所有寄存器集都在使用中,会发生什么情况?
CPU当前寄存器集指针更改为指向包含新上下文的集,这只需很少的时间。如果上下文在内存中,则必须选择寄存器集中的一个上下文并将其移动到内存中,并且必须将新上下文从内存加载到该集合中。这一过程比使用一组寄存器的系统花费的时间稍多,具体取决于如何选择替换受害者。
4.当一个进程使用fork()操作创建一个新进程时,父进程和子进程共享下列哪个状态? a栈 b堆 c共享内存段
有共享内存段在父进程和新分叉的子进程之间共享。为新创建的进程复制堆栈。
5.关于RPC机制,请考虑“恰好一次”语义。即使返回给客户端的ACK消息由于网络问题丢失,实现此语义的算法是否也能正确执行?描述消息的顺序,并讨论是否仍保留“仅一次”。
“恰好一次”语义确保remore过程只执行一次。确保这一点的通用算法将确认(ACK)方案与时间戳(或允许服务器区分重复消息的其他增量计数器)相结合。
一般策略是客户端将RPC与时间戳一起发送到服务器。客户端还将启动超时时钟。然后,客户端将等待两次事件中的一次:(1)它将从服务器收到一个ACK,指示远程过程已执行,或者(2)它将超时。如果客户端超时,它将假定服务器无法执行远程过程,因此客户端将再次调用RPC,并发送稍后的时间戳。客户端可能由于以下两个原因之一而未接收到ACK:(1)服务器从未接收到原始RPC,或(2)服务器已正确接收并执行RPC,但ACK丢失。在情况(1)中,使用ACK允许服务器最终接收并执行RPC。在情况(2)中,服务器将接收到一个重复的RPC,并将使用时间戳将其标识为重复的,以避免再次执行RPC。需要注意的是,服务器必须向客户端发送第二个ACK,以通知客户端已执行RPC。
6.假设分布式系统容易发生服务器故障。需要什么机制来保证“恰好一次”RPC执行的语义?
服务器应在稳定的存储(如磁盘日志)中跟踪有关接收到哪些RPC操作、是否成功执行这些操作以及与这些操作相关的结果的信息。当发生服务器崩溃并收到RPC消息时,服务器可以检查之前是否执行过RPC,从而保证执行RPC的语义“只执行一次”。
8.描述短期调度程序、中期调度程序和长期调度程序之间的区别。
在批处理系统中:
短期调度程序(CPU调度程序)——从准备执行的进程中选择进程,并分配CPU。
长期调度程序(作业调度程序)——从进程缓冲池中选择进程加到内存中,以便执行。
他们主要的区别在于执行的频率。短期调度程序必须经常为CPU选择新的进程。长期调度程序并不频繁,因为长期调度程序控制多道程序进程,必须保证多道程序进程的稳定,为此创建创建程序的平均速度必须等于进程离开系统的平均速度。所以只有在进程离开系统时才会需要长期调用程序的调度。
在分时系统中:
中期调度程序,将进程从内存(或从CPU竞争)中移出,从而降低多道程序程度。之后进程看重新被调入内存,并从中断出继续执行。实现一种交换方案。
9.描述内核在进程之间进行上下文切换时所采取的动作
内核会将旧进程状态保存在其PCB中,然后加载经调度后的要执行的新进程的上下文。上下文切换的工作量与硬件支持密切相关,例如有的处理器提供了多个寄存器组,上下文切换只需简单改变寄存器组的指针,但如果活动进程数超过寄存器组数,系统就需要在寄存器和内存之间进行数据复制。
12.包括初始父进程,图中显示的程序创建了多少个进程?
16个进程
13.解释在什么情况下会到达图中标记为printf(“line J”)的代码行。
当子进程创建成功后,调用execlp()加载/bin/ls程序的代码和静态数据,若调用成功,则永远不会执行printf(“line J”);若调用失败(如不存在/bin/ls这样的可执行程序),才会执行printf(“line J”)。
14.使用图中的程序,确定A、B、C和D行的pid值(假设父进程和子进程的实际pid分别为2600和2603)。
A: pid=0
B: pid1 = 2603
C: pid = 2603
D: pid = 2600
知识点:
1.多道程序设计的目标:最大化CPU的利用率;
分时系统的目的是:在进程间快速切换CPU,以便用户在程序运行时能与其交互;
2.对于批处理系统:
长期调度程序:从缓冲池中选择进程,加到内存,以便执行(控制多道程序程度)。
短期调度程序:从准备执行的进程中选择进程,并分配CPU。
区别:执行频率;
对于分时系统:
中期调度程序的核心思想:交换(swap):可将进程从内存中移出,从而降低多道程序程度。之后,进程可被重新调入内存,并从中断处继续执行。
3.客户机/服务器通信
套接字(socket):只允许在进程间教化无结构的字节流
远程过程调用(RPC):可用于实现分布式文件系统
管道(pipe):普通管道:通信是单向的,只允许单向通信,进程间有父子关系,只可用于同一机器。
命名管道:通信可以双向,并且父子关系不是必须的,通信进程完成后,命名管道依然存在。
4.PCB由OS创建和管理。
5.执行上下文切换的时候:时钟中断、I/O中断、陷阱、管理调度
Chap04 线程
1.提供三个编程示例,在这些示例中,多线程比单线程解决方案提供更好的性能。
1、一个Web服务器,需要接受有关网页、图像、声音的请求,同时处理上千个用户的访问请求。
2、一个并行的应用程序,如矩阵乘法,其中矩阵的不同部分可以并行处理。
3、一种交互式的字处理器,一个线程用于显示图形,一个线程用于响应用户键盘输入,还有一个线程用于在后台进行拼写和语法检查。
2.用户线程和内核线程之间的两个区别是什么?在什么情况下,一种比另一种好?
1、用户线程位于内核之上,它的管理无需内核支持,而内核线程由操作系统来直接支持与管理。
2、在使用一对一模型或多对多模型的系统上,用户线程由线程库调度,而内核调度内核线程。
内核线程不需要与一个进程相关联,而每个用户线程都属于一个进程。内核线程通常比用户线程的维护成本更高,因为它们必须用内核数据结构表示。
3.描述内核在内核级线程之间进行上下文切换时所采取的动作。
内核线程之间的上下文切换通常需要保存被切换出去的线程的CPU寄存器的值,并恢复被调度的新线程的CPU寄存器。
4.创建线程时使用哪些资源?它们与创建进程时使用的方法有何不同?
因为线程比进程小,所以创建线程通常比创建进程使用更少的资源。创建一个进程需要分配一个进程控制块(PCB),这是一个相当大的数据结构。PCB包括内存映射、打开的文件列表和环境变量。分配和管理内存映射通常是最耗时的活动。创建用户或内核线程都需要分配一个小数据结构来保存寄存器集、堆栈和优先级。
5.假设操作系统使用多对多模型将用户级线程映射到内核,并且映射是通过LWP完成的。此外,该系统允许开发人员创建用于实时系统的实时线程。是否需要将实时线程绑定到LWP?解释
是的。定时对于实时应用程序至关重要。如果线程标记为实时,但未绑定到LWP,则该线程可能必须等待连接到LWP后才能运行。考虑实时线程是否正在运行(连接到LWP),然后继续阻塞(即必须执行i/O,已被更高优先级的实时线程抢占,正在等待互斥锁等),而实时线程被阻塞时,它所连接的LWP已分配给另一个线程。
当实时线程计划再次运行时,它必须首先等待连接到LWP。通过将LWP绑定到实时线程,可以确保线程在调度后能够以最小的延迟运行。
6.提供两个编程示例,在这些示例中,多线程并不比单线程解决方案提供更好的性能。
顺序程序不适合多线程编程。例子:
1、一个计算个人纳税申报单的程序。
2、“shell”程序,如C-shell或Korn shell。这样的程序必须密切监视自己的工作空间,如打开的文件、环境变量和当前工作目录。
7.在什么情况下,使用多个内核线程的多线程解决方案比单处理器系统中的单线程解决方案提供更好的性能?
当内核线程发生页面错误时,可以切换到另一个内核线程,以一种有用的方式使用交错时间。另一方面,当发生页面错误时,单线程进程将无法执行有用的工作。因此,在程序可能出现频繁的页面错误或必须等待其他系统事件的情况下,多线程解决方案甚至在单处理器系统上也能执行得更好。
8.在多线程进程中,程序状态的下列哪些组件是跨线程共享的?a寄存器值 b堆内存 c全局变量 d栈内存
多线程进程的线程共享堆内存和全局变量。每个线程都有其独立的寄存器值集和独立的栈。
9.使用多个用户级线程的多线程解决方案能否在多处理器系统上比在单处理器系统上获得更好的性能?
由多个用户级线程组成的多线程系统不能在多处理器系统中同时使用不同的处理器。操作系统只看到一个进程,不会将该进程的不同线程调度到不同的处理器上。因此,在多处理器系统上执行多个用户级线程不会带来性能上的好处。
11.是否可能有并发性但没有并行性?解释一下
可能。系统的并行性(parallelism)是指在同一时间执行多个任务,并发性(concurrency)是指系统能够支持多个任务,允许所有任务都能取得进展。因此没有并行,通过系统的调度也可以实现并发。
15.考虑下面的代码段
(1)创建了多少个独特的进程?(2)创建了多少个独特的线程?
(1)6个进程
(2)8个线程
知识点:
- 每个线程是CPU使用的一个基本单元:它包括线程ID、程序计数器、寄存器组、堆栈。它与同一进程的其他线程共享代码段、数据段、和其他OS资源。
- 多线程编程的优点:响应性、资源共享、经济、可伸缩性。
- 多核系统编程挑战:识别任务、平衡、数据分割、数据依赖、测试和调试。
- 数据并行:注重将数据分布于多个计算核上,并在每个核上执行相同的操作;
任务并行:涉及将任务(线程)而不是数据分配到多个计算核。每个线程都执行一个独特的操作。
Chap05 同步(Synchronization)
1.在第5.4节中,我们提到频繁禁用中断可能会影响系统的时钟。解释为什么会发生这种情况,以及如何将这种影响降至最低。
系统时钟在每次时钟中断时更新。如果中断被禁用,特别是长时间禁用,则系统时钟可能很容易丢失正确的时间。系统时钟也用于调度目的。例如,进程的时间量表示为时钟滴答数。在每个时钟中断时,调度器确定当前正在运行的进程的时间量是否已过期。如果时钟中断被禁用,调度程序将无法准确分配时间量。通过仅在很短的时间内禁用时钟中断,可以将这种影响降至最低。
2.解释Windows、Linux和Solaris实现多种锁定机制的原因。描述他们使用自旋锁、互斥锁、信号量、自适应互斥锁和条件变量的情况。在每种情况下,解释为什么需要该机制。
这些操作系统根据应用程序开发人员的需要提供不同的锁定机制。自旋锁对于多处理器系统非常有用,因为在多处理器系统中,线程可以在繁忙的循环中运行(在短时间内),而不会产生放入睡眠队列的开销。互斥锁对于锁定资源很有用。Solaris 2使用自适应互斥锁,这意味着互斥锁在多处理器机器上通过自旋锁实现。信号量和条件变量是同步的更合适的工具,因为旋转在很长的时间内效率很低,所以当资源必须保持很长一段时间。
3.忙等待这个词是什么意思?操作系统中还有哪些其他类型的等待?可以完全避免忙碌的等待吗?解释你的答案。
忙等待是指进程在不放弃处理器的情况下,在循环中等待条件得到满足。或者,进程可以通过放弃处理器来等待,并阻塞某个条件,等待在将来的某个适当时间被唤醒。可以避免繁忙的等待,但会产生与将进程置于睡眠状态以及在达到适当的程序状态时必须将其唤醒相关的开销。
4.解释为什么自旋锁不适用于单处理器系统,但通常用于多处理器系统。
自旋锁不适用于单处理器系统,因为只有通过执行不同的进程才能获得将进程从自旋锁中断的条件。如果进程没有放弃处理器,其他进程就没有机会设置第一个进程取得进展所需的程序条件。在多处理器系统中,其他进程在其他处理器上执行,从而修改程序状态,以便从自旋锁释放第一个进程。
5.说明如果wait()和signal()信号量操作没有原子化执行,那么可能会违反互斥。
等待操作以原子方式递减与信号量关联的值。如果在信号量的值为1时对其执行两个等待操作,如果这两个操作不是原子地执行的,那么这两个操作可能会继续递减信号量值,从而违反互斥。
6.说明如何使用二进制信号量实现n个进程之间的互斥。
n个进程共享一个信号量mutex,该信号量初始化为1。每个过程Pi的组织如下:
do
wait(mutex);
/* critical section */
signal(mutex);
/* remainder section */
while (true);
10.请解释:为什么在单处理器系统上通过禁止中断来实现同步原语的方法不适用于用户级程序.
如果用户级程序具有禁用中断的能力,那么它可以禁用计时器中断并防止发生上下文切换,从而不让其他进程执行,达到独占处理器的目的。
11.请解释为什么禁止中断不适合在多处理器系统来实现同步原语.
如果多个进程运行在不同的CPU上,每个进程都试图进入一个临界区,即使禁止中断,其他进程依旧能够在其他处理器上进入临界区。
13.请描述可能存在竞争条件的两个内核数据结构。一定要有如何可能发生竞争条件的描述。
- 两个数据结构/进程正在等待的资源被释放,并且两个进程都试图访问它;
- 处理 必须为 两个同时创建的进程创建对应的ID时。
23.展示如何在多处理器环境中使用test_and_set()指令实现wait()和signal()信号量操作。方案应该表现最小的忙等待。
25.请解释:管程和信号量是等价的,因为它们可以用来实现对相同类型的同步问题的解决方案。
可以使用下面的管程代码实现信号量:
管程可以通过以下方式使用信号量来实现。每个条件变量都由一个等待条件的线程队列表示。每个线程都有一个与其队列条目相关联的信号量。当线程执行等待操作时,它会创建一个新的信号量(初始化为0),将该信号量添加到与条件变量相关的队列中,并对新创建的信号量执行阻塞信号量递减操作。当一个线程在一个条件变量上执行一个信号时,队列中的第一个进程将通过对相应的信号量执行递增操作而被唤醒。
32.一个文件在不同的进程之间共享,每个进程都有一个唯一的编号。该文件可以被多个进程同时访问,但有如下约束:当前访问该文件的所有进程关联的所有唯一编号之和必须小于n。通过写管程来协调对该文件的访问。
知识点:
- 管程(monitor):属于抽象数据类型(ADT),
- 信号量(Semaphore),自旋锁(spinlock);
- 竞争条件(race condition):多个进程并发访问和操作同一数据并且执行结果与特定访问顺序有关。
Chap06 CPU调度
1.CPU调度算法确定其调度进程的执行顺序。如果在一个处理器上调度n个进程,那么可能有多少个不同的调度?给出一个n的公式。
n!
2.解释抢占式和非抢占式调度之间的区别。
抢占式调度允许进程在执行过程中被中断,将CPU带走并分配给另一个进程。
非抢占式调度确保进程只有在完成当前CPU事件时才放弃对CPU的控制。
3.假设以下进程在指定的时间到达执行。每个进程将在列出的时间内运行。在回答问题时,请使用非强制性计划,并根据您在做出决策时掌握的信息做出所有决策。
a.使用FCFS调度算法,这些进程的平均周转时间是多少?
b.使用SJF调度算法,这些流程的平均周转时间是多少?
c.SJF算法应该可以提高性能,但请注意,我们选择在时间0运行进程P1,因为我们不知道两个较短的过程很快就会到来。如果CPU在第一个单元处于空闲状态,然后使用SJF调度,计算平均周转时间。请记住,进程P1和P2在此空闲时间内正在等待,因此它们的等待时间可能会增加。该算法可称为未来知识调度。
a.10.53
b.9.53
c.6.86
请记住,周转时间是完工时间减去到达时间,因此您必须减去到达时间来计算周转时间。如果忘记减去到达时间,则FCFS为11。
4.在多级队列的不同层次上具有不同的时间片大小有什么优势?
需要更频繁服务的进程(例如,编辑器等交互进程)可以在一个时间量较小的队列中。不需要频繁服务的进程可以在一个具有更大时间片的队列中,需要更少的上下文切换来完成处理,从而更有效地利用计算机。
5.许多CPU调度算法都是参数化的。例如,RR算法需要一个参数来指示时间片。多级反馈队列需要参数来定义队列的数量、每个队列的调度算法、用于在队列之间移动进程的标准等。
因此,这些算法实际上是一组算法(例如,所有时间片的RR算法集,等等)。一组算法可能包括另一组算法(例如,FCFS算法是具有无限时间量的RR算法)。以下算法集对之间存在什么关系(如果有)
a.优先级和SJF
b.多级反馈队列和FCFS
c.优先级和FCFS
d.RR和SJF
a、 最短的作业具有最高优先级。
b、 MLFQ的最低级别是FCFS。
c、 FCFS对存在时间最长的作业给予最高优先级。
d、 无
6.假设一个调度算法(在短期CPU调度级别上)支持最近使用最少处理器时间的进程。为什么这个算法会支持I/O密集型的程序,而不会永久性地饥饿CPU密集型的程序?
它将有利于I/O密集型的程序,因为它们的CPU突发请求相对较短;然而,CPU密集型的程序不会饿死,因为I/O密集型的程序会相对频繁地放弃CPU来执行其I/O
7.区分PCS和SCS调度。
PCS调度在进程本地完成。这就是线程库如何将线程调度到可用的LWP上。SCS调度是操作系统调度内核线程的情况。在使用多对一或多对多的系统上,这两种调度模型有着根本的不同。在使用一对一的系统上,PCS和SCS是相同的。
8.假设操作系统使用多对多模型将用户级线程映射到内核,并且映射是通过使用LWP完成的。此外,该系统允许程序开发人员创建实时线程。是否需要将实时线程绑定到LWP?
是的,否则用户线程可能必须在实际调度之前竞争可用的LWP。通过将用户线程绑定到LWP,在等待可用LWP时没有延迟;可以立即调度实时用户线程。
9.传统的UNIX调度程序强制执行优先级数字和优先级之间的反向关系:数字越高,优先级越低。调度器使用以下功能每秒重新计算一次进程优先级:
优先级=(最近的CPU使用率/2)+基数,
其中基数=60,最近的CPU使用率指的是一个值,该值指示自上次重新计算优先级以来,进程使用CPU的频率。
假设进程P1的最近CPU使用率为40,进程P2为18,进程P3为10。重新计算优先级时,这三个流程的新优先级是什么?基于此信息,传统的UNIX调度程序是否会提高或降低CPU受限进程的相对优先级。
分配给流程的优先级分别为80、69和65。
调度器降低了CPU绑定进程的相对优先
云原生数据湖应用洞察白皮书
内容整理自:艾瑞咨询《中国云原生数据湖应用洞察白皮书》
概念界定:数据湖是面向大数据场景的创新解决方案,采用了与传统数仓不同的设计架构,具有「数据多源异构、统一存储管理、多范式计算、schema后置和应用广泛」的特性。云原生是数据湖未来部署的必然形态,具有「建立统一数据资产、低成本使用基础资源、高性能计算体验升级和敏捷创新赋能」的核心价值。
1 数据湖的定义
数据湖是面向大数据场景的创新解决方案。
早期,业界和用户多把数据湖定义为一个储存原始格式数据的系统,可容纳结构化、半结构化、非结构化及二进制的数据。
随着大数据技术的融合发展,数据湖的边界不断扩展,内涵也发生了变化。数据湖开始汇集各方面技术,逐步演进成为集多源异构数据统一储存、多范式计算分析及统一管理调用的大数据综合解决方案。它可以更加高效率低成本地管理海量多源异构数据,打通数据孤岛,释放数据价值,助力新时代下各行业企业的数字化转型。
2 数据湖 vs 数据仓库
数据仓库是诞生于数据库时代,应企业分析诉求而生的数据产品,它的核心思路是把数据库中的数据进行一定格式转换后,定时地复制至另一个库里做列式存储,从而满足企业查询和数据分析的诉求。随着互联网的发展,数据量暴增,非结构化数据越来越多,企业业务变化越来越快,传统数据仓库无法适应大数据和现代化企业对于实时、交互式分析等方面的诉求。
随之,数据湖诞生。它选择了“前松后紧”的设计思路,初始化阶段放弃严格的模式,后置schema,从而获取更强的灵 活性;同时通过统一存储管理和计算优化来保证数据的一致性和性能。
3 云原生数据湖
云原生数据湖核心价值:
- 集中存储、统一管理,建立高质量的数据资产
- 通过云的方式,更低成本地使用存储和计算资源
- 云湖共生,带来大数据应用的高性能体验
- 重塑IT部门定位与价值,赋能业务应用敏捷创新
3.1 基于云原生数据湖的统一资产建设
随着数字转型化进入深水区,“数据”已经成为企业的核心生产要素,打通各部门、各应用系统,建立企业级的统一数据资产已经成为业内的共识。基于云上的集中存储和数据湖,企业可以更丝滑地实现数据多源聚合,对内外部数据进行全生命周期的管理,从而沉淀为数据资产,赋能业务应用,释放数据价值。同时,基于云原生数据湖部署的云原生应用天然可以实现数据的无界流动,数用一体为企业打造了高效的价值闭环。
3.2 通过云的方式,更低成本地使用存储和计算资源
云原生数据湖是基于云环境构建的低成本大数据解决方案。于存储上,云原生数据湖使用对象存储,实现了无限扩容(理论上)和更低的价格,同时云上统一存储也简化了之后数据调用的复杂度;于计算上,云原生数据湖采用计算存储分离的架构,让计算节点和存储节点可以分别弹性伸缩,避免了存算需求不同造成的浪费;于用云策略上,云原生数据湖通过Serverless的模式,根据请求量自动进行毫秒级的弹性扩容,解决波峰资源短缺、波谷资源浪费的问题,实现最小单元的成本最优。
4 产业图谱
公有云厂商+生态厂商的市场格局初现
以上是关于[Operating.System.Concepts(9th,2012.12)].Abraham.Silberschatz.文字版(恐龙书——操作系统概念 原书第九版)课后习题 参考答案的主要内容,如果未能解决你的问题,请参考以下文章