精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

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

Linux愛好者 ? 來源:飛天小牛肉 ? 作者:飛天小牛肉 ? 2021-06-17 14:08 ? 次閱讀

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

大部分操作系統的書籍要么寫的是虛擬地址,要么寫的是邏輯地址,看的我一臉懵逼。

在《深入理解 Linux 內核》這本書中終于找到了確切的答案,這里我就不寫出來了,扣概念的話這倆確實是有些區別的,不過對于我們日常使用以及理解操作系統來說的話,暫且可以把虛擬地址和邏輯地址理解為同一個意思。

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

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

OK,上述就當作一個引子,讓各位對物理地址和虛擬地址有個直觀的理解,下面正文開始。

物理尋址 Physical Addressing

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

計算機系統的主存被組織成一個由 M 個連續的字節大小的單元組成的數組。每字節都有一個唯一的物理地址。

比如說,第一個字節的物理地址是 0,接下來的字節地址是 1,再下一個是 2,以此類推,給定這種簡單的結構,CPU 訪問內存的最自然的方式就是使用這樣的物理地址。我們把這種方式稱為物理尋址(physical addressing)。

舉個例子,比如說當程序執行了一條加載指令,指令內容是從物理地址 4 中讀取 4 字節字傳送到某個寄存器中。

物理尋址過程如下:當 CPU 執行到這條指令時,會生成物理地址 4,然后通過內存主線,把它傳遞給內存,內存取出從物理地址 4 處開始的 4 字節字,并將它返回給 CPU,CPU 會將它存放到指定的寄存器中。其實不難發現,物理尋址這種方式,每一個程序都直接訪問物理內存,其實是存在重大缺陷的:

1)首先,用戶程序可以尋址內存的任意一個字節,它們就可以很容易地破壞操作系統,從而使系統慢慢地停止運行。

2)再次,這種尋址方式使得操作系統中同時運行兩個或以上的程序幾乎是不可能的。

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

再舉個例子,摘自《現代操作系統 - 第 3 版》:

一個程序給物理內存地址 1000 賦值也就是存入了一些數據后,另一個程序也同樣給這個地址賦值,那么第二個程序的賦值會覆蓋掉第一個程序所賦的值,這會造成兩個程序同時崩潰。

當然了,我們也說了是幾乎不可能,不是完全不可能,還是有一些方法可以在物理尋址這種方式下實現多個程序并發運行的。

最簡單的方法就是:首先,將空閑的進程存儲在磁盤上,這樣當它們不運行時就不會占用內存,然后,讓一個程序(或者說進程)單獨占用全部內存運行一小段時間,當發生上下文切換的時候,就停止這個進程,并將它所有的狀態信息保存在磁盤上,再加載其他進程的狀態信息,然后運行一段時間...... 只要在某一個時間內存中只有一個程序,那么就不會發生上述所說的地址沖突。這就實現了一種比較粗糙的并發。

為什么說他是粗糙的呢,因為這種方法有一個問題:將全部的內存信息保存到磁盤太慢了!特別是當內存增長的時候。

因此,我們考慮把進程對應的內存一直留在物理內存中,在發生上下 文切換的時候就切換到特定的區域。

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

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

顯然,這種方式是存在一定安全隱患的。畢竟如果各個進程之間可以隨意讀取、寫入內容的話那就亂套了。

那么如何對每個進程使用的地址進行保護(protection)呢?繼續使用物理內存模型肯定是不行了,因此操作系統創造了一個新的內存抽象,引入了一個新的內存模型,那就是虛擬地址空間,很多書中都會直接稱呼為 “地址空間(Address Space)”。

虛擬尋址 Virtual Addressing

我先通俗地解釋下虛擬地址空間和虛擬地址的概念,直接上書中的定義讀起來有點生澀。

就是說每個進程的棧啊、堆啊、代碼段啊等等它們的實際物理內存地址對于這個進程來說是不可見的,誰也不能直接訪問這個物理地址。

那我們怎么去訪問這個進程呢?

