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

Linux--程序地址空間

這篇具有很好參考價值的文章主要介紹了Linux--程序地址空間。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Linux--程序地址空間,Linux操作系統(tǒng),linux,運維,服務器

??北塵_:個人主頁

??個人專欄:《Linux操作系統(tǒng)》《經典算法試題 》《C++》 《數據結構與算法》

??走在路上,不忘來時的初心
@[TOC](文章目錄)

一、程序地址空間回顧

我們在講C語言的時候,老師給大家畫過這樣的空間布局圖
下圖是內存嗎?答案不是,它是進程/虛擬地址空間。
Linux--程序地址空間,Linux操作系統(tǒng),linux,運維,服務器
可是我們對他并不理解!

來段代碼感受一下

#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
int g_val = 0;
int main()
{
 pid_t id = fork();
 if(id < 0){
 perror("fork");
 return 0;
 }
 else if(id == 0){ //child 
 printf("child[%d]: %d : %p\n", getpid(), g_val, &g_val);
 }
 else{ //parent
 printf("parent[%d]: %d : %p\n", getpid(), g_val, &g_val);
 }
 
 sleep(1);
 return 0;
 }

輸出

Linux--程序地址空間,Linux操作系統(tǒng),linux,運維,服務器

我們發(fā)現,輸出出來的變量值和地址是一模一樣的,很好理解呀,因為子進程按照父進程為模版,父子并沒有對變量進行進行任何修改??墒菍⒋a稍加改動:

#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
int g_val = 0;
int main()
{
 pid_t id = fork();
 if(id < 0){
 perror("fork");
 return 0;
 }
 else if(id == 0){ //child,子進程肯定先跑完,也就是子進程先修改,完成之后,父進程再讀取
 g_val=100;
 printf("child[%d]: %d : %p\n", getpid(), g_val, &g_val);
 }else{ //parent
 sleep(3);
 printf("parent[%d]: %d : %p\n", getpid(), g_val, &g_val);
 }
 sleep(1);
 return 0;
 }

輸出

Linux--程序地址空間,Linux操作系統(tǒng),linux,運維,服務器

我們發(fā)現,父子進程,輸出地址是一致的,但是變量內容不一樣!能得出如下結論:

  1. 變量內容不一樣,所以父子進程輸出的變量絕對不是同一個變量
  2. 但地址值是一樣的,說明,該地址絕對不是物理地址!
  3. 在Linux地址下,這種地址叫做 虛擬地址
  4. 我們在用C/C++語言所看到的地址,全部都是虛擬地址!物理地址,用戶一概看不到,由OS統(tǒng)一管理。

OS必須負責將 虛擬地址 轉化成 物理地址 。

二、進程地址空間

所以之前說‘程序的地址空間’是不準確的,準確的應該說成 進程地址空間 ,那該如何理解呢?看圖:

虛擬地址空間:
Linux--程序地址空間,Linux操作系統(tǒng),linux,運維,服務器

說明:
上面的圖就足矣說名問題,同一個變量,地址相同,其實是虛擬地址相同,內容不同其實是被映射到了不同的物理地址!文章來源地址http://www.zghlxwxcb.cn/news/detail-768679.html

三、為什么要存在進程地址空間

  1. 讓進程以統(tǒng)一的視角看待內存,所以任意一個進程,可以通過地址空間+頁面也可以將亂序的內存數據,變得有序,分門別類的規(guī)劃好。
  2. 可以安全檢查。
  3. 將進程管理和內存管理解耦。
  4. 通過頁表,讓進程映射到不同的物理內存,從而實現進程的鼓勵性。

到了這里,關于Linux--程序地址空間的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

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

領支付寶紅包贊助服務器費用

