一、計(jì)算機(jī)系統(tǒng)的回顧

指令集

存儲在CPU內(nèi)部早歇,對CPU運(yùn)算進(jìn)行指導(dǎo)和優(yōu)化的指令集合焰檩。擁有這些指令集憔涉,CPU就可以更高效地運(yùn)行。例如:x86指令集析苫。
計(jì)算機(jī)就是指揮機(jī)器工作的指示和命令兜叨,程序就是一系列按一定順序排列的指令,執(zhí)行程序的過程就是計(jì)算機(jī)的工作過程衩侥。一臺計(jì)算機(jī)中的所有指令的集合浪腐,稱作指令集。程序員用各種語言編寫的程序要翻譯(編譯或解釋)成以指令形式表示的機(jī)器語言之后顿乒,才能在計(jì)算機(jī)上運(yùn)行。計(jì)算機(jī)硬件完成各條指令所規(guī)定的操作泽谨,并保證按程序所規(guī)定的順序執(zhí)行指令璧榄,所以指令系統(tǒng)反映了計(jì)算機(jī)的基本功能特漩,是硬件設(shè)計(jì)人員和程序員都能見到的機(jī)器的主要屬性。

計(jì)算機(jī)硬件結(jié)構(gòu)

image.png

高速的北橋:速度非常高骨杂,主要負(fù)責(zé)CPU和內(nèi)存涂身、顯卡這些部件的數(shù)據(jù)傳送。現(xiàn)在有些主板已經(jīng)沒有北橋了搓蚪,因?yàn)樾酒瑥S商已經(jīng)把北橋所負(fù)責(zé)的功能直接集成到CPU中了蛤售。
低速的南橋:主要負(fù)責(zé)I/O設(shè)備、外部存儲設(shè)備以及BIOS之間的通信妒潭。
FSB總線:即前端總線(Front Side Bus)悴能,CPU和北橋之間的橋梁,CPU和北橋傳遞的所有數(shù)據(jù)必須經(jīng)過FSB總線雳灾,可以這么說FSB總線的頻率直接影響到CPU訪問內(nèi)存的速度漠酿。
PCI總線:PCI總線是一種高性能局部總線,其不受CPU限制谎亩,構(gòu)成了CPU和外設(shè)之間的高速通道炒嘲。比如現(xiàn)在的顯卡一般都是用的PCI插槽,PCI總線傳輸速度快匈庭,能夠很好地讓顯卡和CPU進(jìn)行數(shù)據(jù)交換夫凸。

SMP與多核

原因:在制造CPU的工藝方面已經(jīng)達(dá)到了物理極限,除非再有本質(zhì)的突破阱持,否則CPU的頻率會一直被目前4GHz的“天花板”限制夭拌。(主頻和實(shí)際的運(yùn)算速度存在一定的關(guān)系,但并不是一個(gè)簡單的線性關(guān)系紊选,但提高主頻對于提高CPU運(yùn)算速度至關(guān)重要啼止。)
SMP(Symmetrical Multi-Processing):對稱多處理器,簡單地講就是每個(gè)CPU在系統(tǒng)所處的地位和所發(fā)揮的功能都是一樣的兵罢,是相互對稱的献烦。理論上講,速度的提高與CPU的數(shù)量成正比卖词,但實(shí)際并非如此巩那,因?yàn)槲覀兊某绦虿⒉皇嵌寄芊纸獬扇舾蓚€(gè)完全不相干的子問題。當(dāng)然在同時(shí)處理大量請求的時(shí)候此蜈,像大型數(shù)據(jù)庫和網(wǎng)絡(luò)服務(wù)器上是很有用的即横。
多處理器:SMP的簡化版,共享比較昂貴的緩存部分裆赵,只保留多個(gè)核心东囚。

CPU、存儲器和I/O設(shè)備

不要讓CPU打盹

