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