好書一起讀(82):電腦的原理

總覽

電腦看似復(fù)雜信认,其實(shí)硬件無(wú)非四種:CPU,內(nèi)存均抽,磁盤嫁赏,輸入輸出設(shè)備,重要性依次遞減到忽。硬件之上橄教,操作系統(tǒng)是一層,應(yīng)用程序又一層喘漏。

一通電护蝶,CPU就會(huì)開始運(yùn)行,從磁盤中將操作系統(tǒng)讀取到內(nèi)存中翩迈,CPU按時(shí)間順序從內(nèi)存中的操作系統(tǒng)里持灰,讀取指令執(zhí)行之。

操作系統(tǒng)使CPU迅速地在許多進(jìn)程中切換负饲,以造成進(jìn)程們?cè)诓l(fā)運(yùn)行的假象堤魁。

進(jìn)程的誕生是,將程序從磁盤載入內(nèi)存返十,并分配內(nèi)存空間用于儲(chǔ)存數(shù)據(jù)妥泉,這裝載程序的內(nèi)存和儲(chǔ)存數(shù)據(jù)的內(nèi)存構(gòu)成了進(jìn)程的載體,等分配了CPU洞坑,進(jìn)程即開始運(yùn)行盲链。

CPU的分配以優(yōu)先級(jí)和時(shí)間片為準(zhǔn),讓重要程度不同的各個(gè)進(jìn)程并發(fā)運(yùn)行迟杂。

用戶的操作通過(guò)輸入設(shè)備(或定時(shí)器)產(chǎn)生中斷刽沾,操作系統(tǒng)的主循環(huán)會(huì)發(fā)現(xiàn)中斷,并分配給適當(dāng)?shù)捻憫?yīng)中斷的程序排拷。

程序的執(zhí)行結(jié)果侧漓,體現(xiàn)在硬件的變化上,如輸出設(shè)備給出畫面或聲音监氢,讓用戶看到或聽到布蔗。

操作系統(tǒng)

操作系統(tǒng)位于「底層硬件」和「應(yīng)用程序」之間,向下管理硬件資源浪腐,向上提供高級(jí)接口何鸡。

在CPU的計(jì)算能力之上,操作系統(tǒng)提供了調(diào)度的能力牛欢,來(lái)運(yùn)行進(jìn)程骡男、顯示圖畫、響應(yīng)事件傍睹。

進(jìn)程

在物理實(shí)現(xiàn)上隔盛,每個(gè)進(jìn)程都是內(nèi)存中的一個(gè)局部犹菱,這個(gè)局部既放了程序代碼,又提供了儲(chǔ)存狀態(tài)的場(chǎng)所吮炕。

這些局部被CPU輪流訪問腊脱,形成并發(fā)的假象。這「輪流」并非讓各進(jìn)程盲目地平攤CPU時(shí)間龙亲,而是有主次之分陕凹。在CPU的輪流訪問期間,進(jìn)程也因而在創(chuàng)建鳄炉、就緒杜耙、運(yùn)行、阻塞拂盯、終止這五種狀態(tài)間切換佑女。

CPU的輪流訪問根據(jù)「優(yōu)先級(jí)」和「時(shí)間片」,優(yōu)先級(jí)是每個(gè)程序有的一個(gè)數(shù)字谈竿,數(shù)字大小關(guān)系決定了優(yōu)先級(jí)高低關(guān)系团驱,優(yōu)先級(jí)低的進(jìn)程要把CPU讓給優(yōu)先級(jí)高的朽们,時(shí)間片指一小段時(shí)間川慌,當(dāng)一個(gè)進(jìn)程用完一個(gè)時(shí)間片纱兑,CPU就重新選擇下個(gè)時(shí)間片該運(yùn)行誰(shuí)抑月。

