計算機體系結構基礎最近的知識點

2020-08-14 21:08:16

我是小康小白,一個平平無奇的Java小白。熱愛有趣的文字,生活和遠方。
個人部落格:https://blog.csdn.net/weixin_45791445
有問題歡迎QQ聯繫:1059320343 (記得備註CSDN)

在这里插入图片描述

1. 常見通用計算機系統的四大層次以及連線層次之間的介面:

第一章的介紹:
應用系統,
—>應用程式程式設計介面API(生態建設的起點)
操作系統,
—>指令系統ISA(生態建設的終點)
硬體系統,
—>工藝模型
電晶體

補充:在API和ISA中間還有一層應用程式二進制介面(ABI)。ABI是應用程式存取計算機硬體以及操作系統服務的介面。
在这里插入图片描述

第二章的介紹:(從使用者感知的應用軟體到最底層的物理載體)
應用軟體
基礎軟體
硬體邏輯
物理載體
在这里插入图片描述

指令系統介於軟體和硬體之間,是軟硬體互動的介面。

2. MIPS指令系統:

  • 偵錯模式

  • 根模式

    • 核心模式
    • 監管模式(很少使用)
    • 使用者模式
  • 客戶模式

    • 核心模式
    • 監管模式(很少使用)
    • 使用者模式

根-核心模式和偵錯模式可以控制所有的處理器資源,
根-使用者模式和客戶-使用者模式只能控制各自模式的資源,
客戶-核心模式可以控制所有的客戶-使用者資源。
在这里插入图片描述

3.指令系統

  • 根據指令長度的不同,指令系統分爲:

    • 複雜 指令系統(CISC):指令長度可變。
    • 精簡指令系統(RISC):指令長度比較固定。有利於指令流水先的高效實現
      精髓在於簡化指令間關係,有利於指令流水線高效實現。
    • 超長指令字:本質是多條同時執行的指令的組合,其「同時執行」的特徵由編輯器指定,無需硬體進行判斷。
  • 指令集結構:
    指令集時指令系統提供給軟體的直接介面。
    指令系統有時也會狹義地理解爲指令集結構。

  • 指令:
    每條指令倒是一個操作的描述,主要包括操作碼運算元
    操作碼包括指令系統,例如加減法。
    操作數據指示操作物件,又包括數據型別,存取地址,定址方式等內容的定義。

  • 訪存地址

    • 訪存地址的對齊:
      對齊存取是指對該數據的存取地址和結束地址都符合其數據長度。
      如果支援不對齊存取,硬體就需要完成數據的拆分和拼合。

    • 大小尾端?
      big endian:大尾端,也稱大端(高位)優先儲存。最高有效位元組的地址較小的是大尾端。
      little endian:小尾端,也稱小端(低位)優先儲存。最低有效位元組的地址較小的是小尾端。

       如下對00000000 00000000 00000000 00000001的儲存?
      

      大尾端: 00000000 00000000 00000000 00000001

       addr+0   addr+1    addr+2  addr+3    //先存高有效位(在低地址) 
      

      小尾端: 00000001 00000000 00000000 00000000

       addr+0   addr+1    addr+2  addr+3    //先存低有效位(在低地址)
      
  • Load和Store的區別?

      以LOAD R1 A
      和STORE C,R3這兩條命令進行講解。
      在第一條指令中LOAD表示從記憶體中讀取數據A然後儲存到R1暫存器中
      第二條指令中STORE表示將C儲存到記憶體R3中。
    
  • 從功能上分,指令可分爲四大類:

    • 運算指令:加減乘除,移位,邏輯運算等。

    • 訪存指令:負責對記憶體的讀寫。

    • 轉移指令:控製程式的流向。
      (1)兩大要素:轉移條件和轉移地址。
      (2)兩要素的組合構成了不同的轉移指令:
      在这里插入图片描述

    • 特殊指令: 用於操作系統的特定功能。

  • 公共指令功能
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 對於跳轉指令:
    PC 相對地址跳轉指令稱爲「分支」,絕對地址跳轉指令稱爲「跳轉「。

  • 延遲槽:
    RISC指令集中很多條件轉移採用了延遲槽技術。
    程式中 條件 轉移指令的後一條指令位延遲槽指令。
    分支延遲槽 (Branch delay slot),簡單地說就是位於分支指令後面的一條指令,不管分支發生與否其總是被執行,而且位於分支延遲槽中的指令先於分支指令提交 (commit)。

在这里插入图片描述

  • MIPS常用指令集
    lb/lh/lw: 從記憶體中讀取一個byte/half word/word的數據到暫存器中.如lb $1, 0($2)
    sb/sh/sw: 把一個byte/half word/word的數據從暫存器儲存到記憶體中.如 sb $1, 0($2)
    add/addu:把兩個定點暫存器的內容相加add $1,$2,$3($1=$2+$3);u爲不帶符號加。

