《操作系统概念精要》第二章的笔记

操作系统的服务:

操作系统提供环境以便执行程序,他为程序及程序用户提供某些服务。操作系统服务方便了程序员,使得编程更加容易。

操作系统有一组服务,用于提供用户功能:
①用户界面:几乎所有操作系统都有用户界面(UI)。这种界面有多种形式。
一种是命令行界面,它采用文本命令并由某一方法输入。
另一种是批处理界面,命令以及控制这些命令的指令可以编写成文件以便执行,最为常用是图形用户界面(GUI)。

②程序执行:系统应能加载程序到内存,并加以运行。程序应能结束执行,包括正常或不正常(并给出错误)。

③I/O操作:程序运行可能需要I/O,这些I/O可能涉及文件或设备。为了效率和保护,用户通常不应该直接控制I/O设备。操作系统必须提供手段以便执行I/O。

④文件系统操作:程序需要读写文件和目录,也需要根据文件名称来创建和删除文件,搜索某个给定文件,列出文件信息。

⑤通信:一个进程需要与另一个进程交换信息。这种通行可能发生在运行于一台计算机的两个进程之间,也可能发生在运行于通过网络连接的不同计算机的进程之间。通信实现可以通过共享内存,也可以通过消息交换。

⑥错误检测:操作系统需要不断检测错误和更改错误。

⑦资源分配:当多个用户或多个作业同时运行时,每个都应该分配资源。

⑧记账:我们需要记录用户使用资源的类型和数量。

⑨保护与安全:对于保存在多用户或联网的计算机系统的信息,用户可能需要控制信息使用。当多个独立进程并发执行时,一个进程不应干预其他进程或操作系统本身。保护应该确保控制系统资源的所有访问。系统安全而不受外界侵犯,也很重要。这种安全要求用户向系统认证自己(利用密码),以获取系统资源的访问权限。

用户与操作系统的界面:
①提供命令行界面或命令解释程序,允许用户直接输入命令,以供操作系统执行。
命令解释程序的主要功能是,获取并执行用户指定的下一条命令。这层提供了许多命令来操作文件:创建、删除、列出、打印、复制、执行等。这些命令有两种实现方法:
i、命令解释程序本身包括代码以执行这些命令。
ii、通过系统程序实现大多数的命令。

②允许用户通过图形界面(GUI)与操作系统交互。
用户不是通过命令行界面直接输入命令,而是利用桌面概念,即采用基于鼠标的视窗和菜单系统。用户移动鼠标,定位指针到屏幕上的图标,而这些图标代表程序、文件、目录和系统功能。根据鼠标的位置,按下鼠标可以调用程序,选择文件和目录,或打开菜单命令。

系统调用:

系统调用提供操作系统服务接口。应用程序开发人员根据应用编程接口(API)来设计程序。API的好处:
①程序的可移植性。
②实际系统调用相比于API更注重细节且更加难用。

对大多数的程序设计语言,运行时支持系统(由编译器直接提供的函数库)提供了系统调用接口,以连接到操作系统的系统调用。系统调用接口载取了API函数的调用,并调用操作系统中的所需系统调用。通常,每个系统调用都有一个相关数字,而系统调用接口会根据这些数字来建立一个序列表。

调用者无需知道如何实现系统调用,而只需遵循API,并知道系统调用后操作系统做了什么。通过API,操作系统接口的大多数细节可以隐藏起来,且课由运行时库来管理。

向操作系统场地参数的三种方法:
①通过寄存器来传递参数。
②存在内存的块或表中,而块或表的地址通过寄存器来传递。
③通过程序放在或压入到堆栈,并通过操作系统弹出。

系统调用的类型:
①进程控制:
执行程序应能正常或异常停止执行。如果一个系统调用异常停止当前执行的程序,或者程序遇到问题并引起错误陷进,那么有时转储内存到磁盘,并生成错误信息。内存信息转储到磁盘后,可用调试器来确定问题的原因。无论是正常情况还是异常情况,操作系统都应该立即将控制转到调用命令解释程序。命令解释程序接着读入下一个命令。
对于交互系统,命令解释程序只是简单读入下一个命令,而假定用户会采用合适命令以处理错误。
对于GUI系统,弹出窗口可用提醒用户出错,并请求指引。
对于批处理系统,命令解释程序通常终于整个作业,并且继续下一个作业。
错误越严重,错误传输的级别也越高。通过正常终于的错误级别定义为0,可以把正常和异常终止放在一起处理。

