目录
操作系统概述
五大基本功能:
- 进程/线程管理
- 存储管理
- 文件管理
- 设备管理
- 用户接口
操作系统的三个作用:
- 资源的管理者
- 向用户提供各种服务
- 对硬件机器的扩展
操作系统的特征:
- 并发:指处理多个同时性的活动
- 共享:操作系统与多个用户的程序共同使用计算机系统中的资源
- 虚拟:一个物理实体映射为若干个对应的逻辑实体-分时或分空间,可提高资源的利用率
- 随机:操作系统必须随时对以不可预测的次序发生的事件进行响应并处理
操作系统运行环境与运行机制
操作系统运行环境:CPU状态;中断/异常机制
操作系统的运行机制:系统调用
CPU状态
处理器由运算器、控制器、一系列的寄存器及高速缓存构成。
操作系统CPU的两种状态:
内核态:运行操作系统程序(特权指令)
用户态:运行用户程序(非特权指令)
特权指令:启动IO、内存清零、修改程序状态字(切换用户态内核态)、设置时钟、允许/禁止中断、停机
非特权指令:控制转移、算术运算、访管指令、取数指令
用户态->内核态 :中断/异常/陷入机制
内核态->用户态 :设置程序状态字
一条特殊的指令:陷入指令(又称访管指令):提供给用户程序的接口,用于调用操作系统的功能(服务)。例如:int,trap,syscall,sysenter/sysexit
中断/异常机制
CPU对系统发生的某个事件作出的一种反应,操作系统是由“中断驱动”或者“事件驱动”。
事件:
中断:外部事件,正在运行的程序所不期望的
异常:由正在执行的指令引发
中断/异常机制的工作原理
系统调用
用户在编程时可以调用的操作系统功能。系统调用是操作系统提供给编程人员的唯一接口,使CPU从用户态陷入内核态
每个操作系统都提供几百种系统调用:进程控制、进程通信、文件使用、目录操作、设备管理、信息维护)
系统调用/库函数/API函数/内核函数
进程/线程模型
进程
进程是具有独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的独立单位。
- 程序的一次执行过程
- 是正在运行程序的抽象
- 将一个CPU变换成多个虚拟CPU
- 系统资源以进程为单位分配,如内存、文件。。。每个具有独立的地址空间
- 操作系统将CPU调度给需要的进程
进程控制块PCB:操作系统用于管理控制进程的一个专门数据结构,记录进程的各种属性,描述进程的动态变化过程。PCB是系统感知进程存在的唯一标识。进程与PCB一一对应。
进程表:所有进程的PCB集合。
进程的三种基本状态
运行态:占有CPU,并在CPU上运行
就绪态:已经具备运行条件,但由于没有空闲CPU,而暂时不能运行
等待态:因等待某一事件而暂时不能运行(如:等待读盘结束)(阻塞态,封锁太,睡眠态)
就绪-》运行:调度程序选择一个新的程序运行(被选中获得时间片)
运行-》就绪:运行程序用完时间片;一个高优先级进程进入就绪态,抢占正在运行的进程
运行-》等待:当进程等待某个事件(请求os服务,等待IO,等待另一进程提供信息,对资源的访问尚不能进行)
等待-》就绪:所等待的事件发生了。
其它状态:
创建态:已完成创建一进程所必要的工作(PID,PCB),但尚未同一执行该进程(因为资源有限)
终止态:终止执行后,进程进入改状态;可完成一些数据统计工作;资源回收
挂起:用于调节负载;进程不占内存空间,其进程映像交换到磁盘上。
进程队列:
进程控制:进程控制操作完成各进程状态之间的转换,由具有特定功能的原语完成。(原语:原子操作)
- 进程创建
- 进程的撤销
- 进程阻塞
UNIX的几个进程控制操作:(系统调用的形式呈现给用户程序,由用户程序来进行调用)
- fork():通过复制调用进程来建立新的进程,是最基本的进程建立过程
- exec():用一段新的程序代码覆盖原来的地址空间,实现进程执行代码的转换
- wait():提供初级进程同步操作,能使一个进程等待另外一个进程的结束
- exit():用来终止一个进程的运行
linux,不再复制到子进程,而是将子进程的指针指向父进程,需要修改的时候分配资源,写时复制。
深入探讨进程:
进程的分类:1)系统进程|用户进程;2)前台进程|后台进程;3)CPU密集型进程|I/O密集型进程
线程
进程的两个基本属性:资源的拥有者,CPU调度单位
线程:进程种的一个运行实体,是CPU的调度单位,有时将线程称为轻量级进程。
线程属性:1):有标识符ID;2)有状态及状态转换-》需要提供一些操作;3)不运行时需要保存的上下文。有上下文环境:程序计数器等寄存器;4)有自己的栈和栈指针;5)共享所在进程的地址空间和其它资源;6)可以创建、撤销另一个线程
线程的实现:1)用户级线程;2)核心级线程;3)混合-两者结合方法
第四章 处理器调度(CPU调度)
CPU调度:其任务是控制、协调进程对CPU的竞争。即按一定的调度算法从就绪队列种选择一个进程,把CPU的使用权交给被选中的进程。如果没有就绪进程,CPI会安排一个系统空闲进程或idle进程。
CPU调度要解决的三个问题:
- 调度算法
- 调度时机
- 调度过程
CPU调度时机
- 进程正常终止 或 由某种错误而终止
- 新进程创建 或 一个等待进程变成就绪
- 当一个进程从运行态进入等待态
- 当一个进程从运行态变为就绪态
内核对中断/异常/系统调用处理后返回到用户态时
调度过程
进程调度程序从就绪队列选择了要运行的程序:这个程序可能是刚刚被暂停执行的进程,也可能是另一个新的进程。(如果是新进程,要发生进程切换)
进程切换:是指一个进程让出处理器,由另一个进程占用处理器的过程
上下文切换开销:
- 直接开销:内核完成上下文切换所用的CPU时间(保存和恢复寄存器;切换地址空间(相关指令比较昂贵))
- 间接开销:高速缓存、缓冲区缓存和TLB失效
CPU调度算法
调度算法衡量指标:
- 吞吐量:每单位时间完成的进程数目
- 周转时间:每个进程从提出请求到运行完成的时间
- 响应时间:从提出强求到第一次回应的时间
- CPU利用率:CPU有效工作的时间
- 等待时间:每个进程在就绪队列种等待的时间
几个要点:
- PCB需要记录哪些与CPU调度相关的信息
- 进程优先级及就绪队列的组织
- I/O密集型与CPU密集型进程
- 时间片
批处理系统追求:吞吐量;周转时间;CPU利用率;公平;平衡
先来先服务(FCFS):按照进程就绪的先后顺序使用CPU
最短作业优先(SJF):具有最短完成时间的进程优先执行
最短剩余时间优先(SRTN):SJF抢占式版本,当一个新就绪的进程比当前进程具有更短的完成时间时,系统抢占当前进程,选择就绪的进程执行。
最高响应比优先(HRRN):调度时,首先计算每个进程的响应比R,之后总是选择R最高的进程执行。
交互式系统:追求响应时间;公平;平衡
轮转调度(Round Robin):时间片轮转的调度算法。
目标:为短任务改善平均响应时间。
解决问题的思路:周期性切换;每个进程分配一个时间片;时钟中断(轮换)
如何选择合适的时间片:太长-大于典型的交互时间(降低为先来先服务算法;延长某些进程的响应时间);太短-小于典型的交互时间(进程切换浪费CPU时间)。典型10ms-100ms之间。
优点:有利于交互式计算,响应时间块
缺点:由于进程切换,时间片轮转算法要花费较高的开销
对大小不同的进程有利
虚拟轮转法:IO型从等待进入就绪进入辅助队列,优先从辅助队列种选进程
最高优先级调度(HPF):选择优先级最高的进程投入运行
系统进程优先级高于用户进程
前台进程优先级高于后台进程
操作系统更偏好IO型进程
优先级可以是静态不变的,也可以动态调整。
就绪队列按照优先级来组织
优先级低产生饥饿现象
多级反馈队列(MFQ):
设置多个就绪队列,第一级队列优先级最高
给不同就绪队列中的进程分配长度不同的时间片,第一级就绪队列时间片最小;随着队列优先级别的降低,时间片增大
当第一级队列为空时,在第二级队列调度,以此类推
各级队列按照时间片轮转方式进行调度。
当一个新创建进程就绪后,放入第一级队列
进程用完时间片而放弃CPU,进入下一级就绪队列
由于阻塞而放弃CPU的进程进入响应的等待队列,一旦等待的时间发生,该进程回到原来一级就绪队列。
若允许抢占:高优先级抢占,原来的回到就绪队列队尾。
最短进程优先(SPN):和最短作业优先差不多
多处理器调度算法需要考虑的问题
- 决定选择哪一个进程执行,还要决定进程在哪一个CPU上执行
- 要考虑进程在多个CPU之间迁移时的效率(高速缓存失效、TLB失效;尽可能使进程总是在同一个CPU上执行)
- 考虑负载均衡问题
典型操作系统的调度算法
Linux抢占式调度
CFS完全公平调度算法
Windows基于优先级的抢占式多任务调度
调度单位是线程。
采用基于动态优先级、抢占式调度、结合时间配额的调整
第五章 同步互斥执行
进程互斥
临界资源:系统中某些资源一次只允许一个进程使用,称这样的资源为临界资源或互斥资源或共享变量。
临界区:各个进程对某个临界资源实施操作的程序片段
实现进程互斥的方案
软件方案:Dekker解法、Peterson解法
硬件方案:屏蔽中断、TSL(SCHG)指令
软件方案1
加锁解锁设计成原语
软件方案2
软件解法3
Dekker算法
在3基础上引入turn变量
Peterson算法
硬件方案1-中断屏蔽方法
硬件方案2-TSL(SCHG)指令(测试并加锁)
TSL指令:TEST AND SET LOCK
硬件方案3-交换指令
XCHG指令:EXCHANGE
进程同步
指系统中多个进程中发生的事件存在某种时序关系,需要相互合作,共同完成一项任务。
具体地说,一个进程运行到某一点时,要求另一伙伴进程为它提供信息,在未获得消息之前,该进程进入阻塞状态,获得消息后被唤醒进入就绪状态。
一种经典的进程同步机制-信号量及P、V操作
第六章 同步互斥机制2-进程通信机制
管程
进程与管程:进程只能通过调用管程中的过程来间接的访问管程中的数据结构
作为一种同步机制,管程要解决两个问题
HOARE管程
MESA管程
PTHREAD(线程库)中的同步机制
进程间通信
信号量和管程的不足;不适用于多处理器情况
进程通信机制:消息传递-》send&receive原语
消息传递
共享内存
管道
套接字
远程过程调用
典型操作系统的IPC机制
第7章 存储模型
基本概念
进程地址空间装载到内存中
进程中的地址不是最终的物理地址
在进程运行前无法计算出物理地址
地址重定位:进程地址-》物理地址的转换
物理内存管理
内存分配算法
内存回收
伙伴系统
linux底层内存管理采用
基本内存管理方案1
整个进程进入内存中一片连续区域
单一连续区域;固定分区;可变分区
基本内存管理方案2
一个进程进入内存中若干不连续的区域
页式;段式;段页式
页式存储管理方案
逻辑地址:页号|页内地址
页表记录逻辑地址到物理地址的映射
产生内碎片
段式存储管理方案
段页式存储管理方式
交换技术
如何解决在较小的内存空间运行较大的进程呢?
内存“扩充”技术
覆盖技术
交换技术
第8章 虚拟存储技术
虚拟存储技术
以CPU时间和磁盘空间换取昂贵的内存空间,这是操作系统中的资源转换技术。
页表及页表项的设计
通常,页表项是硬件设计的。
地址转换过程及TLB引入
MMU:内存管理单元
TLB-Translation Look-aside Buffers
页错误
地址转换过程中硬件产生异常
具体原因:
- 所访问的虚拟页面没有调入物理内存(缺页异常)
- 页面访问违反权限
- 错误的访问地址
软件相关策略
驻留集
置换问题
清除策略
页面置换算法
最佳页面置换算法
先进先出算法
第二次机会算法
时钟算法
没有第二次机会算法摘链挂链操作,效率更高
最近未使用算法
最近最少使用算法(LRU)
开销大
最不经常使用算法(NFU)
老化算法
工作集算法
其它相关技术
第12章 死锁
死锁的基本概念
资源分配图
死锁预防
- 破坏“互斥使用/资源独占”条件
资源转换技术:把独占资源变为共享资源
- 破坏“占有且等待”条件
- 破坏“不可抢占”条件
- 破坏”循环等待“条件
死锁避免
银行家算法
死锁检测与解除
哲学家就餐问题
- 第一种用信号量实现
- 第二种用管程实现
- 每个哲学家都拿到了右边的筷子,都在等待左边的筷子
- 某个哲学家放下一只筷子
- 根据银行家算法,最后一支筷子只能分配给已经拿到筷子的哲学家
- 只能同时拿到两只筷子的时候才去拿;资源有序分配法(先申请编号小的再申请编号大的资源)