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

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

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

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

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

Linux愛(ài)好者 ? 來(lái)源:飛天小牛肉 ? 作者:飛天小牛肉 ? 2021-06-17 14:08 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

先解釋下一個(gè)困擾了我很久的問(wèn)題:虛擬地址(vitural address)和邏輯地址(logical address)的區(qū)別。

大部分操作系統(tǒng)的書(shū)籍要么寫(xiě)的是虛擬地址,要么寫(xiě)的是邏輯地址,看的我一臉懵逼。

在《深入理解 Linux 內(nèi)核》這本書(shū)中終于找到了確切的答案,這里我就不寫(xiě)出來(lái)了,扣概念的話(huà)這倆確實(shí)是有些區(qū)別的,不過(guò)對(duì)于我們?nèi)粘J褂靡约袄斫獠僮飨到y(tǒng)來(lái)說(shuō)的話(huà),暫且可以把虛擬地址和邏輯地址理解為同一個(gè)意思。

你看到的所有地址都不是真的

我們需要知道的是,所有這些打印出來(lái)的地址都是虛擬的,在物理內(nèi)存中這些地址并不真實(shí)存在,它們最終都將由操作系統(tǒng)和 CPU 硬件翻譯成真正的物理地址,然后才能從真實(shí)的物理位置獲取該地址的值。

OK,上述就當(dāng)作一個(gè)引子,讓各位對(duì)物理地址和虛擬地址有個(gè)直觀的理解,下面正文開(kāi)始。

物理尋址 Physical Addressing

物理地址的概念很好理解,你可以把它稱(chēng)為真正的地址。《深入理解計(jì)算機(jī)系統(tǒng) - 第 3 版》中給出的物理地址(physical address)的定義如下:

計(jì)算機(jī)系統(tǒng)的主存被組織成一個(gè)由 M 個(gè)連續(xù)的字節(jié)大小的單元組成的數(shù)組。每字節(jié)都有一個(gè)唯一的物理地址。

比如說(shuō),第一個(gè)字節(jié)的物理地址是 0,接下來(lái)的字節(jié)地址是 1,再下一個(gè)是 2,以此類(lèi)推,給定這種簡(jiǎn)單的結(jié)構(gòu),CPU 訪(fǎng)問(wèn)內(nèi)存的最自然的方式就是使用這樣的物理地址。我們把這種方式稱(chēng)為物理尋址(physical addressing)。

舉個(gè)例子,比如說(shuō)當(dāng)程序執(zhí)行了一條加載指令,指令內(nèi)容是從物理地址 4 中讀取 4 字節(jié)字傳送到某個(gè)寄存器中。

物理尋址過(guò)程如下:當(dāng) CPU 執(zhí)行到這條指令時(shí),會(huì)生成物理地址 4,然后通過(guò)內(nèi)存主線(xiàn),把它傳遞給內(nèi)存,內(nèi)存取出從物理地址 4 處開(kāi)始的 4 字節(jié)字,并將它返回給 CPU,CPU 會(huì)將它存放到指定的寄存器中。其實(shí)不難發(fā)現(xiàn),物理尋址這種方式,每一個(gè)程序都直接訪(fǎng)問(wèn)物理內(nèi)存,其實(shí)是存在重大缺陷的:

1)首先,用戶(hù)程序可以尋址內(nèi)存的任意一個(gè)字節(jié),它們就可以很容易地破壞操作系統(tǒng),從而使系統(tǒng)慢慢地停止運(yùn)行。

2)再次,這種尋址方式使得操作系統(tǒng)中同時(shí)運(yùn)行兩個(gè)或以上的程序幾乎是不可能的。

舉個(gè)例子,我們打開(kāi)了三個(gè)相同的程序(計(jì)算器),都執(zhí)行到某一步。比方說(shuō),用戶(hù)在這三個(gè)程序的界面上分別輸入了 10、100、1000,其對(duì)應(yīng)的指令就是把用戶(hù)輸入的數(shù)字保存在內(nèi)存中的某個(gè)地址中。如果這個(gè)位置只能保存一個(gè)數(shù),那應(yīng)該保存哪個(gè)呢?這不就沖突了嗎?

再舉個(gè)例子,摘自《現(xiàn)代操作系統(tǒng) - 第 3 版》:

一個(gè)程序給物理內(nèi)存地址 1000 賦值也就是存入了一些數(shù)據(jù)后,另一個(gè)程序也同樣給這個(gè)地址賦值,那么第二個(gè)程序的賦值會(huì)覆蓋掉第一個(gè)程序所賦的值,這會(huì)造成兩個(gè)程序同時(shí)崩潰。

當(dāng)然了,我們也說(shuō)了是幾乎不可能,不是完全不可能,還是有一些方法可以在物理尋址這種方式下實(shí)現(xiàn)多個(gè)程序并發(fā)運(yùn)行的。

最簡(jiǎn)單的方法就是:首先,將空閑的進(jìn)程存儲(chǔ)在磁盤(pán)上,這樣當(dāng)它們不運(yùn)行時(shí)就不會(huì)占用內(nèi)存,然后,讓一個(gè)程序(或者說(shuō)進(jìn)程)單獨(dú)占用全部?jī)?nèi)存運(yùn)行一小段時(shí)間,當(dāng)發(fā)生上下文切換的時(shí)候,就停止這個(gè)進(jìn)程,并將它所有的狀態(tài)信息保存在磁盤(pán)上,再加載其他進(jìn)程的狀態(tài)信息,然后運(yùn)行一段時(shí)間...... 只要在某一個(gè)時(shí)間內(nèi)存中只有一個(gè)程序,那么就不會(huì)發(fā)生上述所說(shuō)的地址沖突。這就實(shí)現(xiàn)了一種比較粗糙的并發(fā)。

為什么說(shuō)他是粗糙的呢,因?yàn)檫@種方法有一個(gè)問(wèn)題:將全部的內(nèi)存信息保存到磁盤(pán)太慢了!特別是當(dāng)內(nèi)存增長(zhǎng)的時(shí)候。

因此,我們考慮把進(jìn)程對(duì)應(yīng)的內(nèi)存一直留在物理內(nèi)存中,在發(fā)生上下 文切換的時(shí)候就切換到特定的區(qū)域。

如下圖所示,有 3 個(gè)進(jìn)程(A、B、C),每個(gè)進(jìn)程擁有從 512KB 物理內(nèi)存中切出來(lái)給它們的一小部分內(nèi)存,可以理解為這 3 個(gè)進(jìn)程共享物理內(nèi)存:

79d804b4-ca6f-11eb-9e57-12bb97331649.png

顯然,這種方式是存在一定安全隱患的。畢竟如果各個(gè)進(jìn)程之間可以隨意讀取、寫(xiě)入內(nèi)容的話(huà)那就亂套了。

那么如何對(duì)每個(gè)進(jìn)程使用的地址進(jìn)行保護(hù)(protection)呢?繼續(xù)使用物理內(nèi)存模型肯定是不行了,因此操作系統(tǒng)創(chuàng)造了一個(gè)新的內(nèi)存抽象,引入了一個(gè)新的內(nèi)存模型,那就是虛擬地址空間,很多書(shū)中都會(huì)直接稱(chēng)呼為 “地址空間(Address Space)”。

虛擬尋址 Virtual Addressing

我先通俗地解釋下虛擬地址空間和虛擬地址的概念,直接上書(shū)中的定義讀起來(lái)有點(diǎn)生澀。

就是說(shuō)每個(gè)進(jìn)程的棧啊、堆啊、代碼段啊等等它們的實(shí)際物理內(nèi)存地址對(duì)于這個(gè)進(jìn)程來(lái)說(shuō)是不可見(jiàn)的,誰(shuí)也不能直接訪(fǎng)問(wèn)這個(gè)物理地址。

那我們?cè)趺慈ピL(fǎng)問(wèn)這個(gè)進(jìn)程呢?

操作系統(tǒng)會(huì)給每個(gè)進(jìn)程分配一個(gè)虛擬地址空間(vitural address),每個(gè)進(jìn)程包含的棧、堆、代碼段這些都會(huì)從這個(gè)地址空間中被分配一個(gè)地址,這個(gè)地址就被稱(chēng)為虛擬地址。底層指令寫(xiě)入的地址也是虛擬地址。

每個(gè)進(jìn)程都擁有一個(gè)自己的地址空間,并且獨(dú)立于其他進(jìn)程的地址空間。也就是說(shuō)一個(gè)進(jìn)程中的虛擬地址 28 所對(duì)應(yīng)的物理地址與另一個(gè)進(jìn)程中的虛擬地址 28 所對(duì)應(yīng)的物理地址是不同的,這樣就不會(huì)發(fā)生沖突了。

