chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux系統(tǒng)為什么需要引入虛擬地址

麥辣雞腿堡 ? 來(lái)源:嵌入式Linux系統(tǒng)開(kāi)發(fā) ? 作者:Jasonangel ? 2023-10-07 17:28 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

圖片

虛擬地址會(huì)通過(guò)硬件MMU(內(nèi)存管理單元)映射到實(shí)際的物理地址空間中,建立虛擬地址到物理地址的映射關(guān)系后,對(duì)虛擬地址的讀寫操作實(shí)際上就是對(duì)物理地址的讀寫操作,MMU會(huì)將物理地址“翻譯”為對(duì)應(yīng)的物理地址,其關(guān)系如下所示:

圖片

Linux 系統(tǒng)下,應(yīng)用程序運(yùn)行在一個(gè)虛擬地址空間中,所以程序中讀寫的內(nèi)存地址對(duì)應(yīng)也是虛擬地址,并不是真正的物理地址,譬如應(yīng)用程序中讀寫0x80800000 這個(gè)地址,實(shí)際上并不對(duì)應(yīng)于硬件的 0x80800000 這個(gè)物理地址。

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

計(jì)算機(jī)物理內(nèi)存的大小是固定的,就是計(jì)算機(jī)的實(shí)際物理內(nèi)存,試想一下,如果操作系統(tǒng)沒(méi)有虛擬地址機(jī)制,所有的應(yīng)用程序訪問(wèn)的內(nèi)存地址就是實(shí)際的物理地址,所以要將所有應(yīng)用程序加載到內(nèi)存中,但是我們實(shí)際的物理內(nèi)存只有G,所以就會(huì)出現(xiàn)一些問(wèn)題:

當(dāng)多個(gè)程序需要運(yùn)行時(shí),必須保證這些程序用到的內(nèi)存總量要小于計(jì)算機(jī)實(shí)際的物理內(nèi)存的大小。

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

進(jìn)程地址空間不隔離。由于程序是直接訪問(wèn)物理內(nèi)存的,所以每一個(gè)進(jìn)程都可以修改其它進(jìn)程的內(nèi)存數(shù)據(jù),甚至修改內(nèi)核地址空間中的數(shù)據(jù),所以有些惡意程序可以隨意修改別的進(jìn)程,就會(huì)造成一些破壞,系統(tǒng)不安全、不穩(wěn)定。

無(wú)法確定程序的鏈接地址。程序運(yùn)行時(shí),鏈接地址和運(yùn)行地址必須一致,否則程序無(wú)法運(yùn)行!因?yàn)?a target="_blank">程序代碼加載到內(nèi)存的地址是由系統(tǒng)隨機(jī)分配的,是無(wú)法預(yù)知的,所以程序的運(yùn)行地址在編譯程序時(shí)是無(wú)法確認(rèn)的。

針對(duì)以上的一些問(wèn)題,就引入了虛擬地址機(jī)制。程序訪問(wèn)存儲(chǔ)器所使用的邏輯地址就是虛擬地址,通過(guò)邏輯地址映射到真正的物理內(nèi)存上。所有應(yīng)用程序運(yùn)行在自己的虛擬地址空間中,使得進(jìn)程的虛擬地址空間和物理地址空間隔離開(kāi)來(lái),這樣做帶來(lái)了很多的優(yōu)點(diǎn):

進(jìn)程與進(jìn)程、進(jìn)程與內(nèi)核相互隔離。一個(gè)進(jìn)程不能讀取或修改另一個(gè)進(jìn)程或內(nèi)核的內(nèi)存數(shù)據(jù),這是因?yàn)槊恳粋€(gè)進(jìn)程的虛擬地址空間映射到了不同的物理地址空間。提高了系統(tǒng)的安全性與穩(wěn)定性。

在某些應(yīng)用場(chǎng)合下,兩個(gè)或者更多進(jìn)程能夠共享內(nèi)存。因?yàn)槊總€(gè)進(jìn)程都有自己的映射表,可以讓不同進(jìn)程的虛擬地址空間映射到相同的物理地址空間中。通常,共享內(nèi)存可用于實(shí)現(xiàn)進(jìn)程間通信

便于實(shí)現(xiàn)內(nèi)存保護(hù)機(jī)制。譬如在多個(gè)進(jìn)程共享內(nèi)存時(shí),允許每個(gè)進(jìn)程對(duì)內(nèi)存采取不同的保護(hù)措施,例如,一個(gè)進(jìn)程可能以只讀方式訪問(wèn)內(nèi)存,而另一進(jìn)程則能夠以可讀可寫的方式訪問(wèn)。

