Anda di halaman 1dari 18

多工與中斷機制

陳鍾誠 2006 年 8 月 29 日
從 Java 到 組合語言

WORD sum 0
WORD i 0

LOAD R1, sum


int sum = 0; LOAD R2, i
LOOP COMP R2, 10
for (int i=0; i<10; i++) JGT EXIT
sum = sum + i; INC R2
ADD R1, R2, R1
JMP LOOP
EXIT STORE sum, R1
STORE i, R2
機器指令 ( 整合範例 – 組譯 )
位址 組合語言 機器語言

00 00 LOAD R1, sum 01 01 00 28


00 04 LOAD R2, i 01 02 00 2C
00 08 LOOP COMP R2, TEN 04 02 00 30
00 0C JGT EXIT 0A 00 00 1C
00 10 INC R2 1C 02 00 00
00 14 ADD R1, R2, R1 03 01 02 01
00 18 JMP LOOP 09 00 00 08
00 1C EXIT STORE R1, sum 02 01 00 28
00 20 STORE R2, i 02 02 00 2C
00 24 RETURN 00 00 00 00
00 28 WORD sum 0 00 00 00 00
00 2C WORD i 0 00 00 00 00
00 30 WORD TEN 10 00 00 00 0A
從 Java 到 組合語言

WORD INDEV 1
LOOP TD INDEV
System.in.read(); JEQ LOOP
RD INDEV
STCH DATA
從 Java 到 組合語言
BYTE b 0
SHORTc 0
WORD n 0
WORD i 1
WORD INDEV 1
byte b = (byte) System.in.read(); WORD OUTDEV
char c = (char) b; RD R1, INDEV
int n = c-'0'; STORE R1, n
for (int i=1; i<=n; i++) LOAD R2, i
System.out.println(i); LOOP COMP R2, n
WD R2, OUTDEV
JGT EXIT
INC R2
JMP LOOP
EXIT WRITE
讀取迴圈 Polling – 一直等到鍵盤輸入為止

LOOP TD INDEV READ => 21


JEQ LOOP R2 => 02
READ R2, Keyboard Keyboard => 00 02

ALU 暫存器
暫存器
( 加法器… ) R1 = 00000041
R1
R2 輸出埠 輸入埠
R2 = 01 0A
00 00
Control Unit IR =21 02 00 02 01 01
( 控製單元 ) PC
PC 02 02 00000041
03 03
04 04

註: 41 是‘ A’ 的 ASCII 碼
兩個程式以上 … , 不管用
LOOP TD INDEV READ => 21
JEQ LOOP R2 => 02
READ R2, Keyboard Keyboard => 00 02

Busy Waiting
會一直等到有輸入值,此時其
ALU 暫存器
暫存器 他程式無法用鍵盤
( 加法器… ) R1 = 00000041
R1
R2 輸出埠 輸入埠
R2 = 01 0A
00 00
Control Unit IR =21 02 00 02 01 01
( 控製單元 ) PC
PC 02 02 00000041
03 03
04 04
以下範例就是兩個以上的程式
目前電腦的真實情況…
 上網同時印表,此時另一個命令列正在等待輸

 甚至有人在這台電腦上灌了 WebServer, FTP


Server, Mail Server 還要提供程式給網路芳鄰
使用。
如何做到…
 不要使用 busy waiting 迴圈。

 改成使用中斷 ( 插斷 : Interrupt) 機制。

 當有人敲鍵盤時,產生中斷

 當網路有資料進來時,產生中斷
何謂中斷機制 ?
LOOP TD INDEV Call READ INDEV
JEQ LOOP
READ R2, Keyboard
不會 Busy Waiting
中斷後換其他程式執行,
Busy Waiting 直到鍵盤有輸入時,系統會回
會一直等到有輸入值,此時其
ALU 暫存器
暫存器 到這個地方,繼續執行下一行
他程式無法用鍵盤
( 加法器 …) R1 = 00000041
R1
R2 輸出埠 輸入埠
R2 = 01 0A
00 00
Control Unit IR =21 02 00 02 01 01
( 控製單元 ) PC
PC 02 02 00000041
03 03
04 04
中斷機制的原理
1. 必須靠硬體配合 Call READ INDEV
2. 輸出入裝置取得資料後會產生中斷
3. 中斷造成 CPU 跳到特定的程式 ( 稱為中斷程式 )
去執行,執行完後再將控制權交還給應用程式。
控制卡

ALU 暫存器
暫存器 中斷 ( 好了、可以來取了 )
( 加法器… ) R1 = 00000041
R1
R2 輸入埠
R2 = 01 0A
中斷處理程式
00
Control Unit IR =21 02 00 02 01
( 控製單元 ) PC
PC Memory 02 00000041
03
應用程式 04
加入中斷機制後 …
 電腦可以同時執行許多個程式。

 FTP 伺服器、網站
 開很多視窗
 一邊編寫程式一邊聽音樂…
但是 …
 這一切都還沒實現,因為:

 缺少了作業系統

 每個程式應該載入到哪裡執行呢 ?
 如果讓各個程式自行決定,程式的範圍重疊時就無法正確執行了。
 哪個程式先執行,哪個程式後執行 ?
 中斷後應該交由哪個程式執行?

 每個人都要寫一個磁碟控制程式嗎?
 如果如此、你在程式設計時只會看到硬碟、磁軌、讀寫頭的位置,不會
看到檔案系統 ( 因為、檔案不是一個裝置、硬碟才是 )
作業系統的功能
 行程管理 (Process Management)
 記憶體管理 (Main Memory Management)

 檔案管理 (File System)

 輸出入 (I/O) 系統管理 (IO System)

 輔助記憶體管理 (Secondary-Storage)

 安全性與保護 (Protection)

 命令解釋與執行 (Command Interpreter)


假如沒有作業系統
 各位可以試試看,把作業系統移除後嘗試使用電腦。

 開機完後就當了

 你必須先寫一個啟動程式,翻成機器碼,然後存到硬碟的啟
動區域 ( 怎麼存 ???)

 所以要改用光碟開機,先寫一個光碟啟動程式,然後燒到光
碟當中,由光碟開機後,再把硬碟啟動程式寫到硬碟中。

 這就是各位安裝 Windows , Linux 時所做的工作。


啟動程式的功能
 設定所有中斷程式的位 址 ( 稱為中斷向量 )

 載入所有預設的中斷程式

 將作業系統主程式的資料堆疊,程式堆疊,堆
積等結構配置好。

 開始執行作業系統的主程式。
進階課程
 計算機結構 – 電子系

 FPGA – 電子系

 單晶片控制實習 – 電子系

 嵌入式系統設計 ( 目前本校沒開,以後可能會
開在電資所 )

Anda mungkin juga menyukai