第一章 【操作系统概述】

概述


操作系统(Operation System): 简称OS,是管理计算机(硬件)与软件资源的计算机程序。是一款系统软件。

例如Windows系统(大部分电脑使用)、Unix(大型服务器)、Linux(服务器)、macOs(苹果电脑)等。

计算机系统的构成:用户、应用程序、操作系统、OS硬件(裸机)。

特点

1.与硬件交互

2.对资源共享进行调度管理

3.解决并发操作处理中存在的协调问题

4.数据结构复杂,外部接口多样化,便于用户反复使用

作用

1.管理与配置内存

2.决定系统资源工序的优先次序

3.控制输入设备与输出管理

4.操作网络与管理文件系统等基本事务

5.提供一个让用户与系统交互的操作界面

操作系统的目标与功能


操作系统的目标

有效性:提高系统资源的利用率,提高系统的吞吐量。

方便性:方便用户使用。

可扩充性:随着硬件的升级,操作系统的性能也需要增强。

开放性:能够兼容不同的硬件与软件。

操作系统的功能

1.作为计算机系统资源的管理者

(1)处理机管理

在多道程序环境下,外理机的分配和运行都以进程(或线程)为基本单位,因而对处理机的管理可归结为对进程的管理。并发是指在计算机内同时运行多个进程,因此进程何时创建、何时撤销、如何管理、如何避免冲突,合理共享就是进程管理的最主要的任务。进程管理的主要功能包括进程控制、进程同步、进程通信、死锁处理、处理机调度等。

(2)存储器管理

存储器管理是为了给多道程序的运行提供良好的环境,方便用户使用及提高内存的利用率主要包括内存分配与回收、地址映射、内存保护与共享和内存扩充等功能。

(3)文件管理

计算机中的信息都是以文件的形式存在的,操作系统中负责文件管理的部分称为文件系统。文件管理包括文件存储空间的管理、目录管理及文件读写管理和保护等。

(4)设备管理

设备管理的主要任务是完成用户的请求,方便用户使用各种设备,并提高设备的利用率主要包括缓冲管理、设备分配、设备处理和虚拟设备等功能。这些工作都由“工人”负责,“雇主”无须关注。

2.作为用户与计算机硬件系统之间的接口

为了让用户方便、快捷、可靠地操纵计算机硬件并运行自己的程序,操作系统还提供了用户接口。操作系统提供的接口主要分为两类:一类是命令接口,用户利用这些操作命令来组织和控制作业的执行:另一类是程序接口,编程人员可以用它们请求操作系统服务。

(1)命令接口

使用命令接口进行作业控制的主要方式有两种,即联机控制方式和脱机控制方式。按作业控制方式的不同,可将命令接口分为联机命令接口和脱机命令接口。

联机命令接口:又称交互式命令接口,适用于分时或实时系统的接口。它由一组键盘操作命令组成。用户通过控制台或终端输入操作命令,向系统提出各种服务要求。用户每输入一条命令,控制权就转给操作系统的命令解释程序,然后由命令解释程序解释并执行输入的命令,完成指定的功能。之后,控制权转回控制台或终端,此时用户又可输入下一条命令。联机命令接口可以这样理解:“雇主”说一句话,“工人”做一件事,并做出反馈,这就强调了交互性。

脱机命令接口:又称批处理命令接口,适用于批处理系统,它由一组作业控制命令组成。脱机用户不能直接干预作业的运行,而应事先用相应的作业控制命令写成一份作业操作说明书,连同作业一起提交给系统。系统调度到该作业时,由系统中的命令解释程序逐条解释执行作业说明书上的命令,从而控制作业的运行。脱机命令接口可以这样理解:“雇主”把要“工人”做的事写在清单上“工人”按照清单命令逐条完成这些事,这就是批处理。

(2)程序接口

程序接口由一组系统调用(也称广义指令)组成。用户通过在程序中使用这些系统调用来请求操作系统为其提供服务,如使用各种外部设备、申请分配和回收内存及其他各种要求。当前最为流行的是图形用户界面(GUI),即图形接口。GUI最终是通过调用程序接口实现的,用户通讨鼠标和键盘在图形界面上单击或使用快捷键,就能很方便地使用操作系统,严格来说,图形接口不是操作系统的一部分,但图形接口所调用的系统调用命令是。

3.实现了对计算机资源的抽象