执行一个程序的进程或作业可能需要加载和执行另一个程序。这种功能允许使用命令解释程序来执行一个程序,该命令可以通过用户命令、鼠标点击或批处理命令来给定。

如果小程序终止是,控制返回到现有程序,那么必须保存现有程序的内存映像。因此,事实上创建了一个机制,以便一个程序调用另一个程序。

通常,两个或多个进程会共享数据,为了确保共享数据的完整性,操作系统通常提供系统调用,以允许一个进程锁定共享数据。这样,在解锁之前,其他进程不能访问该数据。

②文件管理

③设备管理:
进程执行需要一些资源,如内存、磁盘驱动、所需文件等。

④信息维护:
单步,即CPU每执行一条指令都会产生一个陷阱。调试器通常可以捕获这些陷阱。

⑤通信:
进程间通信的常用模型有两个:
i、消息传递类型:通信进程通过相互交换信息来传递信息。进程间的信息交换可以直接进行,也可以通过一个共同邮箱来间接进行。在开始通信前,应该先建立连接。应该知道另一个通信实体名称,他可能是同一系统的另一个进程,也可能是通过网络相连的另一计算机的进程。每台网络计算机都有一个主机名,每台主机也都有一个网络标识符,如IP地址。类似的,每个进程都有进程名,他通常可以转换成标识符,以便操作系统引用。大多数可接受连接的进程为专用的守护进程,即专用系统程序。通信源称为客户机,接受后台程序称为服务器。
ii、共享内存模型:进程通过系统调用创建共享内存,并访问其他进程拥有的内存区域。注意,操作系统通常需要阻止一个进程访问另一个进程的内存。共享内存要求两个或多个进程都同意取消这个限制,这样他们就可以通过读写共享区域的数据来交换信息。

信息传递对少量数据的交换很有用,因为没有冲突需要避免。与用于计算机间的共享内存相比,他也更容易实现。共享内存在通信方面具有高速和编写的特点,因为当通信发生在同一计算机内时,他可以按内存传输速度来进行。不过,共享内存的进程在保护和同步方面有问题。

⑥保护
保护提供控制访问计算机的系统资源的机制。

系统程序

现代操作系统的另一特点是一组系统程序。系统程序也称为系统工具,为程序开发和执行提供了一个方便的环境。系统程序可分为以下几类:
①文件管理:这些程序创建、删除、复制、重新命名、打印、转储、列出、操作文件和目录。
②状态信息:有些程序课从系统那里得到日期、时间、内存或磁盘空间的可用数量、用户数或其他状态信息。有些系统还支持注册表,可用于储存和获取配置信息。
③文件修改:有多个编辑器可以创建和修改位于磁盘或其他储存设备上的文件。
④程序语言支持:常用程序语言的编译程序、汇编程序、调试程序和解释程序,通常与操作系统一起提供给用户。
⑤程序加载与执行:程序一旦汇编或编译后,要加载到内存才能执行。
⑥通信:提供在进程、用户和计算机系统之间创建虚拟连接的机制。
⑦后台服务:所有通用系统都有方法,以便在引导时会创建一些系统程序的进程。一直运行的系统进程称为服务、子系统或者守护进程。

操作系统的设计与实现:

设计目的:
系统设计的首要问题是,定义目标和规范。需求可分为两大类:
①用户目标
②系统目标

机制与策略:
一个重要的原则是策略与机制的分离。机制觉得如何做,而策略决定做什么。
对于灵活性,策略与机制的分离至关重要。
只要决定是否分配资源,就应该做出策略觉定。只要问题是“如何做”而不是“做什么”,就要由机制来决定。

实现:
采用高级语言或至少系统实现语言来实现操作系统的优势与高级语言来编写应用程序相同:代码编写更快,更为紧凑,更容易理解和调试。另外,编程技术的改进使得只要通过重新编译,就可改善整个操作系统的生成代码。最后,如果使用高级语言来编写,操作系统更容易移植。采用高级语言实现操作系统的缺点仅仅在于速度的降低和存储的增加。

操作系统的结构