因?yàn)镃PU的程序計(jì)數(shù)器和各種寄存器都只有一份,當(dāng)CPU切換到另一個(gè)進(jìn)程時(shí)挖帘,上一個(gè)進(jìn)程就需要把「我執(zhí)行到哪了」保存下來(lái)分尸,存到自己的「進(jìn)程上下文」中乍楚,下次CPU切換回來(lái)時(shí)两嘴,把狀態(tài)裝回給CPU,繼續(xù)運(yùn)行族壳,就好像什么都沒發(fā)生過(guò)憔辫。

在任務(wù)管理器里查看進(jìn)程列表,我們最關(guān)心的是內(nèi)存占用和CPU占用仿荆,正說(shuō)明了進(jìn)程是「內(nèi)存的片段」與「CPU的分配」的結(jié)合體贰您。

進(jìn)程可能是無(wú)限循環(huán),也可能不是拢操。如果不是锦亦,則處理完事務(wù)即停止,如果是令境,則不斷監(jiān)聽事件以響應(yīng)杠园。

內(nèi)存管理

如果內(nèi)存有限,程序需要的內(nèi)存超過(guò)實(shí)際內(nèi)存舔庶,則需要虛擬內(nèi)存:將磁盤的一部分用作「虛擬內(nèi)存」抛蚁,把內(nèi)存中暫時(shí)不執(zhí)行的程序外放到「虛擬內(nèi)存」中陈醒,騰出來(lái)地方來(lái)運(yùn)行需要執(zhí)行的程序,當(dāng)外放的程序需要執(zhí)行時(shí)再換回到內(nèi)存中瞧甩。

分給某個(gè)程序的內(nèi)存局部钉跷,在物理上未必是連續(xù)的,而是將真實(shí)內(nèi)存分為固定大小的頁(yè)肚逸,程序使用其中的若干頁(yè)爷辙。這樣能更靈活地使用。

文件

只有磁盤能斷電存儲(chǔ)朦促,CPU和內(nèi)存都不行膝晾,而且磁盤存儲(chǔ)空間遠(yuǎn)大于CPU和內(nèi)存,因此全部程序和數(shù)據(jù)都保存在磁盤上思灰。保存的方式就是文件玷犹。

文件的本質(zhì)是磁盤上的局部。磁盤分配方式與內(nèi)存類似洒疚,也是劃分為若干大小相等的小單元歹颓,文件按需使用其中一些小單元。

把磁盤看做輸入輸出設(shè)備也無(wú)妨油湖,畢竟它相對(duì)于CPU和內(nèi)存巍扛,是「外人」,內(nèi)存從磁盤讀乏德,屬于「輸入」撤奸,內(nèi)存向磁盤寫,屬于「輸出」喊括。

反過(guò)來(lái)胧瓜,把輸入輸出設(shè)備,看做文件郑什,也無(wú)妨府喳,反正內(nèi)存都是要向它們讀和寫的,只是看待它們的視角的差別蘑拯。

輸入輸出設(shè)備

電腦想有用钝满,就要跟用戶有交互,跟用戶的交互申窘,全靠輸入輸出設(shè)備弯蚜。用戶給電腦信息,就是輸入剃法,電腦給用戶信息碎捺,就是輸出。

你對(duì)顯示器、鍵盤牵寺、鼠標(biāo)悍引,肯定比對(duì)CPU、內(nèi)存帽氓、磁盤更熟悉趣斤,對(duì)吧?因?yàn)轱@示器它們是「在一線面向用戶」的黎休。

引申浓领,像計(jì)算機(jī)一樣高效地使用大腦

人在同一時(shí)間只能做一件事,一心多用都是偽并發(fā)势腮,切換上下文有成本联贩。

應(yīng)該把多而不重要的知識(shí)存到「磁盤」里,即筆記本捎拯、收藏夾等處泪幌,待用時(shí)方載入「內(nèi)存」即大腦里即可,以減輕記憶負(fù)擔(dān)署照。

最常用的知識(shí)才有必要記住在「內(nèi)存」里祸泪,這取用方便,減少每次都從「磁盤」載入的成本建芙,這是緩存的價(jià)值所在没隘。

