日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

我和面试官之间关于操作系统的一场对弈 | 原力计划

發布時間:2024/8/23 windows 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 我和面试官之间关于操作系统的一场对弈 | 原力计划 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者 |?Guide哥

責編 | 伍杏玲

出品 | CSDN博客

大家好,我是 Guide 哥!很多讀者抱怨計算操作系統的知識點比較繁雜,自己也沒有多少耐心去看,但是面試的時候又經常會遇到。所以,我帶著我整理好的操作系統的常見問題來啦!這篇文章總結了一些我覺得比較重要的操作系統相關的問題比如進程管理、內存管理、虛擬內存等等。

文章形式通過大部分比較喜歡的面試官和求職者之間的對話形式展開。另外,Guide 哥也只是在大學的時候學習過操作系統,不過基本都忘了,為了寫這篇文章這段時間看了很多相關的書籍和博客。如果文中有任何需要補充和完善的地方,你都可以在評論區指出。如果覺得內容不錯的話,不要忘記點個在看哦!

我個人覺得學好操作系統還是非常有用的,具體可以看我昨天在星球分享的一段話:

這篇文章只是對一些操作系統比較重要概念的一個概覽,深入學習的話,建議大家還是老老實實地去看書。另外,這篇文章的很多內容參考了《現代操作系統》第三版這本書,非常感謝。

操作系統基礎

1.1 什么是操作系統?

?????????面試官 :先來個簡單問題吧!什么是操作系統?

