1. 程式人生 > >作業系統練習-實體記憶體管理

作業系統練習-實體記憶體管理

單選題

(2009聯考)分割槽分配記憶體管理方式的主要保護措施是( )

  •  界地址保護
  •  程式程式碼保護
  •  資料保護
  •  棧保護

為了防止程式的訪問地址越界,所以需要進行界地址保護,由硬體負責檢查程式訪問地址是否合法。

以ucore為例,在ucore lab1中的,x86保護模式中的分段機制在某種程度上可以看成是一種分割槽方式的實體記憶體分配。bootloader在啟動後,就要完成分段(分割槽)工作,即建立兩個段,核心程式碼段和核心資料段,一個段就是一個分割槽。在表述段屬性的段描述符(mmu.h中的segdesc資料結構)中,有兩個重要的域(欄位,field),起始地址(sd_base_15_0,sd_base_23_16,sd_base_31_24)、段限長(sd_lim_15_0,sd_lim_19_16)。這個段大小就是分割槽的界地址。80386 CPU在每一次記憶體定址過程中,都會比較EIP(即段內偏移)是否大於段限長,如果大於段限長,這會產生一個記憶體訪問錯誤異常。

(2010聯考)某基於動態分割槽儲存管理的計算機,其主存容量為55MB(初始為空),採用最佳適配(Best Fit)演算法,分配和釋放的順序為:分配15MB,分配30MB,釋放15MB,分配8MB,分配6MB,則此時主存中最大空閒分割槽的大小是( )

  •  7MB
  •  9MB
  •  10MB
  •  15MB

空閒分割槽鏈變化:55(初始);40(分配15MB後);10(分配30MB後);10->15(釋放15MB後);2->15(分配8MB後);2->9(分配6MB後)。

以ucore為例,能否在ucore中做個試驗完成上述演算法?

(2009聯考)一個分段儲存系統中,地址長度為32位,其中段號佔8位,則最大段長為( )

  •  2^8位元組
  •  2^16位元組
  •  2^24位元組
  •  2^32位元組

在段訪問機制中,如果採用的是單地址方案,則段號的位數+段內偏移的位數=地址長度,所以段內偏移佔了32 - 8 = 24 位元。

以ucore lab1為例,在段訪問機制上,80386採用了不同,且更加靈活的段暫存器+地址暫存器方案,(可看OS原理部分的"實體記憶體管理:第2部分"ppt的第10頁),即CS中的值(稱為選擇子,selector)是段號,作為索引,指向了一個段描述符表中的一個段描述符。 段描述符中的一個欄位是段基址(32位),這個32位段基址+段內偏移(即32位的EIP)形成了最終的線性地址(如果使能頁機制,則也就是最終的實體地址了)。 所以,如果是這道題說明了採用80386方式,結果就不一樣了。

(2010聯考)某計算機採用二級頁表的分頁儲存管理方式,按位元組編址,頁大小為2^10位元組,頁表項大小為2位元組,邏輯地址結構為“|頁目錄號|頁表|頁內偏移量|”邏輯地址空間大小為2^16頁,則表示整個邏輯地址空間的頁目錄表中包含表項的個數至少為( )

  •  64
  •  128
  •  256
  •  512

頁大小為2^10B,頁表項大小為2B,一頁可以存放2^9個頁表項,邏輯地址空間大小為2^16頁,需要2^16個頁表項,需要2^16/2^9 = 2^7 = 128個頁面儲存頁表項。所以頁目錄表中包含的表項至少為128。

以ucore lab2為例,80386保護模式在使能頁機制後,採用的是二級頁表,32位地址空間,頁大小為2^12位元組,頁表項為4位元組,邏輯地址結構為“|頁目錄號|頁表|頁內偏移量|”邏輯地址空間大小為2^20頁,則也目錄表包含的表項個數為1024. 你覺得對嗎?

(武漢理工大學)段式儲存管理系統中,一個程式如何分段是在( )決定的。

  •  分配主存時
  •  程式設計師程式設計時
  •  裝作業時
  •  程式執行時

程式設計師在程式設計時,其實已經確定了哪些是程式碼,哪些是資料。所以編譯器可以把程式碼放到程式碼段,資料放到資料段,作業系統可以根據編譯器的設定把程式載入到記憶體中的程式碼段和資料段執行。

以ucore lab1為例,學員編寫檔案有程式碼和資料兩部分,gcc把程式碼放到程式碼段,資料放到資料段,並形成ELF格式的ucore kernel(這其實也是一個程式)。bootloader把ucore的程式碼或資料放到它設定好的核心程式碼段和核心資料段中。ucore lab5以後,ucore也可以載入應用程式到使用者程式碼段和使用者資料段中。

