hello world的執(zhí)行
我們以linux系統(tǒng)為例,當(dāng)我們執(zhí)行一個(gè)簡單的打印字符串的C程序時(shí),我們需要在命令行輸入./hello以及回車去執(zhí)行該程序。在整個(gè)執(zhí)行過程中,計(jì)算機(jī)主要做了三件事,或者說經(jīng)歷了三個(gè)階段來完成程序的運(yùn)行。
一、linux的外殼掃描用戶輸入的字符
當(dāng)我們?cè)阪I盤輸入./hello時(shí),linux的外殼程序(也就是命令行)會(huì)掃描我們輸入的字符,將這些字符一一讀入到寄存器當(dāng)中,然后再一一放入主存。換句話說,./hello這幾個(gè)字符是經(jīng)過了CPU中的寄存器從而到達(dá)了主存。
二、加載hello文件的代碼以及數(shù)據(jù)到主存
這一過程的觸發(fā)是在我們按下回車的那一刻,此時(shí)系統(tǒng)會(huì)將存儲(chǔ)在磁盤上的hello文件加載到主存,而此過程會(huì)利用一種叫做存儲(chǔ)器存取的技術(shù),使得數(shù)據(jù)不通過寄存器直接到達(dá)主存。
三、根據(jù)主存中代碼的指令執(zhí)行程序
在代碼以及程序所需要的數(shù)據(jù)加載到主存后,CPU就開始從main函數(shù)的起始位置,依次執(zhí)行代碼中的指令。由于我們的代碼只是簡單的輸出“hello world”這樣的字符串,因此系統(tǒng)只是將這個(gè)字符串依次加載到寄存器,然后傳輸?shù)斤@示器終端顯示。
本章小結(jié)
本章只是簡單的介紹了一下hello程序的執(zhí)行過程,我們可以簡單的這么理解,hello程序的執(zhí)行,其實(shí)就是將數(shù)據(jù)和代碼加載到主存,并由CPU從主存獲取指令從而執(zhí)行的過程。