《Linux中為什么要使用虛擬地址》


1.直接使用物理地址

(1)安全風險:

  用戶有可能在程序中操作不當,直接操作了某個未知的物理地址,導致數據被改寫。有可能導致那部分內存的程序或者設備損壞。

  使用虛擬地址的話,會有相對應的保護機制。

(2)地址不確定

  眾所周知,編譯完成后的程序是存放在硬盤上的,當運行的時候,需要將程序搬到內存當中去運行,如果直接使用物理地址的話,我們無法確定內存現在使用到哪里了,也就是說拷貝的實際內存地址每一次運行都是不確定的,比如:第一次執行a.out時候,內存當中一個進程都沒有運行,所以搬移到內存地址是0x00000000,但是第二次的時候,內存已經有10個進程在運行了,那執行a.out的時候,內存地址就不一定了。

(3)效率低下

  用的時候,我們一般的辦法是將不常用的進程拷貝到磁盤的交換分區中,好騰出內存,但是如果是物理地址的話,就需要將整個進程一起拷走,這樣,在內存和磁盤之間拷貝時間太長,效率較低。

 

2.虛擬地址的實現

   虛擬地址實際上就相當於在物理地址和進程間引入一個第三者,一般實現方法有兩種:分段映射和分頁映射。

  

  分段映射能夠解決安全隱患、地址不確定問題,但是對於效率問題仍然沒有很好的解決。因此引出了新的方法:分頁方式。分頁的方式實際上就是講內存以4KB為單位分頁(一頁4KB),然后在Linux內核中提供頁項目表、頁表,一個大小占多個頁的進程,在運行的時候,並不是所有的也都在運行,這時候將運行的頁拷貝到內存,這樣就緩解了效率的問題。
  

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM