2008年9月24日 星期三

GUID (Globally unique identifiers)

GUID (Globally unique identifiers):
是一組用來定義包含電腦、程式元件、設備…等物件的唯一數值。
這些物件通常都包含了名稱,即使是這兩個物件有相同的名稱,或者是他們經過名稱變更…等,他們的GUID都仍是唯一的。
換句話說,一個物件的GUID與安全性原則中的SID是類似的。GUID遍佈在登錄檔當中,所以,你必須熟悉並且習慣他們。
所有的GUID,都有著相同有趣的格式,他們是16-byte,以8、4、4、4、及12為群組的16進位制數值(即0到9及A到F)。而每個群組值間以-及分隔,並以{}符號包裹。
如{645FF040-5081-101B-9F08-00AA002F954E}即為一組GUID數值,它代表在桌面上你可以看到的資源回收筒物件。
GUID {127A89AD-C4E3-D411-BDC8-001083FDCE08}則代表在我實驗室裡的一台電腦。
程式設計人員通常都會使用名為Guidgen.exe的工具來製造GUID值,但是Windows XP本身也會製造它們。不管來源為何,Microsoft都保證GUID是全球唯一的值。
不管Guidgen.exe或者是Windows XP產生GUID多少次,結果都是唯一(unique)。
而這也是為什麼用GUID來驗證如電腦、裝置及任何東西的原因。

Author: 常世勳

DOS/4GW

Watcom C/C++ 透過 DOS/4GW 這個 Dos Extender 可以存取到傳統記憶體以外的記憶體空間,但是它讓我們依然可以直接存取DOS 1MB以內的記憶體位址 , 所以我們可以照常把資料直接寫入顯示記憶體不成問題, 另外 , 呼叫中斷也都一如往常 , 所以我們幾乎感覺不到進入保護模式的一些麻煩與痛苦 , 但是卻可以享有更多的記憶體 與 幾乎不變的程式寫法 .

Author: 常世勳

Preemptive & Non-preemptive , Cooperative Multitasking

Author: 常世勳

先佔式多工(Preemptive Multitasking)
也就是所謂「優先權式多工」或是「先佔式多工」。
在這種模式底下,每個程式的執行時間係由「作業系統」來分配,一個程式的時間使用完之後,系統就會將CPU分配給下一個程式(這種動作稱為context switching),沒有一個程式能獨佔CPU。
這類作業系統較常見的有Windows NT、OS/2,而Windows 95則無法對於16-bit的應用程式做到優先權式多工,至於32-bit應用程式,則不一定是哪種多工模式。
Cooperative Multitasking, Cooperative Multitasking, OS 協同式多工:
一種多工 (multitasking) 的作業方式,每一個行程 (process) 必須提供其他行程使用處理器 (processor) 的機會,使每一個程式都能被處理器執行來達到多工的作業,作業系統 (OS) 在這種方式下扮演的角色只是輔助管理與分配程式間的處理器使用時間,若是一個程式佔據處理器時間不放,則其他程式包括作業系統都沒有機會來執行,且一個當掉或設計有問題的程式可能會使得整個系統當掉。
相對於協同式多工,先佔式多工 (Preemptive Multitasking) 則由作業系統主動分配執行時間給行程或程式,不管行程是否發生問題都能夠維持其他程式不被影響,作業系統並能夠有機會解決有問題的程式。


以JAVA執行緒的時間排程為例:
可奪取優先權 ( preemptive ) :
所有的執行緒皆被給定固定的執行時間, 執行時間使用完畢, 便暫停執行緒的執行。 排成器從等待執行的執行緒中, 挑出優先權最高的執行緒, 將其恢復執行。
不可奪取優先權 ( non-preemptive ) :
執行緒擁有所有 CPU 的執行時間, 任由其個別使用。 只有在呼叫成員方法 yield ( ) 等才可以強制排成器 ( scheduler ) 更換下一個執行緒使用 CPU 時間。

Rundll32.exe

Author: 常世勳

在Windows中使用了許多動態連接庫, 這樣就使得所有Windows程序都可共享這些動態連接庫中的函數, 許多應用程式都通過 Windows API 來操作這些函數,
但實際上是透過 Windows 資料夾下的 rundll32.exe 程序來啟動對應的函數。它的用法是:「rundll32.exe 動態連接庫名,函數名,參數名」

Control Panel:
rundll32.exe shell32.dll,Control_RunDLL

Display:
rundll32.exe shell32.dll,Control_RunDLL desk.cpl

Keyboard:
rundll32.exe shell32.dll,Control_RunDLL main.cpl @1

Keyboard Tab 2:
rundll32.exe shell32.dll,Control_RunDLL main.cpl @1,1

Printer:
rundll32.exe shell32.dll,Control_RunDLL main.cpl @2

Font:
rundll32.exe shell32.dll,Control_RunDLL main.cpl @3

Input for 95/98:
rundll32.exe shell32.dll,Control_RunDLL main.cpl @4

Input for NT:
rundll32.exe shell32.dll,Control_RunDLL cime.cpl

Regional and Language:
rundll32.exe shell32.dll,Control_RunDLL Intl.cpl,,2

Accessibility:
rundll32.exe shell32.dll,Control_RunDLL Access.cpl

