深入理解計(jì)算機(jī)系統(tǒng)
原文地址:http://www.code-farmer.tech/archives/1562728171946
第一章:計(jì)算機(jī)系統(tǒng)漫游
計(jì)算機(jī)系統(tǒng)是由硬件和系統(tǒng)軟件組成的稽寒,它們共同工作來運(yùn)行應(yīng)用程序折汞。
1、信息就是位+上下文
? ? 1、位:
? ? ? ? 0和1組成的位锣吼,又稱為比特(bit)序列百框。源程序就是0和1組成的位序列筛欢。8個(gè)位被組織成一組贮缅,成為字節(jié)。每個(gè)字節(jié)表示程序中的某些文本字符百侧。
? ? ? ? 大部分的現(xiàn)代計(jì)算機(jī)系統(tǒng)都使用ASCII標(biāo)準(zhǔn)來表示文本字符砰识,這種方式實(shí)際上就是用唯一的單字節(jié)大小的整數(shù)值來表示每個(gè)字符。
? ? ? ? 只由ASCII字符構(gòu)成的文件稱為文本文件佣渴,所有其他文件都被稱為二進(jìn)制文件辫狼。
? ? ? ? 系統(tǒng)中所有的信息---包括磁盤文件、內(nèi)存中的程序辛润、內(nèi)存中存放的用戶數(shù)據(jù)以及網(wǎng)絡(luò)上傳送的數(shù)據(jù)膨处,都是由一串比特表示的。區(qū)分不同數(shù)據(jù)對(duì)象的唯一方法是我們讀到這些數(shù)據(jù)對(duì)象時(shí)的上下文。
? ? 2真椿、上下文:用于區(qū)分?jǐn)?shù)據(jù)不同對(duì)象的記錄鹃答。
? ? ? 在不同的上下文中,一個(gè)同樣的字節(jié)序列可能表示一個(gè)整數(shù)突硝、浮點(diǎn)數(shù)测摔、字符串或者機(jī)器指令。
2解恰、程序編譯
  程序編譯是將源程序轉(zhuǎn)化為一系列的低級(jí)機(jī)器語言指令锋八。指令集組成的文件也就是可執(zhí)行目標(biāo)文件。過程如下圖
