設計一個虛擬存儲區
❶ 什麼是虛擬存儲器,作用是什麼
虛擬存儲器:在具有層次結構存儲器的計算機系統中,自動實現部分裝入和部分替換功能,能從邏輯上為用戶提供一個比物理貯存容量大得多,可定址的「主存儲器」。虛擬存儲區的容量與物理主存大小無關,而受限於計算機的地址結構和可用磁碟容量。
作用:虛擬內存的作用 內存在計算機中的作用很大,電腦中所有運行的程序都需要經過內存來執行,如果執行的程序很大或很多,就會導致內存消耗殆盡。為了解決這個問題,Windows中運用了虛擬內存技術,即拿出一部分硬碟空間來充當內存使用,當內存佔用完時,電腦就會自動調用硬碟來充當內存,以緩解內存的緊張。
❷ 虛擬存儲器技術主要用於解決什麼問題簡述虛擬存儲器的基本工作原理。
虛擬存儲器技術主要解決電腦內存不夠的問題,電腦中所運行的程序均需經由內存執行,若執行的程序佔用內存很大或很多,則會導致內存消耗殆盡。
為解決該問題,Windows中運用了虛擬內存技術,即勻出一部分硬碟空間來充當內存使用。當內存耗盡時,電腦就會自動調用硬碟來充當內存,以緩解內存的緊張。若計算機運行程序或操作所需的隨機存儲器(RAM)不足時,則 Windows 會用虛擬存儲器進行補償。
工作原理
1、中央處理器訪問主存的邏輯地址分解成組號a和組內地址b,並對組號a進行地址變換,即將邏輯組號a作為索引,查地址變換表,以確定該組信息是否存放在主存內。
2、如該組號已在主存內,則轉而執行④;如果該組號不在主存內,則檢查主存中是否有空閑區,如果沒有,便將某個暫時不用的組調出送往輔存,以便將這組信息調入主存。
3、從輔存讀出所要的組,並送到主存空閑區,然後將那個空閑的物理組號a和邏輯組號a登錄在地址變換表中。
4、從地址變換表讀出與邏輯組號a對應的物理組號a。
5、從物理組號a和組內位元組地址b得到物理地址。
6、根據物理地址從主存中存取必要的信息。
(2)設計一個虛擬存儲區擴展閱讀:
相關概念
1、實地址與虛地址
用戶編製程序時使用的地址稱為虛地址或邏輯地址,其對應的存儲空間稱為虛存空間或邏輯地址空間;而計算機物理內存的訪問地址則稱為實地址或物理地址,其對應的存儲空間稱為物理存儲空間或主存空間。程序進行虛地址到實地址轉換的過程稱為程序的再定位。
2、虛擬內存的訪問過程
虛存空間的用戶程序按照虛地址編程並存放在輔存中。程序運行時,由地址變換機構依據當時分配給該程序的實地址空間把程序的一部分調入實存。
每次訪存時,首先判斷該虛地址所對應的部分是否在實存中:如果是,則進行地址轉換並用實地址訪問主存;否則,按照某種演算法將輔存中的部分程序調度進內存,再按同樣的方法訪問主存。
3、異構體系
從虛存的概念可以看出,主存-輔存的訪問機制與cache-主存的訪問機制是類似的。這是由cache存儲器、主存和輔存構成的三級存儲體系中的兩個層次。cache和主存之間以及主存和輔存之間分別有輔助硬體和輔助軟硬體負責地址變換與管理,以便各級存儲器能夠組成有機的三級存儲體系。
❸ 如何給硬碟設置虛擬內存
1、電腦上面點擊【開始】菜單(或者按鍵盤上面的Windows鍵),在「計算機」上面單機右鍵,選擇「屬性」。
(3)設計一個虛擬存儲區擴展閱讀
虛擬存儲器地址變換基本上有3種形虛擬存儲器工作過程式:全聯想變換、直接變換和組聯想變換。任何邏輯空間頁面能夠變換到物理空間任何頁面位置的方式稱為全聯想變換。
替換規則用來確定替換主存中哪一部分,以便騰空部分主存,存放來自輔存要調入的那部分內容。常見的替換演算法有4種。
①隨機演算法:用軟體或硬體隨機數產生器確定替換的頁面。
②先進先出:先調入主存的頁面先替換。
③近期最少使用演算法(LRU,Least Recently Used):替換最長時間不用的頁面。
④最優演算法:替換最長時間以後才使用的頁面。這是理想化的演算法,只能作為衡量其他各種演算法優劣的標准。
❹ 鎬庢牱鍚堢悊鐨勮捐¤嚜宸辯殑鉶氭嫙鍐呭瓨錛岃瘋︾粏鐐癸紒璋浜嗭紒
緇忓吀璇鍖哄洓錛氳櫄鎷熷唴瀛樿繖涔堣炬渶"縐戝"錛
緇忓吀紼嬪害錛氣槄鈽呪槄鈽呪槄
鍗遍櫓紼嬪害錛氣槄鈽
1.閿欒鐨勮В鍐蟲柟娉曟弿榪
(1)鍦"鎴戠殑鐢佃剳"鐨"灞炴"紿楀彛錛屽垏鎹㈠埌"楂樼駭鈫掓ц兘鈫掕櫄鎷熷唴瀛"紿楀彛錛屽皢鉶氭嫙鍐呭瓨鐨勫垵濮嬪煎拰鏈澶у艱劇疆涓哄悓涓鍊煎彲浠ュ噺灝戠佺洏紕庣墖錛屾彁楂樼郴緇熻繍琛屾晥鐜囥
(2)鍒嗗埆鍦ㄧ‖鐩樼殑姣忎釜鍒嗗尯涓婇兘璁劇疆涓閮ㄥ垎鉶氭嫙鍐呭瓨錛屽彲浠ユ彁楂樼郴緇熺殑鎬ц兘銆
2.鏂規堢敱鏉ュ強鍚庢灉
Windows閲囩敤鍔ㄦ佺殑鏂規硶瀵硅櫄鎷熷唴瀛樿繘琛岀$悊錛屼篃灝辨槸璇村綋鍦ㄦ墽琛岃楄垂鍐呭瓨姣旇緝澶х殑紼嬪簭(濡侾hotoshop銆丮S Office絳)鏃訛紝緋葷粺浼氳嚜鍔ㄦ墿澶ц櫄鎷熷唴瀛樼殑欏甸潰鏂囦歡鐨勪綋縐錛屼互鑾峰緱鏇村氱殑鍙鐢ㄨ祫婧愶紝鍙嶄箣錛屽傛灉鐗╃悊鍐呭瓨榪樻湁杈冨氱殑絀洪棽絀洪棿錛岀郴緇熷垯浼氳嚜鍔ㄧ緝灝忛〉闈㈡枃浠剁殑浣撶Н銆傝繖灝辨槸鎴戜滑鍦ㄥ療鐪嬬郴緇熶腑鐨刾ageflie.sys(Windows 2000/XP)鎴杦in386.swp(Windows 9X/Me)鏂囦歡鏃訛紝璇ユ枃浠舵湁鏃跺欏ぇ鏈夋椂鍊欏皬鐨勫師鍥犳墍鍦ㄣ
鐞嗚轟笂鏉ヨ詫紝濡傛灉灝嗚櫄鎷熷唴瀛樼殑鍒濆嬪煎拰鏈澶у艱劇疆涓哄悓涓鍊礆紝榪欐牱鍙浠ヨ╃佸ご榪炵畫璇誨彇錛屼笉瀹規槗鍑虹幇紓佺洏紕庣墖錛屼粠鑰屾彁楂樼郴緇熺殑榪愯屾晥鐜囥備絾鍦ㄥ疄闄呬嬌鐢ㄧ殑榪囩▼涓錛屾垜浠浼氬彂鐜幫紝褰撴垜浠璇誨彇鏌愪釜澶ф枃浠剁殑鏃跺欙紝甯稿父閬?quot;鍐呭瓨婧㈠嚭"閿欒錛岀郴緇熷弽鑰岃繍琛屼笉紼沖畾銆
鑰屽逛簬鎵璋"灝嗙‖鐩樼殑姣忎釜鍒嗗尯閮借劇疆鉶氭嫙鍐呭瓨"鐨勫勭悊鍔炴硶錛岀敱浜庡悇涓鍒嗗尯涓婃枃浠跺垎甯冪殑涓嶇『瀹氭э紝瀵艱嚧紓佺洏紕庣墖鐨勪笉鍙閬垮厤錛岃櫧鐒禬indows浼氫紭鍏堥夋嫨浣跨敤涓嶅父榪涜屾枃浠惰誨啓鎿嶄綔鐨勫垎鍖轟腑鐨勯〉闈㈡枃浠訛紝涓嶈繃榪欐牱浼氬姞閲嶇郴緇熷唴瀛樼$悊鐨勮礋鎷咃紝灝界$畻涓嶄笂寰堝氱殑璋璇錛屼絾鑷沖皯涓嶆槸鏈濂界殑鏂規堛
灝忕煡璇嗭細 鎵璋"鉶氭嫙鍐呭瓨"錛岄氫織鐨勮詫紝灝辨槸褰撴垜浠鐨勭墿鐞嗗唴瀛樹笉澶熺敤鐨勬椂鍊欙紝緋葷粺灝嗙‖鐩樹笂鐨勯儴鍒嗙┖闂存ā鎷熸垚鍐呭瓨浣跨敤錛屽皢鏆傛椂涓嶇敤鐨勭▼搴忔垨鏁版嵁瀛樻斁鍒拌繖閮ㄥ垎絀洪棿涓錛岀瓑闇瑕佺殑鏃跺欐柟渚垮強鏃惰皟鐢ㄣ傝櫄鎷熷唴瀛樺湪Windows 9X/Me涓瀵瑰簲鐨勬暟鎹涓存椂瀛樻斁鏂囦歡涓簑in386.swp(鎴戜滑縐頒負浜ゆ崲鏂囦歡錛孲wapfile)錛屽湪Windows 2000/XP涓瀵瑰簲鐨勬暟鎹涓存椂瀛樻斁鏂囦歡涓篜agefile.sys(鎴戜滑縐頒負欏甸潰鏂囦歡鎴栬呭垎欏墊枃浠訛紝PageFile)銆傞〉闈㈡枃浠朵繚瀛樺湪紜鐩樺垎鍖虹殑鏍圭洰褰曚腑錛屾枃浠跺睘鎬т負"闅愯棌"錛屾垜浠闇瑕佸湪"鏂囦歡澶歸夐」"涓閫変腑"鏄劇ず鎵鏈夋枃浠"鎵嶈兘鐪嬪埌瀹冦
3.姝g『鐨勮В鍐沖姙娉曪細
瀵逛簬鉶氭嫙鍐呭瓨濡備綍璁劇疆鐨勯棶棰橈紝寰杞宸茬粡緇欐垜浠鎻愪緵浜嗗畼鏂圭殑瑙e喅鍔炴硶錛屽逛簬涓鑸鎯呭喌涓嬶紝鎴戜滑鎺ㄨ崘閲囩敤濡備笅鐨勮劇疆鏂規硶錛
(1)鍦╓indows緋葷粺鎵鍦ㄥ垎鍖鴻劇疆欏甸潰鏂囦歡錛屾枃浠剁殑澶у皬鐢變綘瀵圭郴緇熺殑璁劇疆鍐沖畾銆傚叿浣撹劇疆鏂規硶濡備笅錛氭墦寮"鎴戠殑鐢佃剳"鐨"灞炴"璁劇疆紿楀彛錛屽垏鎹㈠埌"楂樼駭"閫夐」鍗★紝鍦"鍚鍔ㄥ拰鏁呴殰鎮㈠"紿楀彛鐨"鍐欏叆璋冭瘯淇℃伅"鏍忥紝濡傛灉浣犻噰鐢ㄧ殑鏄"鏃"錛屽垯灝嗛〉闈㈡枃浠跺ぇ灝忚劇疆涓2MB宸﹀彸錛屽傛灉閲囩敤"鏍稿績鍐呭瓨瀛樺偍"鍜"瀹屽叏鍐呭瓨瀛樺偍"錛屽垯灝嗛〉闈㈡枃浠跺艱劇疆寰楀ぇ涓浜涳紝璺熺墿鐞嗗唴瀛樺樊涓嶅氬氨鍙浠ヤ簡銆
灝忔彁紺猴細瀵逛簬緋葷粺鍒嗗尯鏄鍚﹁劇疆欏甸潰鏂囦歡錛岃繖閲屾湁涓涓鐭涚浘錛氬傛灉璁劇疆錛屽垯緋葷粺鏈夊彲鑳戒細棰戠箒璇誨彇榪欓儴鍒嗛〉闈㈡枃浠訛紝浠庤屽姞澶х郴緇熺洏鎵鍦ㄧ侀亾鐨勮礋鑽鳳紝浣嗗傛灉涓嶈劇疆錛屽綋緋葷粺鍑虹幇钃濆睆姝繪満(鐗瑰埆鏄瘲TOP閿欒)鐨勬椂鍊欙紝鏃犳硶鍒涘緩杞鍌ㄦ枃浠 (Memory.dmp)錛屼粠鑰屾棤娉曡繘琛岀▼搴忚皟璇曞拰閿欒鎶ュ憡浜嗐傛墍浠ユ姌涓鐨勫姙娉曟槸鍦ㄧ郴緇熺洏璁劇疆杈冨皬鐨勯〉闈㈡枃浠訛紝鍙瑕佸熺敤灝辮屼簡銆
(2)鍗曠嫭寤虹珛涓涓絀虹櫧鍒嗗尯錛屽湪璇ュ垎鍖鴻劇疆鉶氭嫙鍐呭瓨錛屽叾鏈灝忓艱劇疆涓虹墿鐞嗗唴瀛樼殑1.5鍊嶏紝鏈澶у艱劇疆涓虹墿鐞嗗唴瀛樼殑3鍊嶏紝璇ュ垎鍖轟笓闂ㄧ敤鏉ュ瓨鍌ㄩ〉闈㈡枃浠訛紝涓嶈佸啀瀛樻斁鍏跺畠浠諱綍鏂囦歡銆備箣鎵浠ュ崟鐙鍒掑垎涓涓鍒嗗尯鐢ㄦ潵璁劇疆鉶氭嫙鍐呭瓨錛屼富瑕佹槸鍩轟簬涓ょ偣鑰冭檻錛氬叾涓錛岀敱浜庤ュ垎鍖轟笂娌℃湁鍏跺畠鏂囦歡錛岃繖鏍峰垎鍖轟笉浼氫駭鐢熺佺洏紕庣墖錛岃繖鏍瘋兘淇濊瘉欏甸潰鏂囦歡鐨勬暟鎹璇誨啓涓嶅彈紓佺洏紕庣墖鐨勫共鎵幫紱鍏朵簩錛屾寜鐓Windows瀵瑰唴瀛樼殑綆$悊鎶鏈錛學indows浼氫紭鍏堜嬌鐢ㄤ笉緇忓父璁塊棶鐨勫垎鍖轟笂鐨勯〉闈㈡枃浠訛紝榪欐牱涔熷噺灝戜簡璇誨彇緋葷粺鐩橀噷鐨勯〉闈㈡枃浠剁殑鏈轟細錛屽噺杞諱簡緋葷粺鐩樼殑鍘嬪姏銆
(3)鍏跺畠紜鐩樺垎鍖轟笉璁劇疆浠諱綍欏甸潰鏂囦歡銆傚綋鐒訛紝濡傛灉浣犳湁澶氫釜紜鐩橈紝鍒欏彲浠ヤ負姣忎釜紜鐩橀兘鍒涘緩涓涓欏甸潰鏂囦歡銆傚綋淇℃伅鍒嗗竷鍦ㄥ氫釜欏甸潰鏂囦歡涓婃椂錛岀‖鐩樻帶鍒跺櫒鍙浠ュ悓鏃跺湪澶氫釜紜鐩樹笂鎵ц岃誨彇鍜屽啓鍏ユ搷浣溿傝繖鏍風郴緇熸ц兘灝嗗緱鍒版彁楂樸
灝忔彁紺猴細 鍏佽歌劇疆鐨勮櫄鎷熷唴瀛樻渶灝忓間負2MB錛屾渶澶у間笉鑳借秴榪囧綋鍓嶇‖鐩樼殑鍓╀綑絀洪棿鍊礆紝鍚屾椂涔熶笉鑳借秴榪32浣嶆搷浣滅郴緇熺殑鍐呭瓨瀵誨潃鑼冨洿鈥斺4GB銆
http://www.leftworld.net/wenzhang/show/1995.html
❺ 計算機組成原理——虛擬存儲器
(1)程序員在比實際主存大得多的邏輯地址空間中編寫程序
(2)程序執行時,把當前需要的程序段和數據塊掉入主存,其他暫不使用的放在磁碟上
(3)執行指令時,通過硬體將邏輯地址轉化為物理地址。虛擬地址高位為虛頁號,低位為頁內偏移地址
(4)當程序發生數據訪問或程序訪問失效(缺頁時),由操作系統把信息從磁碟調入主存中
(1)基本思想:
內存被分成固定長度且長度較小的存儲塊(頁框,實頁,物理頁)
每個進程也被劃分為固定長度的程序塊(頁,虛頁,邏輯頁)
通過頁表,實現邏輯地址想物理地址的轉化
(2)邏輯地址
程序中指令所使用的地址(進程所在地址空間)
(3)物理地址
存放指令或數據的實際內存地址
(1)與「cache-主存」層次相比,頁大小遠比cache的行大小要大(windows中的頁位4k)
(2)採用全相聯映射方式:磁碟中的任意一個頁能用射到內存中的任意一個頁
因為缺頁導致中斷時,操作系統從磁碟拿數據通常要耗費幾百萬個時鍾周期。增大頁大小,可以減少缺頁中斷
(3)為什麼讓軟體處理「缺頁」
因為訪問磁碟需要好粉幾百萬個時鍾周期,硬體即使能立刻把地址打給磁碟,磁碟也不能立即響應
(4)為什麼地址轉換用硬體實現
硬體實現地址轉換可以加快指令的執行速度
(5)為什麼頁寫會策略採用write back
避免頻繁的慢速磁碟訪問
頁表的首地址放在基址寄存器。採用基址定址方式
每個頁表項前面有一個虛頁號:從0開始遞增的序號。頁表項又分為幾個結構:
(1)裝入位:該頁是否在內存中
(2)修改位:該也在內存中是否被修改
(3)替換控制位:用於clock演算法
(4)其他
(5)實頁號(8進制)
(1)一次磁碟引用需要訪問幾次主存?2次,一次查頁表,一次查物理地址。於是,把經常查的頁表放到cache中。這種在cache頁表項組成的頁表稱為TLB(Translation Lookside Buffer)
(2)TLB的頁表結構:tag + 主存中的頁表項
當採用全相連映射時,tag為頁表項前面的虛頁號。需要把tag和虛頁號一一比較
當採用組相聯映射時,tag被分為tag+index,虛頁號的高位為tag,虛頁號的低位為index,做組內索引(屬於組內第幾行)
1.段式存儲是根據程序邏輯,給程序分段。使得每段大小不同。這種虛擬地址劃分方法適合程序設計
2.段式存儲的虛擬地址由段號和段內偏移地址組成。段式虛擬存儲器到物理地址的映射通過段表實現
3.段式虛擬存儲會造成空頁
1.段頁式虛擬存儲,先把程序按照邏輯分成段,再把每段分成固定大小的頁。
2.程序對主存的調入調出是按照頁面進行的;但他有可以根據段實現共享和保護
3.缺點是段頁式虛擬地址轉換成物理地址需要查詢2個表:段表和頁表。段表找到相應頁表的位置,頁表找到想也頁的位置
4.段頁式細膩地址的結構可以為以下形式:
程序地址: 用戶號(進程pid) | 段號 | 頁號 | 頁內偏移地址
(1)某計算機的cache塊工16塊,採用二路組相聯映射方式,每個主存塊大小為32位元組,按照位元組編制。則主存129號單元的主存塊硬裝如刀cache的組號是:(C)A、0 B、2 C、4 D、6
解:二路組相聯,所以每組2塊,共有16/2=8組,所以組號佔3位。
每塊32位元組,所以塊內地址佔5位。
129轉化為二進制:1000 0001:前3位為組號,100:=4
(2)假設用若干個2K4位的晶元組成一個8K8位的存儲器,則地址0B1FH所在晶元的最小地址為:
解:用2片組成一行,共4行,所以片選地址佔2位。片內地址有2k=211,所以佔11位
0B1FH:000|0 1|011 0001 1111 這三段為前綴,片選地址,片內地址。
該片晶元的最小地址是片內地址全0:000|0 1|000 0000 0000 = 0800H
(3)某計算機的主存地址空間大小為256MB,按位元組編址,指令cache和數據cache分離,均有8個cache行,每行大小為64B,數據cache採用直接映射方式,現有兩個程序A,B對數組int a[256][256]進行遍歷,程序A按行遍歷,程序B按列遍歷。假定int類型數據用32位補碼表示,數組a按行優先方式存儲,其地址為320(十進制)。
問:(1) 若不考慮cache一致性維護和替換演算法所需的控制位,則數據cache的總容量佔多少?
(2) 數組元素a[0][31]和a[1][1]各自所在主存塊對應的cache行號分別為多少(cache從0行開始)?
(3)程序A和B的數據訪問命中率各自為多少?哪個程序的執行時間更短?
解:(1) 因為cache的總容量是cache每行的數據存儲大小+tag位+數據是否有效位+其他一致性控制位。
主存地址空間256MB,佔28位。直接映射方式,8行,行號佔3位。每行64B,所以塊內地址佔6位,因此,tag佔28-3-6=19位
每行有一個數據有效位。因此,cache共(19+1+648)8 = 532位元組
(2) 因為int類型佔32位,所以一個int佔4B。a[0][31] = 320 + 314 = 444 a1 = 320 + 4(256+1) = 1348。
塊內地址佔6位,直接映射下行號佔3位,因此444 = 110 | 111100,所以行號為6
1348 = 10 | 101 | 000100,所以行號為5
(3) 因為1行cache佔64B,每個int數佔4B,所以一行有16個數。第一個數會因cache缺失而不命中,然後調入cache。,使得後面的15個int訪問全部命中。所以命中率為1516 對於程序B,每次調入16個數,小於數組每行的128個元素,因此每次都不會命中,命中率為0