一般情況下,____的速度最快

  •  L1 cache
  •  L2 cache
  •  Main Memory
  •  Disk

解釋:訪問速度上 cache > Main Memory > Disk; cache中 L1 > L2 > L3 ... 越靠近cpu速度越快,容量越小。

這個在qemu模擬器中無法體現,因為它沒有模擬不同儲存之間的訪問速度。 :(

分頁系統中, 邏輯地址到實體地址的變換是由____決定的

  •  段表
  •  頁表
  •  物理結構
  •  重定位暫存器

解釋:分頁系統中,頁表負責轉換邏輯地址到實體地址。

分段系統中, 邏輯地址到實體地址的變換是由____決定的

  •  段表
  •  頁表
  •  物理結構
  •  重定位暫存器

解釋:看看ucore lab1,瞭解bootloader和ucore是如何建立段表的。

連續記憶體分配演算法中的First Fit(首次適應)演算法,其空閒分割槽鏈的順序為____

  •  空閒區首地址遞增
  •  空閒區首地址遞減
  •  空閒區大小遞增
  •  空閒區大小遞減

解釋:First Fit是指按地址來尋找第一個滿足要求的空閒塊,其空閒分割槽鏈的順序也就是按空閒塊首地址遞增。

以ucore為例,能否在ucore中做個試驗完成上述演算法?

連續記憶體分配演算法中的Best Fit(最佳適應)演算法,其空閒分割槽鏈的順序為____

  •  空閒區首地址遞增
  •  空閒區首地址遞減
  •  空閒區大小遞增
  •  空閒區大小遞減

解釋:Best Fit是指尋找一個大小最合適的空閒塊,要求空閒塊按照大小排列,其空閒分割槽鏈的順序為按大小遞增。

以ucore為例,能否在ucore中做個試驗完成上述演算法?

連續記憶體分配演算法First Fit的缺點是____

  •  演算法複雜
  •  大的空閒分割槽會被分割
  •  容易產生外部碎片
  •  分配速度慢

解釋:First Fit演算法非常簡單,分配速度也較快。但是First Fit不考慮實際的需求和找到的空閒分割槽的大小的匹配度,所以容易產生外部碎片。

以ucore為例,能否在ucore中做個試驗完成上述演算法並看看其缺點能否重現?

連續記憶體分配演算法Best Fit的缺點是____

  •  演算法複雜
  •  大的空閒分割槽會被分割
  •  分配速度慢
  •  回收速度慢

解釋:Best Fit演算法也非常簡單,分配速度較快。由於選取的空閒分割槽大小都很合適,所以基本不會出現大的空閒分割槽總是被分割的情況。但是在此演算法中,記憶體回收則涉及了很多操作:判斷左右鄰居是否是空閒分割槽,如果不是,則插入此空閒分割槽到合適的地方,如果是則合併空閒塊,並把合併後的結果插入到合適地方;但是由於空閒分割槽鏈不是按地址排序的,所以上述操作需要遍歷幾次連結串列用於查詢和插入,速度較慢。

連續記憶體分配演算法Worst Fit的缺點是____

  •  演算法複雜
  •  大的空閒分割槽會被分割
  •  分配速度慢
  •  容易產生很小的空閒分割槽

解釋:Worst Fit每次使用最大的空閒分割槽,按照需求分割相應的大小,所以會造成大的空閒分割槽總是被分割。其演算法比較簡單,分配速度也很快。

以ucore為例,能否在ucore中做個試驗完成上述演算法並看看其缺點能否重現?

應用程式中的邏輯地址到實體記憶體中的實體地址的轉換機制建立的過程發生____程式過程中

  •  編譯
  •  連結
  •  載入
  •  執行

解釋:在編譯器編譯和連結程式的過程中都只涉及到邏輯地址,跟機器的配置無關,這也是編譯連結所生成的可執行檔案可以直接在相同系統的其它機器上使用的原因。而在作業系統載入應用程式時,作業系統負責建立應用程式的段表或頁表。將邏輯地址和實際實體地址對應起來,之後應用程式在執行過程中CPU才能根據邏輯地址通過段表或頁表正確訪問到實體地址。

以ucore lab5為例,在載入應用程式時,將建立應用程式對應的程序,並在建立過程中,把應用程式對應程序的頁表也建立好了。

某一作業完成後,系統收回其主存空間,並與相鄰空閒區合併,為此需修改空閒區表,如果待回收的空閒區有相鄰的低址空閒區,也有相鄰的高址空閒區,那麼空閒區表將____

  •  項數不變,有一個空閒區的大小變大
  •  項數不變,有一個空閒區的起始地址變小,大小變大
  •  項數增加
  •  項數減少

解釋:合併之後,原本的2個相鄰空閒分割槽和被回收的分割槽合併成一個分割槽,所以分割槽項數變為n - 2 + 1 = n - 1。

以ucore為例,能否在ucore中做個試驗完成上述相鄰空閒區合併功能,看看合併的效果如何?

對於分頁系統與分段系統,下列說法正確的是( ).

  •  頁的大小跟具體執行程式有關
  •  都屬於非連續分配
  •  段的大小固定且由系統確定
  •  分段技術和分頁技術是不能共存在一個系統中的

解釋:頁的大小由CPU硬體規定的規範,並由作業系統進行初始化和管理,跟具體執行程式無關; 段的大小是指程式的資料段、程式碼段等每段的大小,和具體程式相關;分段技術和分頁技術是按照需求進行動態的分配和回收,是非連續分配,它們可以融合使用,也稱段頁式管理。

以ucore為例,在lab2之後,就採用基於80386的段頁式管理了,但段機制的功能沒有太用。

採用段頁式管理時,程式按邏輯被劃分成____

  •  段
  •  頁
  •  區域
  •  塊

解釋:程式按邏輯劃分各段。而頁、區域、塊由作業系統負責分配、對映和管理,和程式邏輯沒有關係。

採用段頁式管理的多道程式環境下,一個應用程式都有對應的____

  •  一個段表和一個頁表
  •  一個段表和一組頁表
  •  一組段表和一個頁表
  •  一組段表和一組頁表

解釋:每道程式有一個段表,且還要有一個頁表,才能完成段頁式的記憶體管理。

以ucore為例,在lab5之後,就採用基於80386的段頁式管理了,一個程式有一個段表,也有一個頁表。

在分頁式儲存管理系統中時,每次CPU取指令或取運算元,至少要訪問____次主存。

  •  0
  •  1
  •  2
  •  3

解釋:0次。因為CPU會有cache和mmu

以ucore為例,在80386中,如果取的指令和取的運算元都在CPU的cache中,且放在頁表中的地址對映關係被快取在CPU的MMU中,則不需要訪問主存。

在分段式儲存管理系統中時,每次CPU取指令或取運算元,至少要訪問____次主存。

  •  0
  •  1
  •  2
  •  3

解釋:0次。因為CPU會有cache,mmu和對段表項的快取

以ucore為例,在80386中,如果取的指令和取的運算元都在CPU的cache中,且放在段表中的地址對映關係被快取在CPU的段表項快取中,則不需要訪問主存。

在段頁式儲存管理系統中時,每次CPU取指令或取運算元,至少要訪問____次主存。

  •  0
  •  1
  •  2
  •  3

解釋:0次。因為CPU會有cache和對段表項的快取 以ucore為例,在80386中,如果取的指令和取的運算元都在CPU的cache中,且放在段表中的地址對映關係被快取在CPU的段表項快取中,且放在頁表中的地址對映關係被快取在CPU的MMU中,則不需要訪問主存。

每道程式能在不受干擾的環境下執行,主要是通過____功能實現的。

  •  記憶體分配
  •  記憶體保護
  •  記憶體回收
  •  記憶體擴充

解釋:記憶體訪問需要將邏輯地址和重定位暫存器(基址暫存器)進行加運算之後才能訪問實體地址,而記憶體保護主要是使用界地址暫存器來實現對邏輯地址的限制,以免邏輯地址越界而造成實體地址訪問越界,進而對別的程式進行干擾。

以ucore為例,在lab5中,ucore對每個應用程式設定的頁表,可以完成對不同程式的地址空間的隔離,從而避免了程式間可能的干擾。

可變分割槽儲存管理方案中____作為儲存保護使用。

  •  邏輯地址暫存器
  •  長度暫存器
  •  實體地址暫存器
  •  基址暫存器

解釋:長度暫存器或稱界地址暫存器,用於儲存保護。

以ucore為例,在80386中,分段機制可以看成是一種可變分割槽儲存管理方案,其段描述符中的段限長欄位類似這裡提到的“長度暫存器“

分頁系統中的頁面對____透明,是____管理的。

  •  程式設計師、編譯器
  •  程式設計師、作業系統
  •  作業系統、編譯器
  •  程式設計師、連結器

解釋:分頁由作業系統控制,使用者並不能感知。

以ucore為例,在lab5以後,程式設計師寫應用程式,確實不需要考慮有分頁機制的存在。因為ucore已經為每個應用程式建立好了段表(也叫全域性描述符表,簡稱GDT)和頁表。

多選題

關於分段系統和分頁系統說法正確有____。

  •  頁是系統層面的記憶體管理的單位,分頁的目的主要是由於作業系統管理的需要;段是編寫程式層面的記憶體管理的單位,分段的目的主要是為了能更好地滿足程式設計師開發的需要
  •  頁的大小是固定的,而且由系統確定。段的長度卻是不固定的,決定於程式設計師所編寫的程式
  •  分段系統會產生外碎片,分頁系統會產生內碎片
  •  分段可靈活的控制存取訪問,可根據各段的特點決定訪問權

解釋:1,2,4解釋略。3:分段系統中段的大小是跟程式相關的,分段系統中每次分配的大小就是相應段的真實大小所以沒有內部碎片;但是卻會產生不滿足任何段大小的空閒分割槽,就是外部碎片。

相關推薦

作業系統練習-實體記憶體管理

單選題 (2009聯考)分割槽分配記憶體管理方式的主要保護措施是( )  界地址保護 程式程式碼保護 資料保護 棧保護 為了防止程式的訪問地址越界,所以需要進行界地址保護,由硬體負責檢查程式訪問地址是否合法。 以ucore為例,在ucore lab1中的,x86保護模式中

作業系統的學習(2)——實體記憶體管理:連續記憶體分配

記憶體的最小訪問單位是位元組(8it),一般計算機系統是32位匯流排,一次讀寫可以讀或者寫32位也就是4位元組。 CPU裡會看到快取記憶體,快取記憶體就是在進行讀寫指令或者指令執行的過程中,訪問資料都需要從記憶體中讀資料,如果這時候有大量資料需要讀寫或者重複利

QEMU深入淺出: guest實體記憶體管理

原  文:http://blog.vmsplice.net/2016/01/qemu-internals-how-guest-physical-ram.html 作  者:Stefan Hajnoczi 領  域:Open source and virtuali

輕量級作業系統FreeRTOS的記憶體管理機制(二)

本文由嵌入式企鵝圈原創團隊成員朱衡德(Hunter_Zhu)供稿。FreeRTOS多種記憶體管理機制中最簡單的一種:全域性宣告一個靜態陣列ucHeap,然後通過指標偏移記錄空間的分配情況,在這種記憶體機

計算機底層知識拾遺(八)理解實體記憶體管理

記憶體管理是Linux核心最複雜的元件。記憶體管理包括虛擬記憶體機制和實體記憶體管理。這篇說說實體記憶體管理的一些要點。 實體記憶體地址空間和虛擬記憶體地址空間 說到虛擬記憶體的時候我們知道虛擬記憶體地址空間分為兩部分:核心地址空間和使用者程序地址空間。這兩個地址空間都使

輕量級作業系統FreeRTOS的記憶體管理機制(一)

 本文由嵌入式企鵝圈原創團隊成員朱衡德(Hunter_Zhu)近幾年來,FreeRTOS在嵌入式作業系統排行榜中一直位居前列,作為開源的嵌入式作業系統之一,它支援許多不同架構的處理器以及多種編譯工具鏈,

linux核心記憶體管理學習之二(實體記憶體管理--夥伴系統)

linux使用夥伴系統來管理實體記憶體頁。 一、夥伴系統原理 1. 夥伴關係 定義:由一個母實體分成的兩個各方面屬性一致的兩個子實體,這兩個子實體就處於夥伴關係。在作業系統分配記憶體的過程中,一個記憶體塊常常被分成兩個大小相等的記憶體塊,這兩個大小相等的記憶體塊就處於夥伴關

DOS作業系統中的記憶體管理

如下圖所示,DOS作業系統運行於真實模式中,8086處理器的定址空間只用1MB,系統硬體使用的記憶體安排在從A1000開始的記憶體高階,在系統低端,即00000h-00500h則是中斷向量表和BIOS資料區。剩下的大約640KB的記憶體才是操作 系統和應用程式所能使用的,這

輕量級作業系統FreeRTOS的記憶體管理機制

概瞪那瘓冶檀負刳馗鋼液瀑頹叛諢錘習凡回燒狄喲槍蠢盅煙招飾玫誄習回磺訪特堵幼辛謊擦獨秩戎歡碩侄攘潞中分夢閱絛桃墓煙玫跋刎闢輾郝釋度窘藍富芯淨遼嚇右沽亓縷既簿忱繳闌鍬諤斜謖僭逝喲浩攣苫誄俗盜撈鐐賦爬磺蠶闌然粕慰俑仿刳勸裙壞重牡喚暈勸酚陡滄懈陡搗唐懈巧迫唐什鈉門迸刳瀑智杭嘎蚜飯背

【自制作業系統10】記憶體管理系統

本章我們要完成初步的記憶體管理系統,最終簡單實現一個從核心記憶體池中獲取 3 頁的記憶體這樣一個函式實現。 一、到目前為止的程式流程圖 為了讓大家清楚目前的程式進度,畫了到目前為止的程式流程圖,如下。 圖中紅色部分就是我們本章的程式碼在全域性流程中的位置,下面藍色部分是將 malloc_page 方法樹狀拆

3.作業系統如何管理實體記憶體

計算機體系結構/記憶體分層體系地址空間 & 地址生成連續記憶體分配 3.1 計算機體系結構/記憶體分配體系 計算機體系結構記憶體分層體系在作業系統的記憶體管理範例 計算機基本硬體結構 CPU完成了對整個程式或軟體執行的控制, 記憶體主要是放置了程式的程式碼和它

第七章—記憶體管理【計算機作業系統

7.1 記憶體管理需要滿足哪些需求? 重定位、保護、共享、邏輯組織和物理組織。 7.2 為什麼需要重定位程序的能力? 通常情況下,並不能事先知道在某個程式執行期間會有哪個程式駐留在主存中。此外還希望通過提供一個巨大的就緒程序池,能夠把活動程序換入和換出主存,以便使處理器的利用率

linux記憶體管理---虛擬地址 邏輯地址 線性地址 實體地址的區別(一)

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

現代作業系統:第三章 記憶體管理

作業系統的工作是將這個儲存體系抽象成為一個有用的模型並將管理這個抽象模型 作業系統中管理分層儲存體系的部分稱為儲存管理器。它的任務是有效的管理記憶體,即記錄哪些記憶體是正在使用的,哪些記憶體是空閒的,在程序需要時為其分配記憶體,在程序使用完成的時候為其釋放記憶體。 3.1 無儲存器的

作業系統記憶體管理

轉載:https://blog.csdn.net/BillCYJ/article/details/79039828 內容會持續更新,有錯誤的地方歡迎指正,謝謝! 記憶體管理 問題 1、什麼是區域性性原理? 時間上的區域性性:最近被訪問的頁在不久的將來還會被訪問,例如:迴圈語句; 空間上的

記憶體管理實體記憶體初始化

一、概序   linux記憶體管理包含記憶體初始化、頁表對映過程、核心記憶體佈局圖、夥伴系統、SLAB分配器、vmalloc、malloc、mmap缺頁中斷等內容。按層分可以分為使用者空間、核心空間和硬體層,下面的圖可以詳細的說明:    二、核心記憶體分佈 1、實體記憶體大小:   現

易學筆記-系統分析師考試-第3章 作業系統基本原理/3.3 記憶體管理/3.3.4 虛擬儲存管理

虛擬儲存管理 背景:固定式、分頁式、分段式儲存一個共同的特點是要求的儲存空間必須足夠大裝載入作業的全部資訊,但由於作業在執行過程中,作業中所有的記憶體不是一次全部使用的,甚至有些記憶體塊根本就不是使用,這樣就造成了記憶體資源的極度浪費 虛擬儲存工作過程:當作業載入到記憶體時

易學筆記-系統分析師考試-第3章 作業系統基本原理/3.3 記憶體管理/3.3.3 段頁式管理

分頁式儲存管理 概念:為了避免分割槽式管理產生儲存碎片和管理複雜的問題,分頁式管理把作業的邏輯地址劃分成若干個相等的區域(稱為頁),記憶體空間也劃分成若干個與頁長度相等的區域(也稱為頁幀或塊),然後把頁裝載到頁幀中 特點 頁幀可以是連續的,也可以是不連續的

易學筆記-系統分析師考試-第3章 作業系統基本原理/3.3 記憶體管理/3.3.2 分割槽儲存管理

記憶體儲存管理方式分類 分割槽儲存管理方式 分頁式儲存管理方式 分段式儲存管理方式 虛擬儲存器 分割槽儲存管理方式 固定分割槽 分割槽方法:在裝入作業前,記憶體被操作管理員分為N個區,分割槽大小和分割槽數量不可以修改

易學筆記-系統分析師考試-第3章 作業系統基本原理/3.3 記憶體管理/3.3.1 地址變換

幾種程式 源程式:使用者用開發語言編寫的程式 編譯程式(彙編程式):專門編譯源程式的程式 目標程式:編譯後的程式 地址 邏輯地址 概念:指的是目標程式使用的地址,也稱為相對地址或者虛擬地址 格式:一般以0為基地址