操作系统
1、操作系统引论
操作系统发展与分类
批处理
- 主要缺点:缺少交互性
多道程序设计技术
- 提高系统利用率和吞吐量
分时系统
- 交互功能
实时系统
- 及时响应
操作系统接口
- 命令接口
- 图形接口
- 键盘、鼠标命令等
- 命令行解释程序、shell文件
- 程序接口
- 提供系统调用
- 给运行应用程序访问操作系统资源
系统调用
- 应用程序同系统之间的接口
- 由内核提供,运行在核心态
- 用系统调用进入核心态,Linux对硬件操作只能在核心态,通过写驱动程序来控制,在用户态操作硬件会造成core dump
- 如
- read()、write()、open()、fopen()
- 主意区别一般函数(运行在用户态):sin()、cos()
内核态
- 又称为管态
- 此时处理器处于特权级别最高的(0级)内核代码中执行
- 执行的代码会使用当前进程的内核栈
- 访管指令与访管中断
- 用户在用户态下访问管态(内核态)的指令叫访管指令,
- 产生的中断叫做:访管中断,
- 可以将操作系统转换为核心态
用户态
-
又称目态
-
此时处理器处于特权级别最低的(3级)用户代码中执行
-
执行用户程序时引起的中断属于CPU中断
-
执行的指令
- trap指令(负责由用户态转换到内核态)
- 跳转指令
- 压栈指令
中断处理
系统发生中断转入中断处理程序,处理完之后返回到发生中断时的指令处继续执行
处理时CPU有可能切换状态(如果是核心态发生中断,则始终为核心态,无需切换)
因此中断返回需要还原现场(当时的程序状态,包括处理器信息)——>利用程序状态字寄存器
程序状态字寄存器PSW(Program Status Word):
- 用于记录当前处理器的状态和控制指令的执行顺序,
- 并且保留指示与运行程序有关的各种信息
- 主要作用是实现程序状态的保护和恢复
故中断处理时需要将PSW压栈保存
相对的,子程序调用也需压栈保护现场,主要更新寄存器、保存局部参数信息,并不需要将PSW压栈
外部中断处理,PSW由中断隐指令自动保存
另外通用寄存器的内容由操作系统保存
- 必须在核心态下执行
- 操作系统程序:进入了中断处理并在核心态运行的程序
- 如
- 输入/输出指令
- 内核态和用户态切换
- 缺页处理
- 时钟中断
- 进程调度、进程切换
特权指令
- 必须在核心态下执行,也可以说成只允许管态下运行的指令
- 在目态下对特权指令的使用会实现从目态到管态的改变,即产生访管中断
- 如
- I/O设备
- 访问程序状态的指令,如对程序状态字(PSW)的指令
- 存取特殊寄存器指令,如存取中断寄存器、时钟寄存器等指令
- 清内存、
- 置时钟、
- 分配系统资源、
- 修改虚存的段表或页表、
- 修改用户的访问权限
异常
- 也称为内中断、例外或陷入(trap)
- 地址非法
- 校验错
- 页面失效
- 非法指令
- 用户程序执行特权指令自行中断(INT)
- 除数为零
- 内中断不能被屏蔽
- 源自CPU执行指令内部的事件
- 程序的非法操作码、
- 地址越界、
- 算术溢出、
- 虚存系统的缺页
- 以及专门的陷入指令引起的事件。
微内核结构
- 不能提高操作系统的运行效率
开机启动
- 首先启动存于主板上ROM中的BIOS程序
- 其次由BIOS调用硬盘中的操作系统
- 将操作系统的程序加载到内存的系统区RAM
进程
状态
-
响应比
响应比 = ( 等待时间 + 执行时间 ) / 执行时间
-
周转时间
作业周转时间 = 作业完成时间 - 作业提交时间
-
带权周转时间
文件
读取一个文件
open
打开文件- 参数
- 文件的路径名
- 文件名
read
读取文件- 参数
- 文件描述符 fd (由open操作返回的文件描述符)
- buf 缓冲区首址
- 传送的字节数 n
文件目录项——FCB
包含
- 文件基本信息
- 存取控制信息
- 使用信息
硬链接
符号链接
逻辑结构
无结构文件
流式文件:文件内部数据是一系列二进制流或字符流
- txt文件
有结构文件
记录式文件 :一组相似记录,每条记录包含若干数据项
- 定长记录
- 可变长记录
1. 顺序文件
- 逻辑上:文件记录顺序排列
- 物理上:顺序存储或链式存储
2. 索引文件
索引表 :是定长记录的顺序文件
假定每个记录前用一个字节指明该记录长度,则有
-
对于定长记录文件
-
查找第 i 个记录
-
第一个记录的地址:
-
-
对于可变长记录文件
- 查找第 i 个记录
- 必须顺序查找前 i - 1个记录,从而获得相应记录的长度
- 第 i 个记录的首址:
3. 索引顺序文件
- 顺序 + 索引
- 将顺序文件分组
- 为顺序文件建立一张索引表
- 索引表中为每组中第一个记录建立一个索引项
- 索引项包含该记录的关键字值和指向该记录的指针
-
对于含有N个记录的顺序文件
- 查找某关键字值的记录时
- 平均查找N/2次
-
对于索引顺序文件
- N个记录分为组
- 索引表中个表项
- 每组个记录
- 查找时
- 先顺序查找索引表, 次
- 再在对应组中顺序查找, 次
- 总共查找: + = 次
-
多级索引组织方式计算题
物理结构(文件分配方式)
连续分配
- 连续分配即每个文件在磁盘上占有一组连续的块
- 逻辑块号
- 物理块号 = 起始块号 + 逻辑块号
- 优点
- 支持顺序访问和直接访问(随机访问)
- 连续分配的文件在顺序读/写时速度最快
- 缺点
-
不方便拓展
-
存储利用率低
-
会产生磁盘碎片
-
链接分配
离散分配方式
-
隐式链接
- 只支持顺序访问,不支持直接访问(随机访问)
- 方便拓展、外存利用率高、没有碎片问题
-
显式链接
显式放在表中FAT, File Allocation Table
- 逻辑块号转换成物理块号过程不需要读磁盘操作,访问效率高
- 支持顺序访问和直接访问(随机访问)
- 但文件分配表占用一定存储空间
索引分配
- 离散分配
- 为每个文件建立一张索引表
- 索引表记录文件逻辑块对应的物理块
- 索引块:索引表存放的磁盘块
- 数据块:文件数据存放的磁盘块
-
支持随机访问
-
容易实现拓展
-
但索引表占用存储空间
-
文件太大,索引表太多解决方案:
-
链接方案
-
多层索引
k层索引,顶级索引表未调入内存,访问一个数据块需要k+1次读磁盘操作
-
混合索引
直接地址索引+一级间接索引+两级间接索引
-
文件的磁盘管理
存储空间管理
1. 空闲表法
适用于连续分配方式
分配连续的存储空间
可采用首次适应、最佳适应、最坏适应等算法
回收时需要注意表项的合并问题
第一个空闲盘块号 | 空闲盘块数 |
---|---|
0 | 2 |
4 | 6 |
12 | 1 |
2. 空闲链表法
-
空闲盘块链
- 系统保存
链头
、链尾指针
- 适用于离散分配的物理结构
- 系统保存
-
空闲盘区链
- 系统保存
链头
、链尾指针
- 离散分配、连续分配都适用
- 为一个文件分配多个盘块时效率更高
- 系统保存
3. 位视图法
要注意题目条件:盘块号、字号、位号到底是从0开始还是从1开始
当盘块号、字号、位号从0开始, n表示字长的时候有:
盘块号与字号、位号相互转换的公式
(字号,位号) = ( i , j ) 的二进制位对应的 盘块号 b = ni + j
b 号盘块对应的字号 i = b / n
b 号盘块对应的位号 j = b % n
4. 成组链接法
- 文件目录区一个超级块
- UNIX系统中采用的是成组链接法
- 大型文件系统
磁盘
默认内容
磁盘容量单位
-
1B = 8bit (1 byte =8 bits)
-
1MB = KB
-
1GB = KB
-
1GB = B
1GB=1024MB = MB
1MB=1024KB = KB
1KB=1024Byte = B注:Byte就是B也就是字节
KB是千字节
MB是兆
GB是吉字节 即千兆
TB是太字节
本文作者:Hecto
本文链接:https://www.cnblogs.com/tow1/p/14232059.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步