裸机仅构成计算机系统的物质基础,它向用户提供的仅是硬件接口,非常难于操作和使用。人们在硬件设备上覆盖一层管理软件,隐藏了设备操作的实现细节,向用户提供了一个对硬件操作的抽象模型。这种覆盖了管理软件的机器被称为扩充机器或虚拟机。

操作系统所提供了资源管理功能和方便用户的各种服务,将裸机改造成功能更强、使用更方便的机器。由此可见,OS就是铺设在计算机硬件上的多层次软件的集合,不能增强了计算机系统的功能,还隐藏了对硬件操作的具体细节,实现了对计算机资源的抽象。

eg:用户在游览器上搜索内容,游览器(程序)通过系统调用对计算机的网卡(硬件)进行访问,网络设备根据搜索内容将检索到内容在传给计算机网卡,通过程序接口返回给游览器。

操作系统的特征


操作系统的特征:并发、共享、虚拟、异步。

OS的并发性

同一时间间隔内含自行和调度多个程序的能力。

宏观上,处理机同时执行多道程序。

微观上,处理机在多道程序间高速切换(分时交替执行)

并发与并行的区别

并发:一个事物做多件事情。在微观上,这些事其实是一件一件做的,分时交替执行。

并行:多件事情在同一时间内被多个事物做了。这些事情同时在进行。

OS的共享性

共享性即资源共享,供多个程序共同使用。

同时共享方式:同一个时间段允许多个程序同时访问共享资源.

互斥共享方式:也叫独占式,允许多个程序在同一个共享资源上独立而互不干扰的工作(同一时间,只能被一个程序访问,一个一个排队访问,也叫“分时共享”)。

并发和共享互为存在条件

共享性要求OS中有多道程序运行,如果只有一道程序,则不存在共享的需求;同样的,多道程序运行很难避免对同一个资源进行访问,如果资源不支持共享,则不能完成多道程序并发执行。

OS的虚拟技术

使用某种技术把一个物理实体变成逻辑上的对应物。

时分复用技术

虚拟处理机技术:虽然计算机的核是一定的,并且每个核同时只能处理一道程序,分给每个核一个时间片(很短)去处理一道程序,然后在这些程序之间交替执行,在宏观上,仿佛一个核同时处理很多程序。

虚拟也就是将物理实体变为逻辑上的对应物,比如CPU的几个核同时处理几十个几百个程序,感觉上会有多个核,也称为虚拟处理器。

虚拟设备技术:虚拟打印机、处理器的实时共享

空分复用技术

虚拟磁盘技术:将一个磁盘虚拟出多个卷(逻辑上的)

虚拟存储器技术

OS的异步性

多道程序环境下,允许多道程序并发执行。

单处理机环境下,多个程序分时交替执行。

程序执行的不可知性:

  • 获得运行时机
  • 为什么暂停
  • 每道程序需要多少时间
  • 不同程序的性能,比如计算多少,I/O多少

在宏观上,“一气呵成”,在微观上,“走走停停”。

操作系统的发展


手工操作阶段

此阶段无操作系统。

用户在计算机上算题的所有工作都要人工干预,如程序的装入、运行、结果的输出等。随着计算机硬件的发展,人机矛盾(速度和资源利用)越来越大,必须寻求新的解决办法。

手工操作阶段有两个突出的缺点:

①用户独占全机。不会出现因资源已被其他用户占用而等待的现象,但资源利用率低。
②CPU等待手工操作,CPU的利用不充分。一的解决办法就是用高速的机器代替相对较慢的手工操作来对作业进行控制。

批处理阶段

操作系统开始出现。

为了解决人机矛盾及CPU和Ⅰ/设备之间速度不匹配的矛盾,出现了批处理系统。它按发展历程又分为单道批处理系统、多道批处理系统(多道程序设计技术出现以后)。

单道批处理系统

系统对作业的处理是成批进行的,但内存中始终保持一道作业。单道批处理系统是在解决人机矛盾及CPU和Ⅰ/0设备速率不匹配的矛盾中形成的。单道批处理系统的主要特征如下:

1)自动性。在顺利的情况下,磁带上的一批作业能自动地逐个运行,无须人工干预。

2)顺序性。磁带上的各道作业顺序地进入内存,各道作业的完成顺序与它们进入内存的顺序在正常情况下应完全相同,亦即先调入内存的作业先完成。

3)单道性。内存中仅有一道程序运行,即监督程序每次从磁带上只调入一道程序进入内存运行,当该程序完成或发生异常情况时,才换入其后继程序进入内存运行。

