《操作系统概念》笔记--第二章 操作系统结构

操作系统的结构

操作系统提供环境以便执行程序

操作系统服务

操作系统为程序和程序用户提供某些服务。
操作系统服务分两大类,用户服务和系统服务
用户服务用于提供用户功能,包括用户界面,程序执行,I/O操作,文件系统操作,通信和错误检测
系统服务不是为了帮助用户而是为了确保系统本身运行高效。多系统用户通过共享计算机资源可以提高效率。包括资源分配,记账,保护与安全。

用户服务

用户界面(User Interfase, UI):一种命令行界面(Command-Line Interfase, CLI),采用文本命令。另一种是批处理界面(batch interface),命令以及控制这些命令的指令可以编成文件以便执行。其中最常用的是图形用户界面(Graphical User Interface, GUI)。
程序执行:系统应能加载程序到内存,并加以运行。程序还能结束执行,包括正常或不正常结束。
I/O操作:为了效率和保护,用户不应该直接操作I/O设备,操作系统提供手段来执行 I/O
文件系统操作:用户或程序对文件等进行操作需要通过操作系统。许多操作系统提供多种文件系统,有的允许个人选择,有的提供特殊功能或性能。
通信:在许多情况下,一个进程需要与另一个进程交换信息。通信实现可以通过共享内存(shared memory)(两个或多个进程读写共享内存区域),也可以通过消息交换(message passing)(符合预先定义格式的信息分组可以通过操作系统在进程之间移动)。
错误检测:操作系统需要不断检测错误和修正错误。

系统服务

资源分配:当多个用户或多个作业同时运行时,每个都应该分配资源。
记账:我们需要记录用户使用资源的类型和数量。
保护与安全:对于存在多用户或联网的计算机系统的信息,用户可能需要控制信息使用。

系统调用

系统调用(System call) 提供操作系统服务接口
通常,应用程序开发人员根据应用编程接口(Application Programming Interface ,API)来设计程序。API方便为应用程序员规定了一组函数,包括每个函数的输入参数和返回值。
共有三组常见的API可为应用程序员所用:

适用于Windows系统的Windows API
适用于POSIX系统的POSIX API(这几乎包括所有版本的UNIX,Linux和Mac OS X)
适用于java虚拟机的java API

那么,为什么应用程序员更喜欢根据API来编程,而不是采用实际系统编程呢?

一个好处涉及程序的可移植性。应用程序员根据API设计程序,来希望任何支持同一API的系统上编译并执行(虽然在现实中国体系差异往往使这一点更困难)。
再者,对于应用程序员,实际系统调用比API更加注重细节且更加难用。

调用者无需知道如何实现系统调用,而只需遵循API,并知道在调用系统调用后操作系统做了什么。
向操作系统传递参数有三种常用方法:

最简单的是通过寄存器来传递参数。
不过,有时候参数数量会比寄存器多。这时,这些参数通常存在内存的块或表中,而块或表的地址通过寄存器来传递。
参数也可通过程序放在或压入到堆栈中,并通过操作系统弹出。

系统调用的类型

系统调用大致分为六大类: 进程控制(process control), 文件管理(file manipulation), 设备管理(device manipulation),信息维护(information maintenance),通信(communication) 和 保护(protection)
*命令解释器的用途是什么?

命令解释器从用户或文件读取用户并执行,一般转化为系统调用。

系统程序

现代操作系统的另一个特点是系统程序。系统程序(system program),也称为系统工具(system utility),为程序开发和执行提供了一个方便的环境。有的系统程序只是系统调用的简单接口,而其他的可能相当复杂。
系统程序可分为以下七类(文件管理,状态管理,文件修改,程序语言支持,程序加载与执行,通信,后台服务):
文件管理:这些程序创建,删除,复制,重新命名,打印,转储,列出,操作文件和目录
状态信息:有些程序可从系统那里得到日期,时间,内存或磁盘空间的可用数量,用户数或其他状态信息。
文件修改:有多个编辑器可以创建和修改位于磁盘或其他存储设备上的文件。
程序语言支持:常用程序语言的编译程序,汇编语言,调试程序和解释程序,通常与操作系统一起提供给用户,或者自行下载
程序加载和执行:程序一旦汇编或编译后,要加载到内存上才能执行
通信:这些程序提供在进程,用户和计算机系统之间创建虚拟链接的机制
后台服务:所有通用系统都有方法,以便在引导时创建一些系统的进程。这些进程中,有的执行完任务就终止,有的会一直运行到系统停机。一直运行的系统进程,称为服务(Service), 子系统(subsystem )或守护进程。
除系统程序外,大多数的操作系统提供解决常见问题或执行常用操作的程序。如网络浏览器,文字处理器和文字排版器等。

