在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux系統為什么需要引入虛擬地址

麥辣雞腿堡 ? 來源:嵌入式Linux系統開發 ? 作者:Jasonangel ? 2023-10-07 17:28 ? 次閱讀

Linux 系統中,采用了虛擬內存管理技術,事實上大多數現在操作系統都是如此!在 Linux 系統中,每一個進程都在自己獨立的地址空間中運行,在32 位系統中,每個進程的邏輯地址空間均為 4GB,這 4GB 的內存空間按照 3:1 的比例進行分配,其中用戶進程享有 3G 的空間,而內核獨自享有剩下的1G 空間,如下所示:

圖片

虛擬地址會通過硬件MMU(內存管理單元)映射到實際的物理地址空間中,建立虛擬地址到物理地址的映射關系后,對虛擬地址的讀寫操作實際上就是對物理地址的讀寫操作,MMU會將物理地址“翻譯”為對應的物理地址,其關系如下所示:

圖片

Linux 系統下,應用程序運行在一個虛擬地址空間中,所以程序中讀寫的內存地址對應也是虛擬地址,并不是真正的物理地址,譬如應用程序中讀寫0x80800000 這個地址,實際上并不對應于硬件的 0x80800000 這個物理地址。

為什么需要引入虛擬地址呢?

計算機物理內存的大小是固定的,就是計算機的實際物理內存,試想一下,如果操作系統沒有虛擬地址機制,所有的應用程序訪問的內存地址就是實際的物理地址,所以要將所有應用程序加載到內存中,但是我們實際的物理內存只有G,所以就會出現一些問題:

當多個程序需要運行時,必須保證這些程序用到的內存總量要小于計算機實際的物理內存的大小。

內存使用效率低。內存空間不足時,就需要將其它程序暫時拷貝到硬盤中,然后將新的程序裝入內存。然而由于大量的數據裝入裝出,內存的使用效率就會非常低。

進程地址空間不隔離。由于程序是直接訪問物理內存的,所以每一個進程都可以修改其它進程的內存數據,甚至修改內核地址空間中的數據,所以有些惡意程序可以隨意修改別的進程,就會造成一些破壞,系統不安全、不穩定。

無法確定程序的鏈接地址。程序運行時,鏈接地址和運行地址必須一致,否則程序無法運行!因為程序代碼加載到內存的地址是由系統隨機分配的,是無法預知的,所以程序的運行地址在編譯程序時是無法確認的。

針對以上的一些問題,就引入了虛擬地址機制。程序訪問存儲器所使用的邏輯地址就是虛擬地址,通過邏輯地址映射到真正的物理內存上。所有應用程序運行在自己的虛擬地址空間中,使得進程的虛擬地址空間和物理地址空間隔離開來,這樣做帶來了很多的優點:

進程與進程、進程與內核相互隔離。一個進程不能讀取或修改另一個進程或內核的內存數據,這是因為每一個進程的虛擬地址空間映射到了不同的物理地址空間。提高了系統的安全性與穩定性。

在某些應用場合下,兩個或者更多進程能夠共享內存。因為每個進程都有自己的映射表,可以讓不同進程的虛擬地址空間映射到相同的物理地址空間中。通常,共享內存可用于實現進程間通信

便于實現內存保護機制。譬如在多個進程共享內存時,允許每個進程對內存采取不同的保護措施,例如,一個進程可能以只讀方式訪問內存,而另一進程則能夠以可讀可寫的方式訪問。

