【操作系统篇】第一篇——计算机系统概述(上)(二)

简介: 【操作系统篇】第一篇——计算机系统概述(上)

异步


概念:异步是指,在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行并不是一贯到底的,而是走走停停的,以不可预知的速度向前推进,这就是进程的异步性。

例子:一号的指令1:老渣陪我吃饭,一号的指令2:老渣把心给我;二号的指令1:老渣把心给我,二号的指令2:老渣陪我吃饭;

与一、二号的约会 = 两道并发执行的程序

老渣的心 = 有限的系统资源

由于并发运行的程序会争抢着使用系统资源,而系统中的资源有限,因此进程的执行不是一贯到底的,而是走走停停的,以不可预知的速度向前推进如果失去了并发性,即系统只能串行地运行各个程序,那么每个程序的执行会一贯到底。只有系统拥有并发性,才有可能导致异步性。

上面介绍了操作系统的四个特征,并发,共享,虚拟,异步。

image.png

并发和共享互为存在条件

没有并发和共享,就谈不上虚拟和异步,因此并发和共享是操作系统的两个最基本的特征

发展与分类


手工操作阶段


程序员把程序写到纸带上,有孔的地方代表二进制的1,没有孔的地方代表二进制的0,然后把写好的程序放到纸带机上,由计算机读取计算,把结果再写到纸带机上打印出,最后由程序员读取。

image.png

主要缺点:用户独占全机,人机速度矛盾导致资源利用率极低。

image.png

批处理阶段


单道批处理系统

引入脱机输入/输出技术(用外围机+磁带完成),并由监督程序负责控制作业的输入,输出。

这里体现出了操作系统的雏形。

image.png

主要优点:缓解了一定程度的人机速度矛盾,资源利用率有所提升。

主要缺点:内存中仅能有一道程序运行,只有该程序运行结束之后才能调入下一道程序。CPU有大量的时间是在空闲等待I/O完成。资源利用率依然很低。

image.png

多道批处理系统

每次往内存中读入多道程序,这时候操作系统正式诞生,用于支持多道程序并发运行。

image.png

主要优点:多道程序 并发 执行, 共享 计算机资源。 资源利用率大幅提升 , CPU 和其他资源更能保持“忙碌”状态,系统吞吐量增大。

主要缺点:用户响应时间长, 没有人机交互功能 (用户提交自己的作业之后就只能等待计算机处理完成,中间不能控制自己的作业执行。eg :无法调试程序 / 无法在程序运行过程中输入一些参数)

image.png

分时操作系统


分时操作系统:计算机以时间片为单位轮流为各个用户/作业服务,各个用户可通过终端与计算机进行交互。

主要优点:用户请求可以被即时响应,解决了人机交互问题。允许多个用户同时使用一台计算机,并且用户对计算机的操作相互独立,感受不到别人的存在。

主要缺点:不能优先处理一些紧急任务。操作系统对各个用户/作业都是完全公平的,循环地为每个用户/作业服务一个时间片,不区分任务的紧急性。

image.png

实时操作系统


实时操作系统:

主要优点:能够优先响应一些紧急任务,某些紧急任务不需时间片排队。

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

image.png

运行机制


在开始之前,我问下大家,程序是如何运行的?

C语言代码通过编译器"翻译"成机器指令也就是二进制,一条高级语言的代码翻译过来可能对应多条机器指令,如下所示:

image.png

程序运行的过程其实就是CPU执行一条一条机器指令的过程。

"指令"就是处理器(CPU)能识别,执行的最基本命令

注意:很多人习惯把Linux,Windows,MacOS的"小黑框"中使用的命令也称为"指令",其实这是"交互式命令接口",注意与本文的"指令"区别开。

内核程序VS应用程序


我们普通程序员写的程序就是“应用程序

微软、苹果有一帮人负责实现操作系统,他们写的是“内核程序

由很多内核程序组成了“ 操作系统内核 ”,或简称“ 内核( Kernel ) ” 内核 是操作系统最重要最核心的部分,也是 最接近硬件的部分 甚至可以说,一个操作系统只要有内核就够了(eg : Docker—> 仅需 Linux 内核)操作系统的功能未必都在内核中,如图形化用户界面 GUI。

特权指令VS非特权指令


应用程序只能使用"非特权指令",如:加法指令,减法指令等等。

内核程序作为"管理者",有时会让CPU执行一些"特权指令",如:内存清零指令,这些指令影响重大,只允许"管理者"--即操作系统内核来使用。

CPU设计和生产的时候就划分了特权指令和非特权指令,因此CPU执行一条指令前就能判读初其类型。

内核态VS用户态


CPU能判断出指令类型,但是它怎么区分此时正在运行的是内核程序or应用程序?

CPU 有两种状态,“内核态”和“用户态

处于 内核态时 ,说明此时正在 运行的是内核程序, 此时 可以执行特权指令

处于 用户态时 ,说明此时正在 运行的是应用程序, 此时 只能执行非特权指令

拓展: CPU 中有一个寄存器叫 程序状态字寄存器( PSW ) ,其中有个二进制位, 1 表示 “内核态”,0 表示“用户态”

别名 :内核态 = 核心态 = 管态 ;用户态 = 目态

