深入理解计算机系统学后感,深入理解计算机系统(读书笔记)
第一章計算機系統漫游
計算機系統是由硬件和系統軟件組成的,它們共同工作l來運行應用程序。
通過hello程序來了解,運行的時候程序會發生什么。
#include
int main()
{
printf("hello world\n");
return 0;
}
通過跟蹤hello程序的生命周期來開始對系統的學習--------從它被程序員創建開始,到在系統上運行,輸出簡單的消息,然后終止。
1.1 信息就是位 + 上下文
hello程序的生命周期是從一個源程序開始的,文件名是hello.c。源程序實際上j就是一個由值0和1組成的位(又稱為比特)序列,8個位被組織成一組,稱為字節。每個字節表示程序中的某些文本字符。hello.c實際上就是將文本字符使用ASCII,轉化為一個唯一的單字節大小的整數值,
1.2 程序被其他程序翻譯成不同的格式
在unix系統上,從源文件到目標文件的轉化是由編譯器驅動完成
gcc hello.c -o hello
從源程序文件hello.c翻譯成可執行目標文件hello,這個翻譯過程可分為四個階段完成,執行這四個階段的程序(預處理器,編譯器,匯編器,鏈接器)
(1)預處理階段:預處理器(cpp)根據以字符#開頭的命令,修改原始的c程序。就是將stdio.h里面的內容插入到原先的程序文本中,得到另一個c程序hello.i
(2)編譯階段:編譯器(ccl)將文本文件hello.i翻譯成文本文件hello.s,它包含一個匯編語言程序,該程序包含函數main的定義
(3)匯編階段:匯編器(as)將hello.s翻譯成機器語言指令,把這些指令打包成一種叫做可重定位m目標程序的格式,并將結果保存在目標文件hello.o中
(4)鏈接階段:鏈接器(ld)就是負責將hello程序中的庫函數文件以某種方式合并到我們的hello.o程序中。結果就得到了hello文件,它是一個可執行目標文件,可以被加載到內存中,由系統執行。
1.3 了解編譯系統如何工作是大有益處的
了解編譯系統如何工作的好處
(1)、優化程序性能:為了在c程序中做出好的編碼選擇,我們需要了解一些機器代碼以及編譯器將不同的c語句轉化機器代碼的方式。
(2)、理解鏈接時出現的錯誤
(3)、避免安全漏洞
1.4 處理器讀并解釋儲存在內存中的指令
1.4.1 系統硬件組成
下圖是一個典型系統的硬件組成
1、總線:貫穿整個系統的是一組電子管道,稱作總線,它攜帶信息并負責在各個部件間傳遞。通常總線被設計成傳送定長的字節塊,也就是字。字中的字節數(即字長)是一個基本的系統參數,各個系統都不盡相同。現在的大多數機器字長要么是4個字節,要么是8個字節。
2、I/O設備:I/O(輸入/輸出)設備是系統與外部世界的聯系通道。以上示例系統包括四個I/O設備:作為用戶輸入的鍵盤和鼠標,作為用戶輸出的顯示器,以及用于長期存儲數據和程序的磁盤驅動器。每個I/O設備都通過一個控制器和適配器與I/O總線相連,控制器和適配器之間的區別主要在于它們的封裝方式。
3、主存:主存是一個臨時存儲設備,在處理器執行程序時,用來存放程序和程序處理的數據。從物理上來說,主存是由一組動態隨機存取存儲器(DRAM)芯片組成的。
4、處理器:中央處理單元(CPU),簡稱處理器,是解釋(或執行)存儲在主存中的指令的引擎。處理器的核心是一個大小為一個字的存儲設備(或寄存器),稱為程序計數器(PC)。
1.4.2 運行hello程序
初始時,shell程序執行它的指令,等待我們輸入一個命令。當我們鍵盤上輸入字符串”./hello“后。shell程序將字符逐一讀入寄存器,再把它放到內存中。
1.5 高速緩存至關重要
Near_World
發布了7 篇原創文章 · 獲贊 2 · 訪問量 9743
私信
關注
標簽:計算機系統,字節,讀書筆記,系統,程序,編譯器,深入,處理器,hello
來源: https://blog.csdn.net/ppppphp/article/details/104142586
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的深入理解计算机系统学后感,深入理解计算机系统(读书笔记)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 是苹果最大的杀手锏是苹果最大的杀手锏吗
- 下一篇: 基于mui框架读取nfc数据_基于NFC