可以這么理解,物理地址就是一個(gè)倉(cāng)庫(kù),虛擬地址就是一個(gè)門(mén)牌,比方說(shuō)一共有三十個(gè)門(mén)牌,那么所有的進(jìn)程都能看見(jiàn)這三十個(gè)門(mén)牌,但是他們看見(jiàn)的某個(gè)相同門(mén)牌,指向的并不是同一個(gè)倉(cāng)庫(kù)。

OK,下面再來(lái)看《現(xiàn)代操作系統(tǒng) - 第 3 版》書(shū)中對(duì)于地址空間的解釋?zhuān)瑧?yīng)該很容易理解了:

地址空間是一個(gè)進(jìn)程可用于尋址內(nèi)存的一套地址集合。每個(gè)進(jìn)程都有一個(gè)自己的地址空間,并且這個(gè)地址空間獨(dú)立于其他進(jìn)程的地址空間(除了在一些特殊情況下進(jìn)程需要共享它們的地址空間外)。

地址空間的概念非常通用,并且在很多場(chǎng)合中出現(xiàn)。比如電話(huà)號(hào)碼,在美國(guó)和很多其他國(guó)家,一個(gè)本地電話(huà)號(hào)碼通常是一個(gè) 7 位的數(shù)字。因此,電話(huà)號(hào)碼的地址空間是從 0 000 000 到 9 999 999。

地址空間也可以是非數(shù)字的,以 “.com” 結(jié)尾的網(wǎng)絡(luò)域名的集合也是地址空間。這個(gè)地址空間是由所有包含 2~63 個(gè)字符并且后面跟著 “.com” 的字符串組成的,組成這些字符串的字符可以是字母、數(shù)字和連字符。

到現(xiàn)在你應(yīng)該已經(jīng)明白地址空間的概念了,它是很簡(jiǎn)單的。

有了虛擬地址空間后,CPU 就可以通過(guò)生成一個(gè)虛擬地址來(lái)訪(fǎng)問(wèn)主存,這個(gè)虛擬地址在被送到內(nèi)存之前會(huì)先被轉(zhuǎn)換成合適的物理地址,這個(gè)虛擬地址到物理地址的轉(zhuǎn)換過(guò)程稱(chēng)為地址翻譯/地址轉(zhuǎn)換(address translation)。

地址翻譯需要 CPU 硬件和操作系統(tǒng)的密切合作:CPU 上的內(nèi)存管理單元(Memory Management Unit,MMU)就是專(zhuān)門(mén)用來(lái)進(jìn)行虛擬地址到物理地址的轉(zhuǎn)換的,不過(guò) MMU 需要借助存放在內(nèi)存中的查詢(xún)表,而這張表的內(nèi)容正是由操作系統(tǒng)進(jìn)行管理的。

那么,上述這一套 CPU 生成虛擬地址并進(jìn)行地址翻譯的流程就是虛擬尋址(virtual addressing)。

原文標(biāo)題:你看到的所有地址都不是真的

文章出處:【微信公眾號(hào):Linux愛(ài)好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(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)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    11320

    瀏覽量

    225808
  • Linux
    +關(guān)注

    關(guān)注

    88

    文章

    11806

    瀏覽量

    219499

原文標(biāo)題:你看到的所有地址都不是真的

