CPU 設計的若干問題

2021-05-07 21:21:11 字數 3913 閱讀 6043

1.

處理器的應用領域?

通訊領域(乙太網協議,hdlc,ppp 等常用協議的電路設計)、

工業控制領域、消費領域(手機、印表機)、桌面(運算效能)及伺服器領域(可靠性,可服務性)。

2.處理器的端模式?

endian 表示資料在儲存器中的存放順序

little-endian ,little-end-first 符合人類的正常思維

big-endian ,big-end-first  利於計算機的處理

不僅對於處理器,一些外設也存在端模式的選擇問題。大端與小端模式的差別體現在處理器的暫存器、指令集、系統匯流排等各個層次中。所以,端模式的確定很是重要。

從 實際應用的角度看,採用小端模式的處理器需要在軟體中處理端模式的轉換,因為採用小端模式的處理器在與小端外設互聯時,不需要任何轉換。而採用大端模式的 處理器需要在硬體設計時處理端模式的轉換。端模式的解決需要軟硬體協調處理,並在指令集上加以支援。注意:在實際應用中,並沒有大端外設。

3.棧溢位問題?

8086 實模式棧溢位主要指對記憶體的讀寫超越了堆疊段的界限;

80386 以上保護模式下,會對段進行界限檢查,現在所說的棧溢位主要指棧緩衝區溢位,覆蓋了eip 等重要資料。

4.關於lr 暫存器?

lr 暫存器主要儲存函式的返回位址。在ia32 、mips 、arm 、powerpc 等處理器的abi 中都規定使用堆疊實現函式的呼叫。也就是說函式的返回位址需要儲存在每個函式的棧幀結構中,即儲存lr 的內容。

而設定lr 的目的主要是用於純彙編設計中。

5.暫存器設計? l

通用暫存器組。

乙個處理器使用的通用暫存器過多將占用指令空間,過少則不能充分利用指令空間。 l

指令狀態暫存器。

如eflags ,儲存加減及邏輯運算結果狀態

lr ,存放函式的返回位址

acc 暫存器,mips 等結構中存在。 l

效能監測暫存器、l1cache 暫存器組等 l

超級使用者模式暫存器

包括cpu 的配置(執行模式等)、記憶體管理、中斷控制

6.指令集設計?

指令集的端模式;指令的長度(定長,變長);

指令型別:算術、移位、邏輯、跳轉、訪問等。

是否在指令級別支援堆疊?

7.處理器的abi

l 定義處理器支援的資料型別:包括整形,浮點,指標型別的大小及對界; l

通用暫存器的使用規則:如函式的返回值(mips 的v0 ,v1 及ia32 的eax ),函式引數的傳遞(mips 的a0-a3 及ia32 使用棧傳遞) l

處理器的棧幀結構:是否在指令級別支援堆疊?如果沒有,需要規定使用儲存器訪問指令代替push 和pop 指令,同時規定使用某一暫存器模擬sp 暫存器。

注:對於完全是用c 程式設計的話,不必了解處理器的棧幀結構,它由編譯器維護;對於c 和彙編混合程式設計,則需要注意棧幀結構。 l

elf 可執行檔案的組成等等。

8.指令執行?

流水?流水深度?多發射?亂序?

指令預取、指令解碼、指令發射、指令執行(分支,儲存器,算術等)、指令完成、指令寫回。

9.記憶體體系結構 (重點也是核心 )

主要包括記憶體管理單元mmu 、cache 的管理、系統匯流排的設計及其他一系列管理部件。 l

mmu 的設計?

必須合理控制和管理不同種類的實體地址空間的對映,如物理記憶體(sram 、sdram 和ddr 等)、pci 匯流排裝置、ide 裝置等。 n

虛擬位址的位數,虛擬位址各個欄位的組成? n

tlb 中entry 的設計,進行虛實位址轉換的關鍵 n

與mmu 管理相關的暫存器:主要用於對mmu 進行維護與更新,包括對mmu 進行管理和配置的暫存器及對tlb 中的entry 進行配置和管理的暫存器 n

與mmu 管理相關的指令:tlb 的entry 的讀取指令、tlb 有效位址查詢指令、及tlb entry 的同步指令等。

lcache 的設計? n

