成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

程序是怎么一步步運行起來的?

系統 其他OS
當操作系統決定把CPU分配給剛創建的程序時會用這個值去初始化CPU的指令寄存器,這樣CPU就知道該從哪里開始運行該程序了。

大家好,我是小風哥,今天聊聊程序是怎么一步步運行起來的。

第一步我們需要知道到底什么是可執行程序,所謂可執行程序就是一個保存一系列機器指令的文件:

圖片圖片

chrome.exe就是上千萬上億條指令組成的一個普通文件,和你寫的txt文件沒有任何本質的區別,只不過txt文件中的內容是給人看的,而可執行程序中的內容是給CPU執行的。

圖片圖片

現在有了可執行程序,接著我們來運行它,運行一個程序很簡單,雙擊圖標或者在命令行中運行命令:

圖片圖片

這一步發生了什么?

我們已經知道可執行程序其實就是一個文件,文件是保存在磁盤上的。

當我們雙擊或者在命令行中運行命令后,第一件事就要找到可執行文件保存在了磁盤的哪個位置:

圖片圖片

誰來完成這件事?答案就是操作系統。

實際上操作系統也是一個程序,操作系統是管理我們寫的程序的程序。

操作系統在文件系統的幫助下找到可執行程序,接下來操作系統開始解析可執行程序,實際上可執行程序中并不只包含機器指令,這里還有很多其它信息,在Linux下可執行程序一般遵循ELF文件格式:

圖片圖片

根據可執行程序的格式操作系統就能找到機器指令或程序運行依賴的全局變量等信息保存在了文件的哪個位置。

既然操作系統已經識別出了可執行程序,接下來就是重要的一步:加載,load。

所謂加載就是把磁盤上可執行程序中的指令和程序依賴的全局變量等數據copy到內存中:

圖片圖片

既然是copy到內存,那么顯然操作系統需要為接下來要運行的程序分配內存。

操作系統在內存中找到一段大小合適的空閑內存分配給接下來要運行的程序:

圖片圖片

然后在該內存中劃分出幾個區域,這幾個區域就是我們熟悉的代碼區、數據區、堆區和棧區:

圖片圖片


其中代碼區和數據區中的內容來自可執行程序的代碼段和數據段:

圖片圖片

而堆區和棧區則是程序在運行過程中使用的,這兩個區域中的內容不依賴可執行程序本身。

值得注意的是,所謂的堆區和棧區只是一個抽象的概念,真正的物理內存中并沒有一塊所謂的堆區或者棧區。

任何一段內存都可以被用作堆區或者棧區,這就像停車場有vip區或者普通區,所謂vip區只不過一種約定,普通區和vip區的停車位沒有任何本質的不同,作為停車場管理員只要你高興實際上可以把任何一塊普通區劃分為vip區。

當然,程序的內存區域中除了看到的這些區域可能還有其它區域,這取決于程序是否依賴動態庫。

如果該程序依賴動態庫,那么在程序運行時還需要把依賴的動態庫也加載進來,加載到哪里呢?

不要忘了堆區和棧區的增長方向是相反的,因此這中間的空閑區域正好可以利用起來存放動態庫:

圖片圖片

這一步完成之后程序就算加載完畢接下來可以運行了,但程序是怎么運行的呢?CPU怎么能知道該從哪里開始運行這個程序呢?

答案還得在可執行程序中尋找。

編譯器在編譯生成可執行程序時會記錄下這個程序第一條指令的所在位置,以elf可執行程序為例,使用readelf工具你可以查看elf可執行程序的內容:

圖片圖片

注意看Entry point address這一項,這就是該程序的第一條機器指令所在地址。

當操作系統決定把CPU分配給剛創建的程序時會用這個值去初始化CPU的指令寄存器,這樣CPU就知道該從哪里開始運行該程序了。

圖片圖片

就這樣程序開始運行。

這就是你雙擊一個圖標背后的故事。

責任編輯:武曉燕 來源: 碼農的荒島求生
相關推薦

2024-08-06 09:29:54

程序機器指令字符串

2024-09-12 10:04:06

內存程序系統

2024-09-30 09:56:59

2017-01-19 21:08:33

iOS路由構建

2018-07-13 15:36:52

2018-12-24 10:04:06

Docker存儲驅動

2019-03-05 14:09:27

Docker存儲容器

2019-07-09 15:23:22

Docker存儲驅動

2016-11-02 18:54:01

javascript

2017-12-25 11:50:57

LinuxArch Linux

2010-03-04 16:28:17

Android核心代碼

2024-11-11 10:28:33

操作系統Unix系統

2024-06-27 08:30:36

內存擴容堆區

2025-04-03 01:45:00

2025-03-28 09:39:15

CPU指令信號

2011-05-10 10:28:55

2018-04-23 14:23:12

2018-06-11 15:30:12

2019-04-01 10:15:02

2020-12-24 11:19:55

JavaMapHashMap
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品美女久久久久aⅴ国产馆 | 91精品国产一区二区 | 久久高清 | 午夜免费视频观看 | 91中文在线观看 | 国产成人99久久亚洲综合精品 | 亚洲毛片在线 | 在线观看成人小视频 | 日本亚洲精品 | 美女黄色在线观看 | 狠狠操狠狠搞 | 日日天天 | 久久久蜜臀国产一区二区 | 精品欧美在线观看 | 久久精品视频在线观看 | 欧美国产日本一区 | 99久久免费精品国产男女高不卡 | 一道本不卡视频 | 色婷婷av久久久久久久 | 视频一区在线播放 | 男人天堂99 | 开操网 | 欧美手机在线 | 嫩草视频在线 | 欧美xxxx色视频在线观看免费 | 亚洲精品久久久久中文字幕欢迎你 | 69性欧美高清影院 | 91欧美| 精品欧美一区二区三区免费观看 | 一级黄色毛片 | 色婷婷综合网 | 亚洲成人av| 在线一区视频 | 日日日操| 午夜午夜精品一区二区三区文 | 久久久黄色 | 免费亚洲成人 | 欧美一区二区网站 | 亚洲一区二区三区免费视频 | 亚洲福利视频网 | 天天爽综合网 |