通過一個可執行檔被執行的過程理解進程的深刻性,可執行檔深刻性

來源:互聯網
上載者:User

通過一個可執行檔被執行的過程理解進程的深刻性,可執行檔深刻性

  不知大家在平時想過沒有,我們放在磁碟(之前我一直認為Windows的C盤是主存,DEF盤是磁碟,哈哈,應該沒有像我這樣無知的人吧)上的一個可執行檔(或者應用程式)是如何得到執行的,而且為什麼我們在寫程式的時候怎麼感覺程式中的一些變數的地址好像在各個不同的程式中都差不多,同時這個地址到底真正對應的是什嗎?是我們可執行檔對應所在位置的磁碟地址嗎?下面我就以Linux為平台(Windows也一樣,只是將命令方式變為圖形方式了)為大家詳細講解一下一個可執行檔是如何得到執行的。

  在Linux中當我們開啟shell時,我們相當於已經建立了一個進程,這個進程啟動並執行是shell這個應用程式。當在shell中輸入一個可執行目標檔案的名字時,shell會用fork()函數建立一個新的進程,在這個新進程中調用execve()函數來載入和執行這個可執行檔。

  我準備詳細來說明一下這個execve()函數是如何來工作的,比如它是如何將磁碟上的目標檔案拷貝到主存中來讓CPU啟動並執行?程式中我們所看到的地址到底是什嗎?帶著這些問題我們來一步一步分析。

  首先因為execve()函數是在shell這個進程的子進程中啟動並執行,而子進程必定會拷貝(其實也不是拷貝,要不然這個進程設計的也太臃腫了,是一種叫寫時拷貝的機制)很多父進程已存在的內容,所以必須刪除掉。

然後它開始映射(看到映射有沒有想到數學中叫函數映射的東西,本質上都是一樣的)我們可執行檔中的內容,談到映射那必然是X------>Y,現在Y是我們的可執行檔,那X呢?先給大家補充一點進程中的知識,等補充完了,才能說X。每個進程中都有一個叫頁表的東西,頁表有很多項,每一項叫頁表項(為了簡化問題的複雜性我們就假設Linux是一級頁表吧),同時在作業系統中一般一個頁或者物理塊的大小為4KB(對應為12位的頁內地址),所以在一個32的作業系統中只需要儲存2^20個頁表項就可以表示地址從0x00000000到0xffffffff的範圍,其中這個地址的後12位為頁內地址,而我們在程式中所見到的地址就是這個地址,根本不是什麼我們程式對應的物理地址。記住,這個地址並不是真正對應的磁碟或者記憶體的地址,而是虛擬,叫虛擬位址。如果現在還不太明白等我全部講完就會懂的。

講到這裡大家先稍微理解理解,免得看的一頭霧水。那我開始,剛剛我們說到進程中的頁表項,每一個頁表項從開始到結束對應的編號為0x00000-0xfffff(一共2^20個,大家可以畫一畫),這個頁表項主要有兩個部分,第一個部分用來指向磁碟的物理塊或者記憶體上的塊,第二個部分表明所指向的塊是在磁碟上還是記憶體上或者這部分就根本沒用。

那麼我們現在可以說X是什麼了,就是虛擬位址!說完了X,Y,那還有映射規則呢,對於我們程式中的文字區塊,資料區塊,棧,堆等在Linux中分別對應不同的虛擬位址,而且是固定的,對所有程式都一樣。這也就可以解釋為什麼不同的程式不同的變數有時候地址卻差不多,因為他們的虛擬位址都是從0x00000000---0xffffffff,因此當他們的變數都儲存在棧中時,對應的虛擬位址也很接近。

映射完之後,execve()調用啟動代碼,啟動代碼將調用main()函數,大家一定會想現在可執行目標不是還在磁碟上嗎?它是怎麼拷貝到記憶體上,然後被CPU執行的呢?確實如此,因此當啟動代碼將main()函數的虛擬位址傳遞給CPU時,CPU通過解析虛擬位址發現記憶體中沒有main()相對應的頁或者物理塊,然後CPU通過進程中的頁表項找到我們可執行檔所在的磁碟位置,將磁碟上的塊拷貝到記憶體中,這樣CPU就可以順利的執行我們的程式了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.