概述
What & Why
what:操作系统是管理计算机硬件和软件资源,提供用户交互界面的计算机程序
Why:统一界面,操作硬件,简易地使用计算机
操作系统的基本功能
- 统一管理着计算机资源。eg. 处理器资源、IO 设备资源、存储器资源、文件资源
- 实现了对计算机资源的抽象。eg. 用户无需面向硬件接口编程; IO 设备管理软件,提供读写接口; 文件管理软件,提供操作文件接口
- 提供了用户与计算机之间的接口。eg. 图像窗口形式, 命令形式, 系统调用形式
操作系统的演进
无操作系统—批处理系统(有多道程序设计的概念)—分时系统(能及时调试程序)
多道程序设计:多道程序设计使得批处理系统可以一次处理多个任务,提升计算机资源的利用率。 是指在计算机内存中同时存放多个程序, 在计算机的管理程序之下相互穿插运行,对多道程序的管理是操作系统的重要功能,分为:进程管理,存储管理,作业管理,文件管理(文件存储空间的管理、目录管理、文件读写管理和保护等。),设备管理(完成用户的 I/O 请求,方便用户使用各种设备,并提高设备的利用率。
主要包括缓冲管理、设备分配、设备处理、虛拟设备等。
相关概念
并发性
并行是指两个或多个事件可以在同一个时刻发生,表现为同一时刻可以处理多个指令。eg. 一个双处理器,一个处理器处理一个事件
并发是指两个或多个事件可以在同一个时间间隔发生, 宏观上表现为在一段时间内能同时运行多个程序。eg. 一个单处理器,在极短的时间间隔内交替运行多道程序,可视为并发。
并行需要硬件支持,如多流水性、多核处理器或分布式计算系统;而操作系统通过引入进程和线程就能使得程序能都并发运行
共享性
表现为操作系统中的资源可被多个并发的程序共同使用(资源共享)。eg. 主存中的资源
有两种共享方式:互斥共享(当资源被程序 A 占用时,其他程序想使用的话只能等待。eg. 打印机)和同时共享(某种资源在一段时间内并发地被多个程序访问,这种“同时”是宏观的)
虚拟性
虚拟性表现为把一个物理实体转变为若干个逻辑实体(物理实体是真实存在的,逻辑实体是虚拟的)。
虚拟的技术主要有:
- 时分复用技术。 资源在时间上进行复用,不同程序并发使用。其实现是借助了虚拟处理器技术( 多个进程轮流占用处理器,每次只执行一小个时间片并快速切换)和虚拟设备技术(物理设备虚拟为多个逻辑设备,每个程序栈用一个逻辑设备,多个程序通过逻辑设备并发访问)
- 空分复用技术。 空分复用技术用来实现虚拟磁盘(物理磁盘虚拟为逻辑磁盘(C、D、E 盘))、虚拟内存( 在逻辑上扩大程序的存储容量, 使用比实际内存更大的容量)等。
异步性
异步指进程不是一次性执行完毕,而是走走停停,以不可知的速度向前推进。(能实现多进程并发执行,因为有异步性进程能在使用资源前能等待)
Further
进程与线程
- 进程是系统进行资源分配和调度的基本单位(一般一个程序对应一个进程)。 引入多道程序设计的概念后, 进程作为程序独立运行的载体保障程序正常执行, 进程的存在使得操作系统资源的利用率大幅提升
- 线程是操作系统进行运算调度的最小单位。 一个进程中可以有多个线程,它们共享进程资源, 是进程中实际运行工作的单位。eg. QQ 和浏览器是两个进程,浏览器进程里面有很多线程,例如 HTTP 请求线程、事件响应线程、渲染线程等等,线程的并发执行使得在浏览器中点击一个新链接从而发起 HTTP 请求时,浏览器还可以响应用户的其它事件。二者区别如下:
进程管理
进程实体
主存中的进程形态表现为一段连续存储的空间,叫进程控制块 (Process Control Block, PCB)。里面记录了很多信息(eg. 状态,标识符,优先级,内存指针…)。PCB 用于描述和控制进程运行的通用数据结构, 记录进程当前状态和控制进程运行的全部信息, PCB 的使得进程是能够独立运行的基本单位。
进程的五状态模型
- 就绪(ready): 其他资源都准备好、只差 CPU 资源的状态为就绪状态。 在一个系统中多个处于就绪状态的进程通常排成一个队列,称为就绪队列
- 执行(running): 进程获得 CPU,其程序正在执行称为执行状态(单处理的某个时候只能有一个进程是该状态)
- 阻塞(waiting): 进程因某种原因(eg. 有设备未准备就绪,例如打印机的排队造成的阻塞)而放弃 CPU 的状态称为阻塞状态。同理有阻塞队列
- *创建: 创建进程时拥有 PCB 但其他资源尚未就绪的状态称为创建状态
- *终止: 进程结束由系统清理或者归还 PCB 的状态称为终止状态
进程同步
Why
关于临界资源(临界资源指的是一些虽作为共享资源却又无法同时被多个线程共同访问的共享资源,要等这个进程用完并释放,下个进程才能用)的两个问题
- 生产者-消费者问题
- 哲学家进餐问题
两个问题的原因都是:彼此相互之间没有通信。应该对竞争资源在多进程间进行使用次序的协调,使得并发执行的多个进程之间可以有效使用资源和相互合作。这就是进程间的同步
进程间同步的原则
- 空闲让进:资源无占用,允许使用
- 忙则等待:资源有占用,请求进程等待
- 有限等待:保证有限等待时间能够使用资源
- 让权等待:等待时,进程需要让出 CPU
进程同步的方法:消息队列;共享存储;信息量
线程同步
由于进程内的线程共享进程资源,所以同理进程内多线程也需要同步。同步方法为:互斥量;读写锁;自旋锁;条件变量