Add / Remove Program:
rundll32.exe shell32.dll,Control_RunDLL Appwiz.cpl

Display:
rundll32.exe shell32.dll,Control_RunDLL Desk.cpl

Internet:
rundll32.exe shell32.dll,Control_RunDLL Intetcpl.cpl

Regional and Language:
rundll32.exe shell32.dll,Control_RunDLL Intl.cpl

Game Controller:
rundll32.exe shell32.dll,Control_RunDLL Joy.cpl

Mouse:
rundll32.exe shell32.dll,Control_RunDLL Main.cpl

Sounds and Audio Device:
rundll32.exe shell32.dll,Control_RunDLL Mmsys.cpl

Modem:
rundll32.exe shell32.dll,Control_RunDLL Modem.cpl

Network:
rundll32.exe shell32.dll,Control_RunDLL Netcpl.cpl

32-bit ODBC:
rundll32.exe shell32.dll,Control_RunDLL Odbccp32.cpl

Password:
rundll32.exe shell32.dll,Control_RunDLL Password.cpl

System:
rundll32.exe shell32.dll,Control_RunDLL Sysdm.cpl

Date / Time:
rundll32.exe shell32.dll,Control_RunDLL Timedate.cpl

Add Hardware:
rundll32.exe shell32.dll,Control_RunDLL Hdwwiz.cpl

Network Connection:
rundll32.exe shell32.dll,Control_RunDLL Ncpa.cpl

User Account:
rundll32.exe shell32.dll,Control_RunDLL Nusrmgr.cpl

Power:
rundll32.exe shell32.dll,Control_RunDLL Powercfg.cpl

#if #define if

#if ............. For preposser(前置處理器)
#end if

#define JAVA 300 ...... For preposser(前置處理器)

if ............. For compiler

例:
#define DEBUG

#if DEBUG
printf("hello");
#endif


Author: 常世勳

2008年9月22日 星期一

CPU C3 and C4之進入及離開

作者: 常世勳

C3 (Deep Sleep):
Entry Method:STPCLK# , SLP#, DPSLP# asserted
Exit method:Chipset break event

C4 (Deeper Sleep):
Entry Method:STPCLK# , SLP#, SPSLP# assertedLower power voltage
Exit method:Chipset break event

How to get current CPU Microcode ID

作者: 常世勳

Sample code:

Mov ecx, 08Bh
Xor eax, eax
Xor edx, edx
WRMSR
Mov eax, 1
CPUID
Mov ecx, 08Bh
RDMSR

Will be place in EDX.

If there is an update currently active in the processor, it’s update revision is
returned in the EDX register after RDMSR instruction has completed.

讀MSR

讀MSR: 作者: 常世勳

Tool: Debug32

-a 100
-mov ecx,ee
-rdmsr
-int3
-
-p
-p
-p
-r32

MSR讀回來的值會放在 EAX,ECX (一個是存放高位址,另一個是存放低位址)
-------------------------------------------------------------------------------
RDMSR: Load MSR specified by ECX into EDX:EAX
WRMSR: Write the value in EDX:EAX to MSR specified by ECX

RDMSR: 讀取 MSR - Model-Specific Registers
WDMSR: 寫入 MSR

Smart battery 

Smart battery 
電池的一種規格,早期的電池無法提供本身的資訊,例如電池存餘量、電壓等, 系統也無法取得準確的電池容量。所以 Intel 和 Duracell 合作開發了 Smart battery System規格,多了兩個信號線來和系統溝通,達到精確檢測電池壽命刻度。
這兩個信號線的通訊協定稱之為「System Management Bus」。電池多了這個功能後便可和系統,充電器互作溝通。於是系統或充電器便可了解電池當時的電壓、電流何時可以充完、電池可以充多少的電、何時電池會耗盡等訊息,而且準確率可達 98%以上。

Device/Chipset的resource(IO Port,Memory,IRQ)在 BIOS POST與進入OS之後會有何差異

作者:常世勳

Device/Chipset的resource(IO Port,Memory,IRQ)在 BIOS POST與進入OS之後會有何差異:

IO Port:一般仍是維持與POST時所定義的IO Port相同,因為OS不會知道關於Chipset的IO Port要使用什麼樣的setting,所以OS不會去重新針對IO Port做洗牌(re-assign)
Memory: 若是你有宣告為Mother board resource的Memory area,則OS便不會去re-assign這些已被宣告為Mother board resource的Memory area給其他的device使用(宣告為Mother board resource的Memory address一般都是chipset或其他的controller在BIOS POST時已assign好了,所以這些Chipset/controller的memoryresource在進入Windows之後是不能再去讓OS重新assign不同的memory address)其它沒宣告為Mother board resource的Memory address則會被OS重新洗牌,re-assign一次.
IRQ: 近入Windows之後,IRQ便會使用我們BIOS在ASL Code內所定義的IRQ resource(APIC Mode或PIC Mode之IRQ resource定義方法會不一樣)

POST時,BIOS存DATA的方法

作者:常世勳