寫在后面

這一個(gè)月每天都在讀《30天自制操作系統(tǒng)》,同時(shí)使用大學(xué)時(shí)教材《計(jì)算機(jī)組成原理》《計(jì)算機(jī)三級(jí)教程PC技術(shù)》《現(xiàn)代操作系統(tǒng)》做參考禁荸,來(lái)進(jìn)行對(duì)計(jì)算機(jī)底層硬件右蒲、操作系統(tǒng)的學(xué)習(xí)和鞏固。

作為應(yīng)用程序員赶熟,編寫的代碼都處于太高層瑰妄,以至于覺得技術(shù)含量太差,久了對(duì)自己就不滿意映砖。一直都想好好復(fù)習(xí)下基礎(chǔ)间坐,但總因辛苦而堅(jiān)持不下來(lái)。

后來(lái)終于想明白啊央,基礎(chǔ)的鞏固和復(fù)習(xí)眶诈,應(yīng)該是一個(gè)非常長(zhǎng)期的工作涨醋,一蹴而就的想法非常不現(xiàn)實(shí)瓜饥。于是決定用四個(gè)月時(shí)間,分別鞏固計(jì)算機(jī)組成原理浴骂、操作系統(tǒng)乓土、網(wǎng)絡(luò)、算法的知識(shí)。這第一個(gè)月趣苏,做的是學(xué)習(xí)計(jì)算機(jī)組成原理的工作狡相,還順帶看了操作系統(tǒng)。

機(jī)箱一拆開食磕,電路板和連線怪復(fù)雜神秘的尽棕,嚇人,其實(shí)那都不重要彬伦。最重要的三樣?xùn)|西滔悉,CPU,內(nèi)存单绑,磁盤回官,體積都有限,形狀也規(guī)整搂橙,第四重要的就是機(jī)箱外面的顯示器歉提、鍵盤、鼠標(biāo)這些總稱為輸入輸出設(shè)備的東西了区转。

CPU是「原動(dòng)力」苔巨,就像四驅(qū)車上的電機(jī),嗚嗚轉(zhuǎn)著蜗帜,很蠢很機(jī)械恋拷。但能動(dòng)起來(lái)就是萬(wàn)歲。人們開動(dòng)腦筋厅缺,通過(guò)齒輪蔬顾、皮帶等零件,讓電機(jī)旋轉(zhuǎn)的單調(diào)動(dòng)作轉(zhuǎn)為更有意義的動(dòng)作湘捎。對(duì)CPU也是一樣诀豁,既然它能讀取指令,并忠實(shí)地執(zhí)行之窥妇,那就好辦了舷胜,只要我們把指令寫出花來(lái),電腦的功能就會(huì)豐富錦簇活翩。就像劉邦和張良烹骨,既然張良說(shuō)什么劉邦都言聽計(jì)從,那雖然劉邦能力有限材泄,但只要張良智計(jì)百出沮焕,一切就都有可能了。

當(dāng)然拉宗,在地位上峦树,張良是劉邦的下級(jí)辣辫。在計(jì)算機(jī)體系中,操作系統(tǒng)是硬件的上層魁巩,其實(shí)計(jì)算機(jī)體系里急灭,越上層權(quán)限越小,上層能做的谷遂,下層全能做葬馋,下層能做的,上層能不能做肾扰?那要看下層高不高興暴露出調(diào)用的接口点楼。所以,最上層的應(yīng)用程序員白对,其實(shí)是被勒定在一個(gè)非常逼仄局促的空間里跳舞掠廓,在某個(gè)「平臺(tái)」之上,利用平臺(tái)好心提供的API甩恼,來(lái)使出渾身解數(shù)實(shí)現(xiàn)功能蟀瞧。API越簡(jiǎn)潔好用,應(yīng)用程序員越顯得無(wú)腦条摸,其實(shí)未必是程序員蠢悦污,而是飯已經(jīng)熟了,再巧的媳婦也只能做做把它盛到碗里這種沒有技術(shù)含量的工作钉蒲,這跟「巧婦難為無(wú)米之炊」恰好是反的切端,好比「一鍵刷機(jī)」,程序給力到這個(gè)程度顷啼,只負(fù)責(zé)按一下按鈕的人踏枣,即使有很高水平,也顯不出來(lái)了钙蒙。

