1. 程式人生 > >作業系統儲存管理問總結

作業系統儲存管理問總結

問題一:

⑴ 儲存管理的實質是什麼?(對記憶體的管理,主要對記憶體中使用者區進行管理)

⑵ 多道程式中,為方便使用者和充分利用記憶體以提高記憶體利用率,記憶體管理的任務是什麼?(記憶體空間的分配和回收、記憶體空間的共享、儲存保護、地址對映、記憶體擴充)。

⑶ 如何實現儲存保護? 
  答:在多道程式系統中,記憶體中既有作業系統,又有許多使用者程式。為使系統正常執行,避免記憶體中各程式相互干擾,必須對記憶體中的程式和資料進行保護。
1、防止地址越界
對程序所產生的地址必須加以檢查,發生越界時產生中斷,由作業系統進行相應處理。
2、防止操作越權
對屬於自己區域的資訊,可讀可寫;
對公共區域中允許共享的資訊或獲得授權可使用的資訊,可讀而不可修改;
對未獲授權使用的資訊,不可讀、不可寫。
儲存保護一般以硬體保護機制為主,軟體為輔,因為完全用軟體實現系統開銷太大,速度成倍降低。當發生越界或非法操作時,硬體產生中斷,進入作業系統處理

(4) 物理儲存器分幾類?(記憶體、外存、快取)

⑸ 虛儲存器的含義是什麼?(兩層含義)
  答:虛儲存器有兩層含義,一是指使用者程式的邏輯地址構成的地址空間;二是指當記憶體容量不滿足使用者要求時,採用一種將記憶體空間與外存空間有機地結合在一起,利用內外存自動排程的方法構成一個大的儲存器,從而給使用者程式提供更大的訪問空間。

⑹ 什麼叫實體地址?什麼叫邏輯地址?什麼叫地址對映?地址對映分哪幾類?(靜態、動態)
  答:實體地址是記憶體中各儲存單元的編號,即儲存單元的真實地址,它是可識別、可定址並實際存在的。
  使用者程式經過編譯或彙編形成的目的碼,通常採用相對地址形式,其首地址為零,其餘指令中的地址都是相對首地址而定。這個相對地址就稱為邏輯地址或虛擬地址。邏輯地址不是記憶體中的實體地址,不能根據邏輯地址到記憶體中存取資訊。
  為了保證CPU執行程式指令時能正確訪問儲存單元,需要將使用者程式中的邏輯地址轉執行時可由機器直接定址的實體地址,這一過程稱為地址對映或地址重定位。
  地址對映可分為兩類:
  1、靜態地址對映  2、動態地址對映

問題二:

⑴ 怎樣對記憶體進行分割槽?(靜態、動態;等長、不等長)
  答:對記憶體空間的劃分是可以靜態的,也可以動態的;可以是等長的,也可以不等長。
  靜態劃分是指系統執行之前就將記憶體空間劃分成若干區域,通常,分配給程序的記憶體可能比程序實際所需的區域長。
  動態劃分是在系統執行過程中才劃分記憶體空間。這樣,系統可按程序所需要的儲存空間大小為其分配恰好滿足要求的一個或多個區域。
  等長分割槽是將儲存空間劃分為若干個長度相同的區域。
  不等長分割槽則是將儲存空間劃分若干個長度不同的區域。

⑵ 根據分割槽情況,從如何實現程序的記憶體分配?
  答:1、靜態等長分割槽的分配
  2、動態異長分割槽的分配

⑶ 什麼叫碎片?(零散的小空閒區) 怎樣解決碎片問題?(緊湊技術)
  答:所謂碎片是指記憶體中出現的一些零散的小空閒區域。
  解決碎片的方法是移動所有佔用區域,使所有的空閒區合併成一片連續區域。這一過程稱為緊湊,這一技術就是緊湊技術。。

問題三:

⑴ 儲存管理方案有哪些?(分割槽管理、頁式管理、段式管理、段頁式管理、虛擬儲存管理)

