《操作系统实用教程--螺旋方法》习题答案

第一章:入门

1.1操作系统是为普通用户和编程人员提供服务,从而使计算机的使用无须处理那些低级的、难以掌控的硬件命令的软件。
1.2略
1.3(1)操作系统可以把安装在游戏系统上的各种不同游戏所需要的公共模块整合到一起并统一管理
(2)操作系统可以处理异常事件。
(3)一些重要的操作系统概念已经融入该游戏系统中,例如当游戏被启动时,其部分软件模块被加载进内存,而其他部分可能被预装进ROM。
1.4用户视图属于用户或程序如何利用操作系统的范畴。系统视图则属于操作系统如何实施完成相关要求动作的范畴。
1.5(1)应用型用户:我们期望系统能够做出快捷可靠的响应,提供一致的用户视图,以及依赖于各种特定类型操作系统的其他特征。
(2)应用程序员:如何对一个文件进行读写;如何接收用户按键的操作信息;如何显示这个方框;怎样使API和我的程序完美兼容;开发的软件是否可以简单方便地移植到其他操作系统
(3)系统程序员:操作系统的内部功能机制
(4)系统管理员:安装和升级操作系统;操作系统与其他程序和实用例程如何交互;系统的安全和授权功能。
(更详细的答案可参照P5的表格)
1.6(1)应用程序员:程序员调用API函数,系统根据API调用相应硬件驱动从而控制硬件的输入输出。
(2)系统程序员: 系统出错后,系统触发中断,系统程序员收到信息,从而对系统进行维护。
(3)系统管理员:系统接受管理员的指令,控制文件的权限。
1.7略
1.8设备控制器用于辅助设备链接到计算机系统上,是操作系统与硬件的媒介。
1.9和1.10避免因使用不同键盘、不同视频监视器、不同磁盘、等就需要采用不同版本的操作系统可能带来的复杂性和成本暴涨。
1.11内核指操作系统实现基本功能且常驻内存的组成部分。
1.12略
1.13作为命令式外壳的一部分,因为不同软件的窗口界面特征不同,属于实用例程。

第二章:操作系统界面概念、模块和体系结构

2.1处理器、主存和高速缓存、辅助储存器、输入/输出设备、文件系统、用户界面、网络访问、保护和安全。
2.2进程是运行中的程序
2.3参见书中图片[书中P20页]
2.4只有一个进程可以处于运行状态,其他可能处于就绪状态或等待状态。
2.5进程执行到结尾或发生致命错误。
2.6进程所需的某些资源不可用;在进程可以继续处理之前需要某些输入/输出操作发生或完成(如等待按键操作或从文件读取数据)
2.7用于访问进程内存的数据结构的指针、用于访问进程文件的数据结构的指针:指针不变,数据结构变,所以指针不用及时更新。
2.8用户进程:计算机游戏等
系统程序进程:程序语言编译器、程序开发环境等
操作系统进程:内存管理、进程调度等
2.9(a)单用户多任务操作系统
(b)多用户多任务操作系统
(c)网络和分布式操作系统
(d)单用户单任务操作系统
(e)实时操作系统
2.10操作系统隐藏处理硬件设备的特殊性和细节,并为操作系统的其他部分提供一个通用的抽象视图,从而使应用程序员不必关注如何实现硬件运行的细节。
2.11当新的设备进入市场时,新的设备驱动程序可以添加到内核而不会极大地影响其他提供内存管理、处理器调度和文件系统接口的操作系统模块。
2.12在微内核体系结构中,包含在微内核中的只有基本功能,通常为各种类型的设备驱动程序的接口。
2.13对象的关键特征在于对象的内部结构是隐藏的,而针对对象所含数据的任何访问都需通过对象的方法来进行。这就使得应用程序不太可能由于误用对象而引发其他模块的问题。
2.14中断向量机制