設計多少級的cache ,以及多少是處於片內多少處於片外; n

然後就是cache 的處理方法,虛擬cache 技術和物理cache 技術(建議); n

cache 的設計:包括結構(哈佛),cache 大小,相聯數,行長度及字段等; n

cache 的替換演算法:lru (目前很少使用)、plru (pseudo lru ); n

cache 的狀態位及其一致性,主要使用mesi 協議; n

與cache 管理相關的暫存器; n

與cache 管理相關的指令

l儲存器的設計? n

主要是儲存器的一致和同步相關的暫存器和指令的設計

10.處理器的設計? l

除了處理器的核心之外,還需要提供一些介面控制器,如ddr 控制器、可程式設計中斷控制器、通用i/o 口甚至是pci 匯流排控制器等等。這裡又涉及到處理器內部而不是核心內部暫存器的設計。 l

通訊機制?是否需要支援通訊機制? n

如常見的乙太網,hdlc ,ppp 及序列通路。 l

關於l2cache的設計?

處理器核心中可以不包含l2cache ; n

採用front-side 方式?——powerpc 等處理器,優點簡單,容易實現cache 的一致性;通常採用通寫方式進行更新 n

採用back-side 方式?——intel 處理器,優點匯流排頻率高,但是不易實現cache 的一致性;通常採用寫回方式進行cache 更新 n

l2cache 的替換演算法等設計

11.多核處理器的設計? l

需注意的問題:多核間的通訊的延時和頻寬;系統的可程式設計性。 l

各個核心及記憶體控制器的互聯結構? 匯流排還是點對點?

如果是many-core 的話,則傾向於使用網路互鏈結構。 l

同步機制?

包括資料同步(cache 一致性和對共享資料的訪問)、儲存管理同步、原子操作和鎖機制。

以及用於同步的指令的設計——

如mips 中的ll 和sc 指令對:(對單個臨界資料進行原子操作)

atomic_inc:

ll            $t0,  0($a0)            #load linked

addiu      $t1,  $t0,1              #increment

sc           $t1,  0($a0)            #store cond`1

beqz        $t1,  atomic_inc      #loop if failed

nop

如powerpc 中的lwarx 和stwcx. 指令對:

loop:

lwarx      r5, 0, r3

stwcx.     r4, 0, r3

bne         loop

12. 關於體系結構,編譯器和作業系統的設計看法。

首先我認為三者不應同步進行,編譯器和os 必須在體系結構確定的情況下(或者基本確定)才能完成。

比如linus 開發linux 的時候就是參考《intel 80386 programmer's reference manual 》完成的,手冊裡面規定了系統如何初始化,暫存器如何使用等。

linux powerpc 的移植工作同樣如此,甚至部分源**還是編譯器直接編譯進去的。arm 處理器就更不用說了。

linux 的五大支柱之一就是gnu 計畫,包括各種實用工具和c 編譯器,在此基礎之上才出現linux 。但是就當面而言編譯器和os 可以同步進行,而體系結構必須是基礎。

編譯器的設計或者移植、作業系統的設計必須在以上11 個問題甚至更多問題都確定的情況下才能展開。否則也只能研究其理論。因此我最近主要在看體系結構相關的資料。

ceph若干問題

ceph health可以檢視ceph集群健康狀況 ceph df 可以檢視儲存的總使用率與各pool的使用率 ceph osd df 可以檢視各osd的使用率 ceph s 或 ceph status 可以檢視集群整體狀態 首先,我們要知道ceph的osd的位址 ceph osd tree可以檢視...

Ext grid 若干問題

1.grid.getselectionmodel getcount 獲得當前選中的行數 2.grid.getstore gettotalcount 獲得記錄總數 3.grid.getstore getcount 獲得當前分頁的記錄總數 4.5.獲得當前滑鼠單擊的單元格的value 6.new gri...

C C 中函式設計的若干問題

1.函式介面的兩個要素是引數和返回值。c語言中,函式的引數和返回值的傳遞方式有兩種 值傳遞 pass by value 和指標傳遞 pass by pointer c 語言中多了引用傳遞 pass by reference 由於引用傳遞的性質象指標傳遞,而使用方式卻象值傳遞,初學者常常迷惑不解,容易...