addi/addiu:把一個暫存器的內容加上一個立即數add $1,$2,#3($1=$2+3);u爲不帶符號加。
sub/subu:把兩個定點暫存器的內容相減。
div/divu:兩個定點暫存器的內容相除。
mul/mulu:兩個定點暫存器的內容相乘。
and/andi:與運算,兩個暫存器中的內容相與and $1,$2,$3($1=$2 & $3);i爲立即數。
or/ori:或運算。
xor/xori:互斥或運算。
beq/beqz/benz/bne:條件轉移eq相等,z零,ne不等。
j/jr/jal/jalr:j直接跳轉;jr使用暫存器跳轉;
lui:把一個16位元的立即數填入到暫存器的高16位元,低16位元補零。
sll/srl:邏輯左移/右移sll $1,$2,#2。
slt/slti/sltui:如果$2的值小於$3,那麼設定$1的值爲1,否則設定$1的值爲0。slt $1,$2,$3。
mov/movz/movn:複製,n爲負,z爲零。mov $1,$2; movz $1,$2,$3($3爲零則複製$2到$1)。
trap:根據地址向量轉入管態。
eret:從異常中返回到使用者態。

add是有符號數加法,addu是無符號數加法。
區別:add指令執行附加的溢位檢測,如果運算結果溢位,會觸發異常。
在这里插入图片描述

C語言程式碼轉換爲MIPS機器表示

  • C語言等高階語言編寫的程式必須經過編輯器轉化爲彙編語言,再由彙編器轉換爲指令碼才能 纔能在CPU上執行。

  • 對下圖的解釋:
    在这里插入图片描述
    執行順序:
    1.add:(add是被呼叫的子程式)

      addu  v0,a0,a1
      	addu:這是一個操作碼,把兩個定點暫存器的內容不帶符號相加add $1,$2,$3($1=$2+$3);(相似的指令見上文)
      	v0,a0,a1是三個暫存器
      	而這條指令是將會將輸入的參數儲存到a0,a1兩個暫存器中,並將結果儲存到v0暫存器中。
      jr ra
      	jr:負責函數返回的指令,屬於間接跳轉指令,該指令的運算元爲暫存器,因此MIPS彙編中常見的函數返回指令是
      			JR RA
      		指令的後一條指令其延遲槽,延遲槽內的指令先於JR指令執行。
      	呼叫函數時纔會執行此指令。
    

    ref:(函數)

      addiu  sp,sp,-32指令
      		addi/addiu:把一個暫存器的內容加上一個立即數add $1,$2,#3($1=$2+3);u爲不帶符號加。
      		這條指令給sp暫存器中加上-32,並將結果儲存到sp暫存器中。
      sw  ra,28(sp)
      		sw:sw rt,imm(rs)將rt暫存器中存放的值儲存到rs暫存器中存放的值
      			加上立即數imm進行符號擴充套件後得到的擴充套件立即數所得的記憶體地址的記憶體單元中,
      			即memory[rs + (SignExtend)immediate] <- rt
      		這條指令是
      li a0,12
      	這條指令將12儲存到a0這個暫存器中。
      li a1,34
      	這條指令將34儲存到a1
      jal add
      	jal:呼叫函數,屬於絕對轉移指令,該指令在跳轉的同時還將下一條指令(延遲槽除外)的地址放入31號通用暫存器
      		(記爲RA)中,作爲函數放回地址。	
      		在這條指令中,它呼叫了add函數。
      lw ra,28(sp)
    

注:這個解釋未寫完,小白後面會補完的。

4. 儲存管理

  • 段式儲存管理的地址轉換的過程:

    • 地址轉換時根據短號檢索段表,得到對應段的起始實體地址(由段長度和基址可得),
    • 對應段的起始實體地址加上段內偏移得到最終的實體地址。
      補充:段式需要判斷段地址的合法性。
      在这里插入图片描述
  • 頁式儲存管理的地址轉換過程:

    • 根據虛擬頁號檢索頁表,得到對應的物理頁號,
    • 物理頁號和頁內偏移組合得到最終的實體地址。
      在这里插入图片描述
  • 段頁式儲存管理的地址轉換過程(虛擬地址分爲段號,虛擬頁號和頁內偏移):

  • 段裏面儲存的是多張頁表。

    • 首先根據短號查詢段表得到對應段的頁表起始地址
    • 根據頁表起始地址和虛擬頁號查詢頁表得到物理頁號,
    • 物理頁號與業內偏移組合得到最終的實體地址。
      補充:段頁式同樣需要檢查段地址的合法性。

    在这里插入图片描述

5.特權指令系統簡介

特權指令系統就其機制 機製而言,可以分爲以下幾類
(1)執行模式定義及轉換
在这里插入图片描述
(2)虛擬儲存管理
在这里插入图片描述
(3)異常和中斷處理
在这里插入图片描述
(4)控制暫存器
控制暫存器位於一個獨立的地址空間,是支撐前面3種機制 機製的具體實現。不同的指令系統差別較大。

5.異常和中斷

  • 異常和中斷是一種打斷正常的軟體執行流,切換到專門的處理常式的機制 機製。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

6.MIPS的原子性方案:

使用LL(Load Linked)和SC(Store Conditional)指令來完成原子操作。由硬體維護一個LL bit,在LL指令存取莫記憶體地址後,若該地址被改寫則修改LL bit狀態,執行SC指令時檢查LL bit來確定原子性。