缓存淘汰算法(LFU LRU FIFO)及进程的状态和转换

目录

一、缓存淘汰算法

1.LFU(Least Frequently Used)最近最不常用算法

2.LRU(Least Recently User)最近最少使用算法

3.FIFO(First in first out)先进先出算法

二、进程的状态和转换

1.最基本的三种状态

2.三种状态的切换(重点)

3.新增的进程状态(五态)

 4.新增状态(七态)

5.挂起进程具有的特征


一、缓存淘汰算法

缓存算法用于决定缓存系统中哪些数据应该被删去。

1.LFU(Least Frequently Used)最近最不常用算法

缓存淘汰算法(LFU LRU FIFO)及进程的状态和转换_第1张图片

主要思想:把使用频率最小的数据置换出去。

主要步骤

  1. 在缓存中查找需要的数据,如果缓存中有则将访问的数据从队列中取出,并将数据对应的频率计数加1,然后将其放到频率相同的数据队列的头部。
  2. 如果缓存中没有将需要访问的数据从磁盘中取出,加入到缓存队列的尾部,记频率为1。
  3. 如果缓存空间已满,淘汰尾部使用频率最低的数据。

举例

ABCD为数据,括号内是被使用的次数

初始状态:

缓存淘汰算法(LFU LRU FIFO)及进程的状态和转换_第2张图片

访问D后(访问次数加一,并排在相同次数最前):

缓存淘汰算法(LFU LRU FIFO)及进程的状态和转换_第3张图片

新增E后:

缓存淘汰算法(LFU LRU FIFO)及进程的状态和转换_第4张图片

缓存满时(淘汰次数最少的E):

缓存淘汰算法(LFU LRU FIFO)及进程的状态和转换_第5张图片

存在的问题

对于A而言,可能他在最开始某段时间集中被频繁地访问。但可能之后不会再被访问了,但由于他的次数远远大于其他数据,这使得它不会被轻易地淘汰。

对于E而言,可能他才刚刚被访问了第一次,后面可能会被频繁的访问。但由于他的次数只有一次,每次缓存满时都会先被淘汰。

2.LRU(Least Recently User)最近最少使用算法

缓存淘汰算法(LFU LRU FIFO)及进程的状态和转换_第6张图片

主要思想:把最长时间未被访问到的数据置换出去。

主要步骤

  1. 在缓存中查找客户端需要访问的数据。如果缓存中有,则将访问的数据从队列中取出,重新加入到缓存队列的头部。
  2. 如果缓存中没有,将需要访问的数据从磁盘中取出,加入到缓存队列的尾部;
  3. 如果此时缓存满了,淘汰队列尾部的数据,然后再在队列头部加入新数据。

 举例

初始状态:

缓存淘汰算法(LFU LRU FIFO)及进程的状态和转换_第7张图片

 访问D后:

缓存淘汰算法(LFU LRU FIFO)及进程的状态和转换_第8张图片

 新加E时缓存满了:

缓存淘汰算法(LFU LRU FIFO)及进程的状态和转换_第9张图片

 缓存淘汰算法(LFU LRU FIFO)及进程的状态和转换_第10张图片

存在的问题

当客户端需要大量访问历史数据时,这时历史数据被提到队头,其他数据可能会因为缓存满而舍弃。这时其他客户端想要访问其他数据时又会重新到磁盘访问,效率大大降低。

3.FIFO(First in first out)先进先出算法

缓存淘汰算法(LFU LRU FIFO)及进程的状态和转换_第11张图片

主要思想:最先进入的数据最先被淘汰

主要步骤

  1.  当缓存中有访问的数据时,直接访问不做任何处理。
  2. 缓存中没有时,读取磁盘将数据写入队列队头。
  3. 缓存满时直接淘汰最早进入的数据。

举例

初始状态:

缓存淘汰算法(LFU LRU FIFO)及进程的状态和转换_第12张图片

 访问C时(依然不做任何操作):

缓存淘汰算法(LFU LRU FIFO)及进程的状态和转换_第13张图片

 新加E时缓存满:

缓存淘汰算法(LFU LRU FIFO)及进程的状态和转换_第14张图片

 存在的问题

可能最先进入的数据是经常被访问的界面,这样操作会降低效率。

二、进程的状态和转换

1.最基本的三种状态

①运行态:进程当前占有CPU,并在CPU上运行。

②就绪态:一个进程已经具备运行条件,但没有分配CPU,暂时不能运行。当调度给该进程CPU时,立即可以运行。

③等待态:当前进程因等待某事件的发生而暂时不能运行的状态。即使这时CPU空闲也不能运行。

2.三种状态的切换(重点)

缓存淘汰算法(LFU LRU FIFO)及进程的状态和转换_第15张图片

就绪——>运行:在调度程序时,一旦调度到这个进程时,就发生这件事。

运行——>就绪:运行进程用完了CPU分给他的时间片(分时操作系统分配给每个运行的进程微观上的一段时间)或CPU处理机被抢占。

运行——>等待:这个进程对资源的访问得不到满足 或者初始化I/O操作等待结果 或者等待某一进程提供输入

等待——>就绪:等待的事情得到满足时执行。

3.新增的进程状态(五态)

缓存淘汰算法(LFU LRU FIFO)及进程的状态和转换_第16张图片

新建态:因为就绪态也是需要一个过程才能达到这样一个状态,就绪态之前的状态就为新建态。

终止态:最后对进程整个生命周期进行一个收尾。

 4.新增状态(七态)

缓存淘汰算法(LFU LRU FIFO)及进程的状态和转换_第17张图片

等待态→挂起等待态:操作系统根据当前资源状况和性能要求,可以决定把等待态进程对换出去成为挂起等待态。

挂起等待态→挂起就绪态:引起进程等待的事件发生之后,相应的挂起等待态进程将转换为挂起就绪态挂起就绪态→就绪态:当内存中没有就绪态进程,或者挂起就绪态进程具有比就绪态进程更高的优先级,系统将把挂起就绪态进程转换成就绪态。

就绪态→挂起就绪态:操作系统根据当前资源状况和性能要求,也可以决定把就绪态进程对换出去成为挂起就绪态。

挂起等待态→等待态:当一个进程等待一个事件时,原则上不需要把它调入内存。但是在下面一种情况下,这一状态变化是可能的。当一个进程退出后,主存已经有了一大块自由空间,而某个挂起等待态进程具有较高的优先级并且操作系统已经得知导致它阻塞的事件即将结束,此时便发生了这一状态变化。

运行态→挂起就绪态:当一个具有较高优先级的挂起等待态进程的等待事件结束后,它需要抢占 CPU,而此时主存空间不够,从而可能导致正在运行的进程转化为挂起就绪态。另外处于运行态的进程也可以自己挂起自己。

新建态→挂起就绪态:考虑到系统当前资源状况和性能要求,可以决定新建的进程将被对换出去成为挂起就绪态。

挂起进程等同于不在内存中的进程,因此挂起进程将不参与低级调度直到它们被调换进内存。

5.挂起进程具有的特征

  • 该进程不能立即被执行
  • 挂起进程可能会等待一个事件,但所等待的事件是独立于挂起条件的,事件结束并不能导致进程具备执行条件。 (等待事件结束后进程变为挂起就绪态)
  • 进程进入挂起状态是由于操作系统、父进程或进程本身阻止它的运行。
  • 结束进程挂起状态的命令只能通过操作系统或父进程发出。

你可能感兴趣的:(JavaEE-进阶,复习总结,缓存,面试,java)