【期末总结】操作系统

常见题型

进程调度👉甘特图 算平均等待时间
死锁👉银行家算法
分页👉偏移量计算 转物理地址
虚拟内存👉页面置换 画图
磁盘调度👉计算磁头移动距离

复习大纲

第一章 绪论 很多概念重点
第二章 操作系统结构
第三章 进程 调度 操作 进程间通信
第四章 线程 与进程的区别
第五章 CPU调度 重点
第六章 进程同步 重点
第七章 死锁 重点
第八章 内存管理 分页
第九章 虚拟内存 帧 页面置换
第十章 文件系统 访问 目录结构
第十一章 文件系统实现 目录实现 分配
第十二章 大容量存储器结构
第十三章 IO系统

概念总结

1字节 = 1B = 8bit
n位计算机👉字长n位 寻址空间2^n

FAT File Allocation Table 文件分配表
NTFS New Technology File System
Translation Look-aside Buffer 转换表缓冲区
MMU Memory Management Unit
PSW Program Status Word
👉程序状态字
API Application Programming Interface
👉应用程序接口
PCB Process Control Block 进程控制块
PID 进程ID
TID 线程ID
TCB 线程控制块
内核 Kernel
外壳 Shell
系统调用 System Call
库函数调用 Library Function Call

多道程序设计👉CPU总有一个作业执行
定时器👉维持对CPU的控制👉产生强制中断

重要考点

  • 陷阱
    内中断 异常 同步执行 软件产生

引起原因👇出错/用户请求
算术溢出 缓冲区溢出 指令/地址非法
页面失效 访管

  • 中断
    外中断 硬中断 同步执行

引起原因👇
IO中断 定时器中断

软中断👉软件模拟外中断
信号中断 软件中断

  • 特权指令
    双重模式👉内核模式 用户模式
    or 管态 目态

特权指令👉只能在内核模式下执行
访问计算机所有资源

访管指令👉只能在用户模式下执行
用户模式切换到内核模式

常见特权指令👇
读写PSW
访问特殊寄存器
中断管理 内存管理 时钟管理
IO相关指令
停机

非特权指令⚠️
访管指令
DMA传数据指令
改变磁盘空间分配图
写程序计数器 寄存器清零
取指令 取操作数 写内存

看情况👇
清内存 读时钟

  • 系统调用
    OS为用户提供两类接口👇
    命令级接口👉外壳输入指令
    程序级接口👉系统调用

操作系统 = 内核

外壳👉命令解释程序👉命令行/图形用户界面
外壳不属于操作系统