此时面临的问题是:每次主机内存中仅存放一道作业,每当它在运行期间(注意这里是“运行时”而不是“完成后”发出输入/输出请求后,高速的CPU便处干等待低速的Ⅰ/0完成状态。为了进一步提高资源的利用率和系统的吞吐量,引入了多道程序技术。

多道批处理系统

多道程序设计技术允许多个程序同时进入内存并允许它们在CPU中交替地运行,这些程序共享系统中的各种硬/软件资源。

当一道程序因Ⅰ/O请求而暂停运行时,CPU便立即转去运行另一道程序。它不采用某些机制来提高某一技术方面的瓶颈问题,而让系统的各个组成部分都尽量去“忙”,因此切换任务所花费的时间很少,可实现系统各部件之间的并行工作,使其整体在单位时间内的效率翻倍。

当然,多道批处理系统的设计和实现要比单道系统复杂很多,因为要充分利用各种资源,就要涉及各种资源的调度问题。

多道程序设计的特点是多道、宏观上并行、微观上串行。

1)多道。计算机内存中同时存放多道相互独立的程序。

2)宏观上并行。同时进入系统的多道程序都处于运行过程中,即它们先后开始各自的运行,但都未运行完毕。

3)微观上串行。内存中的多道程序轮流占有CPU,交替执行。

多道程序设计技术的实现需要解决下列问题:

1)如何分配处理器。
2)多道程序的内存分配问题。
3)Ⅰ/O设备如何分配。
4)如何组织和存放大量的程序和数据,以方便用户使用并保证其安全性与一致性。

在批处理系统中采用多道程序设计技术就形成了多道批处理操作系统。该系统把用户提交的作业成批地送入计算机内存,然后由作业调度程序自动地选择作业运行。

优点:资源利用率高,多道程序共享计算机资源,从而使各种资源得到充分利用:系统吞叶量大,CPU和其他资源保持“忙碌”状态。

缺点:用户响应的时间较长;不提供人机交互能力,用户既不能了解自己的程序的运行情况,又不能控制计算机。

分时操作系统

所谓分时技术,是指把处理器的运行时间分成很短的时间片,按时间片轮流把处理器分配给各联机作业使用

若某个作业在分配给它的时间片内不能完成其计算,则该作业暂时停止运行,把处理器让给其他作业使用,等待下一轮再继续运行。由于计算机速度很快,作业运行轮转得也很快,因此给每个用户的感觉就像是自己独占一台计算机。

分时操作系统是指多个用户通过终端同时共享一台主机,这些终端连接在主机上,用户可以同时与主机进行交互操作而互不干扰。因此,实现分时系统最关键的问题是如何使用户能与自己的作业进行交互,即当用户在自己的终端上键入命令时,系统应能及时接收并及时处理该命令,再将结果返回用户。分时系统也是支持多道程序设计的系统,但它不同于多道批处理系统。多道批处理是实现作业自动控制而无须人工干预的系统,而分时系统是实现人机交互的系统,这使得分时系统具有与批处理系统不同的特征。分时系统的主要特征如下:

1)同时性。同时性也称多路性,指允许多个终端用户同时使用一台计算机,即一台计算机与若干台终端相连接,终端上的这些用户可以同时或基本同时使用计算机。

2)交互性。用户能够方便地与系统进行人机对话,即用户通过终端采用人机对话的方式直接控制程序运行,与同程序进行交互。

3)独立性。系统中多个用户可以彼此独立地进行操作,互不干扰,单个用户感觉不到别人也在使用这台计算机,好像只有自己单独使用这台计算机一样。

4)及时性。用户请求能在很短时间内获得响应。分时系统采用时间片轮转方式使一台计算机同时为多个终端服务,使用户能够对系统的及时响应感到满意。

虽然分时操作系统较好地解决了人机交互问题,但在一些应用场合,需要系统能对外部的信息在规定的时间(比时间片的时间还短)内做出处理(比如飞机订票系统或导弹制导系统)。因此,实时系统应运而生。

实时操作系统

为了能在某个时间内完成某些紧急任务而不需要时间片排队,诞生了实时操作系统。

这里的时间限制可以分为两种情况:

若某个动作必须绝对地在规定的时刻(或规定的时间范围)发生,则称为硬实时系统,如飞行器的飞行自动控制系统,这类系统必须提供绝对保证,让某个特定的动作在规定的时间内完成。

若能够接受偶尔违反时间规定且不会引起任何永久性的损害,则称为软实时系统,如飞机订票系统、银行管理系统。