不過(guò)茵瀑,越上層固然離硬件越遠(yuǎn),但抽象層次越高躬厌,離具體業(yè)務(wù)是越近的马昨。搭積木搭得好,未必就不如造積木造得好那個(gè)人光榮扛施。畢竟鸿捧,用戶要的,還是一個(gè)完成品疙渣,比如用戶要一個(gè)城堡匙奴,那光造出來(lái)積木還是不行,需要有人搭起來(lái)昌阿。這搭積木饥脑,就需要很多造積木的人用不到的知識(shí),例如空間想象力懦冰、圖紙繪制能力灶轰、讓城堡穩(wěn)固不倒的力學(xué)知識(shí)、色彩搭配知識(shí)等等刷钢。每個(gè)層次笋颤,都有每個(gè)層次需要的專業(yè)技能,但人的認(rèn)知總是有局限的内地,傾向重視自己的技能伴澄,輕視別人的技能,來(lái)達(dá)到滿意自己阱缓、鄙視他人的心理訴求非凌,其實(shí)這還是「成績(jī)單的思維」,是沒必要的荆针。

但有些知識(shí)是無(wú)論造積木敞嗡,還是搭積木的人都需要的,這就是所謂「通用知識(shí)」航背,例如數(shù)學(xué)知識(shí)喉悴、英語(yǔ)知識(shí)等等,當(dāng)然計(jì)算機(jī)基礎(chǔ)知識(shí)也是玖媚,這樣看來(lái)計(jì)算機(jī)考研的課程都很有意義箕肃,比想象中的合理多了。不過(guò)現(xiàn)在學(xué)習(xí)資源這么豐富今魔,書籍勺像、視頻、官網(wǎng)等等错森,即使不考研也可以自學(xué)咏删,差別還是在肯不肯用功上。

話題回到劉邦張良问词,力量當(dāng)然都在劉邦手上督函,但因?yàn)閯顚?duì)張良言聽計(jì)從,張良指哪里激挪,劉邦的力量就打向哪里辰狡,這跟力量都在張良手上也沒什么區(qū)別了。硬件和操作系統(tǒng)的關(guān)系也正像如此垄分,雖然操作系統(tǒng)是「被動(dòng)的」宛篇,只負(fù)責(zé)定義指令,執(zhí)行權(quán)在CPU手里薄湿,但CPU這么聽話叫倍,看成操作系統(tǒng)實(shí)際掌了權(quán)也就可以了:明明只有內(nèi)存偷卧、磁盤的「容器」,卻能無(wú)中生有地給抽象出「進(jìn)程」「地址空間」「文件」這些可用性極強(qiáng)的概念來(lái)吆倦,操作系統(tǒng)真是把CPU內(nèi)存和硬盤玩出了花來(lái)听诸。

不過(guò),同一份操作系統(tǒng)要賣給全世界蚕泽,全世界各種用戶需要的功能晌梨,這操作系統(tǒng)不可能全都包含了,所以操作系統(tǒng)索性也放權(quán)须妻,操作系統(tǒng)提供出來(lái)API仔蝌,世界各地程序員可以利用這API開發(fā)自己的程序,操作系統(tǒng)就負(fù)責(zé)把這些程序載入內(nèi)存里作為進(jìn)程來(lái)跑荒吏,當(dāng)用戶有操作時(shí)敛惊,操作系統(tǒng)負(fù)責(zé)把這操作事件交給適當(dāng)?shù)倪M(jìn)程來(lái)響應(yīng)。應(yīng)用程序員能立足的基本點(diǎn)绰更,其實(shí)就是操作系統(tǒng)提供的API們豆混,當(dāng)然,操作系統(tǒng)提供的API還是很豐富的动知,只要用好了各種程序都能開發(fā)出來(lái)皿伺,否則這操作系統(tǒng)也賣不出去呀。

