操作系统
本文为学习操作系统的基础
第一章 操作系统概述
操作系统:指控制和管理整个计算机系统的硬件及软件资源,并合理的组织调度计算机的工作和资源的分配,以供给用户和其他软件方便的接口和环境,是计算机中最基本的系统软件。
操作系统的功能
- 系统资源的管理者
- 向上层提供方便易用的服务
- 最为最接近硬件的层次
操作系统的特征
- 并发:指两个或多个事件同一时间发生。在宏观上同时发生,微观上交替发生。
并发性指计算机"同时运行"着多个程序。
单核 CPU 同一时刻只能运行一个程序,各个程序只能并发执行。多核 CPU 同一时刻可以运行多个程序,各个程序可以并行运行。 - 共享:
指系统中的资源可以供多个并发执行的进程共同使用。
互斥共享,一个资源只能一个进程访问;同时共享允许一个时间段内有多个进程“同时”对他们进行访问。 - 虚拟:是指把一个物理上的实体变为若干个逻辑上的对应物。
- 异步:在多个程序环境下,允许多个程序并发执行,但由于资源有限,进程不是一贯到底的。
操作系统的发展和分类
- 手工操作阶段:使用纸带输入计算机,计算机输出到纸带上。效率极低。
- 单道批处理系统:引入脱机输入输出技术,并由监督程序负责控制输入输出。CPU 仍然大量在空闲等待,资源利用率低。
- 多道批处理系统:操作系统的诞生,每次往系统读入多道程序。
- 分时操作系统:计算机以时间片为单位轮流为各个用户服务。解决了人机交互的问题。
- 实时操作系统:计算机系统接收到外部信号后能及时处理,并在严格的时限内处理完事件。
操作系统的运行机制
指令就是CPU能识别、执行的最基本的命令。
两种指令
- 特权指令:操作系统内核作为管理者,会让 CPU 执行一些特权指令。处于内核态的时候,可以执行特权指令。
- 非特权指令:处于用户态时,只能执行非特权指令。
两种处理器状态
- 核心态
- 用户态
两种程序
- 内核程序:和操作系统相关的程序,内核是操作系统最核心的部分。
- 应用程序:普通程序员写的程序
中断和异常
中断是操作系统内核夺回CPU使用权的唯一途径
中断的类型
- 内中断:与当前执行的指令有关,中断信号来源于 CPU 内部。
- 外中断:与当前执行的指令无关,中断信号来源于 CPU 外部。
系统调用
系统调用指操作系统提供给应用程序的接口。
系统调用的分类:
- 设备管理:完成设备的启动、释放等功能
- 文件管理:完成文件的读写等功能
- 进程控制:完成进程的创建、销毁等功能
- 进程管理:完成进程之间的消息传递等功能
- 内存管理:完成内存的分配、回收等功能
第二章 进程管理
程序:是静态的,就是存放在磁盘里的可执行文件,就是一系列指令的集合
进程:是动态的,是程序的一次执行过程。当进程被创建时操作系统会为该进程分配一个唯一的、不重复的“身份证号”-PID
组成:PCB(进程控制块)是进程存在的唯一标志、程序段、数据段
特征:动态性、并发性、独立性、异步性和结构性
进程的状态
进程 PCB 中,会有一个变量 state 记录进程的状态
创建态、就绪态
进程在创建时,它的状态是创建态,在这个阶段操作系统会为进程分配资源、初始化 PCB。
当进程创建完成后,就会进入就绪态,处于就绪态的进程已经具备了运行的条件,但是没有空闲的 CPU,暂时不能运行。
运行态
如果一个进程此时在 CPU 上运行,那么他就处于运行态,CPU 会执行该进程的指令序列
阻塞态
在进程运行期间可能会请求等待某个事件的发生。在这个事件发生前,进程无法向下执行,此时操作系统会让这个进程下 CPU,进入阻塞态。当 CPU 空闲时,又会选择另一个就绪态上 CPU。
终止态
一个进程可以执行 exit 系统调用,请求操作系统终止该进程。该进程会进入终止态,操作系统会让该进程下 CPU,并回收内存空间等资源,还要回收 PCB。进程工作结束,彻底消失。
一个进程不可能从就绪态->阻塞态;也不可能从阻塞态->运行态
进程控制
主要功能:对系统所有的进程实现有效的管理,具有创建新进程、撤销已有进程和实现进程状态转换。
原语:是一种特殊程序,它的执行具有原子性,不能被中断。可以用关中断(不在例行检查是否有中断)和开中断来实现原子性
进程创建
创建原语
- 申请 PCB
- 为新进程分配资源
- 初始化 PCB
- 将 PCB 插入就绪队列
引起进程创建的事件
- 用户登录
- 作业调度
- 提供服务
- 应用请求
进程终止
撤销原语
- 从 PCB 集合找到终止进程的 PCB
- 进程正在运行,则剥夺其 CPU,将 CPU 分配给其他进程
- 终止其所有子进程
- 将该进程拥有的资源归还给父进程或者操作系统
- 删除 PCB
引起进程终止的事件
- 正常结束
- 异常结束
- 外界干预
进程阻塞
阻塞原语
- 找到要阻塞的 PCB
- 保护进程的运行现场,将 PCB 设置为阻塞态,暂停进程的运行
- 将 PCB 插入相应事件的等待队列
引起进程阻塞的事件
- 需要等待系统分配某种资源
- 需要等待相互合作的其他进程完成工作
进程唤醒
唤醒原语
- 在事件等待队列中找到 PCB
- 将 PCB 从等待队列移除,设置状态为就绪态
- 将 PCB 插入就绪队列,等待被调度
引起进程唤醒的事件
- 等待事件的发生
进程的切换
切换原语
- 将运行环境的信息存入 PCB 中
- PCB 移入相应队列
- 选择另一个进程执行,并更新其 PCB
- 根据 PCB 恢复新进程所需运行环境
引起进程切换的事件
- 当进程时间片到了
- 有更高优先级的进程到达
- 当前进程阻塞
- 当前进程终止
进程通信
定义:指两个进程之间的数据交互
共享存储:因为各进程间的内存地址是相互独立的
消息传递:进程之间的数据交互以格式化的消息为单位。进程通过操作系统提供的“发生消息/接收消息”两个原语进行交换。
- 直接通信方式
- 间接通信方式
管道通信
线程的概念
线程是程序执行的最小单位,是一个基本的 CPU 单元。简单来说就是,轻量级进程。
线程的实现方式
- 用户级线程
- 内核级线程
多线程模型
- 一对一:一个用户级线程映射一个内核级线程
- 多对一:多个 y 用户级线程映射到一个内核级线程
- 多对多:n 个用户级线程映射到 m 个内核级线程
调度
概念:确定某种规则来决定处理这些任务的顺序。
进程调度的时机
当前运行的进程主动放弃处理机
进程正常终止
运行过程中发生异常而终止
进程主动请求阻塞
当前运行的进程被动的放弃处理机
分配的时间片用完
有更紧急的任务需要处理
有更高优先级的进程进入就绪队列