⑵ 分割槽管理的基本思想是什麼?主要缺點是什麼?
  基本思想:將記憶體劃分成若干連續的區域,稱為分割槽,每個分割槽裝入一個執行作業。
  主要缺點:不能充分利用記憶體,也不能實現對記憶體的擴充。

⑶ 什麼是固定分割槽?什麼是可變分割槽?各有什麼優缺點?
  答:固定分割槽:系統將記憶體劃分為若干固定的分割槽,當作業申請記憶體時,系統為其選擇一個適當的分割槽,並裝入記憶體執行。由於分割槽大小是事先固定的,因而可容納作業的大小受到限制,而且當用戶作業的地址空間小於分割槽的儲存空間時,浪費了一些儲存空間。
  可變分割槽:是指在作業裝入記憶體時建立分割槽,使分割槽的大小正好與作業要求的儲存空間相等。引入可變分割槽方法,使記憶體分配有較大的靈活性,也提高了記憶體利用率。但是可變分割槽會引起碎片的產生。

⑷ 分割槽管理可以採用的記憶體分配策略是什麼?
  首先適應演算法、最佳適應演算法、最壞適應演算法。

⑸ 為實現地址對映和儲存保護,系統為使用者程式提供了哪些暫存器?
  基址暫存器、限長暫存器;上界暫存器、下界暫存器。

問題四:

⑴ 試述頁式儲存管理的基本原理
  ① 記憶體劃分。
  ② 邏輯地址空間劃分。
  ③ 頁面大小。
  ④ 記憶體分配。

⑵ 試述頁式儲存管理的實現方法
  ① 建立頁表。② 建立空閒頁面表。
  ③ 硬體支援。④ 地址對映過程。

⑶ 為了提高存取速度,可以使用快表技術。試述這一技術是如何實現的?
  答:快表技術是在地址對映機構中增加一個小容量的聯想暫存器(相聯儲存器),它由高速暫存器組成,成為一張快表,快表用來存放當前訪問最頻繁的少數活動頁的頁號。
  在快表中,除了邏輯頁號、物理頁號對應外,還增加了幾位。特徵位表示該行是否為空,用0表示空,用1表示有內容;訪問位表示該頁是否被訪問過,用0表示未訪問,1表示已訪問,這是為了淘汰那些用得很少甚至不用的頁面而設定的。
  快表只存放當前程序最活躍的少數幾頁,隨著程序的推進,快表內容動態更新。當用戶程式需要存取資料時,根據該資料所在邏輯頁號在快表中找出對應的物理頁號,然後拼接頁內地址,以形成實體地址;如果在快表中沒有相應的邏輯頁號,則地址對映仍然通過記憶體中的頁表進行,得到物理頁號後須將該物理頁號填到快表的空閒單元中。有無空閒單元,則根據淘汰演算法淘汰某一行,再填入新得到的頁號。實際上查詢快表和查詢記憶體頁表是並行進行的,一旦發現快表中有與所查頁號一致的邏輯頁號就停止查詢記憶體頁表。

問題五:

⑴ 試述段頁式儲存管理的基本思想
  答:段頁式儲存管理的基本思想是:
  1、用頁式方法來分配和管理記憶體空間,即把記憶體劃分成若干大小相等的頁面;
  2、用段式方法對使用者程式按照其內在的邏輯關係劃分成若干段;
  3、再按照劃分記憶體頁面的大小,把每一段劃分成若干大小相等的頁面;
  4、使用者程式的邏輯地址由三部分組成,形式如下:
  段號頁號頁內地址
  5、記憶體是以頁為基本單位分配給每個使用者程式的,在邏輯上相鄰的頁面記憶體不一定相鄰。

⑵ 如何實現段頁式儲存管理
  答:1、建立段表2、建立頁表3、建立記憶體空閒頁面表4、硬體支援5、地址對映過程

問題六:

⑴ 虛擬儲存技術的基本思想
答:虛擬儲存技術的基本思想是利用大容量的外存來擴充記憶體,產生一個比有限的實際記憶體空間大得多的、邏輯的虛擬記憶體空間,以便能夠有效地支援多道程式系統的實現和大型作業執行的需要,從而增強系統的處理能力。

