国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Linux-14】進(jìn)程地址空間&虛擬空間&頁表——原理&知識點(diǎn)詳解

這篇具有很好參考價(jià)值的文章主要介紹了【Linux-14】進(jìn)程地址空間&虛擬空間&頁表——原理&知識點(diǎn)詳解。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言

大家好吖,歡迎來到 YY 滴 系列 ,熱烈歡迎! 本章主要內(nèi)容面向接觸過Linux的老鐵
主要內(nèi)容含:
【Linux-14】進(jìn)程地址空間&虛擬空間&頁表——原理&知識點(diǎn)詳解,YY滴 《Linux系列》,linux,數(shù)據(jù)庫,mongodb

歡迎訂閱 YY滴C++專欄!更多干貨持續(xù)更新!以下是傳送門!

  • YY的《C++》專欄
  • YY的《C++11》專欄
  • YY的《Linux》專欄
  • YY的《數(shù)據(jù)結(jié)構(gòu)》專欄
  • YY的《C語言基礎(chǔ)》專欄
  • YY的《初學(xué)者易錯(cuò)點(diǎn)》專欄
  • YY的《小小知識點(diǎn)》專欄
  • YY的《單片機(jī)期末速過》專欄
  • YY的《C++期末速過》專欄
  • YY的《單片機(jī)》專欄
  • YY的《STM32》專欄
  • YY的《數(shù)據(jù)庫》專欄
  • YY的《數(shù)據(jù)庫原理》專欄

一.什么是進(jìn)程地址空間?

1.進(jìn)程地址空間基本概念

  1. 每一個(gè) 進(jìn)程 運(yùn)行之后,都會有一個(gè)進(jìn)程地址空間 的存在
  2. 進(jìn)程地址空間是操作系統(tǒng)OS 給進(jìn)程花的大餅 欺騙進(jìn)程他有足夠的空間用——使每個(gè)進(jìn)程都認(rèn)為自己獨(dú)占系統(tǒng)內(nèi)存資源。(即虛擬空間)
  3. 結(jié)論:進(jìn)程地址空間并不是物理內(nèi)存,而是 虛擬內(nèi)存 的一部分(虛擬地址,不具備存儲能力)
  • 進(jìn)程地址空間本質(zhì)上是一種 抽象概念 ,用于描述進(jìn)程如何看待和使用內(nèi)存。
  1. 每個(gè)進(jìn)程都有自己的內(nèi)存地址范圍,這樣就不會與其他進(jìn)程發(fā)生沖突。進(jìn)程地址空間通常被劃分為幾個(gè)部分,包括代碼段、數(shù)據(jù)段、堆和棧等,每個(gè)部分都有其特定的用途。
    【Linux-14】進(jìn)程地址空間&虛擬空間&頁表——原理&知識點(diǎn)詳解,YY滴 《Linux系列》,linux,數(shù)據(jù)庫,mongodb

2.mm_struct 基本概念

  1. 進(jìn)程地址空間需要被操作系統(tǒng)OS 管理 起來,每一個(gè)進(jìn)程都有地址空間,需要 被先描述再組織 ,因此地址空間是一個(gè)內(nèi)核的 數(shù)據(jù)結(jié)構(gòu)(內(nèi)核結(jié)構(gòu)體) ,即我們接下來要提到的 mm_struct
  2. 先描述再組織原理博客:【Linux】程序員一定要了解的計(jì)算機(jī)管理理念——描述與組織(9)

3.mm_struct/進(jìn)程地址空間 實(shí)現(xiàn)“區(qū)域劃分”的原理

  1. mm_struct 及其實(shí)現(xiàn)區(qū)域劃分的原理: 對一段線性空間設(shè)置start與end
  • 我們在這里舉個(gè)例子:小胖和小花同學(xué)要對座位進(jìn)行“區(qū)域劃分”,我們 從計(jì)算機(jī)語言角度如何實(shí)現(xiàn)呢?
    【Linux-14】進(jìn)程地址空間&虛擬空間&頁表——原理&知識點(diǎn)詳解,YY滴 《Linux系列》,linux,數(shù)據(jù)庫,mongodb
  • 如下所示,我們通過將其 描述成結(jié)構(gòu)體, 對一段線性空間設(shè)置start與end,實(shí)現(xiàn)了區(qū)域劃分
