• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            專注于c++

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              21 Posts :: 0 Stories :: 4 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(15)

            我參與的團隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            第一節  存儲管理概述

            l          信息的二級存儲

                為了提高處理器的利用率和系統的工作效率,主存儲器中經常存放了多個程序和數據。現今許多計算機系統都采用二級存儲的辦法,利用輔助存儲器(磁盤、磁帶等)提供的大容量存儲空間,存放準備運行的程序和數據,當需要時或主存空間允許時,隨時將它們讀入主存儲器

            l          存儲管理的功能

            (1)       主存空間的分配和去配

                主存儲器中允許同時容納多個用戶的計算問題(作業),必須解決主存空間如何分配的問題。當主存中某個作業撤離或主動歸還主存空間時,則收回它所占有的所有或部分的主存空間。收回存儲空間的工作稱為“去配”。

            (2)       實現地址轉換

            由于用戶程序中使用的是邏輯地址,而處理器執行程序時要按絕對地址訪問主存。所以,存儲管理必須配合硬件進行地址轉換工作,把一組邏輯地址轉換成絕對地址,以保證處理器的正確執行。

            (3)       主存空間的共享和保護

            在多道程序設計的系統中,若干個作業同時裝入主存儲器,它們共享了一個主存儲器,在其中各自占用了某些主存區域。這些作業在執行時可能要調用共同的程序。因此,這個主存區域又成為各作業的共享區域。

            為了防止各作業相互干擾和保護各區域內的信息不被破壞,必須實現存儲保護。一般地說,對主存區域的保護可采取如下措施:

            1)程序執行時訪問屬于自己主存區域中的信息,則允許它既可讀,又可寫。

            2)對共享區域中的信息只可讀,不可修改。

            3)程序執行時,不允許訪問其他程序的主存區域,即對于非共享區域或非自己的主存區域中的信息既不可讀,也不可寫。


            (4)       主存空間的擴充


                 操作系統為用戶提供一個虛擬的內存,使用戶編制程序時可以不考慮主存儲器的實際容量,允許程序中的邏輯地址空間大于主存的絕對地址空間,起到了擴充主存空間的
            第二節     重定位 

            l           區分邏輯地址與絕對地址

            絕對地址:主存儲器以字節為編址單位,容量為n的主存儲器中,每個單元有唯一的編號,從0n-1,這個唯一的編號就是主存儲器的物理地址也叫絕對地址。

                邏輯地址:在多道程序設計的系統中,操作系統為了方便用戶,就允許每個用戶都認為自己作業的程序和數據存放在地址從 0開始的連續空間中。這樣用戶程序中使用的地址就是邏輯地址也叫相對地址。 

            l          對主存儲器為什么要區分絕對地址和邏輯地址?

            中央處理器訪問主存時必須指定確切的存儲單元。在計算機系統中通常對主存儲器以字節(每個字節8個二進制位)為編址單位,每個字節都有一個地址與其對應,這樣的地址稱為主存儲器的“絕對地址”。

            在多道程序設計系統中,主存中同時存放了多個用戶作業。操作系統根據主存的使用情況為用戶分配主存空間。每個用戶不能預先知道他的作業將被存放到主存儲器的什么地方。這樣,用戶程序中就不能使用主存的絕對地址。為了方便用戶,允許用戶程序中使用“邏輯地址”,每個用戶都可認為自己作業的程序和資料存放在一組從“0”地址開始的連續的邏輯地址空間中。 

            l          重定位

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

            (1)靜態重定位

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

            在圖42.l中,假定用戶作業的邏輯地址空間從“0”到“124”,其中第8號單元處有一條“加法”指令,該指令要求從第32號單元處取出操作數3465,然后進行加法操作。如果存儲管理為該作業分配的主存區域是從100單元開始,那么,邏輯地址第8號單元在主存中的對應位置是108單元,第32號單元在主存中的對應位置應該是132單元。如果不修改上述“加法”指令中的操作數地址,則處理器執行該指令時將從主存的032單元中去取操作數,這顯然是錯誤的。于是,應把程序中所有邏輯地址都轉換成絕對地址。上述加法指令中的操作數地址也應改成132。這樣,在執行指令時便可從132單元取到正確的操作數。

            (2)動態重定位

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

            在圖42.2中,基址寄存器中存放了作業所在主存區域的起始地址100。當處理器從108單元取出指令后,該指令中的邏輯地址是032,把基址寄存器中的值100與邏輯地址032相加得到絕對地址132,處理器便可從132單元中取出正確的操作數。

              點擊見相關動畫

            l          什么是“程序浮動”?為什么動態重定位能支持程序浮動?

            若在作業的執行過程中改變了該作業在主存中的存放區域后,該作業仍然能正確執行,則稱該作業的程序是可浮動的。采用動態重定位的系統能支持“程序浮動”。這是因為動態重定位是在每執行一條指令時進行地址轉換的。當作業在主存中的位置被移動后,只要把新區域的起始地址存入基址寄存器中,作業繼續執行時硬件的地址轉換機構就會按基址寄存器中新存入的地址與邏輯地址相加,所得的絕對地址就是新區域中的存儲單元地址,作業當然仍可正確執行。

             第三節    分區存儲管理 

            l          什么是分區存儲管理?

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

            l          一個分區的存儲管理

            (1)     一個分區的存儲管理

                 又稱單連續存儲管理,是最簡單的存儲管理方式。除操作系統占用的一部分存儲空間外,其余的用戶區域作為一個連續的分區分配給一個作業使用,即在任何時刻主存儲器中最多只有一個作業。一個分區的存儲管理只適用于單用戶的情況。

            (2)     一個分區的存儲管理方法

                處理器中設置一個界限寄存器,寄存器的內容為當前可供用戶使用的主存區域的起始地址。只當操作系統的功能擴充或修改時改變了所占區的長度,才更改界限寄存器的內容。

                等待裝入主存儲器的作業排成一個作業隊列。當主存儲器中無作業或一個作業執行結束;就可以讓作業隊列中的一個作業裝入主存儲器。如圖4_3.1所示。

            l          固定分區存儲管理

            (1) 固定分區

            固定分區是指把主存儲器中可分配的用戶區域預先劃分成若干個連續區。每個連續區的大小可以相同,也可以不同。但是一旦劃分好分區之后,主存儲器中分區的個數就固定了,且每個分區的大小也固定不能再變。

            (2)  固定分區存儲管理的原理

                  在固定分區方式管理下,每個分區可用來裝入一個作業。由于主存中有多個分區,可同時在每個分區中裝人一個作業,故適用于多道程序設計系統。 等待進人主存的作業排成隊列。當主存儲器中有空閑的分區時,依次從作業隊列中選擇一個能裝入該分區的作業。當所有的分區都裝有作業,就暫停裝入其它作業。已經裝入主存的作業能得到處理器運行時,應限定它只能在所占的分區中執行。當作業執行結束后,收回該作業所占的分區。收回的分區可用來裝入新的作業。

                圖4_3.2是劃分成三個分區的固定分區管理方式的示意圖。

            (3) 主存空間的分配與去配

            設置一張“主存分配表”,以說明各分區的分配情況。主存分配表中應指出各分區的起始地址和長度,并為每個分區設一個標志位。當標志位為“0”時,表示對應的分區是空閑分區,當標志位為非“0”時,表示對應的分區已被占用。空閑分區可以用來裝作業,已被占用的分區需指出被哪個作業占用。

            用“順序分配算法”進行主存空間的分配。順序查看主存分配表,找到一個標志為“0”的分區,再把欲裝入作業的邏輯地址空間的長度與找到的分區長度進行比較。當能容納該作業時,則把此分區分配給該作業,把它的作業名填到占用標志位上。當找到的分區不能容納該作業時,則重復上述過程繼續順序查看主存分配表中是否有能滿足該作業長度要求的且標志為“0”的分區,若有,則分配,若無,則該作業暫時得不到主存空間而不能裝入。

            (4) 地址轉換

            固定分區管理可采用靜態重定位的方式裝入作業。裝入程序把作業中的邏輯地址轉換為絕對地址與分區的下限地址相加,得到相應的絕對地址。

            (5) 存儲保護

            實現存儲保護需要軟件與硬件相互配合。采用固定分區方式管理時,處理器中應設置兩個寄存器:下限寄存器和上限寄存器。

            當一個被裝入分區的作業能占用處理器時,由操作系統把該分區的上限地址和下限地址分別存入處理器的上限寄存器和下限寄存器之中。處理器執行該作業時,對每條指令中的地址都要核對絕對地址是否在上下限地址之間,即核對

                      “下限地址<絕對地址<上限地址”

            是否成立。若成立,表示絕對地址在規定的分區之內,可按絕對地址訪問主存,否則便形成“地址越界”的程序性中斷事件。從而達到存儲保護的目的。

            當一個作業讓出處理器時,另一作業可能被選中占用處理器。這時應更改上、下限寄存器的內容為當前被選中作業所在分區的上限地址和下限地址,以保證處理器能控制每個作業都在規定的分區內執行。

            (6) 固定分區管理方式不能充分利用主存空間

            采用固定分區方式管理主存時,規定每個分區只能裝入一個作業,且總是要為作業分配一個不小于作業長度的分區。這樣就有可能造成很多作業實際上只占用了分區的一部分空間,使分區中有一部分空間不能被利用,影響了主存空間的利用率。

            (7) 固定分區管理方式提高主存空間利用率的辦法

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

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

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

            l           可變分區的管理

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

            4_3.3是可變分區管理方式的存儲空間分配示意圖。

            1)主存的分配和去配

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

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

            例如,某主存容量為2560K1K1024字節),其中操作系統占用400K,現依次有五個作業J1J2J3J4J5要求裝入主存,它們對主存的需求量分別是600K1000K300K700K500K。圖4_3.4指出了作業被裝入、執行結束后撤離的主存空間分配情況。

            4_3.5是可變分區管理方式的主存分配表,表中內容是按圖4_3.4(b)的情況填寫的。

            2)常用的分配算法

            最先適應分配算法:空閑區按地址順序由小到大登記在空閑區表中,在分區表中順序查找,找到夠大的空閑區就分配。但是這樣的分配算法可能形成許多不連續的空閑區,造成許多“碎片”,使主存空間利用率降低。    點擊見相關動畫

            最優適應分配算法:這種算法總是挑選一個能滿足作業要求的最小空閑區。           點擊見相關動畫

                在實現這種算法時,可把空閑區按長度以速增順序登記在空閑區表中。分配時順序查找空閑區表,由于查找時每次總是從最小的一個區開始,同時要不斷調整空閑區表,每當收回一個分區,必須把收回后的分區按長度順序插入登記到空閑區表的適當位置。 但是這種算法可能形成一些極小的空閑區,以致無法使用,這也會影響主存利用率。

            最壞適應分配算法:這種算法總是挑一個最大的空閑區分給作業使用,使剩下的空間不至于太小。空閑區按長度以遞減順序登記在空閑區表中。

                    收回主存空間:收回主存空間時,應檢查是否有與歸還區相鄰的空閑區。若有,則應合并成一個空閑區登記。 

                一個歸還區可能有上鄰空閑區,也可以有下鄰空閑區,或既有上鄰又有下鄰空閑區,或既無上鄰又無下鄰空閑區。在實現去配時應順序檢查空閑區表中標志為“未分配”的欄目,以確定是否有相鄰空閑區。四種情形如圖4_3.6所示。

            假定作業歸還的分區始址為s,長度為L,則:

               1)歸還區有下鄰空閑區。如果S+L正好等于空閑區表中某個登記欄目(假定為第j欄)所示分區的始址,則表明歸還區有一個下鄰空閑區。這時修改第j欄登記項的內容:

                      始址:=S

                      長度:=原長度+L

            則第j欄指示的空閑區是歸還區與下鄰空閑區合并后的一個大空閑區。

               2)歸還區有上鄰空閑區。如果空閑區表中第j個登記欄中的“始址+長度”正好等于s,則表明歸還區有一個上鄰空閑區。這時修改第j欄登記項的內容:始址不變,長度為原長度加上L。于是,歸還區便與上鄰空閑區合在一起了。

               3)歸還區既有上鄰空閑區又有下鄰空閑區。

                  S=j欄始址+長度

                如果

                    SL=k欄始址

            則表明歸還區既有上鄰空閑區,又有下鄰空閑區。此時,須把這三個區合并成一個空閑區登記入空閑區表中,只需使用一個登記欄目。進行如下修改:第j欄始址不變;第j欄長度為“j欄中原長度+k欄中長度+L”;第k欄的標志應修改成“空”狀態。于是,第j欄中登記的空閑區就是合并后的空閑區,而第k欄成為空表目了。

            4)歸還區既無上鄰又無下鄰空閑區。如果在檢查空閑區表時,無上述三種情況出現,則表明歸還區既無上鄰又無下鄰空閑區。這時,應找一個標志為“空”的登記欄,把歸還區的始址和長度登記入表,且把該欄目中的標志位修改成“未分配”。

            (3) 可變方式管理主存時的存儲保護

                硬件設置兩個專用的控制寄存器:限長寄存器和基址寄存器。當進程調度選中某作業進程占用處理器時,把作業所占分區的始址和長度送入基址寄存器和限長寄存器中。作業執行過程中,處理器每執行一條指令都要取出指令中的邏輯地址。當邏輯地址小于限長寄存器中的限長值時,由該邏輯地址加基址寄存器之值就可得到合法的(即不越界的)絕對地址。當邏輯地址大于或等于限長寄存器中的限長值時,表示欲訪問的主存地址超出了所分配的分區的范圍,這時就不允許訪問該主存地址,并形成一個“地址越界”的程序性中斷事件。由此可知,存儲保護是需要操作系統與硬件相互配合來實現的。

                   (4) 移動技術的應用

              移動技術要移動的東西就是主存空間中的作業。把某個作業移到另一處主存空間去(在磁盤整理中我們應用的也是類似的移動技術),這樣的最大好處就是可以合并一些空閑區。如圖4_3.7 所示

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

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

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

             第四節   頁式存儲管理

            l          基本原理

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

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

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

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

            l          頁式存儲管理中主存塊的大小是如何決定的?

            主存塊的大小是由硬件地址結構確定的。在頁式存儲管理中,地址由兩部分組成:頁號和頁內地址。假定地址用m個二進制位表示,其中頁內地址部分占用了n個二進制,那么每一個塊的長度就是  

            l          頁表的構造與作用

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

            頁表是硬件進行地址轉換的依據,每執行一條指令時按邏輯地址中的頁號查找頁表并轉換成絕對地址。絕對地址的計算公式如下:

                      絕對地址= 塊號* 塊長+ 頁內地址

            4_4.1指出了作業按頁裝入主存的示例。

            4-4.1中假定作業J有四個頁面: JP0 JP1 JP2 JP3,現只要找出四個空閑塊就可把作業1裝入主存。如果找到的四個空閑塊是第52324 27塊,則四個頁面就分別裝入其中。同時應為該作業建立一張“頁表”,指出邏輯地址中的頁號與主存中塊號的對應關系,頁表的一般格式如圖4-4.1中所示。作業執行時,按邏輯地址中的頁號查“頁表”,得到該頁對應的塊號,就可知道該頁在主存中的位置,再按頁內地址就能算出欲訪問的絕對地址。絕對地址的計算公式為:絕對地址= 塊號* 塊長+ 頁內地址。因此,雖然作業被存放在若干個不連續的塊中,但在作業執行中總是能按確切的絕對地址進行存取。

             

            l          在采用頁式存儲管理的系統中,怎樣利用“位示圖”來進行主存空間的分配與回收?

            位示圖:位示圖中的每一位與一個主存塊對應,每一位的值可以是“0”或“1”,當取值為“0”時表示對應塊為空閑,當取值為“1”時表示對應塊已被占用。在位示圖中增加一個字節記錄當前剩余的空閑塊數

            當需要分配一塊主存空間時,可從位示圖中找一個為“0”的位,把該位置成占用標志“1”,且根據它在位示圖中的字號和位號,按如下公式計算出與它對應的塊號:

                                        塊號=字號x字長+位號

            這個塊號就是當前所分配用來裝作業信息的主存塊的塊號。

                當一個作業執行結束時,應收回該作業所占用的主存塊。根據歸還的塊號可計算出歸還塊在位示圖中的對應位置,計算公式如下,并將該位的占用標志置為“0”。

                       字號=[塊號/字長],位號=塊號  mod 字長

             

            l          地址轉換

                每執行一條指令時按邏輯地址中的頁號查頁表,若頁表中無此頁號,則產生一個“地址錯”的程序性中斷事件;若頁表中有此頁號,則可得到對應的主存塊號,按計算公式可轉換成欲訪問的主存絕對地址。按絕對地址的計算公式為“塊號*塊長+頁內地址”

                  在多道程序設計的系統中,進入主存儲器的每個作業都有一張頁表。硬件要增加一個“頁表控制寄存器”。調度程序選中某個作業占用處理器時,就把該作業的頁表起站地址和長度送入頁表控制寄存器。于是,地址轉換機構根據頁表控制器就可找到該作業的頁表。

            l          采用頁式存儲管理為什么會延長指令的執行周期?有什么辦法可提高指令的執行速度?

                頁式存儲管理中的頁表一般是存放在主存中的。當要按給定的邏輯地址進行讀/寫時,首先要按頁號從頁表中讀出對應的塊號,然后算出絕對地址進行讀/寫。這樣就必須訪問主存兩次,多花了一次訪問主存的時間,因而延長了指令的執行周期,降低了執行速度。

            為了提高存取速度,通常都設置一個小容量的高速緩沖存儲器,用來存放頁表的一部分。把這部分頁表稱為“快表”。根據程序執行局部性的特點,在一段時間內總是經常訪問某些頁。若把這些頁登記在快表中,就可不要從主存中查頁表,而是從高速緩沖存儲器中查快表,這樣就可縮短查找時間,從而提高了指令執行速度。

             

            l          頁的共享與保護

                  頁的共享解決共享信息的保護問題。通常的辦法是在頁表中增加一些標志位指出對該頁信息可執行的操作。處理器執行指令時要核對操作要求,若想向只讀塊寫入信息,則指令停止執行。同樣地,對共享程序塊不允許讀或寫,只能調用執行,否則也停止指令的執行。當違反規定的訪問權限時,將產生一個“非法操作”的程序性中斷事件。
            第五節      段式存儲管理 

            l          基本原理

                段式存儲管理是根據人們對程序中需要分段編制的要求出發而提供的。它提供給用戶編程時使用的邏輯地址由段號段內地址兩部分組成,格式如下:

                其形式和頁式存儲管理相同。但是實際上是不同的:頁式存儲管理提供連續的邏輯地址,由系統自動地進行分頁;段式存儲管理中作業的分段是由用戶決定的,每段獨立編程,因此,段間的邏輯地址是不連續的。 

            l          段式存儲管理怎樣為作業分配主存空間?

                    段式存儲管理為作業的每一段分配一個連續的主存區域。作業的各個段可被裝到不相連的幾個區域中。 

            l          段式存儲管理怎樣保證作業的正確執行?

                為了控制作業的正確執行,必須把作業的各個段在主存儲器中的位置記錄下來。為此,裝作業時,操作系統為作業建立一張“段表”,指出該作業每個段的長度和在主存儲器的起始地址。作業執行時按邏輯地址中的段號到“段表”中查得該段在主存儲器中的起始地址,把起始地址與邏輯地址中的段內地址相加就得到欲訪問的主存絕對地址。所以,雖然各個段是分散存放在主存儲器中,但在作業執行中總能找到對應的絕對地址。此外,還可通過段表中的長度,核對欲訪問的主存單元是否在限定的分區內,以保證主存中信息的安全性。

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

            l          主存空間的分配和去配

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

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

            l          地址轉換和存儲保護

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

            絕對地址=根據段號找到段表中的起始地址+段內地址

            如果段內地址超過限長則產生“地址越界”程序性中斷事件達到存儲保護

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

            l          可分頁的段式存儲管理

                段頁式存儲管理兼顧了段式在邏輯上清晰和頁式在管理上方便的優點。

            段頁式存儲管理把主存儲器預先分成大小相等的許多塊,在把一段的信息裝入主存時,按塊的大小分頁,一段信息可被分散存放在若干主存塊中。

            段頁式存儲管理的邏輯地址的格式

                段頁式存儲管理為每一個裝入主存儲器的作業建立一張段表,且對每一段要建立一張頁表。段表的長度由作業分段的個數決定,段表中的每一個表目指出本段的頁表始址和長度。頁表的長度由對應段所分的頁的個數決定,頁表中的每一個表目指出本段的邏輯頁號與主存塊號的對應關系。

                   執行指令時,地址機構根據邏輯地址中的段號查段表,得到該段的頁表始址,然后根據頁號查頁表,得到對應的主存塊號,由主存塊號與邏輯地址中的頁內地址可形成可訪問的絕對地址。如果邏輯地址中的段號超出了段表中的最大段號或者頁號超出了該段頁表中的最大頁號,都要形成“地址越界”的程序性中斷事件。

             第六節      虛擬存儲器 

            l          虛擬存儲器

            虛擬存儲器:若允許邏輯地址空間大于存的實際空間,那么好像計算機系統為用戶提供了一個比主存的實際容量大的主存儲器,把這個可供用戶編程時使用的主存儲器稱為虛擬存儲器。

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

            l          虛擬存儲器的實現原理

            首先把作業信息保留在磁盤上,當作業請求裝入時,只將其中一部分先裝入主存,作業執行中若要訪問的信息不在主存中,再設法將這些信息裝入主存。 

            l          任何程序必須裝入主存后才能執行。現在又允許用戶作業中使用虛擬存儲器。試問,當用戶作業使用的虛存量超出實際主存量時怎么辦?

            一般說來,程序有兩個特點

                     1) 程序執行時有些部分是彼此互斥的,即在程序的一次執行中,執行了這一部分就不會去執行另一部分。

            2) 程序的執行往往具有局部性,在一段時間里可能循環執行某些指令或多次訪問某一部分的數據。因此沒有必要把全部作業信息同時裝入主存儲器。只要有大容量的磁盤作后盾,把作業信息保留在磁盤上,只將其中的一部分先裝入主存儲器。若作業執行中要訪問的信息不在主存中,則再設法把當前所需的信息裝入主存。這樣,通過合理的調度就可以使大作業在小空間里正確執行。

            l          采用頁式虛擬存儲管理時怎樣設計頁表?

            由于頁式虛擬存儲管理是把作業信息作為副本存放在磁盤上的,為了能方便地從磁盤上找到作業信息,應在表中指出每一頁副本在磁盤上的位置,此外還應指出哪些頁已在主存儲器,哪些頁還沒有裝人主存。通常在頁表中設置一個標志位來指示對應的頁是否在主存儲器,標志位為“1”表示對應頁在主存,為“0”表示尚未裝入主存。當對應頁在主存時,需在頁表中指出該頁所占用的主存塊號。 

            l          在采用頁式虛擬存儲管理的系統中執行作業時硬件和操作系統應怎樣配合?

                  在作業執行中訪問某頁時,由硬件的地址轉換機構查頁表。若該頁的對應表項中標志位為" 1",則按該表項中主存塊號進行地址轉換,得到絕對地址后去訪問主存。若該頁對應表項中標志位為“0”,則硬件形成“缺頁中斷”,表示該頁不在主存儲器中。當中斷裝置響應該中斷后,操作系統就要處理這個缺頁中斷。處理的辦法是:查主存分配表,找出一個空閑的主存塊;再查頁表,找出該頁在磁盤上的位置;再啟動磁盤讀出該頁信息,并把該頁信息裝入所找到的主存塊中;再修改頁表中與該頁對應的表項,在該表項中填入所找到的主存塊的塊號,并把標志位置為“1”;最后修改指令地址,讓硬件重新執行被中斷的指令。 

            l          常用的頁面調度算法:FIFOLRULFU

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

            1)先進先出調度算法(FIFO)

                算法思想:總是選擇最先裝入主存儲器的那一頁調出,或者說是把駐留在主存中時間最長的那一頁調出。

            算法實現:把裝入主存儲器的那些頁的頁號按進入的先后次序排成隊列,每次總是調出隊首的頁,當裝入一個新頁后,把新頁的頁號排入隊尾。在具體實現時可用指針K指示最早被裝入主存的那頁在隊列中的位置,每次總是選擇指針K指示的頁調出,在裝入一個新頁后,在指針指示的位置上填上新頁頁號,然后指針K1,指向下一次可調出的頁。圖4_6.1是先進先出調度算法的示例。

             2)最近最少用算法(LRU)

                算法思想:總是選擇距現在最長時間內沒有被訪問過的頁面先調出。

                算法實現:1是在頁表中為每一頁增加一個計時標志,記錄該頁面自上次被訪問以來所經歷的時間,每被訪問一次都應從“0”開始重新計時。于是,產生缺頁中斷,而要裝入新頁時,檢查頁表中各頁的計時標志,從中選出計時值最大的那一頁調出(即最近一段時間里最久沒有被使用過的頁),并且把各頁的計時標志全部置“0”,重新計時。當再一次產生缺頁中斷時,又可找到最近最久沒有被使用過的頁,將其調出。這種實現方法必須對每一頁的訪問情況加以記錄和更新,實現比較麻煩且開銷大。

                2堆棧實現,這種方法能準確地選擇最近最少用的頁。棧中存放當前在主存中的頁,每當訪問一頁時就調整一次,使棧頂總是指出最近訪問的頁,而棧底是最近最少用的頁。

            例:假定系統為某個進程分配了三個物理塊,而進程的訪問順序為701203042303212。采用LRU算法如圖4_6.2所示。

            進程運行時陸續將要訪問的701三個頁面裝入內存。因為此時內存中尚有空閑塊,因此不存在淘汰問題。第四個要訪問的頁面是2頁面,不在內存中,此時發生缺頁中斷,需要從外存調入,而這時該進程已不存在空閑塊,需要選擇淘汰的頁面以被置換。我們將最近最少使用的7頁面淘汰。第五個要訪問的頁面是0頁面,在系統中已經存在,不需要調入,命中一次。由圖中可看出,采用LRU算法共命中5次(×標記)。

                3)最近最不常用調度算法(LFU)

            算法思想:如果一個頁面被訪問的次數多,則是經常要使用的頁面,就不把它調出。所以,這種算法總是選擇被訪問次數少的頁面調出。

            算法實現:為每一頁設置一個計數器,每當訪問一頁時,就把該頁對應的計數器加1。操作系統確定一個周期T, 在周期T的一段時間內,若沒有發生缺頁中斷,則把所有的計數器清“0”,開始一個新的周期重新計數。若在周期T的時間內發生了缺頁中斷,則選擇計數值最小的那頁調出(它是最近一段時間內最不常用的頁),同時把所有的計數器清“0”。

                4)最佳頁面調度算法(OPT

                一個理想的調度算法是當要裝入一個新頁而必須調出一個頁面時,所選擇的調出頁應該是以后再也不使用的頁或者是距當前最長時間以后才使用的頁。這種調度算法是最優的,然而這種算法是無法實現的,因為無法預測作業的運行情況,而只能將其作為衡量其他頁面調度算法的標準。

            l          什么叫“抖動”?

            如果采用的頁面調度算法不合適,就會出現這樣一種現象:剛剛被調出的頁面又立即要用,因而又要把它裝入,而裝入不久又被選中調出,調出不久又要裝入使用,如此反復,使調度非常頻繁。這種現象稱為“抖動”,或稱為“顛簸”。 

            l          缺頁中斷率

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

            1)分配給作業的主存塊數----塊數n↑(增加) f↓(下降)

            2)頁面的大小----頁面大小↑ f↓

            3)程序編制方法----局部化程度↑ f↓

            l          段式虛擬存儲管理

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

            l          段式虛擬存儲管理的實現要點

                段式存儲管理把作業中各個分段信息都保留在磁盤上,以段為單位分配主存空間。

                當作業可以占用處理執行時,首先把當前需要的一個段或幾個段裝入主存,同時為該作業建立段表。作業執行時若要訪問段已在主存,則可立即把邏輯地址轉換成絕對地址,否則產生一個“缺段中斷”,由操作系統把需要用的段裝入主存。新的段裝好之后重新執行被中斷的指令。  點擊見相關動畫

            l          操作系統處理缺段中斷時應做哪些主要工作?

            為了裝入所缺的段,操作系統應根據該段的長度,查主存分配表,找出一個足夠大的連續區以容納該分段。如果找不到足夠大的連續區,則檢查空閑區的總和。若空閑區總和能滿足該段要求,則進行適當移動,將分散的空閑區集中,否則把主存中的一段或幾段調出;然后把要訪問的段裝入主存。段被移動、調出、裝人后都要對段表中相應表項作修改。新的段裝入后應讓作業重新執行被中斷的指令。

            l          提供虛擬存儲器有什么優點?

            提供虛擬存儲器后,從系統的角度來看,使主存空間能充分地被利用,從而提高了主存空間的利用率。從用戶的角度來看,程序使用的邏輯地址空間可以大于主存的實際容量,為編制程序提供了方便。

            posted on 2009-09-28 14:08 bellgrade 閱讀(1427) 評論(0)  編輯 收藏 引用 所屬分類: 操作系統原理
            久久久久久亚洲精品不卡| 久久香综合精品久久伊人| 久久亚洲AV永久无码精品| 精品久久久中文字幕人妻| 99久久精品午夜一区二区| 久久久久亚洲AV成人网人人网站 | 99精品国产免费久久久久久下载| 久久精品免费一区二区| 久久精品国内一区二区三区| 综合久久一区二区三区| 91精品国产综合久久香蕉| 伊人久久久AV老熟妇色| 久久国产成人午夜aⅴ影院| av无码久久久久不卡免费网站| 久久精品国产99久久丝袜| WWW婷婷AV久久久影片| 偷偷做久久久久网站| 国产精品久久久久久久久久免费| 亚洲人成伊人成综合网久久久| 久久国产精品二国产精品| 亚洲国产二区三区久久| 久久国产乱子伦免费精品| 久久久久久国产精品无码下载| 久久久久国产精品嫩草影院| 韩国无遮挡三级久久| 久久精品夜夜夜夜夜久久| 久久AV高潮AV无码AV| 久久人与动人物a级毛片| 国产高清美女一级a毛片久久w| 国产精品禁18久久久夂久| 性做久久久久久久| 亚洲va久久久噜噜噜久久狠狠 | 国内精品久久久久久久久| 久久99毛片免费观看不卡| 国产精品99久久久久久人| 精品久久久久久久无码| 精品久久久久久无码中文字幕一区 | 色综合久久无码中文字幕| 伊人久久大香线蕉亚洲五月天| 久久亚洲精品国产精品婷婷| 亚洲精品国产第一综合99久久|