因為POST時,當BIOS被Shadow至F000後,BIOS會去設定Chipset將此段區間(F000,E000..如果BIOS COde也有被shadow至E000的話)設為Read only,以防止BIOS Code被破壞.
所以若想要在BIOS Post過程去儲存一些我們OEM會用到的資料或設定OEM的變數,有以下三種方法:
1.CMOS
2.BIOS Data Area (40 Data Area)
3.PM segment (A000,B000)...SM Ram...藉由發software SMI去執行一段我們自己的code去儲存資料於SM RAM .
PS: 需注意:我們加的這段CODE要在SMI init即VGA init之後(可由posttbl.asm去查詢),否則會有問題.
4.Flash part, 例如UEFI BIOS所使用的variable是存放在flash part內的,在UEFI的spec中,是已捨棄CMOS,而改為使用flash part來當做storage;當然這部份仍需視每家BIOS vednor的實作而定,例如Phoenix的Benton BIOS是CMOS及flash part都會使用到的.

什麼是 CRC

CRC 錯誤偵測技術 作者:常世勳
即是所謂的循環冗餘檢查碼 (Cyclic Redundancy Check Code) ,簡稱 CRC 碼,它是由待傳輸的資料區塊計算出的,CRC 的計算方式是將待傳 輸的區塊視為一堆連續位元所構成的一整個數值,並將此數值除以一特 定的除數,通常以二進位表示,此除數又稱為衍生多項式 (Generation Polynomial),該除數一般皆由設計硬體或軟體的廠商所提供,而除數 值位元數目則視欲得到的 CRC 位元數目而定,目前較常使用的 CRC 位 元數目有 8、16 或 32,一般縮寫為 CRC-8、CRC-16、CRC-32,通常, CRC 碼越長,則數據發生干擾卻不反應在 CRC 值的機率也就越低,不 過得多花些時間傳送較長的 CRC 碼。根據理論統計,CRC-16 可完全偵 測資料區塊內單一或兩個位元的錯誤、奇數個位元的錯誤、連續 16 個 位元或少於此數的錯誤,超過 17 個連續位元的錯誤偵測率則有 99.9969% ,其它位元長度的錯誤偵測率則可達 99.9984% 。 底下是一些數學符號所表示的 CRC 碼運算過程。吾人可將待傳送的區 塊資料位元串表示成一個很大的二進位數字,並令此數字等於 F,例如 ,底下是某個區塊的位元串所連成的二進位數字:
F = 1011010111110111101110100100101110101... (區塊資料)
假設目前欲求 F 的 16 位元 CRC 值,並且,廠商所提供的衍生多項式 是:
16 12 5 G(x) = x + x + x + 1 (衍生多項式)
其中,x 是所採的進制,在二進位系統,x = 2,則 G 的值為:
G = 1,0001,0000,0010,0001 (二進位數字)
底下的式子中的餘數 C 即是 F 的 16 位元 CRC 值:
16 F ‧ 2 = A ‧ G + C
由於 C 是此式中的餘式,故稱此值為 Redundancy。 例如,底下即是透過上述的 G(x) 求得 11010101 (D5H) 的 CRC 值: A ┌───────────────── 1,0001,0000,0010,0001│1101,0101 ‧ 1,0000,0000,0000,0000 ╯...... ────────────────── (二進位長除法) 16 位元 CRC 值 → 1001,1011,1101,1000
衍生多項式的數值將影響到所產生的 CRC 值,根據理論計算,當衍生 多項式的數值恰為某些特定值時,所產生的 CRC 值最 "亂" ,換句話 說,它偵測資料受雜訊干擾的能力越高,在上個範例中所採用的多項 式也是 PC/XT 控制卡上μPD765A 所採用,該多項式也是 CRC-CCITT v.41 所制定的標準,而目前在許多通訊上的應用亦採用此值。 理論上,在計算 CRC 時非常簡單,只要一個除法運算即可,運算之後 的餘數即是 CRC 值,但實際上所被除數 F 的位元數目可能以萬為單 位,如何利用程式以最簡易、最快的方式求得該餘數也是技術關鍵所 在。事實上,各式的檢查碼也不僅應用在網路通訊上,和數據的存取 、儲存、傳輸等類似的範疇也會用到,例如磁碟片或磁帶機上資料的 儲存即是,在 Apple 個人電腦的磁碟機即是利用 checksum 驗證所存 取資料的正確性,而 PC 的磁碟機則使用 CRC。

淺談硬碟控制介面與硬碟