struct destop_area
{
    int total size;
    int xiaopang_start;
    int xiaopang_end;
    int xiaohua start;
    int xiaohua end;
}

struct destop_area area={100,0,50,50,100};
  • 我們打開linux內(nèi)核結(jié)構(gòu)體源碼,也可以找到證明
    【Linux-14】進(jìn)程地址空間&虛擬空間&頁表——原理&知識點(diǎn)詳解,YY滴 《Linux系列》,linux,數(shù)據(jù)庫,mongodb

二.什么是頁表?

1.頁表基本概念

  • 引入:進(jìn)程地址空間即虛擬地址,不具備存儲能力
  1. 因此操作系統(tǒng)OS會對每個(gè)進(jìn)程維護(hù)一張 映射表, 對應(yīng)著虛擬地址和物理地址 ,這就是 頁表
  2. 頁表是一種特殊的數(shù)據(jù)結(jié)構(gòu),它位于系統(tǒng)空間的頁表區(qū)
  3. 頁表還具有 權(quán)限控制 的功能,可以通過設(shè)置頁表項(xiàng)的 權(quán)限位,實(shí)現(xiàn)對內(nèi)存的讀、寫、執(zhí)行等操作的控制。
    【Linux-14】進(jìn)程地址空間&虛擬空間&頁表——原理&知識點(diǎn)詳解,YY滴 《Linux系列》,linux,數(shù)據(jù)庫,mongodb

2.進(jìn)程是如何和“頁表”進(jìn)行聯(lián)系?

  • 進(jìn)程各種訪問尋址的前提, 一定是它在cpu上運(yùn)行
  • cpu上有個(gè) 特殊寄存器cr3 ,他會保存頁表地址,物理地址(頁表地址會保存在進(jìn)程的上下文當(dāng)中)
    【Linux-14】進(jìn)程地址空間&虛擬空間&頁表——原理&知識點(diǎn)詳解,YY滴 《Linux系列》,linux,數(shù)據(jù)庫,mongodb

3.每個(gè)進(jìn)程都有頁表,頁表在“進(jìn)程切換”如何跟蹤

根據(jù)第二小點(diǎn)內(nèi)容:

  • 答: 經(jīng)過cpu后,頁表地址加載到上下文中保存好, 一起切換
  • 原理:進(jìn)程切換時(shí),地址也會被保存。

三.地址空間&頁表的作用機(jī)理

1.地址空間&頁表的基本原理

  • 如圖:
  • 頁表的主要作用是將虛擬地址空間映射到物理內(nèi)存空間,實(shí)現(xiàn)虛擬地址到物理地址的轉(zhuǎn)換。
    【Linux-14】進(jìn)程地址空間&虛擬空間&頁表——原理&知識點(diǎn)詳解,YY滴 《Linux系列》,linux,數(shù)據(jù)庫,mongodb

2.【頁表實(shí)驗(yàn)1】探究為什么一對父子進(jìn)程,同樣虛擬地址,讀取數(shù)據(jù)不同?(OS對頁表的調(diào)整)

  • 我們經(jīng)過fork,子進(jìn)程經(jīng)過寫時(shí)拷貝會將頁表 完整拷貝 下來一份
    (寫時(shí)拷貝博客:【C++】STL容器——【深淺拷貝】與【寫時(shí)拷貝】對比詳解(拷貝構(gòu)造)(10))
  • 因?yàn)?font color="#FF0000"> 進(jìn)程具有獨(dú)立性 ,我們進(jìn)行寫入操作時(shí),我們無法通過子進(jìn)程修改父進(jìn)程(對應(yīng)同一塊物理內(nèi)存)
    【Linux-14】進(jìn)程地址空間&虛擬空間&頁表——原理&知識點(diǎn)詳解,YY滴 《Linux系列》,linux,數(shù)據(jù)庫,mongodb
  • 于是,操作系統(tǒng)會單獨(dú)給子進(jìn)程開辟一塊新的物理地址
    【Linux-14】進(jìn)程地址空間&虛擬空間&頁表——原理&知識點(diǎn)詳解,YY滴 《Linux系列》,linux,數(shù)據(jù)庫,mongodb

