計(jì)算機(jī)系統(tǒng)漫游

1.1 信息=位+上下文

系統(tǒng)中的信息,都是由一串比特表示的。

區(qū)分不同數(shù)據(jù)對象的唯一方法是讀到這些數(shù)據(jù)的上下文。比如,一個(gè)同樣的字節(jié)序列可能表示的是一個(gè)整數(shù)、浮點(diǎn)數(shù)字符串或機(jī)器指令。

1.2 程序被其他程序翻譯成不同的格式

說的是一個(gè)編譯系統(tǒng)的構(gòu)成。

Hello.c -> 1. 預(yù)處理器 -> hello.i -> 2.編譯器 -> hello.s -> 3. 匯編器 -> hello.o -> 4. 鏈接器 -> hello

  1. 讀取系統(tǒng)頭文件的內(nèi)容,直接插入到程序文本中
  2. 將文本文件hello.i 翻譯成匯編語言程序的文件hello.s
  3. 將hello.s 翻譯成機(jī)器語言指令,將指令打包成可重定位目標(biāo)的格式,保存到hello.o中
  4. 鏈接器負(fù)責(zé)處理標(biāo)準(zhǔn)預(yù)編譯好的文件合并到hello.o中。(如在程序中調(diào)用C庫中的printf函數(shù))

1.3 了解編譯系統(tǒng)如何工作的益處

  • 優(yōu)化程序性能
  • 理解鏈接時(shí)出現(xiàn)的錯(cuò)誤
  • 避免安全漏洞

1.4 處理器讀并解析內(nèi)存中的指令

一. 系統(tǒng)硬件組成

  1. 總線
    • 貫穿整個(gè)系統(tǒng)的一組電子管道。
    • 被設(shè)計(jì)成傳送定長的字節(jié)塊,字節(jié)塊=字。
    • 字長通常是4個(gè)字節(jié)(32位),或者8個(gè)字節(jié)(64位)
  2. I/O設(shè)備
    • 鍵盤、鼠標(biāo)、顯示器、磁盤驅(qū)動(dòng)等都是IO設(shè)備
    • 每個(gè)IO設(shè)備通過一個(gè)控制器或適配器和IO總線相連??刂破魇荌O設(shè)備本身或系統(tǒng)的主印刷電路板(即主板)上的芯片組。適配器是一塊插在主板插槽上的卡。
  3. 主存
    • 物理上,主存由一組動(dòng)態(tài)隨機(jī)存取存儲器(DRAM)芯片組成。邏輯上,是一個(gè)線性字節(jié)數(shù)組,每個(gè)字節(jié)都有唯一地址(數(shù)組索引),地址從0開始 。
    • 每條機(jī)器指令由不同數(shù)量的字節(jié)組成,如Linux x86-64機(jī)器上,short類型 2字節(jié),int float 4字節(jié),long double 8字節(jié)
  4. 處理器
    • 中央處理單元(CPU),解釋或執(zhí)行存儲在主存中指令的引擎。
    • 程序計(jì)數(shù)器(PC),大小只有一個(gè)字,任何時(shí)刻都指向主存中的某條機(jī)器語言指令。(即含有該條指令的地址)
    • 寄存器文件(Register file),一個(gè)小的存儲設(shè)備,由一些單個(gè)字長的寄存器組成。
    • 算術(shù)/邏輯單元(ALU),計(jì)算新的數(shù)據(jù)和地址值。
    • 指令集架構(gòu)描述的是每條機(jī)器代碼指令的效果,微體系架構(gòu)描述的是處理器實(shí)際上如何實(shí)現(xiàn)。

二. 存儲器層次結(jié)構(gòu)

image

上一層的存儲器作為第一層存儲器的高速緩存。

三、操作系統(tǒng)管理硬件

  • 兩個(gè)基本功能:
    • 防止硬件被失控的應(yīng)用程序?yàn)E用。
    • 向應(yīng)用程序提供簡單一致的機(jī)制來控制復(fù)雜而又通常大不相同的低級硬件設(shè)備。
  • 通過幾個(gè)抽象概念來實(shí)現(xiàn)上述兩個(gè)功能:
    • 文件是對IO設(shè)備的抽象表示
    • 虛擬內(nèi)存是對主存和磁盤IO設(shè)備的抽象表示
    • 進(jìn)程是對處理器、主存和IO設(shè)備的抽象表示

1、進(jìn)程

  • 進(jìn)程是操作系統(tǒng)對一個(gè)正在運(yùn)行的程序的一種抽象。
  • 并發(fā)執(zhí)行,是指一個(gè)進(jìn)程的指令和另一個(gè)進(jìn)程的指令交錯(cuò)執(zhí)行。實(shí)現(xiàn)這種交錯(cuò)執(zhí)行的機(jī)制稱為上下文切換。
  • 上下文是指操作系統(tǒng)保持跟蹤進(jìn)程運(yùn)行所需的所有狀態(tài)信息。
  • 內(nèi)核管理著進(jìn)程之間的轉(zhuǎn)換,內(nèi)核是操作系統(tǒng)代碼常駐主存的部分,它不是一個(gè)獨(dú)立進(jìn)程,它是系統(tǒng)管理全部進(jìn)程所用代碼和數(shù)據(jù)結(jié)構(gòu)的集合。

2、線程

  • 一個(gè)進(jìn)程實(shí)際上由多個(gè)線程組成
  • 每個(gè)線程運(yùn)行在進(jìn)程的上下文中,共享同樣的代碼和全局?jǐn)?shù)據(jù)

