操作系统核心知识点

进程/线程/协程
进程间通信
进程间调度
内存管理 https://www.cnblogs.com/lcw/p/3505503.html
IO模型

内存管理

1.扫盲篇

1.1 操作系统存储层次

计算机存储层:
寄存器:CPU中,读写ns级,容量字节级。
缓存:CPU和CPU间的缓存,读写10ns级,容量百到千字节
主存:动态内存,读写100ns级,容量GB
外部存储介质:磁盘,SSD,读写ms级,容量TB级。

在这里插入图片描述


总结

1.1 什么是操作系统
运行在计算机上的软件程序。分为内核和外壳,内核能直接操作硬件的程序,管理进程,文件,网络。外壳是围绕着内核的应用程序。

1.2 什么是系统调用?
运行在用户态的程序想要操作系统资源,想操作系统发出请求,由操作系统代理完成。如:文件读写创建删除。进程的创建撤销,阻塞唤醒。内存分配和回收。


一、操作系统基础

1.1 什么是操作系统?

运行在计算机硬件上的软件程序。分为内核和外壳,内核是能直接操作硬件的程序,管理系统的进程,内存,设备驱动程序,文件,网络等。外壳是围绕着内核的应用程序。

1.2 什么是系统调用?

运行在用户态的程序需要调用系统资源,就会向操作系统提出服务请求,操作系统完成系统调用。

系统调用按功能分:
文件:文件读写,创建删除。
进程:进程创建,撤销,阻塞,唤醒;进程之间的消息传递或信号传递
内存:内存的分配,回收,获取作业占内存区大小及地址等功能。


总结

2.3 进程间通信方式

每个进程有自己的内存,变量对其他进程不可见。通过内核交换数据。
管道:特殊类型的文件,先进先出读写通信数据,不能定位读写
1.匿名管道:存在于内存中的文件
单向,一端存,一端取;匿名:父子兄弟进程间通信;
2.有名管道:存在实际磁盘介质或文件系统中的文件
路径名
3.信号
比较复杂的通信方式,用于通知接收进程某个事件已发生。
内核(管理操作系统资源的程序,如文件,网络资源)用信号通知用户空间进程发生了哪些系统事件;
4.消息队列 存在于内核中的消息链表,消息队列标识符标识
通信数据先进先出,存于内核,只有内核重启(操作系统重启)或被显示删除时,才能真正的删除。实现随机查询,不一定要按照先进先出的顺序读取。客服了信号承载信息少,管道只能承载无格式字节流,缓冲区大小受限。
5.共享内存。
进程不同的逻辑地址映射到同一块物理地址。
方便快速,数据不用传递直接访问,但需要信号量实现同步。
6.信号量
一个计数器(非负整数)。用于进程间的同步(线程可以有顺序的依次访问共享资源)
互斥量:
0/1, 实现同一时刻只允许一个线程访问共享资源;加锁和解锁由一个线程完成
同步量:
非负整数,在互斥的条件下,让线程有顺序的访问共享资源。信号量由一个线程释放,另一个线程得到。
7.套接字
进程间进行网络通信。用套接字函数完成通信。
服务端:
1.socket建立套接字,系统分配给服务进程一个类似文件描述符的资源。
2.bind给套接字起名字,等待客户端的连接
3.listen创建队里存放客户端的连接
4.accept接收客户端的连接
客户端
socket创建一个未命名的套接字,将服务端的套接字名字作为地址,connect建立连接
建立连接后,通过流传输数据。

2.4 线程间的同步方式

互斥量:只有一个。拿到互斥量的线程才能访问共享资源,使同一时刻只允许一个线程访问。synchronized和lock实现原理。
同步量:在互斥的基础山,让多个线程有顺序的访问共享资源。
通知(wait和notify)

2.5 进程调度算法

先到先服务
先来的进程先执行,其他等待;队列,简单,适合长进程,计算密集型任务,短进程可能不能被执行;
短作业优先
好使进程短的优先;系统等待时间变少,提高响应,但长进程可能不被执行;
最高响应优先比
等待时间一样,先执行耗时短的;耗时一样,执行等待时间长的;照顾短作业,长作业也能被执行;
时间片轮询
先给每个进程分配时间,进程执行超过了时间,暂停该进程,加入到就绪队尾。上下文切换到就绪队首。简单,响应时间短,不适合紧急进程,时间片对系统影响大。
优先级调度
最先执行优先级高的任务。优先级根据内存等资源要求规定。