分层方法:
系统的模块化有许多方法。一种方法是分层法,即操作系统分成诺干层(级)。最低层(层0)为硬件,最高层(层N)为用户接口。分层法的主要优点在于简化了构造和调试。所选的层次要求每层只能调用更低层的功能(操作)和服务,这种方法简化了系统的调试和验证,每层的实现都是利用更低层所提供的操作,且只需要知道这些操作做了什么,而并不需要知道这些操作是如何实现的。异常,每层要为更高层隐藏一定的数据结构、操作和硬件。分层法的主要难点在于合理定义每层。由于每层只能利用更低层的功能,异常有必要仔细规划。

微内核:
微内核构造的操作系统,从内核中删除所有不必要的部件,而将他们当成系统级与用户级的程序来实现,这样的结果是内核较小。

微内核的主要功能是为客户端和运行在用户空间中的各种服务提供通信。通信是通过消息传递来提供的,如果某个客户程序要访问一个文件,那么他应与文件服务器进行交互。客户程序和服务器不会直接交互,而是通过微内核的消息传递来间接通信。

微内核的优点之一便是便于扩展操作系统。

模块:
目前操作系统设计的最佳方法是采用可加载的内核模块。内核有一组核心部件,无论在启动或运行时内核都可以通过模块链入额外服务。
这种设计的思路是:内核提供和兴服务,而其他服务可在内核运行时动态实现。动态链接服务优于直接添加新功能到内核,这是因为对于每次更改,后者都要重新编译内核。这种整体系统功能类似于一个分层系统,其中每个内核部分都有已定义的、受保护的接口。但它比分层系统更加灵活,这是因为任何模块都可以调用任何其他模块。

混合系统

很少有操作系统采用单一的、严格定义的结构。相反,他们组合了不同的结构,从而形成了混合系统,以便解决性能、安全性和可用性等问题。

操作系统的调试

广义而言。调试是查找和更正系统(包括硬件和软件)错误。性能问题为bug,因此调试也会包括性能优化,即通过解决处理瓶颈而改善性能。

故障分析:
当一个进程发生故障是,大多数操作系统将错误信息写到一个日志文件,以提醒操作员或用户所发生的问题。操作系统也会进行核心转储,即进程内存的捕获,并保存到一个文件以便以后分析,以便程序员分析进程的代码和内存。
内核故障称为崩溃。当发生崩溃时,错误信息会保存到一个日志文件,并且内存状态会保存到一个崩溃转储。

性能优化:
性能优化是通过消除处理瓶颈而改善性能。为了找出瓶颈,我们必须能够监视系统性能。因此,操作系统应该有一些手段,以便计算和显示系统行为的度量。有几个操作系统通过生成系统行为跟踪列表来做到这一点。所有相关事件及其事件和其它重要参数,都记录并写入到文件,之后,可通过分析程序来处理日志文件,以确定系统性能并识别瓶颈与低效处。这样的跟踪可以用作输入,以模拟建议改进的系统。跟踪有助于找到操作系统行为的错误。

性能优化的另一种方案是采用专用的交互工具,以便用户和管理员检查各种系统组件的状态来寻找系统行为的错误。

操作系统的生成

加载内核以启动计算机的过程,称为系统引导。大多数计算机系统都有一小块代码,称为引导程序或引导加载程序。中断代码能够定位内核,并加载到内存以开始执行。有的计算机系统采用两个步骤:一个简单的引导程序从磁盘上调入一个更复杂的引导程序,而后者再加载内核。

当CPU收到一个重置事件时,例如上电开机或重新启动,指令寄存器会加载某个预先定义的内存位置,并从该位置开始执行。该位置就是初始引导程序所在。该出为只读存储器(ROM)形式,因为系统启动是RAM处于未知状态。由于不需要初始化和不受计算机病毒的影响,用ROM是很方便的。

有些系统,如手机、平板电脑和游戏控制器,将整个操作系统保存在ROM中。对于小型的操作系统、简单的支持硬件和耐用的操作,将操作系统存储在ROM中是合适的。该方法有一个问题:改动引导程序代码需要改动ROM芯片。为了解决这个问题,有些系统采用可擦可编程只读存储器,这是一种只读存储器,但当明确给定一个命令时就会变为可写的。

对大型操作系统或经常改变的系统,引导程序存放在固件,而操作系统存放在磁盘上。在这种情况下,引导程序会先进行诊断,然后从磁盘固定位置(如第0块)读取整块信息到内存,最后执行引导块的代码。存储在引导块的程序可能足以价值整个操作系统到内存,并且开始执行。具有引导分区的磁盘称为引导盘或系统盘。

猜你喜欢

转载自blog.csdn.net/weixin_45715461/article/details/114759946