—— 面对如此复杂的操作系统,我们犹如史前动物

由于书后面并没有答案,所以我从书上或网上整理了一份~

操作系统提供的的服务和功能可以分为两大类,简要描述这两大类,并讨论它们如何不同

第一类是用于提供给用户的功能,为了方便程序员,主要包括:用户界面、程序执行、IO操作、文件系统操作、通信和错误检测。

另一类是操作系统本身的服务,主要目的不是帮助用户,而是确保系统本身运行高效,主要包含以下内容:资源分配、记账以及保护与安全。

描述传递参数到操作系统的三种通用方法

  1. 最简单的是通过寄存器来传递参数,不过有时参数数量会比寄存器多,所以就有了第二种方法
  2. 参数存储在内存的块或表中,而块或表的地址通过寄存器来传递。(Linux所采用的)
  3. 通过程序放在或压入堆栈中,并通过操作系统弹出

描述如何获得一个程序执行不同代码部分的时间统计简表,讨论获得这种统计简表的重要性

可以发出周期性的定时器中断,并监视在传递中断时当前正在执行的指令或代码段,那些代码片段处于活动状态的统计配置文件应该与程序在其代码的不同部分花费的时间一致,一旦获得了这样的统计配置文件,程序员就可以优化消耗更多CPU资源的那些代码片段

操作系统文件管理的五个主要功能是什么

  1. 目录的创建和删除
  2. 创建和删除文件
  3. 支持原与操作文件和目录
  4. 将文件映射到辅助存储
  5. 在非易失性存储介质上备份文件

对于操作文件和设备,采用同样的系统调用接口有什么优点和缺点

在Linux中,设备即文件,它们采用同样的系统调用接口

这样的好处在于每个设备都可以非常方便的获得,所以大多数的内核通过文件接口来处理设备,可以方便的通过执行硬件确定的代码,加入一个新的设备来支持抽象的文件接口。这种方式不仅有利于用户程序代码的发展,用户可以以相同的方式将程序代码写入设备和文件,还有利于设备驱动程序代码的发展。

缺点在于很难获得某些设备档案存取的API范围内的功能,因此可能会丢失功能或者性能。

命令解释器的用途是什么?采用操作系统提供的系统调用接口,用户能否开发一个新的命令解释程序

命令行解释器是一个单独的软件程序,它可在用户和操作系统之间提供直接的通讯。命令行解释器是解释器的一种,用于对命令行进行解释执行,获取井执行用户指定的下一条命令。解释器是一种电脑程序,能够把高级编程语言一行一行直接转译运行。解释器不会一次把整个程序转译出来,只像一位“中间人”,每次运行程序时都要先转成另一种语言再作运行,因此解释器的程序运行速度比较缓慢。它每转译一行程序叙述就立刻运行,然后再转译下一行,再运行,如此不停地进行下去。

用户可以通过操作系统提供的系统调用来开发一个新的命令解释程序,命令解释器允许用户创建、管理进程和确定它们的通信方法,所有的功能都能被用户程序通过系统调用来使用,这个也可能由用户开发一个新的命令行解释。

进程间通信的两个模型是什么?这两种方案有何长处和短处?

进程间通信的常用模型有两个:消息传递模型和共享内存模型

  • 消息传递模型的优点:对少量的数据交换很有用,也更容易实现,可以用作同步机制来处理通信进程间的行动
  • 消息传递模型的缺点:性能比内存共享模型弱
  • 内存共享模型的优点:因为是在内存之间进行消息传递,所以优点在于其高速与便捷,可以按内存传输的速度来进行
  • 内存共享模型的缺点:由于没有提供同步机制的进程,所以在保护和同步方面有问题。

为什么机制和策略的分离是可取的

机制和策略的分离,保证了操作系统的灵活性,使得系统能够被很容易的修改。没有两个系统的装置是完全相同的,所以每一个装置都想把操作系统改为适合自己的。当机制与策略分离时,策略可以随意的改变,但机制还是不能改变,这种安排提供了一个更灵活的制度。

如果操作系统的两个组件相互依赖,那么采用分层法时很难,找一个这样的场景:有两个系统组件的功能是紧密耦合的,但如何对它们分层却并不清楚。

虚拟内存子系统和存储子系统,这两个系统组件的功能紧密耦合。许多系统文件允许被映射到一个执行进程的虚拟内存空间,另一方面,虚拟内存子系统通常使用存储系统来提供不在内存中的页,此外,在刷新磁盘之前,更新的文件有时会缓冲到物理内存,从而需要认真协调虚拟内存子系统和文件系统之间的内存。

采用微内核法设计系统的主要优点是什么?用户程序和系统服务在微内核架构内如何交互?采用微内核设计的缺点是什么?

  • 微内核的主要功能是,为客户端程序和运行在用户空间中的各种服务提供通信。
  • 微内核方法的主要优点是便于扩展操作系统:所有新的服务可在用户空间内增加,因而并不需要修改内核,当内核确实需要被修改时,所做的修改也会很小,因为微内核本身很小。
  • 用户程序和系统服务主要是通过消息传递来进行交互的。
  • 缺点在于因为增加的系统功能的开销,微内核的性能会受损

采用可加载内核模块的优点是什么

采用可加载内核模块(loadable kernel module):内核由一组核心组件,无论在启动或运行时,内核都可通过模块链入额外服务。这种设计的思想:内核提供核心服务,而其他服务可在内核运行时动态实现。其优点在于:动态链接服务优于直接添加新功能到内核,这是因为对于每次更改,后者都需要重新编译内核。

IOS和Android有什么相似?它们如何不同?

  • 相似点:均运行在移动平台、均采用分层的方法,并且提供一组丰富的移动应用程序开发框架,底层的软件为Linux内核。
  • 不同点:IOS仅能够运行于APP移动设备,并且为闭源,Android可以运行于各种移动平台,并且开源

解释为什么Android系统运行的Java程序不使用标准的Java API和虚拟机

Android的运行环境包括一套核心库和Dalvik虚拟机,Google开发Android API而不是用标准的Java API,是为了让系统更好的运行在Dalvik虚拟机上,Dalvik虚拟机专为Android设计,并针对内存和处理有限的移动设备进行了优化。