相關文章

  • 【Linux】程序地址空間

    【Linux】程序地址空間

    首先引入地址空間的作用 我們發(fā)現,但我們子進程修改全局變量g_val的時候,父進程的g_val沒有受到影響,但是他們的地址都是一樣的,這是為什么呢? 由此我們知道,這里的地址絕對不是物理內存的地址,而是虛擬地址(線性地址);并且?guī)缀跛姓Z言,如果有地址的概念

    2024年02月13日
    瀏覽(13)
  • Linux--程序地址空間

    Linux--程序地址空間

    ??北塵_ :個人主頁 ??個人專欄 :《Linux操作系統(tǒng)》《經典算法試題 》《C++》 《數據結構與算法》 ??走在路上,不忘來時的初心 @[TOC](文章目錄) 我們在講C語言的時候,老師給大家畫過這樣的空間布局圖 下圖是內存嗎?答案不是,它是進程/虛擬地址空間。 可是我們對他

    2024年02月03日
    瀏覽(14)
  • 操作系統(tǒng)實驗 2.3系統(tǒng)調用:linux-0.11-lab “為版本0內核增加一個系統(tǒng)調用getjiffies” 和 “在用戶程序中使用新增的系統(tǒng)調用”

    操作系統(tǒng)實驗 2.3系統(tǒng)調用:linux-0.11-lab “為版本0內核增加一個系統(tǒng)調用getjiffies” 和 “在用戶程序中使用新增的系統(tǒng)調用”

    打開 vscode ,在如圖所示位置打開 ~/os/linux-0.11-lab/0 文件夾 1.定義getjiffies系統(tǒng)調用 題目中給的提示:進入到 unistd.h 文件中 閱讀代碼,可以發(fā)現上圖劃線處有個系統(tǒng)調用名為 getpid :返回當前進程號——這與我們期望實現的功能類似:通過系統(tǒng)調用返回jiffies值。 于是此時希望

    2023年04月08日
    瀏覽(109)
  • [Linux 進程(五)] 程序地址空間深度剖析

    [Linux 進程(五)] 程序地址空間深度剖析

    Linux學習路線比較線性,也比較長,因此一個完整的知識點學習就會分布在兩篇文章中,沒有連貫起來,訂閱的朋友諒解一下,再次感謝訂閱! 上一篇文章最后講到了程序地址空間分布,大家可以先復習一下上一篇文章:程序地址空間的初認識 本片我們深度學習一下程序地址

    2024年01月19日
    瀏覽(25)
  • 【Linux操作系統(tǒng)】探秘Linux奧秘:Linux 操作系統(tǒng)的解密與實戰(zhàn)

    【Linux操作系統(tǒng)】探秘Linux奧秘:Linux 操作系統(tǒng)的解密與實戰(zhàn)

    ??個人主頁: Sarapines Programmer ???系列專欄: 《操作系統(tǒng)實驗室》 ??詩賦清音:柳垂輕絮拂人衣,心隨風舞夢飛。 山川湖海皆可涉,勇者征途逐星輝。 目錄 ??1 初識Linux OS ??2. Linux 操作系統(tǒng)的解密與實戰(zhàn) ??1. 實驗目的 ??2. 實驗準備 ??3. 實驗內容 ??4. 實驗心得 ??總

    2024年02月03日
    瀏覽(28)
  • 【Linux操作系統(tǒng)】探秘Linux奧秘:操作系統(tǒng)的入門與實戰(zhàn)

    【Linux操作系統(tǒng)】探秘Linux奧秘:操作系統(tǒng)的入門與實戰(zhàn)

    ??個人主頁: Sarapines Programmer ???系列專欄: 《操作系統(tǒng)實驗室》 ??詩賦清音:柳垂輕絮拂人衣,心隨風舞夢飛。 山川湖海皆可涉,勇者征途逐星輝。 目錄 ??1 初識Linux OS ??2?操作系統(tǒng)的入門與實戰(zhàn) ??1. 實驗目的 ??2. 實驗準備 ??3. 實驗內容 ??4. 實驗心得 ??總結

    2024年02月04日
    瀏覽(21)
  • 【Linux系統(tǒng)化學習】進程地址空間 | 虛擬地址和物理地址的關系

    【Linux系統(tǒng)化學習】進程地址空間 | 虛擬地址和物理地址的關系

    ========================================================================= 個人主頁點擊直達: 小白不是程序媛 Linux專欄: Linux系統(tǒng)化學習 代碼倉庫: Gitee ========================================================================= 目錄 虛擬地址和物理地址 頁表 進程地址空間 進程地址空間存在的意義 我們在學

    2024年02月05日
    瀏覽(25)
  • [Linux 進程(四)] 再談環(huán)境變量,程序地址空間初識

    [Linux 進程(四)] 再談環(huán)境變量,程序地址空間初識

    上一篇我們講了環(huán)境變量,如果有不明白的先讀一下上一篇文章:環(huán)境變量講解 本篇文章我們繼續(xù)完善環(huán)境變量這章剩下的內容,以及main函數第三個參數的詳解,進程地址空間的初始。 看完上一篇文章的同學,肯定知道了如何查看環(huán)境變量,命令行輸入 env: 我們查看一下

    2024年01月18日
    瀏覽(24)
  • 【網絡安全】-Linux操作系統(tǒng)—操作系統(tǒng)發(fā)展歷史與Linux

    【網絡安全】-Linux操作系統(tǒng)—操作系統(tǒng)發(fā)展歷史與Linux

    操作系統(tǒng)(Operating System,簡稱OS)是管理計算機硬件與軟件資源的系統(tǒng)軟件,它是計算機系統(tǒng)的核心與基石。操作系統(tǒng)的發(fā)展歷史可以追溯到20世紀50年代。 初期的操作系統(tǒng) 在計算機技術的早期,操作系統(tǒng)并不存在。那時,計算機使用一種叫做批處理系統(tǒng)的方式來運行程序。

    2024年02月03日
    瀏覽(30)
  • 【Linux操作系統(tǒng)】【綜合實驗一 Linux操作基礎】【淺試Linux命令】

    【Linux操作系統(tǒng)】【綜合實驗一 Linux操作基礎】【淺試Linux命令】

    Linux均以文件形式存在 本文出現的命令淺嘗輒止,具體使用參考文檔即可 解決一個任務的方法很多,本文僅淺試了一些簡單的命令 要求掌握Linux基礎操作,熟悉Linux行界面,并 明白操作的原理以及目的(難) ;熟悉Linux系統(tǒng)環(huán)境。 通過這個第一階段實驗,要求掌握以下操作

    2023年04月08日
    瀏覽(28)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包