Linux系統學習筆記 執行程式

2021-06-17 23:55:33 字數 1750 閱讀 8658

linux系統學習筆記:執行程式

前面對linux系統的使用做了大體上的介紹。

從本篇開始,我們進入第二部分:linux系統中程式是如何執行的。

本篇先總體介紹一下相關的內容,接下來會詳細展開。

contents

在linux系統上,程式由編譯系統從原始檔轉化為可執行目標檔案。編譯系統包括四部分:預處理器、編譯器、彙編器和鏈結器。程式原始檔首先由預處理器( cpp )修改(輸出 .i 檔案),然後由編譯器( cc1 )翻譯成匯程式設計序( .s 檔案),接下來彙編器( as )將它翻譯打包為可重定位目標程式( .o 檔案),最後由鏈結器( ld )併入庫函式所在的預編譯目標檔案得到可執行檔案,後兩個檔案是二進位制的。

後面的討論基於gcc 4.4.5編譯環境。使用 gcc 的 -v

選項可以檢視程式編譯的整個過程。

在shell中執行可執行程式時,shell呼叫作業系統中的載入器函式,它複製可執行檔案中的**和資料到儲存器,然後將控制轉移到程式的開頭。

為了理解程式執行時計算機做了什麼,有必要了解一下計算機的硬體組成。下圖給出了計算機的乙個硬體組成抽象。

匯流排是貫穿整個系統的一組電子管道,它攜帶資訊位元組並負責在各部件之間傳遞,一般傳遞的資訊被設計成定長的位元組塊,稱為字(注意不是程式設計中的字的概念)。

i/o裝置是系統和外界聯絡的通道,圖上包括鍵盤、滑鼠、顯示器和磁碟。i/o裝置通過控制器(主機板上的晶元組)或介面卡(板卡)和i/o匯流排連線起來。

主儲存器在執行程式時用來存放程式和程式處理的資料,它是乙個臨時儲存裝置,由一組dram(動態隨機訪問儲存器)組成,物理上一般是記憶體。

處理器是解釋(執行)儲存在主存中指令的引擎。處理器的核心是程式計數器,它是個字長大小的儲存裝置。暫存器堆是個小儲存裝置,由一些字長大小的暫存器組成。alu計算新的資料和位址值。cpu執行的操作主要有:

執行程式時,典型地先從鍵盤輸入,到達暫存器堆,然後儲存在主存中;接下來利用dma技術(直接儲存器訪問技術)從磁碟將可執行檔案讀到主存中;最後主存中程式的輸出載入到暫存器,再傳送到顯示器上。

處理器和主存之間存在巨大的速度差距,為解決這一矛盾,在計算機中設計了快取記憶體儲存器l1和l2,它們是用一種sram(靜態隨機訪問儲存器)的技術實現的。暫存器是l1的快取記憶體,l1是l2的快取記憶體,l2是主存的快取記憶體,主存是磁碟的快取記憶體,磁碟可能還是一些網路儲存的快取記憶體。從暫存器到磁碟,儲存量更大、更便宜,但同時也更慢。

程式並不會直接訪問硬體,而依靠作業系統的服務。作業系統為應用程式提供了統一的介面,同時也防止了對硬體的濫用。

程序是作業系統對執行程式的一種抽象,作業系統儲存程序執行所需的狀態資訊,稱為上下文。系統上可以同時執行多個程序,稱為併發執行,實際上程序的指令是交錯執行的,即上下文切換。

現代系統中,程序由多個稱為執行緒的執行單元組成,執行緒執行在程序的上下文中,共享同樣的**和全域性資料。

虛擬儲存器是為每個程序提供的儲存的抽象,使每個程序看到的儲存器是一致的,稱為虛擬位址空間。基本思想是把程序的虛擬儲存器的內容儲存在磁碟上,然後用主存作為磁碟的快取記憶體。

檔案就是位元組序列,因此i/o裝置都可以看作檔案。檔案的概念使程式可以統一地對待系統中的各種i/o裝置。

Linux系統學習筆記 執行系統

有關linux的安裝可以參考以前寫過的archlinux和debian的安裝筆記。本篇主要介紹有關linux系統的引導和關機的知識。contents關機 引導就是啟動計算機。在啟動計算機時作業系統還不能夠使用,必須由引導程式將其啟動起來。在引導過程中,核心被載入到記憶體中並開始執行,進行各種初始化,...

linux 學習筆記 後台程序執行程式

if defined poe os family windows define pathseprator else define pathseprator endif inline string getprocessdir string strdir ifndef win32 可執行檔案所在目錄 i...

執行程式 Linux系統下執行c 程式

引言 為什麼要在linux下寫程式?分享資料報括 c c linux,nginx,zeromq,mysql,redis,fastdfs,mongodb,zk,流 cdn,p2p,k8s,docker,tcp ip,協程,dpdk等等。首先要問一下自己,為什麼要寫這個程式。如果我們寫乙個執行在wind...