3、虛擬內(nèi)存

  • 為每個(gè)進(jìn)程提供了一個(gè)假象,每個(gè)進(jìn)程都在獨(dú)占地使用主存,每個(gè)進(jìn)程看到的內(nèi)存都是一致的,稱為虛擬地址空間。

  • 進(jìn)程虛擬地址空間如圖:

image
  • 地址空間最上面的區(qū)域是保留給操作系統(tǒng)中代碼和數(shù)據(jù)的
  • 底部區(qū)域存放用戶進(jìn)程定義的代碼和數(shù)據(jù)
  • 地址是從下往上增大的

從低的區(qū)開始:

  • 程序代碼和數(shù)據(jù)

    代碼和數(shù)據(jù)區(qū)直接按照可執(zhí)行目標(biāo)文件的內(nèi)容進(jìn)行初始化。在進(jìn)程一開始運(yùn)行時(shí)就被指定了大小。

  • 可以在運(yùn)行時(shí)動(dòng)態(tài)地?cái)U(kuò)展和收縮(malloc 和free)

  • 共享庫

    在地址空間中部存放C標(biāo)準(zhǔn)庫和數(shù)學(xué)庫這樣的代碼和數(shù)據(jù)區(qū)域

  • 位于虛擬空間頂部,在調(diào)用一個(gè)函數(shù)時(shí),棧會增長,從一個(gè)函數(shù)返回時(shí),棧會收縮

  • 內(nèi)核虛擬內(nèi)存

    位于地址空間頂部,不允許應(yīng)用程序讀寫這個(gè)區(qū)域的內(nèi)容或者直接調(diào)用內(nèi)核代碼定義的函數(shù),程序要調(diào)用內(nèi)核來執(zhí)行這些操作。

  • 虛擬內(nèi)存的基本思想是把一個(gè)進(jìn)程虛擬內(nèi)存的內(nèi)容存儲在磁盤上,然后用主存作為磁盤的高速緩存。

4、文件

  • 文件是字節(jié)序列,每個(gè)IO設(shè)備都可以看成是文件
  • 所有輸入輸出都是通過使用一小組稱為Unix I/O的系統(tǒng)函數(shù)調(diào)用讀寫文件來實(shí)現(xiàn)的。

四、系統(tǒng)間的網(wǎng)絡(luò)通信

  • 網(wǎng)絡(luò)可視為一個(gè)IO設(shè)備。一個(gè)網(wǎng)絡(luò)通信的例子如圖:

    image

五、重要主題

1、Amdahl定律

  • 主要思想:當(dāng)對系統(tǒng)的某個(gè)部分加速時(shí),對系統(tǒng)整體性能的影響取決于該部分的重要性和加速程度。

    image
  • 當(dāng)k趨于無窮時(shí),可選取系統(tǒng)的某一部分將其加速到某個(gè)點(diǎn),在這個(gè)點(diǎn)上,該部分花費(fèi)的時(shí)間可忽略不計(jì)。則此時(shí)

    S = 1/(1-alpha)
    

    Amdahl定律描述了改善任何過程的一般原則

2、并發(fā)和并行

  • 并發(fā)指一個(gè)同時(shí)具有多個(gè)活動(dòng)的系統(tǒng),并行指用并發(fā)使一個(gè)系統(tǒng)運(yùn)行得更快

  • 線程級并發(fā)

    • 一個(gè)處理器在多任務(wù)間切換,這種配置稱為單處理器系統(tǒng)

    • 由單操作系統(tǒng)內(nèi)核控制的多處理器組成的系統(tǒng),稱為多處理器系統(tǒng)。多核處理器將多個(gè)CPU(稱為核)集成到一個(gè)集成電路芯片

      多核處理器的組織結(jié)構(gòu)

      image
    • 超線程,即 同時(shí)多線程,允許一個(gè)CPU執(zhí)行多個(gè)控制流,涉及CPU某些硬件有多個(gè)備份,如程序計(jì)數(shù)器和寄存器文件,而其他硬件部分只有一份。超線程處理器可以在一個(gè)時(shí)鐘周期的基礎(chǔ)上決定執(zhí)行哪個(gè)線程,使CPU能更好利用處理資源。

    • 多核處理器從兩方面提高系統(tǒng)性能:減少了在執(zhí)行多個(gè)任務(wù)時(shí)模擬并發(fā)的需要。可使程序運(yùn)行得更快。

  • 指令級并行

    • 可同時(shí)執(zhí)行多條指令的屬性稱為指令級并行
    • 處理器達(dá)到比一個(gè)周期一條指令更快的并行速率,稱為超標(biāo)量處理器。
  • 單指令、多數(shù)據(jù)并行

    • 允許一條指令產(chǎn)生多個(gè)可并行執(zhí)行的操作,稱為單指令、多數(shù)據(jù),即SIMD并行
    • 提供SIMD指令多是為了提高處理影像、聲音和視頻數(shù)據(jù)應(yīng)用的執(zhí)行速度。

3、計(jì)算機(jī)中的抽象

各種抽象:

  • 處理器中,指令集架構(gòu)提供了對實(shí)際處理器硬件的抽象。
  • 文件是對IO設(shè)備的抽象
  • 虛擬內(nèi)存是對程序存儲器的抽象
  • 進(jìn)程是對一個(gè)正在運(yùn)行程序的抽象
  • 虛擬機(jī)提供對整個(gè)計(jì)算機(jī)的抽象,包括操作系統(tǒng)、處理器和程序。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容