多道程序(Multiprogramming):當(dāng)某個(gè)程序暫時(shí)無需使用CPU時(shí)战授,監(jiān)控程序就把另外正在等待CPU資源的程序啟動页藻,使得CPU能夠充分地利用起來桨嫁。
缺點(diǎn):調(diào)度策略太粗糙,程序之間不分輕重緩急份帐。
分時(shí)系統(tǒng)(Time-Sharing System):每個(gè)程序運(yùn)行一段時(shí)間后都主動讓出CPU璃吧。
缺點(diǎn):任何一個(gè)程序死循環(huán)會導(dǎo)致系統(tǒng)死機(jī)。(這里存疑废境,可能是跑不到系統(tǒng)調(diào)用了)
多任務(wù)(Multi-tasking):操作系統(tǒng)接管所有硬件資源畜挨,并且本身處在一個(gè)受硬件保護(hù)的級別。所有的應(yīng)用程序都以進(jìn)程的方式運(yùn)行在比操作系統(tǒng)權(quán)限低的級別噩凹,每個(gè)進(jìn)程有自己獨(dú)立的地址空間巴元,相互隔離。CPU由操作系統(tǒng)一分配栓始,如果運(yùn)行超過了一定時(shí)間务冕,操作系統(tǒng)會停止該進(jìn)程,將CPU資源分配給其他進(jìn)程幻赚。如果分配的時(shí)間很短禀忆,就能快速地切換。目前幾乎所有的操作系統(tǒng)都采用這種方式落恼。

I/O設(shè)備

這里提一下文件系統(tǒng)箩退,文件系統(tǒng)管理著硬盤中文件的存儲方式。一個(gè)硬盤往往有多個(gè)盤面佳谦,盤面分兩面戴涝,每面安裝同心圓劃分為若干磁道。每個(gè)磁道劃分為多個(gè)扇區(qū)钻蔑,每個(gè)扇區(qū)一般為512字節(jié)啥刻。但是我們可以想象,同心圓的周長不一樣咪笑,如果每個(gè)磁道都擁有相同數(shù)量的扇區(qū)可帽,那么越外面就越稀,這樣浪費(fèi)空間窗怒;如果數(shù)量不一樣映跟,計(jì)算起來又十分麻煩。現(xiàn)在的硬盤使用一種叫LBA的方式解決以上問題扬虚,即整個(gè)硬盤中所有的扇區(qū)從0開始編號努隙,一直到最后一個(gè)扇區(qū),這個(gè)扇區(qū)編號叫邏輯扇區(qū)號辜昵。

內(nèi)存不夠怎么辦

早期的程序直接運(yùn)行在物理內(nèi)存上荸镊,除了物理內(nèi)存的大小限制以外,還有以下三個(gè)問題:

  1. 地址空間不隔離:程序直接訪問物理地址,所使用的內(nèi)存空間不是相互隔離的贷洲,可以修改到其他程序的數(shù)據(jù)收厨。
  2. 內(nèi)存使用效率低:多個(gè)程序一起運(yùn)行,內(nèi)存不足的時(shí)候要不停的換入換出大量數(shù)據(jù)优构。
  3. 程序運(yùn)行的地址不確定:程序每次裝入運(yùn)行時(shí),都需要分配一塊足夠大的空閑區(qū)域雁竞,區(qū)域位置不確定钦椭,給程序編寫造成了麻煩,這涉及到程序的重定位問題碑诉。
    解決的思路是增加中間層彪腔。計(jì)算機(jī)科學(xué)領(lǐng)域的任何問題都可以通過增加一個(gè)間接的中間層來解決,這就是虛擬地址的由來與用處进栽,通過虛擬地址映射到物理地址的過程德挣,達(dá)到了空間隔離的效果。

線程

線程是程序執(zhí)行流的最小單元快毛,多線程可以避免程序的卡頓格嗅。
線程可以訪問進(jìn)程內(nèi)存里的所有數(shù)據(jù),甚至包括別的線程的堆棧(知道堆棧地址)唠帝,它也有自己的私有存儲空間:

  • 棧(盡管可以被其他線程訪問屯掖,一般還是認(rèn)為是私有的)
  • 線程局部存儲(Thread Local Storage,TLS)襟衰,容量很小贴铜。
  • 寄存器,寄存器是執(zhí)行流的基本數(shù)據(jù)瀑晒,因此為線程私有绍坝。