在实时操作系统的控制下,计算机系统接收到外部信号后及时进行处理,并在严格的时限内处理完接收的事件。实时操作系统的主要特点是及时性和可靠性。

网络操作系统和分布式计算机系统

网络操作系统把计算机网络中的各台计算机有机地结合起来,提供一种统一、经济而有效的使用各台计算机的方法,实现各台计算机之间数据的互相传送。网络操作系统最主要的特点是网络中各种资源的共享及各台计算机之间的通信。

分布式计算机系统是由多台计算机组成并满足下列条件的系统:系统中任意两台计算机通过通信方式交换信息;系统中的每台计算机都具有同等的地位,即没有主机也没有从机,每台计算机上的资源为所有用户共享;系统中的任意台计算机都可以构成一个子系统,并且还能重构:任何工作都可以分布在几台计算机上,由它们并行工作、协同完成。

用于管理分布式计算机系统的操作系统称为分布式计算机系统。该系统的主要特点是:分布性和并行性。分布式操作系统与网络操作系统的本质不同是,分布式操作系统中的若干计算机相互协同完成同一任务。

微机操作系统的发展

个人计算机操作系统是目前使用最广泛的操作系统,它广泛应用于文字处理、电子表格、游戏中,常见的有Windows、Linux和Macintosh等,此外,还有嵌入式操作系统、服务器操作系统、智能手机操作系统等。

1.单用户单任务操作系统

CP/M:1974年第一代通用8位微处理机芯片Intel 8080出现后的第二年,Digital Research公司就开发出了带有软盘系统的8位微机操作系统。CP/M具有较好的体系结构,可适应性强,可移植性以及易学易用等优点,使之在8位微机中占据了统治地位。
MS-DOS:1981年IBM公司首次推出了个人计算机(16位微机),采用了微软公司研发的MS-DOS(Disk Operation System)操作系统。该操作系统在CP/M基础上进行了较大扩充,使其在功能上有了很大的提高。MS-DOS性能优越,受到当时用户的广泛欢迎,是为事实上的16位单用户单任务操作系统标准。

2.单用户多任务操作系统

单用户多任务操作系统的含义是,只允许一个用户上机,但允许用户把程序分为若干个任务,使它们并发执行,从而有效地改善了系统的性能。

1995年微软公司推出了Windows 95,它较之前的Windows 3.1有许多重大改进,采用了全32位的处理技术,并兼容以前的16位应用程序,在该系统中还集成了支持Internet的网络功能。2001年微软又发布了Windows XP,同时提供了家用和商业工作站两种版本,在此后的相当长一段时间内,城位使用最广泛的个人操作系统之一。

3.多用户多任务操作系统

多用户多任务操作系统的含义是,允许多个用户通过各自的终端,使用同一台机器,共享主机系统中的各种资源,而每个用户程序又可以进一步分为几个任务,使它们能并发执行,从而进一步提高资源利用率和系统吞吐量。

典型代表是UNIX OS,是美国电报电话公司的Bell实验室在1969~1970年间开发的。随着微机性能的提高,人们又将UNIX移植到微机上。现在最有影响的两个能运行在微机上的UNIX操作系统变形是Solaris OS和Linux OS。

操作系统的运行机制


计算机系统中,通常CPU执行两种不同性质的程序:

操作系统 内核程序
用户自编程序,即系统外层的应用程序,或简称“ 应用程序

对操作系统而言,这两种程序的作用不同——前者是后者的管理者,因此“管理程序”(即内核程序)要执行一些特权指令,而“被管理程序”(即用户自编程序)出干安全考虑不能执行这些指令。

所谓 特权指令,就是指具有特殊权限的指令。这类指令只用于操作系统或其他系统软件,一般不直接提供给用户使用。主要用于系统资源的分配和管理,包括改变系统工作方式,检测用户的访问权限,修改虚拟存储器管理的段表、页表,完成任务的创建和切换等。如I/O指令、置中断指令,存取用于内存保护的寄存器、送程序状态字到程序状态字寄存器等的指令。

在具体实现上,将CPU的状态划分为用户态(目态)和核心态(又称管态、内核态)。

可理解为CPU内部有一个小开关(程序状态字):
当小开关为0时,CPU处于核心态,此时CPU可以执行特权指令;当小开关为1时,CPU处于用户态,此时CPU只能执行非特权指令。
用户自编程序运行在 用户态,操作系统内核程序运行在 核心态