二、进程和线程

2.1 进程和线程的区别?

进程是资源调度的最小单位,线程是执行的最小单位。系统分配给进程内存和任务。可以生成多个线程去执行任务,线程共享进程的堆和方法区,有自己的虚拟机栈,本地方法栈,程序计数器。

2.2 进程有哪几种状态?

创建new:
就绪ready:一旦获得CPU分配的时间片,就会运行。
运行running:CPU上运行,一个CPU同一时刻只允许一个线程运行
阻塞waiting:等待某资源可用或等待IO操作完成
结束terminated:进程从系统中消失。正常结束或中断退出运行。

2.3 进程间的通信方式

进程有各自的用户地址空间,进程的全局变量对其他进程不可见,所以进程间同过内核交换数据。在内核中开辟一块缓冲区,
进程1从用户空间拷贝数据到内核缓冲区,进程2再从内核缓冲区把数据读走。内核提供的这种机制叫进程间通信。

1.管道/匿名管道(pipe)
没有名字,只能用于父子或兄弟间通信。可以看做是一个循化队列,管道一端的进程顺序将数据写入缓冲区,管道另一端进程顺序读取数据。
局限:数据单向流动;没有名字只能用于父子或兄弟进程;创建时分配一个页面大小缓冲区,有限;无格式字节流,双方需约定好数据格式(比如多少个字节算一个消息,命令或记录)

2.有名管道(FIFO)
提供了一个路径名,

3.信号(Signal)
什么是信号:
进程间互相通信
特点:
无需知道对方进程状态,任意时刻发送;内核可以保存进程未执行的信号,直到进程执行并传递给内核为止;被进程设置成阻塞的信号在传递时别延迟,直到阻塞取消才传递给对方进程。
常用信号:
程序终止,退出信号;运算致命错误信号(除零/数据溢出),终止,结束进程信号;定时器信号;
信号来源:
信号是软件层次对中断机制的一种模拟,是一种异步通信方式;可以在用户空间进程和内核之间交互;内核利用信号通知用户空间的进程发生了哪些系统事件:
硬件来源:硬件异常,无效的存储方式
软件来源:终止进程,软件异常信号
信号生命周期:
进程产生信号,设置信号的传递对象,交给操作系统
操作系统查看接受者是否阻塞该信号,如果阻塞,且信号是可阻塞的,操作系统保留该信号,直到接收进程解除对信号的阻塞。如果接受者进程没有阻塞该信号,则传递给进程。
接收进程收到信号后,根据对此信号的预处理方式,暂时终止当前代码执行,保护上下文(临时寄存器数据,当前程序位置,CPU状态),执行中断服务程序,执行完成后恢复到中断位置。

4.消息队列
存放于内核中,只要系统重启或显示删除才能删除;先进先出,但可以随机查询,不一定要以先进先出的次序读取。克服了信号承载量少,管道只能承载无格式字节流和缓冲区大小受限。
5.共享内存
不同的进程的逻辑地址,映射到了相同的物理地址。即所有进程都可以在上面改动数据,改动后,其他进程也看得到。
方便快速,数据不用传输直接访问。共享内存没有提供同步机制,需要借助信号量来保证进程间的同步工作,确保一个进程在写的时候不能读。
在这里插入图片描述
6.信号量
是一个计数器,用于多线程对共享数据的访问,进程间的同步,解决同步相关的问题并避免竞争条件。多线程条件下,信号量的计算是原子操作,通常在内核中实现。
在内核中的有名二值信号量(内容为0或1的文件);在内存中的信号量;在内核中的二值信号量;

信号量与普通整型变量的区别:
信号量非负,只能通过两个标准原子操作;
普通整型变量可以再任意语句中访问

信号量与互斥量的区别
1.互斥量用于线程的互斥,信号量用于线程的同步;也就是互斥与同步的区别;
2.互斥量是0或1,信号量是非负整数
3.互斥量加锁和解锁由同一个线程使用,信号量可以由一个线程释放,另一个线程得到。
互斥:
指某一资源同一时刻只允许一个线程访问。但互斥无法限制访问者对资源的访问顺序,即访问时无序的。
同步:
在互斥的基础上,实现访问者对资源的有序访问。大多数场景是基于互斥的,如写操作。