3.【頁表實(shí)驗(yàn)2】為什么可執(zhí)行程序中有大量代碼和數(shù)據(jù),加載到內(nèi)存任意位置都可以,不用考慮順序位置(頁表映射功能)

  • 答:地址空間,以無序變有序——是加載到內(nèi)存任意位置都可以,不用考慮順序位置, 因?yàn)槎紩豁摫碛成?
  • 【減小內(nèi)存管理成本,沒有頁表每次都要變化pcb】
  • 分析:進(jìn)程地址空間, 讓進(jìn)程以統(tǒng)一的視角看待內(nèi)存
  • 一個(gè)進(jìn)程,可以通過地址空間+頁表可以將 亂序/亂序 的內(nèi)存數(shù)據(jù),變成 有序 ,分門別類的規(guī)劃好!【Linux-14】進(jìn)程地址空間&虛擬空間&頁表——原理&知識點(diǎn)詳解,YY滴 《Linux系列》,linux,數(shù)據(jù)庫,mongodb

4.【頁表實(shí)驗(yàn)3】為什么字符常量區(qū)不可被修改?它曾經(jīng)是如何被修改的?(頁表的權(quán)限控制功能)

  • 我們運(yùn)行下面所示程序,程序會崩潰
int main()
{
  char *str= “hello Linux”;   //常量區(qū)曾經(jīng)是如何被修改的?
  *str= 'H';   //常量區(qū)不可被修改
 
  return 0;
}
  • 核心原理:頁表還具有 權(quán)限控制 的功能,可以通過設(shè)置頁表項(xiàng)的 權(quán)限位,實(shí)現(xiàn)對內(nèi)存的讀、寫、執(zhí)行等操作的控制。
    【Linux-14】進(jìn)程地址空間&虛擬空間&頁表——原理&知識點(diǎn)詳解,YY滴 《Linux系列》,linux,數(shù)據(jù)庫,mongodb

問:為什么程序會崩潰?

  • 答:語言程度上:字符常量區(qū)不可被修改
  • 答:進(jìn)程地址空間上: 頁表權(quán)限設(shè)置 只讀 ,所以不可被修改

問:曾經(jīng)又是如何被加載的?

  • 答:進(jìn)程地址空間上: 頁表權(quán)限設(shè)置 可讀寫 ,所以可以被修改

5.【頁表實(shí)驗(yàn)4】一個(gè)游戲的大小遠(yuǎn)比內(nèi)存大,他在內(nèi)存中如何加載呢?(頁表如何實(shí)現(xiàn)linux掛起狀態(tài))

  • 系統(tǒng)并不需要全部將其加載到內(nèi)存中,加載一部分/不加載,需要時(shí)加載
  • 其中涉及到掛起狀態(tài)

頁表如何實(shí)現(xiàn)linux掛起狀態(tài)?

  • 頁表中有一個(gè)字段, 標(biāo)志內(nèi)存是否要分配空間 && 有內(nèi)容
  • 例如:00 01 11 10 二進(jìn)制形式來表示【是否分配&& 有內(nèi)容】【Linux-14】進(jìn)程地址空間&虛擬空間&頁表——原理&知識點(diǎn)詳解,YY滴 《Linux系列》,linux,數(shù)據(jù)庫,mongodb
  • 頁表實(shí)現(xiàn)linux掛起狀態(tài)
  • 把原來的11狀態(tài)變成00狀態(tài)
    【Linux-14】進(jìn)程地址空間&虛擬空間&頁表——原理&知識點(diǎn)詳解,YY滴 《Linux系列》,linux,數(shù)據(jù)庫,mongodb

6.【頁表實(shí)驗(yàn)5】缺頁中斷(進(jìn)程地址空間建立“進(jìn)程管理”與“內(nèi)存管理”的聯(lián)系)【全流程配圖詳解】(重點(diǎn))

