第1章 计算机系统漫游(深入理解计算机系统)
1.1 信息就是位+上下文
hello程序的聲明周期是從一個源程序開始的,即程序員利用編輯器創建并保存的文本文件,文件名是hello.c。源程序實際上就是一個由值0和1組成的位(bit)序列,每8個位被組成成一組,稱為字節。每個字節表示程序中的某個文本字符。
大部分的現在系統都使用ASCII標準來表示文本字符,這種方式就是用一個唯一的單字節大小的整數值來表示每個字符。hello.c以字節序列的方式存儲在文件中,每個字節都有一個整數值,而該整數值對應于某個字符。例如,整數值35對應于字符‘#’,105對應與字符‘i’。像hello.c這樣只由ASCII字符構成的文件稱為文本文件,所有其他文件都稱為二進制文件。
hello.c的表示方法說明一個:系統中所有的信息,包括磁盤文件、存儲器中的程序。存儲器中存放的用戶數據以及網絡上傳送的數據,都是由一串位表示的。區分不同數據對象唯一的方法是我們讀到這些數據對象時的上下文。
?
1.2 程序被其他程序翻譯成不同的格式
hello程序的聲明周期是從一個高級C語言程序開始的,為了在系統上運行,必須被其他程序轉化為一系列的低級機器語言指令,然后按照一種稱為可執行目標程序的格式打包好,并以二進制磁盤文件的形式存放起來。
在Unix系統上,從源文件到目標文件的轉發時由編譯器驅動程序完成的:
unix> gcc -o hello hello.cGCC編譯器驅動程序讀取源文件hello.c,并把它翻譯成一個可執行目標文件hello。這個翻譯的過程分為四個階段完成,如圖1-3所示。執行這四個階段的程序(預處理器、編譯器、匯編器、鏈接器)一起構成了編譯系統(compilation system)。
圖1-3 編譯系統
- 預處理階段。預處理器(cpp)根據以字符#開頭的命令,修改原始的C程序。比如hello.c中第1行#include <stdio.h>命令告訴預處理器讀取系統頭文件stdio.h的內容,并把它直接插入到程序文本中,結果就得到了另一個C程序,通常是以.i作為文件擴展名。
- 編譯階段。匯編器(ccl)將文本文件hello.i翻譯成文本文件hello.s,它包含一個匯編語言程序。匯編語言程序中的每一條語句都以一種標準的文本格式確切地描述了一條低級機器語言指令。
- 匯編階段。匯編器(as)將hello.s翻譯成機器語言指令,把這些指令打包成一種叫做可重定位目標文件(relocatable object program)的格式,并將結果保存在目標文件hello.o中。hello.o文件是一個二進制文件,它的字節編碼是機器語言指令而不是字符。如果在文本編輯器中打開將看到一堆亂碼。
- 鏈接階段。hello程序調用了printf函數,它是每個C編譯器都會提供的標準C庫中的一個函數。printf函數存在于一個名為printf.o的單獨的預編譯好了的目標文件中。而這個文件必須以某種方式合并到我們的hello.o程序中。鏈接器(ld)就負責執行處理這種合并。結果就得到hello文件,它是一個可執行目標文件,被加載到內存中,由系統執行。
?
1.4 處理器讀并解釋存儲在存儲器中的指令
hello.c源程序已經被編譯系統翻譯成了可執行目標文件hello,并存放在磁盤上。要想在Unix系統上運行該可執行文件,需要將它輸入到稱為外殼(shell)的應用程序中:
unix> ./hello hello, world unix>外殼是一個命令行解釋器,它輸出一個提示符,等待你輸入一個命令行,然后執行這個命令。如果該命令行的第一個單詞不是一個內置的外殼命令,那么外殼就會假設這是一個可執行文件的名字,它將加載并運行這個文件。
1.4.1 系統的硬件組成
如圖1-4所示,這張圖是Intel Pentium系統產品系列的模型。
?
? ? 1.總線
? ? ?貫穿整個系統的是一組電子管道,叫做總線,它攜帶信息字節并負責在各個部件間傳遞。通常總線被設計成傳送定長的字節塊,也就是字(word)。字中的字節數(即字長)是一個基本的系統參數,在各個系統中的情況都不盡相同。現在的大多數機器字長有的是4個字節(32位),有的是8個字節(64位)。
? ? 2.I/O設備
? ? ?輸入/輸出(I/O)設備是系統與外部世界的聯系通道。示例系統包括4個I/O設備:座位用戶輸入的鍵盤和鼠標,作為用戶輸出的顯示器,以及用于長期存儲數據和程序的磁盤驅動器。每個I/O設備都通過一個控制器或適配器與I/O總線相連。控制器和適配器之間的區別主要在于他們的封裝方式。控制器是置于I/O設備本身或者系統的主印制電路板(主板)上的芯片組,而適配器則是一塊插在主板插槽上的卡。
? ? 3.主存
? ? 主存是一個臨時存儲設備, 在處理器執行程序時,用來存放程序和程序處理的數據。
? ? 4.處理器
? ? 中央處理單元(CPU),簡稱處理器,是解釋(或執行)存儲在主存中指令的引擎。處理器的核心是一個字長的存儲設備(或寄存器),稱為程序計數器(PC)。在任何時刻,PC都指向主存中某條機器語言指令。?
1.7 操作系統管理硬件
?當外殼加載和運行hello程序,以及hello程序輸出自己的消息時,外殼和hello程序都沒有直接訪問鍵盤、顯示器、磁盤或者主存。取而代之的是,它們依靠操作系統提供的服務。我們把操作系統看成是應用和硬件之間插入的一層軟件,如圖1-10所示。所有應用程序對硬件的操作嘗試都必須通過操作系統。
操作系統有兩個基本的功能:1)防止硬件被失控的應用程序濫用。2)向應用程序提供簡單一致的機制來控制復雜而又通常大相徑庭的低級硬件設備。操作系統通過幾個基本的抽象概念(進程、虛擬存儲器和文件)來實現這兩個功能。如圖1-11所示,文件是對I/O設備的抽象表示,虛擬存儲器是對儲存和磁盤I/O設備的抽象表示,進程則是對處理器、主存和I/O設備的抽象表示。
虛擬機,提供對整個計算機(包括操作系統、處理器和程序)的抽象。
轉載于:https://www.cnblogs.com/cinvzi/p/9533097.html
總結
以上是生活随笔為你收集整理的第1章 计算机系统漫游(深入理解计算机系统)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DCL并非单例模式专用
- 下一篇: 如何升级到iOS 14.2 Beta 4