編譯應用程序時,無需關心鏈接地址。前面提到了,當程序運行時,要求鏈接地址與運行地址一致,在引入了虛擬地址機制后,便無需關心這個問題。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11479

    瀏覽量

    213056
  • 內存
    +關注

    關注

    8

    文章

    3115

    瀏覽量

    75068
  • 地址
    +關注

    關注

    1

    文章

    32

    瀏覽量

    10986
  • 系統
    +關注

    關注

    1

    文章

    1029

    瀏覽量

    21742
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    linux虛擬地址如何轉物理地址

    linux虛擬地址轉物理地址
    發表于 05-13 09:31

    物理地址虛擬地址的轉換步驟

    上是不行的,在Linux上,如果想要操作硬件,需要先把物理地址轉換成虛擬地址,因為Linux使能了MMU,所以我們在
    發表于 12-24 07:42

    探討一下ARM中的MMU虛擬地址

    、連續的虛擬地址空間呈現給應用程序。虛擬地址也有利于軟件開發人員,他們在編寫應用程序時不知道系統的確切內存地址。使用虛擬地址,軟件開發人員不
    發表于 04-08 17:17

    linux kernel實現物理地址虛擬地址空間的切換方法

    1、arm linux 臨時頁表的建立linux kernel的主要特點之一就是運行在虛擬地址空間上,但是怎么才能實現物理地址虛擬地址空間
    發表于 05-13 10:21

    ARM處理器使用虛擬地址來提供cache index和cache tag

    cache。這對于那些需要頻繁修改頁表映射的多任務系統具有顯著優勢。使用虛擬地址作為index也有一些硬件優勢,這意味著cache硬件在進行cache look up時不需要進行
    發表于 06-20 15:22

    用戶態得到虛擬地址對應的物理地址

    一般我們不需要從用戶態得到進程虛擬地址對應的物理地址,因為一般來說用戶進程是完全不關心物理地址的。
    的頭像 發表于 10-10 14:10 ?2718次閱讀
    用戶態得到<b class='flag-5'>虛擬地址</b>對應的物理<b class='flag-5'>地址</b>

    鴻蒙內核中虛擬地址與物理地址之間是如何映射的

    虛擬地址(VA):?就是線性地址?鴻蒙內存部分全是VA的身影?是由編譯器和鏈接器在定位程序時分配的,每個應用程序都使用相同的虛擬內存地址空間,而這些虛擬內存地址空間實際上分別映射到不同
    發表于 11-19 14:45 ?9次下載
    鴻蒙內核中<b class='flag-5'>虛擬地址</b>與物理<b class='flag-5'>地址</b>之間是如何映射的

    內核邏輯地址和內核虛擬地址到底有什么區別

      1) 凡是通過MMU頁表訪問的地址都叫虛擬地址,而一旦啟用了MMU,那CPU發出的所有地址都是虛擬地址內核用到的地址范圍是3G-4G(不
    發表于 03-11 10:10 ?6次下載

    虛擬地址和邏輯地址的區別是什么?

    懵逼。 在《深入理解 Linux 內核》這本書中終于找到了確切的答案,這里我就不寫出來了,扣概念的話這倆確實是有些區別的,不過對于我們日常使用以及理解操作系統來說的話,暫且可以把虛擬地址和邏輯
    的頭像 發表于 06-17 14:08 ?2.5w次閱讀
    <b class='flag-5'>虛擬地址</b>和邏輯<b class='flag-5'>地址</b>的區別是什么?

    虛擬地址物理地址等眾多地址及MMU相關知識

    虛擬地址物理地址等眾多地址及MMU相關知識先聊聊存儲器STM32單片機存儲器關于編譯器生成的文件數據在存儲器上的存儲結構物理地址虛擬地址
    發表于 12-08 12:36 ?12次下載
    <b class='flag-5'>虛擬地址</b>物理<b class='flag-5'>地址</b>等眾多<b class='flag-5'>地址</b>及MMU相關知識

    為什么要用MMU?為什么要用虛擬地址

    既然MMU開啟后,硬件會自動的將虛擬地址轉換成物理地址,那么還需要我們軟件做什么事情呢?即創建一個頁表翻譯都需要做哪些事情呢?或者說啟用一個MMU
    的頭像 發表于 04-26 14:37 ?5389次閱讀

    虛擬地址翻譯物理地址的流程有哪些呢?

    現代的操作系統將可執行文件加載后,創建了進程,進程中每一條指令和數據都被分配了一個虛擬地址,CPU獲取到這個虛擬地址后,需要翻譯成內存的物理地址
    的頭像 發表于 08-14 10:30 ?1631次閱讀
    <b class='flag-5'>虛擬地址</b>翻譯物理<b class='flag-5'>地址</b>的流程有哪些呢?

    Linux虛擬地址空間和物理地址空間的關系

    很多人接觸Linux的內存管理是從malloc()這個C語言庫函數開始,也是從那時開始就知道了虛擬內存的概念。但很多人可能并不知道虛擬地址是如何轉換成物理地址的,今天帶你搞懂
    的頭像 發表于 10-08 11:40 ?1646次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>虛擬地址</b>空間和物理<b class='flag-5'>地址</b>空間的關系

    Linux虛擬地址到物理地址轉換過程

    offset兩部分組成。 虛擬地址轉換成物理地址時,需要將VPN轉成PFN。PA offset通常就是VA offset。 所以物理地址 = PFN + VA offset 這里的核
    的頭像 發表于 10-08 11:45 ?2449次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>虛擬地址</b>到物理<b class='flag-5'>地址</b>轉換過程

    MMU虛擬地址空間布局

    當然虛擬地址空間劃分不只是如此。因為目前應用程序沒有那么大的內存需求,所以ARM64處理器不支持完全的64位虛擬地址,實際支持情況如下。 (1)-虛擬地址位寬 虛擬地址的最大寬度是48
    的頭像 發表于 11-26 16:35 ?1132次閱讀
    主站蜘蛛池模板: 波多野结衣一级特黄毛片 | 5566成人免费视频观看 | 免费国产成高清人在线视频 | 美日韩一区二区 | 天天av天天翘天天综合网 | 国产午夜一区二区在线观看 | 91牛牛| 色多多高清在线观看视频www | 黑人又大又粗又长又深受不了 | 久久国产精品99精品国产987 | 在线观看免费精品国产 | 天天看视频 | 深夜视频在线 | 日本xxxⅹ69xxxx护士 | 日本美女黄网站 | 黄色视网站 | 男人的天堂欧美 | 日本理论在线观看被窝网 | 欧美另类v| 欧美性狂猛xxxxxbbbbb | 天天涩综合 | 亚洲午夜一区二区三区 | 亚洲色四在线视频观看 | 五月天激情丁香 | 国产一级爱c片免费播放 | 不卡视频一区二区三区 | 末发育女一区二区三区 | www视频在线观看com | 天天操天天操天天 | 在线天堂资源www中文在线 | 黄色福利网| 2022年国产精品久久久久 | 9984四虎永久免费网站 | 看天堂| 最近高清免费观看视频 | 美女被免费网站视频在线 | 放荡的俄罗斯美女bd | 亚洲第一区二区快射影院 | 在线视频观看一区 | 国产色拍 | 亚洲乱亚洲乱妇41p国产成人 |