7.套接字
一种通信机制,不同主机的进程相互通信的端点,在TCP连接的两端,用套接在中的函数完成通信。

套接字特性:
特性由3个属性确定:域,端口号,协议类型
1…套接字的域:
a. 一个是Internet网络:IP+端口指定一台联网计算机的服务。服务应用在开始通信前绑定一个端口。
b. 一个是UNIX文件系统,文件输入输出,地址就是文件名。
2.套接字的端口:
TCP/IP每一个进程都有唯一的一个端口号。
3.套接字的协议类型
a.流套接字:TCP/IP实现连接,有序,可靠,双向链接。
b.数据套接字:UDP/IP协议,发送的数据有长度限制
c.原始套接字:允许对较低层次的协议直接访问,如IP,ICMP。所以可以用来操作网络层和传输层的应用。

在这里插入图片描述
服务端:
1.调用socket创建一个套接字,它是系统分配给服务进程的类似文件描述符的资源。
2.bind给套接字命名,服务端开始等待客户连接这个套接字
3系统调用listen创建一个队列,存放来自客户端的连接
4.服务器通过系统调用accept接收客户的连接
客户端:
1.调用socket创建一个未命名套接字,将服务器的命名套接字作为一个地址来调用connecct与服务器建立连接
2.建立连接后,像使用底层的文件描述符那样用套接字来实现双向数据的通信。通过流进行数据传输。

2.4 线程间的同步方式

1.互斥量(Mutex)
互斥对象机制。互斥对象只有一个,只有拥有互斥对象的线程才有访问公共资源的权限。保证同一时刻,只有一个线程访问共享资源。Java中的Synchronized关键字和各种Lock是这种机制。
2.信号量(Semphares):允许多个线程访问同一共享资源,有序。信号量相当于停车场车位。互斥相当于单个厕所坑位。
允许同一时刻多个线程访问同一资源,但要控制同一时刻访问此资源的最大线程数。
3.事件(Event):Wait/Notify
线程通知另一个线程。

2.5 进程的调度算法

先执行哪个线程,后执行哪个线程来让CPU的利用率最大。定义出的一些算法:
1.先到先服务
从就绪队列中选择最先进入的进程运行,直到运行完成或发生事件阻塞后放弃处理机。其他进程等待,不会中断它。
优点:简单,一个队列,公平。
缺点:有利于长进程,短进程可能不会被执行。有利于计算密集型(CPU密集型),不利于I/O密集型。
计算密集型(CPU密集型):计算多,CPU一直在运作,短进程上下文切换频繁,不适合CPU密集型。长进程不用上下文切换,一直在CPU运行,适合CPU密集型。
I/O密集型,大部分程序与网络磁盘有关,CPU消耗很少,时间都用在了等待I/O操作上。任务越多,CPU效率越高。大部分常见的都是I/O密集型。
2.最短作业优先
执行时间越短的进程预先被执行,后来的短进程通常不会打断它。
优点:相比于所有进程等待长进程执行,让短进程先执行,可以缩短所有线程等待时间。提高系统吞吐量。
系统吞吐量:单位时间内CPU从存储设备读取->处理->存储信息的量
影响吞吐量的因素:
存储设备的存取速度,读写速度;CPU性能

缺点:可能长进程不会被执行,也很难预计进程的执行时间。
3.最高响应比优先:
会考虑进程的等待时间长短和进程预计执行时间长短,从中选出响应比最高的进程执行。

等待时间相同,选执行时间短的;执行时间相同,选等待时间长的;
优点:短进程优先实行,长进程随着等待的时间增加,也会被执行。在减少等待时间的前提下,也让长进程得到执行。
缺点:每次调用要计算响应比,增加开销。
4.时间片轮换算法
剥夺策略。先给每个进程分配时间片,若进程执行时间超过允许时间,发生中断。调度程序暂停当前线程的执行,将其送到就绪队列的末尾,上下文切换到队首进程。
优点:简单易行,平均响应时间短
缺点:不利于处理紧急进程,时间片的大小对系统性能影响很大。

时间片的确定:系统对响应时间的要求;就绪队列中进程的数目;系统的处理能力;
5.优先级调度
分配优先级,先执行最高优先级进程。根据内存要求,时间要求或其他资源要求确定优先级

三、操作系统内存管理 - 为了多进程有效利用物理内存

总结:

3.1 操作系统内存管理主要是做什么?

内存分配与回收
虚拟地址转换为物理地址

