第一章 電腦系統漫遊

來源:互聯網
上載者:User

標籤:unix   串連   原理   標準   整數   while迴圈   系統   位元組   晶片   

1.1 資訊就是位+上下文

include <stdio.h>int main(){    printf("hello,world\n");  }

 

這段C程式原始碼是以文字檔的形式儲存,名稱為hello.c。程式員利用編輯器編寫的原始碼都是文字檔。

大部分系統都是使用ASCII碼錶示文本字元,每個字元都是以單位元組的整數值表示,每個字是一個整數值,如所示為代碼的第一行。其他的所有檔案都稱為二進位檔案。

# i n c l u d e <space> < s t d i o . h >
35 105 110 99 108 117 100 101 32 60 115 116 100 105 111 46 104 62

 

 

 

系統中所有的資訊--磁碟檔案、儲存空間中的程式、儲存空間中的使用者資料、網路上的資料等,都是有一串位表示的。區分不同資料的唯一方法是這些資料的上下文。如果上下文表示了這個檔案是一個文字檔,那麼就如同,每個數字對應的是一個字元。如果是個二進位檔案,例如:映像、聲音、視頻、可執行檔檔案,那麼檔案中的數字都是代表其本身的意義。同一個數字,檔案類型的不同,代表意義就不同。

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

hello程式要被電腦執行,需要轉換成低級機器語言指令。低級機器語言指令由二進位的數構成。

從文字檔形式的原始碼轉化到機器能讀懂的二進位檔案是由編譯器完成。編譯器也是程式。編譯器轉化過程分為四個階段:

hello.c源檔案 -> 前置處理器:被修改的源檔案= hello.i(仍是文本)
hello.i -> 編譯器 = hello.s組譯工具(仍是文本)hello.s -> 彙編器 = hello.o (二進位)hello.o -> 連結器 = hello 可執行程式 (二進位)

一,預先處理階段:根據#include <stdio.h>命令 將讀取系統標頭檔stdio.h的內容,將其插入到hello.c檔案中,得到了hello.i檔案。(stdio.h也是C原始碼)

二,編譯階段: 將C語言原始碼翻譯成組合語言原始碼。組合語言屬於低級的機器語言指令。組合語言跟硬體相關性很強,不同的硬體會有不同的組合語言。組合語言屬於低級語言。不同的進階語言,在相同硬體的機器上通過自身語言的編譯器編譯出的組合語言是相同的。

三,彙編階段:彙編器將hello.s組合語言原始碼翻譯成機器指令,並把這些指令打包成hello.o(二進位檔案)。hello.o是二進位檔案,它的每個位元組的位元字代表的是機器語言指令,並不代表一個文本字元。所以,用文字編輯器開啟一個二進位檔案時,裡面顯示的是亂碼。

四,連結階段:hello.c中調用了printf函數。這個函數是每個C編譯器都會提供的標準C庫的一個函數。printf函數存在於名為printf.o的已經編譯好了的目標檔案中。通過串連,就可以將printf.o目標檔案合并到hello.o檔案中,最終得到了hello檔案,這是一個可執行目標檔案。

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

  • 最佳化程式效能。 瞭解編譯器的內部工作原理,我們就可以知道不同的語言結構的實現方式、不同之處,從而可以提高程式的效能。例如switch語句是否總是比一系列的if-then-else語句要高效?while迴圈是否比for迴圈更高效?
  • 理解連結時出現的錯誤。 第七章詳細解釋
  • 避免安全性漏洞。 緩衝區溢位是造成大多數網路和internet伺服器安全性漏洞的主要原因。學習安全編程的第一步就是要理解資料和控制資訊儲存在程式棧上的方式會引起的後果。第三章講述堆棧原理和緩衝區溢位錯誤。

1.4 處理器讀並解釋儲存在儲存空間中的指令

  unix以及類unix系統中,shell是一個程式。它是人機互動介面,使用者通過shell給機器發出指令。它接收使用者輸入的指令,如果第一個字元不是內建的shell命令,那麼shell會認為是一個可執行檔的名稱,載入並執行這個檔案。

1.4.1 系統的硬體組成 

  1.匯流排

    匯流排是一組電子管,各個電腦的組件通過它傳送資料資訊。匯流排傳送資料的長度,是一個定長的位元組快,稱為字。字的位元組數稱為字長,根據系統的不同而不同。32位匯流排的字長是4位元組,64位匯流排的字長就是8位元組。匯流排傳送資料都是一個字一個字的傳送,那麼根據系統不同,32位的機器每次能傳送4個位元組,64位的每次能傳送8個位元組。

  2.I/O裝置

    鍵盤、滑鼠、顯示器、磁碟這些都是I/O裝置。每個I/O裝置都通過一個控制器或適配器與匯流排相連。

  3.主存

    主存由一組動態隨機存取儲存器晶片集成。從邏輯上講,主存每個儲存單位為1個位元組,每個位元組都有其唯一的地址,地址從0開始。

  4.處理器

    CPU核心是一個字長的存放裝置,稱為程式計數器(PC)。PC在任何時刻,都指向主存中的某條機器語言指令(即儲存的是該指令所在主存的地址)。

    

  

 

第一章 電腦系統漫遊

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.