用户产生中断事件
硬件找到对应于中断事件的中断号
中断控制器将中断号放置在中断寄存器
中断号被当作中断向量的索引
索引指向中断向量的对应中断号的表项
表项里为对应中断类型的中断服务例程的内存地址,即如何解决中断事件的做法
表项被硬件提取出来作为地址
硬件以子程序的方式来实际调用相应的中断处理例程

2.15

应用程序利用描述服务的信息来加载某些寄存器
执行一个系统调用指令
触发一个将由操作系统来处理的中断
操作系统执行所需服务
完成后将控制返回给应用程序

2.16真的
2.17硬件级虚拟机和应用级虚拟机
2.18此为开放性答题
2.19GUI图形用户界面

第三章

3.1
(1)输出字符到视频显示器或电传打字机等设备上
(2)从键盘设备获取字符
(3)把内存的全部或部分内容保存到盒式磁带或软盘上
(4)用磁带或磁盘上存放的镜像对内存内容进行恢复
(5)打印字符到打印机上
3.2监控程序会返回一个表示正确或不正确的状态码到寄存器中,不正确的话还会说明发生了什么异常情况。
3.3没有一个标准的监控程序或监控程序接口,所以对于每一家制造商的计算机,即便是同样的应用程序也需要分别专门编写。
3.4(1)主存大小是相当有限的,导致了一次仅加载一道应用程序进入内存
(2)磁盘格式是标准化的,导致基于标准磁盘格式的标准文件系统的设计
(3)一次仅加载一道程序,所以不需要处理器调度,所以中断处理主要针对输入/输出设备
3.5应用程序被设计为绕过BDOS(基本磁盘操作系统),产生的问题为可移植性变低了。
3.6打印字符到计算机和利用磁盘文件系统创建一个新文件、读/写文件以及关闭文件。
3.7内置于CCP(Console Command Processor),如“DIR”命令用于列出所有文件的目录,“ERA”命令用于删除一个文件或者一个文件。
3.8磁道;扇区
3.9磁盘引导区、文件目录区、数据储存区
3.10因为CP/M系统并非拥有相同数量的内存,因此操作系统被构建为占据内存最高地址的空间部分,从而预留下一个固定的地址用于加载程序。如果操作系统变大了,其将从内存空间中一个较低的地址开始,但不会强制任何程序修改地址,尽管此时留给用户程序和容纳用户程序的内存空间会变小。所以当操作系统升级到新版本时,没有必要重新链接所有的程序。
3.11否,在某些嵌入式系统中依然有很广泛的应用

As of 2015, most business applications are intended to run on platforms with virtual memory. A developer on such a platform can design a program as if the memory constraint does not exist unless the program’s working set exceeds the available physical memory. Most importantly, the architect can focus on the problem being solved without the added design difficulty of forcing the processing into steps constrained by the overlay size. Thus, the designer can use higher-level programming languages that do not allow the programmer much control over size (e.g. Java, C++, Smalltalk).

Still, overlays remain useful in embedded systems.[4] Some low-cost processors used in embedded systems do not provide a memory management unit (MMU). In addition many embedded systems are real-time systems and overlays provide more determinate response-time than paging. For example, the Space Shuttle Primary Avionics System Software (PASS) uses programmed overlays.[5]

Even on platforms with virtual memory, software components such as codecs may be decoupled to the point where they can be loaded in and out as needed.

以上是维基百科中关于覆盖(overlay)的现代应用
3.12后台运行的打印机进程

第四章

4.1其他应用程序也可能运行,只是未持有焦点而已。例子:文本搜索功能,当用户执行文本搜索,palm操作系统会顺序调用一些应用程序(这些程序拥有对其自身数据库文件进行文本搜索功能),这些应用在自身搜索字符并把结果发给系统,这些程序没有焦点,但一样在运行。
4.2(1)基本内存为易失性随机访问储存器
(2)通常没有辅助储存器
(3)小屏幕尺寸
(4)键盘并非标配
4.3微内核,palm的许多系统服务并不是内核的一部分,而是位于内核的上面,如一些资源管理器(内存管理)等(请参见56页图)
4.4为了支持涂鸦式输入,为了跟踪触控笔在液晶显示器屏幕的涂鸦区表面上的活动痕迹,处理器必须快速反复检查确认触控笔的位置,相关跟跟踪是一项实时任务,因为系统需要保证其可以频繁地和足够敏捷地检查触控笔的位置以跟踪触控笔的运动。
4.5事件循环