???? 我 :我通過以下四點向您介紹一下什么是操作系統吧!

  • 操作系統(Operating System,簡稱 OS)是管理計算機硬件與軟件資源的程序,是計算機系統的內核與基石;

  • 操作系統本質上是運行在計算機上的軟件程序;

  • 操作系統為用戶提供一個與系統交互的操作界面;

  • 操作系統分內核與外殼(我們可以把外殼理解成圍繞著內核的應用程序,而內核就是能操作硬件的程序)。

  • 關于內核多插一嘴:內核負責管理系統的進程、內存、設備驅動程序、文件和網絡系統等等,決定著系統的性能和穩定性。是連接應用程序和硬件的橋梁。

    內核就是操作系統背后黑盒的核心。

    1.2 系統調用

    ?????????面試官 :什么是系統調用呢?能不能詳細介紹一下。

    ???? 我 :介紹系統調用之前,我們先來了解一下用戶態和系統態。

    根據進程訪問資源的特點,我們可以把進程在系統上的運行分為兩個級別:

  • 用戶態(user mode) : 用戶態運行的進程或可以直接讀取用戶程序的數據。

  • 系統態(kernel mode):可以簡單的理解系統態運行的進程或程序幾乎可以訪問計算機的任何資源,不受限制。

  • 說了用戶態和系統態之后,那么什么是系統調用呢?

    我們運行的程序基本都是運行在用戶態,如果我們調用操作系統提供的系統態級別的子功能咋辦呢?那就需要系統調用了!

    也就是說在我們運行的用戶程序中,凡是與系統態級別的資源有關的操作(如文件管理、進程控制、內存管理等),都必須通過系統調用方式向操作系統提出服務請求,并由操作系統代為完成。

    這些系統調用按功能大致可分為如下幾類:

  • 設備管理。完成設備的請求或釋放,以及設備啟動等功能。

  • 文件管理。完成文件的讀、寫、創建及刪除等功能。

  • 進程控制。完成進程的創建、撤銷、阻塞及喚醒等功能。

  • 進程通信。完成進程之間的消息傳遞或信號傳遞等功能。

  • 內存管理。完成內存的分配、回收以及獲取作業占用內存區大小及地址等功能。

  • 進程和線程

    2.1 進程和線程的區別

    ?????????面試官: 好的!我明白了!那你再說一下:進程和線程的區別。

    ???? 我:好的!下圖是 Java 內存區域,我們從 JVM 的角度來說一下線程和進程之間的關系吧!

    如果你對 Java 內存區域 (運行時數據區) 這部分知識不太了解的話可以閱讀一下這篇文章:《可能是把 Java 內存區域講的最清楚的一篇文章》

    從上圖可以看出:一個進程中可以有多個線程,多個線程共享進程的堆和方法區 (JDK1.8 之后的元空間)資源,但是每個線程有自己的程序計數器、虛擬機棧 和 本地方法棧。

    總結:線程是進程劃分成的更小的運行單位,一個進程在其執行的過程中可以產生多個線程。線程和進程最大的不同在于基本上各進程是獨立的,而各線程則不一定,因為同一進程中的線程極有可能會相互影響。線程執行開銷小,但不利于資源的管理和保護;而進程正相反。

    2.2 進程有哪幾種狀態?

    ?????????面試官 :那你再說說進程有哪幾種狀態?

    ???? 我 :我們一般把進程大致分為 5 種狀態,這一點和線程很像!

  • 創建狀態(new) :進程正在被創建,尚未到就緒狀態。

  • 就緒狀態(ready) :進程已處于準備運行狀態,即進程獲得了除了處理器之外的一切所需資源,一旦得到處理器資源(處理器分配的時間片)即可運行。

  • 運行狀態(running) :進程正在處理器上上運行(單核 CPU 下任意時刻只有一個進程處于運行狀態)。

  • 阻塞狀態(waiting) :又稱為等待狀態,進程正在等待某一事件而暫停運行如等待某資源為可用或等待 IO 操作完成。即使處理器空閑,該進程也不能運行。

  • 結束狀態(terminated) :進程正在從系統中消失。可能是進程正常結束或其他原因中斷退出運行。

  • 2.3 進程間的通信方式

    ?????????面試官 :進程間的通信常見的的有哪幾種方式呢?

    ???? 我 :大概有 7 種常見的進程間的通信方式。

    下面這部分總結參考了:《進程間通信 IPC (InterProcess Communication)》 這篇文章,推薦閱讀,總結的非常不錯。

  • 管道/匿名管道(Pipes) :用于具有親緣關系的父子進程間或者兄弟進程之間的通信。

  • 有名管道(Names Pipes) : 匿名管道由于沒有名字,只能用于親緣關系的進程間通信。為了克服這個缺點,提出了有名管道。有名管道嚴格遵循先進先出(first in first out)。有名管道以磁盤文件的方式存在,可以實現本機任意兩個進程通信。

  • 信號(Signal) :信號是一種比較復雜的通信方式,用于通知接收進程某個事件已經發生;

  • 消息隊列(Message Queuing) :消息隊列是消息的鏈表,具有特定的格式,存放在內存中并由消息隊列標識符標識。管道和消息隊列的通信數據都是先進先出的原則。與管道(無名管道:只存在于內存中的文件;命名管道:存在于實際的磁盤介質或者文件系統)不同的是消息隊列存放在內核中,只有在內核重啟(即,操作系統重啟)或者顯示地刪除一個消息隊列時,該消息隊列才會被真正的刪除。消息隊列可以實現消息的隨機查詢,消息不一定要以先進先出的次序讀取,也可以按消息的類型讀取.比 FIFO 更有優勢。消息隊列克服了信號承載信息量少,管道只能承載無格式字 節流以及緩沖區大小受限等缺。

  • 信號量(Semaphores) :信號量是一個計數器,用于多進程對共享數據的訪問,信號量的意圖在于進程間同步。這種通信方式主要用于解決與同步相關的問題并避免競爭條件。

  • 共享內存(Shared memory) :使得多個進程可以訪問同一塊內存空間,不同進程可以及時看到對方進程中對共享內存中數據的更新。這種方式需要依靠某種同步操作,如互斥鎖和信號量等。可以說這是最有用的進程間通信方式。

  • 套接字(Sockets) : 此方法主要用于在客戶端和服務器之間通過網絡進行通信。套接字是支持 TCP/IP 的網絡通信的基本操作單元,可以看做是不同主機之間的進程進行雙向通信的端點,簡單的說就是通信的兩方的一種約定,用套接字中的相關函數來完成通信過程。

  • 2.4 線程間的同步的方式

    ?????????面試官 :那線程間的同步的方式有哪些呢?

    ???? 我 :線程同步是兩個或多個共享關鍵資源的線程的并發執行。應該同步線程以避免關鍵的資源使用沖突。操作系統一般有下面三種線程同步的方式:

  • 互斥量(Mutex):采用互斥對象機制,只有擁有互斥對象的線程才有訪問公共資源的權限。因為互斥對象只有一個,所以可以保證公共資源不會被多個線程同時訪問。比如 Java 中的 synchronized 關鍵詞和各種 Lock 都是這種機制。

  • 信號量(Semphares) :它允許同一時刻多個線程訪問同一資源,但是需要控制同一時刻訪問此資源的最大線程數量。

  • 事件(Event) :Wait/Notify:通過通知操作的方式來保持多線程同步,還可以方便的實現多線程優先級的比較操。

  • 2.5 進程的調度算法

    ?????????面試官 :你知道操作系統中進程的調度算法有哪些嗎?

    ???? 我 :嗯嗯!這個我們大學的時候學過,是一個很重要的知識點!

    為了確定首先執行哪個進程以及最后執行哪個進程以實現最大 CPU 利用率,計算機科學家已經定義了一些算法,它們是:

    • 先到先服務(FCFS)調度算法?: 從就緒隊列中選擇一個最先進入該隊列的進程為之分配資源,使它立即執行并一直執行到完成或發生某事件而被阻塞放棄占用 CPU 時再重新調度。

    • 短作業優先(SJF)的調度算法?: 從就緒隊列中選出一個估計運行時間最短的進程為之分配資源,使它立即執行并一直執行到完成或發生某事件而被阻塞放棄占用 CPU 時再重新調度。

    • 時間片輪轉調度算法?: 時間片輪轉調度是一種最古老,最簡單,最公平且使用最廣的算法,又稱 RR(Round robin)調度。每個進程被分配一個時間段,稱作它的時間片,即該進程允許運行的時間。

    • 多級反饋隊列調度算法?:前面介紹的幾種進程調度的算法都有一定的局限性。如短進程優先的調度算法,僅照顧了短進程而忽略了長進程 。多級反饋隊列調度算法既能使高優先級的作業得到響應又能使短作業(進程)迅速完成。,因而它是目前被公認的一種較好的進程調度算法,UNIX 操作系統采取的便是這種調度算法。

    • 優先級調度?:為每個流程分配優先級,首先執行具有最高優先級的進程,依此類推。具有相同優先級的進程以 FCFS 方式執行。可以根據內存要求,時間要求或任何其他資源要求來確定優先級。

    操作系統內存管理基礎

    3.1 內存管理介紹

    ????????? 面試官: 操作系統的內存管理主要是做什么?

    ???? 我:操作系統的內存管理主要負責內存的分配與回收(malloc 函數:申請內存,free 函數:釋放內存),另外地址轉換也就是將邏輯地址轉換成相應的物理地址等功能也是操作系統內存管理做的事情。

    3.2 常見的幾種內存管理機制

    ????????? 面試官: 操作系統的內存管理機制了解嗎?內存管理有哪幾種方式?

    ???? 我:這個在學習操作系統的時候有了解過。

    簡單分為連續分配管理方式和非連續分配管理方式這兩種。連續分配管理方式是指為一個用戶程序分配一個連續的內存空間,常見的如 塊式管理 。同樣地,非連續分配管理方式允許一個程序使用的內存分布在離散或者說不相鄰的內存中,常見的如頁式管理 和 段式管理。

  • 塊式管理?:遠古時代的計算機操系統的內存管理方式。將內存分為幾個固定大小的塊,每個塊中只包含一個進程。如果程序運行需要內存的話,操作系統就分配給它一塊,如果程序運行只需要很小的空間的話,分配的這塊內存很大一部分幾乎被浪費了。這些在每個塊中未被利用的空間,我們稱之為碎片。

  • 頁式管理?:把主存分為大小相等且固定的一頁一頁的形式,頁較小,相對相比于塊式管理的劃分力度更大,提高了內存利用率,減少了碎片。頁式管理通過頁表對應邏輯地址和物理地址。

  • 段式管理?:頁式管理雖然提高了內存利用率,但是頁式管理其中的頁實際并無任何實際意義。段式管理把主存分為一段段的,每一段的空間又要比一頁的空間小很多 。但是,最重要的是段是有實際意義的,每個段定義了一組邏輯信息,例如,有主程序段 MAIN、子程序段 X、數據段 D 及棧段 S 等。段式管理通過段表對應邏輯地址和物理地址。

  • ?????????面試官 :回答的還不錯!不過漏掉了一個很重要的 段頁式管理機制 。段頁式管理機制結合了段式管理和頁式管理的優點。簡單來說段頁式管理機制就是把主存先分成若干段,每個段又分成若干頁,也就是說 段頁式管理機制 中段與段之間以及段的內部的都是離散的。

    ???? 我 :謝謝面試官!剛剛把這個給忘記了~

    3.3 快表和多級頁表

    ?????????面試官 :頁表管理機制中有兩個很重要的概念:快表和多級頁表,這兩個東西分別解決了頁表管理中很重要的兩個問題。你給我簡單介紹一下吧!

    ???? 我 :在分頁內存管理中,很重要的兩點是:

    虛擬地址到物理地址的轉換要快。

    解決虛擬地址空間大,頁表也會很大的問題。

    快表

    為了解決虛擬地址到物理地址的轉換速度,操作系統在 頁表方案 基礎之上引入了 快表 來加速虛擬地址到物理地址的轉換。我們可以把塊表理解為一種特殊的高速緩沖存儲器(Cache),其中的內容是頁表的一部分或者全部內容。作為頁表的 Cache,它的作用與頁表相似,但是提高了訪問速率。由于采用頁表做地址轉換,讀寫內存數據時 CPU 要訪問兩次主存。有了快表,有時只要訪問一次高速緩沖存儲器,一次主存,這樣可加速查找并提高指令執行速度。

    使用快表之后的地址轉換流程是這樣的:

  • 根據虛擬地址中的頁號查快表;

  • 如果該頁在快表中,直接從快表中讀取相應的物理地址;

  • 如果該頁不在快表中,就訪問內存中的頁表,再從頁表中得到物理地址,同時將頁表中的該映射表項添加到快表中;

  • 當快表填滿后,又要登記新頁時,就按照一定的淘汰策略淘汰掉快表中的一個頁。

  • 看完了之后你會發現快表和我們平時經常在我們開發的系統使用的緩存(比如 Redis)很像,的確是這樣的,操作系統中的很多思想、很多經典的算法,你都可以在我們日常開發使用的各種工具或者框架中找到它們的影子。

    多級頁表

    引入多級頁表的主要目的是為了避免把全部頁表一直放在內存中占用過多空間,特別是那些根本就不需要的頁表就不需要保留在內存中。多級頁表屬于時間換空間的典型場景,具體可以查看下面這篇文章

    多級頁表如何節約內存:https://www.polarxiong.com/archives/多級頁表如何節約內存.html

    總結

    為了提高內存的空間性能,提出了多級頁表的概念;但是提到空間性能是以浪費時間性能為基礎的,因此為了補充損失的時間性能,提出了快表(即 TLB)的概念。不論是快表還是多級頁表實際上都利用到了程序的局部性原理,局部性原理在后面的虛擬內存這部分會介紹到。

    3.4 分頁機制和分段機制的共同點和區別

    ?????????面試官 :分頁機制和分段機制有哪些共同點和區別呢?

    ???? 我 :

    共同點 :

  • 分頁機制和分段機制都是為了提高內存利用率,較少內存碎片。

  • 頁和段都是離散存儲的,所以兩者都是離散分配內存的方式。但是,每個頁和段中的內存是連續的。

  • 區別 :

  • 頁的大小是固定的,由操作系統決定;而段的大小不固定,取決于我們當前運行的程序。

  • 分頁僅僅是為了滿足操作系統內存管理的需求,而段是邏輯信息的單位,在程序中可以體現為代碼段,數據段,能夠更好滿足用戶的需要。

  • 3.5 邏輯(虛擬)地址和物理地址

    ?????????面試官 :你剛剛還提到了邏輯地址和物理地址這兩個概念,我不太清楚,你能為我解釋一下不?

    ???? 我:em…好的嘛!我們編程一般只有可能和邏輯地址打交道,比如在 C 語言中,指針里面存儲的數值就可以理解成為內存里的一個地址,這個地址也就是我們說的邏輯地址,邏輯地址由操作系統決定。物理地址指的是真實物理內存中地址,更具體一點來說就是內存地址寄存器中的地址。物理地址是內存單元真正的地址。

    3.6 CPU 尋址了解嗎?為什么需要虛擬地址空間?

    ?????????面試官 :CPU 尋址了解嗎?為什么需要虛擬地址空間?

    ???? 我 :這部分我真不清楚!

    于是面試完之后我默默去查閱了相關文檔!留下了沒有技術的淚水。

    這部分內容參考了 Microsoft 官網的介紹,地址:https://msdn.microsoft.com/zh-cn/library/windows/hardware/hh439648(v=vs.85).aspx

    現代處理器使用的是一種稱為 虛擬尋址(Virtual Addressing) 的尋址方式。使用虛擬尋址,CPU 需要將虛擬地址翻譯成物理地址,這樣才能訪問到真實的物理內存。實際上完成虛擬地址轉換為物理地址轉換的硬件是 CPU 中含有一個被稱為 內存管理單元(Memory Management Unit, MMU) 的硬件。如下圖所示:

    為什么要有虛擬地址空間呢?

    先從沒有虛擬地址空間的時候說起吧!沒有虛擬地址空間的時候,程序都是直接訪問和操作的都是物理內存 。但是這樣有什么問題呢?

  • 用戶程序可以訪問任意內存,尋址內存的每個字節,這樣就很容易(有意或者無意)破壞操作系統,造成操作系統崩潰。

  • 想要同時運行多個程序特別困難,比如你想同時運行一個微信和一個 QQ 音樂都不行。為什么呢?舉個簡單的例子:微信在運行的時候給內存地址 1xxx 賦值后,QQ 音樂也同樣給內存地址 1xxx 賦值,那么 QQ 音樂對內存的賦值就會覆蓋微信之前所賦的值,這就造成了微信這個程序就會崩潰。

  • 總結來說:如果直接把物理地址暴露出來的話會帶來嚴重問題,比如可能對操作系統造成傷害以及給同時運行多個程序造成困難。

    通過虛擬地址訪問內存有以下優勢:

    • 程序可以使用一系列相鄰的虛擬地址來訪問物理內存中不相鄰的大內存緩沖區。

    • 程序可以使用一系列虛擬地址來訪問大于可用物理內存的內存緩沖區。當物理內存的供應量變小時,內存管理器會將物理內存頁(通常大小為 4 KB)保存到磁盤文件。數據或代碼頁會根據需要在物理內存與磁盤之間移動。

    • 不同進程使用的虛擬地址彼此隔離。一個進程中的代碼無法更改正在由另一進程或操作系統使用的物理內存。

    虛擬內存

    4.1 什么是虛擬內存(Virtual Memory)?

    ?????????面試官 :再問你一個常識性的問題!什么是虛擬內存(Virtual Memory)?

    ???? 我 :這個在我們平時使用電腦特別是 Windows 系統的時候太常見了。很多時候我們使用點開了很多占內存的軟件,這些軟件占用的內存可能已經遠遠超出了我們電腦本身具有的物理內存。為什么可以這樣呢?正是因為 虛擬內存 的存在,通過 虛擬內存 可以讓程序可以擁有超過系統物理內存大小的可用內存空間。另外,虛擬內存為每個進程提供了一個一致的、私有的地址空間,它讓每個進程產生了一種自己在獨享主存的錯覺(每個進程擁有一片連續完整的內存空間)。這樣會更加有效地管理內存并減少出錯。

    虛擬內存是計算機系統內存管理的一種技術,我們可以手動設置自己電腦的虛擬內存。不要單純認為虛擬內存只是“使用硬盤空間來擴展內存“的技術。虛擬內存的重要意義是它定義了一個連續的虛擬地址空間,并且 把內存擴展到硬盤空間。推薦閱讀:《虛擬內存的那點事兒》

    維基百科中有幾句話是這樣介紹虛擬內存的。

    虛擬內存:使得應用程序認為它擁有連續的可用的內存(一個連續完整的地址空間),而實際上,它通常是被分隔成多個物理內存碎片,還有部分暫時存儲在外部磁盤存儲器上,在需要時進行數據交換。與沒有使用虛擬內存技術的系統相比,使用這種技術的系統使得大型程序的編寫變得更容易,對真正的物理內存(例如 RAM)的使用也更有效率。目前,大多數操作系統都使用了虛擬內存,如 Windows 家族的“虛擬內存”;Linux 的“交換空間”等。From:https://zh.wikipedia.org/wiki/虛擬內存

    4.2 局部性原理

    ?????????面試官 :要想更好地理解虛擬內存技術,必須要知道計算機中著名的局部性原理。另外,局部性原理既適用于程序結構,也適用于數據結構,是非常重要的一個概念。

    ???? 我 :局部性原理是虛擬內存技術的基礎,正是因為程序運行具有局部性原理,才可以只裝入部分程序到內存就開始運行。

    以下內容摘自《計算機操作系統教程》 第 4 章存儲器管理。

    早在 1968 年的時候,就有人指出我們的程序在執行的時候往往呈現局部性規律,也就是說在某個較短的時間段內,程序執行局限于某一小部分,程序訪問的存儲空間也局限于某個區域。

    局部性原理表現在以下兩個方面:

    時間局部性?:如果程序中的某條指令一旦執行,不久以后該指令可能再次執行;如果某數據被訪問過,不久以后該數據可能再次被訪問。產生時間局部性的典型原因,是由于在程序中存在著大量的循環操作。

    空間局部性?:一旦程序訪問了某個存儲單元,在不久之后,其附近的存儲單元也將被訪問,即程序在一段時間內所訪問的地址,可能集中在一定的范圍之內,這是因為指令通常是順序存放、順序執行的,數據也一般是以向量、數組、表等形式簇聚存儲的。

    時間局部性是通過將近來使用的指令和數據保存到高速緩存存儲器中,并使用高速緩存的層次結構實現。空間局部性通常是使用較大的高速緩存,并將預取機制集成到高速緩存控制邏輯中實現。虛擬內存技術實際上就是建立了 “內存一外存”的兩級存儲器的結構,利用局部性原理實現髙速緩存。

    4.3 虛擬存儲器

    ?????????面試官 :都說了虛擬內存了。你再講講虛擬存儲器把!

    ???? 我 :

    這部分內容來自:王道考研操作系統知識點整理。

    基于局部性原理,在程序裝入時,可以將程序的一部分裝入內存,而將其他部分留在外存,就可以啟動程序執行。由于外存往往比內存大很多,所以我們運行的軟件的內存大小實際上是可以比計算機系統實際的內存大小大的。在程序執行過程中,當所訪問的信息不在內存時,由操作系統將所需要的部分調入內存,然后繼續執行程序。另一方面,操作系統將內存中暫時不使用的內容換到外存上,從而騰出空間存放將要調入內存的信息。這樣,計算機好像為用戶提供了一個比實際內存大的多的存儲器——虛擬存儲器。

    實際上,我覺得虛擬內存同樣是一種時間換空間的策略,你用 CPU 的計算時間,頁的調入調出花費的時間,換來了一個虛擬的更大的空間來支持程序的運行。不得不感嘆,程序世界幾乎不是時間換空間就是空間換時間。

    4.4 虛擬內存的技術實現

    ?????????面試官 :虛擬內存技術的實現呢?

    ???? 我 :虛擬內存的實現需要建立在離散分配的內存管理方式的基礎上。虛擬內存的實現有以下三種方式:

  • 請求分頁存儲管理?:建立在分頁管理之上,為了支持虛擬存儲器功能而增加了請求調頁功能和頁面置換功能。請求分頁是目前最常用的一種實現虛擬存儲器的方法。請求分頁存儲管理系統中,在作業開始運行之前,僅裝入當前要執行的部分段即可運行。假如在作業運行的過程中發現要訪問的頁面不在內存,則由處理器通知操作系統按照對應的頁面置換算法將相應的頁面調入到主存,同時操作系統也可以將暫時不用的頁面置換到外存中。

  • 請求分段存儲管理?:建立在分段存儲管理之上,增加了請求調段功能、分段置換功能。請求分段儲存管理方式就如同請求分頁儲存管理方式一樣,在作業開始運行之前,僅裝入當前要執行的部分段即可運行;在執行過程中,可使用請求調入中斷動態裝入要訪問但又不在內存的程序段;當內存空間已滿,而又需要裝入新的段時,根據置換功能適當調出某個段,以便騰出空間而裝入新的段。

  • 請求段頁式存儲管理

  • 這里多說一下?很多人容易搞混請求分頁與分頁存儲管理,兩者有何不同呢?

    請求分頁存儲管理建立在分頁管理之上。他們的根本區別是是否將程序全部所需的全部地址空間都裝入主存,這也是請求分頁存儲管理可以提供虛擬內存的原因,我們在上面已經分析過了。

    它們之間的根本區別在于是否將一作業的全部地址空間同時裝入主存。請求分頁存儲管理不要求將作業全部地址空間同時裝入主存。基于這一點,請求分頁存儲管理可以提供虛存,而分頁存儲管理卻不能提供虛存。

    不管是上面那種實現方式,我們一般都需要:

  • 一定容量的內存和外存:在載入程序的時候,只需要將程序的一部分裝入內存,而將其他部分留在外存,然后程序就可以執行了;

  • 缺頁中斷:如果需執行的指令或訪問的數據尚未在內存(稱為缺頁或缺段),則由處理器通知操作系統將相應的頁面或段調入到內存,然后繼續執行程序;

  • 虛擬地址空間?:邏輯地址到物理地址的變換。

  • 4.5 頁面置換算法

    ?????????面試官 :虛擬內存管理很重要的一個概念就是頁面置換算法。那你說一下 頁面置換算法的作用?常見的頁面置換算法有哪些?

    ???? 我 :

    這個題目經常作為筆試題出現,網上已經給出了很不錯的回答,我這里只是總結整理了一下。

    地址映射過程中,若在頁面中發現所要訪問的頁面不在內存中,則發生缺頁中斷。

    缺頁中斷就是要訪問的頁不在主存,需要操作系統將其調入主存后再進行訪問。在這個時候,被內存映射的文件實際上成了一個分頁交換文件。

    當發生缺頁中斷時,如果當前內存中并沒有空閑的頁面,操作系統就必須在內存選擇一個頁面將其移出內存,以便為即將調入的頁面讓出空間。用來選擇淘汰哪一頁的規則叫做頁面置換算法,我們可以把頁面置換算法看成是淘汰頁面的規則。

    • OPT 頁面置換算法(最佳頁面置換算法)?:最佳(Optimal, OPT)置換算法所選擇的被淘汰頁面將是以后永不使用的,或者是在最長時間內不再被訪問的頁面,這樣可以保證獲得最低的缺頁率。但由于人們目前無法預知進程在內存下的若千頁面中哪個是未來最長時間內不再被訪問的,因而該算法無法實現。一般作為衡量其他置換算法的方法。

    • FIFO(First In First Out) 頁面置換算法(先進先出頁面置換算法)?: 總是淘汰最先進入內存的頁面,即選擇在內存中駐留時間最久的頁面進行淘汰。

    • LRU (Least Currently Used)頁面置換算法(最近最久未使用頁面置換算法)?:LRU算法賦予每個頁面一個訪問字段,用來記錄一個頁面自上次被訪問以來所經歷的時間 T,當須淘汰一個頁面時,選擇現有頁面中其 T 值最大的,即最近最久未使用的頁面予以淘汰。

    • LFU (Least Frequently Used)頁面置換算法(最少使用頁面置換算法)?: 該置換算法選擇在之前時期使用最少的頁面作為淘汰頁。

    參考:

    《計算機操作系統—湯小丹》第四版

    《深入理解計算機系統》

    https://zh.wikipedia.org/wiki/輸入輸出內存管理單元

    https://baike.baidu.com/item/快表/19781679

    https://www.jianshu.com/p/1d47ed0b46d5

    https://www.studytonight.com/operating-system

    https://www.geeksforgeeks.org/interprocess-communication-methods/

    https://juejin.im/post/59f8691b51882534af254317

    王道考研操作系統知識點整理:https://wizardforcel.gitbooks.io/wangdaokaoyan-os/content/13.html

    版權聲明:本文為CSDN博主「Guide哥」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。

    原文鏈接:https://blog.csdn.net/qq_34337272/java/article/details/105291118

    ?

    推薦閱讀

    • 在 520 這天,竟然有人把 Docker講清楚了? | 原力計劃

    • 如何使用 SQL Server FILESTREAM 存儲非結構化數據?這篇文章告訴你!

    • 對不起,我把APP也給爬了

    • 平安科技王健宗:所有 AI 前沿技術,都可以在聯邦學習中大展身手!

    • 踢翻這碗狗糧:程序員花 7 個月敲出 eBay,只因女票喜歡糖果盒!

    • 又一年5.20,用Python助力程序員脫單大攻略(視頻版)

    • 斗地主嗎?能學區塊鏈那種! | 原力計劃

    真香,朕在看了!

    總結

    以上是生活随笔為你收集整理的我和面试官之间关于操作系统的一场对弈 | 原力计划的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 亚洲综合视频在线播放 | 欧美丰满美乳xxx高潮www | 精品在线一区二区三区 | 玩偶游戏在线观看免费 | 91久久精品一区 | 最新毛片网站 | 日本在线视频一区二区三区 | 亚洲国产精品久久久久爰性色 | 国产精品xxx | 日本三级456 | 无遮挡在线 | 日本久久高清视频 | 欧美人妻精品一区二区 | 日日插夜夜爽 | 国产在线精品一区二区 | 黄色h视频 | 在线观看日韩av电影 | 欧美91成人网 | 精品成人av一区二区在线播放 | 97精品在线观看 | 你懂的网址在线观看 | 绝顶高潮合集videos | 日韩免费在线观看 | 国产女主播自拍 | 亚洲午夜精品视频 | 日韩色图视频 | 欧美一级淫片免费视频黄 | www99热| 一区二区伦理片 | 黄色av资源| av不卡在线免费观看 | 动漫美女靠逼 | yw在线观看 | 特级西西444www大精品视频 | 成年人av网站 | 91久久精品一区二区 | 久久久久青草 | 国产99久久九九精品无码免费 | 免费荫蒂添的好舒服视频 | 美国免费高清电影在线观看 | 亚洲小说春色综合另类 | 性人久久久久 | 国产一二区在线 | 91色啪 | 美女网站免费 | 婷婷色婷婷开心五月四房播播 | 性xxxx搡xxxxx搡欧美 | 久久99久久久 | 寻找身体恐怖电影免费播放 | 欧美日韩在线免费 | 日韩精品在线视频免费观看 | 国产成人久久精品流白浆 | 美日韩中文字幕 | 亚洲激情专区 | 成全影视在线观看第8季 | 国产日韩一区二区在线观看 | 国产一区黄色 | 色欲久久久天天天综合网精品 | 亚洲综合激情小说 | 国产爆乳无码一区二区麻豆 | www四虎| 亚洲av片在线观看 | 精品亚洲永久免费精品 | 男女草比视频 | 亚洲五月网 | 锕锕锕锕锕锕锕锕 | 国产理论一区 | 在线观看理论片 | 在线免费观看视频网站 | 99国产精品免费视频 | 成人在线高清视频 | 婷婷激情丁香 | 欧美a一级| 91偷拍网 | 天堂中文在线官网 | 一区二区天堂 | 亚洲成人18 | www.精品久久| 97国产精品人人爽人人做 | 亚洲免费不卡视频 | 中文字幕日产av | 777四色| 亚洲欧洲在线观看 | aa视频在线| 亚洲精品男人的天堂 | 黄色免费成人 | 日本理论片午伦夜理片在线观看 | 国产免费资源 | 伊人久久久久久久久久久 | 丰满白嫩尤物一区二区 | 国产乱淫av | 国产天堂久久 | 少妇一晚三次一区二区三区 | 男女做爰猛烈高潮描写 | 免播放器在线视频 | 老熟女毛茸茸 | 狠狠cao日日穞夜夜穞av | 免费在线黄网站 | 久久精品在线观看 |