找往期文章包括但不限于本期文章中不懂的知识点:
个人主页:我要学编程(ಥ_ಥ)-CSDN博客
所属专栏: 操作系统
目录
操作系统的运行环境
操作系统的运行机制
中断
系统调用
操作系统的体系结构
大内核
微内核
优点
缺点
操作系统的运行环境
操作系统的运行机制
计算机系统中,通常CPU会执行两种不同性质的程序:一种是操作系统内核程序;另一种是
用户自编程序(即系统外层的应用程序,或简称“应用程序”)。对操作系统而言,这两种程序的
作用不同,前者是后者的管理者,因此又叫“管理程序”(即内核程序)要执行一些特权指令,而“被
管理程序”(即用户自编程序)出于安全考虑不能执行这些指令。所谓特权指令,是指计算机中
不允许用户直接使用的指令,如I/O指令、置中断指令,存取用于内存保护的寄存器、送程序状
态字到程序状态字寄存器等的指令。在具体实现上,将CPU的状态划分为用户态(目态)和核心
态(又称管态、内核态)。可以理解为CPU内部有一个小开关,当小开关为1时,CPU处于核心
态,此时CPU可以执行特权指令;当小开关为0时,CPU处于用户态,此时CPU只能执行非特
权指令。用户自编程序运行在用户态,操作系统内核程序运行在核心态。
注意:CPU处于核心态时,也是可以执行非特权指令的。所以当CPU处于用户态一定是在执行非特权指令,而CPU处于核心态时,不一定是在执行特权指令。
操作系统的各项功能分别被设置在不同的层次上。一些与硬件关联较紧密的模块,如时钟管
理、中断处理、设备驱动等处于最低层。其次是运行频率较高的程序,如进程管理、存储器管理
和设备管理等。这两部分内容构成了操作系统的内核。这部分内容的指令操作工作在核心态。
内核是计算机上配置的底层软件,是计算机功能的延伸。
不同系统对内核的定义稍有区别,大多数操作系统的内核包括4方面的内容。
1、时钟管理
在计算机的各种部件中,时钟是最关键的设备。时钟的第一功能是计时,操作系统需要通过时钟管理,向用户提供标准的系统时间。另外,通过时钟中断的管理,可以实现进程的切换。例如,在分时操作系统中采用时间片轮转调度,在实时系统中按截止时间控制运行,在批处理系统中通过时钟管理来衡量一个作业的运行程度等。因此,系统管理的方方面面无不依赖于时钟。
这里我们开始涉及了一个概念,进程。简单理解就是,一个程序运行起来后,就叫做进程。后面我们会进一步的学习。
上述说的进程切换,我们在上一篇文章中,学习了分时操作系统:各个程序之间来回利用时间片,来达到并发的效果。这里是把程序之间的来回切换,变成了一个更精确的概念,进程之间来回切换。这就是通过时钟管理来完成的。
2、中断机制
引入中断技术的初衷是提高多道程序运行环境中CPU的利用率,而且主要是针对外部设备的。后来逐步得到发展,形成了多种类型,成为操作系统各项操作的基础。例如,键盘或鼠标信息的输入、进程的管理和调度、系统功能的调用、设备驱动、文件访问等,无不依赖于中断机制。可以说,现代操作系统是靠中断驱动的软件。
中断机制中,只有一小部分功能属于内核,它们负责保护和恢复中断现场的信息(例如,时钟中断,会切换进程,但是为了下次还是该进程的运行,因此会保存运行环境),转移控制权到相关的处理程序(中断可以理解为Java中的异常,必须被处理,而不同原因引起的中断需要不同的中断处理程序去进行处理)。这样可以减少中断的处理时间,提高系统的并行处理能力(多核心CPU的前提)。
3、原语
按层次结构设计的操作系统,底层必然是一些可被调用的公用小程序,它们各自完成一个规
定的操作。它们的特点如下:
1)处于操作系统的最低层,是最接近硬件的部分。
2)这些程序的运行具有原子性(和我们在mysql数据库中学习的原子性一样),其操作只能一气呵成(主要从系统安全性和便于管理考虑)。
3)这些程序的运行时间都较短,而且调用频繁。
通常把具有这些特点的程序称为原语(AtomicOperation)。定义原语的直接方法是关闭中断,让其所有动作不可分割地完成后再打开中断。关闭中断意味着即使程序在运行过程中出现了问题,也不会被处理,这也就意味着程序运行的连贯性。后面再打开中断,这样即使出了问题,操作系统就会去处理,那么前面执行的结果就会有回滚之类的操作。
系统中的设备驱动、CPU切换、进程通信等功能中的部分操作都可定义为原语,使它们成为内核的组成部分。
4、系统控制的数据结构及处理
系统中用来登记状态信息的数据结构很多,如作业控制块、进程控制块(PCB)、设备控制
块、各类链表、消息队列、缓冲区、空闲区登记表、内存分配表等。为了实现有效的管理,系统
需要一些基本的操作,常见的操作有以下3种:
1)进程管理。进程状态管理、进程调度和分派、创建与撤销进程控制块等。
2)存储器管理。存储器的空间分配和回收、内存信息保护程序、代码对换程序等。
3)设备管理。缓冲区管理、设备分配和回收等。
从上述内容可以知道,核心态指令包括系统调用类指令和一些针对时钟、中断和原语的操作指令。
注意:
1、核心态指令包含了特权指令。核心态指令只能在核心态执行,包括了特权指令和部分非特权指令。
2、CPU有核心态与用户态,操作系统同样也有内核区与用户区,操作系统的两个区域是和CPU的两种状态相互对应的。内核区对应着CPU的核心态,在这一状态下,操作系统可以执行特权指令,访问所有的内存空间和硬件资源等。用户区对应着CPU的用户态,在这一状态下,普通程序只能执行非特权指令,对内存空间和硬件资源的访问受到限制。即操作系统的区域与CPU的状态是相互依存的。操作系统的内核区,运行在CPU的内核态,用户区运行在CPU的用户态。
中断
在操作系统中引入核心态和用户态这两种工作状态后,就需要考虑这两种状态之间如何切换。操作系统内核工作在核心态,而用户程序工作在用户态。系统不允许用户程序实现核心态的功能,而它们又必须使用这些功能。因此,需要在核心态建立一些“门”,以便实现从用户态进入核心态。在实际操作系统中,CPU运行上层程序时唯一能进入这些“门”的途径就是通过中断或异常。发生中断或异常时,运行用户态的CPU会立即进入核心态,这是通过硬件实现的(例如,用一个特殊寄存器的一位来表示CPU所处的工作状态,0表示核心态,1表示用户态。若要进入核心态,则只需将该位置0即可)。中断是操作系统中非常重要的一个概念,对一个运行在计算机上的实用操作系统而言,缺少了中断机制,将是不可想象的。原因是,操作系统的发展过程大体上就是一个想方设法不断提高资源利用率的过程,而提高资源利用率就需要在程序并未使用某种资源时,把它对那种资源的占有权释放,而这一行为就需要通过中断实现。
上述体现了一个过程:当有中断发生时,CPU 会从用户态切换到核心态来处理中断。同时,中断机制是操作系统夺回 CPU 控制权的唯一途径。
中断分为两种,一种是内中断,也被称为异常;还有一种是外中断。我们主要是站在程序的角度上去看待中断的。如果程序内部出了问题(例如,除零错误、访问非法内存地址等),这些就是内中断;如果是程序本身可以正常运行,但是外部运行环境出了问题(例如,所需的打印机等硬件资源不足、时钟中断),这就叫外中断。
系统调用
系统调用是操作系统提供给应用程序的一种接口,它允许应用程序请求操作系统内核执行特定的服务。简单理解就是系统调用是操作系统提供的一组API。
注意和库函数区分。库函数是编程语言所提供的一组API,其底层可能就使用了系统调用。
系统调用,按照功能可以分为以下几类:
1、设备管理:完成设备的请求或释放,以及设备启动等功能。
2、文件管理:完成文件的读、写、创建及删除等功能。
3、进程控制:完成进程的创建、撤销、阻塞及唤醒等功能。
4、进程通信:完成进程之间的消息传递或信号传递等功能。
5、内存管理:完成内存的分配、回收以及获取作业占用内存区大小及始址等功能。
其实就是分为对硬件的管理(设备、内存)、数据的管理(文件)、软件的管理(进程)
注意:
1、CPU在执行系统调用时,会发生由用户态转变为内核态的过程。但是触发系统调用时,是处于用户态,而执行时,是处于内核态。
2、访管指令是指可以使CPU从用户态进入核心态的指令。这个指令是在用户态下触发,并在用户态执行完毕,最终使CPU进入了内核态。由访管指令引起的中断,被称作 访管中断。
3、只有操作系统才可以执行特权指令。
4、进行输入输出操作会触发中断,致使CPU从用户态转变为内核态。因为输入输出涉及到数据的安全性,肯定是要在内核态执行的。
操作系统的体系结构
主要就是知道两种:一个是大内核 ;另一个微内核。
大内核
大内核系统将操作系统的主要功能模块都作为一个紧密联系的整体运行在核心态,从而为应用提供高性能的系统服务。因为各管理模块之间共享信息,能有效利用相互之间的有效特性,所以具有无可比拟的性能优势。
但随着体系结构和应用需求的不断发展,需要操作系统提供的服务越来越多,而且接口形式越来越复杂,操作系统的设计规模急剧增长,操作系统也面临着“软件危机”困境。为此,操作系统设计人员试图按照复杂性、时间常数、抽象级别等因素,将操作系统内核分成基本进程管理、虚存、I/O与设备管理、IPC、文件系统等几个层次,继而定义层次之间的服务结构,提高操作系统内核设计上的模块化。但是,由于层次之间的交互关系错综复杂,定义清晰的层次间接口非常困难,复杂的交互关系也使得层次之间的界限极其模糊。为解决操作系统的内核代码难以维护的问题,提出了微内核的体系结构。
微内核
它将内核中最基本的功能(如进程管理等)保留在内核,而将那些不需要在核心态执行的功能移到用户态执行,从而降低了内核的设计复杂性。那些移出内核的操作系统代码根据分层的原则被划分成若干服务程序,它们的执行相互独立,交互则都借助于微内核进行通信。
上面两种设计方式,各有各的优点与缺点。
优点
大内核的设计方式,是将主要的功能都设计在核心区,这样在进行进程切换时,只需要切换一次CPU的状态,即性能高。
微内核的设计方式,是将最基本的功能保留在内核区,内核区的功能也变少了,这样维护的成本也低了不少。
缺点
大内核由于大量的结构,使其维护的成本变得特别高。微内核由于内核区只有基本的功能,致使进行进程切换时,会导致CPU的状态转换次数变多,性能低。两者可以说是互补的。
好啦!本期 初始操作系统篇(2)—— 操作系统的运行环境与体系结构 的学习之旅就到此结束啦!我们下一期再一起学习吧!