1 操作系统的概念与定义
操作系统的功能和目标
- 系统资源的管理者
- 处理机管理
- 存储器管理
- 文件管理
- 设备管理
- 用户与计算机硬件系统之间的接口
- 命令接口
联机命令接口:交互式的命令接口
脱机命令接口:批处理命令接口(脚本) - 程序接口
=系统调用
- 对硬件机器的拓展
扩充机器
操作系统的特征
1.2最重要,两者相依共存
- 并发
宏观同时发生,微观交替发生
并行:微观也是同时发生 - 共享
互斥共享、同时共享 - 虚拟
基于并发性
虚存(空分复用技术)
虚拟cpu(时分复用技术) - 异步性
操作系统的发展和分类
- 手工操作阶段
缺点:人机速度矛盾 - 单道批处理系统
脱机输入输出技术(磁带),并由监督程序控制作业的输入输出
缺点:内存中只有一道程序运行,有大量时间空闲等待i\o完成 - 多到批处理系统
并发执行需要中断技术的支持
多到程序并发执行,共享计算机资源,提升资源利用率 - 分时操作系统
解决了人机交互问题,用户在自己的时间片解决问题
缺点:没有优先处理,循环处理时间片 - 实时操作系统
能够优先响应一些紧急任务
- 硬实时系统
- 软实时系统
操作系统的运行机制与体系结构
-
两种指令
分为特权指令(如内存清零)和非特权指令 -
两种处理器状态
用户态(目态)
核心态(管态) -
两种程序
应用程序:只能使用非特权指令,运行在用户态
内核程序:操作系统的核心功能,两种指令都能执行 -
操作系统内核
是计算机的底层软件
功能:
- 时钟管理
- 中断处理
- 原语(设备驱动、cpu切换):最接近硬件的部分,这些程序的运行具有原子性,不可中断
- 进程管理,存储器管理,设备管理
包含1,2,3,为微内核:
优点:功能少,结构清晰,方便维护
缺点:频繁在核心态和用户态切换,性能低
1,2,3,4大内核:
优点:高性能
缺点:代码庞大,结构混乱,难以维护
中断和异常
中断:操作系统接入开展管理工作,用户态转到内核态;中断是用户态进入核心态的唯一途径。
- 中断的分类
内中断和外中断:本质区别:信号来源是否来自于cpu内部 - 外中断的处理过程
执行完每个指令,都要检查是否有外部中断信号;
若检测到,保护(存档)cpu环境;
根据中断类型处理相应的程序;
恢复原进程cpu环境并继续往下执行
系统调用
系统调用发生在用户态,对系统的调用发生在核心态
系统调用相关处理需要特权指令,在核心态下执行
操作系统向上提供系统调用
2.进程
进程的定义
进程实体:由程序段、数据段、PCB组成
进程是资源分配、接受调度的基本单位
PCB是进程存在的唯一标志!
- PCB
- 进程表述信息
进程标识符PID,用户标识符UID - 进程控制和管理信息
进程当前状态,进程优先级 - 资源分配清单
程序端指针、数据段指针、键盘、鼠标 - 处理机相关信息
各种寄存器值
-
进程的组织方式
链接方式
索引方式 -
进程的特征
- 动态性:最基本的特征
- 并发性
- 独立性:进程是资源分配、接受调度的基本单位
- 异步性
- 结构性
进程的状态
三种基本状态:
- 运行态
- 就绪态
- 阻塞态
进程控制
进程控制室进程状态的转换
修改的是PCB和类似queue 队列中
用 原语 实现进程控制,执行期间不可被中断
原语要做的事情
- 更新PCB信息
- 将PCB插入合适队列
- 分配回收资源
三种调度
- 高级调度 作业调度
外存与内存之间的调度,每个作业调入一次,调出一次。
从外存按照一定顺序调入内存 - 中级调度 内存调度 引入虚存
提高内存的利用率和系统吞吐量
暂时调到外存称之为 挂起 ,PCB常驻内存
调度决定哪个挂起状态的进程调入内存
挂起是进程映像在外存,阻塞是进程映像在内存 - 低级调度 进程调度
频率很高,内存->CPU,就绪态->运行态
进程调度的时机
需要进程调度 进程主动放弃、被动放弃
- 进程调度的方式
非抢占式、抢占式
调度算法评价指标
- CPU、IO利用率=忙碌时间、总时间
- 系统吞吐量:总共完成多少道作业/总时间
- 周转时间:作业被提交给系统到作业完成为止的时间间隔
- 平均周转时间
- 带权周转时间:作业周转时间(作业完成时间-作业提交时间)/ 作业实际运行时间
- 等待时间:作业:处于等待状态机时间之和,与调入之后等待时间(后备队列-内存)
进程:就绪队列时间 - 相应时间:从用户提出请求到首次响应时间
调度算法
-
先来先服务 FCFS first come first serve
用于进程、作业调度
非抢占式 -
短作业优先 SJF shortest job first
非抢占 选择当前已到达且运行时间最短的作业
会导致饥饿 -
抢占式短作业优先 SRTN 最短剩余时间优先
新进程的剩余时间大于当前剩余时间,就抢占
会导致饥饿 -
高响应比优先 HRRN highest response ratio next
响应比:(等待时间+要求服务时间)/要求服务时间 -
时间片轮转算法 RR round robin
分时操作系统的诞生而诞生
按到达就绪队列的顺序,轮流执行时间片,未执行完成就被剥夺,到最后重新排队
为抢占式算法,由时钟中断来控制 -
优先级调度算法
可用于作业调度也可用于进程调度
抢占式和非抢占式都有
优先级有动态优先级和静态优先级 -
多级反馈队列调度算法
可抢占式
用于进程调度
有多级队列,时间片按队列优先级由小变大,只有k级队列为空的时候,才会为k+1分配时间片
会导致饥饿
进程同步和进程互斥
进程同步用于解决进程异步的问题
对临界资源的访问,必须要互斥访问
- 互斥:分为四个部分,进入区,临界区,退出区,剩余区
对临界资源的互斥访问,要遵循以下的原则 - 空闲让进
- 忙则等待
- 有限等待
- 让权等待
进程互斥的软件实现方法
- 单标志法
每个进程进入临界区的权限只能被另一个进程赋予 - 双标志先检查法
信号量机制
- 整型信号量:
wait(S)、P原语和signal(S)、V原语
int s=1;
void wait(int s){
while(s <=0); //存在忙等的问题
s=s-1;
}
void signal(s){
s=s+1;
- 记录型信号量
class semaphore{
int value;
class process *L;//等待队列,目的式让权等待
}
void wait(semaphore S){
S.value--;
if(S.value <0){
block(S.L);
}
}
void signal (swmaphore S){
s.value++;
if(S.value <=0){
wakeup(s.L);
}
}
用信号量机制实现进程互斥同步和互斥
- 实现进程互斥
定义mutex初值为资源数量
process(){
p(mutex)
临界区代码段
v(mutex)
}
- 实现进程同步
要求:代码3要在代码4之后执行
mutex =0;
p1(){
代码1
v(mutex)
代码2}
p2(){
p(mutex)
代码3
代码4
}