第一章 計算機系統漫遊

2022-09-14 07:39:07 字數 3976 閱讀 2131

1.1 資訊就是位+上下文

位的理解:源程式如hello.c,實際上是由值0和1組成的位,8個位組成一組,成為位元組,如00011000。每個位元組表示程式中的某些文字字元,每個位元組都有乙個整數值。如『\n』,它的整數值為10,即00001010。若檔案由有ascii字元構成,則稱之為文字檔案,所有其他檔案都稱為二進位制檔案。

系統中所有的資訊——包括磁碟檔案、記憶體中的程式、記憶體中存放的使用者資料以及網路上傳的資料,都是由一串位元表示的。上下文,可以理解為,乙個同樣的位元組序列,它可能表示乙個整數、浮點數、字串或者機器指令。

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

hello程式的生命週期是乙個高階c 語言程式開始的,為了執行該程式,每條c語句都必須被其他程式轉化成一系列的低階機器語言指令,然後這些指令按照一種稱為可執行目標程式的格式打好包,並以二進位制磁碟檔案的形式存放起來。

預處理階段:預處理器根據以字元#開頭的命令,修改原始的c程式。如#include命令告訴預處理器讀取系統標頭檔案stdio.h的內容,並把它直接插入程式文字中,這樣得到了hello.i檔案。

編譯階段:編譯器將hello.i檔案翻譯成hello.s檔案,它包含了乙個組合語言程式,每條語句都以一種文字格式描述了一條低階機器語言指令。

彙編階段:彙編器將hello.s翻譯成機器指令,將這些指令打包成一種叫做可重定位目標程式格式,並將結果儲存在hello.o中。

鏈結階段:hello程式中呼叫了prinf函式,prinf函式存在於乙個名為prinf.o的單獨的預編譯好了的目標檔案中,而這個檔案必須以某種方式合併到我們的hello.o程式中。鏈結器負責處理這種合併,結果就得到hello檔案,它是乙個可執行目標檔案。

1.3了解編譯系統如何工作是大有益處的

優化程式效能

理解鏈結時出現的錯誤 

避免安全漏洞

1.4 處理器讀並解釋儲存在記憶體中的指令

這個是指我們常用的執行命令的shell,hello程式被編譯成可執行目標檔案,shell載入並執行輸出hello程式它的訊息,然後等待下乙個命令列。

1.4.1 系統的硬體組成

匯流排:貫穿整個系統;

i/o裝置:輸入(鍵盤滑鼠等)、輸出(顯示器等)

主存:臨時儲存裝置,在處理器執行程式時,用來存放程式和程式處理的資料。物理上來說,主存是由一組動態隨機訪問儲存器dram晶元組成。

處理器:解釋或執行儲存在主存中指令的引擎,其核心為程式計數器pc,它每次都指向主存中的某條機器語言指令。處理器從程式計數器指向的記憶體出讀取指令,解釋指令中的位,執行該指令指示的簡單操作,然後更新pc,使其指向下一條指令,而這條指令並不一定和在記憶體中剛剛執行的指令相鄰。

cpu可能執行的操作:

載入:從主存複製乙個位元組或者乙個字到暫存器;

儲存:從暫存器複製乙個位元組或者乙個字到主存的某個位置;

操作:把兩個暫存器的內容複製到alu,alu對這兩個字做算術運算,並將結果存放到乙個暫存器中,以覆蓋該暫存器原來的內容。

跳**從指令本身中抽取乙個字,並將這個字複製到pc中,以覆蓋pc原來的值。

1.4.2 hello 程式執行

最初,hello程式放在磁碟上;

程式載入時,從磁碟複製到主存

處理器執行時,將位元組從主存複製到暫存器檔案,再從暫存器檔案複製到顯示裝置,最終顯示在螢幕上。

這種,開始時在磁碟,然後被複製到主存,最後從主存上覆制到顯示裝置,複製來複製去的 是不是額外的開銷,是不是可以提公升一下速度呢?(快取記憶體)

1.5快取記憶體至關重要

區域性性原理:快取記憶體裡存放可能經常訪問的資料,大部分的記憶體操作都能在快速的快取記憶體中完成。

