第一章 電腦系統漫遊

來源:互聯網
上載者:User

標籤:跳轉   c中   想法   複雜   本地   如何   上下   階段   控制   

1.1 資訊就是位+上下文

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

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

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

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

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

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

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

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

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

  1. 最佳化程式效能
  2.  理解連結時出現的錯誤 
  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.9.1 Amdahl定律:主要思想是當我們對系統的某個部分加速時,其對系統整體效能的影響取決於該部分的重要性和加速程度。

1.9.2 並發與並行:

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

1.9.3 電腦系統中抽象的重要性

1.10 小結

  資訊就是位+上下文;

  程式被其他程式翻譯成不同的格式:前置處理器、編譯器、彙編器、連結器四個階段過程;

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

  存放裝置階層:CPU寄存器在頂部,接著是多層的硬體快取儲存空間,DRAM主存和磁碟儲存空間;

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

       網路提供了電腦系統之間通訊的手段。
    

第一章 電腦系統漫遊

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.