内核态和用户态的切换

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

将主动让出 CPU 使用权

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

回 CPU 的使用权

举个例子:

1.刚开机时,CPU 为“内核态”,操作系统内核程序先上CPU运行

2.开机完成后,用户可以启动某个应用程序

3.操作系统内核程序在合适的时候主动让出 CPU,让该应用程序上CPU运行

操作系统内核在让出CPU之前,会用一条特权指令把PSW的标志位设置为"用户态"

4.应用程序运行在“用户态"

5.此时,一位猥琐黑客在应用程序中植入了一条特权指令,企图破坏系统…

6.CPU发现接下来要执行的这条指令是特权指令,但是自己又处于“用户态”

7.这个非法事件会引发一个中断信号

CPU检测到中断信号后,会立即变为"核心态",并停止运行当前的应用程序,转而运行处理中断信号的内核程序。

8.“中断”使操作系统再次夺回CPU的控制权

9.操作系统会对引发中断的事件进行处理,处理完了再把CPU使用权交给别的应用程序

操作系统内核


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

image.png

大内核:将操作系统的主要功能都作为系统内核,运行在核心态;优点:高性能;缺点:内核代码庞大,结构混乱,难以维护

微内核:只把最基本的功能保留在内核;优点:内核功能少,结构清晰,方便维护;缺点:需要频繁在核心态和用户态之间切换,性能低。

类比:

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

内核 就是企业的 管理层 ,负责一些重要的工作。只有管理层才能执行 特权指令 ,普通员工只能

执行 非特权指令 。 用户态 、 核心态 之间的 切换 相当于普通员工和管理层之间的 工作交接

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

结构混乱,难以维护。

微内核:随着企业体量越来越大,管理层只负责最核心的一些工作。优点是组织结构清晰,方

便维护;缺点是效率低。

image.png

中断和异常


中断的作用


“中断"会使CPU由用户态变为内核态,使操作系统重新夺回对CPU的控制权。

CPU 上会运行两种程序,一种是操作系统内核程序,一种是应用程序。

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

“中断”是 让操作系统内核夺回 CPU 使用权 的唯一途径

如果没有“中断”机制,那么一旦应用程序上 CPU 运行, CPU 就会一直运行这个应用程序

既然如此,如果没有中断技术,那何来的"并发"?

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

将主动让出 CPU 使用权

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

回 CPU 的使用权    

中断的类型


内中断(异常,例外)


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

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

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

若当前执行的指令是非法的,则会引发一个中断信号。

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

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

外中断(中断)


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

每一条指令执行结束时,CPU都会例行检查是否有外中断信号

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

通过这个就可以实现两个进程并发运行。

image.png

总结:

image.png

中断机制的基本原理


不同的中断信号,需要用不同的中断处理程序来处理。当CPU检测到中断信号后,会根据中断信号

的类型去查询“中断向量表”,以此来找到相应的中断处理程序在内存中的存放位置。

image.png

总结:

image.png





相关文章
|
7月前
|
Unix C语言
操作系统基础:IO管理概述【上】
操作系统基础:IO管理概述【上】
操作系统基础:IO管理概述【上】
|
7月前
|
算法 Shell Linux
操作系统概述
操作系统概述
68 0
|
6月前
|
Python
Python的`os`模块核心功能概述:通过`os.getcwd()`获取
【6月更文挑战第23天】Python的`os`模块核心功能概述:通过`os.getcwd()`获取、`os.chdir()`改变工作目录;使用`os.mkdir()`, `os.makedirs()`创建目录,`os.rmdir()`, `os.removedirs()`删除;`os.rename()`, `os.renames()`重命名文件或目录;`os.remove()`删除文件;`os.listdir()`列出目录内容;`os.path.exists()`, `os.path.isfile()`, `os.path.isdir()`检查路径;`os.stat()`获取文件属性。
97 4
|
5月前
|
Linux 调度
部署02-我们一般接触的是Mos和Wimdows这两款操作系统,很少接触到Linux,操作系统的概述,硬件是由计算机系统中由电子和机械,光电元件所组成的,CPU,内存,硬盘,软件是用户与计算机接口之间
部署02-我们一般接触的是Mos和Wimdows这两款操作系统,很少接触到Linux,操作系统的概述,硬件是由计算机系统中由电子和机械,光电元件所组成的,CPU,内存,硬盘,软件是用户与计算机接口之间
|
7月前
|
存储 安全 数据处理
【计算机系统组成原理】操作系统处理器深入介绍
【计算机系统组成原理】操作系统处理器深入介绍
|
7月前
|
存储 API 芯片
1.操作系统概述
1.操作系统概述
|
7月前
|
存储 缓存 安全
【linux基础(八)】计算机体系结构--冯诺依曼系统&操作系统的再理解
【linux基础(八)】计算机体系结构--冯诺依曼系统&操作系统的再理解
|
7月前
|
程序员 Linux 调度
《操作系统》——计算机系统概述
《操作系统》——计算机系统概述
278 3
|
7月前
|
安全 Unix Linux
第一章 操作系统概述
第一章 操作系统概述
201 0
操作系统基础:IO管理概述【下】
操作系统基础:IO管理概述【下】