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

操作系統是個大騙子?

系統 Linux
我們這些程序都安安靜靜地躺在硬盤的某個角落中,滿心期待地等待被主人使用,被操作系統裝載, 然后進入內存工作,確切地說: 被 CPU阿甘 執行。

[[204477]]

1.聊天

我們這些程序都安安靜靜地躺在硬盤的某個角落中,滿心期待地等待被主人使用,被操作系統裝載, 然后進入內存工作,確切地說: 被 CPU阿甘 執行。

進入內存是我們的使命, 如果只是在硬盤上呆著, 那我們就是一堆二進制的代碼而已,除了占用硬盤的空間,沒有什么作用。

但是主人似乎特別鐘情于其中的幾個程序,像什么瀏覽器了、 QQ了、Word了、 播放器了, 80%以上的時間都耗在他們上面。

像我這樣的小工具calculator,默默無聞也無人問津, 除了躺在硬盤里睡大覺,就是和同一目錄下的helloworld聊天。

helloworld也很悲催,自從主人把它創建出來, 只運行過一次, 在屏幕上輸出一個 hello world ! 以后就再也沒人搭理了。

可是我更悲催, 連一次運行的機會都沒有, 我曾經好奇地問helloworld ,在內存中執行到底是什么感覺,這個糊涂蛋竟然說: 木有感覺,代碼很快就運行完了,我這個程序就退出了。

我不再理他,又去找同一目錄下的game老兄, 他多次進入內存運行,見多識廣。

沒想到他憤憤然地說: “我告訴你啊,你要想進入內存執行,必須得通過操作系統來裝載,但是操作系統他就是個大騙子!”

“為什么啊?”

“第一,他和CPU阿甘 狼狽為奸,營造了一個假象,讓我們以為每個程序都可以使用3G的巨大空間,但實際上那只是虛擬的! 我們使用的內存實際上少得可憐!”

(碼農翻身注: 這是個32位的Linux系統)

“第二,他不是把你這個程序一下子全部裝入物理內存,而是把你大卸八塊,用他的術語講,叫做頁面(page) ,然后分頁按需裝入內存, 注意,他不是連續裝入的,有時候先裝入這一塊,有時候先裝入那一塊, 最后你都不知道自己身體的各個部位在內存的什么地方,絕對是痛不欲生。 ”

“第三,你以為在運行時獨占CPU,別做夢了, 操作系統通過分配時間片的方式,讓我們這些程序,不,準確的來講是進程來輪轉執行,再加上一點進程調度的算法, 時不時地把你踢出CPU。 由于各個進程切換得非常快,給人類形成了一個假象,好像各個程序在同時執行一樣。 你說他是不是個大騙子? ”

game老兄說得義憤填膺, 我將信將疑,還是耐心蟄伏吧,等待運行的那一天。

2.裝載

偉大的一天終于來臨了。

主人在命令行窗口敲入了 calculator, 正在睡大覺的我立刻被裝載器(loader)喚醒, 他說他是操作系統派來的, 要幫我到內存去執行。

我滿心歡喜,等待裝載器把我裝入內存, 可是等了半天,什么也沒有發生, 我不由得問他: 哥們, 難道不是讓我進入內存運行嗎?

裝載器說: “急什么, 看你那沒見過世面的樣子, 不知道我正在為你創建虛擬地址空間嗎? ”

果然如此 ! 要給我建立一個虛擬的空間了 ,好吧,既來之則安之。

“你是不是忙著把我的代碼和數據都復制到這個虛擬地址空間中來啊?” 我故意問道。

“真夠無知的, 這是虛擬地址空間,不是實際內存, 怎么可能放代碼和數據?” 這個裝載器脾氣很大。

我以為這個裝載器至少會把我的代碼裝載到物理內存, 然后在虛擬內存和物理內存直接建立映射。于是耐心等待。

但是這個裝載器卻并沒有這么做, 實際上他除了讀取我的一些Header信息之外,根本沒有把我的數據Copy到物理內存去, 他到底要做什么?

我質問道: “你不把我的代碼裝載到物理內存中,我怎么運行? ”

他說: “放心吧,我已經用一個數據結構(頁表)把你的代碼/數據在硬盤的位置已經記錄下來了,等到真正運行的時候會被裝載的。”

說著他甩給我一張圖: “看到了頁表了嗎, 綠色的表示已經裝入內存, 黃色的表示還在磁盤上, 初始狀態下,全是黃色的, 就像你一樣。”

(注:為了簡化, 此圖沒有反映段頁結合的情況)

