操作系统 第一章 计算机系统概述

1.1 操作系统的基本概念

计算机系统自上而下可以分为四部分:硬件、操作系统、应用程序和用户。操作系统管理各种计算机硬件,为应用程序提供基础,并充当计算机硬件与用户之间的中介。

操作系统是指控制和管理整个计算机系统的硬件与软件资源,合理地组织、调度计算机的工作与资源的分配,进而为用户和其他软件提供方便接口与环境的程序集合。操作系统是计算机系统中最基本的系统软件

一定要注意,操作系统是一种系统软件,但是操作系统具有自己独特的特征:
①并发:
并发指的是两个或者多个事件在同一时刻发生。操作系统的并发性是指计算机系统中同时运行的多个程序,因此它具有处理和调度多个程序同时执行的能力。并行性需要有相关硬件的支持。

这里是一个很容易混淆的点。并发可以看作是交替进行,指的是划分时间片后,各个任务交替运行,每个任务做一会就换下一个人。而并行指的是同时进行,即多个任务同时在做。一个人一边吃饭一边看手机,看手机和吃饭就是并行的。一个人吃一口菜吃一口饭就是并发,因为嘴不能同时吃两个,是菜和饭交替进嘴。
并行是宏观上的,操作系统从用户角度上看是多个程序在同时运行,而实际上内部是靠进程不断快速切换来实现的,处理器每时每刻只能处理一个进程,各个进程轮流使用处理器,即并发,但从宏观角度上就像是多个程序同时运行,即并行。
②共享:
资源共享即共享,指的是系统中的资源可供内存中多个并发执行的进程共同使用,共享可以分为下面的两种方式:
a 互斥共享方式
一段时间内只允许一个进程访问该资源。为此,一个进程想要访问某个资源时,就必须先提出请求,若资源空闲就将之分配,其它进程则在后面等待,待进程使用完毕后再换另一个进程使用。这种资源被称为临界资源或者独占资源,这种共享方式称为互斥式共享
b 同时访问方式
允许一段时间内多个进程同时访问。这里说的同时是宏观上的,微观上这些进程可能是交替地对该资源进行访问即分时共享的。

并发和共享是操作系统的两个最基本的特征,两者互为存在的条件。如果不支持并发,处理器每次进支持一个进程,就没有所谓多个进程同时访问一种资源。如果不支持共享,多个进程就无法使用共同的资源,进而无法并发。

③虚拟:
虚拟是指把一个物理上的实体变为逻辑上的对应物。操作系统中使用了多种虚拟技术来实现虚拟处理器、虚拟内存和虚拟外部设备等。
虚拟处理器指的是通过多道程序设计,通过让多道程序并发执行的方法,来分时使用一个处理器,效果上就像是把一个CPU虚拟为多个逻辑上的CPU。
虚拟存储技术是将一台机器的物理存储器变成虚拟存储器,在逻辑上扩充了存储器的容量。
虚拟设备技术则是将一台物理IO设备虚拟为多台逻辑上的IO设备,并允许每个用户占用一台逻辑上的IO设备。
因此,操作系统的虚拟技术可以分为两类:时分复用(虚拟存储器)和空分复用(虚拟存储器)。
④异步:
指的是进程的执行并不是一贯到底的,而是走走停停的。这是因为当进程出现中断或者时间片耗尽就会被挂起换成另一个进程执行,所以执行的过程实际上是在不断切换的。

操作系统作为计算机系统资源的管理者,必须有以下的功能:
①处理机管理
②存储器管理
③文件管理
④设备管理

作为用户与计算机硬件系统之间的接口,操作系统提供了一系列接口来方便用户使用。主要分为两类:命令接口和程序接口。用户可以利用命令接口来组织控制作业的执行,编程人员可以使用程序接口来请求操作系统服务。

使用命令接口进行作业控制主要有两种方式:联机控制方式和脱机控制方式。按作业控制方式的不同,可将命令接口分为联机命令接口和脱机命令接口 。
联机命令接口又称交互式命令接口 ,适用于分时或实时系统的接口 。 它由一组键盘操作命令组成。 用户通过控制台或终端输入操作命令,向系统提出各种服务要求。 用户每输入一条命令,控制权就转给操作系统的命令解释程序,然后由命令解释程序解释井执行输入的命令,完成指定的功能之后,控制权转回控制台或终端,此时用户又可输入下一条命令。
脱机命令接口又称批处理命令接口,适用于批处理系统,它由一组作业控制命令组成。脱机用户不能直接干预作业的运行,而应事先用相应的作业控制命令写成一份作业操作说明书,连同作业一起提交给系统。系统调度到该作业时,由系统中的命令解释程序逐条解释执行作业说明书上的命令,从而间接地控制作业的运行。

程序接口由一组系统调用(也称广义指令)组成,用户通过在程序中使用这些系统调用来请求操作系统为其提供服务,比如使用外部设备、申请回收内存等。

这里要区分好库函数和程序接口,库函数是语言本身的一部分,运行在用户空间,而系统函数是内核提供给应用程序的接口,属于系统的一部分,运行在内核空间。比如在同一台电脑上使用两种语言,两种语言不一定有一个库函数,但是都是在一个操作系统下。未使用系统调用的库函数其执行效率一般比系统调用高,因为省去了上下文切换及状态切换的时间。

除此之外,操作系统还用作扩充机器。没有任何软件支持的计算机称为裸机,裸机在最里层,外面是操作系统。一般将覆盖了软件的机器称为扩充机器或者虚拟机。

1.2 操作系统的发展与分类