API函数和库函数都转换为系统调用
(前者需涉及系统服务

系统调用👉程序通过API访问
唯一程序接口
系统调用必须切换回内核模式

三种传递参数方式👇
寄存器传递 块传递 堆栈传递

四种结构👇
简单结构 模块化结构
层次结构 微内核结构

  • 进程
    任意时刻只能有一个进程运行
    其他只能处于就绪或等待状态

作业为工作集合 由一个或多个进程组成

PCB👉进程存在的唯一标志

程序段+数据段+PCB👉进程实体

创建进程👉创建PCB
撤销进程👉撤销PCB

运行态 CPU✅其他所需资源✅
就绪态 CPU❌其他所需资源✅
阻塞态 CPU❌其他所需资源❌
创建态
终止态

原语👇
不允许中断👉原子操作
关中断指令👉开中断指令
只能在内核态下用

原语功能👇
更新PCB
将PCB插入合适队列
分配回收资源

上下文切换👉进程切换 保存PCB1 恢复PCB2

进程间通信⚠️
共享内存👉互斥访问
管道👉半双工通信 单向 写满再读 读空再写
消息传递👉直接通信 间接通信

  • 线程
    一个进程👉多个线程👉多段代码

基本的CPU执行单元
程序执行流的最小单位
提升了系统的并发度 开销减小

线程👉调度的基本单位
进程👉资源分配的基本单位
只作为CPU之外的系统资源的分配单元
资源(打印机…)分配给进程

用户级线程👇User-Level Thread ULT
应用程序负责线程管理
用户态下完成切换
“从用户视角能看到的线程” (内核看不到

内核级线程👇KLT
操作系统负责线程管理
内核态下完成切换
“从内核视角看能看到的线程” (都能看到
处理器分配的单位⚠️

多线程模型👇
多对一:开销小 效率高 并发度不高 不能多核
一对一:并发度高 多核 开销大
多对多:两者结合

  • 处理机调度
    三种层次👇
    高级调度 作业调度 外存到内存 从无到有
    中级调度 内存调度 外存到内存 挂起态到就绪态
    低级调度 进程调度 内存到CPU 就绪态到运行态

发生频率由低到高
挂起👉从内存调到外存

  • 进程调度⚠️
    不能进行进程调度和切换的情况
    1⃣️内核程序临界区
    2⃣️处理中断过程中
    3⃣️原子操作中(如修改PCB

在普通、低速临界区可以进行(如打印机

两种方式👇
抢占式
非抢占式

过程👇
保存旧数据 恢复新数据 有代价

CPU利用率👇
忙碌的时间/总时间

系统吞吐量👇
完成作业个数/总时间

周转时间👇
等待调度+就绪时间+执行时间+阻塞时间
作业完成时间 - 作业提交时间

平均(带权)周转时间👇
各作业(带权)周转时间和/作业数量

带权周转时间👇越小越好
作业周转时间/作业实际运行时间

平均等待时间⚠️
平均周转时间-平均执行时间

响应比👇
周转时间/执行时间

调度准则👇
CPU利用率最大化
吞吐量最大化
周转/等待/响应时间最小化

调度算法⚠️
先来先服务FCFS
👉非抢占
👉简单公平 护航效应 平均等待时间T长

最短作业/最短剩余时间优先
👉非抢占SJF 抢占SRTF
👉饥饿 无法准确预测进程时间 T最短

优先级调度
👉抢占 非抢占(添加到队伍头部
👉灵活 易饥饿 低优先级无穷等待
解决👉老化 逐渐提高等着的优先级

轮转调度RR
👉抢占
👉及时响应 响应时间短 不会饥饿

多级反馈队列调度
👉多级队列 多个优先级 多个时间片等级
👉一般为抢占
👉前面的结合

  • 进程同步与互斥⚠️
    同步 解决进程异步性👇
    各并发执行的进程各自独立 无法预知

竞争条件👇
多个进程并发访问同一数据
最终结果与各自访问顺序有关

临界资源👇
一个时间段内只允许一个进程使用(打印机

进入区👉临界区👉退出区👉剩余区

临界区👇
访问临界资源的代码段

四个条件⚠️
互斥(忙则等待)
前进(空则让进)
有限等待(等则有限)
等则让权👉不能进入临界区时释放处理机
👉解决忙等 提高CPU利用率

前三个必须满足 第四个可选

进入区 退出区👇
负责实现互斥的代码段

剩余区👇
做其他处理

软件实现互斥⚠️
Peterson算法👉双标志+单标志+孔融让梨

硬件实现互斥👇
中断屏蔽 TextAndSet Swap指令

信号量机制⚠️
1⃣️进程个数 分析同步互斥关系 从事件的角度
互斥👉mutex
同步👉一前一后
2⃣️整理思路 确定PV顺序
互斥👉在临界区前后分别PV
同步👉前V后P
3⃣️设置信号量 确定初值
4⃣️写各个线程的伪代码

两类题👇
消费者生产者思路
读者学者思路 设count和互斥量

几个典型例题👇
消费者生产者 吃水果 理发师
读者写者 哲学家问题

自旋锁👇
忙等 不释放CPU 一直等待解锁
适合多处理器系统

管程👇
有自己的数据结构和函数
编译器实现互斥 设置变量实现同步
一种高级同步机制

  • 死锁
    死锁👉相互等待资源 各进程阻塞
    两个以上进程 一定阻塞态 管理者问题
    饥饿👉长期得不到想要的资源
    可能一个进程 阻塞/就绪态 管理者问题
    死循环👉跳不出某个循环 代码逻辑错误
    可能一个进程 被管理者问题

四个充要条件⚠️必须同时满足
互斥👉一次只有一个进程使用资源
占有并等待👉至少占有一个资源并等待另一个
非抢占👉不能被抢占
循环等待👉∞ 每类资源不可替代

三种死锁情况👇资源分配
不可剥夺资源竞争(打印机
进程推进顺序非法
信号量使用不当

预防死锁👇静态策略
破坏互斥条件(打印机👉共享打印机
“一般不能否定互斥”
破坏不剥夺条件(不满足就立即释放资源
可能会饥饿 复杂
破坏占有并等待条件(静态分配 一次性服务
资源利用率低 可能会饥饿
破坏循环等待条件(顺序资源分配
资源浪费 麻烦

避免死锁⚠️动态策略
安全序列👉分配资源的序列
安全状态👉一定不会死锁
不安全状态👉可能会死锁

银行家算法🌈
每类资源只有一个实例
假设分配👉更新系统状态👉判断是否安全
银行家算法

死锁检测和解除👇
资源分配图👇
资源分配图

依次资源归还👉消除边 直到无边可消
1⃣️消除所有边👉找到一个安全序列
2⃣️不能消除所有边👉发生死锁👉死锁定理

解除法👉资源剥夺法 撤销进程法 进程回退法

  • 内存管理
    MMU👇CPU里面
    负责逻辑地址到物理地址的转换👉找映射
    三种实现方法👇
    连续内存分配 分页 分段

固定分区👉有内部碎片
动态分区👉有外部碎片

外部碎片⚠️
未分配 未使用的内存
内部碎片⚠️
已分配 未使用的内存

动态分区👉一块可用内存👉孔Hole
分配后更新孔集合

孔的分配算法👇分配后重新排序容量
首次适应 地址递增 开销小
最佳适应 容量递增 外部碎片多 开销大
最差适应/最大适应 容量递减 开销大
邻近适应 地址递增 从上次结束位置开始查找

  • 非连续分配
    1⃣️分页⚠️
    内存👉相等小分区
    进程👉相等小部分

每个小分区👉页框/页帧/内存块/物理块
+页框号/…
每个小部分👉页/页面 + 页号

物理地址=逻辑地址+偏移量
页号=逻辑地址/页面长度(取整
偏移量=逻辑地址%页面长度

逻辑地址的页号👉找到内存中起始地址
👉算出页面中的偏移量👉相加

页面大小👉逻辑地址空间大小
可存4096个逻辑地址 4kb 占12位
逻辑地址长度👉地址一共有多少位 如32位

逻辑地址👉页号+页内偏移量

根据页号👉查页表👉查对应块号👉起始地址
一个进程对应一个页表

内存块数=物理内存大小/页面大小

🚩TLB
访问一个字节需要两次访存
获取页表项+访问数据
解决:TLB 类似cache的工作

TLB命中👉内存块号很快获取
TLB未命中👉对应表项更新到TLB中

2⃣️分段👇
逻辑地址空间👉分成多段

  • 虚拟内存
    逻辑地址空间远远大于物理地址
    将用户逻辑内存和物理内存分离
    匀出硬盘空间👉内存👉装不常用的
    提高系统运行效率

内存有效访问时间EAT👇
p页错误率
EAT

页面置换算法⚠️
页面置换

  • 文件管理
    文件的访问方法👇
    顺序访问
    直接访问/相对访问/随机访问
    索引访问

文件的路径名👇
路径

目录结构👇
目录结构

  • 磁盘
    磁盘的分配方法👇
    连续分配 链接分配 适应分配

磁盘速度👇
磁盘速度

磁盘调度👇
磁盘调度

FCFS 简单 效率低
SSTF 不公平
SCAN 去了又来 双方向 比较公平
C-SCAN 去了又去 回到起始点 单方向
LOOK 不到端点 到最后一个点折返
C-LOOK 不到端点 到最后一个点再回到最小点

  • IO系统
    IO硬件👇
    Polling轮询👉CPU忙等 并发性差 效率低
    中断👉低速外设 键盘鼠标
    DMA👉高速外设 磁盘
    通道👉CPU干预最少
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值