缓存淘汰算法(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)最近最不常用算法

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

主要步骤

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

举例

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

初始状态:

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

新增E后:

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

存在的问题

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

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

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

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

主要步骤

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

 举例

初始状态:

 访问D后:

 新加E时缓存满了:

 

存在的问题

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

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

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

主要步骤

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

举例

初始状态:

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

 新加E时缓存满:

 存在的问题

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

二、进程的状态和转换

1.最基本的三种状态

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

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

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

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

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

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

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

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

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

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

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

 4.新增状态(七态)

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

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

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

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

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

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

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

5.挂起进程具有的特征

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/38518.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV图像处理——模版匹配和霍夫变换

目录 模版匹配原理实现 霍夫变换霍夫线检测 模版匹配 原理 实现 rescv.matchTemplate(img,template,method)import numpy as np import cv2 as cv import matplotlib.pyplot as pltimgcv.imread(./汪学长的随堂资料/6/模板匹配/lena.jpg) templatecv.imread(./汪学长的随堂资…

UniApp 使用命令创建页面的详细指南

系列文章目录 文章目录 系列文章目录前言一、安装Uni-CLI二、创建页面三、页面创建命令四、页面结构五、页面使用总结 前言 UniApp是一款跨平台的前端框架,可以用于开发同时运行在多个平台(如微信小程序、H5、App等)的应用程序。本文将详细介…

系统架构设计师---考试通关练习题

第一章 系统架构设计师概述 1 .以下()不是现代信息系统的架构的三个要素。 A.构件 B.模式 C.规划 D.属性 解析:现代信息系统的架构有三个要素,即构件、模式和规划。 答案:D 2. 软件系统架构是关于软件系统的结构、行为和()的高级抽象。 A.构件 B.模式 C…

centos-stream-9 centos9 配置国内yum源 阿里云源

源配置 tips: yum配置文件路径 /etc/yum.repos.d/centos.repo 1.备份源配置 [Very Important!]mv /etc/yum.repos.d/centos.repo /etc/yum.repos.d/centos.repo.backup2.Clean Cache: yum clean all3.Backup the Old CentOS-Base.repo If exist this file.cd /etc/yum.repos.…

使用chatGPT-4 畅聊量子物理学(三)

集合了人类智慧的照片,来自 1927 年举行的第五届索尔维国际会议。 Omer 什么是“物理系统在被测量之前不具有确定的属性。量子力学只能预测给定测量的可能结果的概率分布" ChatGPT 这句话描述了量子力学中的一种基本原则,即“物理系统在被测量之前…

手写线程池的过程与思考

线程池的抽象接口 public interface SelfThreadPool {// 提交任务到线程池void execute(Runnable runnable);//关闭void shutdown();//获取线程池初始化的大小int getInitSize();//获取线程池最大的大小int getMaxSize();// 获取线程池核心线程数量,int getCoreSize();// 获取…

世微AP2813 平均电流双路降压恒流驱动器 LED储能电源驱动指示灯IC 可恒流可爆闪 可双路恒流

产品描述 AP2813 是一款双路降压恒流驱动器,高效率、外围简单、内置功率管,适用于 5-80V 输入的高精度降压 LED 恒流驱动芯片。内置功率管输出最大功率可达12W,最大电流 1.2A。AP2813 一路直亮,另外一路通过 MODE1 切换全亮,爆闪…

利用OpenCV光流算法实现视频特征点跟踪

光流简介 光流(optical flow)是运动物体在观察成像平面上的像素运动的瞬时速度。光流法是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法。…

大模型PEFT技术原理(二):P-Tuning、P-Tuning v2

随着预训练模型的参数越来越大,尤其是175B参数大小的GPT3发布以来,让很多中小公司和个人研究员对于大模型的全量微调望而却步,近年来研究者们提出了各种各样的参数高效迁移学习方法(Parameter-efficient Transfer Learning&#x…

css鼠标样式 cursor: pointer

cursor: none; cursor:not-allowed; 禁止选择 user-select: none; pointer-events:none;禁止触发事件, 该样式会阻止默认事件的发生,但鼠标样式会变成箭头

Hlang社区-前端社区宣传首页实现

文章目录 前言页面结构固定钉头部轮播JS特效完整代码总结前言 这里的话,博主其实也是今年参与考研的大军之一,所以的话,是抽空去完成这个项目的,当然这个项目的肯定是可以在较短的时间内完成的。 那么废话不多说,昨天也是干到1点多,把这个首页写出来了。先看看看效果吧:…

Linux中 socket编程中多进程/多线程TCP并发服务器模型

一、循环服务器(while)【不常用】 一次只能处理一个客户端的请求,等这个客户端退出后,才能处理下一个客户端。缺点:循环服务器所处理的客户端不能有耗时操作。 模型 sfd socket(); bind(); listen(); while(1) {newfd accept();while(1){r…

分别在linux和windows上设置socket为阻塞模式

在 Linux 和 Windows 系统中,都可以将 socket 设置为非阻塞模式。 Linux平台 在 Linux 系统中,可以使用 fcntl 函数来设置 socket 为非阻塞模式。例如: int flags fcntl(socket_fd, F_GETFL, 0); fcntl(socket_fd, F_SETFL, flags | O_NO…

【问心篇】渴望、热情和选择

加班太严重完全没有时间学习,怎么办? 我真的不算聪明的人,但是,我对学习真的是有渴望的。说得好听一点,我希望自己在不停地成长,不辜负生活在这个信息化大变革的时代。说得不好的一点,就是我从…

断点续传的未来发展趋势与前景展望

断点续传是一种在网络传输中断后,能够从中断的位置继续传输的技术。它可以有效地避免因为网络不稳定、服务器故障、用户操作等原因导致的传输失败,节省了用户的时间和流量,提高了传输的效率和可靠性。断点续传在很多场景中都有广泛的应用&…

AI 绘画Stable Diffusion 研究(八)sd采样方法详解

大家好,我是风雨无阻。 本文适合人群: 希望了解stable Diffusion WebUI中提供的Sampler究竟有什么不同,想知道如何选用合适采样器以进一步提高出图质量的朋友。 想要进一步了解AI绘图基本原理的朋友。 对stable diffusion AI绘图感兴趣的朋…

【洛谷 P5736】【深基7.例2】质数筛 题解(埃氏筛法)

【深基7.例2】质数筛 题目描述 输入 n n n 个不大于 1 0 5 10^5 105 的正整数。要求全部储存在数组中,去除掉不是质数的数字,依次输出剩余的质数。 输入格式 第一行输入一个正整数 n n n,表示整数个数。 第二行输入 n n n 个正整数 …

jquery如何修改选中状态

jquery修改选中状态的方法:1、使用addClass和removeClass方法,可以向选中的元素添加一个多个类名,从而改变其样式或状态;2、使用toggleClass方法,可以在选中元素上添加或移除一个类名,如果该类名已经存在&a…

208. 实现 Trie (前缀树)

Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。 请你实现 Trie 类: Trie() 初始化前缀树对象…

手撕LFU缓存

手撕LRU缓存_右大臣的博客-CSDN博客 是LRU的升级,多了一个访问次数的维度 实现 LFUCache 类: LFUCache(int capacity) - 用数据结构的容量 capacity 初始化对象int get(int key) - 如果键 key 存在于缓存中,则获取键的值,否则返…