在软件工程思想和结构程序设计方法影响下诞生的现代操作系统,几乎都是层次式的结构。操作系统的各项功能分别被设置在不同的层次上。一些与硬件关联较紧密的模块,如时钟管理、中断外理、设备驱动等处于最低层,其次是运行频率较高的程序,如进程管理,存储器管理和设备管理等,这两部分内容构成了操作系统的内核,它们的指令操作工作在核心态

注意:计算机“指令”和高级语言的“代码”是不同的。我们一般所说的“编写代码”指的是用高级语言(如C、Java等)来编写程序。但CPU看不懂这些高级语言程序的含义,为了让这些程序能够顺利执行,就需要把它们“翻译”成CPU能懂的机器语言,即一条条指令”(这个“翻译”的过程称为“编译”)。所谓执行程序,其实就是CPU根据一条条指令的指示察执行一个个且休的操作。

内核是计算机上配置的底层软件,是计算机功能的延伸。不同系统对内核的定义稍有区别,大多数操作系统内核包括4方面的内容。

时钟管理

计时:提供系统时间

时钟中断:比如进程切换

中断机制

引入中断技术的初衷是提高多道程序运行环境中CPU的利用率,而且主要是针对外部设备的。后来逐步得到发展,形成了多种类型,成为操作系统各项操作的基础。例如,键盘或鼠标信息的输入、进程的管理和调度、系统功能的调用、设备驱动、文件访问等,无不依赖于中断机制。可以说,现代操作系统是靠中断驱动的软件。

中断机制中,只有一小部分功能属于内核,它们负责保护和恢复中断现场的信息,转移控制权到相关的处理程序。这样可以减少中断的处理时间,提高系统的并行处理能力。

原语

原语是多道指令组成的程序段,用来完成cpu的某个功能,具有原子性(执行过程不会被其他程序中断),是偏底层的某个操作,运行时间短且调用频繁。

系统数据结构

系统中用来登记状态信息的数据结构很多,如作业控制块、进程控制块(PCB)、设备控制块,各类链表,消息队列缓冲区、空闲区登记表、内存分配表等,为了实现有效的管理,系统需要一些基本的操作,常见的操作有:

  • 进程管理。进程状态管理、进程调度和分派、创建与撤销进程控制块等。

  • 存储器管理。存储器的空间分配和回收、内存信息保护程序、代码对换程序等。

  • 设备管理。缓冲区管理、设备分配和回收等。

中断和异常的概念

在操作系统中引入和心态和用户态这两种工作状态后,就需要考虑这两种状态之间如何切换。

操作系统内核工作在核心态,而用户程序工作在用户态。系统不允许用户程序实现核心态的功能,而它们又必须使用这些功能。因此,需要在核心态建立一些“门”,以便实现从用户态进入核心态在实际操作系统中,CPU运行上层程序时唯一能进入这些“门”的途径就是通过中断或异常。发生中断或异常时,运行用户态的CPU会立即进入核心态,这是通过硬件实现的:

例如,用一个特殊寄存器的一位来表示CPU所处的工作状态:
0 表示核心态,1 表示用户态。
若要进入核心态,则只需将该位设置为0即可

中断是操作系统中非常重要的一个概念,对一个运行在计算机上的实用操作系统而言,缺少了中断机制,将是不可想象的。原因是,操作系统的发展过程大体上就是一个想方设法不断提高资源利用率的过程,而提高资源利用率就需要在程序并未使用某种资源时,把它对那种资源的占有权释放,而这一行为就需要通过中断实现。

中断和异常的定义

中断(Interruption)通常指外中断,即来自CPU执行指令以外事件的触发。CPU正常运行期间,停止当前操作,执行其他特殊操作的行为就叫中断,负责跳转的指令就是中断指令。如设备发出的I/O结束中断,表示设备输入/输出处理已经完成,希望处理机能够向设备发出下一个输入/输出请求,同时让完成输入输出后的程序继续运行;时钟中断,表示一个固定的时间片已到,让处理机处理计时、启动定时运行的任务等。这一类中断通常是与当前指令执行无关的事件,即它们与当前处理机运行的程序无关。

异常(Exception)通常指内中断、例外或陷入(trap),指源自CPU执行指令内部的事件,如程序的非法操作码、地址越界、算术溢出、虚存系统的缺页及专门的陷入指令等引起的事件。对异常的处理一般要依赖于当前程序的运行现场,而且异常不能被屏蔽,一旦出现应立即处理。