文章出處:【微信號(hào):LinuxHub,微信公眾號(hào):Linux愛(ài)好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    科普|什么是MAC地址、MAC碼、OUI碼、藍(lán)牙串號(hào)

    點(diǎn)擊上方藍(lán)字關(guān)注我們第一問(wèn):MAC地址是什么?MAC地址(MediaAccessControlAddress),直譯為媒體訪(fǎng)問(wèn)控制地址,也稱(chēng)為局域網(wǎng)地址(LANAddress),以太網(wǎng)
    的頭像 發(fā)表于 04-16 11:07 ?68次閱讀
    科普|什么是MAC<b class='flag-5'>地址</b>、MAC碼、OUI碼、藍(lán)牙串號(hào)

    Linux內(nèi)核大塊內(nèi)存申請(qǐng):從場(chǎng)景到落地全解析

    網(wǎng)卡、硬盤(pán)等外設(shè)的 DMA 控制器,要求內(nèi)存物理地址連續(xù)(無(wú)法識(shí)別虛擬地址映射),且需一次性分配大尺寸緩沖區(qū)(如 1GB 網(wǎng)絡(luò)幀緩存)。
    的頭像 發(fā)表于 02-09 16:41 ?777次閱讀
    Linux內(nèi)核大塊內(nèi)存申請(qǐng):從場(chǎng)景到落地全解析

    【「Linux 設(shè)備驅(qū)動(dòng)開(kāi)發(fā)(第 2 版)」閱讀體驗(yàn)】+讀深入理解Linux內(nèi)核內(nèi)存分配

    的一部分。也就是說(shuō),在ARM架構(gòu)中,MMU是已獲得許可的處理核心的一部分,負(fù)責(zé)在每次訪(fǎng)問(wèn)內(nèi)存時(shí)將虛擬地址轉(zhuǎn)換為物理地址,這個(gè)過(guò)程被稱(chēng)為地址轉(zhuǎn)換。邏輯
    發(fā)表于 01-16 20:05

    變頻器通訊代碼地址的含義

    和系統(tǒng)穩(wěn)定性。本文將深入解析變頻器通訊代碼地址的架構(gòu)邏輯、常見(jiàn)編碼規(guī)則及實(shí)際應(yīng)用場(chǎng)景,幫助工程師快速掌握這一關(guān)鍵技術(shù)。 一、通訊代碼地址的基礎(chǔ)架構(gòu) 變頻器通訊地址通常采用分層編碼結(jié)構(gòu),
    的頭像 發(fā)表于 12-11 07:37 ?1238次閱讀
    變頻器通訊代碼<b class='flag-5'>地址</b>的含義

    請(qǐng)問(wèn)e203定義的地址空間是虛擬地址還是物理地址?

    蜂鳥(niǎo)e203實(shí)現(xiàn)的是物理地址,硬件端與軟件端的地址分配相同,從而確定軟件開(kāi)發(fā)過(guò)程中能操作底層寄存器。 硬件端:在總線(xiàn)分發(fā)模塊sirv_icb1to16_bus定義好各個(gè)端口寄存器的地址區(qū)間, 軟件端
    發(fā)表于 11-11 06:20

    關(guān)于系統(tǒng)鏈接腳本的介紹

    Flash里面,但上電后上載至ITCM中進(jìn)行執(zhí)行(flash模式) 三、關(guān)于物理地址虛擬地址 物理地址是該程序要被存儲(chǔ)的存儲(chǔ)器地址(調(diào)試器下載程序時(shí)會(huì)遵從從此物理
    發(fā)表于 10-30 08:26

    如何通過(guò)地址生成器實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)特征圖的padding?

    涉及到相應(yīng)地址的時(shí)候,直接輸入零數(shù)據(jù),第二種則是在對(duì)應(yīng)padding地址存入零數(shù)據(jù),正常讀取數(shù)據(jù)。 兩種實(shí)現(xiàn)方式的主要區(qū)別在于:稀疏地址生成器的控制
    發(fā)表于 10-22 08:15

    標(biāo)準(zhǔn)集群和虛擬集群的區(qū)別是什么?

    在日常工作中,經(jīng)常有朋友會(huì)產(chǎn)生這樣的疑問(wèn):標(biāo)準(zhǔn)集群和虛擬集群有什么區(qū)別?實(shí)際上,標(biāo)準(zhǔn)集群具有統(tǒng)一的行業(yè)標(biāo)準(zhǔn),例如PDT、DMR,具有專(zhuān)用的控制信道,呼叫建立時(shí)間短、業(yè)務(wù)功能完善,不同廠家的終端只要
    的頭像 發(fā)表于 09-19 16:52 ?943次閱讀
    標(biāo)準(zhǔn)集群和<b class='flag-5'>虛擬</b>集群的<b class='flag-5'>區(qū)別是</b>什么?

    唯品會(huì):利用訂單地址API校驗(yàn)收貨信息,降低因地址錯(cuò)誤導(dǎo)致的退貨率

    ? ?在電子商務(wù)領(lǐng)域,退貨率高是許多平臺(tái)面臨的挑戰(zhàn),其中地址錯(cuò)誤導(dǎo)致的退貨占比不小。唯品會(huì)作為國(guó)內(nèi)領(lǐng)先的時(shí)尚電商平臺(tái),通過(guò)集成訂單地址API(Application Programming
    的頭像 發(fā)表于 09-11 15:47 ?679次閱讀

    IP地址沖突導(dǎo)致德國(guó)站群服務(wù)器斷網(wǎng)的解決方法?

    IP地址沖突導(dǎo)致的德國(guó)站群服務(wù)器斷網(wǎng)問(wèn)題。 什么是IP地址沖突? IP地址沖突通常發(fā)生在同一局域網(wǎng)或子網(wǎng)內(nèi),多個(gè)設(shè)備被分配了相同的IP地址。這種沖突會(huì)導(dǎo)致設(shè)備無(wú)法正常通信,進(jìn)而引發(fā)網(wǎng)絡(luò)
    的頭像 發(fā)表于 08-12 15:47 ?871次閱讀

    CNC的IP地址相同沖突如何解決?

    在網(wǎng)絡(luò)世界中,每個(gè)設(shè)備都需要一個(gè)獨(dú)特的標(biāo)識(shí)來(lái)確保信息的準(zhǔn)確傳輸,這個(gè)標(biāo)識(shí)就是IP地址。然而,在CNC(數(shù)控機(jī)床)生產(chǎn)車(chē)間中,由于存在多個(gè)品牌、不同型號(hào)的設(shè)備,且這些設(shè)備在出廠測(cè)試時(shí)往往會(huì)被配備相同
    的頭像 發(fā)表于 07-23 14:13 ?860次閱讀
    CNC的IP<b class='flag-5'>地址</b>相同沖突如何解決?

    從零開(kāi)始學(xué)IP地址

    IP地址是一種網(wǎng)絡(luò)編碼,用來(lái)唯一標(biāo)識(shí)網(wǎng)絡(luò)中的設(shè)備,以確保主機(jī)間正常通信。IP地址由32位二進(jìn)制(32-bit)組成。
    的頭像 發(fā)表于 07-08 09:29 ?2144次閱讀
    從零開(kāi)始學(xué)IP<b class='flag-5'>地址</b>

    芯知識(shí)|WT2003H語(yǔ)音芯片音頻地址詳解:一線(xiàn)/UART模式差異及靜音地址實(shí)踐

    廣州唯創(chuàng)電子WT2003H系列語(yǔ)音芯片以其高集成度、豐富的控制接口和出色的音質(zhì)表現(xiàn),在各類(lèi)嵌入式語(yǔ)音應(yīng)用中廣受歡迎。正確理解其音頻播放地址的編排規(guī)則,特別是不同通訊模式下的起始地址差異,是開(kāi)發(fā)穩(wěn)定
    的頭像 發(fā)表于 06-19 09:21 ?936次閱讀
    芯知識(shí)|WT2003H語(yǔ)音芯片音頻<b class='flag-5'>地址</b>詳解:一線(xiàn)/UART模式差異及靜音<b class='flag-5'>地址</b>實(shí)踐

    TECS OpenStack資源池虛擬機(jī)網(wǎng)絡(luò)二層地址無(wú)法互通的問(wèn)題處理

    某運(yùn)營(yíng)商TECS OpenStack使用主機(jī)overlay SDN方案組網(wǎng),運(yùn)維人員在創(chuàng)建虛擬機(jī)測(cè)試虛擬機(jī)網(wǎng)絡(luò)狀態(tài)時(shí)發(fā)現(xiàn)問(wèn)題:在其中一臺(tái)主機(jī)上創(chuàng)建兩臺(tái)同網(wǎng)段虛擬機(jī),虛擬機(jī)之間二層
    的頭像 發(fā)表于 06-12 09:28 ?1004次閱讀
    TECS OpenStack資源池<b class='flag-5'>虛擬</b>機(jī)網(wǎng)絡(luò)二層<b class='flag-5'>地址</b>無(wú)法互通的問(wèn)題處理

    季豐推出SRAM錯(cuò)誤地址定位黑科技

    近期受晶圓廠委托, 季豐在執(zhí)行完SRAM芯片在中子輻射下SER測(cè)試后, 通過(guò)對(duì)SRAM芯片的深入研究,對(duì)測(cè)試失效數(shù)據(jù)的分析,將邏輯失效地址成功轉(zhuǎn)換為物理坐標(biāo)地址,最終在圖像上顯示失效位置,幫助客戶(hù)直觀地看到失效點(diǎn)分布位置。 通過(guò)
    的頭像 發(fā)表于 06-03 10:08 ?1105次閱讀
    季豐推出SRAM錯(cuò)誤<b class='flag-5'>地址</b>定位黑科技