管程的基本概念:
为什么会出现管程?
信号量机制的不足:程序编写困难、易出错
解决:
- Brinch Hansen(1973)
- Boare(1974)
方案:
- 在程序设计语言中引入管程成分
- 一种高级同步机制
管程的定义:
是一个特殊的模块
有一个名字
有关于共享资源的数据结构及在其上操作的一组过程组成
进程与管理
进程只能通过调用管程中的过程来间接的访问管程中的数据结构
管程作为一种同步机制,要解决两个问题:
互斥:
管程是互斥进入的
——为了保证管程中的数据结构的数据完整性
管程的互斥性是由编译器负责保证的
同步:
管程中设置条件变量及等待/唤醒操作以解决同步问题。
管程的实现有两种途径:
直接构造——>效率高
间接构造
——>用某种已经实现的同步机制去构造
为什么需要通信机制?
- 信号量及管程的不足
- 不适用多处理器情况
地址重定位
已经了解的:
程序装载到内存才可以运行
保存在磁盘上
多道程序设计模型
允许多个程序同时进入内存
每个进程都有自己的地址空间
不能访问另一个进程的地址空间
进程不能执行不适合的操作
静态重定位与动态重定位:
静态重定位:
当用户程序加载到内存时,一次性实现逻辑地址到物理地址的转换
——》一般可以由软件完成
动态重定位:
在进程执行过程中 进行地址变换——即逐条指令执行时完成地址转换
——》需要硬件部件支持
内存管理
回收问题:
内存回收算法:
当某一块归还后,前后空闲空间合并,修改内存空闲区表
四种情况:
上相邻、下相邻、上下都相邻、上下都不相邻
碎片问题解决:
碎片——>很小的、不易利用的空闲区
——>导致内存利用率下降
解决方案——>紧缩技术
在内存移动程序,将所有小的空闲区合并为较大的空闲区
又称:压缩技术、紧致技术、搬家技术
紧缩时要考虑的问题:
系统开销、移动时机
交换技术
- 设计思想:进程在内存与磁盘之间的动态调度
存储管理
虚拟存储技术
- 当进程运行时,先将一部分装入内存,另一部分暂留在磁盘,当要执行的指令或访问的数据不在内存时,由操作系统自动完成将他们从磁盘调入内存的工作。
虚拟地址空间:
- 分配给进程的虚拟内存
虚拟地址:
- 在虚拟内存中指令或数据的位置上,该位置可以被访问,仿佛他是内存的一部分。
地址保护:
- 防止地址越界
- 防止访问越权
- 确保进程的操作是合法的
引入反转(倒排)页表
地址转换:
- 从虚拟地址空间出发:虚拟地址——>查页表——>得到页框号——>形成物理地址
- 每个进程一张页表
解决思路:
- 从物理地址空间出发,系统建立一张页表
- 页表项纪录进程i的某虚拟地址(虚页号)与页框号的映射关系
快表(TLB)的引入
问题:
- 页表—>两次或两次以上的内存访问
- CPU的指令处理速度与内存指令的访问速度差异大,CPU的速度得不到充分利用
如何加快地址映射速度,以改善系统性能?
- 程序访问的局部原理—>引入快表——高速缓存
快表是什么?
- 翻译查找缓冲区)
- 相联存储器
特点:按内容并行查找
- 保存正在运行进程的页表的子集(部分页表项)
页错误PAGE FAULT
- 又称页面错误、页故障、页面失效
- 地址转换过程中硬件产生的异常
具体原因:
- 所访问的虚拟页面没有调入物理内存
- ——>缺页异常
- 页面访问违反权限(读/写、用户/内核)
- 错误的访问地址
缺页异常处理:
- ( 页面错误)
- 在地址映射过程中,硬件检查页表时发现所要访问的页面不在内存,则产生该异常——缺页异常
- 操作系统执行缺页异常处理程序:获得磁盘地址,启动磁盘,将该页调入内存。
- 如果内存中有空闲页框,则分配一个页框,将新调入页装入,并修改页表中相应页表项的有效位及相应的页框号。
- 若内存中没有空闲页框,则要置换内存中某一页框;若该页框内容被修改过,则要将其写回磁盘。
页框锁定
为什么要锁定页面?
- 采用虚拟技术后
- 开销——>使进程运行时间变得不确定
- 给每一页框增加一个锁定位
- 通过设置相应的锁定位,不让操作系统将进程使用的页面换出内存,避免产生由交换过程带来的不确定的延迟。
- 例如:操作系统核心代码、关键数据结构、I/O缓冲区。
最佳页面置换算法(OPT)
- 设计思想:
- 置换以后不再需要的或最远的将来才会用到页面
先进先出算法(FIFO)
- 选择在内存中驻留时间最长的页并置换它。
- 对照:超市撤换商品
- 实现:页面链表法
最近最少使用算法(LRU)
最近最少使用算法)
选择最后一次访问时间距离当前时间最长的一页并置换
及置换未使用时间最长的一页
- 性能接近OPT
- 实现:时间戳或维护一个访问页的栈
- ——>开销大
最不经常使用算法(NFC)
Not Frequently Used
选择访问次数最少的页面置换
- LRU的一种软件解决方案
- 实现:
- 软件计数器,一页一个,初值为0
- 每次时钟中断时,计数器加R
- 发生缺页中断时,选择计数器值最小的一页置换
工作集算法
基本思路:
- 找出一个不在工作集中的页面并置换它
思路:
- 每个页表项中有一个字段:记录该页面最后一次被访问的时间
- 设置一个时间值T
- 判断:根据一个页面的访问时间是否落在“当前时间-T”之前或之中决定其在工作集之外还是之内。
实现:
- 扫描所有页表项,执行操作
1.如果一个页面的R位是1,则将该页面的最后一次访问时间设为当前时间,将R位清零
2.如果一个页面的R位是0,则检查该页面的访问时间是否在“当前时间-T”之前
(1)如果是,则该页面为被置换的页面;
(2.)如果不是,记录当前所有被扫描过页面的最后访问时间里面的最小值。扫描下一个页面并重复1、2。
本讲重点:
典型的文件逻辑结构与文件存取:
流式文件:构成文件的基本单位是字符
- 文件是有逻辑意义、无结构的一串字符的集合
- 记录式文件:文件由若干个记录组成,可以按记录进行读、写、查找等操作
- 每条记录有内部结构
磁盘访问:
- 一次访盘请求:
- 读/写,磁盘地址(设备号,柱面号,磁头号,扇区号),内存地址(源/目)
完成过程由三个动作组成:
- 寻到(时间):磁头移动定位到指定磁道
- 旋转延迟(时间):等待指定扇区从磁头下旋转经过
- 数据传输(时间):数据在磁盘与内存之间的实际传输。
有关数据结构:
- 位图:
- 用一串二进制位反映磁盘空间中分配使用情况,每个物理块对应一位,分配的物理块为0,否则为1
- 申请物理块时,可以在位图中查找为1的位,返回对应物理块号
- 归还时,将对应位转置1
- 空闲块表:
- 将所有空闲块记录在一个表中,即空闲块表
- 主要两项内容:起始块号,块数
- 空闲块链表:
- 把所有空闲块链成一个链
- 扩展:成组链接法