1. 程式人生 > >深入理解計算機系統學習(1)

深入理解計算機系統學習(1)

這裡寫圖片描述
原始檔:0, 1 組成每行以一個看不見的’\n’結尾,
這裡寫圖片描述
執行一個原始檔分四個階段:預處理, 編譯,彙編,連線

編譯系統
.i 檔案:.c檔案預處理後生成
.ii檔案: .cpp檔案預處理後生成

  • 預處理階段:前處理器(cpp)根據以#開頭的命令修改源程式,(如把一些標頭檔案的內容,直接插入到程式文字中)
  • 編譯階段。編譯器(ccl)將.i 文字翻譯成 .s 文字,他包含了一個彙編程式,組合語言程式中沒儀表語句都以一種標準的額問題本格式確切的描述了一條低階機器語言指令
  • 彙編階段。彙編器(as) 將.s 檔案翻譯成機器語言指令,並將其打包成可重定位目標程式的格式。並將結構儲存在.o 檔案中,.o檔案是一個二進位制檔案,他的編碼是機器語言指令而不是字元,所以當我們用文開啟.o檔案是看到的是一堆亂碼。
    -連結階段。比如在剛剛的程式中呼叫了printf函式,他是每一個c編譯器都會提供的標準C庫的一個程式,它存在一個名為printf.o的單獨預編譯好的目標檔案中,而這個檔案必須以某種方式合併到hello.o程式中,聯結器就是負責處理這種合併的,並生成可執行檔案

要想在unix上執行可執行檔案,我們需要將他的檔名輸入到shell的應用程式中

shell是一個命令列直譯器,它輸出一個提示符,等待命令輸入,然後執行命令,如果輸入的不是一個內建的shell命令,那麼shell就會假設這是一個可執行檔案,並對其進行載入執行

系統的硬體組成

這裡寫圖片描述

  • 主存:一個臨時儲存裝置,在處理器執行程式時,用來存放和程式處理的資料,從物理上來說,主存是一組由動態隨機儲存器(DRAM)組成的,從六級上來說,儲存器是一個線性的位元組陣列,每一個位元組都一個唯一的地址,
  • 處理器:中央處理單元,除利息的核心是一個字常德儲存裝置,稱為程式計數器,在任何時刻,PC都指向主存的某條機器語言指令。指令按照嚴格的順序執行。
  • 指令集結構:描述沒每條機器程式碼指令的效果
  • 微體系結構:描述處理器實際上的具體實現

    程序 :作業系統對一個正在執行的程式的一種抽象,作業系統保持跟組程序執行所需的所有狀態資訊,當作業系統決定要把控制權從當前程序抓移到某個新程序時,就會進行上下文切換(儲存當前程序的上下文,恢復新程序的上下文,然後將控制權傳遞到新程序)這裡寫圖片描述

執行緒:一個程序實際上可以由多個稱為執行緒的執行單元組成,每個執行緒都執行在程序上下文中,並共享同樣的程式碼和全域性資料,

虛擬儲存器:一個抽象概念,它為每個程序提供了一個假象,即每個程序都在獨立地使用主存。Linux中,地址空間最上面的區域是為作業系統中的程式碼和資料保留的,這對素有程序來說是一樣的,地址空間的地步存放使用者程序定義的資料和程式碼
這裡寫圖片描述

  • 程式程式碼和資料。對所有的程序來數,程式碼是從同一固定地址開始的,緊接著是C全域性變數,程式碼和資料區是直接按照可執行檔案載入的,如上圖的hello片段。
  • 堆:程式碼和資料區後是執行時堆,程式碼和資料區是程序在一開始執行時就被規定了大小,但是堆可以在呼叫malloc和free等函式式動態的擴充套件和收縮
  • 共享庫:大約在地址空間的中間部分是用來存放C標準庫等這樣共享庫的程式碼和資料的區域。
  • 棧:位於使用者虛擬地址空間的頂部,編譯器用它來實現函式呼叫,和堆一樣,在程式執行期間可以動態地擴充套件和收縮。(呼叫函式會使得棧增加,從函式返回時,棧收縮)
  • 核心虛擬儲存器:核心總是駐留在記憶體中,是作業系統的一部分,不允許程式續寫,或直接呼叫核心程式碼定義的函式。