最初的计算机属于手工操作阶段,所有的工作都需要人工干预。据说初期程序员都是女的,因为适合做针线活,方便打纸带输入进计算机。手工阶段计算机由用户独占全机,CPU等待手工操作,利用极其不充分。

为了解决人机矛盾以及速度不匹配的问题,出现了批处理系统,按照其发展历程又分为单道批处理系统和多道批处理系统。
单道批处理系统改进了人工干预的问题。提前将程序放进磁带,系统按照顺序将磁带上的任务拿到内存上运行,各道作业的完成顺序与放到磁带上的顺序是一致的。这种方式改进了速度,但是一旦放进磁带就只能等运算结果,完全无法进行人机交互。而且一个任务一旦开始运行,就一直运行这一个程序,如果遇到IO就会在原地干等,高速的CPU等待低速的IO。

为了解决速度的问题又进一步引出了多道批处理系统。多道程序设计技术允许多个程序同时进入内存并允许在CPU交替运行,当一道程序因为IO而暂停运行时,CPU就转向运行另一道程序。这种系统已经有了如今操作系统的味道。
多道程序设计的特点是多道、宏观上并行、微观上串行。批处理系统采用了多道程序设计技术就形成了多道批处理操作系统。资源利用率高、系统吞吐量大。但是用户响应时间长,不能人机交互。(拿来任务就是干,干不下去干另一个,干完交工不听建议)

还出现了分时操作系统。分时操作系统是指多个用户通过终端同时共享一台主机,这些终端连接在主机上,用户可以同时与主机进行交互操作而互不干扰。
分时操作系统的关键在于分时技术。所谓分时技术,是指把处理器的运行时间分成很短的时间片,按时间片轮流把处理器分配给各联机作业使用。若某个作业在分配给它的时间片内不能完成其计算,则该作业暂时停止运行,把处理器让给其他作业使用,等待下一轮再继续运行。由于计算机速度很快,作业运行轮转得也很快,因此给每个用户的感觉就像是自己独占一台计算机。
多道批处理是实现作业自动控制而无须人工干预的系统,而分时系统是实现人机交互的系统。分时系统允许多个终端用户同时使用一台计算机,能够方便的进行人机对话,系统中的多个用户可以彼此独立地进行操作,而且用户的请求可以很快得到响应。

另外,为了能在某个时间限制内完成某些紧急任务而不需要时间片排队,诞生了实时操作系统。这里的时间限制分为两类:若某个动作必须绝对地在规定的时刻(或规定的时间范围)发生,就称为硬实时系统,比如飞机控制系统、导弹发射系统,必须有绝对的保证。若能够接受偶尔违反时间规定且不会引起任何永久性的损害, 则称为软实时系统,如飞机订票系统、银行管理系统。

1.3 操作系统的运行环境

计算机系统中,CPU通常执行两种不同性质的程序:操作系统内核程序和用户自编程序。处于安全考虑,必然不可能让用户程序执行一些高权限的指令。所以将CPU的状态划分为用户态和核心态。用户自编程序运行在用户态,操作系统内核程序运行在核心态。

操作系统的内核是由一些与硬件关联比较紧密的模块或者运行频率较高的程序组成的,这部分内容的指令操作工作在核心态。大多数的操作系统的内核包括四部分:
①时钟管理:
操作系统需要通过时钟管理,向用户提供标准的系统时间
②中断机制:
引入中断技术的初衷是提高多道程序运行环境中CPU的利用率,而且主要是针对外部设备的。后来逐步得到发展,形成了多种类型,成为操作系统各项操作的基础。现代操作系统是靠中断驱动的软件。
③原语:
具有处于操作系统的底层、运行具有原子性、不可再分割、程序运行时间比较短特点的程序称为原语。
④系统控制的数据结构及处理:
常见操作有进程管理、存储器管理和设备管理

引入了核心态和用户态之后,就需要考虑这两种状态之间如何切换,切换是靠中断或者异常来实现的。产生中断或者异常时,运行态的CPU就会进入核心态。中断对于操作系统十分重要,操作系统的发展过程就是一个不断提高资源利用率的过程,而提高利用率就需要在程序没有使用某种资源时,将该资源分配给另一个程序,而这个过程就是要靠中断来实现。

与计算机组成原理有所区别,操作系统中用中断来指代外中断,用异常来指代内中断。
中断是指来自CPU执行指令之外的事情的发生,一般是与当前指令执行无关的事件,即与当前运行的程序无关。异常也称陷入,源自CPU执行指令内部的事件。对异常的处理一般依赖于当前程序的运行现场。

下面细化一下前面提到的系统调用。系统调用指的是用户在程序中调用操作系统提供的一些子功能,系统调用可以视为特殊的公共子程序。用户程序中,凡是与资源有关的操作,都必须通过系统调用的方式向操作系统提出申请,并由操作系统代为完成。
用户转到核心态,会用到访管指令,访管指令是在用户态使用的,不属于特权指令。
由于涉及系统资源、进程的操作,所以****,所以用户程序需要执行陷入指令,让CPU进入核心态,之后操作系统内核程序再对系统调用的请求做出相应的处理,处理后归还用户程序恢复到用户态。这样做主要是为了系统的稳定性和安全性,不能让用户程序做出过线的行为。
在这里插入图片描述

典型题

在这里插入图片描述
Ⅰ 对应的是运算错误,显然属于异常,必然会切换到内核态由相应的单元来处理中断。
Ⅱ 属于调用库函数,库函数属于语言不属于系统,所以不会引起状态切换
Ⅲ 属于系统调用,要交由内核态来完成,所以一定会有状态切换

猜你喜欢

转载自blog.csdn.net/weixin_43849505/article/details/108628451