2 深入理解計算機系統筆記 資訊表示

2022-02-12 10:24:16 字數 2300 閱讀 8410

1、機器級程式將儲存器視為乙個非常大的位元組陣列,稱為虛擬儲存器(

virtual memory

)。儲存器的每個位元組都由乙個唯一的數字來標識,稱為位址(

address),

所有可能位址的集合就稱為虛擬位址空間(

virtual address space

)。虛擬位址空間是乙個展現給機器級程式的概念性映像(

image),

具體的實現使用的是隨機訪問儲存器

ram,磁碟儲存,特殊硬體和

os軟體的結合,來為程式提供乙個看上去統一的位元組陣列。

2、指值有兩個方面:它的值和它的型別。它的值表示的是某個物件的位置,而它的型別表示那個位置上所儲存物件的型別(如

int,float

)。3、每台計算機都有乙個字長(

word size

),指明整數和指標資料的標稱(

nominal size

)大小。虛擬位址是以字來編碼的。對於乙個字長為

n位的機器來說,虛擬位址的範圍為

0~2n

-1,程式最多訪問2n

個位元組。

如32位字長的計算機上,虛擬位址空間為

4gb。

4、計算機和編譯器使用不同的方式來編碼數字。

小端(little endian

大端(big endian

網路應用程式的**編寫必須遵守已建立的關於位元組順序的規則,以確保傳送方機器將它的內部表示轉換成網路標準,而接收方機器將網路標準轉換成它的內部表示。

示例**

#include #include "string"

#include "cmath"

#include "iomanip"

using namespace std;

typedef unsigned char* byte_pointer;

void show_bytes(byte_pointer bpstart, int ilen)

void show_int(int ix)

void show_float(float fx)

void show_pointer(void *x)

int main()

5、c

中的移位

移位運算從左至右結合。

1)機器支援兩種形式的右移:邏輯的算術的。邏輯右移

k位在左端補k個

0,[0,...0,x

n-1,x

n-2,...]。算術右移是在左端補

k個最高有效位的拷貝,

[xn-1

,...x

n-1,x

n-2,...]

對於無符號資料,右移必須是邏輯的,有符號數則兩者都可以,一般機器實現中實現為算術右移。

2)左移,就是移位後,在右邊補0。

6、要將乙個無符號數轉換為乙個更大的資料型別,只要簡單的在開頭新增

0;這種運算稱為

0擴充套件(

zero extension

)。要將乙個二進位制補碼數字轉換為乙個更大的資料型別,執行符號擴充套件(

sign extension

),在表示中新增最高有效位的值。

7、在資料轉換中,由大資料轉換成小資料可能發生截斷。棄高

k位。對於乙個無符號數

x,截斷它到

k位的結果就相當於計算

x mod 2k。

8、範圍0,≤

x,y≤2w

-1內的整數

x,y,可以被表示成

w位的無符號數字,它們的乘積

x.y的取值範圍為

0~(2

w-1)

2,這可能需要

2w位來表示。

9、在大多數機器上,整數乘法指令相當慢,需要

12或更多時鐘週期,其他整數運算,如加法,減法,移位和位級運算,只需要

1個時鐘週期。因此編譯器使用的一項重要的優化就是試著用移位和加法運算的組合來代替乘以常數因子的乘法。

整數除法比乘法更慢,需要30

或者更多的時鐘週期,除以

2的冪也可以用移位運算來實現。我們可右移。對於無符號數和二進位制補碼數,分別使用邏輯移位和算術移位來達到目的。

10、在當前的計算機中,整數是以補碼表示的。

11、ia32

處理器有特別的儲存器元素,稱為暫存器,當計算或使用浮點數時,用來儲存浮點值。浮點數的取反就是對符號位取反。

關於浮點數,本書中講的比較零碎,可以參考國內教材中《計算機組成原理》等相關書籍。

<

computer systems:a programmer's perspective

>

深入理解計算機系統 2

程式抽象流程 在c語言中 1 c預處理器 cpp 擴充套件源 插入所有用 include 命名指定的檔案,並擴充套件所有用 define 宣告指定的巨集。2 編譯器 ccl 產生兩個源 的彙編 名字命名分別為p1.s 3 彙編器 as 將彙編 轉化為二進位制目標 為p1.o 目標 是機器 的一種形式...

深入理解計算機系統 2

第一部分 程式結構和執行 我們對計算機系統的探索是從學習計算機本身開始的 它是由處理器和儲存器子系統組成 在核心部分 我們需要方法來表示基本資料型別 比如整數和實數運算的近似值 然後我們考慮機器級指令如何操作這樣的資料 以及編譯器如何將c程式翻譯成這樣的指令 接下來研究幾種實現處理器的方法 幫助我們...

深入理解計算機系統 筆記

cu control unit cpu暫存器,晶元的快取記憶體sram 晶元外的快取記憶體sram 主存dram 本地硬碟 網路分布式檔案系統。拷貝次數越少,越好,netty,零拷貝 dma控制器與cpu分時使用記憶體的三種方式 程序 作業系統對執行程式的一種抽象,乙個系統上,多個程序都好像獨佔硬體...