淺談硬碟控制介面與硬碟
到目前為止,硬碟仍是大容量儲存裝置中效能與價格最理想的儲 存設備。但是,控制介面的效能(Performance)與連接能力 (Connectivity)如何(能接幾顆硬碟)?以及,就一顆硬碟而言,系 統所能存取的最大容量是多少?一個分割區(Partition)最大是多少 ?...等等考量,都是使用者在選擇硬碟,並考慮其與硬碟控制 介面卡及作業系統三者的搭配時,所必須仔細思考的問題。
圖一為DOS系統經由INT 13H中斷呼叫存取IDE或SCSI硬碟的模型, 以下筆者將藉由此一模型來說明上述的問題。
┌───┐ INT 13H│ │←→BIOS←→ATA←→IDE DISK DOS←──→│DEVICE│ │DRIVER│ │ │←→SCSI BIOS←─→SCSI DISK └───┘
圖一 DOS呼叫INT 13H存取IDE或SCSI硬碟
IDE控制介面
IDE是Integrated Drive Electronics的簡稱,它是Computer Association of Manufactures所發展的一種叫ATA(AT Attachement)的規範。這是一種直接將週邊裝置的控制器放在週邊 裝置上,也就是說把控制硬碟的電子電路整合在硬碟中,而介面卡 上只有簡單的緩衝器及傳輸控制邏輯的設計。如此,就可簡化介面 卡的線路,進而加快傳輸速率並降低製造成本。其最大傳輸速率為 3.33M Bytes/Sec。
IDE控制介面是以CHS(Cylinder-Head-Sector)的方式定址,並且 是以16-bit 代表cylinders,4-bit代表heads,8-bit代表sectors ,所以這種ATA/IDE介面最多可驅動65536 cylinders,16 heads與 255 sectors。另外,BIOS是以 10-bit代表cylinders,8-bit代表 heads,6-bit代表sectors,所以最多可驅動1024 cylinders,255 heads與63 sectors。根據圖一,當DOS使用INT 13H服務程式時,實 際上所能驅動的CHS數目及最大容量將如表一所示。
------------------------------------------------- ATA/IDE BIOS COMPROMISE ------------------------------------------------- 最多Sectors/Track 255 63 63 Head數 16 255 16 Cylinder數 65536 1024 1024 最大容量 127.5GB 7.84GB 504MB -------------------------------------------------
表一  BIOS以CHS閬所能存取硬碟的最大容量
而在連接能力方面,IDE控制介面提供一個IDE prot ,該port最 多只可串接兩個IDE裝置。
Enhanced IDE控制介面
Enhanced IDE控制介面就是ATA-2控制介面。此介面改用 LBA(Logical Block Addressing)的方式定址,也就是將CHS的定址 方式依下列的轉換演算法( Translation Algorithm)轉換為邏輯區 塊的定址方式。 LBA=[(cylinder * heads_per_cylinder + heads)* sectors_per_track] + (sector-1)
請注意:ATA/IDE與BIOS都把自己的CHS定址方式轉換成LBA定址方 式,透過LBA 建立ATA/IDE與BIOS溝通的橋樑,而非如前述ATA/IDE 與BIOS各自拿著自己的CHS不放,那只好走上衝突與妥協一途。
LBA使用28bit管理硬碟上的每一個位置(就是sector),所以最大 可以管理到 128GB(約228 sectors)的容量。把ATA/IDE與BIOS個別 的最大CHS轉換成LBA ,或由表一的最大容量即可看出,若ATA/IDE 與BIOS皆以LBA方式定址,則 IDE單顆硬碟的最大容量為7.84GB,瓶 頸還是出在BIOS。
Enhanced IDE控制介面的四個特點(當然要作業系統及BIOS都支援 )如下:
‧高容量位址(High Capacity Addressing): 以LBA的方式定址,可存取硬碟大於528MB。 ‧高資料傳輸率(Fast Data Transfer Rate): 資料傳輸模式為PIO(Programmed I/O) Mode 3或Multi-word DMA Mode 1 ,PIO Mode 3的資料傳輸率為11.1MByte/sec,而 Multiword DMA Mode 1 為13.3MByte/sec,BIOS必須支援至少 其中一種傳輸模式,並且作業系統也要支援才行(所謂傳輸模式 即驅動硬碟的方式,容後說明)。
‧兩個IDE port(Dual ATA Host Adapter): 提供第二個IDE port,且使用IRQ15。
‧非硬碟的ATA週邊 (Non-Hard Disc ATA Peripherals): 對非硬碟的ATA週邊設備如光碟機、磁帶機,為支援ATA-2的傳 輸速度,因此制訂一種叫ATAPI(AT Attachement Peripheral Interface)的規範。
PIO Mode與DMA Mode(Bus Master)驅動方式
簡單的說,PIO(Programmed I/O)就是硬碟與記憶體之間的存取動 作完全由 CPU控制,亦即,每一個大大小小的動作都必須經由CPU才 能完成,如果是區塊資料傳送,那就更耗CPU時間。其動作原理如圖 二所示:
HOST ┌───┐ ┌─────┐ CONTROL ┌────┐ ┌→│DISK1 │ │ │─────→│ │ │ └───┘ │Port 1F0h-│ DATA │ │←┤ │ 1F7h │←────→│ │ │ ┌───┐ └─────┘ └────┘ └→│DISK2 │ ↑ AT I/O BUS AT HD └───┘ │ ADAPTER ↓ ┌────┐ │ RAM │ │ │ └────┘ 圖二  Programmed I/O
所以,當硬碟在動作時,系統的效能就會明顯地慢下來,而所謂 的背景工作也就難以執行,因此以PIO模式較適用在單工的場合。早 期的SCSI介面卡也是採用 PIO的傳輸架構,如Future Domain的 TMC-1680、Adaptec的AHA-1522。表二列出PIO驅動模式的速率 (Tranfer Rate)、週期時間(I/O Cycle time)及規格。
--------------------------------------------------- PIO模式 Mode-0 Mode-1 Mode-2 Mode-3 Mode-4 --------------------------------------------------- 速率(MB/s) 3.33 5.22 8.33 11.1 16.67 週期(ns) 600 383 240 180 120 規格 ATA ATA ATA ATA-2 ATA-2 ---------------------------------------------------
表二  PIO傳送模式
DMA(Direct Memory Acces)是為直接記憶存取,正如其字面上的 意思,DMA 模式的存取使得硬碟與記憶體之間溝通與傳輸作業,絕 大部分由硬碟本身與驅動程式共同完成,兩者間的許多溝通與控制 作業不再需要透過CPU來管理,所以硬碟在動作時,不會像PIO方式 佔住CPU。其動作原理如圖三所示:
HOST ┌───┐ ┌────┐ CONTROL ┌─────┐ ┌→│ DISK1│ │ │─────→│ │ │ └───┘ │ │ │DMA │←┤ │ │ │CONTROLLER│ │ ┌───┐ └────┘ └─────┘ └→│ DISK2│ ↑ AT HD └───┘ │ AT I/O BUS ADAPTER ↓ ↑ ┌────┐ DATA │ │ RAM │←────────┘ │ │ └────┘
圖三  DMA(Bus Master)
SCSI卡後來大多走DMA的驅動方式,新一代的硬碟也都支援DMA方 式的驅動。表三列出DMA的傳送模式,但它只是理論值,畢竟整個硬 碟在資料的傳輸過程中,每一個環節都會有所延遲,所以理想資料 傳輸率是不可能達到的。
┌─────────────────┬───────────┐ │ Single-word DMA │ Multi-word DMA │ │DMA模式 Mode-0 Mode-1 Mode-2 │Mode-0 Mode-1 Mode-2│ ├─────────────────┼───────────┤ │速率(MB/s) 2.08 4.17 8.33 │ 4.17 13.3 16.67│ │週期(ns) 960 480 240 │ 480 150 120 │ │規格 ATA ATA ATA │ ATA ATA-2 ATA-2│ └─────────────────┴───────────┘
表三  DMA傳送模式
在DOS/Windows等單工的環境下比較看不出PIO與DMA方式驅動的差 異,但對多工系統如Linux、Windows 95/NT、OS/2等,DMA所強調的 就是在硬碟動作時節省CPU時間,好讓CPU可以執行其它運算。例如 ,以軟體播放MPEG/Viedo-CD電影,若採DMA方式,則一方面系統由 硬碟讀取壓縮檔進記憶體,CPU同時可以有更多的時間作解壓縮的動 作,因此播放起來會順暢許多,據了解,486DX2-66/8MB RAM就可以 直接播放了。雖然硬碟已支援DAM方式的存取,當然IDE介面卡也要 支援DMA方式驅動才可,並且主機板也要支援,再加上驅動程式,就 可以展現高性能的硬碟與高效益的系統。486後期的主機板及新一代 Pentium主機板已都是所謂的On board EIDE,也就是說這些主機板 所採用的控制晶片組(Control ChipSet),如TRITON、SiS、UMC、 VIA、OPTi等等的晶片組都已內含EIDE介面,所以只要依所使用的作 業系統安裝驅動程式即可。
SCSI控制介面
SCSI全名為Small Computer System Interface,是小型電腦系統 介面的意思,APPLE及PC先後採用SCSI介面。一台PC可以同時插上幾 片SCSI卡,而一片SCSI卡最多可以串接7個SCSI週邊裝置,含卡本身 這一SCSI串(SCSI chain) 上最多有8個裝置(SCSI-3可同時使用16個 SCSI設備),在SCSI串的兩端要加上終端電阻器(terminator),且 SCSI串的長度不能太長。SCSI控制介面大多採用Bus Master DMA模 式,ATA-2使用的DMA模式與此相類似,不過SCSI卡對 SCSI週邊的多 工I/O能力是ATA-2控制卡所無能為力的,尤其在真正的多工系統中 ,更能顯現出SCSI介面的威力。其動作原理如圖四。
HOST ┌───┐ ┌────┐ CONTROL ┌─────┐ ┌→│ DISK1│ │ │─────→│ │ │ └───┘ │ │ │DMA │←┤SCSI BUS │ │ │CONTROLLER│ │ ┌───┐ └────┘ └─────┘ └→│ DISK2│ ↑ SCSI HOST └───┘ │ AT I/O BUS ADAPTER ↓ ↑ ┌────┐ DATA │ │ RAM │←────────┘ │ │ └────┘
圖四 DMA(Bus Master)
SCSI-2僅提供以8bit方式傳輸資料,其傳輸速率為 10MB/sec(SCSI-1只有 5MB/sec),後來又有所謂SCSI Fast或稱為 SCSI Fast Wide的規格,它提供 16bit的傳輸頻寬,因此傳輸速率 可達20MB/sec。SCSI-3(或俗稱Ultra SCSI 或Ultra Wide SCSI)的 傳輸速率在8bit狀態下為20MB/sec,在16bit狀態下傳輸速率達 40MB/sec,如果SCSI BIOS能將雙工傳輸速率設為40MB/sec那麼該卡 就是符合較新之規格的SCSI卡。不過由於Ultra SCSI這個名詞已為 美國一家UltraStor公司登記,其正式名稱不能再使用它,因而改稱 SCSI Fast-20 (因其傳輸速率而來)。SCSI-1卡的外部連接器一般為 25pin,但不論是SCSI-1 內部或SCSI-2其連接器皆為50pin,SCSI Fast-20之連接器則為68pin;而麥金塔的SCSI為25pin。由於SCSI介 面的強大擴充力、傳輸效率與更重要的多工I/O頻道,所以許多週邊 設備如,SCSI硬碟、可讀寫光碟機(MO)、唯讀光碟機 (CD-ROM)、燒 錄機(CD-R)、磁帶機(Tape)、雷射印表機、掃描器、數位錄音帶 (DAT)等都支援SCSI介面。
大多數PC的系統BIOS是不支援SCSI硬碟的,因此大多數的SCSI週 邊裝置控制卡上都有自己的BIOS ROM,開機時BIOS ROM會被安置於 系統中,所以INT 13H 會被攔截至SCSI卡上的BIOS(許多病毒不就是 玩這種把戲),也就是說,所有DOS 磁碟呼叫都會先傳到SCSI卡上的 BIOS,以上所述就是圖一下半部的意義。SCSI 卡上的BIOS的大部份 功能,也可以由存在系統記憶體中的驅動程式來處理,因此,欲直 接由SCSI硬碟開機,SCSI卡上的BIOS是免不了的,且主機板上的 BIOS也要支援由SCSI硬碟開機才可。另外,SCSI介面視SCSI硬碟上 的CHS為一連續性的邏輯區塊,也就是前述的LBA區塊,那麼SCSI卡 上的BIOS最大能夠轉換多少CHS成LBA呢?只知道比7.84GB大很多。
SCSI介面最讓使用者困擾的莫過於相容性的問題。譬如CD-ROM、 磁帶機各有其所附的驅動程式,但是這兩個驅動程式能否在相同的 SCSI卡上動作,是誰也不敢保證的。因此,大家意識到需要有一個 通用的軟體協定,而在這場SCSI 協定之爭中,有三項標準被提出, 它們是:由Microsoft主導的LADDR;由ANSI 所制訂的CAM;由 Adaptec所制訂的ASPI,而ASPI已成為市場主流。基本上,ASPI (Adaptec(Advanced) SCSI Programming Interface)將SCSI軟體區 分成兩個模組,即ASPI Manager(供SCSI卡使用),及ASPI裝置驅動 模組(供SCSI裝置使用的驅動程式)。ASPI Manager只針對卡的I/O做 處理,它會處理卡的硬體資源並提供一個軟體介面,給ASPI裝置驅 動程式使用。所以ASPI裝置驅動程式透過 ASPI Manager與SCSI卡的 驅動程式溝通,讓ASPI裝置驅動程式與硬體獨立開來。通常支援 ASPI Manager的SCSI卡,所提供的驅動程式就已包含ASPI Manager 。圖五描述應用程式、ASPI裝置驅動程式、ASPI Manager及SCSI卡 間的關係。
┌────────────┐ │ APPLICATION │ └────────────┘ ↑ ↑ ↓ ↓ ┌───────┐ ┌───────┐ │ Dev. Driver1 │ │ Dev. Driver2 │ └───────┘ └───────┘ ↑ ↑ ↓ ↓ ┌─────────────┐ │ ASPI MANAGER │ ├─────────────┤ │ Adapter Driver │ └─────────────┘ ↑ ┌───┐ ↓ ┌→│ Dev.1│ ┌────────────┐ │ └───┘ │ SCSI Host Adapter │←→│ └────────────┘ │ ┌───┐ └→│ Dev.2│ └───┘
圖五 ASPI MANGER
Win95/NT、Linux、OS/2等系統似乎沒有上述所謂"通用的軟體協 定"的觀念,也就是說圖五中使少掉ASPI MANAGER那層。
Parallel Port控制介面
接在Parallel Port介面上的裝置最常見的莫過於印表機了。除此 之外,行動碟(Portable Disk或Pocket HD)、ZIP、磁帶機等裝置也 都是走Parallel Port 的。Parallel Port有三種規格分別是:
‧SPP SPP是Standard Printer Port的簡稱,是一個8位元雙向的標準 印表機埠,傳輸速率約為80KB/sec到150KB/sec(單倍速CD-ROM 的速度為150KB/sec)。
‧EPP EPP是Enhanced Printer Port的簡寫,這是一個加強式的印表 機埠,其傳輸速率可達2MB/sec,EIDE卡上的Printer Port或on board EIDE主機板上的Printer Port都支援EPP/ECP規格。目前 大多串接在 Printer Port上的裝置,也大多支援到EPP規格的 速度。
‧ECP ECP是Enhanced Capability Port的簡寫,由Microsoft與HP共 同制訂的規格,主要作為PC與印表機的雙向連接埠,傳輸速率 可達 4MB/sec。
走Printer Port的外接式IDE硬碟、IDE光碟機,聽起來似乎怪怪 的,IDE裝置怎麼與Parallel Port連接?其實IDE還是IDE,Printer Port還是Printer Port ,只是在外接盒上有一個轉換介面,當做 Printer Port介面與IDE介面的轉換。目前市面上有可接一個或兩個 IDE週邊的外接盒約2500元,若安裝一顆1.7GB IDE硬碟(約6000元) ,及12x IDE光碟機(約2700元),總共約11200元,與一顆 1GB的行 動碟約10000元比較,雖然速率因為不同介面間轉換而會慢一點,可 是就價錢與方便性來說也是值得投資的。
分割區(Partition)及配置單位(Allocation Unit)的大小與效率 的關係
硬碟必須先進行分割,再製作該作業系統的檔案系統,才能為作 業系統所用。而在PC上一顆硬碟最多只能分割成4個分割區,並且只 能是4個主要(Primary) 分割區,或是3個主要分割區及1個延伸 (Extended)分割區。作業系統本身都會提供如DOS的FDISK的硬碟分 割程式,但是由DOS的FDISK所劃分出的分割區,受限於當初的定義 (FAT16),一個分割區最大只能分割出65536乘以32KBytes =2048MB 的分割區,所以一顆硬碟DOS的FDISK所能分割出的總容量為8.192GB ,而不幸的是BIOS所能處理的最大容量卻只有7.84GB。Linux或OS/2 的FDISK 所能劃分出的分割區的大小當然還是有限制,但到底多大 ?請教過幾位高手還是得不到確切的答案,不過8、9GB是沒問題的 。
FAT16是DOS的一種檔案系統,Windows 95的檔案系統雖為VFAT, 但其使用的磁區分配格式與FAT16檔案系統相同。FAT16準備了 216=65536個指標用來指向磁碟上存取的最小單位-配置單位(或稱 為磁簇-cluster),並且磁簇的大小是固定的。假設一個磁簇的大 小為4k,如果將一個1k的檔案儲存到硬碟時,此檔案未能佔滿整個 磁簇而所剩下的空間稱為磁簇懸垂(cluster overhang)。小檔案越 多或磁簇越大此現象就越明顯,硬碟上浪費的空間就越多。所以分 割區的大小決定了磁簇的大小,表四列出FAT與VFAT分割區大小與磁 簇大小的關係。
---------------------------------- Partition ClusterSize ---------------------------------- 16MB -127MB 2k 128MB -255MB 4k 256MB -511MB 8k 512MB -1023MB 16k 1G -2047MB 32k 2G -4095MB 64k ----------------------------------
表四 分割區大小與磁簇的關係
Windows NT的NTFS檔案系統限制不論分割區的大小,磁簇的大小 都是4k。 OS/2的HPFS則沒有限制磁簇的大小。Windows 95 OSR2提 供了新的磁碟管理格式FAT32,並且OSR2所提供的FDISK單一分割區 最大為2TeraBytes,不過 FAT32與NTFS及HPFS一樣彼此是不相容的 。
現在的硬碟動輒2GB(十進位)以上,並且裝上兩三個作業系統也是 很平常的事,但是要啟動(boot)那個作業系統,若沒有一個管理者 似乎有些不方便。因此像OS/2就提供一個叫啟動管理員(Boot Manager)的啟動管理程式,這個啟動管理員佔去一個1或2MB的主分 割區,但又不會使用Drive Letter,用起來還蠻方便的。可是如果 四個分割區都用掉了,那不就沒地方裝啟動管理員了?沒錯,這時候 只好在MBR(Master Boot Record)處動手腳,例如System Commander(這是要錢的)或是Linux的LILO就可以處理這個問題。不 管有幾個需要被指定為"C:"才能啟動的主分割區,或者系統是安裝 在邏輯磁碟上,都可由System Commander啟動。
結語
單就傳輸速率的數據來看EIDE控制介面,似乎不輸給SCSI控制介 面,可是SCSI 控制介面的多工能力卻是EIDE所不及的。從價位上也 可看出其間的差別(EIDE 大約值幾百塊,SCSI-2卡最低價位也要兩 千塊左右);同容量的硬碟的價錢,SCSI 大約是EIDE的1.5到2.5倍 。高階應用方面,如檔案伺服器、工作站、主機等,一般均為多用 戶的多工作業環境,必須同時處理大量資料的輸出輸入動作者,大 多採用SCSI控制介面。然而EDIE也是有其較低價位的優點,只要使 用者要求不是太多,並且善用其DMA的特性,其實還是很迷人的啦。

