本系列笔记整理自 https://www.bilibili.com/video/BV1YE411D7nH

个人认为讲解比较清晰,容易理解。

一、操作系统的发展和分类

操作系统的发展过程包括手工操作阶段、批处理阶段、分时操作系统、实时操作系统、网络操作系统、分布式操作系统和个人计算机操作系统。我们主要需要了解各类操作系统主要想解决的是什么问题,以及它们各自的优缺点分别是什么。

最早出现的是手工操作系统。它的缺点主要是用户独占全机、人机速度矛盾导致资源利用率极低。

为了缓解人机速度矛盾,人们发明了单道批处理系统。程序员可以将多条纸袋的内容提前存入磁盘,磁盘自动地将内容输入,并由CPU进行处理输出。这就是脱机输入/输出技术,并由监督程序负责控制作业的输入、输出。这在一定程度上缓解了一定程度的人机速度矛盾,但内存中仅有一道程序运行,只有该程序运行结束之后才能调入下一道程序。CPU有大量时间在等待I/O完成。资源利用率依旧很低。

那么为了可以每次往内存中读入多道程序,人们又发明了多道批处理系统。至此,操作系统正式诞生,用于支持多道程序并发执行。通过共享计算机资源,CPU和其他资源更能保持“忙碌”状态,系统的吞吐量增大。但是这并没有人工交互的功能,用户无法调试程序。

于是,分时操作系统应运而生。计算机以时间片为单位轮流为各个用户/作业服务,各个用户可通过终端与计算机进行交互。这允许了多个用户同时使用一台计算机,并且用户对计算机的操作相互独立,感受不到他人的存在。

OS

或许分时操作系统已经非常良好,但它缺少了区分任务优先级的功能,因此,人们创造出了实时操作系统。它能够优先响应一些紧急任务,某些紧急任务不需要时间片排队。在实时操作系统的控制下,计算机系统接受到外部信号后及时进行处理,并且要在严格的时限内处理完事件。由此可见,实时操作系统的主要特点就是及时性和可靠性。

OS

当然如今又有许多新的操作系统类型,但我们这里不再赘述,因为很多都是我们平常就在使用的“利器”,比如说:个人计算机操作系统。我们需要注意的是上面详细分析的五种操作系统。

二、操作系统的运行机制

这一小节我们讨论操作系统是如何运行的。这里首先给出一份思维导图:

OS

接下来,我们逐一区分这几个概念。首先是内核程序和应用程序。我们普通程序员写的都是“应用程序”。而类似微软公司中有一部分程序员负责编写“内核程序”。有许多内核程序组成了“操作系统内核”,或简称为“内核”。这是整个操作系统中最重要最核心的部分,也是最接近硬件的部分。甚至可以说,一个操作系统只要有内核就够了。

操作系统的内核作为管理者,有时会让CPU执行一些“特权指令”,如:内存清零指令。这些指令影响重大,所以只允许内核来使用。而应用程序只能执行“非特权指令”,如:加法指令、减法指令等。这就是特权指令与非特权指令的区别。CPU在设计和生产的时候就已经划分了特权指令和非特权指令,因此它在执行一条指令前就已经可以判断出其类型。

但CPU是如何判断指令类型的呢?这就涉及到内核态和用户态的区别了。CPU有两种状态,处于内核态时,说明此时正在运行的是内核程序,此时可以执行特权指令;处于用户态时,说明此时正在运行的是应用程序,此时只能执行非特权指令。

【补充】CPU中有一个寄存器叫程序状态字寄存器(PSW),其中有个二进制位,1表示内核态,0表示用户态。

下面我们讲解内核态、用户态的切换:在刚开机时,CPU为内核态,操作系统内核程序先进入CPU运行。在开机完成后,用户可以启动用户程序,此时操作系统内核程序会用一条特权指令将PSW的标志位设置成用户态,也就是主动让出CPU,让应用程序进入CPU开始运行。此时运行的应用程序处于用户态。

如果此时在这个应用程序中植入了一条特权指令,企图破坏系统,CPU马上就会意识到接下来要执行的这条指令时特权指令。于是,这个非法时间会引发一个中断信号。“中断”是操作系统再次夺回了CPU的控制权,即CPU检测到中断信号后,会立即变为内核态,并停止运行当前的应用程序,转而运行处理中断信号的内核程序,直至处理完成后再将CPU交给应用程序继续完成。

以上便是内核态和用户态的切换过程。

OS