操作系统的结构

操作系统有多种结构,其中有简单结构,分层方法,微内核,模块,混合系统。

简单结构

很多操作系统缺乏明确定义的结构,通常,这些操作系统最初是最小的,简单的,功能有限的系统。
比如MS-DOS就是这样的一个系统,当初设计人员设计的时候,没想到后来会如此受欢迎,。由于是利用最小空间而提供最多功能,因此并没有被仔细的划分模块。
图片2-11
MS-DOS系统并没有很好地区分功能的接口和层次。
应用程序能直接访问基本的I/O程序,并直接写到显示器和磁盘驱动。这会出现问题
这种自由使MS-DOS易受错误或恶意程序的伤害,因此用户程序出错会导致整个系统的崩溃。
还有一个例子,就是最初的UNIX操作系统,采用有限结构。它由两个独立的部分组成:内核和系统程序。内核又分为一系列接口和驱动程序。系统调用接口之下和物理硬件之上的所有部分为内核。这种单片结构有一个独特的性能优势:系统调用接口和内核通信的开销比较小。
图片2-12

分层方法

有了适当的硬件支持,操作系统可分成很多块。
系统的模块化有很多方法,一种方法就是分层法(layered approach),即操作系统分成若干层(级),最底层(0)为硬件,最高层为接口
图片2-13
分层法的主要优点在于简化了构造和调试。所选的层次要求每层只能调用更低层的功能和服务。
每层的实现都只是利用更低层所提供的操作,且只需要知道这些操作做了什么,并不需要知道这些操作是如何实现的。因此,每层要为更高层隐藏一定的数据结构,操作和硬件。
分层法的主要难点在于合理定义各层/
分层实现的最后一个问题是与其他方法相比效率稍差。因为当一个用户程序执行操作时,需要一层一层地向下,每层都会增加额外开销。

微内核

随着UNIX的不断壮大,其内核也变大更大且更难管理。
微内核从内核中删除不必要的组件,而将他们当做系统级与用户级的程序来实现。
微内核的主要功能是,为客户端程序和运行在用户空间中的各种服务提供通信,通信是通过消息传递(message passing)来提供的。
微内核方法的优点之一是便于扩展操作系统。所有新服务都可在用户空间里增加,并且如果一个服务出错,不会影响操作系统的其他部分。
但是由于增加的系统功能的开销,微内核的性能会受损。
*微内核的优点和缺点是什么?

优点:增加一个新的服务不需要修改内核
在用户模式中更安全,更易操作
缺点:频繁的消息传递使用系统调用,降低性能

模块

采用可加载的内核模块(loadable kernel module)
这种设计的思想是:内核提供核心服务,而其他服务可在内核运行时动态实现。
动态链接服务由于直接添加新功能到内核,这是因为对于每次更改,后者都要重新编译内核。
并且模块之间无需调用消息传递来进行通信。

混合系统

实际上,很少有操作系统采用单一的,严格定义的结构,他们组合了多种不同的结构,从而形成了混合系统。
Mac OS X是一个混合系统,首先,是分层系统。
顶层包括Aqua用户界面以及一组应用程序环境与服务。
这些层的下面为内核环境(kernel environment),它主要包括Mach微内核和BSD UNIX内核。Mach微内核提供内存管理,远程过程调用(rpc)和进程间通信以及线程调度。内核环境提供了一个I/O KIt,以便开发设备驱动程序和动态加载模块(称之为内核扩展(kernel extension)).
图片MAC-OS结构

系统引导

加载内核以启动计算机的过程,称为系统引导。
大多数计算机系统都有一小块代码,称之为引导程序(bootstrap program)或引导加载程序(bootstrap loader)。这段代码能够定位内核,并加载到内存以开始执行。

梳理与总结

首先,是操作系统的服务分为两大类
然后是系统调用的概念以及六大类型,还有传递参数到操作系统的三种通用方法
之后,操作系统有七类系统程序
最后,五种操作系统的结构与特点

发布了63 篇原创文章 · 获赞 8 · 访问量 7212

猜你喜欢

转载自blog.csdn.net/s1547156325/article/details/102998909