SCSI 和 IDE 之比較

SCSI 和 IDE 之比較
IDE 的優點有:
1. 較快的反應時間(Response Time)。
2. IDE 控制卡及硬碟較便宜。
3. 系統 BIOS 即有支援,所以在 IDE 控制卡上不必有自己的 BIOS。
4. 當和 SCSI 混用時,一般 IDE 的硬碟會被設為開機碟。
SCSI 的優點有:
1. 可以支援七個不同的裝置 (如CD-ROM,硬碟,MO...),所以省下了 DMA 和 IRQ
以及插槽。
2. SCSI 支援多種電腦系統,如 PC ,麥金塔,SPARC 工作站和大型主機 Mainframes,
所以如果系統更換作業平台,SCSI 裝置還是可以用。
3. SCSI 可以自動設定所連接裝置的型態,大小,速度甚至型號
(SCSI-2中有提供此功能),所以不須到 CMOS 中設定。
4. 具備了匯流排 DMA 的功能,有效的減低 CPU 及 I/O 的負擔,因此大大的增加
系統效能,但在一般非多工的系統上並不能顯示出此優點,但隨著 WIN-95的出現,
使得這個功能很具備價值。
5. 軟體的可攜性高,也就是說其驅動程式是為規格一致的介面卡所寫,所以如果
你有一個 SCSI 掃瞄器的驅動程式,你可以買任何廠牌的掃瞄器。
6. 可以和其它的介面卡一起使用,而不會佔用這些卡的 IO 埠位址。
7. 允許系統對 SCSI 卡的不同裝置在同一時間動作,所以有較大的頻寬。