全流程講解:文章來源地址http://www.zghlxwxcb.cn/news/detail-861865.html

  1. 當(dāng)前有個(gè)進(jìn)程開始訪問,通過cpu得到了頁表的地址,訪問頁表,想找到物理地址
  2. 此時(shí)頁表并沒有物理地址,屬于缺頁;于是進(jìn)入暫停狀態(tài)
  • 假設(shè)此時(shí)狀態(tài)為下圖
    【Linux-14】進(jìn)程地址空間&虛擬空間&頁表——原理&知識點(diǎn)詳解,YY滴 《Linux系列》,linux,數(shù)據(jù)庫,mongodb
  1. 這時(shí)操作系統(tǒng)就把磁盤中的程序加載到內(nèi)存中,并把物理地址填入缺失的頁中
    【Linux-14】進(jìn)程地址空間&虛擬空間&頁表——原理&知識點(diǎn)詳解,YY滴 《Linux系列》,linux,數(shù)據(jù)庫,mongodb
  2. 此時(shí)屬于"已分配(物理地址)"狀態(tài),標(biāo)志位置1
    【Linux-14】進(jìn)程地址空間&虛擬空間&頁表——原理&知識點(diǎn)詳解,YY滴 《Linux系列》,linux,數(shù)據(jù)庫,mongodb
  • 結(jié)論:進(jìn)程地址空間建立進(jìn)程管理與內(nèi)存管理的聯(lián)系【Linux-14】進(jìn)程地址空間&虛擬空間&頁表——原理&知識點(diǎn)詳解,YY滴 《Linux系列》,linux,數(shù)據(jù)庫,mongodb