3.2 内存管理机制了解吗?内存管理有哪几种方法?

连续管理:虚拟地址映射到连续的物理空间
非连续管理:虚拟地址映射到非连续的物理空间

块式: 将内存分为几个固定大小的块,每个块只包含一个进程运行。如果一个内存使用很小的进程分配了一个很大的内存空间,造成浪费,没有利用的空间称为碎片。
页式: 根据局部性原理,程序在运行的过程中,在某段时间内,只有一小部分数据会被经常用到。将进程的需要的内存和实际物理内存按页分割,程序空间对应连续虚拟内存,连续虚拟内存映射到实际离散的物理内存;将程序常用的数据映射到内存中,不常用的映射到磁盘中;
段氏: 每一段定义了一组逻辑信息;例如:有主程序段MAIN,子程序段X,数据段D及栈段S等。段氏管理通过段表对应逻辑地址和物理地址。

3.3 快表和多级页表

分页管理重要的两点:虚拟地址到物理地址转换要快;解决虚拟地址空间大,页表也会很大的问题;

快表:
存储在高速缓存存储器(Cache)中, 存储页表的一部分或者全部;以前需要访问两次内存;现在只需要访问一次内存,一次高速缓冲器。加速查询提高指令执行速度。

和缓存很像。

多级页表:
为了避免全部页表一直放在内存中占用过多的空间,特别是那些根本不需要的页表不需要保留在内存中。多级页表属于典型的时间换空间。

https://www.polarxiong.com/archives/多级页表如何节约内存.html

为了提高空间性能,提出多级页表,但多级页表是以浪费时间为前提,为此,提出快表。都是利用程序的局部性原理。

3.4 分页和分段的区别

共同点:
都是为了提高内存利用率,减少内存碎片
都是离散存储。每个页和段中的内存时连续的

区别:
页的大小是固定的,由操作系统决定;段的大小不固定,取决于当前运行的程序
分页仅仅是提高内存利用率,减少内存碎片。段的逻辑信息的单位,在程序中可以体现为代码段,数据段,更好满足用户需求。

3.5 逻辑(虚拟)地址和物理地址,CPU寻址了解吗?为什么需要虚拟地址?什么是虚拟内存?

早期,进程直接访问物理地址,一个进程可以访问全部物理内存,进程内存空间没有相互隔离,程序很容易被别的程序干扰;假如程序A要运行,运行内存不够,最小的程序B都是100M,要释放100M内存,需要和磁盘交换100M数据,效率低;由于哪个程序交换到磁盘上不确定,腾出的内存空间地址也不确定,程序C运行需要重定位;

所以需要解决三个问题:进程空间相互隔离;提高内存使用效率;程序运行不需要重定位

引入中间层虚拟内存:

比如说分页:

根据局部性原理,程序在运行的过程中,在某段时间内,只有一小部分数据会被经常用到。将进程的需要的内存和实际物理内存按页分割,程序空间对应连续虚拟内存,连续虚拟内存映射到实际离散的物理内存;将程序常用的数据映射到内存中,不常用的映射到磁盘中;

  1. 让程序拥有超过系统物理内存的空间。
  2. 使进程的内存空间相互隔离
  3. 提高效率
  4. 不用重定位
  5. 将连续的虚拟空间映射到不连续的物理内存空间

3.6 虚拟存储器,虚拟内存的技术实现?

将一部分常用数据放入内存,不常用的放入磁盘;需要加载到内存;不需要加载到磁盘;

技术:分页;分段

4.1 局部性原理, 页面置换算法

1.时局部性:程序的某条指令一旦执行,不久后可能再次执行,数据被访问,不就后可能再次被访问。时间局部因为程序中存在大量的循环操作
2.空间布局:一旦程序访问的某个存储单元,不久后,其附近的存储单元也将被访问。因为指令通常是顺序存放,顺序执行,数据也一般是以向量,数组,表等形式簇聚存储。

缺页中断:访问的页不在主存,需要操作系统调入主存后再进行访问。

