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 由於引用傳遞的性質象指標傳遞,而使用方式卻象值傳遞,初學者常常迷惑不解,容易...