編譯應(yīng)用程序時(shí),無(wú)需關(guān)心鏈接地址。前面提到了,當(dāng)程序運(yùn)行時(shí),要求鏈接地址與運(yùn)行地址一致,在引入了虛擬地址機(jī)制后,便無(wú)需關(guān)心這個(gè)問(wèn)題。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    88

    文章

    11760

    瀏覽量

    219039
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    9

    文章

    3210

    瀏覽量

    76376
  • 地址
    +關(guān)注

    關(guān)注

    1

    文章

    32

    瀏覽量

    11212
  • 系統(tǒng)
    +關(guān)注

    關(guān)注

    1

    文章

    1046

    瀏覽量

    22316
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    linux虛擬地址如何轉(zhuǎn)物理地址

    linux虛擬地址轉(zhuǎn)物理地址
    發(fā)表于 05-13 09:31

    物理地址虛擬地址的轉(zhuǎn)換步驟

    上是不行的,在Linux上,如果想要操作硬件,需要先把物理地址轉(zhuǎn)換成虛擬地址,因?yàn)?b class='flag-5'>Linux使能了MMU,所以我們?cè)?/div>
    發(fā)表于 12-24 07:42

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

    、連續(xù)的虛擬地址空間呈現(xiàn)給應(yīng)用程序。虛擬地址也有利于軟件開(kāi)發(fā)人員,他們?cè)诰帉憫?yīng)用程序時(shí)不知道系統(tǒng)的確切內(nèi)存地址。使用虛擬地址,軟件開(kāi)發(fā)人員不
    發(fā)表于 04-08 17:17

    linux kernel實(shí)現(xiàn)物理地址虛擬地址空間的切換方法

    1、arm linux 臨時(shí)頁(yè)表的建立linux kernel的主要特點(diǎn)之一就是運(yùn)行在虛擬地址空間上,但是怎么才能實(shí)現(xiàn)物理地址虛擬地址空間
    發(fā)表于 05-13 10:21

    ARM處理器使用虛擬地址來(lái)提供cache index和cache tag

    cache。這對(duì)于那些需要頻繁修改頁(yè)表映射的多任務(wù)系統(tǒng)具有顯著優(yōu)勢(shì)。使用虛擬地址作為index也有一些硬件優(yōu)勢(shì),這意味著cache硬件在進(jìn)行cache look up時(shí)不需要進(jìn)行
    發(fā)表于 06-20 15:22

    用戶態(tài)得到虛擬地址對(duì)應(yīng)的物理地址

    一般我們不需要從用戶態(tài)得到進(jìn)程虛擬地址對(duì)應(yīng)的物理地址,因?yàn)橐话銇?lái)說(shuō)用戶進(jìn)程是完全不關(guān)心物理地址的。
    的頭像 發(fā)表于 10-10 14:10 ?3221次閱讀
    用戶態(tài)得到<b class='flag-5'>虛擬地址</b>對(duì)應(yīng)的物理<b class='flag-5'>地址</b>

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

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

    內(nèi)核邏輯地址和內(nèi)核虛擬地址到底有什么區(qū)別

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

    虛擬地址和邏輯地址的區(qū)別是什么?

    懵逼。 在《深入理解 Linux 內(nèi)核》這本書(shū)中終于找到了確切的答案,這里我就不寫出來(lái)了,扣概念的話這倆確實(shí)是有些區(qū)別的,不過(guò)對(duì)于我們?nèi)粘J褂靡约袄斫獠僮?b class='flag-5'>系統(tǒng)來(lái)說(shuō)的話,暫且可以把虛擬地址和邏輯
    的頭像 發(fā)表于 06-17 14:08 ?2.9w次閱讀
    <b class='flag-5'>虛擬地址</b>和邏輯<b class='flag-5'>地址</b>的區(qū)別是什么?

    虛擬地址物理地址等眾多地址及MMU相關(guān)知識(shí)

    虛擬地址物理地址等眾多地址及MMU相關(guān)知識(shí)先聊聊存儲(chǔ)器STM32單片機(jī)存儲(chǔ)器關(guān)于編譯器生成的文件數(shù)據(jù)在存儲(chǔ)器上的存儲(chǔ)結(jié)構(gòu)物理地址虛擬地址、
    發(fā)表于 12-08 12:36 ?12次下載
    <b class='flag-5'>虛擬地址</b>物理<b class='flag-5'>地址</b>等眾多<b class='flag-5'>地址</b>及MMU相關(guān)知識(shí)

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

    既然MMU開(kāi)啟后,硬件會(huì)自動(dòng)的將虛擬地址轉(zhuǎn)換成物理地址,那么還需要我們軟件做什么事情呢?即創(chuàng)建一個(gè)頁(yè)表翻譯都需要做哪些事情呢?或者說(shuō)啟用一個(gè)MMU
    的頭像 發(fā)表于 04-26 14:37 ?6140次閱讀

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

    現(xiàn)代的操作系統(tǒng)將可執(zhí)行文件加載后,創(chuàng)建了進(jìn)程,進(jìn)程中每一條指令和數(shù)據(jù)都被分配了一個(gè)虛擬地址,CPU獲取到這個(gè)虛擬地址后,需要翻譯成內(nèi)存的物理地址
    的頭像 發(fā)表于 08-14 10:30 ?2274次閱讀
    <b class='flag-5'>虛擬地址</b>翻譯物理<b class='flag-5'>地址</b>的流程有哪些呢?

    Linux虛擬地址空間和物理地址空間的關(guān)系

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

    Linux虛擬地址到物理地址轉(zhuǎn)換過(guò)程

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

    MMU虛擬地址空間布局

    當(dāng)然虛擬地址空間劃分不只是如此。因?yàn)槟壳皯?yīng)用程序沒(méi)有那么大的內(nèi)存需求,所以ARM64處理器不支持完全的64位虛擬地址,實(shí)際支持情況如下。 (1)-虛擬地址位寬 虛擬地址的最大寬度是48
    的頭像 發(fā)表于 11-26 16:35 ?1720次閱讀