檔案:位元組序列。I/O裝置,磁碟,鍵盤,顯示器都可視為檔案。

並行和併發

  • 併發:值一個同事具有多個活動的系統
  • 並行:是用併發使一個系統執行得更快

    執行緒級併發:

  • 超執行緒:有時稱為同時多執行緒,是一項允許一個CPU執行多個控制流的技術。
    指令級併發:在較低的抽象層次上,現代處理器可以同事執行多條指令
    單指令,多資料並行:允許一條指令產生多個可以並行執行的操作,這種方式稱為單指令,多資料,

相關推薦

深入理解計算機系統學習1

原始檔:0, 1 組成每行以一個看不見的’\n’結尾, 執行一個原始檔分四個階段:預處理, 編譯,彙編,連線 .i 檔案:.c檔案預處理後生成 .ii檔案: .cpp檔案預處理後生成 預處理階段:前處理器(cpp)根據以#開頭的命

深入理解計算機系統

C只支援大小在編譯時就能知道的多維陣列(對於第一維可能有些例外)。在許多應用程式中,我們需要程式碼能夠動態分配的任意大小的陣列進行操作。,為此,我們必須顯示地寫出從多維陣列到一維陣列的對映。 異類的資料結構:C提供了兩種不同型別的物件結合到一起來建立資料型別的機制;結構,用

深入理解計算機系統學習筆記

程式的編譯過程 為了說明程式的編譯過程,我們用經典的hello world程式作為例子 #include <stdio.h> int main(int argc, char const *argv[]) { printf("hell

2018-2019-1 20189221 《深入理解計算機系統》第 1學習總結

2018-2019-1 20189221 《深入學習計算機系統》第 1 周學習總結 第 1 章 計算機系統漫遊 這一章通過研究“hello,world”這個簡單程式的生命週期,介紹計算機系統的主要概念和主題 1.1 資訊就是位+上下文 計算機系統中的一切資料都是由一串位元表示的,區分不同資

(轉)計算機原理學習1-- 馮諾依曼體系和CPU工作原理

原文:https://blog.csdn.net/cc_net/article/details/10419645 對於我們80後來說,最早接觸計算機應該是在95年左右,那個時候最流行的一個詞語是多媒體。 依舊記得當時在同學家看同學輸入幾個DOS命令就成功的打開了一個遊戲,當時實在是佩服的五體投地。因為對我來

計算機原理學習1

序言 又有兩年沒有寫Blog了, 這2年從做windows phone 到 Android C++, 慢慢的很多觀念也有所改變了。以前一心想做C#相關的工作,現在卻感覺,什麼語言都無所謂了。公司專案挺忙,加班比較多,不忙的時候又想休息休息。 所以blog又荒廢了好久。也很少有時間早學習, 加上年紀越來

深入理解java虛擬機1

方法區 對象實例 nat 物理 深入 ret 字符 java 所有 java內存區域 Java虛擬機執行java程序時會將管理的內存劃分為若幹個區域:   1. 程序計數器     程序計數器是一個”線程私有“的內存區域,用於獲取下一條需要執行的字節碼指令,如分支、循

網易雲音樂推薦系統學習1

音樂推薦的如下特點。物品空間大 物品數很多,物品空間很大,這主要是相對於書和電影而言。消費每首歌的代價很小 對於線上音樂來說,音樂都是免費的,不需要付費。物品種類豐富 音樂種類豐富,有很多的流派。聽一首歌耗時很少 聽一首音樂的時間成本很低,不太浪費使用者的時間,而且使用者大都把音樂作為背景聲音,同時進行其他工

計算機原理學習1-- 馮諾依曼體系和CPU工作原理

前言 對於我們80後來說,最早接觸計算機應該是在95年左右,那個時候最流行的一個詞語是多媒體。 依舊記得當時在同學家看同學輸入幾個DOS命令就成功的打開了一個遊戲,當時實在是佩服的五體投地。因為對我來說,螢幕上的東西簡直就是天書。有了計算機我們生活發生了巨大的變化,打遊

深入理解 JavaScript 非同步系列1——基礎

前言 http://www.cnblogs.com/wangfupeng1988/p/6513070.html    2014年秋季寫完了《深入理解javascript原型和閉包系列》,已經幫助過很多人走出了 js 原型、作用域、閉包的困惑,至今仍能經常受到好評的留言。