這個大脾氣的裝載器把活干完了 , 大大咧咧地從我的代碼中找到了程序的入口點地址 (假設是0x080480c0), 他說等到進程執行的時候就從這里開始,讀取第一條指令。

3.運行

我意識到自己雖然還躺在硬盤里, 但是操作系統老大已經為我建立了一個進程了, 這個進程有一套自己的虛擬地址,頁表等“高級”的數據結構, 已經準備好運行了。

果然, 不久以后, 操作系統調度了這個進程來運行,就從裝載器返回的程序入口點0x080480c0開始。

老大命名CPU阿甘去0x080480c0處取出指令來執行, 但這是一個虛擬地址,必須轉化成物理地址才行。

于是阿甘就去查看頁表,試圖把它變成物理內存的地址, 可是這個頁表指向的是硬盤中的地址, 阿甘立刻報告: “老大,這是個新家伙,它的代碼還在硬盤上呢!”

“好的,馬上啟動缺頁處理程序! ” 看來老大已經司空見慣了。

缺頁處理程序開始執行, 根據頁表中的地址又在硬盤中找到了我, 我配合著讓他把代碼取走。

人生的第一次, 我的代碼終于被讀入了內存當中,當然,阿甘也得把頁表給修改一下,這樣才能反映已經數據已經進入內存了:

現在可以讀取虛擬地址0x080480c0處的內容了, 通過頁表的翻譯,定位到了物理內存的地址,取出了指令,終于可以執行了 !

隨著指令的執行,越來越多的數據和代碼被裝載到物理內存,果然如game老兄所言,我被大卸八塊安插到物理內存的不同位置去了。

但是game老兄說的也不對,那其實并不是我,只是我的一個化身而已。這個化身是一個正在運行的進程,CPU阿甘不停地讀數據、寫數據。 時間片到了,就把這個進程給掛起,過一會兒再運行。

最后,進程結束,內存中的數據會被清理、覆蓋,但是我還是我,玩好無損地躺在硬盤上。

經歷了這一次的運行,我算是明白了,操作系統確實是個大騙子,但是他其實也很不容易,資源很有限, 內存就那么大,CPU阿甘只有一個,程序又那么多, 為了讓更多的程序運行,更有效地利用內存和CPU, 也只能施展一點騙術了。

【本文為51CTO專欄作者“劉欣”的原創稿件,轉載請通過作者微信公眾號coderising獲取授權】

戳這里,看該作者更多好文

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2020-04-28 10:39:24

操作系統CPU硬盤

2021-04-19 11:23:29

操作系統計算機DOS

2010-03-02 09:54:16

2009-12-09 17:25:19

Linux操作系統

2013-09-16 15:15:44

Linux操作系統

2009-07-10 09:40:16

Google操作系統Chrome市場

2025-06-09 08:56:00

2019-01-23 17:25:51

操作系統Windows移動

2022-11-01 11:22:38

2009-08-28 10:43:38

2010-04-15 14:40:26

Unix操作系統

2024-05-06 09:08:52

微軟開源Linux

2011-04-13 17:31:33

2010-04-29 14:08:38

Unix操作系統

2021-11-15 06:56:46

操作系統U盤

2022-02-24 08:30:24

操作系統CPU程序

2014-09-02 11:43:42

國產操作系統

2013-01-15 15:23:22

安卓微軟

2020-12-29 16:39:01

Linux代碼命令

2009-07-23 18:43:25

操作系統LinuxWindows
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 人人看人人搞 | 日本一二三区在线观看 | 国产在线一区观看 | av网站免费在线观看 | www.4hu影院 | 一区二区在线免费观看视频 | 91国内精品 | 久久中文免费视频 | 国产精品乱码一区二区三区 | 国产在线1 | 久久99国产精一区二区三区 | 国产免费一区二区三区 | 精品少妇一区二区三区日产乱码 | 久久网国产 | 欧美成人性生活 | 三级成人在线 | 91婷婷韩国欧美一区二区 | 精品国产一区探花在线观看 | av在线播放一区二区 | 久久99精品久久久久 | 99久久精品国产一区二区三区 | 免费成人在线网 | 日本不卡高清视频 | 韩国久久| 日韩精品一区二区三区老鸭窝 | 国产日韩欧美一区二区 | 黄色免费观看网站 | 97精品国产97久久久久久免费 | 久久一二 | 在线观看免费黄色片 | 一区二区精品视频 | 精品一区二区三区四区 | 欧美精品一区二区三区视频 | 欧美日韩在线一区二区 | 久久33| 色五月激情五月 | 欧美一级黄带 | 九九亚洲 | 天天看天天操 | 免费在线观看h片 | 波多野结衣一区二区三区在线观看 |