陷入指令(Traps),又叫做自陷指令或访管指令,出现在计算机操作系统中,用于实现在用户态下运行的进程调用操作系统内核程序,即当运行的用户进程或系统实用进程欲请求操作系统内核为其服务时,可以安排执行一条陷入指令引起一次特殊异常。
中断处理的过程

不同计算机的中断(指外中断)处理过程各具特色,就其多数而论,中断处理流程如图所示。各阶段处理流程的描述如下:

  1. 关中断。CPU响应中断后,首先要保护程序 的现场状杰,在保护现场的过程中,CPU不应响应更高级中断源的中断请求。否则,若现场保存不完整,在中断服务程序结束后,也就不能正确地恢复并继续执行现行程序。

  1. 保存断点。为保证中断服务程序执行完毕后能正确地返回到原来的程序,必须将原来的程序的断点(即程序计数器PC)保存起来。

  1. 引出中断服务程序。其实质是取出中断服务程序的入口地址送入程序计数器PC

  1. 保存现场和屏蔽字。进入中断服务程序后,首先要保存现场,现场信息一般是指程序状态字寄存器PSWR和某些通用寄存器的内容。

  1. 开中断。允许更高级中断请求得到响应。

  1. 执行中断服务程序。这是中断请求的目的

  1. 关中断。保证在恢复现场和屏蔽字时不被中断。

  1. 恢复现场和屏蔽字。将现场和屏蔽字恢复到原来的状态。

  1. 开中断、中断返回。中断服务程序的最后一冬指会通觉是一冬中断返同指令,使其返回到原程序的断点处,以便继续执行原程序。

其中,1~3步是在CPU进入中断周期后,由硬件自动(中断隐指令)完成的;4~9步由中断服务程序完成。恢复现场是指在中断返回前,必须将寄存器的内容恢复到中断处理前的状态,这部分工作由中断服务程序完成。中断返回由中断服务程序的最后一条中断返回指令完成。

系统调用

所谓系统调用,是指由操作系统实现,提供给应用程序调用,用以访问内核功能的所有接口的集合,即程序接口或应用编程接口(Application Programming Interface,API),是应用程序同系统之间的接口。用户在程序中调用操作系统所提供的一些子功能,系统调用可视为特殊的公共子程序。系统中的各种共享资源都由操作系统统一掌管,因此在用户程序中,凡是与资源有关的操作(如存储分配、进行I/O传输及管理文件等),都必须通过系统调用方式向操作系统提出服务请求,并由操作系统代为完成。

通常,一个操作系统提供的系统调用命令有几十条乃至上百条之多。这些系统调用按功能大致可分为如下几类。

  • 设备管理:完成设备的请求或释放,以及设备启动等功能。

  • 文件管理:完成文件的读、写、创建及删除等功能。

  • 进程控制:完成进程的创建、撤销、阻塞及唤醒等功能。

  • 进程通信:完成进程之间的消息传递或信号传递等功能。

  • 内存管理:完成内存的分配、回收以及获取作业占用内存区大小及始址等功能。

显然,系统调用相关功能涉及系统资源管理、进程管理之类的操作,对整个系统的影响非常大,因此必定需要使用某些特权指令才能完成,所以系统调用的处理需要由操作系统内核程序负责完成,要运行在核心态

用户程序可以执行陷入指令(又称访管指令或trap指令)来发起系统调用,请求操作系统提供服务。可以这么理解,用户程序执行“陷入指令”,相当于把CPU的使用权主动交给操作系统内核程序(CPU状态会从用户态进入核心态),之后操作系统内核程序再对系统调用请求做出相应处理。处理完成后,操作系统内核程序又会把CPU的使用权还给用户程序(即CPU状态会从核心态回到用户态)。

这么设计的目的是:用户程序不能直接执行对系统影响非常大的操作,必须通过系统调用的方式请求操作系统代为执行,以便保证系统的稳定性和安全性,防止用户程序随意更改或访问重要的系统资源,影响其他进程的运行。

这样,操作系统的运行环境就可以理解为:

用户通过操作系统运行上层程序(如系统提供的命令解释程序或用户自编程序),而这个上层程序的运行依赖于操作系统的底层管理程序提供服务支持,当需要管理程序服务时,系统则通过 硬件中断机制进入核心态,运行管理程序;
也可能是程序运行出现异常情况,被动地需要管理程序的服务,这时就通过异常处理来进入核心态。管理程序运行结束时,用户程序需要继续运行,此时通过相应的保存的程序现场退出中断处理程序或异常处理程序,返回断点处继续执行。

