2012-02-29 37 views

回答

2

'或者多線程和中斷之間有什麼關係?

在大多數現代搶佔式操作系統中,中斷是操作系統進入的方式 - 除非出現中斷,否則操作系統什麼都不做。中斷有兩種形式 - 從設備/驅動程序(即磁盤,鍵盤,NIC,鼠標,USB,內存管理硬件,計時器硬件)和'軟件中斷'(即軟件中斷)的硬件中斷。系統調用。任何一種中斷都可以改變就緒/運行線程的集合。本質上,OS是一個大的中斷處理程序,可以選擇更改中斷返回後將運行的一組線程。

硬件中斷的重新調度允許搶先式多線程操作系統在硬件(和/或其相關驅動程序)需要關注時能夠快速響應。

線程級對硬件信號的這種高性能響應是搶佔式多任務器對協作系統的最大優勢,也是我們忍受線程間信令,同步等複雜性的主要原因。

沒有中斷和搶佔,磁盤,網絡,USB的性能顯示,幾乎在我們的桌面系統上的一切都會非常糟糕,以至於像視頻流這樣的應用程序將無法正常工作。當一個網卡芯片有一個很好的大視頻緩衝區時,它可以引發一個硬件中斷,讓它的驅動程序運行,並用數據加載一個用戶緩衝區,並在視頻流應用程序中創建一個線程,等待I/O,準備/運行,以便它可以顯示數據。

3

時間和事件驅動線程調度的最常見實現是基於中斷。例如,硬件定時器會產生週期性中斷。處理它們的ISR可以將當前正在執行的線程的狀態保存到線程的狀態結構中,然後從另一個結構中加載另一個線程的狀態,並在執行最後的ISR指令(某種「中斷返回」/ IRET)使CPU執行另一個線程。

+0

+1沒有提及'time-slicing',雖然它會更好,你可以選擇除定時器中斷之外的其他例子。 – 2012-02-29 12:23:02

+0

@MartinJames:定時器中斷有什麼問題?它肯定不是唯一的中斷源,但它有什麼問題?許多操作系統都將其用於此目的。 – 2012-02-29 17:56:53

+0

沒有什麼錯,除了定時中斷,這麼多的「如何穿線工作」在網絡上的文本暗示定時器中斷是唯一一個改變集運行的線程,(注意:我不包括你的帖子在那一套!)。一般來說,如果這樣的文本在前幾段中提到了「時間分割」或「量子」,那麼如果不是實際上不正確的話,這是令人遺憾的誤導。 – 2012-03-01 11:19:53

1

這恰恰類似於多任務處理的時間劃分。如果一個線程可以被中斷來運行另一個線程,則不必擔心線程佔用處理器並阻止其他線程進行任何前進。

0

多線程

thread1 ______   _____ 
thread2  _____   _____ 
thread3   _____   _____ 

線程共享CPU時間

中斷

isr    ________ 
threadn _________  _________ 

中斷總是導致上下文切換的中斷處理程序/中斷服務程序和武力奪取的CPU時間。