3护盈、編譯系統(tǒng)的好處
? ? 1挟纱、優(yōu)化程序性能
? ? 2、理解鏈接時(shí)出現(xiàn)的錯(cuò)誤
? ? 3黄琼、避免安全漏洞
4、系統(tǒng)的運(yùn)行
?1整慎、計(jì)算機(jī)硬件的組成
? ? 1脏款、總線---貫穿整個(gè)系統(tǒng)的一組電子管道,稱作總線裤园。
? ? 2撤师、I/O設(shè)備---I/O設(shè)備是系統(tǒng)與外部世界的聯(lián)系通道。
? ? 3拧揽、主存---主存是一個(gè)臨時(shí)存儲(chǔ)設(shè)備剃盾,在處理器執(zhí)行程序時(shí),用來存放程序和程序處理的數(shù)據(jù)淤袜。
? ? 4痒谴、處理器---CPU,簡稱處理器铡羡,是解釋(或執(zhí)行)存儲(chǔ)在主存中指令的引擎积蔚。處理器的核心是一個(gè)大小為一個(gè)字的存儲(chǔ)設(shè)備(寄存器),稱為程序計(jì)數(shù)器(PC)烦周。
? ?2尽爆、運(yùn)行執(zhí)行程序
5、高速緩存
? ? ? ?隨著半導(dǎo)體的發(fā)展读慎,處理器與主存之間的差距越來越大漱贱,針對(duì)這種差異,系統(tǒng)設(shè)計(jì)者采用了更小更快的存儲(chǔ)設(shè)備夭委,稱為高速緩存存儲(chǔ)器(cache memory),作為暫時(shí)的集結(jié)區(qū)域幅狮,存放處理器近期可能會(huì)需要的信息。
6、存儲(chǔ)分層次結(jié)構(gòu)
? ? 每個(gè)計(jì)算機(jī)系統(tǒng)中的存儲(chǔ)設(shè)備都被組織成了一個(gè)存儲(chǔ)器層次結(jié)構(gòu)彪笼。設(shè)備的訪問速度越慢钻注、容量越大,并且每字節(jié)的造價(jià)也更便宜配猫。
7幅恋、操作系統(tǒng)管理硬件
? ? 操作系統(tǒng)有兩個(gè)基本功能:防止硬件被失控的程序?yàn)E用;向應(yīng)用程序提供簡單一致的機(jī)制來控制復(fù)雜而又通常大不相同的低級(jí)硬件設(shè)備泵肄。
? ? 1捆交、進(jìn)程--操作系統(tǒng)對(duì)一個(gè)正在運(yùn)行的的程序的一種抽象。
? ? ? ? ? ? 操作系統(tǒng)保持跟蹤進(jìn)程運(yùn)行所需的所有狀態(tài)信息腐巢,這種狀態(tài)品追,也就是上下文,包括許多信息冯丙,比如PC和寄存器文件的當(dāng)前值肉瓦,以及主存的內(nèi)容。
? ? ? ? ? ? 從一個(gè)進(jìn)程到另一個(gè)進(jìn)程的轉(zhuǎn)換是由操作系統(tǒng)內(nèi)核(kernel)管理的胃惜。
? ? 2泞莉、線程--操作系統(tǒng)調(diào)度的最小單元。
? ? ? ? 一個(gè)進(jìn)程實(shí)際上可以由多個(gè)稱為線程的執(zhí)行單元組成船殉,每個(gè)線程都運(yùn)行在進(jìn)程的上下文中鲫趁,并共享同樣地代碼和全局?jǐn)?shù)據(jù)。
? ? 3利虫、虛擬內(nèi)存--每個(gè)進(jìn)程都在獨(dú)占地使用主存挨厚。
? ? 每個(gè)進(jìn)程看到的內(nèi)存都是一致的,稱為虛擬地址空間糠惫。
? ? 程序代碼和數(shù)據(jù)--
? ? 堆--代碼和數(shù)據(jù)區(qū)后緊隨著的是運(yùn)行時(shí)堆疫剃。
? ? 共享庫--存放共享代碼和數(shù)據(jù)的區(qū)域。
? ? 棧--位于用戶虛擬地址空間頂部的是用戶棧硼讽,編譯器用它來實(shí)現(xiàn)函數(shù)調(diào)用慌申。
? ? 內(nèi)核虛擬內(nèi)存--地址空間頂部的區(qū)域是為內(nèi)核保留的
? ? 4、文件--文件就是字節(jié)序列理郑。
8蹄溉、系統(tǒng)之間的網(wǎng)絡(luò)通信
? ? ? 隨著Internet這樣的全球網(wǎng)絡(luò)的出現(xiàn),從一臺(tái)主機(jī)復(fù)制信息到另外一臺(tái)主機(jī)已經(jīng)成為計(jì)算機(jī)系統(tǒng)最重要的用途之一您炉。比如使用telnet的服務(wù)端和客戶端進(jìn)行交互柒爵。
9、一些重要概念和主題
? ? ? 1赚爵、Amdahl定律---當(dāng)我們對(duì)系統(tǒng)某個(gè)部分加速時(shí)棉胀,其對(duì)系統(tǒng)整體性能的影響取決于該部分的重要性和加速程度法瑟。
? ? ? 2、并發(fā)和并行
? ? ? ? 并發(fā)(concurrency)--指一個(gè)同時(shí)具有多個(gè)活動(dòng)的系統(tǒng)
? ? ? ? 并行(parallelism)--指的是用并發(fā)來使一個(gè)系統(tǒng)運(yùn)行得更快唁奢。
? ? ? ? 1霎挟、線程級(jí)并發(fā)
? ? ? ? ? 使用線程,能夠在一個(gè)進(jìn)程中執(zhí)行多個(gè)控制流麻掸。
? ? ? ? 2酥夭、指令級(jí)并行
? ? ? ? ? 在較低的抽象層次上,現(xiàn)代處理器可以同時(shí)執(zhí)行多條指令的屬性成為指令級(jí)并行脊奋。
? ? ? ? 3熬北、單指令、多數(shù)據(jù)并行
? ? ? ? ? 允許一條指令產(chǎn)生多個(gè)可以并行執(zhí)行的操作诚隙,這種方式成為單指令讶隐、多數(shù)據(jù)、即SIMD并行久又。
? ? 3巫延、一些重要抽象
? ? ? ? 抽象的使用計(jì)算機(jī)科學(xué)中最為重要的概念之一。
? ? ? ? 指令集架構(gòu)提供了對(duì)實(shí)際處理器硬件的抽象地消。
? ? ? ? 虛擬內(nèi)存是對(duì)程序存儲(chǔ)器的抽象炉峰,而進(jìn)程是對(duì)一個(gè)正在運(yùn)行得程序的抽象。
? ? ? ? 虛擬機(jī):他提供對(duì)整個(gè)計(jì)算機(jī)的抽象犯建,包括操作系統(tǒng)讲冠、處理器和程序瓜客。