IDE 介面卡和 SCSI 介面卡的比較
我們的 PC 中,一共只可以有兩張磁碟的控制卡,但 SCSI,嚴格來說不算是磁碟的控制卡,
因為在其硬牒上裝有控制器,而且有自己的 BIOS,它看成是像網路卡中的主從式轉接卡
(HOST ADAPTER)。所以說,SCSI 可以與任何一種控制卡並存。
但是當 SCSI 與其他的磁碟控制卡或是 HOST ADAPTER 同時存在時 (如IDE卡),
則開機磁碟必須是 IDE 的磁碟,而不能是 SCSI 的磁碟。因為 IDE 會先被偵測到。
但還是有辦法打開這個限制,例如用所謂的開機管理程式 (BOOT Manager),
這種開機管理程式其實就是放一個程式在開機磁碟中的開機區中,而開機峙,可以由
使用者選擇要從那一個磁碟的分割中去啟動,而這個程式就會跳到使用者所選擇的磁碟上
執行該分割的作業系統,也可以指定 SCSI 的硬碟開機。
目前市面上已經有生產幾款的主機板其 BIOS 有提供不同的開機磁碟,包括SCSI。
各種 SCSI 界面之傳輸速度 --------------------------------------------------------------------- 各種SCSI名稱 Data Bus Width Bus MHZ MaxSpeed MBytes/sec--------------------------------------------------------------------- SCSI-1 8 3
SCSI-2 8 5 5
Fast SCSI-2 8 10 10
Fast and Wide 16 10 20 SCSI-2
Ultra SCSI 8 or 16 20 20 or 40
SCSI 介面規格比較表傳輸位元 最大傳輸速率 支援裝置數 外接頭型式 傳輸線長度 介面
SCSI-1 8 5 MB/S 8 50 Pin(大) 6 M ISA
fast-SCSI 8 10 MB/S 8 50 Pin(小) 6 M ISA,VESA/PCI
Wide-SCSI 16 20 MB/S 16 68 Pin(小) 6 M PCI
Utra-SCSI 8 20 MB/S 16 50 Pin(小) 3 M ISA,VESA,PCI
Utra Wide 16 40 MB/S 16 68 Pin(小) 3 M PCI-SCIS

