什么是操作系统
操作系统为了提供用户一个更好, 更简单, 更清晰的计算机模型, 并管理硬件设备
- 给底层提供抽象. 进程是cpu的抽象, 虚拟地址是对物理内存的抽象, 文件系统是对磁盘的抽象
- 作为资源管理者, 在相互竞争的程序之间有序地控制处理器, 储存器以及其它I/O设备
计算机硬件
处理器
- 计算机的大脑, 每个处理器都有一套可执行的专门指令集
- 有程序计算器, 堆栈指针
- 流水线cpu
- 读取指令 → 解码 → 执行
- 超标量cpu
- 多个读取指令的单元 → 多个解码单元 → 缓冲区 → 多个执行单元
- 多线程和多核芯片
- 多线程: 允许cpu保存两个不同的线程转态, 然后切换 (这里的切换就是一个线程进入sleep后, 调用scheduler, 运行其它线程)
存储器
包括寄存器, 高速缓存, 内存和磁盘
寄存器: 寄存器是最快的, 跟cpu相同的材料做成, 访问它们没有延时
高速缓存: cpu提供了两个高速缓存, L1和L2
内存: 断电了内容就没了, 属于易失性
磁盘: 即使在断电之后也不会丢失数据
I/O设备
IO包括了控制管理器和设备本身. 为了能够使用设备, 需要有设备驱动程序, 把驱动装到OS中, 方法有
- 将内核与设备驱动程序重新连接, 然后重启系统. 许多UNIX以这种方式工作
- 在一个操作系统文件中设置一个入口, 并通知文件需要一个驱动程序, 然后重启系统, 重启之后OS寻找所需设备的驱动并装载.Window的做法
- 系统启动时, 操作系统去寻找所需的设备, 立即安装好. 比如USB
实现输入和输出
方法1: 用户发出系统调用, 然后设备驱动在I/O并忙等待直接完成, 并返回
方法2: 设备驱动在操作完成时产生一个中断, 设备驱动程序在这个时刻返回
方法3: 直接储存器访问
总线
总线把各种设备连接在一起
PCI: 数据并行处理. 多个设备需要发送数据时, 需要决定哪个设备可以使用总线
PCIe: 串行总线结构, 可以并行发送消息
DDR3: CPU通过DDR3与内存对话
USB: 集中式总线, 每个设备1ms轮训一次I/O设备
操作系统的种类
大型机OS: 数据中心的OS, Linux主导
服务器OS: 服务器提供打印服务, 文件服务或者web服务. 奠定的系统有Solaris, FreeBSD, Linux和Windows Server
多个处理器系统: 将多个CPU连接成单个系统, 或者不目前现代很多个人计算机也是多核系统了. 主流的Windows和Linux都可以运行在多核处理器上
个人计算机系统: Windows, Linux和MacOS等
掌上计算机操作系统: 主导的是Android和iOS
嵌入式操作系统: 主导的是Linux, QNX和VxWorks
传感器节点操作系统: 这些节点是一种可以批此通信并且使用无线通信基站的微型计算机, TinyOS是一个著名的系统
实时操作系统: 时间作为关键参数, OS有eCos
操作系统的概念
进程
本质上是一个正在执行的程序, 在内存上有相关的地址空间. 在switch进程时候, 进程所有信息回保存下来等待scheduler下一次的调度
地址空间
用来保存正在执行的程序. 有一种虚拟内存的技术, 操作系统可以把部分地址空间装入主存, 不分留在磁盘上, 并且在需要的时候回来交换它们. 本质上操作系统创建了一个地址空间的抽象, 做为进程可以引用地址的集合. 该地址空间与机器的物理内存解耦, 可能大于也可能小于物理空间
文件
隐藏了磁盘和其它I/O设备的细节特性, 提供一个独立于设备的抽象文件模型
系统调用
用户如果需要一个系统的服务, 比如读取文件, 就需要执行一个系统调用, trap, 把控制转移到操作系统, 执行系统调用, 然后返回给用户. 只有系统调用才能进入内核
系统调用包括了
- 进程管理 i.e. fork()
- 文件管理 i.e. open(file…), close(fd), read(fd, buffer, nbytes)
操作系统的结构
单体系统
整个操作系统在内核态以单一程序运行. 比如Linux
层次式系统
输入输出是一层, 内存管理是一层, 进程管理是一层 (不是大众使用的OS)
微内核
减少出错, 把核心放在内核, 其它放在了用户态. 在实时, 工业中流行.
虚拟机
第一类虚拟机: 同时运行多个操作系统的最终用户服务
第二类虚拟机: 利用了宿主操作系统并通过文件系统创建进程, 存储文件等. 这类虚拟机其实是宿主操作系统的文件系统中的一个大文件
小结
操作系统有效管理系统的各个部分, 提供给用户比实际机器更便于运用的抽象, 比如进程, 地址空间, 文件. 它的核心是可处理的系统调用集, 包括读写文件, 进程创建和终止, 目录管理等