发生缺页中断时,如果当前内存中没有空闲页面,操作系统必须在内存中选择一个页面将其移出内存。选择淘汰哪一页的规则叫页面置换算法,可以看成淘汰页面规则:
1.OPT页置换算法(最佳页面置换算法):理想情况,一般作为衡量其他置换算法的方法
2.FIFO页面置换算法(先进先出页面置换算法):淘汰最先进入内存的页面。
3.LRU页面置换算法(最近未使用页面置换算法):赋予每个页面一个字段,用来记录一个页面自上次被访问的时间T,当淘汰一个页面时,选择有页面中其T值最大的,即最近最久未被使用的页面淘汰。
4.LFU页面置换算法(最少使用页面排序算法):系统维护一个按最近一次访问的时间排序页面链表,链表首节点是最近刚刚使用过的页面,链表尾结点是最久未使用的页面。访问内存时,找到相应页面,并移到链表之首。缺页时,置换链表尾结点页面。内存使用越频繁的页面,被保留的时间相对越长。


分页

在这里插入图片描述
进程1和进程2的虚拟地址空间被映射到了不连续的物理地址空间内,意义重大,加入连续物理地址空间不够,但是不连续的地址空间很多,假如没有这种技术,程序没有办法运行。还共用了一部分物理地址空间,就是共享内存。

进程1的虚拟页VP2和VP3被交换到了磁盘中,在程序需要这两页时,Linux内核会产生缺页异常,然后异常管理程序会将其读到内存中。

分页机制实现需要硬件实现,硬件名字叫MMU(Memory Management Unit)。专门负责从虚拟地址到物理地址转换,也就是从虚拟页找到物理页。

3.2 内存管理机制了解吗?内存管理有哪几种方法?

有连续分配管理和非连续分配管理。
连续管理:一个用户程序分配一个连续的内存空间。如块式管理。
非连续管理:程序使用的内存分布在离散的内存中,如页式或段式管理。

1.块式管理:将内存分为几个固定大小的块,每个块只包含一个进程运行。如果一个内存使用很小的进程分配了一个很大的内存空间,造成浪费,没有利用的空间称为碎片。
2.页式管理:将主存分为大小相等固定的一页一页的形式。内存划分粒度更小,尽量使分配的内存刚好满足需要的内存,避免造成浪费,提高效率,减少碎片。通过页表对应逻辑地址和物理地址。
3.段氏管理:页式管理高了内存利用率,但页实际并无任何实际意义。段氏管理将主存分为一段一段的,每一段的空间比页的空间小很多。最重要的是段是有意义的,每一段定义了一组逻辑信息;例如:有主程序段MAIN,子程序段X,数据段D及栈段S等。段氏管理通过段表对应逻辑地址和物理地址。
4.段页式管理:结合段氏和页式管理的优点,把主存先分成若干段,每段又分成若干页,段与段之间即段的内部都是离散的。?

3.3 快表和多级页表 https://www.zhihu.com/question/63375062

分页管理重要的两点:虚拟地址到物理地址转换要快;解决虚拟地址空间大,页表也会很大的问题;

快表:
存储在高速缓存存储器(Cache)中, 存储页表的一部分或者全部;以前需要访问两次内存;现在只需要访问一次内存,一次高速缓冲器。加速查询提高指令执行速度。

流程:
根据虚拟地址的页号查块表;
如果该页号在快表中,则从快表中读取物理地址
如果该页号不在快表中,在访问内存中的页表,并将映射项添加到快表中
当快表填满后,又要登记新页时,就按照一定的淘汰策略淘汰块表中的一个页。

和缓存很像。

多级页表:
为了避免全部页表一直放在内存中占用过多的空间,特别是那些根本不需要的页表不需要保留在内存中。多级页表属于典型的时间换空间。

https://www.polarxiong.com/archives/多级页表如何节约内存.html

为了提高空间性能,提出多级页表,但多级页表是以浪费时间为前提,为此,提出快表。都是利用程序的局部性原理。

3.4 分页机制和分段机制的共同点和区别

共同点:
都是为了提高内存利用率,减少内存碎片
都是离散存储。每个页和段中的内存时连续的

区别:
页的大小是固定的,由操作系统决定;段的大小不固定,取决于当前运行的程序
分页仅仅是提高内存利用率,减少内存碎片。段的逻辑信息的单位,在程序中可以体现为代码段,数据段,更好满足用户需求。

3.5 逻辑(虚拟)地址和物理地址

编程只知道逻辑地址;物理地址是真实内存中地址,即内存地址寄存器中的地址。

3.6 CPU寻址了解吗?为什么需要虚拟地址?

现代处处理器使用虚拟寻址,CPU架构虚拟地址翻译成物理地址,访问真实的物理内存。由CPU中的一个内存管理单元的硬件完成虚拟地址到物理地址的转换。