操作系統會給每個進程分配一個虛擬地址空間(vitural address),每個進程包含的棧、堆、代碼段這些都會從這個地址空間中被分配一個地址,這個地址就被稱為虛擬地址。底層指令寫入的地址也是虛擬地址。

每個進程都擁有一個自己的地址空間,并且獨立于其他進程的地址空間。也就是說一個進程中的虛擬地址 28 所對應的物理地址與另一個進程中的虛擬地址 28 所對應的物理地址是不同的,這樣就不會發生沖突了。

可以這么理解,物理地址就是一個倉庫,虛擬地址就是一個門牌,比方說一共有三十個門牌,那么所有的進程都能看見這三十個門牌,但是他們看見的某個相同門牌,指向的并不是同一個倉庫。

OK,下面再來看《現代操作系統 - 第 3 版》書中對于地址空間的解釋,應該很容易理解了:

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

地址空間的概念非常通用,并且在很多場合中出現。比如電話號碼,在美國和很多其他國家,一個本地電話號碼通常是一個 7 位的數字。因此,電話號碼的地址空間是從 0 000 000 到 9 999 999。

地址空間也可以是非數字的,以 “.com” 結尾的網絡域名的集合也是地址空間。這個地址空間是由所有包含 2~63 個字符并且后面跟著 “.com” 的字符串組成的,組成這些字符串的字符可以是字母、數字和連字符。

到現在你應該已經明白地址空間的概念了,它是很簡單的。

有了虛擬地址空間后,CPU 就可以通過生成一個虛擬地址來訪問主存,這個虛擬地址在被送到內存之前會先被轉換成合適的物理地址,這個虛擬地址到物理地址的轉換過程稱為地址翻譯/地址轉換(address translation)。

地址翻譯需要 CPU 硬件和操作系統的密切合作:CPU 上的內存管理單元(Memory Management Unit,MMU)就是專門用來進行虛擬地址到物理地址的轉換的,不過 MMU 需要借助存放在內存中的查詢表,而這張表的內容正是由操作系統進行管理的。

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

原文標題:你看到的所有地址都不是真的

文章出處:【微信公眾號:Linux愛好者】歡迎添加關注!文章轉載請注明出處。

責任編輯:haq

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

    關注

    68

    文章

    10825

    瀏覽量

    211146
  • Linux
    +關注

    關注

    87

    文章

    11229

    瀏覽量

    208925

原文標題:你看到的所有地址都不是真的

