操作系统概述
概念
操作系统(Operating System, OS)是指控制和管理整个计算机系统的硬件与软件资源,合理地组织、调度计算机的工作与资源的分配,进而为用户和其他软件提供方便接口与环境的程序集合。
特征(并发、共享、虚拟和异步)
并发和共享是操作系统两个最基本的特征(互为存在条件)
操作系统的虚拟技术可归纳为:
- 时分复用技术(如处理器的分时共享);
- 空分复用技术(如虚拟存储器)
目标和功能
- 计算机系统资源的管理者
- 处理机管理(可以归结为进程管理,包括进程控制、进程同步、进程通信、死锁处理、处理机调度等)
- 存储器管理(主要包括内存分配、地址映射、内存保护与共享和内存扩充等)
- 文件管理(包括文件存储空间的管理、目录管理及文件读写管理和保护等)
- 设备管理(主要包括缓冲管理、设备分配、设备处理和虚拟设备等)
- 用户与计算机系统之间的接口
- 命令接口(联机控制方式和脱机控制方式,联机是交互式的,脱机是批处理的)
- 程序接口(由一组系统调用组成)
- 图形接口GUI,GUI最终是通过调用程序接口实现的。
- 扩充机器
系统调用提供的服务
- 进程的创建与管理
- 主存管理
- 文件访问,目录和文件系统管理
- 设备处理(I/O)
- 保护(例如, chmod(), umask(), chown() )
- 网络
- 等
系统调用的类型
- 进程控制:end,abort,terminate,allocate,free memory(例如,fork(), exit(), wait())
- 文件控制:create,open,close,delete,read file etc(例如,open(), read(), write(), close())
- 设备控制(例如,ioctl(), read(), write())
- 信息维护(例如,getpid(), alarm(), sleep())
- 通信(pipe(), shmget(), mmap() )
主要关注前一个,接口和扩充机器只需要有个印象。
发展分类
- 手工操作阶段
- 批处理(单道和多道,多道宏观上并行、微观上串行)
- 分时(同时性、交互性、独立性、及时性)
- 实时(硬实时、软实时)
- 网络和分布式(网络操作系统的特点是网络中各种资源的共享及各台计算机之间的通信,分布式操作系统中的若干计算机相互协同完成统一任务)
- 个人操作系统(Windows、Linux、Macintosh)
另外还有嵌入式操作系统、服务器操作系统、多处理器操作系统等
运行机制
- 操作系统内核程序(管态、内核态,一些与硬件关联较紧密的模块处于最低层,如时钟管理、中断处理、设备驱动等,其次是运行频率较高的程序,如进程管理、存储器管理和设备管理等)
- 用户自编程序(目态)
内核
- 时钟管理
- 中断机制
- 原语
- 系统控制的数据结构及处理(进程管理、存储器管理、设备管理)
用户态进入核心态的途径
- 中断(Interruption, 也称外中断)
- 异常(Exception,也称内中断或陷入trap)
系统调用
- 设备管理
- 文件管理
- 进程控制
- 进程通信
- 内存管理
访管指令不是特权指令
体系结构
大内核、微内核、库操作系统
疑难点
并行:同一时刻
并发:同一时间间隔
访管指令本身不是特权指令,可以引起访管中断,
库函数可能会使用系统调用来实现功能
批处理操作系统的用户脱机使用计算机,作业是成批处理的,系统内多道程序并发执行,交互能力差。
分时操作系统交互性强,系统响应及时。
实时操作系统可靠性高,但资源利用率低。
画甘特图
CPU利用率=CPU时间/总时间
用户态到核心态的转换发生在中断产生时,而核心态到用户态的转换发生在中断返回用户程序时。
通道技术和终端技术结合起来就可以实现CPU与I/O设备并行工作
进程管理
进程线程
引入进程的概念,是为了更好地描述和控制程序的并发执行,实现操作系统的并发性和共享性。
由程序段、相关数据和进程控制块(Process Control Block, PCB)三部分构成了进程映像(进程实体)。
创建进程实质上是创建进程映像中的PCB;而撤销进程,实质上是撤销进程的PCB。
进程映像是静态的,进程则是动态的。
进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。
进程的特征
- 动态性(创建、活动、暂停、终止)
- 并发性
- 独立性
- 异步性(异步会导致执行结果的不可再现性,为此在操作系统中必须配置相应的进程同步机制)
- 结构性(程序段、数据段、进程控制段)
进程的状态与转换
- 运行态
- 就绪态
- 阻塞态
- 创建态
- 结束态
一个进程从运行态变成阻塞态是主动的行为,而从阻塞态变成就绪态是被动的行为。
进程控制
一般把进程控制用的程序段称为原语,原语执行期间不可中断。
进程的创建
- 为进程分配一个唯一的进程标识号,申请一个空白的PCB
- 为进程分配资源
- 初始化PCB
- 将进程插入就绪队列
进程的终止
- 根据被终止进程的标识符,检索PCB,从中读出该进程的状态
- 若被终止的进程处于执行状态,则立即终止该进程的执行,将处理机资源分配给其他进程。
- 若该进程还有子进程,则将所有子进程终止
- 将该进程所有资源归还给父进程或者操作系统
- 将该PCB从所在队列(链表)中删除。
进程的阻塞和唤醒
- 找到将要被阻塞进程的标识号对应的PCB
- 若该进程为运行态,则保护其现场,将其状态转为阻塞态,停止运行。
- 将该PCB插入相应事件的等待队列。
唤醒
- 在该事件的等待队列中找到相应进程的PCB
- 将其从等待队列中移出,并置其状态为就绪态
- 把该PCB插入就绪队列,等待调度程序调度
进程切换
- 保存处理机上下文,包括程序计数器和其他寄存器
- 更新PCB信息
- 把进程的PCB移入相应的队列,如就绪、在某事件阻塞队列
- 选择另一个进程执行,并更新其PCB
- 更新内存管理的数据结构
- 恢复处理机上下文
先有资源的调度,后有进程的切换。
进程通信
PV操作是低级通信方式
高级通信主要有三类
- 共享存储(操作系统为通信进程提供可共享使用的存储空间和同步互斥工具)
- 消息传递(直接通信方式:发送消息挂在接受进程的消息缓冲队列上;间接通信方式:通过中间实体——信箱)
- 管道通信(互斥、同步和确定对方存在,本质上管道也是一种文件,管道的大小也有限,半双工通信)
线程
线程最直接的理解就是“轻量级进程”,它是一个基本的CPU执行单元,也是程序执行流的最小单元,由线程ID、程序计数器、寄存器集合和堆栈组成。
不同的线程可以执行相同的程序,即同一个服务程序被不同的用户调用时,操作系统把它们创建成不同的线程。
有了线程,线程切换时,有可能会发生进程切换,也有可能不发生进程切换,平均而言每次切换所需的开销就变小了,故有利于提高系统的并发性。
- 用户级线程(ULT)(有关线程管理的所有工作都由应用程序完成,内核意识不到线程的存在)
- 内核级线程(KLT)
有些系统中使用组合方式的多线程实现。
多线程模型
- 多对一模型
- 一对一模型
- 多对多模型
概念、状态转换、控制、组织和通信
处理机
调度的层次
- 作业调度(又称高级调度,每个作业只调入一次、调出一次,多道批处理系统中大多配有作业调度,而其他系统中通常不需要配置作业调度)
- 中级调度(又称内存调度,将暂时不能运行的进程调至外存挂起)
- 进程调度(又称低级调度,最基本,不可或缺)
不能进行进程的调度和切换的情况有以下几种:
- 在处理中断的过程中
- 进程在操作系统内核程序临界区中
- 其他需要完全屏蔽中断的原子操作过程中(在原子操作中,连中段都要屏蔽,更不应该进行进程调度和切换)
进程调度方式
- 非剥夺调度方式(非抢占方式)
- 剥夺调度方式(抢占方式)
调度的基本准则
- CPU利用率
- 系统吞吐量
- 周转时间
- 等待时间
- 响应时间
典型的调度算法
- 先来先服务(FCFS)调度算法
- 短作业优先(SJF)调度算法(长作业可能产生“饥饿”现象)
- 优先级调度算法(非剥夺式优先级调度算法、剥夺式优先级调度算法,静态优先级、动态优先级,一般来说,系统进程>用户进程,交互型进程>非交互型进程,I/O型进程>计算型进程)
- 高响应比优先调度算法(响应比=(等待时间+要求服务时间)/ 要求服务时间)
- 时间片轮转调度算法
- 多级反馈队列调度算法
优先级调度算法适合实时操作系统
高响应比优先调度算法、时间片轮转调度算法、多级反馈队列调度算法适合分时操作系统
概念、时机、方式和准则
先来先服务、短作业优先、时间片轮转、