OS是软件和硬件资源的管理者
cpu
如何分配——第二章进程管理- 内存如何分配——第三章内存管理
- 磁盘如何分配——第四章文件管理
- 外设如何分配(USB接口)——第五章
I/0
子系统
写在前面
操作系统是介于用户和硬件之间的一层软件,用于方便用户操作底层硬件。OS会向用户暴露/提供一些接口:
- 命令行接口
- GUI(图形用户接口——Graph User Interface)
- 程序接口(API——Application Program Interface)
而OS则会作为管理者分配、管理硬件
发展
-
无操作系统
? 机器代替手工
-
单道批处理系统(
cpu
代替手工处理)? I/O交互时,
cpu
空闲 ➡ 提高cpu
利用率 -
多道批处理系统(
cpu
只能在特定时间服务于我)? 满足基本计算后要求交互性
-
分时系统(感觉
cpu
一直为我工作,实际上时间片轮转)? 工业和科学的要求,提高即时性和可靠性
-
实时操作系统(有优先级,高效且准确的完成任务)
? 推动计算机网络的发展
-
网络操作系统(多台计算机通过网络连接,一起分担压力共同完成任务)
? 建立在网络操作系统之上,功能分布在互联网上,负载均衡化
-
分布式操作系统(平衡负载,压力分流)
? 走入千家万户,是一种通用操作系统
-
个人操作系统(XP Win7 Linux MAC Android)
运行机制
操作系统的运行机制由中断、调用和异常组成
中断(外伤) ➡ 一种通知反应
?
运行机制 ? 系统调用(主动反应) ➡ 一种请求行为
?
异常(内伤) ➡ 一种错误处理行为
_____________________
| 程序接口 |
| ______________ | <===> API
| | 系统调用 | |
| |______________| |
|____________________|
-
中断:举个栗子,键盘向电脑中输入的时候总共有两根线:数据线&控制线
- 先通过控制线上的中断信号感知外界产生的某种行为
- 再检测/查询数据线上传入来的内容来得知具体的行为
-
异常:众所周知,开机后先有始终振荡器“起搏”,发送时钟信号给
cpu(大脑)
。而后从磁盘将内容(最先读取OS)读至内存中开始运行。- 异常的出现是为了解决运行时崩溃问题。比如我们从磁盘中将某程序(比如QQ)读到了内存中开始运行,而假如其中有一个错误(比如
1/0
),则程序在执行到此处时会直接崩溃。此即为异常
- 异常的出现是为了解决运行时崩溃问题。比如我们从磁盘中将某程序(比如QQ)读到了内存中开始运行,而假如其中有一个错误(比如
OS特征
此章比较重要,对并发和异步会比较有帮助。也对利用信号量解决同步和互斥问题有很大帮助
并发
伪并发
- 以时间为单位定义!
- 单核计算机在一时间间隔内服务多个程序
真并发
- 以时刻为单位定义!
- 多核
cpu
同一时刻服务于多个程序 - 真并发相当于多核之间并行(FPGA)
- Ps:并行的话单核计算机无法完成,必须是多核
异步
-
产生原因:并发 + 运行机制(中断、异常或系统调用产生的影响)
-
特征:走走停停,具有随机性
-
表现形式:
-
假设QQ产生两个聊天进程A、B。 两段对应代码A、B。假设两端代码都有一个共用变量x,由于是公用所以可能造成A、B两端代码相互更改x的问题 为了解决,我们需要在A代码读取x之前建立一个信号量flag,具体操作流程是: 先检查!再放! 假使A更快,需要调用公共变量x时,会先去检查是否有flag标识,若无则手动建立 而B运行至需要x的那行时候,发现已经有一个flag在变量x上,那么则停下来等待A进程调用结束。也就是等待flag移除 而A使用完毕后在将flag移除并还原为初始态,此后B才可以接着使用
-
虚拟
虚拟数量
以少变多,增强复用性
虚拟大小
以小变大(虚拟为逻辑或思想上的大内存)