Computer-System Organization
系統開機或重新開機 :
1 . Bootstrap Program :
Bootstrap Program 存在 ROM 或者 firmware(韌體)中
他會起始系統所有現象 例如: CPU register.....
2 . Bootstrap Program 找到OS kernel,並載入 Memory
3 . Kernel 開始執行,等待事件發生
軟、硬體與OS溝通 :
Interrupt:
一件事件發生後,OS 會接收硬體發出來的 Interrupt
Cmd (command)
OS也可以下一些command 給硬體做一些動作
System call
OS 與 應用程式 的溝通介面 , OS接到應用軟體的system call ,會通知硬體作業些事情
Signal
OS用signal告訴應用程式哪些事情已經發生了
OS Operations :
A . AP2 送出 system call 給 OS 告訴 OS 他需要讀取資料
B. OS收到後傳送 CMD (1) 給硬體,較硬碟讀取資料
C. 為了不讓CPU閒著,做context switch 給 AP1,因此CPU做AP1 ,同時,硬碟做AP2
D. 硬體讀取完後,放到Buffer (2),硬體透過DMA把資料傳送到Memory裡面 (3)
E. 資料搬完後,硬碟傳送 interrupt 給 OS ,表示完成任務(4)
F. OS收到後把AP2設成ready,OS就會選擇比較重要的程式執行
Common Functions of Interrupts
Interrupt Vector Table:
儲存在memory裡面,OS 初始化會產生這個table
這個 table 就是一個 array of pointer ,這些pointer指向 interrupt service routine (ISR)
每個陣列的 index 都是裝置號碼
處理中斷時,要disable所有的interrupt,因為沒有這樣做程式會非常難寫
要把CPU中斷之前的狀態完整的存下來
EX:第2號中斷....
Step 1: 用IDTER找出Interrupt Vector Table 起始點,並往下數找到2號
Step 2: 要執行2號時,電腦系統會disable所有的interrupt
Step 3: 軟體硬體合作將CPU的狀態儲存起來
Step 4: 執行 ISR,CPU 把控制權直接跳到pointer指的地方
Step 5: 執行完後控制權再給OS
Q : Interrupt Vector Table 空間有限 ,但硬體卻很多怎辦 ?
Ans : use vectored interrupt + polling
可能好幾個device共用