結論:快取記憶體儲存器存在的應用程式設計師能夠利用快取記憶體將程式的效能提高乙個數量級

1.6儲存裝置形成層次結構

在處理器和乙個較大較慢的裝置(主存)之間插入乙個更小更快的儲存裝置(快取記憶體)的想法已經成為乙個普遍的觀念

1.7 作業系統管理硬體

執行hello程式都沒有直接訪問鍵盤啊 滑鼠顯示器這些的 它們依靠著作業系統提供服務

作業系統有兩個基本功能 一是防止硬體失控的應用程式濫用 二是 向應用程式提供簡單一致的機制來控制複雜又通常大不相同的低階硬體裝置

如圖,檔案是對io裝置的抽象,虛擬記憶體是對主存和磁碟i/o裝置的抽象表示,程序是對處理器、主存和i/o裝置的抽象表示;

1.7.1 程序

程序是作業系統對乙個正在執行的程式的一種抽象

上下文:作業系統保持跟蹤程序執行所需的所有狀態資訊,如pc,暫存器當前值,主存內容等;

上下文切換:儲存當前程序的上下文,恢復新程序的上下文;

從乙個程序到另乙個程序的轉換是由作業系統核心管理的。比如,讀檔案,應用程式會執行一條特殊的系統呼叫指令,將控制權傳遞給核心,然後核心執行被請求的操作並返回應用程式。

1.7.2 執行緒

執行緒:乙個程序可以由多個稱為執行緒的執行單元組成,每個執行緒都執行在程序的上下文中,並共享同樣的**和全域性資料。 多執行緒之間比多程序之間更容易共享資料,執行緒一般也比程序更高效。

1.7.3虛擬記憶體

程式**和資料:使用者程序定義的**資料;

堆:執行時堆;

共享庫:c標準庫;

棧:函式呼叫;

核心虛擬記憶體:為核心保留,不允許應用程式讀寫這個區域內容;

1.8 系統之間利用網路通訊

網路提供了計算機系統之間通訊的手段。從特殊系統的角度來看,網路就是一種i/o裝置。

本地主機上的telnet客戶端連線遠端主機上的telnet伺服器,具體過程如下:

1.9.1 amdahl定律:主要思想是當我們對系統的某個部分加速時,其對系統整體效能的影響取決於該部分的重要性和加速程度。

1.9.2 併發與並行:

併發指乙個同時具有多個活動的系統;並行指的是用併發來使乙個系統執行的更快。

1.9.3 計算機系統中抽象的重要性

1.10 小結

資訊就是位+上下文;

處理器讀並解釋儲存在記憶體中的指令;

儲存裝置層次結構:cpu暫存器在頂部,接著是多層的硬體快取記憶體儲存器,dram主存和磁碟儲存器;

作業系統核心三個基本抽象:檔案是對i/o裝置的抽象;虛擬記憶體是對主存和磁碟的抽象;程序是處理器、主存和i/o裝置的抽象;

網路提供了計算機系統之間通訊的手段。

第一章 計算機系統漫遊

一開始翻開書,大量的新概念,密集的知識,這不是讓人頭疼的主要原因。這本書於我而言,不僅僅是提公升計算機基礎那麼簡單,更多的是,放下那顆浮躁的心,同時接受自己的平凡,放慢腳步,腳踏實地。一開始連進製轉換都整不明白的我,經過乙個多月的 心靈洗禮 漸漸對書本上的概念有了那麼一點點感覺,更重要的是,沒有那麼...

第一章,計算機系統漫遊

1.1 資訊就是位 上下文 大部分的現在計算機系統都使用 ascii 標準來表示文字字元,hello.c程式是以位元組序列的方式儲存在檔案中的。系統中所有的資訊 包括磁碟檔案 記憶體中的程式 記憶體中存放的使用者資料以及網路上傳送的資料,都是由一串位元表示的。區分不同資料物件的唯一方法時我們讀到這些...

第一章 計算機系統漫遊

1.1 資訊就是位 上下文 include int main 大部分系統都是使用ascii碼表示文字字元,每個字元都是以單位元組的整數值表示,每個字是乙個整數值,如下圖所示為 的第一行。其他的所有檔案都稱為二進位制檔案。i nclu dedio.h 35105 11099 108117 100101...