内存管理中的几种地址类型
生活随笔
收集整理的這篇文章主要介紹了
内存管理中的几种地址类型
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
作者:裝逼百科
鏈接:https://www.zhihu.com/question/60554200/answer/180303046
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
一、邏輯地址(有時也稱虛擬地址) 邏輯地址(Logical Address) 是指由程序產生的與段相關的偏移地址部分。例如在C語言指針編程中,可以讀取指針變量本身值(&操作),實際上這個值就是邏輯地址,它是相對于當前進程數據段的地址,和絕對物理地址無關。 只有在Intel處理器的實模式下,邏輯地址才和物理地址相等(因為實模式沒有分段或分頁機制,CPU不進行自動地址轉換)。邏輯地址也就是在Intel 處理器的保護模式下,程序執行代碼段限長內的偏移地址(假定代碼段、數據段完全一樣)。 CPU啟動保護模式后,程序運行在虛擬地址空間中。注意,并不是所有的“程序”都是運行在虛擬地址中。CPU在啟動的時候是運行在實模式的,Bootloader以及內核在初始化頁表之前并不使用虛擬地址,而是直接使用物理地址的。 應用程序僅需與邏輯地址打交道,而分段和分頁機制僅系統編程涉及,應用程序雖然可以直接操作內存,但是也只能在操作系統分配的內存段中操作。注:實模式:指尋址采用和8086相同的16位段和偏移量,最大尋址空間1MB(20根地址總線尋址),最大分段64KB(寄存器為16位)。可以使用32位指令,32位的x86 CPU用做高速的8086。保護模式:尋址采用32位段和偏移量,最大尋址空間4GB,最大分段4GB (Pentium Pre及以后為64GB)。在保護模式下CPU可以進入虛擬8086方式,這是在保護模式下的實模式程序運行環境。
二、線性地址 線性地址(Linear Address)是邏輯地址到物理地址轉換的中間層。程序代碼經編譯后會產生邏輯地址,或者說是段中的偏移地址,加上相應段的基地址就生成了一個線性地址。 若啟用了分頁機制,則線性地址會再此轉換產生一個物理地址。若沒有啟用分頁機制,則線性地址就是物理地址。Intel 80386的線性地址空間容量為4G(2的32次方,即32根地址總線尋址)。
三、物理地址 物理地址(Physical Address)是指出現在CPU外部地址總線上的尋址物理內存的地址信號,是地址變換的最終地址。若啟用了分頁機制,則線性地址會使用頁目錄和頁表中的項轉換為物理地址。若沒有啟用分頁機制,則線性地址直接就是物理地址。
四、虛擬內存 虛擬內存(Virtual Memory)是指計算機呈現出比實際擁有的內存大得多的內存量。因此它允許程序員編寫并運行比實際系統擁有的內存大得多的程序。這使得許多大型項目也能夠在具有有限內存資源的系統上實現。一個很恰當的比喻是:你不需要很長的軌道就可以讓使列火車從上海開到北京,只需要比較長的兩段鐵軌(比如說3公里)就可以完成這個任務。采取的方法是把后面運行過的的鐵軌立刻鋪到火車的前面,只要操作的足夠快http://zhidao.baidu.com/api/getdecpic?picenc=48ab636f6d6d619a0f列車就能像在一條完整的軌道上運行一樣。這也就是虛擬內存管理需要完成的任務。在Linux 0.11內核中,為每個“程序”(進程)都劃分了總容量為64MB的虛擬內存空間,因此程序的邏輯地址范圍是0x0000000到0x4000000。
鏈接:https://www.zhihu.com/question/60554200/answer/180303046
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
一、邏輯地址(有時也稱虛擬地址) 邏輯地址(Logical Address) 是指由程序產生的與段相關的偏移地址部分。例如在C語言指針編程中,可以讀取指針變量本身值(&操作),實際上這個值就是邏輯地址,它是相對于當前進程數據段的地址,和絕對物理地址無關。 只有在Intel處理器的實模式下,邏輯地址才和物理地址相等(因為實模式沒有分段或分頁機制,CPU不進行自動地址轉換)。邏輯地址也就是在Intel 處理器的保護模式下,程序執行代碼段限長內的偏移地址(假定代碼段、數據段完全一樣)。 CPU啟動保護模式后,程序運行在虛擬地址空間中。注意,并不是所有的“程序”都是運行在虛擬地址中。CPU在啟動的時候是運行在實模式的,Bootloader以及內核在初始化頁表之前并不使用虛擬地址,而是直接使用物理地址的。 應用程序僅需與邏輯地址打交道,而分段和分頁機制僅系統編程涉及,應用程序雖然可以直接操作內存,但是也只能在操作系統分配的內存段中操作。注:實模式:指尋址采用和8086相同的16位段和偏移量,最大尋址空間1MB(20根地址總線尋址),最大分段64KB(寄存器為16位)。可以使用32位指令,32位的x86 CPU用做高速的8086。保護模式:尋址采用32位段和偏移量,最大尋址空間4GB,最大分段4GB (Pentium Pre及以后為64GB)。在保護模式下CPU可以進入虛擬8086方式,這是在保護模式下的實模式程序運行環境。
二、線性地址 線性地址(Linear Address)是邏輯地址到物理地址轉換的中間層。程序代碼經編譯后會產生邏輯地址,或者說是段中的偏移地址,加上相應段的基地址就生成了一個線性地址。 若啟用了分頁機制,則線性地址會再此轉換產生一個物理地址。若沒有啟用分頁機制,則線性地址就是物理地址。Intel 80386的線性地址空間容量為4G(2的32次方,即32根地址總線尋址)。
三、物理地址 物理地址(Physical Address)是指出現在CPU外部地址總線上的尋址物理內存的地址信號,是地址變換的最終地址。若啟用了分頁機制,則線性地址會使用頁目錄和頁表中的項轉換為物理地址。若沒有啟用分頁機制,則線性地址直接就是物理地址。
四、虛擬內存 虛擬內存(Virtual Memory)是指計算機呈現出比實際擁有的內存大得多的內存量。因此它允許程序員編寫并運行比實際系統擁有的內存大得多的程序。這使得許多大型項目也能夠在具有有限內存資源的系統上實現。一個很恰當的比喻是:你不需要很長的軌道就可以讓使列火車從上海開到北京,只需要比較長的兩段鐵軌(比如說3公里)就可以完成這個任務。采取的方法是把后面運行過的的鐵軌立刻鋪到火車的前面,只要操作的足夠快http://zhidao.baidu.com/api/getdecpic?picenc=48ab636f6d6d619a0f列車就能像在一條完整的軌道上運行一樣。這也就是虛擬內存管理需要完成的任務。在Linux 0.11內核中,為每個“程序”(進程)都劃分了總容量為64MB的虛擬內存空間,因此程序的邏輯地址范圍是0x0000000到0x4000000。
總結
以上是生活随笔為你收集整理的内存管理中的几种地址类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Intel Hex格式说明
- 下一篇: tmpfs 内存文件系统