⑵ 虛擬儲存技術的理論基礎(區域性性原理)
答:程式區域性性原理:虛擬儲存管理的效率與程式區域性性程式有很大關係。根據統計,程序執行時,在一段時間內,其程式的執行往往呈現出高度的侷限性,包括時間區域性性和空間區域性性。
1、時間區域性性:是指若一條指令被執行,則在不久,它可能再被執行。
2、空間區域性性:是指一旦一個儲存單元被訪問,那它附近的單元也將很快被訪問。

⑶ 虛擬儲存管理的基本原理
  答:虛擬儲存的基本原理是:當程序要求執行時,不是將它的全部資訊裝入記憶體,而將將其一部分先裝入記憶體,另一部分暫時留在外存。程序在執行過程中,要使用的資訊不在記憶體時,發生中斷,由作業系統將它們調入記憶體,以保證程序的正常執行。

⑷ 虛擬儲存管理的分類
  答:虛擬儲存管理分為:虛擬頁式、虛擬段式和虛擬段頁式。

⑸ 以虛擬頁式儲存管理為例介紹虛擬儲存管理的實現過程
  答:虛擬頁式儲存管理的基本思想是,在程序開始執行之前,不是裝全部頁面,而是隻裝一個(甚至0個)頁面,然後根據程序執行的需要,動態地裝入其它頁面。
1、頁表 2、缺頁中斷處理3、頁面淘汰

⑹ 在虛存中,頁面在記憶體與外存中頻繁地除錯,系統效率急劇下降,稱為顛簸。試說明產生顛簸的原因。通過什麼方式可以防止顛簸的發生?
  答:顛簸是由缺頁率高而引起的。
  系統規定缺頁率的上界和下界。當執行程序缺頁率高於上界時,表明所分給它的物理頁面數過少,應當增加;反之,當執行進行缺頁率低於下界時,表明所分給它的物理頁面數過多,可以減少。這樣,根據缺頁率反饋可動態調整物理頁面的分配,以防止顛簸的發生。

漫談如何學習作業系統原理

作業系統怎麼學,首先要想作業系統是怎麼來的,在沒有作業系統的年代裡,人們是怎麼程式設計的。這是首要的問題。不知道有沒有人看過INTEL官方的CPU文件,總是分為應用級程式設計、系統級程式設計、指令集這三塊。其中系統級程式設計這一塊最複雜,我不說內容,就單從檔案的大小來看,IA-64程式設計手冊的應用級程式設計卷是2MB,系統卷卻有6MB。就連IA-32程式設計手冊上的系統卷部分也遠比應用卷的要多。當然這些內容我還沒有看,不過從目錄當中,覺得有很多相似的地方,比如CPU記憶體定址、虛擬儲存器管理、中斷與保護等等,可以從INTEL的CPU文件上看出,各種CPU或機器雖然各有各的不同,各有各的特點,但是目前的CPU要解決的核心問題就是那麼幾塊,要解決的就是象如何定址記憶體,如何管理虛擬儲存,如何實現中斷,如何保護資源等等。

 各位程式設計的同仁想必都很清楚,計算機的作業系統就是在為應用級程式設計提供服務,提供什麼服務,就是提供象諸如如何記憶體定址,如何管理虛擬儲存器、如何進行中斷,如何管理磁碟,如何。。。。等等。作業系統為我們做掉了系統級程式設計中最繁重的一塊,所以我們在用應用級程式設計比如用C++程式設計的時候才會那麼舒服,用int分配一個變數這記憶體地址就來了,某個函式要呼叫另一個函式執行的時候這執行行程就能跳到那個函式,記憶體不夠了,沒有關係,作業系統自動啟動虛擬儲存器(只不過慢了些),所以應用級程式設計是最舒服的,作業系統級程式設計比較難,而直接做微控制器可能就是最難的了。因為即使就是作業系統級程式設計,可能很多有關CPU底層的東西也已經做掉了,你要做的可能就是要了解的你的作業系統做掉了哪些功能,如何呼叫。而微控制器就沒有那麼好玩了,微控制器我沒有做過,我想可能就是直接對著一個CPU用匯編來程式設計,而且很可能是在沒有作業系統的情況下,這樣一來,作業系統要承擔的諸如記憶體管理,中斷,過程跳轉等這些複雜繁重的工作就得程式設計師自己來承擔,那程式設計師的負擔就比目前應用級程式設計大得多了。

 我猜想,可能在沒有作業系統的時候,每個計算機程式設計師的日子可不會象現在的那麼好過,因為做每個程式,都需要你自己去分配管理記憶體,你不但要考慮如何高效的管理記憶體,還要知道如何進行過程跳轉等等這一大堆的的細活,而這些細活在不同的CPU上的實現方式也是不同的,直到把這些問題都解決了以後,你才開始真正考慮你的應用方面的程式邏輯如何去編的問題。當然了,雖然有關CPU底層的系統級實現細節不一樣,但是大至CPU系統級這一部分要解決哪幾塊問題這是一樣的,所以在INTEL的官方文件上,無論是IA-32還是IA-64這兩個程式設計手冊的系統捲上,都是那麼幾塊內容。

 既然系統級要解決的幾個任務都是相同的,每個程式設計師在程式設計的時候都要考慮這幾方面的內容,那麼可能就會想,為什麼不把這些程式要解決的相同的任務給提取出來呢,這就形成了作業系統,作業系統的核心的任務,就是專門負責解決早期計算機程式設計師每次程式設計都必須要解決的幾項系統級任務,這樣一來,留給應用級的擔子就非常的輕了,忘記在哪裡看過,好像以前的資料庫系統是屬於應用軟體的,可能同樣是因為每個應用軟體連同作業系統都需要一個數據庫,所以就把資料庫系統給單獨提了出來做為系統軟體了。有一點不明白為什麼目前的作業系統要用檔案系統,直接用資料庫系統不更好些嗎,既對使用者服務,又為系統服務!

 我覺得,如果大家有要學作業系統原理的,根本就不必要去看所謂什麼作業系統原理這一類的書,連外文的書籍也沒有必要去看,因為目前國際CPU製造商提供的CPU文件的系統級程式設計卷才是真正的,原汁原味最好的教材,你要編寫的作業系統從大部分任務就是解決系統卷裡的任務的。有一次在QQ上和一個做微控制器的傢伙聊天,那人比我小一點,我當時說目前作業系統底層好難,他就說這有什麼難的,他馬上就能做一個作業系統,就連編譯器也能做,我當時被嚇了一大跳,小小年紀就這麼厲害,現在我懂了,做微控制器的,大概都會做作業系統,因為微控制器的每次程式設計就是和系統底層打交道的,所以做微控制器程式的自然對一個作業系統核心會比較瞭解了。

 在此建議和我一樣的對作業系統原理感興趣,對系統底層的感興趣的人,直接去看INTEL的官方材料吧,作業系統原理有哪幾條,要解決哪些任務,通過檢視不同CPU的系統卷程式設計手冊,找出其中相同的任務和邏輯去自己總結作業系統是如何做,無疑這種方法學到會是最多的了,而且理解起來可能會比一般的學習方法來得更深刻。

 學習應用軟體的朋友,我也勸你們看看作業系統,核心等這些系統底層的東西。看過了以後,你會覺得看應用級程式設計會更流暢,學起來也會更簡單。我就是這樣學的,學MFC,後來開始學INTEL CPU的應用級程式設計,現在我決定開始從系統級學起。目前我也會上MSDN英文網站看看有關MFC的東西,但我看MFC倒不是主要因為去編寫MFC應用程式,而是想看看微軟是用系統為所有的應用級程式設計提供服務的,這整個一套結構是如何構造出來的,ORACLE資料庫是我繼INTEL文件的下一波目標,我也是想看看,一個數據庫體系結構是什麼樣的,可不可以嵌到作業系統裡去