在操作系统这一层面上,我们关心的是系统核心态和用户态的软件实现与切换,对于硬件层面的具体理解,可以结合“计算机组成原理”课程中有关中断的内容进行学习。

下面列举一些由用户态转向核心态的例子:

1)用户程序要求操作系统的服务,即系统调用。

2)发生一次中断。

3)用户程序中产生了一个错误状态。

4)用户程序中企图执行一条特权指令。

5)从核心态转向用户态由一条指令实现,这条指令也是特权命令,一般是中断返回指令。

注意:由用户态进入核心态,不仅状态需要切换,而且所用的堆栈也可能需要由用户堆栈切换为系统堆栈,但这个系统堆栈也是属于该进程的。

若程序的运行由用户态转到核心态,则会用到访管指令(访问管态指令,也叫陷入trap指令),访管指令是在用户态使用的,所以它不可能是特权指令。

操作系统的结构设计


无结构操作系统

早期开发操作系统时,设计者只关注其功能实现和如何获得更高的效率,缺乏首尾一致的设计思想。此时的OS只是无数的过程的集合,每个过程可以任意调用其它过程,这让整个操作系统既复杂又混乱。因此,这种OS是无结构的,也有人把它称为整体系统结构。

无结构操作系统,会随着系统不断扩大,编制出的程序错误很多,给调试工作带来很多困难,而且也使程序难以阅读和理解,增加了维护人员的负担。

模块化结构OS

模块化技术基于“分解”和“模块化”的原则来控制大型软件的复杂度。

为使OS具有较清晰的结构,OS不再是由众多的过程直接构成,而是按其功能精心地划分为若干个具有一定独立性和大小的模块,每个模块具有某方面的管理功能。如进程管理模块、存储器管理模块、IO设备管理模块等,并仔细地规定好各模块间的接口,使各模块之间能通过接口实现交互。

各模块还可以仅需进一步细分为若干个具有一定功能的子模块,比如进程管理模块又分为进程控制、进程同步等子模块。我们把这种设计方法称为”模块-接口法“。

模块-接口法的关键问题是模块的划分和规定好模块间的接口。模块划分太小,虽然降低单个模块的复杂性,但模块之间的联系过多,也会造成系统混乱;如果模块划分过大,又会增加模块内部的复杂性,所以,划分模块时,应在二者之间权衡,这就是要考虑模块的独立性问题。

衡量模块的独立性有两个标准:

内聚性:模块内部各部分间联系的紧密程度,内聚性越高,模块独立性越强。
耦合度:模块间互相联系和彼此影响的程度,耦合度越低,模块独立性越好。

模块-接口法的优点:

提高OS设计的正确性、可理解性、可维护性;
增强OS的可适应性
加速OS的开发过程

模块-接口法的缺点:

各模块间的接口很难满足设计完成后对接口的实际需求
设计者每个决策,必须建立在上一个决策的基础上,而模块化设计齐头并进,无法寻找一个可靠的决定顺序,造成各种决定的”无序性“,这将使程序人员很难做到”设计中的每一步决定都是建立在可靠的基础上“,因此模块-接口法又被称为”无序模块法“。

分层式结构OS

为了增加”模块-接口法“设计中”决定顺序“的有序性,引入了分层法。分层法的设计任务是,在目标系统An和裸机系统A0之间,铺设若干个层次的软件,使An通过An-1、An-2...A2、A1层,最终能在A0上运行。

在实践中,一般采用自底向上的方式来铺设这些中间层。这种自底向上分层设计的原则是:每一步设计都建立在可靠的基础上。为此规定,每一层仅能使用其底层所提供的功能和服务,这可以使系统的调试和验证都变得容易,因为每一层的软件与上一层(较高层次)软件无关,大大降低了复杂度。

将操作系统分成若干个层次,每个层次又可以分为若干个模块,各层之间只存在单向的依赖关系——高层仅依赖紧邻于它的低层。

分层法的优点:

易保证系统的正确性:所有设计的决定都是有序的,或者说都是建立在可靠的基础上的。
易扩充、易维护:在系统中增加、修改一个层次的模块,甚至整个层次时,只要不改变层次间的接口,就不会影响其它层次,系统维护性和扩充变得容易。

分层法的缺点:系统效率降低。层次结构的单向依赖,必须在每一层之间建立通信机制,OS每执行一个功能,都要从上而下穿越多个层次,无疑增加了系统通信的开销,从而导致系统效率降低。

微内核结构OS