OpenCV計算機視覺學習1——影象基本操作影象視訊讀取,ROI區域擷取,常用cv函式解釋

1,計算機眼中的影象   我們開啟經典的 Lena圖片,看看計算機是如何看待圖片的:    我們點選圖中的一個小格子,發現計算機會將其分為R,G,B三種通道。每個通道分別由一堆0~256之間的數字組成,那OpenCV如何讀取,處理圖片呢,我們下面詳細學習。 2,影象的載入,顯示和儲存   我們看

深入理解計算機系統1.2------存儲設備

高速 計算 想法 知識 1-1 運用 文件 字符 設備   上一章我們講解了hello world 程序在計算機系統中是如何運行的。 hello 程序的機器指令最初是存放在磁盤上的,當程序加載時,他們被復制到主存;當處理器運行程序的時候,指令又從主存復制到處理器。相似的,數

深入理解計算機系統3.1------匯編語言和機器語言

找到 生產 有著 shu 符號 ces pc機 高效率 機器語言   《深入理解計算機系統》第三章——程序的機器級表示。作者首先講解了匯編代碼和機器代碼的關系,闡述了匯編承上啟下的作用;接著從機器語言IA32著手,分別講述了如何存儲數據、如何訪問數據

1計算機系統漫遊深入理解計算機系統

printf 保存 並運行 用戶 數據 ogr 語句 亂碼 hello 1 #include <stdio.h> 2 3 int main() 4 { 5 printf("hello, world\n"); 6 } 1.1 信息就是位+上下文 h

深入理解計算機系統第三版》第二章學習總結

第二章:資訊的表示和處理 1.二進位制與十六進位制: ①十六進位制數字:0 – F,例子:25A4B ② 二進位制數字:0 – 1,例子:0001 0111 0011 1010 0100 1100 ③相互轉換:十進位制→ 十六進位制:Mod(10,16)(倒序排列) 2.字和資料大小: ① 字長決定了

深入理解計算機系統學習筆記

一、資訊就是位 + 上下文 作者使用的標題是:資訊就是位 + 上下文,那麼問題來了:什麼是位?什麼是上下文? 計算機系統是由硬體和系統軟體組成的,它們共同工作來執行應用程式。所有計算機系統都有相似的硬體和軟體元件,它們執行著相似的功能。 從某種意義上來說,本書的目的就是要幫助你

深入理解計算機系統原書第三版》pdf附網盤下載連結+附一個菜鳥的java學習之路

技術書閱讀方法論 一.速讀一遍(最好在1~2天內完成) 人的大腦記憶力有限,在一天內快速看完一本書會在大腦裡留下深刻印象,對於之後複習以及總結都會有特別好的作用。 對於每一章的知識,先閱讀標題,弄懂大概講的是什麼主題,再去快速看一遍,不懂也沒有關係,但是一定要在不懂的

深入理解計算機系統》| 學習筆記

一、資訊就是位 + 上下文 作者使用的標題是:資訊就是位 + 上下文,那麼問題來了:什麼是位?什麼是上下文? 計算機系統是由硬體和系統軟體組成的,它們共同工作來執行應用程式。所有計算機系統都有相似的硬體和軟體元件,它們執行著相似的功能。 從某種意義上來說,本書的目的

深入理解計算機系統3.1------組合語言和機器語言

  《深入理解計算機系統》第三章——程式的機器級表示。作者首先講解了彙編程式碼和機器程式碼的關係,闡述了彙編承上啟下的作用;接著從機器語言IA32著手,分別講述瞭如何儲存資料、如何訪問資料、如何完成運算以及如何進行跳轉。通過這些步驟,又告訴了我們分支語句、迴圈語句是怎麼完成的,函式呼叫、棧幀結構以及遞迴過程。

CSAPP 深入理解計算機系統 Buflab實驗,緩衝區溢位攻擊實驗1

由於實驗太長所以還是採用分開 其實感覺之前做過那個bomb實驗以後,這個實驗相對來說還是很容易的,主要是要搞懂緩衝區溢位原理,以及堆疊的過程,函式呼叫的實現過程,做完這個實驗如果認認真真的做完,對於堆疊的過程,還有快取溢位攻擊的原理就會掌握的比較清楚的。個人感覺實驗設計的