操作系统
2021-08-28 16:02:08 0 举报
AI智能生成
操作系统知识总结
作者其他创作
大纲/内容
操作系统的引论
操作系统的作用
os作为用户和硬件之间的接口
os作为硬件的总的管理者
os作为对计算机资源的抽象
操作系统发展的过程
人工操作系统的方式
用户独占全机
人工进行输出输出
脱机输入输出的方式
增加了缓冲的方式
提高了IO的速度
减小了cpu的空闲时间
操作系统的分类
单道的方式处理系统
连续一批作业处理的方式
IO完成之后才会继续运行CPU效率低下
多道处理系统的方式
多道将不需要的首先放在外存上等带队列之后进行调入
多道程序的资源利用率高,系统的吞吐量比较大
但是平均处理的周期比较长,并且没有交互能力
分时系统
分时系统会有多个共享主机
可以顺畅的进行人机交互
及时接收,及时处理的方式
实时系统的方式
实时系统,在操作系统的内部一定时间及时的做出响应
操作系统的特点
并发与并行
并发
在一段时间内多个任务轮流执行
并行
多个任务进行并行运算
互斥与共享
对于一些临界资源,同一时间只能有一个设备进行访问
如果没有并发也就么有共享的过程,对于一个资源,可以多个设备同时进行访问叫做共享
同步与异步
同步
一般有一定的顺序,进行任务的顺序管理
异步
异步是随机的不可预知性,在不一定的时候系统就给你塞回来
虚拟
主要是在逻辑上,进行的改进
时分复用
在时间上进行复用,同一时间多个任务并发进行处理
空分复用
虚拟内存技术,使得内存进行对换增加利用率
进程
操作系统中资源分配的最小的单位
操作系统的主要功能
处理机的管理工程
进程控制
pcb
进程同步
进程间同步顺序解决问题
进程调度
进程调度算法
进程通信
进程通信的方式
储存器的管理功能
主要是处理程序分配的空间的利用率
任务是内存的分配
进行动态的分配过程,动态进行增长,也可以进行移动
和静态分配的过程,从一开始近分配好的
内存的保护
各个用户都在自己所在的内存区域进行运行
也不允许内存进入了操作系统
地址的映射
由逻辑地址映射道物理地址上的关系
由页表和段表来进行实现
内存地址的扩充
由缺页请求申请的过程
还有页面进行置换的过程
设备管理的功能
进行缓冲的管理
在io和内存中间设置了缓冲区来完成速度不匹配的过程
增大了系统的吞吐量
进行设备的分配
设备的分配是在根据用户的IO进行分配
先查系统设备表
然后找这个设备专有的表
需要设备的控制器
寻找IO通道一次性完成
进行设备资源的处理
利用设备的驱动程序
只要是软件与硬件之间的转化
1.检查指令是否有问题
2.查询设备是否有问题
3.发出io指令让设备进行操作
4.完成用户的中断请求和处理程序
5.进行io通道的申请操作
文件管理的功能
文件储存区的功能
分配在内存与外存之间的请求过程
记录文件的储存区域,对文件资源进行分配和回收功能
目录文件进行管理
建立一个目录,建立查询机构
线性查询,索引直接找名然后进入下一个物理块
在下一层物理块继续寻找,直到找到文件的位置
文件的读写和保护过程
文件的读写管理
在外存中导入,可以进行读取导内存中去
或者区往外写入写入进内存
文件的保护管理
防止外存中被非法的破坏进行输入与输出的保护
微内核的实现
微内核只要实现基础的少部分功能
主要进行进程与线程管理
主要进行进线的调度和切换的过程,进程同步等功能也在其中
进行低级的储存器管理
只有低级的页表组织,页面置换等深层算法不用实现
中断程序和陷入之间的管理
只做简单的处理中断过程调用从中断处理程序
解决陷入问题
不足之处:需要进行多次的上下文切换
多次切换可能会影响效率,但是减小切换意味着增加内核部分容量
进程描述与控制
进程的顺序与并发执行
顺序
顺序性
封闭性
可重现性
并发执行
不可重现性
间断性
不封闭性
进程是资源分配的最小单位
进程有PCB进程控制块
进程实体代码段
进程相关数据段
进程的三种状态
运行态
正在运行的进程就是再运行态
就绪态
创建好进程分配好时间片再就绪队列里面排队,等待处理机的调度
时间片用完又变成就绪态了
阻塞态
有IO申请,变成阻塞态
进程的创建状态和终止状态
创建状态,申请一个空白的进程控制块PCB
插入到进程有序的队列中去
终止状态,再完成任务之后进程结束准备退出
准备回收进程控制块,和相关资源
进程的五种状态
静止就绪
处理机将活跃的进程挂起,挂起到静止就绪状态,只有将静止挂起激活成为活动就绪才有可能执行
静止阻塞
进程被阻塞成为活动阻塞,当IO完成之后还有可能变成就绪态的,但是可能长时间不唤醒,变成了激活状态,所以要将其挂起,变成静止阻塞状态
进程的阻塞与唤醒
wake与signal
进程阻塞的几种状态,阻塞时一种主动性的行为
向系统申请资源失败
互斥临近区
等待操作完成
等待IO
等待数据到达
等待数据到达
等待某个新操作发生
等待新的事件发生
进程的挂起与激活
block与babocast
挂起是由活动就绪到静止就绪
或者从活动阻塞变成静止阻塞
激活就是从静止到活动的状态
PCB进程控制块
作为进程独立运行的基本单位
PCB分配之后系统就会认为进程创建了,系统会给它提供各种服务等
PCB可以实现进程中的间断运行
PCB可以再中断运行的时候,进行cpu运行信息的保存,再中断完成之后进行恢复
可以实现进程管理的功能
中间有IO设备的登记,文件描述符表的登记
在内外存,中数据部分和代码段中的指针,是不是有页表
可以实现进程调度
内部包含了进程的调度算法,例如进程中的优先级,完成进程同步的工作
实现进程通信
有消息队列,和信号量的区域,可以有指向他们的指针
PCB组织的方式
线性的顺序方式
链表的方式,就绪的,运行的,阻塞的
索引的方式,线性储存但是索引表是单独拿出来的
进程同步
进程同步的基本关系
间接影响的关系,进程之间无直接同步的关系,可能为对临界区的访问
直接影响的关系,再任务执行的时候要采用一定的顺序
临界资源与临界区
一段时间只允许一个进程进入访问的区域
原则
空闲让进
如果临界区是空闲无人访问的让进
忙则等待
如果是有其他资源进入访问的时候,就进行了等待
有限等待
不能一直进行等待,等待只能在有限的时间内
让权等待
如果要等待资源,释放处理机,不能进入忙等的状态
信号量
整型信号量
申请资源wait--
资源小于0进程忙等
释放资源signal++
进程中的资源取消忙等
记录型信号量
申请资源wait--
资源小于0进程阻塞
释放资源signal++
如果数量小于0唤醒阻塞队列中的进程
and型信号量
一次性的做两个操作,申请两个资源
只有全部都大于0的时候申请才会成功,否则申请失败
申请成功,就全部--
信号量集的机制
有三个量在大于t的时候同时申请和释放d个资源
s,1,1和互斥量一样的操作
s,r,r,一次全部申请的操作
s,1,0当数量大于1时可以随便申请,当数量为0时不可以申请
管程
一组共享的数据结构和一组对共享数据的操作而组成
同一时间只有一个进程进入管程,剩余的在阻塞队列中等待
经典的同步问题
生产者与消费者
记录型信号量
生产者顺序不能调换
wait(empty)
wait(mutex)
进行存操作
signal(mutex)
signal(full)
消费者
wait(full)
wait(mutex)
进行读操作
signal(mutex)
signal(empty)
and型信号量
生产者
wait(empty,mutex)
进行操作
signal(mutex,full)
消费者
wait(full,mutex)
进行操作
signal(mutex,empty)
哲学家就餐问题
记录型信号量
连写两个wait(i)
wait(i+1)
就餐
signal(i+1)
siganl(i)
and型信号量
wait(i的筷子,i+1的筷子)
进行就餐
siganl(i+1的筷子,i的筷子)
读者与写者问题
记录型信号量,无限制的读写问题两个锁一个读锁一个写锁reaccount获取有几个读者
读者
wait(rmutex)
if readcount==0 wait(wamutex)
readcount++
signal(rmutex)
进行读操作
获取wait(rmutex)
readcount--
if(readcount==0)signal(wmutex)
signal(rmutex)
写者
wait(wmutex)
写操作
signal(wmutex)
信号集,需要设定读者的数量L上限为RN个
读者
wait(L,1,1,S,1,0)
可以拆分成两句,是把写都给关闭了
进行读操作
signal(L,1)
写者
wait(s,1,1;L,RN,0)
大于RN的时候可以随便申请小于Rn就没发申请了直接关上了
写操作
signal(s,1),释放一个
进程间通信
进程间通信的类型
共享储存区
多个进程在进程内读写,作为一块共享区域,可能可以实现共享数据的更改
管道
两个进程之间进行管道的通信
消息传递系统
每个进程有自己的消息队列,或者是用共享信箱的方式
本地socket
基于文件socket
基于网络型的socket
进程通信实现的方式
直接通信的过程
send receive
可能有发送阻塞,接收阻塞
发送不阻塞,接收阻塞
发送不阻塞,接收也不阻塞
消息队列
PCB中消息队列的信号量
消息队列的头指针
消息队列的互斥量
发送的原语
获得mutex,写入,释放mutex
后面还有一个signal提示消息到来
接收端的原语
wait(接收消息到来)
获取,释放
copybuffer到text中,释放buffer
间接通信的过程
信箱一对一,一对多,多对多等不同种类的信箱
线程
线程实现调度最小的基本单位
线程的特点
独立运行分配
可并发执行
有共享的资源
线程内的储存
tcb
tid
寄存器,堆和栈
pwd程序状态字,下一条指令的位置
进程与线程区别与比较
调度的基本单位,运行的基本单位
线程具有更高的并发性
进程是资源分配的最小单位,线程在其基础上进行资源分配
独立性,进程之间相互独立,同一个进程中的线程会有共享数据
进程系统开销较大,线程系统开销较小
线程的状态
执行状态
就绪状态
阻塞状态
线程实现
用户型线程
在用户区内,才用轮转时间片来说用户级线程多个对应同一个时间片
内核型线程
在内核区内,是由内核支持的,线程内核中会在内核态进行切换
交互的线程
可以是一对一的,一对多的,多对多的线程资源
处理机调度与死锁
处理机作为调度的层次
高级调度
主要长成调度,将作业调入内存,为他们创建进程给予处理
中级调度
主要是进程调度,采用什么样的算法进行调度
低级调度
低级的调度,是调入调出内存,提高资源利用率和吞吐量
调度的目标都是提高处理机的利用率和系统上的吞吐量
对于不同的系统有不同的目标
批处理系统是为了完成服务
在多道系统给,是cpu在各个进程中完成切换
分时系统
要求响应快具有一定的实时性
实时系统
要求有很高的实时性
不同调度层次的算法
作业调度
将作业调入内存,先来先服务算法-未能考虑短作业的情况
短作业优先-未能考虑长作业的情况
优先级调度算法-根据不同的优先级进行作业的调度
高响应比的算法-用等待时间+要求服务的事件除以要求服务的时间,响应比越高约可能调度上
进程调度的算法
为了获得最大得cpu使用量得吞吐度-后续继续介绍
进程调度得信息
保存cpu得信息
按照算法读取进程
把处理权分配给进程
进程得处理机制
pcb保存上下文
进行调度算法计算
进程压入-处理
返回中断位置
进程调度算法
由抢占得方式和非抢占得方式
时间片轮转得方式
优先级队列,一个优先级等级得时间片
多级队列得方式,没执行完做去到下一级给时间片
死锁概述
对于临界资源得互相占用和抢夺造成了死锁
产生死锁得条件
资源互斥
占有和等待
不可抢夺
环路等待
处理死锁方法
预防死锁
实现预防得方式,破环产生得条件
避免死锁
避免时动态检测-银行家算法
检测死锁
死锁检测环路等待图
解除死锁
解除死锁-进行环路得拆解
预防死锁
破环占有和等待
释放资源,才能申请或者从一开始就把所有得资源申请
破环不可抢夺
规定可以按照优先级进行抢夺
破环环路等待
将设备按照一定得顺序申请和释放
避免死锁
采用银行家算法
先分配-在判断时否会进入不安全得状态
如果进入不安全状态,就不会提供
检测和解除
画资源分配图
拿下一条线,如果资源都能慢慢解除下来得话就可以
储存器管理
储存器得多级启动模式
cpu
处理机
寄存器
少量得临时信息
高速缓存
内存区域临界主要区域得
主存
主要内存区
磁盘缓存
与磁盘进行对换到
硬盘
外部得储存介质
可移动介质
可移动硬盘U盘
程序得装入
绝对地址装入
可重定位得装
静态重定位连接,逻辑地址不等于物理地址,这时候就分配内存了
运行时重定位
动态链接
装入程序时得内存分配
连续性的内存分配
单一连续分配得方法
单道进行分区-只装入一部分
固定内存分配得方法
将内存固定划分为很多长度分,每个程序进去找
动态内存分配得方法
将剩余内存做成一个双向链表,指针位是剩余大小
基于顺序搜索得分区分配算法
首次适应算法
第一次进行查找合适就进行分配
循环首次适应得算法
循环找最适应得算法
最好分配得算法
每次都要最合适得切割
最坏分配的算法
每次都拿最大得切割
基于索引搜索得分区分配算法
都是按分区大小分得链表或者索引
基于动态可重定位得算法
1.紧凑算法
2.动态重定位
回收连续内存
回收和前后进行合并
离散型得内存分配
见下方得
对换
多道程序下的对换技术将要使用得换入,将不使用得换出
整体进程对换
就绪态换入,阻塞得换出
页面置换对换
缺页得置换回来
离散得内存分区分配方式
分页式得内存分区分配方式
分段得管理方法
逻辑页面,物理上得物理块
地址机构
两级页号和页内偏移
页表
在内存中,有页号和物理块号,外加控制器,是页表长度和页表地址
可以判断页号是否大于长度,大于长度会造成越界中断
快表,是在高速缓存中之间有页号和物理地址得,每次查询由于局部性原理都会更新,先找快表,两次进入内存
可以有两级页表或者多级页表,只是页表是连续分布得,但是不会减少内存,减少内存可能会在虚拟内存中使用
分段式内存分区分配
地址是段号,加段内地址
可以有信息保护,动态增长等,也是两次进入内存
分段得地址变换方式
内部有控制寄存器内部是段表长和段地址
段表是有段号,有段长还有段内首地址
两次越界得查询方法
首先先查段表长度,如果段号大于段表长度就越界
之后区查段表看段长,如果段长小于段内偏移就第二次越界
分段和分页区别
分页是用户不可见得,分段式程序设计大多是可见得
分页地址式一维的主要是,只有页号和页内偏移
分段式二维的有段号,还有段内偏移
由于是用户设计的是可重用的,实现了对数据的保护和多次利用
段页式分区分配
段页是三位的
地址的结构是段号,页号,页内偏移量,可能需要三次访问内存
段表中有段号,页表的长度,页表的地址
页表中有页号,和物理块地址
相加页内偏移成为三维的数据结构
Linux系统编程
gcc编译制作
预定义与宏替换
替换头文件和宏
编译
生成汇编文件.o
汇编
生成二进制文件
链接
链接动态库,静态库生成可执行程序
动态库,使用时查找
静态库,在编译时就已经加入运行速度快
I头文件路径-ll库文件名称-L库文件的路径
makefile
原目标:依赖项
编译操作指令
文件和目录操作
dup/dup2
将一个新的文件描述符,赋值与旧的相等
如果开启就关闭,如果没开启就直接开启赋值
fcntl
进行文件阻塞,非阻塞设置
opdir,readdir,closedir
打开读写关闭
进程控制
fork,wait,waitpid
创建子进程回收子进程
pid>0父进程
pid==0子进程
回收进程阻塞等待
wait回收一个
waitpid回收指定进程或者-1全部子进程
execl族
代码段何数据部分进行了替换
执行之后无法返回原来的进程部分
僵尸进程,孤儿进程
僵尸进程
父进程还活着,子进程已经死了,但是父进程没有完成对子进程的回收
可以杀死父进程,利用init进程进行回收
孤儿进程
子进程,还没有退出,父进程就已经死了
init进程自动进行回收
pcb进程控制块
内核态的基本信息
pid
文件fd表
cpu的状态,处理机的上下文
进程通信的方式
进程的调度的方式
未决信号集和阻塞信号集
进程间通信
进程间通信必须经过内核区
经过输入输出缓冲区
pipe
一个pipe两个fd[2],一个读端,一个写端
父进程关闭读端
子进程关闭写端
默认两个端口的时阻塞的
命名管道fifio
fifo交换数据,在fifo中的数据映射成一个文件
两个进程轮流进行读行为和写行为
共享内存区mmap
创建一个文件,mmap映射成一个内存区域
mmap的权限应该,小于open文件的权限
信号,信号量
注册信号处理函数sigaction
先屏蔽signchid,最后注册完之后使用一个信号循环进行回收
socket本地套接字
信号
signal
signint
cirl+c
signchid
子进程回收需要
signkill
不能屏蔽
kill
kill加信号代表数字
about/raise/alarm
产生信号或者定时器
未决信号集,与阻塞信号集
未决信号集,时为确定的信号,先在阻塞中加以判断,如果阻塞就不变
如果不阻塞,使用中断处理函数进行处理
信号捕捉函数signaction
注册handel函数和参数回调函数,当信号产生时进行处理
守护进程与线程
守护进程
不受终端控制,不受用户组控制的进程
创建步骤
父进程fork子进程
父进程死去,子进程发起会话
改变工作目录
关闭相应的文件描述符
多线程的创建与回收
pthread——create
创建多线程
join
多线程回收
外部设置detach分离属性,或者set设置属性
线程同步
互斥量,条件变量
pthread_mutex
condition
读写锁
pthread_wlock
信号量
thread_condition_wait
thread_condition_signal
操作系统的接口api
用户接口
图形化的窗口
命令行窗口
字符型的字符串
shell进行批处理
用户态与内核态
子主题
一般命令与特权命令
一般命令时用户态之间的
特权命令使用了系统调用
系统调用
是内核与用户之间的转换
运行于调度在不同的状态下
如果是高优先级的时候可能被阻塞返回别的调用中去
嵌套调用可能使用六层
系统调用的实现
先运行用户函数,进行中断,
系统调用入口表,进入系统调用状态
进行系统处理
复原处理cpu状态,回到子进程中的状态
系统调用的类型
进程控制类型
文件操作的类型
进程间通信的类型
中断机制进行中断
用户
标准程序
系统库函数
自动调用系统调用
文件管理
文件的结构
文件的逻辑结构
文件的物理结构
文件的结构分类
顺序文件
按顺序放置的对于定长和不定长不太方便管理
索引文件
按照索引放置的,索引文件指向文件的位置,可以有多个字段,多个索引表
顺序索引文件
放置是按照顺序文件的地址放置的,但是索引是单独的,指向一段顺序的坐标位置
有点像mysql的b+树索引
文件的类型
字符设备文件,块设备文件,链接文件,socket文件,目录文件,普通文件,pipe文件
文件目录的管理
使用线性的目录方法
目录线性的有先找主文件夹
找到主文件夹下的块索引,然后找到块
块下找下一级的索引的位置
找到块之后进行文件的查找
使用hash之间查找的方法
o1直接进行查找
文件的链接
软链接
只是建一个软的快捷方式,在使用的时候返回系统调用,系统回调区寻找所给的地址
硬链接
直接两个链接指向磁盘的两个文件,只用当引用计数为零的时候文件才算是真的没有了
文件控制块
存储看文件的相关信息,磁盘上的物理位置,索引中的逻辑位置等
IO处理
IO系统的层次
用户层的软件
设备无关性的软件
设备驱动的软件
中断程序
IO设备与IO设备控制器
IO设备时硬件控制的,在系统调用时需要进行转化,通过IO控制器进行转化
IO设备的类型
直接IO的设备
终端的设备
IO控制器的作用
进行命令的设别
转化命令
地址的识别
缓冲区的实现
错误处理,检查差错控制
IO控制器的实现
CPU与IO控制器之间的接口
内部的IO逻辑转化
IO控制器与硬件之间的接口
IO通道
IO通道是cpu调用的设备程序可以简单的进行读写
IO通道可以简单的分成字节多路的通道
子通道连接着IO设备控制器
轮询进行cpu传输
数组选择的通道
进行一个数组的传递,一段时间内,只能有一段的数组进行传递
数组多路的通道
多段数组象字节多路的方式一样,进行传递,一次传递多路数组
瓶颈问题
有一个通道只能和指定的控制器相连,可以用互相连接的方式,使多个通道和多个控制器相连接
中断机构与中断响应
中断
IO或外部程序进行中断过程
有嵌套中断的过程
在中断执行的过程中-有更高优先级的来就进行中断
屏蔽中断的过程
在屏蔽的过程中,使用屏蔽中断信号当中断处理完成时才加入中断
陷入
cpu自身的中断问题
陷入进行陷入程序的处理
中断向量表
对于不同的中断,有不同的中断处理程序
中断的处理过程
中断先进行用户态和内核态的转变
保存处理机现场到中断栈
进行中断处理
恢复中断的过程
恢复到原来的中断程序或者时嵌套中断
完成可能驱动设备向软件进行报告
设备驱动程序
设备驱动程序的功能
io与控制器之间的通信
检查IO状态
响应IO指令
处理中断请求
设备的运行过程
控制参数的转化
进行服务的校验
检查设备的状态
传输数据
启动IO设备
对IO的控制方式
可轮询的IO方式
轮询,发出io请求cpu忙等待,等待结束后才能回来
经过IO-CPU-内存的读写操作
CPU不能干别的一次只能传输一个块
中断的IO方式
中断在发出IO请求的时候Cup可以干别的
经过IO-CPU-内存的读写操作
一次一个块,但是在等待io结束的时间里cpu可以干别的
DMA异步方式
在发出申请的时候异步给DMA进行一次一个块的读写
在后面io设备好的之间进行返回,推给主程序
IO直接给内存了
缺点时一次只能进行一个连续数据块的读写
IO通道的方式
创建多个通道,可以进行多个数据块的编写
对多多个数据块直接发出IO命令
IO直接给内存了
通道控制器,记录操作自动读写直到把操作都做完为止
与设备无关的软件
将独立的物理设备名转化成逻辑上的设备名
与设备无关主要功能
设计与设备的共有接口
进行缓冲区的分配
实现差错控制
进行设备的分配与释放
在设备层面上提供无关的设备物理块
系统上的设备结构
物理设备名查询的系统设备表SDT
在系统上的全部设备进行记录
在这儿找固定DCT设备
设备的控制表DCT
记录每个设备的使用个数
分配设备控制器表COCT
记录设备控制器的表
分配通道表CHCT
记录通道的分配表
设备分配的流程
现在SDT的系统设备表上查找DCT
在DCT开始查找所连接的控制器的情况
控制器拿到之后查询io通道
从逻辑设备表到物理设备表的实现LUT
在设备设备中查找找到物理设备,还同时找到,所属的物理设备的驱动程序的入口
可以多个用户使用一个LUT表,这样容易产生冲突
也可以一个用户使用一个LUT表
用户层面的io软件
只有在小部分在用户层面有假脱机系统和一些库函数提供接口
使用守护进程,不受终端控制的打印机程序
打印机的守护进程,然后再假脱机文件不同的进程不断写入假脱机文件中,打印机进程不断执行
缓冲区管理
引入缓冲区的目的
解决IO速度与cpu处理机速度不匹配的问题
减少cpu的中断次数,一次性的录入多个数据
解决数据之间粒度不匹配的问题,在缓冲区预留区域
缓冲区的分类
单缓冲区
单端输入-单端输出
双缓冲区
可以同时读写一段输入一段输出
环形缓冲区
采用两个指针或者三个指针
当前cpu正在处理的
下一个应该插入的
下一个应该读取的
可能有同步问题
缓冲池
四个缓冲区
从内存中读取
取下一个空白的,读取加入输出队列
读取处理
cpu进入缓冲池读取,处理完加入空白块
从cpu写入
拿出一个缓冲区,开始写写完加入输出队列中去
写完写到内存中去
输出到内存中,加入空白块之中
三个缓冲队列
空白缓冲队列
输入缓冲队列
输出缓冲队列
虚拟内存器
常规内存器与虚拟内存器
常规内存器
一次性的装入,驻留在内存中
虚拟内存器
是分段装入的,时常进行对换的方式,而且是虚拟的从逻辑上增加内存的过程
虚拟内存的定义
是从逻辑上进行扩大的,运用把程序分段装入,并在内存中多次进行对换来实现的
局部性原理
程序的执行中总是从局部中开始的
程序从一个方面调用到另一个方面
程序中有许多的循环结构
对数组的处理
说明在一段时间内,程序都是在一个部分进行执行的(时间,空间)
虚拟内存器的实现方法
是由分页请求系统和分段请求系统来实现完成的
分页请求系统
定义
在请求调入少部分页的,然后再进行页面置换而进行的
硬件支持
请求分页的页表
主要在页表上加了状态位,访问字段,修改字段,外存地址
进行中断的中断机构
再调页面时缺少页面了,产生了缺页中断
产生一个中断信号
缺页中断和处理机中断的不同,普通的是在处理这条结束后再去处理中断请求
缺页中断时发现页面不再立马进行处理,而且可能会产生多次缺页中断,要不断的对缺页中断进行处理,对他们进行保存
进行地址变换的机构
判断是否页号大于页表号
大于页标号时越界的
先查看块表
快表由直接就有地址了
再查看页表
页表中查看地址
判断是否页在内存中
如果在的话就取出来
不在的时候,查看是否页是否时满的
是满的就会页面置换
页面置换算法换出一页或者多页
启动io线程硬件支持
修改页表和块表
软件支持
请求调页的方式
在缺页时要调页装入内存
固定分配与可变配置的方式
固定的分配一定的页数,每次换入可变的一部分的页面,总页面固定
可变分配与全局配置的方式
进程的页面的数量时可变的,可以从全局中加入内存,也可以在别的进程中抢夺内存
可变分配与局部配置的方式
上面时从全局中进行内存块的分配的
这个不影响其他进程,并不会使全局中的任意一页
物理块的分配算法
平均分配的算法
不太合理的平均分配
按比例分配的算法
直接按比例进行分配
按照优先级进行分配
确保高优先级不会缺页
页面调入的策略
何时进行页面调度
预定调入的策略
预测调入的页数,进行预测调入页面的操作,一次调入多页
请求调入页面的策略
请求每次进行页面调入,每次调入一个页面
从何处进行页面调度
从对换区调入
当系统对换区有足够的空间,可以使用对换区去调入一页
从文件去调入
对换去没有足够的页面-从文件区选择一个页面调入
UNIX的方式调入
对于没由使用过的使在文件区调入的,使用过的就在对换区调入
页面调入的过程
当页面未在内存中的时候,状态为使0,就发生缺页中断
中断保存处理及的状态,然后启动中断处理程序
页面是否,已满,已满采用页面置换算法
换入之后进行
标志为修改
修改进入页表和快表中
页面置换的方法
分段请求系统
定义
在请求调入少部分段的,然后再进行段置换而进行的
硬件支持
请求分段的段表
进行中断的中断机构
进行地址变换的机构
软件支持
请求调段的方式
段面置换的方法
页面的置换算法--虚拟内存的实现过程之一
缺页率
一段时间内申请页面失败的除以总和
缺页的几个影响因素
页面大小,页面约小缺页率可能越高
进程所分配的物理块数目,数目越多,进程的缺页率越小
页面置换算法-页面置换算法的好坏页严重的影响了其表现
程序的固有属性-受否是连续的装入的-局部化约高越能程序的缺页率越低
页面置换的方法
最佳页面置换算法
主要是理论上的最佳页面算法
未来最远,或者不会被使用的进行页面置换
先进先出的页面算法
不太合理,最先进入的最后出去
最久未使用的LRU算法
硬件支持
可以是位运算
向后位运算一步
双向链表的栈
将取出的取出来压入,栈底的就是LRU
最久未使用的换出去
一段时间最少使用算法
clock置换算法
简单的clock的置换
在页表中查看访问位,如果访问位是0的话就换回去
一直循环出去
改进的clock置换
有修改位和访问位
先查修改位,修改位是0并且访问位是0的话就直接移除
然后是访问位是0修改位是1的页面,flush到内存中然后进行淘汰
在这个过程中将访问位为1的全部恢复为0
如果不行循环从新来
程序抖动与工作集的概念
程序在缺页率很高的情况下会经常的对页面进行换入换出,会出现抖动的情况,实际cpu的运行效率很低
工作集-在程序运行的时间内所有页面的集合就是工作集
预防抖动的方法
采用局部配置的策略
防止其他进程在取走物理块
最大程度的减小了缺页的范围
算法加入到处理机中
调节缺页率L==S
让平均缺页时间和平均缺页服务时间相等
选择暂停一些程序
减少多道程序的数目
0 条评论
下一页