文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    為什么ip地址通常以192.168開頭?

    不同的IP地址類型,它們之間的區別在于它們所在的網絡范圍和使用方式。 公網地址:被稱為全球唯一IP地址,是指可以直接在internet上訪問的IP
    的頭像 發表于 11-20 09:40 ?132次閱讀

    域名、IP 地址、網址分別是什么?有什么區別呢?

    域名、IP 地址和網址我們經常會聽到這三個名詞,尤其是當你想要開通一個網站的時候,但很多人對它們之間的區別并不十分清楚,那么域名、IP 地址、網址分別是什么?有什么
    的頭像 發表于 09-18 11:13 ?442次閱讀
    域名、IP <b class='flag-5'>地址</b>、網址分<b class='flag-5'>別是</b>什么?有什么<b class='flag-5'>區別</b>呢?

    數據總線和地址總線的區別

    數據總線和地址總線是計算機系統中至關重要的兩種總線,它們在數據傳輸和地址指定方面發揮著不同的作用。
    的頭像 發表于 09-10 11:40 ?1502次閱讀

    怎么申請MAC地址?不同申請方式的區別是什么?

    藍牙設備的MAC地址是指藍牙模塊中使用的唯一標識符,用于在網絡中識別和區分不同的藍牙設備。這個MAC地址是由美國電氣和電子工程師協會(IEEE)分配的,而不是由藍牙聯盟直接分配的。接來來英利檢測將
    的頭像 發表于 08-22 16:55 ?520次閱讀
    怎么申請MAC<b class='flag-5'>地址</b>?不同申請方式的<b class='flag-5'>區別是</b>什么?

    購買海外虛擬IP地址可以通過以下幾種方式#虛擬IP地址

    ip地址
    jf_62215197
    發布于 :2024年08月16日 07:16:04

    IP地址的分配

    公有IP地址與私有IP地址 公有IP地址:用于互聯網上的全球唯一地址,由互聯網號碼分配機構(IANA)和區域互聯網注冊機構(RIR)分配。比如說: “ 8.8.8.8 ”就是谷歌的DN
    的頭像 發表于 08-09 14:55 ?478次閱讀

    IP地址基礎科普

    IP地址是我們在網絡上識別設備的“身份證”。 1. 什么是IP地址? IP地址是一個用來標識網絡設備的數字地址。IPv4地址由32位數字組成
    的頭像 發表于 07-22 11:55 ?460次閱讀

    怎么申請MAC地址?MAC地址申請流程分享

    在數字化高速發展,機器設備大規模代替原始勞動力的時代,功能各異的設備不斷被創造出來。因此每一臺網絡設備都需要一個獨特的身份標識,這也就是我們所熟知的MAC地址。MAC地址作為設備的唯一標識符,在網
    的頭像 發表于 07-10 17:30 ?442次閱讀
    怎么申請MAC<b class='flag-5'>地址</b>?MAC<b class='flag-5'>地址</b>申請流程分享

    CentOS虛擬機克隆后開機無法獲取IP地址的解決策略

    克隆虛擬機后出現一臺能獲取到IP地址,另外一臺獲取不到IP地址,查看MAC地址后,發現兩臺MAC地址相同。
    的頭像 發表于 04-17 12:27 ?686次閱讀
    CentOS<b class='flag-5'>虛擬</b>機克隆后開機無法獲取IP<b class='flag-5'>地址</b>的解決策略

    虛擬機的ip地址和主機一樣嗎

    地址,用于與其他設備進行通信。下面將詳細介紹虛擬機的IP地址和主機的IP地址之間的區別和聯系。 IP地址
    的頭像 發表于 03-26 15:34 ?4878次閱讀

    什么是靜態IP地址?什么是DHCP?DHCP與靜態IP到底有何區別呢?

    什么是靜態IP地址?什么是DHCP?DHCP與靜態IP到底有何區別呢?DHCP與靜態IP地址哪個好? 靜態IP地址是為網絡設備(如計算機、服務器、路由器等)手動配置的固定IP
    的頭像 發表于 12-27 14:09 ?6050次閱讀

    沒有虛擬地址的處理器是怎么工作的?

    看看沒有虛擬地址的處理器是怎么工作的,編譯環境除了將高級語言轉換成機器碼外,linker把眾多分散開發文件串起來,使得增量編譯
    的頭像 發表于 12-07 10:29 ?366次閱讀

    什么是子網掩碼?如何根據掩碼來確定ip地址網段?

    邏輯與運算,以確定網絡地址和主機地址的邊界。子網掩碼中的1表示網絡地址,0表示主機地址。通過應用子網掩碼,可以劃分出不同的子網,實現對網絡的
    的頭像 發表于 12-07 09:40 ?2145次閱讀

    如何綁定ip地址與mac物理地址呢?

    ,并探討其用途和實施步驟。 第一部分:綁定IP地址與MAC物理地址的目的和用途 在網絡中,每個設備都會有一個唯一的MAC物理地址,它被刻在設備的網絡適配器(網卡)上。而IP地址則是用于
    的頭像 發表于 12-07 09:33 ?6513次閱讀

    MMU虛擬地址空間布局

    當然虛擬地址空間劃分不只是如此。因為目前應用程序沒有那么大的內存需求,所以ARM64處理器不支持完全的64位虛擬地址,實際支持情況如下。 (1)-虛擬地址位寬 虛擬地址的最大寬度是48
    的頭像 發表于 11-26 16:35 ?847次閱讀