51Testing软件测试论坛

标题: 关于IO,IRQ的小故事 [打印本页]

作者: sswmjoy    时间: 2013-7-19 09:01
标题: 关于IO,IRQ的小故事
在STUDY-AREA学习时,看到网中人编的一个小故事来解释IO与IRQ,觉得很好,分享给大家。


在這裡﹐我還想講講 IO 和 IRQ (不是ICQ哦~~)。

正如前面講 chips 的時候﹐已經提到過每個設備都有自己的 IO 位址。就好像自家的門牌一樣﹐只能是唯一的﹐否則郵差就不知道該送給誰了。別忘了電腦是個很蠢的機器﹐一就是一﹐零就零﹐一點都不懂得變通﹐稍有混亂就會發呆不工作了。所以沒有兩個裝置會是相同 IO的﹐且通常設定 IO 的時候會和 IRQ 一起設。準確來說﹐IO 位址是一個範圍﹐如 0x378-0x37F ﹐但設定的時候取前面一個值就可以了﹐但後面的那個數值也不能忽略﹐當您需要手動去更改其它 IO 的時候﹐這個 IO 範圍之內的數值都不可再用了哦﹐否則就會造成 IO 衝突。

那麼 IRQ 又是什麼東東啊﹖IRQ 其實是英文 Interrupt Request 的縮寫﹐interrupt 就是中斷的意思﹐這好像不好理解。不過如果想像一下﹕不管您忙個半死或是在發呆﹐要是忽然有電話進來找您做事情﹐就是 interrupt 了﹐因為“中斷”了目前的狀況。有了這個概念之後﹐下面就跟您講一個電腦故事(純屬虛構)﹕

話說 CPU 在剛開始的時候很神氣﹐自以為精力旺盛﹐每隔一定時間到處問其它的周邊設備﹕“您有工作要我處理嗎﹖”。一個一個的輪著問下去﹐周而復始。如果週邊有東西要處理﹐就回答﹕“啊~~您來得正好﹐這些都是孝敬您老人家的啦﹗”﹔要是沒有東西要處理﹐就回說﹕“您老真是忙﹐最好不要增加您負擔啦﹐您還是問問下一位吧 ^_^ ”。

這樣的情形是﹕CPU 一天到晚都沒有空(雖然它也最怕閑)﹐不過要是數據一多起來﹐CPU 既要處理運算又要到處問周邊﹐也實在應付不來。周邊們也就開始投訴﹕“您這老頭怎麼這麼慢啊﹖害我等這麼久﹐我還有一大堆東西等著呢﹗”於是矛盾就產生了。

俗話說路不轉人轉嘛﹐大家於是坐下來商量一個法子來解決這個矛盾。CPU 首先發難﹕“以後我只處理運算好了﹐再也不去求您們、看您們的臉色啦﹐我忙都忙死了還要受您們氣哦﹖﹗”說完翹起二郎腿抽煙去了。這下周邊們可就緊張了﹐都過去求 CPU 老人家給條生路﹐否則它們的飯碗也難保了耶。最先是系統時鐘求說﹕“ CPU 老哥﹐行行好吧﹐我也知道您老很忙﹐以後也就不要勞動您老來找我啦﹐我有事情自會登們拜訪的啦。不過﹐您得給個通道我才行啊﹐要不怎麼找您啊﹖”CPU 白了它一眼說﹕“憑什麼要給您開這後後門啊﹖”系統時鐘就說﹕“哎呀﹐您老也不是不知道啊﹐如果沒有我﹐大家都不知道時間﹐也都不會幹活啦﹐所以我是一定要這麼一個通道的﹐要不然還是您來找我好了~~”也一副耍賴樣子。CPU 想想也倒有道理﹐就說﹕“好吧﹐不過也不用您親自送來啦﹐我開一條專線給您﹐就像克林頓和江澤民那種﹐只要這電話一響﹐我就知道是您了。然後等我有空就過去拿好了﹐您這麼慢吞吞的我也受不了啦。”於是CPU給系統時鐘開了第一條專線﹐號碼為“0”。

哎呀這下其餘的周邊都忙著討好 CPU、紛紛要專線號碼。鍵盤是第二個發言的﹐因為輸入指令都要靠它嘛。CPU 也就把第二條專線給了它﹐號碼為“1”。然後其它的也一窩蜂的湧來要號碼﹐CPU 一時也應接不暇﹐胡亂的塞給它們一個號碼﹐結果一號通訊口(COM1)得到了號碼 4﹐COM2 得到了 3﹐硬碟得到了 5﹐軟碟得到了 6﹐列印口得到了 7。同時 CPU 也公佈了游戲規則:如果專線同時響的話﹐越小號碼的越優先處理。

因為參加這次的會議也只有這麼多﹐於是皆大歡喜散會了。

不過好景不長﹐因為後來加入的周邊越來越多﹐專線明顯不夠用﹐但專線總機就只有這麼8條線﹐沒法子﹐增加多一台總機﹗剛好專線 2 還閒著﹐就用來接第二台總機好了﹐另一頭在第二台總機那邊接到 9 號去了(其實應是 1 號﹐因為號碼是從 0 開始而且是延續第一總機的﹐所以就變成 9 了)。這樣一來﹐按照前面定的規矩﹐從第二總機進來的(因為 2 號線都會響)就比 3 號以上的號碼更加優先了。考慮到硬碟越來越忙(既要裝作業系統、又要裝檔案、又要當虛擬記憶體...)﹐於是把硬碟從 5號接到 14 號去﹐另外還預留了 15 號給第二個 IDE (還記得IDE 硬碟怎麼連接嗎﹖)。同時﹐也給一些新用戶分配了號碼﹕系統即時鐘用了 8 號、數值資料處理器用了 13 號。這樣 5、9、10、11、12、(有時15)暫時都空著﹐等有需要的時候看情況分配給周邊設備。但這裡有點巧妙的是﹕2 號和 9 號其實都是同一個號碼﹐您不能分別把 2 號給 A 然後 9 號給 B﹐這樣是不能工作的﹐也就是所謂的 IRQ 衝突了﹔要是同時把 3 號都給 COM2 和網卡﹐更明顯是衝突的﹐要麼把網卡改到其它還閒著的號碼去﹐要麼乾脆把 COM2 關掉才可以解決這問題。

從那時候各自也相安無事﹐誰要有東西要處理﹐就撥通專線通知 CPU 有資料傳送﹐然後 CPU 就把資料拿來處理。這裡的專線請求就是 IRQ 了﹐專線號碼就是 IRQ 號碼﹐專線總機就是 IRQ 控制器。相信現在容易理解了吧 ^_^




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2