@本系列为上海交通大学现代操作系统课程的笔记,仅用于学习过程的记录
什么是操作系统
- 操作系统有两个职责
- 对硬件进行管理和抽象
- 为应用提供服务并进行管理
- 从硬件角度看
- 操作系统讲复杂的、具备不同功能的硬件资源纳入统一的管理
- 操作系统负责将硬件抽象成不依赖具体硬件特性的资源
这里操作系统的核心功能是将有限的、离散的资源高效地抽象为无限的、连续的资源,并将硬件通过易用的接口提供给上层的应用,从而使应用无需关心硬件的具体细节
- 从软件角度看
- 操作系统提供了不同层次、不同功能的接口(如系统调用等)以满足应用的需求,还提供了不同类型的访问控制、应用间交互等服务
- 操作系统还负责对应用声明周期的管理,包括应用的加载、启动、切换、调度、销毁等
狭义的OS:操作系统内核+shell
广义的OS:操作系统内核+操作系统框架
- 操作系统内核负责对硬件资源的管理和抽象,为操作系统框架提供基础的系统服务
- 操作系统框架基于操作系统内核提供的服务为不同应用领域提供编程接口与运行环境
历史
- 批处理操作系统
通用操作系统:OS/360:首个通用OS,首次将OS与计算机分离
分时与多任务:Multics/Unix/Linux:现代意义上的OS(分时分批处理/)
图形界面:Xero Alto/MacOS/Windows(第一个图形化OS,首次使用鼠标/乔布斯方位Xero PARC,买下GUI研究/基于图形化界面的操作系统)
发展
趋势:AIoT
AIoT=AI+IoT+5G+Cloud+…
反应当前时代的变化
- 趋势
从封闭到开放,再到封闭
从专用到通用,再到专用(领域定制化)
概念
操作系统是在硬件和应用之间的软件层
- OS为应用提供的一些服务
- 为应用提供计算资源的抽象
- CPU:进程/线程,数量不受物理CPU的限制
- 内存:虚拟内存,大小不受物理内存的限制
- I/O设备:为各种设备统一抽象为文件,提供统一接口
- 为应用提供线程间的同步
- 应用可以实现自己的同步原语(如spinlock)
- OS提供了更高效的同步原语(与线程切换配合,如pthread_mutex)
- 为应用提供进程间的通信
- 应用可以利用网络进行进程间通信(如loopback设备)
- OS提供了更高效的本地通信机制(具有更丰富的寓意,如pipe)
- OS对应用的管理
- 生命周期的管理
- 应用的加载、迁移、销毁等操作
- 计算资源的分配
- CPU:线程的调度机制
- 内存:物理内存的分配
- I/O设备:设备的服用与分配
- 安全与隔离
- 应用程序内部:访问控制机制
- 应用程序之间:隔离机制,包括错误隔离和性能隔离
- OS=管理+服务
- 管理和服务的目标有可能存在冲突
- 服务的目标:单个应用的运行效率最大化
- 管理的目标:系统的资源整体利用率最大化
- 例:单纯强调公平性的调度策略往往资源利用率低
如细粒度的round-robin导致大量的上下文切换
- 管理和服务的目标有可能存在冲突
- 操作系统的定义
- 操作系统的核心功能
- 将有限的、离散的资源,高效的抽象为无限的、连续的资源
- 从软件角度的定义
- 硬件资源虚拟化+管理功能可编程
- 从结构角度的定义
- 操作系统内核+系统框架
- 应用与操作系统的交互:系统调用
- 系统调用概念
- 应用调用操作系统的机制,实现应用不能实现的功能
- 使应用调用操作系统的功能就想普通函数调用一样
- 操作系统的功能:管理
- 避免一个流氓应用独占所有资源
- 方法:每10ms发生一个始终中断
- 决定下一个要运行的任务
- 方法:可以通过信号等打断当前任务执行
- 避免一个流氓应用独占所有资源
- 为什么操作系统比较难
- 深入事情本质:直接管理硬件细节
好处:实现资源的高效利用,从根本上解决问题,做一个高效程序员
挑战:需要理解与处理硬件细节,硬件甚至可能出错 - “把复杂留给自己,把简单留给用户”
- 锻炼系统架构能力
- 将复杂问题进行抽象与简化
- 最好的体现了M.A.L.H原则的使用
- 计算机科学中30%的原则是从OS中来的
- 各种问题的交互与相互影响
- 深入事情本质:直接管理硬件细节
- OS的机遇和挑战
- 新的硬件层出不穷
- 硬件种类越来越多:如自动驾驶、无人机、各种IoT设备等
- 硬件互联越来越复杂:如AirDrop、摄像头和驾驶系统等
- 应用需求日新月异
- 对时延的要求越来越苛刻,如自动驾驶系统
- 对资源利用率要求越来越高,如数据中心混部
- 新的硬件和应用呼唤新的抽象和管理——新的操作系统
- OS面临的挑战
- OS的可扩展性(Scale-up)
- 隔离与性能的Tradeoff
- 进程间通信速度慢:比函数调用慢16倍
- 研究者对进程间通信的优化持续了30+年
- IPC依然可占到30%的程序总运行时间
操作系统接口
操作系统提供了不同层次的接口,主要包括如下三种
系统调用接口
用户态应用向OS请求服务的方法
POSIX接口
由于每个OS提供的系统调用各不相同,为了同一个应用程序在不同OS上的可移植性,逐渐形成了一些可移植OS的接口标准,如POSIX
POSIX:Portable Operating System Interface for uniX,可移植操作系统接口
领域应用接口
在POSIX或操作系统调用的基础上还可以封装面向不同领域的领域应用接口