到了這里,關(guān)于【Linux-14】進(jìn)程地址空間&虛擬空間&頁表——原理&知識點(diǎn)詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Linux】地址空間&&虛擬地址

    【Linux】地址空間&&虛擬地址

    個(gè)人主頁 : zxctscl 如有轉(zhuǎn)載請先通知 先先來一個(gè)測試代碼: 編譯運(yùn)行: 子進(jìn)程把數(shù)據(jù)改了,父進(jìn)程的數(shù)據(jù)沒有改變,但是父子地址是一樣的。 這個(gè)地址絕對不是物理地址,理論上修改了數(shù)據(jù)為300之后不可能在輸出有100,訪問一個(gè)地址怎么可能又是100也是300。這個(gè)地址在系

    2024年04月22日
    瀏覽(18)
  • Linux虛擬地址空間

    Linux虛擬地址空間

    運(yùn)行結(jié)果 上述代碼為,創(chuàng)建子進(jìn)程,若干秒后,子進(jìn)程改變?nèi)肿兞恐担l(fā)現(xiàn)子進(jìn)程與父進(jìn)程打印此全局變量值時(shí), 值不同,且地址相同 。 同一個(gè)地址處的值在同一時(shí)刻不可能不同,于是引出了虛擬地址空間的概念。即這里子進(jìn)程與父進(jìn)程打印的地址并非實(shí)際的物理地址,

    2024年01月25日
    瀏覽(15)
  • 【Linux】虛擬地址空間

    【Linux】虛擬地址空間

    對于C/C++程序,我們眼中的內(nèi)存是這樣的: 我們利用這種對于與內(nèi)存的理解看一下下面這段代碼: 運(yùn)行結(jié)果: 觀察父子進(jìn)程中 val 變量的值,以及 val 的地址,我們發(fā)現(xiàn)父子進(jìn)程中 val 的地址都是同一個(gè)地址 但是 val 的值并不相同,這是什么意思???內(nèi)存中同一個(gè)地址卻存

    2023年04月08日
    瀏覽(22)
  • 【操作系統(tǒng)基礎(chǔ)】【CPU訪存原理】:寄存 緩存 內(nèi)存 外存、內(nèi)存空間分區(qū)、虛擬地址轉(zhuǎn)換、虛擬地址的映射

    【操作系統(tǒng)基礎(chǔ)】【CPU訪存原理】:寄存 緩存 內(nèi)存 外存、內(nèi)存空間分區(qū)、虛擬地址轉(zhuǎn)換、虛擬地址的映射

    存儲器怎么存儲數(shù)據(jù)、內(nèi)存空間分區(qū)、虛擬地址轉(zhuǎn)換 計(jì)算機(jī)的存儲器:寄存 緩存 內(nèi)存 外存(按功能劃分) 計(jì)算機(jī)的處理器需要一個(gè)存儲器來存儲大量的指令和數(shù)據(jù)以便自己不斷取指執(zhí)行和訪問數(shù)據(jù)。 內(nèi)存 (內(nèi)存就是運(yùn)行內(nèi)存,如手機(jī)的8G運(yùn)行內(nèi)存,電腦的16G運(yùn)行內(nèi)存)就

    2024年01月25日
    瀏覽(20)
  • Linux內(nèi)核源碼分析 (B.2)虛擬地址空間布局架構(gòu)

    Linux內(nèi)核源碼分析 (B.2)虛擬地址空間布局架構(gòu)

    Linux內(nèi)核只是操作系統(tǒng)當(dāng)中的一部分,對下管理系統(tǒng)所有硬件設(shè)備,對上通過系統(tǒng)調(diào)用向 Library Routine 或其他應(yīng)用程序提供API接口。 內(nèi)存管理可以通過以下三個(gè)維度進(jìn)行介紹: 用戶空間 相當(dāng)于應(yīng)用程序使用 malloc() 申請內(nèi)存,通過 free() 釋放內(nèi)存。 malloc() / free() 是 glibc 庫的內(nèi)

    2024年02月09日
    瀏覽(41)
  • 每天40min,我們一起用70天穩(wěn)扎穩(wěn)打?qū)W完《JavaEE初階》——1/70 第一天【進(jìn)程和線程】【虛擬地址空間】

    專注 效率 記憶 預(yù)習(xí) 筆記 復(fù)習(xí) 做題 歡迎觀看我的博客,如有問題交流,歡迎評論區(qū)留言,一定盡快回復(fù)!(大家可以去看我的專欄,是所有文章的目錄) 文章字體風(fēng)格: 紅色文字表示:重難點(diǎn)★? 藍(lán)色文字表示:思路以及想法★? 如果大家覺得有幫助的話,感謝大家?guī)?/p>

    2024年02月15日
    瀏覽(25)
  • VMware 虛擬機(jī)中 Linux 系統(tǒng)Centos7磁盤空間擴(kuò)容(親測)

    VMware 虛擬機(jī)中 Linux 系統(tǒng)Centos7磁盤空間擴(kuò)容(親測)

    例如之前虛擬機(jī)磁盤空間為30G,現(xiàn)要將磁盤容量設(shè)置為50G 打開虛擬機(jī)(必須處于關(guān)機(jī)狀態(tài)),點(diǎn)擊【編輯虛擬機(jī)設(shè)置】,然后點(diǎn)擊【磁盤】,接著點(diǎn)擊【擴(kuò)展】,輸入修改后的最大磁盤容量50G,具體操作時(shí)最大容量根據(jù)自己的需求設(shè)置即可。 輸入完成最大磁盤容量后,點(diǎn)擊

    2024年02月12日
    瀏覽(22)
  • 【Linux初階】進(jìn)程地址空間 | CUP與可執(zhí)行程序的交互原理

    【Linux初階】進(jìn)程地址空間 | CUP與可執(zhí)行程序的交互原理

    ???hello,各位讀者大大們你們好呀?? ????系列專欄:【Linux初階】 ????本篇內(nèi)容:計(jì)算機(jī)空間初識(子進(jìn)程變量修改實(shí)驗(yàn)),感性理解進(jìn)程虛擬地址空間,進(jìn)程地址空間基礎(chǔ)(概念、區(qū)域劃分與調(diào)整、程序?qū)?nèi)存數(shù)據(jù)的修改、按需分配虛擬地址空間),解答為什么存

    2024年02月05日
    瀏覽(22)
  • [vmware]vmware虛擬機(jī)壓縮空間清理空間

    [vmware]vmware虛擬機(jī)壓縮空間清理空間

    vmware中的ubuntu使用如果拷貝文件進(jìn)去在刪除,vmare鏡像文件并不會減少日積月累會不斷是的真實(shí)物理磁盤空間大幅度減少,比如我以前windows操作系統(tǒng)本來只有30GB最后居然占道硬盤200GB,清理方法有2種。 第一種:vmware界面操作 第二種:在虛擬機(jī)操作系統(tǒng)中利用wmware-tools進(jìn)行操

    2024年02月05日
    瀏覽(18)
  • VMware虛擬機(jī)優(yōu)化指南:macOS在虛擬機(jī)(VMware)中占用的空間越來越大,如何瘦身節(jié)省空間?

    VMware虛擬機(jī)優(yōu)化指南:macOS在虛擬機(jī)(VMware)中占用的空間越來越大,如何瘦身節(jié)省空間?

    我們在VMware虛擬機(jī)中安裝macOS系統(tǒng)時(shí),如果長時(shí)間的使用,物理機(jī)占用的空間會越來越大,即使你在macOS系統(tǒng)中刪除了,卸載了,清空了回收站,但是物理機(jī)里的磁盤空間一點(diǎn)也沒縮小,時(shí)間越長,占用的空間就越多。 遇到這樣的問題,解決辦法有二。 第一種辦法,關(guān)閉mac

    2024年02月04日
    瀏覽(33)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包