日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux之地址空间

發布時間:2023/11/30 linux 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux之地址空间 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

程序:一組指令的有效集合。它是靜態的,不具有任何的運行意義。程序最終轉換為二進制文件。

進程:程序的執行就是進程。可以把它看成獨立的程序,在內存中有其對應的代碼空間和數據空間。一個進程所擁有的數據和代碼只屬于自己。進程是資源分配的基本單位,也是調度運行的基本單位。

進程和程序并不是一一對應的關系,相同的程序運行在不同的數據集上就是不同的進程。

進程還具有并發性和交往性,而程序卻是封閉的。

這節中有幾個重要的問題,我舉個例子給大家看吧~

第一例:


這段代碼是說什么的呢?顯然,它輸出了函數、初始化的變量,未初始化的變量,堆區,棧區的地址,那么,這些地址有什么規律呢?


可以看的出來,它的地址是依次從低地址到高地址。

然而,還有一類特殊的函數---主函數,它的地址是如何分布的呢?


地址為:


顯然,,帶有命令行參數的主函數的地址比前面比較的棧區的地址還要大。

所以就有了如圖的地址空間:(如果地址空間中的數都是連續的,則我們稱之為線性地址空間)


第二例:

父進程和子進程:


運行結果為:


在這里,我們會不會很奇怪一個問題呢?這里將if和else里邊的內容都執行了。然而在我們經常編寫的代碼中,if和else是不能同時執行的。進程卻在這里做到了。

fork():是創建子進程。這里的getpid()是獲取到子進程的pid,getppid()是獲取到父進程的pid(即這里的2677);

我們發現,父進程和子進程指向的是同一塊內存,那么我們也應該想到他們的指向也應該是一樣的,(這只是我們的推測哦),,看個例子我們就知道了。

eg:


結果是什么呢?


看到那個200和100了嗎?它們的值竟然不一樣。

說明它們并不是同一個指向,那么為什么地址一樣呢?這里就引出了我們的虛擬地址。

虛擬地址空間:在一個帶有虛擬存儲器的系統中,cpu從一個有N=2的n次方個地址的地址空間中生成虛擬地址。

如圖所示:


在這里,虛擬地址空間通過頁表和MMU(存儲器管理單元)映射到物理地址中,它們的物理地址是不相等的,所以最后得到的值也不相等。



今天的內容先說到這里嘍。~~~

歡迎來訪,多多提議哦。






總結

以上是生活随笔為你收集整理的linux之地址空间的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。