緩存淘汰算法(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.pswp.cn/news/38518.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/38518.shtml
英文地址,請注明出處:http://en.pswp.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 存在于緩存中,則獲取鍵的值,否則返…