大内核系统将操作系统的主要功能模块都作为一个紧密联系的整体运行在核心态,从而为应用提供高性能的系统服务。因为各管理模块之间共享信息,能有效利用相互之间的有效特性,所以具有无可比拟的性能优势。

为解决操作系统的内核代码难以维护的问题,提出了微内核的体系结构。它将内核中最基本的功能(如进程管理等)保留在内核,而将那些不需要在核心态执行的功能移到用户态执行,从而降低了内核的设计复杂性。那些移出内核的操作系统代码根据分层的原则被划分成若干服务程序,它们的执行相互独立,交互则都借助于微内核进行通信。微内核结构有效地分离了内核与服务、服务与服务,使得它们之间的接口更加清晰,维护的代价大大降低,各部分可以独立地优化和演进,从而保证了操作系统的可靠性。

微内核(MicroKernel)操作系统的概念,尚无一致公认的定义,但我们可以从一下几个方面对微内核结构的操作系统进行描述。

1)足够小的内核

微内核并非完整OS,而是将操作系统最基本的部分放入微内核:①与硬件紧密相关的部分;②一些基本功能;③客户和服务器之间的通信。这些只是为构建通用OS提供一个重要的基础,这样就可以确保把操作系统内核做的很小。

2)基于客户/服务器模式

将操作系统最基本的部分放入内核(客户)中,而把绝大部分其它功能放在外面的一组服务器(进程)中实现。比如对进程/线程进行管理的服务器、对虚拟存储器管理的服务器、I/O设备管理的服务器等,它们都运行在用户态,客户与服务器之间借助微内核提供的消息机制来实现信息交互。

3)应用”机制与策略分离“原理

机制,是指实现某一功能的具体执行机构;而策略,则是在机制的基础上借助于某些参数和算法来实现该功能的优化,或达到不同的功能目标。通常,机制处于系统的基层,策略处于系统的高层。在微内核OS中,通常将机制放在OS的微内核中,这样才有可能将内核做得很小。

4)采用面向对象技术

我们不仅可以通过结构设计来分解操作系统的复杂度,还可以基于面向对象技术的”抽象“和”隐蔽“原则控制系统的复杂性,再进一步利用”对象“、”封装“和”继承“等概念来确保操作系统的正确性、可靠性、易修改性、易扩展性等,并提高操作系统的设计速度。面向对象技术被广泛用于现代操作系统的设计中。

微内核结构的最大问题是性能问题,因为需要频繁地在核心态和用户态之间进行切换,操作系统的执行开销偏大。因此有的操作系统将那些频繁使用的系统服务又移回内核,从而保证系统性能。但相当多的实验数据表明,体系结构不是引起性能下降的主要因素,体系结构带来的性能提升足以弥补切换开销带来的缺陷。为减少切换开销,也有人提出将系统服务作为运行库链接到用户程序的一种解决方案,这样的体系结构称为库操作系统。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
现代操作系统第四版是一本经典的操作系统教材,第三章主要讲解了进程的概念、进程控制块、进程状态以及进程调度等内容。以下是第三章的主要内容概述: 1.进程的概念:进程是程序在执行过程中分配和管理资源的基本单位,每个进程都有自己的地址空间、数据栈、指令计数器、寄存器和文件描述符等。 2.进程控制块:进程控制块是操作系统内核中用于管理进程的数据结构,包含了进程的状态、进程ID、优先级、程序计数器、寄存器、内存分配情况、打开文件列表等信息。 3.进程状态:进程状态包括运行态、就绪态、阻塞态和创建态等,进程在不同状态之间转换,操作系统根据进程状态来进行进程调度。 4.进程调度:进程调度是操作系统内核中的一个重要模块,负责决定哪个进程可以获得CPU的使用权,进程调度算法包括先来先服务、短作业优先、时间片轮转等。 5.进程同步:进程同步是指多个进程之间的协作,包括互斥、信号量、管程等机制,用于保证多个进程之间的正确性和一致性。 6.进程通信:进程通信是指多个进程之间的信息交换,包括共享内存、消息队列、管道等机制,用于实现进程之间的数据传输和共享。 以下是现代操作系统第四版第三章的相关代码示例: ```c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> int main() { pid_t pid; int status; pid = fork(); if (pid < 0) { printf("Fork error\n"); exit(1); } else if (pid == 0) { printf("Child process\n"); exit(0); } else { printf("Parent process\n"); wait(&status); printf("Child exit status: %d\n", WEXITSTATUS(status)); } return 0; } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值