目录

操作系统的运行机制与体系结构

运行机制

有的指令有很高的权限。比如:内存清零指令。如果用户程序可以使用这个指令,就意味着一个用户可以将其他用户的内存数据随意清零,这样做显然是很危险的。

两种指令

问题:指令和代码有什么区别?

https://gitee.com/lienhui68/picStore/raw/master/null/20200709194458.png

简单来说,指令就是cpu能识别、执行的最基本指令,比如:加法指令就是让cpu进行加法运算。

新的问题

有的指令“人畜无害”。比如加减乘除这些普通的指令。

指令分类

  1. 特权指令:如内存清零指令,不允许用户程序使用
  2. 非特权指令:如普通的运算指令

两种处理器状态

  1. 用户态(目态):此时cpu只能执行非特权指令
  2. 核心态(管态):特权指令、非特权指令都可执行

当前处理器处于什么状态是用程序状态字寄存器(PSW)中的某个标志位来标识的。如0为用户态,1为核心态。

两种程序

  1. 内核程序

    操作系统的内核程序是系统的管理者,既可以执行特权指令,也可以执行非特权指令,运行在核心态。

  2. 应用程序

    为了保证系统能安全运行,普通应用程序只能执行非特权指令,运行在用户态。

操作系统内核

https://gitee.com/lienhui68/picStore/raw/master/null/20200709195815.png

内核是计算上配置的底层软件,是操作系统最基本、最核心的部分。实现操作系统内核功能的那些程序就是内核程序

https://gitee.com/lienhui68/picStore/raw/master/null/20200709200108.png

内核分类

https://gitee.com/lienhui68/picStore/raw/master/null/20200709200309.png

  1. 大内核

    将操作系统的主要功能模块都作为系统内核,运行在核心态。

    优点:高性能

    缺点:内核代码庞大,结构混乱,难以维护

  2. 微内核

    只把最基本的功能保留在内核

    优点:内核功能少,结构清晰,方便维护

    缺点:需要频繁地在核心态和用户态之间切换,性能低。

操作系统的体系结构问题与企业的管理问题很相似。

内核就是企业的管理层,负责一些重要工作。只有管理层才能执行特权指令,普通员工只能执行非特权指令用户态核心态之间的切换相当于普通员工和管理层之间的工作交接

大内核:企业初创时体量不大,管理层的人会负责大部分的事情。优点是效率高;缺点是组织结构混乱,难以维护。

微内核:随着企业体量越来越大,管理层只负责最核心的工作。优点是组织结构清晰,方便维护;缺点是效率低。

小结

https://gitee.com/lienhui68/picStore/raw/master/null/20200709201114.png

中断和异常

中断的作用

CPU 上会运行两种程序,一种是操作系统内核程序,一种是应用程序在合适的情况下,操作系统内核会把CPU的使用权主动让给应用程序(第二章进程管理相关内容)。

“中断”是让操作系统内核夺回CPU使用权的唯一途径,如果没有“中断”机制,那么一旦应用程序上CPU运行,CPU就会一直运行这个应用程序。

内核态 -> 用户态:执行一条特权指令——修改PSW的标志位为“用户态”,这个动作意味着操作系统将主动让出CPU使用权。

用户态 -> 内核态:由“中断”引发,硬件自动完成变态过程触发中断信号意味着操作系统将强行夺回CPU的使用权

中断的类型

  1. 内中断 与当前执行的指令有关,中断信号来源于cpu内部
  2. 外中断 与当前执行的指令无关,中断信号来源于cpu外部

内中断

与当前执行的指令有关, 中断信号来源于CPU内部

例子 1:试图在用户态下执行特权指令

例子 2:执行除法指令时发现除数为 0

https://gitee.com/lienhui68/picStore/raw/master/null/20200709203822.png

例子 3:有时候应用程序想请求操作系统内核的服务,此时会执行一条特殊的指令——陷入指令,该指令会引发一个内部中断信号。

执行“陷入指令”,意味着应用程序主动地将CPU控制权还给操作系统内核。 “系统调用”就是通过陷入指令完成的

https://gitee.com/lienhui68/picStore/raw/master/null/20200709204027.png

外中断

每一条指令执行结束时,cpu都会例行检查是否有外中断信号。外中断与当前执行的指令无关,中断信号来源于cpu外部

例子 1:时钟中断——由时钟部件发来的中断信号

例子2:I/O中断——由输入/输出设备发来的中断信号

https://gitee.com/lienhui68/picStore/raw/master/null/20200709204710.png

中断的分类

https://gitee.com/lienhui68/picStore/raw/master/null/20200709204835.png

大多数的教材、试卷中,“中断”特指狭义的中断,即外中断。而内中断一般称为“异常”

中断机制的基本原理

不同的中断信号,需要用不同的中断处理程序来处理。当CPU检测到中断信号后,会根据中断信号 的类型去查询“中断向量表”,以此来找到相应的中断处理程序在内存中的存放位置

https://gitee.com/lienhui68/picStore/raw/master/null/20200709205013.png

小结

https://gitee.com/lienhui68/picStore/raw/master/null/20200709205124.png

系统调用

什么是系统调用

知识点回顾: 操作系统作为用户和计算机硬件之间的接口,需要向上提供一些简单易用的服务。主要包括命令接口和程序接口。其中,程序接口由一组系统调用组成。

https://gitee.com/lienhui68/picStore/raw/master/null/20200709211845.png

“系统调用”是操作系统提供给应用程序(程序员/编程人员)使用的接口,可以理解为一种可供应用程序调用的特殊函数,应用程序可以通过系统调用来请求获得操作系统内核的服务

系统调用与库函数的区别

https://gitee.com/lienhui68/picStore/raw/master/null/20200709212116.png

为什么系统调用是必须的

https://gitee.com/lienhui68/picStore/raw/master/null/20200709212213.png

解决方法:由操作系统内核对共享资源进行统一的管理,并向上提供“系统调用” ,用户进程想要使用打印机这种共享资源,只能通过系统调用向操作系统内核发出请求。内核会对各个请求进行协调处理

什么功能要用系统调用实现

应用程序通过系统调用请求操作系统的服务。而系统中的各种共享资源都由操作系统内核统一掌管,因此凡是与共享资源有关的操作(如存储分配、I/O操作、文件管理等),都必须通过系统调用的方式向操作系统内核提出服务请求,由操作系统内核代为完成。这样可以保证系统的稳定性和安全性,防止用户进行非法操作。

https://gitee.com/lienhui68/picStore/raw/master/null/20200709212403.png

系统调用的过程

https://gitee.com/lienhui68/picStore/raw/master/null/20200709212555.png

https://gitee.com/lienhui68/picStore/raw/master/null/20200709212756.png

传递系统调用参数 -> 执行陷入指令(用户态) -> 执行相应的内核程序处理系统调用(核心态) -> 返回应用程序

注意:1. 陷入指令是在用户态执行的,执行陷入指令之后立即引发一个内中断,使CPU进入核心态

  1. 发出系统调用请求是在用户态,而对系统调用的相应处理核心态下进行

小结

https://gitee.com/lienhui68/picStore/raw/master/null/20200709213133.png