編輯
編輯
存儲管理可以分為固定存儲管理和分頁存儲管理。
現在固定存儲管理已經不用也不考,但要知道因為固定存儲管理指的是整存整取
也就是把一整個程序,比如說10G的游戲全部都存到內存里
這樣的話是非常占用內存的,這個固定存儲管理現在已經不用了。
然后這里我們主要看分頁存儲管:
1.分頁存儲管理,首先我們要知道什么是分頁?這里的頁也就是邏輯頁。
也就是說,分頁存儲管理把進程也就是程序運行所需要的內存,分成一個個的頁,
比如一個進程它的大小是1G,那么我們就可以把這1G分成1024乘以1024 kb,這么多個邏輯頁,然后在實際的物理內存中我們也分出來,這么多的頁,這樣,邏輯頁,就跟實際的
物理的頁號就可以一一對應了,這樣再運行的時候,就可以需要哪個頁的內存,就加載哪個
頁的內存,這樣,就不用把所有程序都加載以后再運行程序了.
這里邏輯分頁叫做邏輯頁,而物理分頁后的頁,叫頁框,或者叫做物理塊號
--------------------------
那么這里的考點就是:怎么計算,邏輯頁 和 物理頁框的對應關系.
這個分頁存儲基于的是局部性原理,空間局部性原理 和 時間局部性原理.
編輯
首先我們要明白什么是,邏輯頁:
可以看到它由頁號和頁內地址組成,可以看到,比如我們有1GB的話,那么我們就有
1024 * 1024 KB對吧,也就是我們有1024* 1024個頁,然后每個頁,有1K個Byte字節對吧
所以可以看到,我們通過頁號,和頁內地址就可以確認一個邏輯地址了.
要注意這里,每個頁號和業內地址,不一定是32位的,這個要看怎么劃分的,但是不管怎么劃分,高位,
肯定是頁號,然后地位是頁內地址對吧.
編輯
然后我們繼續來看這個,邏輯頁地址和物理地址的轉換關系,可以看到非常簡單:
首先要明確的是,因為邏輯地址和物理地址是一一對應的,所以邏輯頁的,頁內地址可以看到和
物理地址的值是一樣的,然后,頁號不一樣對吧,頁號有個映射表,通過映射表,查找得到
對應的物理塊號就可以了.
可以看到上面這個就是 15 256對吧,對應的物理塊號是15,對應的物理地址是256對吧.
編輯
編輯
1.首先要明白為什么會有頁面置換算法呢?首先我們上面已經說了,程序在執行的時候,會把程序用到的內存,首先進行分頁對吧,分成邏輯頁,而對應的物理內存,也會分頁,物理頁框對吧,然后,當我們的
物業頁框已經都被程序占用滿了以后呢?怎么弄?這個時候如果我們想要再去運行其他的程序的話,那么我們就需要把長時間不用的物理內存頁給換下來,把不用的內存,換成有用的內存,因為我們知道,
程序在運行的時候,往往有些內存是很久都不會再用了,但是呢,沒有被及時的釋放,所以這個頁面置換算法,就是把長時間沒有用的內存置換出來,供需要的程序使用.
2.這些頁面置換算法中:最常用的是:
編輯
5.這個最近最少使用LRU算法使用的多,在進程執行過程中,過去一段時間,最少使用的頁面被置換淘汰.這個是根據局部性原理的,就是空間局部性原理就是,假設空間上經常使用的內存相鄰的內存還會被經常使用,時間局部性原理就是:假設時間上最近被使用的內存還會重復被使用.
3.還要知道這里的最優算法OPT是沒有被使用的,它是個理想算法,是程序執行完以后,再去分析,顯然馬后炮算法了,但是它可以,在程序執行完以后,找到最長時間沒有被訪問的頁面,顯然這種算法,最精準但是沒什么用,僅僅是用來,跟其他算法做對比用的,看看其他算法跟這個最優算法有多少差距.
4.FIFO先進先出算法,這個算法就是說,先調入內存的頁被先置換淘汰,這樣是有問題的,因為先進去的內存,有可能是經常訪問的,后進去的也不一定就是用的多的,所以這種方式,經常有抖動現象,效率低,缺頁率高.
5.然后再來看一下頁表和快表,首先看什么是頁表:
頁表,上面我們已經說了,指的是我們說的程序的邏輯頁 然后 物理內存上有頁框,那么整個存儲,
邏輯頁和物理頁框之間的映射關系的表,就是頁表,然后什么是快表呢?
這里要注意:
頁表:首先要知道頁表是存儲的程序邏輯頁和物理頁框的映射關系的一個表,他是存儲在內存中的,那么,如果要訪問程序的內存,那么就要怎么樣?就需要兩次讀取了對吧,首先去內存中找到對應的頁表,
然后根據頁表找到對應的,物理內存的頁框,然后再找對對應的物理地址,這個是需要訪問兩次內存的,
所以速度上就慢一些.
然后什么是快表呢?:
注意快表也是頁表對吧,他也是存了程序的邏輯頁和物理頁框的對應關系,但是快表是存在cache中的對吧,我們說,cache比內存要快10倍,所以,當要訪問程序的內存的時候,如果首先去cache中查詢快表,通過快表再找到對應的物理頁框,然后再去訪問內存,這樣的話,就相當于訪問了一次內存對吧,速度要快了很多.
-----------所以頁表和快表,區別就是頁表訪問兩次內存,快表訪問一次內存速度更快------------
編輯
我們來看這個題目,可以看到,這里看看怎么解題:
編輯
來看著這個題目,首先這里,進程A的邏輯地址是1111對吧,這個是十進制的,
然后,我們看到物理頁的大小是512字節,所以,我們可以嘗試這樣:
把1111 = 512 * 2 + 87 = 1024 + 87 對吧
這里我們就可以看到了,這里,這個地址應該是放到第2號內存頁的對吧,第0,1,2第2號物理頁框對吧
因為一共是1111,那么兩個512,不夠,還需要額外的87,所以,就是第0 , 1 , 2 第下標是2的邏輯頁中
對吧.因為注意這里1111,是邏輯地址.
所以這里解題的方法就是,如果你遇到10進制的話,你就可以把地址:轉換成頁的大小* 幾,+ 幾
這里的* 幾,就是對應的頁框的下標對吧.如果這里用的是邏輯地址,那么對應的頁,就是邏輯頁,
所以這里就是第下標為2的邏輯頁,那么通過,頁表查詢,可以看到
邏輯頁對應的物理頁框號是4對吧.
所以第一問選擇C 4
然后第二問就很簡單了,所進程A的邏輯4 和 進程B的邏輯5 共享物理頁8 ,所以
對應的進程A的邏輯4 和 進程B的邏輯5 對應的物理頁都應該填寫8對吧
答案是:D
編輯
看這個題目,可以看到有4個頁,一個是用來存儲程序的,然后3個空著的,
那么如果是按行存放的話,
矩陣A[100][100]總共有100行、100列,若矩陣A按行序存放,那么每一個頁面可以存放2行,也就是說矩陣的2行剛好放在1頁內,訪問它們需要中斷1次,這樣100行總共需要中斷50次。
若矩陣A按列序存放,那么每一個頁面可以存放2列,也就是說矩陣的2列剛好放在1頁內,由于內循環“FORj:=l to 100
DO”是按列序變化,訪問它們需要中斷50次計算機中io設備是什么,這樣100行總共需要中斷次。
這里要知道,按行1行,100個數據,一頁放200個,所以,每200個就要中斷一次,10000個數據
就是10000 / 200 = 50 次,
如果按列存放的話,那么,兩列是一頁數據,2列就是200個數據對吧,所以,
每讀取2列數據,就要中斷一次,所以就是,每行100個數據中斷100 /2 = 50次
那么有100行,就是100 * 50 = 5000次中斷.
就這樣理解吧,不太好理解.
編輯
這里再說一下,如果我們按列存放,那么,一頁可以存放2列數據,對吧,
我們的數據是,1,2,3,4...這樣的,但是按列存放的話就是,第一頁,存放兩列數據,
也就是會存放1,2 這兩個數據,然后第二頁,存放 3,4 這兩列對吧...
以此類推,第50頁,存放99,100 對吧,所以這樣的話,每一行數據的讀取,就要讀取
50個頁,也就是中斷50次,而有100行,所以就是50 * 100 = 5000 中斷5000次對吧
這樣就說明白了.
編輯
編輯
然后我們再來看這個什么是內存的分段存儲,可以看到,這里
內存分段,需要知道每個段他的物理大小不同,因為分段是按照邏輯整體劃分的,其實就是按照一個軟件的功能劃分的,因為功能不一樣,所以段的大小不一樣,用的內存不一樣對吧.
那么怎么找一個段的地址呢,怎么確定呢?
首先要知道一個段存的時候,存了段號 和 段內地址
然后通過段號,去一個段表里面去查詢,根據段號,就能在段表中找到,這個段,對應的,段長是多少,
以及這個段的基地址是多少,也就是,比如第1號段,段長100,基地址是200,那么第2段的內存就是
從200 到300這個范圍對吧,要知道段內地址跟物理地址也是一樣的.
編輯這個題目比較簡單,可以看到
給出的選項是0 是段號,然后后面790 是 從基地址開始的,段內地址,可以看到D選項
第0號段,段內地址810,已經超過800段長了.
然后再看第二問:
這里自然就選擇C了.
編輯
編輯
1.可以看到,這里
IO請求,然后層次,這里層次要記住,會考,中間那3個過程,往往,刪除幾個問你是啥
2.要知道這個過程:
1.當用戶程序試圖讀取一個硬盤文件時:
首先需要操作系統實現這一操作。首先 與設備無關軟件 這個軟件去檢查過高速緩存中有無要讀取的數據塊。
2.若沒有,則調用設備驅動程序。向io硬件發出請求。這個時用戶進程阻塞并等待硬件磁盤讀取文件操作完成。當磁盤讀取操作完成時,磁盤硬件會產生一個中斷。
3.然后轉入中斷處理程序,中斷處理程序會檢查中斷的原因。中斷處理程序檢查到中斷產生的原因是由于磁盤的讀取操作已經完成。
5.這個時候就會喚醒用戶進程,然后用戶進程取回從磁盤中讀取的信息。從而結束此次IO請求。
6.用戶進程在得到了所需的硬盤文件的內容以后就可以進行后續的運行了。
編輯
編輯
文件的索引結構有三種:
1.直接索引,可以看到圖中0~9就是直接索引。直接索引指的是每個索引節點存放的直接就是內容,假設每個物理盤塊大小為4KB,那么0~9就這10個直接索引,就可以存儲4 KB×10=40 KB的數據。
2.第二種索引文件結構是:一級間接索引節點,要理解一級間接索引節點,這里首先要知道物理盤塊的大小,比如物理盤塊大小為4 kb。可以看到上圖,第10號就是一級間接索引節點。他所占用的大小就是一個物理盤塊,比如說他的大小是4KB。如果每個地址對應的大小是4B,那么也就是說,這個一級間接索引節點,對應了1024個地址,那么這1024個地址,每個地址又對應一個物理盤塊,因為我們知道每個物理盤塊大小是4KB,所以說這個一級間接索引節點,對應的內存大小是1024*4 kb=4096 kb的數據。
3.然后再來看二級索引節,二級索引節點指向的是一級索引節點的地址,然后一級間接索引節點的地址再去對應物理盤塊,所以說如果二級索引節點的大小是4 kb的話,假設一個物理地址是4B的話,那么這個二級索引節點,他就有1024個一級間接索引地址,然后這1024個一級間接索引地址,每一個一級索引地址計算機中io設備是什么,因為物理地址需要4B來存儲,每個一級索引地址大小也是4KB的話,那么每個一級索引節點,也對應1024個,物理地址,也就是對應著1024個物理盤塊,每個物理盤塊存儲的數據又是4KB,所以說這一個二級索引節點,最終對應的大小就是:(1024 * 1024 * 4)KB的大小。
編輯
1.然后我們來看這個題目,可以看到這里.
這里索引地址項,這來要知道因為有直接索引所以這里這個到,標注的里面,50,67...
這個是物理索引號對吧,然后實際上邏輯索引號是從0對應50 1 對應67 ....這樣對吧.
2.然后我們還需要明確這里物理索引塊大小是1KB,每個索引地址項有4個字節,所以,這個物理索引塊,就有1KB = 1024B / 4B = 256 個 索引地址項對吧.
3.然后我看第一題,說File1對應的邏輯號為5,和261的信息對應的物理塊號是多少,那么,我們知道
邏輯號是從0,1,2,3...這樣的對吧,所以上面,到都是直接索引,所以對應的邏輯號就是:
0,1,2,3,4...然后再看,,是一級間接索引對吧,那么首先看這個,這個索引塊,
大小是1KB對吧,他包含了,1KB / 4B = 256 個索引地址對吧,前5個,0,1,2,3,4 邏輯號都是直接索引,
從第6個開始,也就是邏輯號是5的時候,可以看到圖中對應的物理塊號是58對吧,這里是一級間接索引對吧,這就找到了,邏輯號5對應的物理塊號是58對吧,然后繼續看,261,這個邏輯號對應的物理塊號是多少呢?
這個,首先要知道,比如5,6,之間有2個數怎么算的? 6 - 5 +1 對吧,那么,我們知道,,這個磁盤索引塊有256個索引地址,那么這個256是怎么算的,首先我們知道了,,這個邏輯塊號的開始是5對吧,結束呢是多少? 也就是 256 = ? - 5 + 1 對吧,就得出,結束標志是: 260對吧,所以,那么邏輯號261,就對應,,這個一級間接索引的,第一個索引號對吧,也就是:他對應的物理塊號是187對吧.
所以第一題答案就是:C
然后看第二題,可以看到:101號物理塊對應的,可以看到101,上面已經標注了是對吧,這個對應的是二級地址索引表,這個題目中都給出答案了.
編輯
文件目錄這里就非常簡單了,可以看到這里
這里要知道相對路徑,絕對路徑,全文件名就可以了
編輯
編輯
1.然后再來看這個位示圖法:這個是用來表示文件存儲器的使用情況的,比如一個文件如果是
然后一個物理塊號是1MB的話,那么,就是有1000個物理塊,來存儲這個文件.
2.那么這個位示圖呢,就有1000個bit,每個bit都對應一個物理塊,這個物理塊號從0開始,0,1,2,3...這樣
然后比如這個位示圖中的,1個位,是1的時候,表示某個物理塊號在使用中,是0的時候,表示某個物理塊號是空閑狀態.
3.然后來看這個題目:已經說明了物理塊號是從0,1,2,3...這個編號的,然后位示圖字的編號也是0,1,2,3... 這里的字,注意其實就是對應著,第幾個物理塊號對吧.并且說明了,系統字長是32位,
這里要注意字長,實際上就可以認為是計算機是多少位的.
“一個字的位數,即字長,是計算機系統結構中的一個重要特性。字長在計算機結構和操作的多個方面均有體現,計算機中大多數寄存器的大小是一個字長。 計算機處理的典型數值也可能是以字長為單位。CPU和內存之間的數據傳送單位也通常是一個字長,還有內存中用于指明一個存儲位置的地址也經常是以字長為單位的
4.那么說16385號物理塊對應的是位示圖中的第幾個字,要知道這里16385號物理塊,其實是第
16386個物理塊,對吧,因為是從0開始的,所以也就是求16386這個物理塊號,對應的是多少字,那么
因為一個字是32位,而位示圖,又是以位來存儲的所以就是,16386 / 32 = 512 對吧.
5.然后第二問:如果磁盤容量是 那么位示圖需要多少個字來存儲,其實,
有多少物理塊呢?因為一個物理塊大小是4MB所以, / 4MB = / 4MB =
個物理塊對吧,也就是256K個物理塊,對吧,也就是對應個物理塊號,那么一個
字可以表示32個物理塊號,那么,就需要 / 32 = 8000個字對吧.
所以答案是C D