本章考核知識點:1、重定位 2、固定分割槽儲存管理 3、可變分割槽儲存管理 4、頁式儲存管理 5、段式儲存管理 6、虛擬儲存器

  自學要求 :明確儲存管理的職能是對主儲存器中的使用者區域進行管理;理解在不同的管理方式下如何實現儲存保護、地址轉換、以及主存空間的分配和回收;比較各種管理方式的特點;掌握虛擬儲存器的實現原理和方法。

  重點是:各種管理方式的特點;可變分割槽方式的主存分配演算法以及移動技術;分頁式虛擬儲存管理的實現以及頁面排程演算法;分段式虛擬儲存管理的實現。

  作業系統的儲存管理如同一個大地主,管著一個大莊園,當有農戶需要租用田地時,地主就給分配一塊地讓他種(使用者區分配)。等到地裡長出了果實(結果出來後,地主還得來收回這塊地(去配)。

  為了管好這片田地,地主還要管好莊園的門,凡是要進去種地的,都得由地主根據他的需要讓他到位置確定實際的田地上去幹活。(把邏輯地址轉換成實體地址)

  莊園裡還有一些大家共同可以使用的地方,比如地主的花園,工具房等,大家可以進去,也可以使用,但是不許改變任何現有的東東,還有,每個農戶只能在自己的地裡刨食吃,如果有人膽敢到別人地裡或地主的花園裡摘花偷食,可要當心他們養的狼狗跳出來哦。(共享和保護)

  當然,再大的地也是不夠多的,地主為了多賺些錢,當所有的地都租出去的時候,他想辦法把有些種田人暫時不種的那塊地裡的東東連地皮一起挖出來放到倉庫裡先堆著。把地騰出來租給別人種(這一招可夠絕的,不過地主說啦,這就是“虛擬儲存”。)

  你說這個地主是好是壞??

  概述:本章討論的是主儲存器空間的管理。主儲存空間分成系統區和使用者區兩部分。儲存管理的功能包括:主存空間的分配和去配、實現地址轉換、主存空間的區享和保護和主存空間擴充。

  一、重定位( 領會 )

  1、區分邏輯地址與絕對地址。

  絕對地址 :主儲存器以位元組為編址單位,容量為n的主儲存器中,每個單元有唯一的編號,從0到n-1,這個唯一的編號就是主儲存器的 實體地址 .

  比如我們現在用的128MB記憶體條中就有128×1024×1024=134217728 位元組,所以它的記憶體絕對地址就是從0到134217727.

  注意啦,莊園的大地主就是這麼給自己的地做上標記的。

  邏輯地址 :在多道程式設計的系統中,作業系統為了方便使用者,就允許每個使用者都認為自己的作業的程式和資料存放在地址是0開始的連續空間中。這樣使用者程式中使用的地址就是 邏輯地址 .

  種田人不管地主莊園有多少塊地,標了什麼號,只要記住自己需要多少地,給自己種的地打上標記就是了。地主想,只要你們能幹活,不需要知道了我的底細了吧(家財不可外揚哦)。

  2 、重定位(地址轉換的方式)

  為了保證作業的正確執行,必須根據分配給作業的主存區域對作業中指令和資料的存放進行重定位,這種 把邏輯地址轉換成絕對地址 的工作稱為“ 重定位 ”或“地址轉換”。重定位的方式有“ 靜態重定位 ”和“ 動態重定位 ”兩種。

  莊園主道:靜態重定位比較簡單,想當初張三來這兒, 說要租一百塊地,青菜種在第1塊地,蘿蔔種2塊地裡,土豆得重在第3塊地裡……然後得在第28塊地裡養鴨,完了要把28塊地裡的鴨糞拉到第49塊地的魚塘裡餵魚…… 我就說,行啦行啦,你進去,莊園的左邊101到200號那100塊地就分給你吧,以後你要找哪塊地養鴨養魚的,就得按我給你編的號來找。每個地址都已經加上100了,不會找錯吧。別說我沒講清楚哦。

  至於動態重定位,莊主笑道:這個我也能做到,這麼實現的:李四來租地時,我也不問他,直接把他帶到空閒的一片地方。派人記著這那片地的第一個地址。比如說是100號吧。李四這個笨小子幹著幹著會叫起來說:“老闆,現在我要到32號地裡抓魚!”旁邊人一聽,馬上告訴他“哎呀,你現在已經分了地啦,起始地塊是100號,那你就得到132號地去才對!”就這樣,李四每一次要找地方時,都叫別人給他重新算一下。這樣他才不會找錯位置。這樣也有一個好處,就是如果有人出價更好,我可以讓他搬到別處去幹活,反正都是叫別人給他重新算位置,所以他就不用記住搬地方後的實體地址啦。

  (1)靜態重定位

  在裝入一個作業時,把作業中的指令地址和資料地址全部轉換成絕對地址。這種轉換工作是在 作業開始前集中完成 的,在作業執行過程中無需再進行地址轉換。所以稱為“靜態重定位”。

  (2)動態重定位

  在裝入一個作業時,不進行地址轉換,而是直接把作業裝到分配的主區域中。在作業執行過程中,每當執行一條指令時都由硬體的地址轉換機構轉換成絕對地址。這種方式的地址轉換是在 作業執行時動態完成 的,所以稱為動態重定位。

  動態重定位由軟體(作業系統)和硬體(地址轉換機構)相互配合來實現。動態重定位的系統支援“程式浮動”,而靜態重定位則不能。

  二、固定分割槽儲存管理( 領會 )

  分割槽儲存管理是把儲存器中的使用者區作為一個連續區或分成若干連續區進行管理。早先使用一個分割槽的儲存管理,後發展成多分割槽的儲存管理。多個分割槽的管理可採用固定分割槽方式和可變分割槽方式。

  1、固定分割槽儲存管理的原理

  固定分割槽 的意思就是指主存空間劃分成若干連續區後,這些分割槽的 大小和個數 就 固定 不變。

  固定分割槽管理利用一張“ 主存分配表 ”說明各分割槽的情況。裝入和結束作業均通過這個分割槽表來記錄分割槽使用的變化情況。

  2、如何實現儲存保護

  固定分割槽管理 可採用 靜態重定位 的方式裝入作業。裝入程式把作業中的邏輯地址轉換為絕對地址。並檢查絕對地址是否在指定(裝入)的分割槽內,如果是,就裝入這個作業。否則就不能裝入。如果裝入主存分割槽的作業佔用處理器時(注意,是執行時),程序排程程式(不是裝入程式了)必須把作業所在分割槽的上下限地址存入“下限暫存器”和“上限暫存器”中,這樣可以在指令執行中判斷其所用到的絕對地址是否越界,達到儲存保護的目的。

  3、怎樣 提高主存空間的利用率 這裡有幾種辦法:

  (1)分割槽按大小順序排列,這樣可以使作業總是先使用滿足要求的最小分割槽。

  (2)根據經常出現的作業大小和頻率劃分分割槽。

  (3)按作業的對主存空間的需求量排成多個佇列,規定佇列與分割槽的對應關係。也就是說多大的作業只能放在多大的分割槽裡,就算有更大的分割槽空著,也不許他進入。

  三、可變分割槽的管理( 領會 )

  可變就是指分割槽的 大小和位置不是固定 的,而是根據作業要求的主存量來分配分割槽的大小。

  1、主存的分配和去配(回收)

  在系統初始化時,主存除了作業系統所佔部分外,整個使用者區是一個大的空閒區,可以按作業需要的空間大小順序分配空閒區直到不夠時為止。

  當作業結束時,它的佔用分割槽被收回。這個空閒區又可以根據新作業的大小重新用於分配,所以主存中的已佔分割槽和空閒區的數目和大小都是在變化的。可以用兩張表“已分配區表”和“空閒區表”來記錄和管理。

  2、常用的分配演算法

  最先適應分配演算法 :簡單地說,就是在分割槽表中順序查詢,找到夠大的空閒區就分配。但是這樣的分配演算法可能形成許多不連續的空閒區,造成許多“碎片”,使主存空間利用率降低。

  最優適應分配演算法 :這種演算法總是挑選一個能滿足作業要求的最小空閒區。但是這種演算法可能形成一些極小的空閒區,以致無法使用,這也會影響主存利用率。

  最壞適應分配演算法 :這種演算法和上面的正好相反,它總是挑一個最大的空閒區分給作業使用,使剩下的空間不至於太小。

  3、地址轉換與儲存保護

  採用 可變分割槽方式管理 時,一般均採用 動態重定位 方式裝入作業。也就是每讀一條指令,都要變換一次地址。變換要靠硬體支援,主要是 兩個暫存器 : 基址 暫存器和 限長 暫存器,限長暫存器存放作業所佔分割槽的長度,基址暫存器則存放作業所佔分割槽的起始地址,這兩個值確定了一個分割槽的位置和大小。

  轉換時根據邏輯地址與限長值比較,如果不有超過這個值,表示訪問地址合法,再加上基址暫存器中的值就得到了絕對地址了,否則形成“地址越界”中斷。達到儲存保護的目的。

  對於共享程式,則硬體提供兩組限長暫存器和基址暫存器。訪問時對訪問區享區和作業區的地址分別進行轉換。

  4、移動技術的應用

  移動技術 要“移動”的東東就是主存空間中的作業。把某個作業移到另一處主存空間去(在磁碟整理中我們應用的也是類似的移動技術),這樣的最大好處就是可以合併一些空閒區。

  但是移動技術的應用也要注意以下問題。

  移動會增加系統開銷。所以要儘量減少移動。

  移動是有條件的,如果作業在執行過程中正等待與外圍裝置傳輸資訊,就不能移動。因此在移動時首先要判定該作業是否與外設交換資訊。

  四、頁式儲存管理( 領會 )

  1、如何分頁和分塊

  頁式儲存管理中有兩個名詞:“ 頁 ”和“ 塊 ”,其中的“塊”是針對硬體來說的,就是把儲存器分成若干相等大小的區,每個區就稱為一個塊。對應的,在程式中,邏輯地址進行“分頁”,其大小和每個塊相一致。

  事實上,頁面的大小是由塊的大小自然決定的。對於程式來說,其邏輯地址還是和原來一樣採用連續的地址。只是 按照塊的位數取其前面數位做為頁號 .

  分配空間時,根據作業長度可以確定它的頁面數,根據這個頁面數在主存中分配相應的塊數,只要是空閒塊就可以放入,即使不是相鄰的。並把分配情況記在“頁表”中,根據頁表可以找到相對應的頁號與塊號,就得出絕對地址了。

  2、採用頁式管理,使主存空間充分利用,頁不必為了得到連續空間而進行移動。 可以提高系統效率。

  3、頁表的構造與作用

  每個被裝入主存的作業都有一張 頁表 ,指出該作業邏輯地址中的頁號與所佔用的主存塊號之間的對應關係。頁表的長度由作頁擁有的頁面數決定,行號對應為頁號,行中記錄的是主存中的塊號。

  頁表是硬體進行地址轉換的依據,每執行一條指令時按邏輯地址中的頁號查詢頁表並轉換成絕對地址。

  在多道程式設計系統中,進入主存的每個作業都有一張頁表,由一個硬體“頁表控制暫存器”來記錄每個作業的頁表所在位置和長度以便作業轉換時同時轉換頁表。

  4、快表的構造與作用

  快表 就是頁表的一部分克隆,每行中有頁號及其對應的塊號,整個快表存放在一個小容量的快取記憶體中,訪問時快表和記憶體同時進行查詢,因為快錶速度很快,而常用的頁都登記在快表中,因此可以大大加快執行速度。

  5、採用頁式管理的地址轉換過程

  (為什麼不直接用塊分配表來記錄而要用位示圖呢,因為主存塊很多,這樣可以節省空間,提高效率。位示圖就是用一個位(0或1)來表示一個塊的使用狀態,一個字32位,可以表示32塊。按順序排列,只需一小段記憶體就可以記錄主存中大量的塊狀態)

  6、利用位示圖實現頁式儲存空間的分配和回收

  頁式儲存管理把主存空間分成大小固定的許多塊,在裝業作業時,如何知道主存中哪些塊已使用,哪些還未用,可以用位示圖來表示。

  塊號=字號×字長+位號

  字號=[i/字長](即塊號i除以字長取整)

  位號=i mod 字長(即塊號i除以字長取餘)。

  五、段式儲存管理( 領會 )

  1、段式儲存中段的劃分

  段式管理 是根據人們對 程式 中需要 分段編制 的要求出發而提供的。它提供給使用者程式設計時使用的邏輯地址由“段號”和“段內地址”兩部分組成,其形式和頁式管理相同。但是實際上是不同的:

  頁式儲存管理提供連續邏輯地址由系統自動分頁,段式儲存管理中的作業分段是由使用者決定的,每段獨立程式設計,因此段間的邏輯地址是不連續的。

  2、段式儲存空間的分配

  這種分配方法和可變分割槽管理方式的分配方法相同,所不同的是:

  可變分割槽管理方式中是為每個作業分一個區,而段式管理是為一個作業中的每個段分一個連續的空間。(段式管理更細)。

  3、段表的構造與作用

  段表 由 段號 、 本段限長 和 起始地址 三部分組成,由於每一行記錄的行號可以對應程式的段號,因此段號實際上被省略,不佔儲存空間。

  與其他管理方式一樣,段表記錄的資訊用於地址轉換和儲存保護。段表的表目起到了基址/限長暫存器的作用。

  4、段式儲存管理的地址轉換

  這個轉換過程如同可變分割槽方式的地址轉換,但是由段表的表目替代了基址/限長暫存器。

  絕對地址=根據段號找到段表中的起始地址+段內地址 (如果段內地址超過限長則產生“地址越界”程式性中斷事件達到儲存保護)

  多道程式設計系統中,每個進入主存的作業都建立了段表,因此還有一個硬體“段表控制暫存器”來記錄每個作業的段表在主存中的位置和長度。

  六、虛擬儲存器( 領會 )

  1、什麼是虛擬儲存器

  虛擬儲存器 是為“擴大”主存容量而採用的一種設計技巧,它利用作業在只裝入部分資訊時就可以執行的特性和程式執行中表現出來的區域性性特性,藉助於大容量的輔助儲存器實現小主存空間容納大邏輯地址空間的作業。

  虛擬儲存器的容量 由計算機的 地址結構(匯流排位數) 決定。

  2、虛擬儲存器的實現原理

  它的工作原理如下:首先把作業資訊保留在磁碟上,當作業請求裝入時,只將其中一部分先裝入主存,作業執行中若要訪問的資訊不在主存中,則再設法將這些資訊裝入主存。

  3、分頁式虛擬儲存器的實現

  頁式虛擬儲存管理 是在 頁式儲存管理 的基礎上實現的。首先把作業資訊作為副本存放在磁碟上,作業執行時,把作業資訊的部分頁面裝入主儲存器,作業執行時若所訪問的頁面已經在主存中,則進行地址轉換,得到絕對地址,否則產生“缺頁中斷”由作業系統把當前所需的頁面裝入主存。

  4、常用的頁面排程演算法:FIFO、LRU、LFU

  當主頁中無空閒塊時,為了裝入一個頁面,就必須按某種演算法將主存中某個頁調出,調入所需裝入的頁面。這就是頁面排程。常用的演算法有:先進先出排程演算法( FIFO )、最近最少使用排程演算法( LRU )和最近最不常用排程演算法( LFU )。

  特別要注意掌握的就是 LRU的演算法 ,如何進行排程。

  5、缺頁中斷率

  如果作頁執行中訪問頁面的總次數為A,其中有F次訪問的頁面尚未裝入主存,則有F次缺頁中斷,f=F/A,這裡的f就稱為缺頁中斷率。影響缺頁中斷的因素有:

  分配給作業的主存塊數——塊數n↑ f↓

  頁面的大小——頁面大小↑ f↓

  程式編制方法——區域性化程度↑ f↓

  頁面排程演算法

  6、段式虛擬儲存器的實現

  段式虛擬儲存管理 以 段式儲存管理 為基礎,在磁碟上保留作業的各個分段資訊,作業執行時把需要執行的一段或幾段裝入主存。在實際使用中,也要進行查表和地址轉換以及“缺段中斷” 和排程(包括調出、裝入、移動等)工作。