HOOK, HOOKJ, JMP

作者:常世勳

因stack是要使用memory來實現的,所以在Memory尚未init之前,stack是無法使用的.所以與stack相關的指令亦無法使用...ex: call 指令
所以在memory init之前,是使用jmp , 而不是用call指令來呼叫function.
HOOK的目的:1若欲跳過TASK,可於前一個HOOK中jmp到Taskreturn.2.便於修改,而不用去更動task.
HOOKJ:同Jmp , 但若其後面的procedure沒有存在時,則jmp回自己

DMA簡介

DMA簡介
DMA (Direct Memory Access) 也就是直接記憶體存取,相對於 PIO,是一種以不透過
CPU 而直接作 I/O的動作。
DMA 可以分為兩種型態,一是普通的 DMA,另一個就是匯流排主控 DMA(Bus Mastering).
普通的 DMA 是靠主機板上的 DMA 控制器來控制資料傳輸等工作,而匯流排主控 DMA
則是完全靠介面卡上的硬體邏輯線路來控制,後者會增加界面卡的製造成本。
可是在主機板的 DMA 控制器是在 ISA 架構上,所以速度慢。
大致來說,DMA 可以分成三種模式,即 MODE 0,MODE 1 和 MODE 2,每種 MODE 又可以
分 Single word 和 Multi-word 兩種傳輸方法,基本上來說,Multi-word 會有比較好的
效能。
有一些介面卡可以使用 DMA 模式和硬碟溝通,但其實它是使用 PIO 的模式。
DMA 必須使用在多工的作業系統才能發揮其功效,否則在非多工的系統 下,即使你是使用
DMA,也不會用到 CPU,可是 CPU 卻仍然必須等到 I/O 做完才可繼續動作。

DOS 的起源

● DOS 的起源 ●
摘錄:憂鬱巨人-IBM
在IBM當初和微軟合作時,須要由微軟提供一套作業系統,當時微軟
介紹DRI公司給IBM。可是當IBM來找他時,DRI的總裁居然出去試飛
新飛機去了,以至於合作失敗................................
IBM 則要微軟設法找到或寫出一套作業系統,否則使用微軟語言的
生意就作罷................................................
此時Gates正在考慮是否應該替IBM寫一套作業系統,他真正在行是
程式語言,不是比較複雜的作業系統。此外,他也沒亦料到後來會
從DOS上賺到這麼大的一筆錢,他只希望自己的培基語言能掛在IBM
的系統裡。最後,他決定要來寫一套作業系統..................
可是寫一套作業系統可能要花一年以上的時間,但是IBM幾個月就要
一套。在他發現圈內人自編叫做QDOS的作業系統時,問題就解決了。
QDOS 原意是快速而骯髒的作業系統( Quick and Dirty Operating
System ),指任意借用DRI作業系統的構想和名稱。..............
最後微軟付了約七萬五千美元,買下這套系統;它就是日後風行全球
的作業系統程式---- DOS ( Disk Operating System )。