0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

你被操作系統(tǒng)欺騙了嗎?

Linux閱碼場 ? 來源:未知 ? 作者:伍文輝 ? 2018-05-20 09:28 ? 次閱讀

1聊天

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

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

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

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

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

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

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

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

“為什么?。俊?/p>

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

(碼農(nóng)翻身注: 這是個32位的Linux系統(tǒng))

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

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

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

2裝載

偉大的一天終于來臨了。

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

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

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

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

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

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

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

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

我質(zhì)問道: “你不把我的代碼裝載到物理內(nèi)存中,我怎么運行? ”

他說: “放心吧,我已經(jīng)用一個數(shù)據(jù)結(jié)構(gòu)(頁表)把你的代碼/數(shù)據(jù)在硬盤的位置已經(jīng)記錄下來了,等到真正運行的時候會被裝載的?!?/p>

說著他甩給我一張圖: “看到了頁表了嗎, 綠色的表示已經(jīng)裝入內(nèi)存, 黃色的表示還在磁盤上, 初始狀態(tài)下,全是黃色的, 就像你一樣?!?/p>

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

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

3運行

我意識到自己雖然還躺在硬盤里, 但是操作系統(tǒng)老大已經(jīng)為我建立了一個進程了, 這個進程有一套自己的虛擬地址,頁表等“高級”的數(shù)據(jù)結(jié)構(gòu), 已經(jīng)準(zhǔn)備好運行了。

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

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

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

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

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

人生的第一次, 我的代碼終于被讀入了內(nèi)存當(dāng)中,當(dāng)然,阿甘也得把頁表給修改一下,這樣才能反映已經(jīng)數(shù)據(jù)已經(jīng)進入內(nèi)存了:

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

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

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

最后,進程結(jié)束,內(nèi)存中的數(shù)據(jù)會被清理、覆蓋,但是我還是我,玩好無損地躺在硬盤上。

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10698

    瀏覽量

    209327
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    6545

    瀏覽量

    122730
  • helloworld
    +關(guān)注

    關(guān)注

    0

    文章

    13

    瀏覽量

    4345

原文標(biāo)題:操作系統(tǒng)是個大騙子?