在这里插入图片描述
为什么要有虚拟地址空间呢?
若将物理地址直接暴露给程序,缺点:
1.所有程序都可以访问所有物理内存,不安全,即进程之间的内存不是隔离的。
2.当内存不够时,将整个程序的数据换到磁盘中,效率低。
3.重定位,因为被腾出来的空间地址是不确定的
4.同时运行多个程序很难。如果微信运行时内存地址是1XXX后,QQ音乐运行也同时给内存地址1XXX,QQ音乐对内存的赋值会覆盖微信的数据,造成微信程序崩溃。

虚拟地址优势:
进程地址空间隔离
提高效率
不用重定位

四 虚拟内存

4.1 什么是虚拟内存?

就是为了解决…, 而在程序和物理地址的中间层构造的虚拟地址,将
虚拟内存,处于程序和物理地址的中间层,程序只认识虚拟内存。
以前:
现在:
好处:

  1. 让程序拥有超过系统物理内存的空间。
  2. 使进程的内存空间相互隔离
  3. 提高效率
  4. 不用重定位
  5. 将连续的虚拟空间映射到不连续的物理内存空间

4.2 局部性原理

既适用于数据结构,也适用于程序结构。局部性原理是虚拟内存技术的基础,因为程序运行具有局部性原理,才可以只装入部分程序到内存就开始运行。

程序在某个较短的时间内,程序执行局限于一小部分,访问的存储空间也局限于某个区域。

局部性原理表现在:
1.时局部性:程序的某条指令一旦执行,不久后可能再次执行,数据被访问,不就后可能再次被访问。时间局部因为程序中存在大量的循环操作
2.空间布局:一旦程序访问的某个存储单元,不久后,其附近的存储单元也将被访问。因为指令通常是顺序存放,顺序执行,数据也一般是以向量,数组,表等形式簇聚存储。

时间局部性:通过将最近使用的指令和数据保存到高速缓存存储器中。通常使用较大的高速缓存,并将预取机制集成到高速缓存控制逻辑中实现。虚拟内存技术实际上就是建立了“内存-外存”的两极存储器的结构,利用局部性原理实现高速缓存。

4.3 虚拟存储器

利用局部性原理,只装入一部分程序到内存,将其他部分留在外存,就可以启动程序执行。当程序需要的信息不再内存时,由操作系统将所需的内容调入内存。另一方面,操作系统将内存中暂时不使用的内容换到外存上。这样,计算机好像为用户提供了一个比实际内存的大的存储器–虚拟存储器。

以时间换空间,CPU计算时间,页的调入花费的时间换取更大的空间。

4.4 虚拟内存的技术实现

虚拟内存的实现需要建立在离散的内存管理方式的基础上。三种实现方式:
1.请求分页存储管理
2.请求分段存储管理
3.请求段页式存储管理

不管是哪种实现方式,都需要:
1.一定容量的内存和外存,程序载入时,一部分装入内存,其他部分留在外存。
2.缺页中断:如果执行的指令和访问的数据不在内存(缺页或缺段), 则由处理器通知操作系统将相应的页面或段调入内存,然后继续执行程序
3.虚拟地址空间:逻辑地址到物理地址交换。

4.5 页面置换算法

缺页中断:访问的页不在主存,需要操作系统调入主存后再进行访问。

发生缺页中断时,如果当前内存中没有空闲页面,操作系统必须在内存中选择一个页面将其移出内存。选择淘汰哪一页的规则叫页面置换算法,可以看成淘汰页面规则:
1.OPT页置换算法(最佳页面置换算法):理想情况,一般作为衡量其他置换算法的方法
2.FIFO页面置换算法(先进先出页面置换算法):淘汰最先进入内存的页面。
3.LRU页面置换算法(最近未使用页面置换算法):赋予每个页面一个字段,用来记录一个页面自上次被访问的时间T,当淘汰一个页面时,选择有页面中其T值最大的,即最近最久未被使用的页面淘汰。
4.LFU页面置换算法(最少使用页面排序算法):系统维护一个按最近一次访问的时间排序页面链表,链表首节点是最近刚刚使用过的页面,链表尾结点是最久未使用的页面。访问内存时,找到相应页面,并移到链表之首。缺页时,置换链表尾结点页面。内存使用越频繁的页面,被保留的时间相对越长。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值