操作系统启动程序
检查是否是第一次运行
初始化该程序的数据库
等待事件的发生,比如一些涂鸦式输入事件
其他事件
由于其他程序打开而被停用
停用后若再次获得焦点

4.6操作系统需要对碎片化空间进行紧凑,考虑到内存空间中的相关内存块的移动,所以被占用的内存卡应以一种受控的方式进行访问,这种受控方式就是主控指针表。
4.7可移动的内存块是从堆的前端开始分配的,而不可移动的内存块是从堆的后端进行分配的,两者之间的区域被认为是空闲空间。
4.8指“文件”
4.9plam设备的处理器的处理能力不太强。
4.10原生接口和熟式接口
4.11否,应用程序应该把硬件细节抛给操作系统去处理,而通过使用标准的系统调用来访问显示器,不应该绕过系统直接把数据发给屏幕。
4.12参见第4.8节整节或者4.5答案。
4.13
(1)在大多数情况下,应用程序员并不会直接在窗口上进行绘制,所有操作都基于按钮、菜单等图形化用户界面元素。
(2)若应用程序需要支持动画或想定义自己的操作系统所没有提供的其他图形化用户界面元素时,唯有使用低级的绘图功能。

第五章

附:早期macOS系统和模拟器
第五章里面出现了minivMac模拟器,可以模拟很久以前的MacOS系统,但很奇怪的是那个给出的网址上只可以下载模拟器,却没有ROM文件,也就是上面只有模拟器,没有苹果系统,网站作者由于版权原因还叫你去购买八十年代的苹果机mactonish,外国人的法律意识真是高。
不过小编经过一番寻找终于找到了即食版的旧苹果系统
以下是链接
链接:https://pan.baidu.com/s/1ANOEUCwG3uhDkcho317jIA
提取码:ehia

5.1Xerox Alto
5.2 Mac 与IBM PC价格相当
5.3摩托罗拉68000系列
5.4更实惠,并且图形化用户界面使其成为一个非常有用的系统。
5.5最初的Mac一次运行一道程序,原因如下:内存有限;Mac要拥有图形化界面;只有一个程序运行的时候,当程序退出时,应用程序堆进行了清除,使得碎片化问题降低到了最小的程度。
5.6正确
5.7所有的文件都被存放在单一的目录里面,所以层级是1
5.8 16MB
5.9错误,应用程序也运行在管理程序模式中
5.10应用程序启动时,一般为堆的大小设置一个上限,并由内存相关例程控制使堆的增长不超过堆的上限;但是,栈却没有硬件机制控制其不能向下增长超过堆的上限,这可能会使栈和堆重叠而崩溃。
5.11系统设立了一个栈嗅探器子系统,在监视器垂直回扫的间隔间运行和检查栈是否触碰到堆的上限了。
5.12堆内存的碎片化;macOS支持可重定位的内存块,这些内存块通过不可重定位的主指针块的指针来访问,在内存回收的过程中,可重定位块经常会被紧凑处理,也可以被标记为可清除的,从而意味着如果内存空间缩减到低于预定的限值,那么系统就可以在紧凑期间把他们清除掉。
5.13MacOS可在紧凑期间把标记为“可清楚的”的内存块进行清除,而Palm则没有这个操作。
5.14最初目的是避免占用软盘上有限的储存空间,因为早期的Mac没有硬盘,同时,由于相关系统代码不必从软盘驱动器读取,所以有助于使系统启动得更快点。
5.15由于Mac设备的内存增大,使得Mac得以支持某种形式的多任务,并率先在切换器中得到了应用,所以用户只需切换焦点来进行复制粘贴操作,而不必先关掉一个程序再打开另一个程序来完成以上操作,这极大地提升了速度。
5.16这是非常受限的多任务,在任何时刻仍然只有一个程序在运行,其他程序实际上并没有运行。
5.17主要变化:文件夹成为实实在在的子目录,而不仅仅是目录项的标签,并且文件夹能包含其他文件夹。
其他变化:有关目录项还包括文件何时创建和何时最后一次修改、文件类型、和创建程序代码以及32字符的文件名和其他元数据;另外有关系统采用位图来监测空闲空间并运用B树来存放目录。
5.18(e)正确描述应该是在多个程序中查找一个字符串
5.19第5版系统有待争议
5.20老旧的Mac计算机不能迁移到新版系统
5.21相关程序可以被编译和链接生成既包含68000原生代码又包括PowerPC的可执行模块。这便允许相应的单一版本的程序既可以在老旧机器上运行,又可以在新型机器上运行。
5.22正确。虚拟内存用磁盘驱动器上的一些空间来模拟缺失的内存块。
5.23为了使单个应用程序可以使用多个处理器。
5.24多用户支持、文件共享被修改为支持TCP/IP协议、对内置视频卡的支持。
5.25X版操作系统的确切演变过程追溯起来比较困难,而且与本教材不是非常关联。
以下图片是MacOS版本年表
在这里插入图片描述