文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    實時操作系統(tǒng)和分時操作系統(tǒng)的區(qū)別

    操作系統(tǒng)能否滿足實時性要求來區(qū)分,可把操作系統(tǒng)分成分時操作系統(tǒng)和實時操作系統(tǒng),分時操作系統(tǒng)按照相等的時間片調(diào)度進程輪流運行,分時操作系統(tǒng)
    發(fā)表于 11-14 17:39 ?1.3w次閱讀

    設(shè)計者更喜歡什么操作系統(tǒng)

    設(shè)計)第一線,這個話題就對很重要了。在操作系統(tǒng)領(lǐng)域,有三種系統(tǒng)是應(yīng)用的比較多的:Windows系統(tǒng)、Mac OS X系統(tǒng)以及各種Linux
    發(fā)表于 05-03 11:48

    當(dāng)操作系統(tǒng)調(diào)用時,操作系統(tǒng)會做什么?

    1.當(dāng)操作系統(tǒng)調(diào)用時,操作系統(tǒng)會做什么?2.如果我想通過FIFO把數(shù)據(jù)傳輸?shù)酵鈬O(shè)備,如果操作系統(tǒng)將參加?哪個例子介紹這個函數(shù)? 以上來自于百度翻譯 以下為原文1.when the
    發(fā)表于 06-03 11:03

    操作系統(tǒng)的重要性如何?

    文末領(lǐng)取大圖。這不是一篇教你如何創(chuàng)建一個操作系統(tǒng)的文章,相反,這是一篇指導(dǎo)性文章,教你從幾個方面來理解操作系統(tǒng)。首先需要知道為什么要看這篇文章以及為什么要學(xué)習(xí)
    發(fā)表于 07-23 08:26

    關(guān)于汽車操作系統(tǒng)的前世今生看完就懂了

    關(guān)于汽車操作系統(tǒng)的前世今生看完就懂了
    發(fā)表于 09-26 06:40

    操作系統(tǒng) ppt

    操作系統(tǒng)課件為PPT電子教案,內(nèi)容如下: 操作系統(tǒng)的基本概念操作系統(tǒng)的發(fā)展操作系統(tǒng)的主要特征操作系統(tǒng)的主要功能進程管理
    發(fā)表于 11-07 08:44 ?0次下載
    <b class='flag-5'>操作系統(tǒng)</b> ppt

    Linux操作系統(tǒng)原理及應(yīng)用

    Linux操作系統(tǒng)原理及應(yīng)用 1.1  操作系統(tǒng)的地位 1.2  操作系統(tǒng)的功能 1.3  操作系統(tǒng)的發(fā)展過程 1.4 
    發(fā)表于 04-28 14:53 ?0次下載

    RTOS操作系統(tǒng)

    RTOS操作系統(tǒng)RTOS操作系統(tǒng)RTOS操作系統(tǒng)RTOS操作系統(tǒng)RTOS操作系統(tǒng)
    發(fā)表于 12-28 15:30 ?0次下載

    基于網(wǎng)絡(luò)欺騙操作系統(tǒng)抗識別模型NDAF

    針對傳統(tǒng)主機操作系統(tǒng)抗識別技術(shù)整體防御能力不足的問題,提出一種基于網(wǎng)絡(luò)欺騙操作系統(tǒng)抗識別模型( NDAF)。首先,介紹模型的基本工作原理,由網(wǎng)絡(luò)內(nèi)的欺騙服務(wù)器制定
    發(fā)表于 12-21 10:17 ?0次下載
    基于網(wǎng)絡(luò)<b class='flag-5'>欺騙</b>的<b class='flag-5'>操作系統(tǒng)</b>抗識別模型NDAF

    華為自研操作系統(tǒng):鴻蒙系統(tǒng)期待嗎?

    操作系統(tǒng)長期安卓和iOS系統(tǒng)壟斷,其他的手機操作系統(tǒng)逐漸淘汰,微軟已經(jīng)正式宣布Windows phone
    的頭像 發(fā)表于 05-27 14:18 ?4641次閱讀
    華為自研<b class='flag-5'>操作系統(tǒng)</b>:鴻蒙<b class='flag-5'>系統(tǒng)</b><b class='flag-5'>你</b>期待嗎?

    鴻蒙與中興新支點操作系統(tǒng)是否有沖突

    鴻蒙來了,中興新支點操作系統(tǒng)了嗎
    的頭像 發(fā)表于 08-16 09:30 ?3498次閱讀

    實時操作系統(tǒng)和非實時操作系統(tǒng)的區(qū)別

    本文主要闡述了實時操作系統(tǒng)和非實時操作系統(tǒng)的區(qū)別。
    發(fā)表于 09-02 15:58 ?1.1w次閱讀

    關(guān)于鴻蒙操作系統(tǒng) 還有哪些疑問?

    關(guān)于鴻蒙操作系統(tǒng),是不是還有許多小疑問。
    的頭像 發(fā)表于 06-02 20:17 ?1633次閱讀

    知道操作系統(tǒng)是如何啟動起來的嗎

    操作系統(tǒng)被稱為“第一個程序”,the first programme,原因很簡單,只有當(dāng)操作系統(tǒng)啟動起來后才能運行我們編寫的程序,那么有沒有想過這個問題:操作系統(tǒng)是怎樣啟動起來的呢?
    的頭像 發(fā)表于 03-31 15:45 ?708次閱讀
    <b class='flag-5'>你</b>知道<b class='flag-5'>操作系統(tǒng)</b>是如何啟動起來的嗎

    聊聊操作系統(tǒng)

    說到操作系統(tǒng),大家都不會陌生。我們天天都在接觸操作系統(tǒng)——用臺式機或筆記本電腦,使用的是windows和macOS系統(tǒng);用手機、平板電腦,則是android(安卓)和iOS系統(tǒng)
    的頭像 發(fā)表于 05-12 11:13 ?1201次閱讀
    聊聊<b class='flag-5'>操作系統(tǒng)</b>