王道操作系统-第三四五章
第三章 内存管理·
3.1.1 内存的基本知识·
内存可存放数据,程序执行前需要先放到内存中才能被CPU处理——缓和CPU和硬盘之间的速度矛盾
在多道程序环境下,系统中会有多个程序并发执行,即会有多个程序需要同时放到内存中,如何区分呢
给内存的存储单元编地址(大小取决于按字节编址8位,按字长编制,可能是16位)
逻辑地址和物理地址对应
每个地址对应存储单元:按字节编址和按字编址(规定)
三种装入方式:
- 绝对装入:编译时就将逻辑地址转化为物理地址,编译器负责地址转换(需要知道装入模块会在内存的哪个位置,单道程序阶段,无操作系统)
- 静态重定位 可重定位装入: 在装入时转换,装入程序负责(必须分配连续全部的内存空间,无法移动位置,早期多道批处理阶段)
- 动态重定位 动态运行时装入:程序运行时转换地址,需要重定位寄存器(存放装入模块存放的初始位置)的支持(现代操作系统)| 感觉方法很容易想到
类似的,三种链接方式:静态链接,装入时动态链接,运行时动态链接
编译:由编译程序将源码编译为若干个目标模块(高级语言翻译为机器语言).c到.o
链接:由链接程序将目标模块及所需的库函数链接到一起,形成一个完整的装入模块/逻辑地址
装入(装载):由装入程序将装入模块装入内存运行;形成物理地址
3.1.2 内存管理的概念·
-
负责内存空间的分配与回收
-
利用技术从逻辑上对内存空间扩充(虚拟性)
-
负责程序的逻辑地址和物理的转换(三种装入方式)
-
内存保护,保证各进程互不干扰,不越界访问(CPU设置上下限寄存器、利用重定位(基址:起始物理地址)寄存器和界地址(限长:最大逻辑地址)寄存器判断)
3.1.3 覆盖与交换·
解决程序大小超过物理内存总和的问题
覆盖:(针对单个进程)解决程序大小超过物理内存总和的问题
程序分为多个段,内存一个固定区(需要常驻内存,调入后不调出)和若干个覆盖区(不常用的段,需要时调入)
覆盖区内存大小位每层的最大内存程序
必须由程序员声明覆盖结构,操作系统完成自动覆盖,对用户不透明,增加用户编程负担;现在已不使用
交换:(多个进程间选择换出哪个)内存空间紧张时,系统将内存中某些进程暂时换出外存,把外存中某些已具备运行条件的进程换入内存(进程在内存和磁盘之间动态调度–中级调度 内存)
磁盘空间分为对换区和文件区:对换区追求速度,空间连续分配;文件区追求存储空间利用率,离散分配
交换通常发生在多进程进行且内存吃紧时,经常发生缺页,则内存紧张,换出一些进程,系统负荷明显降低则停止换出
PCB常驻内存,不换出
虚拟技术以后讲
3.1.4 连续分配管理方式·
连续分配即为用户进程分配的必须是一个连续的内存空间
单一连续分配:只支持单道程序,内存分为系统区和用户区,用户程序放在用户区;无外部碎片,有内部碎片
内部碎片:分配给某进程的内存区域中未被使用的部分
固定分区分配:用户空间划分大小相等/不等的分区,每个分区装入一道作业;实现简单,无外部碎片,有内部碎片
分区说明表:分区号、大小、起始地址、状态(分配未分配)
用户程序太大时,所有分区都不能满足需求,需要采用覆盖技术
动态分区分配:不预先划分内存分区,进程装入内存时,根据进程大小动态建立分区;有外无内
- 空闲分区表或空闲分区链
内部碎片:分配给进程的内存区域中,有些部分没有用上
外部碎片:内存中的某些空闲分区由于太小难以利用(进程之间)
紧凑(拼凑 compaction)
3.1.5 动态分区分配算法·
- 首次适应算法:从低地址开始查找,找到第一个能满足大小的空闲分区[空闲分区以地址递增的次序排列] 无顺序检查,算法开销小
- 最佳适应算法:容量依次递增,优先使用更小的空闲区 产生很多小的外部碎片| 重新排序开销
- 最大/坏适应算法:容量依次递减,第一个满足要求的空闲分区 当大进程到来时就没有分区满足了 | 重新排序开销
- 临近适应算法:每次都从上次查找结束的位置开始检索 无顺序检查,算法开销小 (首次适应每次从链头查找,导致低地址部分出现很多空闲分区,无谓的浪费的查找开销;无大进程可用)
3.1.6 基本分页存储管理的概念·
非连续分配管理方式:
基本分页存储管理
页、页面(进程) && 页框、页帧、物理页(内存)
内u才能空间分为大小相等(如4KB)的分区,即页框,编号为页框号,进程的逻辑地址空间分为与页框大小相等的一个个部分,称为页或页面
建立页表来记录进程的每个页面在内存的存放位置(页号和页框号)。页表存在进程的PCB中
假设系统物理内存4GB,页面大小4KB,每个页表项至少多少字节(页号+内存块号)
内存块大小=页面大小=4KB=212B
4GB的内存总共被分为232/212=220个内存块
内存块号的范围是0~220-1
内存块号用20bit表示,字节需要3B(3*8=24>20)
页号类似数组下标,连续的,不占存储空间
- 基本分段存储管理
- 段页式存储管理
3.1.7 基本地址变换机构·
基本地址变换机构:用于实现逻辑地址到物理地址转换的一组硬件机构
PCB中(进程未执行时)或页表寄存器PTR(进程被调度时),存放页表在内存中的起始地址F和页表长度M
逻辑地址到物理地址的变换听的有点乱
重看
3.2.1 虚拟内存概念·
传统存储技术特征及缺点:
- 一次性:作业必须一次性全部装入内存后才能开始运行.1.作业很大时,不能全部装入吗,大作业无法运行2.对于大量作业,只有部分能运行,多道程序并发度降低
- 驻留性:一单作业被装入,就一直驻留到内存,直至作业运行结束,但一个时间段内只需访问作业的一小部分数据即可正常运行
局部性原理:
- 时间局部性:如果执行了程序的某条指令,那么不久后这条指令很可能再次执行(或数据访问)
- 空间局部性:一旦程序访问了某个存储单元,不久后,附近的存储单元也很可能被访问
虚拟内存的三个特征:
- 多次性:允许作业被分为多次调入内存
- 对换性:作业允许时无需一直常驻内存,而是允许换入换出
- 虚拟性:逻辑上扩充了内存的容量
第四章 文件管理·
第五章 I/O设备·
5.1_1_I-O设备的概念和分类·
I/O设备就是可将数据输入到计算机或接收计算机输出数据的外部设备,属于计算机的硬件部分。
I/O设备按使用特性分类:
- 人机交互型设备
- 存储设备
- 网络通信设备
I/O设备按信息交换的单位分类:
- 块设备:传输速率较高,可寻址,对它可随机地读/写任一块
- 字符设备:传输速率较慢,不可寻址,常采用中断驱动方式
5.1.2_I-O控制器·
I/O控制器:CPU控制I/O控制器,I/O控制器控制设备地机械部件
5.1_3_IO控制方式·
程序直接控制方式:
轮询
看读操作的流程图还是比较清晰的:给I/O模块发出读命令,读I/O模块的状态,检查状态,从I/O模块中读取字,往存储器中写入字,完成;下一条指令
CPU干预频繁,CPU不断轮询检查;实现简单,CPU需要一直轮询检查,长期处于“忙等”状态,CPU利用率低
每次读/写一个字;I/O设备–>CPU–>内存(数据输入-读操作)
中断驱动方式:
CPU会在每个指令周期的末尾检查中断
中断需要保存、恢复进程的运行环境,需要时间开销,中断发生频率高,系统性能会降低
等待I/O完成的过程中,CPU可切换到其他进程执行;不再需要不停的轮询,CPU和I/O设备可以并行工作
DMA方式 直接存储器存取 Direct Memory Access
用于对块设备,不再是单个字的传送
数据流向直接从设备到内存,不需要CPU作为中介
只在传送数据块的开始和结束时,才需要CPU干预
DMA控制器中的寄存器:
- DR 数据寄存器:暂存从设备到内存,或内存到设备的数据
- MAR 内存地址寄存器:在输入/输出时,MAR表示数据存放到内存的位置
- DC 数据计数器:表示剩余要读/写的字节数
- CR 命令/状态寄存器:用于存放CPU发来的I/O命令或设备的状态信息
DMA控制器和内存也直接通过系统总线相连,因此可以直接传送数据
缺点:CPU每发出一条I/O指令,只能读/写一个或多个连续的数据块
通道控制方式:
通道:一种硬件,可以识别并执行一系列通道指令
指令执行单一,与CPU共享内存
每次读写一组数据块
5.1_4_I-O软件层次结构·
用户的I/O请求到应答:用户层软件、设备独立性软件、设备驱动程序、中断处理程序、硬件(前4称为I/O的软件的层次,中3称为I/O核心子系统或I/O系统-内核部分)
封装:每一层利用下层提供的服务,实现某些功能,并屏蔽实现的具体细节,向高层提供服务
用户层软件:实现与用户交互的接口,用户可直接使用该层提供的、与I/O操作相关的库函数对设备操作 printf,Windows API
设备独立性软件:对上层的系统调用处理/提供统一的调用接口;设备的保护;差错处理;设备的分配与回收;数据缓冲区管理;建立逻辑设备名到物理设备名的映射关系,根据设备类型调用相应的驱动程序
设备驱动程序:设置设备寄存器,检查设备状态(直接涉及到硬件细节操作,且不是中断操作)
中断处理程序:中断处理
5.1_5_输入输出应用程序接口和驱动程序接口·
输入输出应用程序接口
字符设备接口:
get/put系统调用:向字符设备读写一个字符
块设备接口:
read/write系统调用:向块设备的读写指针位置读写多个字符,seek系统调用:修改读写指针位置
网络设备接口:网络套接字socket接口 bind:绑定端口,connect:连接到远程地址,read/write:从套接字读写数据
讲述了socket的流程
阻塞I/O:应用程序发出I/O系统调用,进程需转为阻塞态等待 get
非阻塞I/O:应用程序发出I/O系统调用,系统调用可迅速返回,进程无需阻塞等待 write
设备厂商开发不同操作系统的设备驱动程序
5.2_1_IO核心子系统·
设备独立性软件、设备驱动程序、中断处理程序
设备独立性软件:I/O调度、设备保护
I/O调度:用某种算法确定一个顺序来处理各个I/O请求
设备保护:访问权限 参考“文件保护”
5.2_2_假脱机技术·
批处理阶段:引入了脱机输入输出技术 外围控制机 缓解速度矛盾(磁带比纸带快,主机先输出到磁带上)[另一个好处:即使CPU忙碌,也可将数据提前输入到磁带]
脱机:脱离主机的控制进行的输入/输出操作
假脱机技术 SPOOLing技术:用软件的方式模拟脱机技术
输入井:模拟脱机输入时的磁带,用于收容I/O设备输入的数据 (磁盘上)
在输入进程的控制下,输入缓冲区用于暂存从输入设备输入的数据,之后再转存到输入井中
打印机是独占式设备,但可以用假脱机技术改造为共享设备
物理设备虚拟成逻辑上的多个设备
5.2_3_设备的分配与回收·
固有属性:独占设备、共享设备、虚拟设备
分配算法:先来先服务、优先级、短作业优先
安全性:安全分配方式、不安全分配方式
设备分配管理的数据结构:
- 设备控制表DCT:记录设备情况
- 控制器控制表COCT
- 通道控制表CHCT
- 系统设备表SDT
设备分配步骤的改进:物理设备名到逻辑设备名
5.2_4_缓冲区管理·
缓冲区的作用:
- 缓和CPU和I/O设备之间速度不匹配的矛盾
- 减少对CPU的中断频率,放宽对CPU中断响应时间的限制
- 解决数据粒度不匹配的问题
- 提高CPU和I/O设备之间的并行性
单缓冲策略,处理一块数据平均耗时:Max(C,T)+M(C CPU处理 T输入到缓冲区 M传送到工作区)
双缓冲策略,在主存中分配两个缓冲区
循环缓冲区:将多个大小相等的缓冲区链接为一个循环队列
in,out指针:指向下一个可冲入数据/取出数据的空缓冲区
缓冲池
5.3_1_磁盘的物理结构·
磁盘表面由磁性物质组成,可用磁性物质记录二进制数据
磁盘的物理地址定位:(柱面号,盘面号,扇区号)
5.3_2_磁盘调度算法·
5.3_4_磁盘的管理·
物理格式化:磁盘各个磁道划分为扇区;分区;逻辑格式化
ROM中存放很小的自举装入程序,完整的装入程序放在磁盘的启动块中
坏块:硬件故障、无法正常使用的扇区;标记