第六章

6.1发行版提供了安装程序,可以节省时间,同时也可降低忽略一些小而重要的细节的概率。
6.2IEEE对POSIX标准收取大笔的费用,从而导致免费版本的开发人员无法付得起这笔费用,所以对于小公司或未付费开发人员,单一UNIX规范更重要。
6.3对于第二版Linux而言,如果次版本号是奇数的话,则代表是开发版本,如果是偶数,则表示是产品版本,所以2.7是开发版本,可能存在bug,所以大型组织安装的时候不会使用一个不完善的版本。
6.4正确
6.5错误,是一个整体式内核操作系统
6.6通过动态可加载模块,其允许基本内核包含最少量的功能,并且在系统启动之后加载(卸载)的模块来“装点”
6.7为了一些需求,比如某些工作需要内核立即完成,这个时候就将所有级别的中断禁用,或使任何较低优先级的中断禁用。所以就有了上半部分(由那些需要立即发生的事件组成)和下半部分(由那些能够用更宽松的时限来完成的事件组成)。
6.8UNIX下,当一个进程(父进程)想要启动另一个进程(子进程)的时候,它首先会发出“fork”系统调用,该调用将会以父进程副本来创建子进程。
Linux为每个进程维护若干不同的内存分段,然后通过clone调用一组标志,以告诉操作系统要在父进程和子进程共享哪些内存分段。有关标志如下:
在这里插入图片描述
6.9否,Linux是一个抢占式多任务操作系统,当系统开始运行一个进程时,它将会设置一个定时器,以便在对应进程运行时间而未执行阻塞式系统调用的情况下,触发中断以使操作系统进行处理(就是将正在运行的进程放回到就绪队列中)

第七章

