iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 9
0

你一定會有interrupt的vector,這個部分只是存function pointer而已,你一定要有的是interrupt handler或是routine。

然後,非常重要的必須要住被打斷的那個人的address,即使是你主動打斷你自己,因為它會從user的program跳到OS的某個program,所以必須要記錄這個address。

最後一點,如果電腦有一個interrupt產生,會跳到interrupt的routine,那如果在routine執行到一半時又被interrupt,怎麼辦?這樣不就會不斷地被打斷,這又會產生什麼問題?之前看好像都很有彈性,如果你被打斷,那你register那些program的state還有memory的狀態,就是supposedly要回到原來,可是如果你要從打斷回到原來的狀態,你就必須要記下很多東西,花很多overhead去保證它還能回到原來的狀態,所以如果你一直不斷地打斷,由沒有把很多狀態記好的話,其實會產生很多問題,之後介紹synchronization時會提到。

當你兩個程式不斷地在切換,一直被打斷的時候,會有很嚴重的synchronization的問題,解決問題又要花很多時間,可是OS最理想的狀態是感覺不到OS的存在,它就在執行我的程式,我移動mouse它立刻就會有反應,不管OS怎麼處理的,總之它不要有太大的delay,所以大部分的OS為了保證service routine非常快,通常會使用assembly code去寫。所以比較注重效能或比較單純的作業系統,像是Linux,當我interrupt的時候它會disable,這個interrupt的signal,它會當作沒看見,你如果真的要的話,再送一次就對了,它用這樣的方式去確保OS裡面handle這些interrupt的速度夠快,也就是跳開synchronization的問題。

不過後面你會發現interrupt是可以被masked掉的,所以會有比較high priority跟low priority的差異,high priority在執行時,low priority的interrupt全部都會被ignored。


上一篇
第八天 Interrupt-5
下一篇
第十天 Storage-1
系列文
30天~作業系統學習30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言