第一章 计算机系统概述
计算机系统概述
计算机系统视图
软件开发的不同层次
- 计算机硬件系统:机器语言
- 操作系统之资源管理:机器语言+广义指令(扩充了硬件资源管理)
- 操作系统之文件系统:机器语言+系统调用(扩充了信息资源管理)
- 数据库管理系统:数据库语言(扩充了功能更强的信息资源管理)
- 语言处理程序:面向问题的语言
计算机程序的执行过程
操作系统结构分类
- 单体式结构
- 层次式结构
- 虚拟机结构
- 微内核结构
- 客户/服务器结构
特权指令和处理器状态
- 从资源管理和控制程序执行的角度出发,必须设置特权指令,提供给操作系统的核心程序使用
- 处理器状态
- 管理状态(特权状态、系统模式、特态或管态):处理器可以执行全部指令,使用所有资源,并具有改变处理器状态的能力
- 用户态(目标状态、用户模式、常态或目态):处理器只能执行非特权指令
中断与指令周期
自愿性中断事件处理
-
用户程序执行系统调用(访管指令、广义指令)
-
操作系统把系统调用参数作为中断字,分析检查后进行相应处理
第二章 处理器管理
状态模型
三状态模型及其转换
虚拟内存中的用户进程
- 线程是进程的组成部分,每个进程内允许包含多个并发执行的实体(控制流)
- 线程作为处理器调度和分派的一级单位
- 线程的状态(运行态、就绪态、阻塞态)
线程组成
- 线程唯一标识符及线程状态信息
- 未运行时保存线程的上下文,可把线程看成是进程中一个独立的程序计数器在操作
- 核心栈,核心态下工作时,保存参数
- 用于存放线程局部变量及用户栈的私有存储区
并发多线程程序设计的优点
- 快速线程切换
- 减少(系统)管理开销
- (线程)通信易于实现
- 便于共享资源
- 并行程度提高
用户级线程 vs. 内核级线程
第三章 存储管理
寻址、分段与分页
寻址
进程在寻址方面的需求
地址转换与存储保护
程序的编译、链接、装入和执行
程序的用户视图
分段的重定位
分页的重定位
请求分页虚存地址转换过程
多级页表
背景
现代计算机普遍支持 2 32 2^{32} 232~ 2 64 2^{64} 264容量的逻辑地址空间,采用分页存储管理时,页表相当大。以Windows为例,其运行的Intel x86平台具有32位地址,规定页面4KB( 2 12 2^{12} 212)时,那么4GB的逻辑地址空间由 2 20 2^{20} 220个页组成,若每个页表项占用4个字节,则需要占用4MB连续主存空间存放页表。系统中有许多进程,因此页表存储开销很大
概念
- 系统为每个进程建一张页目录表,它的每个表项对应一个页表页,而页表页的每个表项给出了页面和页框的对应关系,页目录表是一级页表,页表页是二级页表
- 逻辑地址由三部分组成:页目录、页表页和位移
两级页表
注(个人理解,不喜勿喷,欢迎指教hhh)
Clock算法看上去和SCR算法很像,但它们还是有区别的,其中一点区别在于:clock算法做得是循环扫描,淘汰的是下一个遇到的使用位为0的页;而SCR算法是FIFO算法的改进版,淘汰的是最先进入的访问位为0的页。
改进型的Clock算法
改进型的Clock算法需要综合考虑某一内存页面的访问位和修改位来判断是否置换该页面
设访问位为A、修改位为M
1类(A=0,M=0):表示该页最近既未被访问、又未被修改,是最佳淘汰页。
2类(A=0,M=1):表示该页最近未被访问,但已被修改,并不是很好的淘汰页。
3类(A=1,M=0):最近已被访问,但未被修改,该页有可能再被访问。
4类(A=1,M=1):最近已被访问且被修改,该页有可能再被访问。
算法描述
- 从指针所指示的当前位置开始,扫描循环队列,寻找A=0且M=0的第一类页面,将所遇到的第一个页面作为所选中的淘汰页。在第一次扫描期间不改变访问位A。
- 如果第一步失败,即查找一周后未遇到第一类页面,则开始第二轮扫描,寻找A=0且M=1的第二类页面,将所遇到的第一个这类页面作为淘汰页。在第二轮扫描期间,将所有经过的页面的访问位置0。
- 如果第二步也失败,即未找到第二类页面,则将指针返回到开始的位置,并将所有的访问位复0。(此时已无3类、4类页框)然后,重复第一步,如果仍失败,必要时再重复第二步,此时就一定能够找到被淘汰的页。
流程图
第四章 设备管理
I/O控制方式
- 程序控制I/O(轮询方式)
- 处理器代表给I/O模块发送一个I/O命令,该进程进入忙式等待(busy-waiting),等待操作的完成,然后才可以继续操作
- 中断驱动I/O
- 处理器代表进程向I/O模块发出一个I/O命令,然后继续执行后续指令,当I/O模块完成工作后,处理器被该模块中断
- 如果该进程不需要等待I/O模块完成,则后续指令可以仍是该进程的指令;否则,该进程在这个中断上挂起,处理器执行其他工作
- 直接存储器访问(DMA)
- 一个DMA模块控制主存和I/O模块之间的数据交换。为传送一块数据,处理器给DMA模块发请求,只有当整个数据块传送结束后,处理器才被中断
-
磁盘调度策略
扫描(SCAN)
- 要求磁头臂仅仅沿一个方向移动,并在途中满足所有未完成的请求,直到它达到这个方向上的最后一个磁道或者在这个方向上没有其他请求为止(后一种改进有时候称为LOOK策略)
- 接着反转服务反向,沿着相反方向扫描,同样按顺序完成所有请求
虚拟设备
- 使用一类物理设备模拟另一类物理设备的技术
- 通常是使用共享型外围设备模拟独占型外围设备
- 脱机同时外围设备操作
SPOOLing
- “井”是用作缓冲的存储区域,采用井的技术能调节供求之间的矛盾,消除人工干预带来的损失
- “预输入程序”
- 操作系统将一批作业从输入设备上预先输入到磁盘的输入缓冲区中暂时保存,这称为“预输入”,此后,由作业调度程序调度作业执行,作业使用数据时不必再启动输入设备,只要从磁盘的输入缓冲区中读入
- “缓输出程序”
- 作业执行中不必直接启动输出设备,只要将作业的输出数据暂时保存到磁盘的输出缓冲区,当作业执行完毕后,由操作系统组织信息成批输出
- “井管理程序”
I/O系统各层软件及其功能
索引
文件系统内部结构
文件系统调用
文件的创建
文件创建执行过程
- 为新文件分配索引节点和活动索引节点,并把索引节点编 与文件分量名组成新目录项,记到目录中
- 在新文件所对应的活动索引节点中置初值,如置存取权限i_mode,连接计数i_link等
- 分配用户打开文件表项和系统打开文件表项,表项初值、读写位移f_offset清“0”
- 把各表项及文件对应的活动索引节点用指针连接起来,把文件描述字返回给调用者
文件的删除
- 删除把指定文件从所在的目录文件中除去
- 如果没有连接用户(i_link为“1”),还要把文件占用的存储空间释放。删除系统调用形式为:unlink(filenamep)
文件的打开
文件打开执行过程
- 检索目录,把它的外存索引节点复制到活动索引节点表
- 根据参数mode核对权限,如果非法,则这次打开失败
- 当“打开”合法时,为文件分配用户打开文件表项和系统打开文件表项,并为表项设置初值。通过指针建立这些表项与活动索引节点间的联系。把文件描述字,即用户打开文件表中相应文件表项的序 返回给调用者。
文件的关闭
// C语言格式int fd;close(fd);
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!