信號量:初始值為N的信號量允許N個(gè)線程并發(fā)訪問,線程獲取信號量后苔悦,N減一轩褐,釋放N+1,如果信號量小于0间坐,獲取的線程線程進(jìn)入等待狀態(tài)灾挨,待其他線程釋放后再喚醒。
互斥量:和二元信號量類似(N=1)竹宋,不同的是劳澄,信號量可以被任意線程獲取和釋放,互斥量要求誰獲取蜈七,誰釋放秒拔。
臨界區(qū):與以上兩種的區(qū)別在于,臨界區(qū)的作用范圍僅限于本進(jìn)程飒硅,其他進(jìn)程無法獲取該鎖砂缩。
讀寫鎖:以上三種對于讀取頻繁作谚,偶爾寫入的情況比較低效,讀寫鎖可以避免這個(gè)問題庵芭。讀寫鎖有兩種獲取方式妹懒,共享和獨(dú)占。自由鎖可以被任意進(jìn)程任意方式獲取双吆,并置為對應(yīng)狀態(tài)眨唬;共享鎖能被任意進(jìn)程以共享方式獲取,但以獨(dú)占方式的話好乐,需要等待其他所有線程釋放匾竿;獨(dú)占鎖組織任何線程獲取。

過度優(yōu)化

  1. 編譯器為了提高速度蔚万,將變量緩存到寄存器而不寫回岭妖。
  2. 編譯器的動態(tài)調(diào)度,可能交換相鄰指令的執(zhí)行順序反璃。
  3. CPU的動態(tài)調(diào)度昵慌, 可能交換相鄰指令的執(zhí)行順序。

1和2可以通過volatile關(guān)鍵字阻止過度優(yōu)化版扩,3不存在平臺無關(guān)的指令废离,不同的CPU提供的指令名稱不同。

API的提供者是運(yùn)行庫礁芦,什么樣的運(yùn)行庫提供什么樣的API蜻韭,最常見的32位Windows提供的API叫Win32。

運(yùn)行庫使用操作系統(tǒng)提供的系統(tǒng)調(diào)用接口柿扣。

操作系統(tǒng)內(nèi)核層是硬件接口的使用者肖方,而硬件是接口的提供者。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末未状,一起剝皮案震驚了整個(gè)濱河市俯画,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌司草,老刑警劉巖艰垂,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異埋虹,居然都是意外死亡猜憎,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門搔课,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胰柑,“玉大人,你說我怎么就攤上這事〖硖郑” “怎么了崩瓤?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長踩官。 經(jīng)常有香客問我却桶,道長,這世上最難降的妖魔是什么蔗牡? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任肾扰,我火速辦了婚禮,結(jié)果婚禮上蛋逾,老公的妹妹穿的比我還像新娘。我一直安慰自己窗悯,他們只是感情好区匣,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蒋院,像睡著了一般亏钩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上欺旧,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天姑丑,我揣著相機(jī)與錄音,去河邊找鬼辞友。 笑死栅哀,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的称龙。 我是一名探鬼主播留拾,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼鲫尊!你這毒婦竟也來了痴柔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤疫向,失蹤者是張志新(化名)和其女友劉穎咳蔚,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體搔驼,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谈火,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了匙奴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片堆巧。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谍肤,到底是詐尸還是另有隱情啦租,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布荒揣,位于F島的核電站篷角,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏系任。R本人自食惡果不足惜恳蹲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望俩滥。 院中可真熱鬧嘉蕾,春花似錦、人聲如沸霜旧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽挂据。三九已至以清,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間崎逃,已是汗流浹背掷倔。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留个绍,地道東北人勒葱。 一個(gè)月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像障贸,于是被迫代替她去往敵國和親错森。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344

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