7.1处理器的速度并不是无限制的,在3GHz的时钟速度下,在时钟之间,信号在真空中只能传10厘米。而且时钟频率越高,时钟周期间的信号传送距离越短,然而这是很难达到的,同时,由于处理器的跨度通常超过一厘米,所以这又限制了处理器在一个时钟周期内可以完成的工作量。
7.2错误,同一个结点的处理器必须相同,无论此集群是否在网格中。
7.3(c)
7.4错误,是横扫流可以同时并行地处理。
7.5对工作流的某一部分的提速会使该部分更为迅捷,但对于整个工作流程而言未必会取得相同的增益效果。
7.6(b)
7.7处理器芯片上的高速缓存储存器
7.8中间件
7.9(e)
7.10在集群和网格上,这通过创建特殊的文件共享节点来加以实现,并且文件共享节点提供了锁定命令来锁定文件的全部和一部分,从而实现无错误的数据共享。
7.11在软件编写时就要考虑故障的发生与解决,例如用超时等方法来确认一个远程过程调用在合理的时间期限内得到了响应;或者通过监控系统,并尝试检测故障,同时还可以查看单个节点或集群的性能以检测因为硬件或配置不当的软件而导致的故障。
7.12与单处理系统差不多的时间片调度策略,但是调度器必须得考虑在哪里调度和执行进程。
7.13集群系统任务的分配通常由单一机构负责管理,并且其依赖于中间件,通过独立于底层操作系统的方式来促进分布式处理的抽象机制。
7.14大多数的志愿计算项目都是基于参数横扫流的,其中大量的数据被分解为小的数据集并被发送到志愿者的计算机上。这些计算机都运行着相同的科学程序来分析其自己的特定的数据集,然后将结果发回。
7.15Globus集群是网格的一种,在网格中的节点之间传输数据和程序、预留本地空间以及检索结果均通过Globus命令和接口来完成,也即任务的分配也是通过Globus命令和接口来完成。

第八章

8.1(b)
8.2(1)处理器状态:即当我们停止一个进程的时候,我们会将这些信息保存在进程控制块中,就是处理器状态信息。
(2)进程状态:包括就绪状态、运行状态、等待状态等
8.3 5种
8.4至少一个
8.5多个
8.6我们需要确定处于就绪状态的进程什么时候应该运行,使得其更加合理。
8.7因为有些进程并不是会一开始就到达并与其他进程进行比较,如果一些时间短的进程比较后到达,而长时间的进程先到达,那么长时间的进程先运行,(在不运行抢占的情况下)那么平均等待时间一样会很高。
8.8如果正在运行的进程存在缺陷或问题,或者可能试图通过使用超过其应所得的更多的处理器时间来使自己获得更好的用户响应。
8.9图形化用户界面一般希望进程可以立即执行,而不是把提交的进程放在一个队列里,稍后才执行。
8.10在某些系统中可能会有一些我们认为比其他进程更重要的进程,所以我们让这个进程在处理器中有更高的优先级,或者将这个进程与某个特定处理器耦合,减少上下文开销。
8.11shell命令
8.12线程是操作系统能够运行的运算调度的最小单位,线程包含在进程之中。
运行多线程比运行多进程的好处:一方面,多线程在内存中只有一份程序和数据,所以我们会有更多的内存空间来存储其他东西。另一方面,在线程之间切换的开销比在线程之间切换的开销要小得多,因为用多线程的话只保存处理器状态。
8.13内核级线程的好处:如果单个线程对操作系统进程了阻塞性调用,那么操作系统不会阻塞整个进程;由于操作系统知道了各个线程的存在,所以在多处理器系统中,就可以让线程分别在独立的处理器上运行。
8.14一对一映射、多对一映射、多对多映射
8.15库例程总是在堆栈上分配局部变量,即是线程安全的。
8.16否,来自多个进程的指令可以同时在单个处理器上执行。
8.17 如果一个应用程序员真正想要充分利用多线程而不考虑使用特定的软件包,程序必须要用异步输入/输出来编写,从而避免阻塞整个进程。所以如果程序运行在使用内核级线程实现的环境中,那么是不会因为一个线程发出阻塞性调用而阻塞整个进程的,但是在使用异步调用开发程序方面所付出的努力就白白浪费掉了。
8.18windows 调度的是线程而不是进程
8.19Linux使用clone系统调用来启动子程序,其他用fork系统调用来使用子程序;在Linux平台下,当一个任务克隆一个子任务时,clone将使用一个位掩码来指定子任务与父任务的共享元素。
8.20达到用户级线程和内核级线程实现之间的最佳可能的平衡。
8.21Java在语言级别上支持线程。

——————
待更新

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值