第一章 计算机系统概述
王道操作系统学习笔记
一、操作系统的概念
操作系统(Opertaring System,OS)是指控制和管理整个计算机系统的**硬件和软件 ** 资源,并合理地组织调度计算机的工作和资源分配;以提供给用户和其他软件方便的接口环境;它是计算机系统中最基本的系统软件。
二、操作系统的功能和目标
1. 操作系统是系统资源的管理者
注:进程是一个程序的执行过程,执行一个程序前需要将该程序放到内存中,才能被CPU处理。
提供的功能
-
文件管理
eg.在各文件夹中找到QQ安装的位置,找到QQ.exe
-
存储器管理
eg.双击打开QQ.exe,需把数据放入内存
-
处理机管理
eg.QQ程序正常运行,对应的进程被处理机(CPU)处理
-
设备管理
eg.开始和朋友视频聊天,需要将摄像头设备分配给进程
目标
- 安全、高效
2.操作系统向上层提供方便易用的服务(封装思想)
提供的功能
命令接口和程序接口统称为用户接口
-
命令接口:允许用户直接使用
-
联机命令接口:用户说一句,系统做一句
联机命令接口=交互式命令接口
eg. win+R,输入cmd按回车打开命令解释器,使用time指令
-
脱机命令接口:用户说一堆,系统做一堆
脱机命令接口=批处理命令接口
eg. *.bat文件
-
-
程序接口:允许用户通过程序间接使用
-
由一组系统调用组成(程序接口=系统调用)
注:系统调用=系统调用命令=广义指令
-
系统调用类似于函数调用,是应用程序请求操作系统服务的唯一方式
-
-
GUI(图形用户接口)Graphical User Interface
目标
- 方便用户使用
3.操作系统是最接近硬件的一层软件
- 需要实现对硬件机器的拓展
- 没有任何软件支持的计算机成为裸机。
- 通常把覆盖了软件的机器称为扩充机器,又称之为虚拟机
三、操作系统的特征
1. 并发
-
并发:指两个或多个事件在同一时间间隔内发送。这些事件宏观上是同时发生的,微观上是交替发生的。
-
易混淆概念:并行:指两个或多个事件在同一时刻同时发生。
-
操作系统的并发性:指计算机系统中“同时”运行着多个程序。
-
操作系统就是伴随着“多程序技术”而出现的。因此,操作系统和程序并发是一起诞生的。
-
注(重要考点):
- 单核CPU同一时刻只能执行一个程序,各个程序只能并发地执行
- 多核CPU同一时刻可以同时执行多个程序,多个程序可以并行地执行
2. 共享
-
共享:即资源共享,是指系统中的资源可供内存中多个并发执行的进程共同使用。
-
两种资源共享的方式:
-
互斥共享方式
系统中的某些资源,虽然可供给多个进程使用,但一个时间段内只允许一个进程访问该资源
eg. 使用QQ和微信视频,同一时间段内摄像头只能分配给其中一个进程
-
同时共享方式
系统中的某些资源,允许一个时间段内由多个进程“同时”对它们进行访问
eg. 使用QQ发送文件A,同时用微信发送文件B。宏观同时,微观交替访问硬盘。
-
并发和共享的关系
-
并发和共享是两个最基本的特征,二者互为存在条件
-
eg. 使用QQ发送文件A,同时用微信发送文件B
-
两个进程正在并发执行(并发性)
如果失去并发性,则系统中只有一个程序正在运行,则共享性失去存在的意义
-
需要共享地访问硬盘资源(共享性)
如果失去共享性,则QQ和微信不能同时访问硬盘资源,就无法实现同时发送文件,也就无法并发
-
3. 虚拟
-
虚拟:是指把一个物理上的实体变为若干个逻辑上的对应物。物理实体是实际存在的,而逻辑上对应物是用户感受到的
-
虚拟技术
-
空分复用技术
eg. 如虚拟存储器技术
-
时分复用技术
微观上处理机在各个微小的时间段内交替着为各个进程服务
eg. 如虚拟处理器
-
-
如果失去了并发性,则一个时间段内系统中只需运行一道程序,那么就失去了虚拟性的意义了。因此,没有并发性,就谈不上虚拟性
4.异步
- 异步:是指在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行不是一贯到底,而是走走停停,已不可预知的速度向前推进,这就是进程的异步性。
- 如果失去了并发性,即系统只能串行地运行各个程序,那么每个程序地执行会一贯到底。只有系统拥有并发性,才有可能导致异步性。
四、操作系统的发展与分类
-
手工操作阶段
- 主要缺点:用户独占全机、人机速度矛盾导致资源利用率低
-
批处理阶段
-
单道批处理系统
引入脱机输入/输出技术(用外围机+磁带完成),并由监督程序(操作系统的雏形)负责控制作业的输入、输出
- 主要优点:缓解了一定程度的人机速度矛盾,资源利用率有所提升
- 主要缺点:
- 内存中仅能有一道程序运行,只有该程序结束后才能调入下一道程序。
- CPU有大量的时间是在空闲等待I/O完成。资源利用率依然很低。
-
多道批处理系统
操作系统开始出现,并引入了中断技术,由操作系统负责管理这些程序的运行,各个程序并发执行
- 主要优点:多道程序 并发执行,共享计算机资源。资源利用率大大提升,CPU和其他资源更能保持“忙碌”状态,系统吞吐量增大。
- 主要缺点:用户响应时间长,没有人机交互功能(用户自己提交自己的作业之后就只能等待计算机处理完成,中间不能控制自己的作业执行。eg.无法调试程序/无法在程序运行过程中输入一些参数)
-
-
分时操作系统
计算机以 时间片为单位轮流为各个用户/作业服务,各个用户可通过终端与计算机进行交互。
- 主要优点:用户请求可被及时响应,解决了人机交互问题。允许多个用户同时使用一台计算机,并且用户对计算机的操作系统相互独立,感受不到别人的存在。
- 主要缺点:不能优先处理一些紧急任务。
-
实时操作系统
计算机系统接收到外部信号后及时进行处理,并且 要在严格的时限内处理完事件。
实时操作系统的主要特点是 及时性和可靠性
- 硬实时系统——必须在绝对严格的规定时间内完成处理(eg.导弹控制系统、自动驾驶系统)
- 软实时系统——能接受偶尔违反时间规定(eg.火车订票系统)
-
网络操作系统
随计算机网络发展而诞生,实现网络中各种资源的共享(如文件共享)和各台计算机之间的通信。
-
分布式操作系统
主要特点是 分布性和并行性。系统中的各台计算机地位相同,任何工作都可以分布在这些计算机上,由它们并行、协同完成这个任务
-
个人计算机操作系统
五、操作系统的运行机制
-
补充:
- 程序运行的过程其实就是CPU执行一条一条的机器指令的过程
- “指令”就是CPU处理器(CPU)能识别、执行的最基本命令
●两种程序
CPU上会运行两种程序,一种是操作系统内核程序,一种是应用程序
- 内核程序:微软、苹果有一帮人负责实现操作系统,他们写的是“内核程序”,由很多内核程序组成了“操作系统内核”,或简称“内核(Kernel)”
- 内核是操作系统最重要最核心的部分,也是最接近硬件的部分
- 操作系统的功能未必都在内核中,如GUI
- 操作系统的内核程序是系统的管理者,即可执行非特权指令,也可执行特权指令,运行在核心态
- 内核是操作系统最重要最核心的部分,也是最接近硬件的部分
- 应用程序:普通程序员写的程序是“应用程序”
●两种指令
在 CPU设计和生产的时候就划分了特权指令和非特权指令,因此CPU执行一条指令前就能判断出其类型
-
特权指令
操作系统内核作为“管理者“,有时会让CPU执行一些”特权指令“(不允许用户程序使用) eg. 内存清零指令
只允许”管理者“——即操作系统内核来使用
-
非特权指令
应用程序只能使用“非特权指令” eg. 加法指令、减法指令
●两种处理器状态
-
CPU的两种处理状态
-
内核态
处于 内核态时,说明此时正在运行的是内核程序,此时 可以执行特权指令
-
用户态
处于 用户态时,说明此时正在运行的是应用程序,此时 只能执行非特权指令
-
-
拓:CPU中有一个寄存器叫 程序状态字寄存器(PSW),其中有个二进制位,1表示“内核态”,0表示“用户态”
-
别名:内核态=核心态=管态;用户态=目态
-
❗❗❗内核态、用户态的切换:
-
内核态–>用户态:
执行一条 特权指令—— 修改PSW 的标志位为“用户态”,这个动作意味着操作系统将主动让出CPU使用权
-
用户态–>内核态:
由“中断”引发,硬件自动完成变态过程,触发中断信号意味着操作系统将强行夺回CPU使用权
- 除了非法使用特权指令外还有很多事件会触发中断信号。
- 一个共性是:但凡需要操作系统介入的地方,都会触发中断信号
-
六、操作系统的内核
内核是计算机上配置的底层软件,是操作系统最基本、最核心的部分
-
时钟管理:实现计时功能
-
中断处理:负责实现中断机制
-
原语:
- 是一种特殊的程序
- 处于操作系统最底层,是最接近硬件的部分
- 这种程序的运行具有 原子性——其运行只能一气呵成,不可中断
- 运行时间较短、调用频繁
-
对系统资源进行管理的功能
- 进程管理
- 存储器管理
- 设备管理
有的操作系统不把这部分功能归为“内核功能“
七、操作系统的体系结构
- 大内核:将操作系统的主要功能模块都作为系统内核,运行在核心态
- 优点:高性能
- 缺点:内核代码庞大,结构混乱,难以维护
- 微内核:只把最基本的功能保留在内核
- 优点:内核功能少,结构清晰,方便维护
- 缺点:需要频繁地在核心态和用户态之间切换,性能低
八、中断和异常
1.中断机制的诞生
- 为实现多道程序并发执行而引入的一种技术
2. 中断的作用
- “中断”会 使CPU由用户态变成内核态,使操作系统重新夺回对CPU的控制权
- “中断”是 让操作系统内核夺回CPU使用权 的唯一途径
3.中断的分类
-
广义的中断包含内中断和外中断
-
大多数教材、试卷中,“中断”特指狭义的中断,即外中断。而内中断一般称为“异常”
分类方法一:
-
内中断(也称异常、例外、陷入)
信号的来源:CPU内部
与当前执行的指令 有关
- 自愿中断——指令中断(eg.系统调用时使用的访管指令,又叫陷入指令、trap指令)
- 强迫中断
- 硬件故障(eg.缺页)
- 软件中断(eg.整数除0)
-
外中断(狭义的中断)
信号的来源:CPU外部
与当前执行的指令 无关
- 外设请求(eg.I/O操作完成发出的中断信号)
- 人工干预(eg.用户强行终止一个进程)
分类方法二:
-
内中断
-
陷阱、陷入(trap)
由陷入指令引发,是应用程序故意引发的
-
故障(fault)
由错误条件引发,可能被内核程序修复。内核程序修复故障后会把CPU使用权还给应用程序,让他继续执行下去。
eg.缺页故障
-
终止(abort)
由致命错误引起,内核程序无法修复该错误,因此一般不再将CPU使用权还给引发终止的应用程序,而是直接终止该应用程序。
eg.整数除0、非法使用特权指令
-
-
外中断
- 时钟中断
- I/O中断请求
4.外中断的处理过程
-
每条指令执行结束后,CPU检查是否有外部中断信号
-
若有外部中断信号,则需要保护被中断进程的CPU环境
eg.程序状态字PSW、程序计数器PC、各种通用寄存器
-
根据中断信号类型转入相应的中断处理程序
-
恢复原进程的CPU环境并退出中断,返回原进程继续往下执行
九、系统调用
1. 什么是系统调用
- “系统调用”是操作系统提供给应用程序(程序员/编程人员)使用的接口
- 可以理解为一种可供应用程序调用的特殊函数,应用程序可以通过系统调用来请求获得操作系统内核的服务。
- 系统调用会使处理器从用户态进入核心态
2.系统调用与库函数的区别
- 系统调用是操作系统向上层提供的接口
- 有的库函数是对系统调用的进一步封装
- 当今编写的应用程序大多是通过高级语言提供的库函数间接地进行系统调用
普通应用程序 | 可直接进行系统调用,也可使用库函数。有的库函数涉及系统调用,有的不涉及。 |
---|---|
编程语言 | 向上提供库函数。有时会将系统调用封装成库函数,以隐藏系统调用的一些细节,使程序员编程更加方便。 |
操作系统 | 向上提供系统调用,使得上层程序能请求内核的服务。 |
裸机 |
-
系统调用的相关处理在核心态进行
- 系统调用相关处理涉及到对系统资源的管理、对进程的控制,这些功能需要执行一些 特权指令 才能完成,因此 系统调用的相关处理 需要在 核心态 下进行。
-
不涉及系统调用的库函数:eg.“取绝对值”的函数
涉及系统调用的库函数:eg.“如创建一个新文件”的函数
-
系统调用是必须的
3.什么功能要用系统调用实现
- 应用程序通过 系统调用 请求操作系统的服务。
- 而系统中的各种共享资源都由操作系统内核统一掌管,因此 凡是与共享资源有关的操作(如存储分配、I/O操作、文件管理等),都必须通过系统调用的方式向操作系统内核提出服务请求,由操作系统内核代为完成。
- 这样 可以保证系统的稳定性和安全性,防止用户进行非法操作。
系统调用(按功能分类)
- 设备管理:完成设备的 请求/释放/启动 等功能
- 文件管理:完成文件的 读/写/创建/删除 等功能
- 进程控制:完成进程的 创建/撤销/阻塞/唤醒 等功能
- 进程通信:完成进程之间的 消息传递/信号传递 等功能
- 内存管理:完成内存的 分配/回收 等功能
4. 系统调用的过程
- 传递系统调用参数
- 执行陷入指令
- 执行系统调用相应服务程序
- 返回用户程序
- 系统调用发生在用户态,对系统调用地处理发生在核心态
- 执行陷入指令会产生内中断,使处理器从用户态进入核心态