❶ iOS原理 物理內存&虛擬內存
物理內存指的是內存條上的內存,早期一個進程的數據是全部載入在物理內存上, CPU 直接通過物理內存地址來訪問進程數據。這種方式會產生以下幾個問題:
為了解決物理內存的這幾個問題, CPU 訪問進程數據就不能直接通過乎則物理內存地址,而是通過虛擬內存來間接訪歲櫻棚問。
虛擬內存是處於進程和物理內存之間的一個中間層,由系統生成,內部作分頁管理,結構如下圖所示:
一個虛擬內存對應一個進程,大小為 4GB ,虛擬內存里會分為很多頁( page ),每頁的大小在iOS中為 16kb ,其他系統中為 4kb 。 Page 里的每一格對應進程中的頌譽某一項數據,會記錄該數據的虛擬內存地址和物理內存地址,因此虛擬內存本質上是一張關聯進程各項數據的虛擬內存地址和物理內存地址的映射表。
採用虛擬內存後, CPU 訪問進程數據的情況如下:
因此,相比直接訪問物理內存,虛擬內存的優勢如下:
❷ 某虛擬存儲器的用戶空間共32個頁面,每頁1KB,主存16KB,假定某時刻以用戶頁表中已調入內存的頁面的頁號
每頁1k表示後10位為位移量巧念
32頁表示前5位為頁號
主存16kb表示主存的前4位為塊號
0A6D=0000 1010 0110 1101
後面10位為位移量掘頌不變,從第11位往孝散困前為頁號,由此可知,頁號為2,對應塊號為7,
二進製表示為:0001 1110 0110 1101轉為16進制為:1E6D
❸ 某虛擬存儲器的用戶空間共有32個頁面,每頁 1KB,主存 16KB.試問:
這題考的是地址映射,所以基本知識你可以看書上存儲管理地址映射部分內容。用戶空間也就是指的虛擬空間頁面大小和數量的乘積便是邏輯地址空間大小,32KB對應2^15所以有效位數15位。同理主存就是物理空間。
第三問題目說的相當於就是頁表,邏輯地址的二級制數從右往左10位為頁內地址即偏移量offset,因為邏輯空間一共能容納15位,所以後5位決定頁號。根據頁表找到物理塊號,注意因為物理空間14位所以物理頁號即頁幀號用四位表示,加上偏移量即為物理地址。
❹ 某虛擬存儲器的用戶編程空間共32個頁面,每頁為2kB,內存為16kB。假定某時刻一用戶頁表中已調入內存的頁面
頁式存儲管理的邏輯地址分為兩部分:頁號和頁內地址。由已知條件「用戶編程空間共32個頁面」,可知頁號部分佔5位,由「每頁為2KB」,可知頁內地址佔11位。由「內存為16KB」,可知有8塊,塊號為3位。
邏輯地址1A5C(H)所對應的二進製表示形式是:0001 1(010 0101 1100) ,根據上面的分析,()內的為頁內地址,編碼「0001 1」為頁號,表示該邏輯地址對應的頁號為3。查頁表,得到物理塊號是7(十進制),即物理塊地址為:01 11 ,拼接頁內地址10 0101 1100,得01 1110 0101 1100,即1E5C(H)。
❺ 什麼是邏輯地址和物理地址
有網友問到我:什麼是邏輯地址和物理地址?怎麼轉換?針對此問題,我為大家分享了具體的操作 方法 ,希望對你有幫助!
什麼是邏輯地址是指由程式產生的和段相關的偏移地址部分。例如,你在進行C語言指針編程中,能讀取指針變數本身值(&操作),實際上這個值就是邏輯地址,他是相對於你當前進程數據段的地址,不和絕對物理地址相干。只有在Intel實模式下,邏輯地址才和物理地址相等(因為實模式沒有分段或分頁機制,Cpu不進行自動地址轉換);邏輯也就是在Intel保護模式下程式執行代碼段限長內的偏移地址(假定代碼段、數據段如果完全相同)。應用程式員僅需和邏輯地址打交道,而分段和分頁機制對你來說是完全透明的,僅由系統編程人員涉及。應用程式員雖然自己能直接操作內存,那也只能在 操作系統 給你分配的內存段操作。
什麼是物理地址用於內存晶元級的單元定址,與處理器和CPU連接的地址匯流排相對應。 ——這個概念應該是這幾個概念中最好理解的一個,但是值得一提的是,雖然可以直接把物理地址理解成插在機器上那根內存本身,把內存看成一個從0位元組一直到最大空量逐位元組的編號的大數組,然後把這個數組叫做物理地址,但是事實上,這只是一個硬體提供給軟體的抽像,內存的定址方式並不是這樣。所以,說它是“與地址匯流排相對應”,是更貼切一些,不過拋開對物理內存定址方式的考慮,直接把物理地址與物理的內存一一對應,也是可以接受的。也許錯誤的理解更利於形而上的抽像。 虛擬內存(virtual memory) 這是對整個內存(不要與機器上插那條對上號)的抽像譽橡描述。它是相對於物理內存來講的,可以直接理解成“不直實的”,“假的”內存,例如,一個0x08000000內存地址,它並不對就物理地址上那個大數組中0x08000000 - 1那個地址元素;之所以是這樣,是因為現代操作系統都提供了一種內存管理的抽像,即虛擬內存(virtual memory)。進程使用虛擬內存中的地址,由操作系統協助相關硬體,把它“轉換”成真正的物理地址。這個“轉換”,是所有問題討論的關鍵。有了這樣的抽像,一個程序,就可以使用比真實物理地址大得多的地址空間。(拆東牆,補西牆,銀行也是這樣子做的),甚至多個進程可以使用相同的地址。不奇怪,因為轉換後的物理地址並非相咐消同的。 ——可以把連接後的程序反編譯看一下,發現連接器已經為程序分配了一個地址,例如,要調用某個函數A,代碼不是call A,而是call 0x0811111111 ,也就是說,函數A的地址已經被定下來了。沒有這樣的“轉換”,沒有虛擬地址的概念,這樣做是根本行不通的。打住了,這個問題再說下去,就收不住了。邏輯地址(logical address) Intel為了兼容,將遠古時代的段式內存管理方式保留了下來。邏輯地址指的是機器語言指令中,用來指定一個操作數或者是一條指令的地址。以上例,我們說的連接器衡虛知為A分配的0x08111111這個地址就是邏輯地址。 ——不過不好意思,這樣說,好像又違背了Intel中段式管理中,對邏輯地址要求,“一個邏輯地址,是由一個段標識符加上一個指定段內相對地址的偏移量,表示為 [段標識符:段內偏移量],也就是說,上例中那個0x08111111,應該表示為[A的代碼段標識符: 0x08111111],這樣,才完整一些” 線性地址(linear address)或也叫虛擬地址(virtual address) 跟邏輯地址類似,它也是一個不真實的地址,如果邏輯地址是對應的硬體平台段式管理轉換前地址的話,那麼線性地址則對應了硬體頁式內存的轉換前地址。
邏輯地址和物理地址拓展知識存儲器中每一個單元的地址可以用兩種方法表示:
1.邏輯地址:其表達形式為“段地址:段內偏移地址”。
2.物理地址:CPU與存儲器進行數據交換時在地址匯流排上
提供的20位地址信息稱為物理地址。
物理地址=段地址×10H+段內偏移量
CPU一次處理的數據是16位,地址匯流排實際上代表CPU的定址能力,地址線為20條那麼CPU實際的定址能力就是2的20次方就是1M。實際的物理地址是這樣形成的:
段地址*10H+偏移地址,偏移地址用IP指向,IP是16位的。
例如段地址是1234H,偏移地址是4321H
那麼實際的物理地址怎麼算呢:1234H*10H+4321H=12340H+4321H=16661H
實際上可以這么來理解,就是段地址左移一位後加上偏移地址就得出實際的物理地址。
這里邏輯地址和物理地址的關系又可以用一個比喻來說明:
比如你的學號是0102,這是你的真實地址亦即物理地址,那麼又假如01表示你的班級名稱,02表示你相對整個班級的位置,這就是邏輯地址,道理是一樣的,只不過在實際由邏輯地址合成物理地址的時候需要將物理地址左移一位,再加上偏移地址。
邏輯地址到物理地址的轉換方法以一個例子的形式講解邏輯地址到物理地址的轉換:
某虛擬存儲器的用戶編程空間共32個頁面,每頁為1KB,內存為16KB。假定某時刻一用戶頁表中已調入內存的頁面的頁號和物理塊號的對照表如下:
則邏輯地址0A5C(H)所對應的物理地址是什麼?要求:寫出主要計算過程。
解題過程:
首先要知道頁式存儲管理的邏輯地址分為兩部分:頁號和頁內地址。物理地址分為兩部分:
關系為:邏輯地址=頁號+頁內地址d
物理地址=塊號*塊長度( 等於頁面長度 L )+頁內地址;
頁號: p = lnt( 邏輯地址 A / 頁面長度 L ); d = 邏輯地址 A % 頁面長度 L (取余)
分析題:已知:用戶編程空間共32個頁面,2ˆ5=32得知頁號部分佔5位,由“每頁為1KB”,1K=2^10,可知內頁地址佔10位。
由“內存為16KB”,2^4=16得知塊號佔4位。
邏輯地址0A5C(H)所對應的二進製表示形式是:0000101001011100,後十位1001011100是頁內地址,
00010(本題特例,因為頁面長度為1KB)為為頁號,頁號化為十進制是2,在對照表中找到2對應的物理塊號是11,11轉換二進制是1011,11* 2^10 + d即可求出物理地址為10111001011100,化成十六進制為2 E5C;
即則邏輯地址0A5C(H)所對應的物理地址是2E5C;
猜你喜歡:
1. IP地址和物理地址有什麼區別
2. 物理地址和邏輯地址的區別
3. 虛擬地址與物理地址的概念
4. 物理地址什麼意思
5. 邏輯地址如何轉換成物理地址
6. 物理地址有什麼用
7. 物理地址作用是什麼
❻ 某虛擬存儲區的用戶空間共32個頁面,每頁1KB,內存16KB。
方法一:
換成十進制 093C=2364
[2364/1024]=2......虛頁號
2364-2*1024=316.....頁內偏移地址
虛頁號為2對應的物理塊號為4
所以物理地址為4*1024+316=4412,換成16進制就是,113C
方法二:
換成二進制 093C=0000100100111100
後10位(0100111100)是頁內偏移地址000010是虛頁號,將000010替換為對應的物理塊號000100,得到0001000100111100即為物理地址,換成16進制,還是113C