深入理解計算機系統 計算機資訊儲存

2021-04-29 20:06:44 字數 1271 閱讀 8093

計算機使用8位的塊(位元組(byte)),來作為最小的可定址的儲存器單位,而不是訪問儲存器中每個單獨的位。機器級程式將儲存器視為乙個非常大的陣列,稱為虛擬儲存器(virtual memory)。儲存器的每個位元組都由乙個唯一的數字來標識,稱為它的位址(address),所有可能位址的集合就稱為虛擬位址空間(virtual address space)。這個虛擬位址空間只是乙個展現給機器級程式的概念性映像(image)。實際的實現使用的是隨機訪問儲存器ram(通常說的記憶體)、磁碟(通常說的硬碟),它們結合作業系統軟體,來為程式提供乙個看上去統一的位元組陣列。

每台計算機都有乙個字長(word size),它決定了虛擬位址空間的大小。對於乙個字長為n位的機器而言,虛擬位址的範圍是:0---(2^n)-1,程式最多訪問2^n個位元組。

目前(2023年)大多數的計算機的字長都是32位。這就限制了虛擬位址空間為4g位元組。這也就是為什麼32位xp只支援最大4gb記憶體。

資訊在記憶體中的儲存方式是怎樣的呢?我們知道位元組是最小的可定址的儲存器單位當要儲存的資訊的長度超過了1個位元組時怎麼辦呢?比如:0x1234567,它是乙個int數,佔4個位元組(32位)。假設系統分配給它0x100-0x103這4個記憶體空間。

將0x1234567換算成二進位制為:1001000110100010101100111,儲存時從低位每8位存入乙個記憶體單元。為易於觀察將其分割,前面不足位用0補齊:00000001,00100011,01000101,01100111。

這時有2種方式儲存:

1.大端法(big endian):從0x100到0x103依次儲存:00000001,00100011,01000101,01100111。亦即依次儲存:01,23,45,67。

2.小端法(little endian):從0x100到0x103依次儲存:01100111,01000101,00100011,00000001。亦即依次儲存:67,45,23,01。

觀察發現大端法符合我們從左到右的數字書寫習慣,但它卻不符合,低位記憶體儲存低位數值的規則,小端法則剛好相反。當從記憶體中取用資料時,用大端法儲存的資料從0x100到0x103依次取出,每取出乙個位元組(也就是乙個記憶體單元)的資料只要加在現有資料的右邊就可以了。而用小端法儲存的資料,則相應的取出後加在左面。

intel的處理器都採用小端法.

當儲存在磁碟上時位元組順序(endian order)與檔案的格式有關,比如windows下的bmp影象用的是little endian。jpeg 用的是big endian。

ieee浮點表示

浮點數v=(-1)^s*m*2^e

符號s,為0時表正數,為1時表負數

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

第一章 計算機系統漫遊 計算機系統是由硬體和系統軟體組成的。所有計算機系統都是由相似的硬體和軟體組成,它們又執行著相似的功能。以hello程式為例。1.1資訊就是位 上下文 hello程式的生命是從源程式 原始檔 開始的。源程式是程式設計師編寫的,hello.c。源程式是 0和1 的位元位,8個一組...

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

1 程式編譯階段 以hello world 程式為例,介紹計算機系統的基本組成結構和程式的編譯過程。include int main 該程式的執行經歷這樣乙個過程 源程式首先經預處理器處理 將 include中的內容插入到源程式中,得到另乙個程式hello.i 編譯階段 hello.i程式經過編譯,...

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

這裡以最簡單的例子 helloworld 為例,新建乙個 hello.c 的原始檔,新增如下 include stdio.h int main 使用 gcc o hello.c hello 指令可以將原始檔轉換為可執行程式,o 選項可以指定可執行程式的名稱,不指定該選項時預設為輸出乙個 a.out ...