對(duì)計(jì)算機(jī)的理解盒粮,最終就是到這里鸵鸥,CPU提供主循環(huán),操作系統(tǒng)在這主循環(huán)中運(yùn)行丹皱,提供次級(jí)主循環(huán)妒穴,應(yīng)用程序的進(jìn)程又在次級(jí)主循環(huán)中運(yùn)行,提供三級(jí)主循環(huán)摊崭,當(dāng)用戶有操作了讼油,CPU把操作交給操作系統(tǒng),操作系統(tǒng)再交給應(yīng)用程序進(jìn)程呢簸,應(yīng)用程序進(jìn)程的三級(jí)主循環(huán)得知了事件的到來(lái)矮台,再把它分發(fā)給響應(yīng)事件的函數(shù)來(lái)處理,這個(gè)函數(shù)來(lái)做具體該做的事根时,比如把數(shù)據(jù)寫向某個(gè)地方瘦赫,或者在界面上顯示某些東西,這顯示某些東西蛤迎,在本質(zhì)上确虱,其實(shí)也是向顯卡內(nèi)存中寫些東西。

計(jì)算機(jī)組成原理和操作系統(tǒng)的學(xué)習(xí)替裆,就先到這里(以后會(huì)慢慢修正和補(bǔ)充)校辩,下個(gè)月來(lái)復(fù)習(xí)數(shù)據(jù)結(jié)構(gòu)和算法的知識(shí)窘问,感覺還是這好玩,我都等不及了宜咒,至于計(jì)算機(jī)網(wǎng)絡(luò)惠赫,下下個(gè)月再學(xué),對(duì)這知識(shí)實(shí)在不很感興趣荧呐。那對(duì)算法感興趣的朋友,下個(gè)月咱們?cè)僖姟?/p>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末纸镊,一起剝皮案震驚了整個(gè)濱河市倍阐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌逗威,老刑警劉巖峰搪,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異凯旭,居然都是意外死亡概耻,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門罐呼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)鞠柄,“玉大人,你說(shuō)我怎么就攤上這事嫉柴⊙岫牛” “怎么了?”我有些...
    開封第一講書人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵计螺,是天一觀的道長(zhǎng)夯尽。 經(jīng)常有香客問我,道長(zhǎng)登馒,這世上最難降的妖魔是什么匙握? 我笑而不...
    開封第一講書人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮陈轿,結(jié)果婚禮上圈纺,老公的妹妹穿的比我還像新娘。我一直安慰自己麦射,他們只是感情好赠堵,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著法褥,像睡著了一般茫叭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上半等,一...
    開封第一講書人閱讀 52,268評(píng)論 1 309
  • 那天揍愁,我揣著相機(jī)與錄音呐萨,去河邊找鬼。 笑死莽囤,一個(gè)胖子當(dāng)著我的面吹牛谬擦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播朽缎,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼惨远,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了话肖?” 一聲冷哼從身側(cè)響起北秽,我...
    開封第一講書人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎最筒,沒想到半個(gè)月后贺氓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡床蜘,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年辙培,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片邢锯。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡扬蕊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出丹擎,到底是詐尸還是另有隱情厨相,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布鸥鹉,位于F島的核電站蛮穿,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏毁渗。R本人自食惡果不足惜践磅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望灸异。 院中可真熱鬧府适,春花似錦、人聲如沸肺樟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)么伯。三九已至疟暖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背俐巴。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工骨望, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人欣舵。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓擎鸠,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親缘圈。 傳聞我的和親對(duì)象是個(gè)殘疾皇子劣光,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容