當前位置:首頁 » 軟體系統 » 系統調用可以被中斷
擴展閱讀
蘋果怎樣添加視頻變速 2024-09-22 22:45:51

系統調用可以被中斷

發布時間: 2022-01-12 07:49:47

1. linux系統調用為什麼會被中斷

於中斷為什麼不能進入休眠,今天再網上查閱並總結了一下: 中斷處理的時候,不應該發生進程切換,因為在中斷上下文中,唯一能打斷當前中斷handler的只有更高優先順序的中斷, 它不會被進程打斷(這點對於softirq,tasklet也一樣

2. 如何處理被中斷的系統調用

所謂中斷是指CPU對系統發生的某個事件做出的一種反應,CPU暫停正在執行的程序,保留現場後自動地轉去執行相應的處理程序,處理完該事件後再返回斷點繼續執行被「打斷」的程序。 中斷可分為三類,第一類是由CPU外部引起的,稱作中斷,如I/O中斷、時...

3. 操作系統中有一組常稱為特殊系統調用,它不能被系統中斷,在操作系統中稱為【 】A初始化程序 B子程序 C原

正確答案:原語

原語是由若干個機器指令構成的完成某種特定功能的一段程序,具有不可分割性,即原語的執行必須是連續的。原語在執行過程中不允許被中斷,不同層次之間對話的語言稱為原語,即不同層之間通過原語來實現信息交換。

4. 搶占式內核中,線程在系統調用過程中被搶占,然後又被重新調度時,如何返回至被中斷的系統調用的

首先,一般配置的linux,如果進程正在進行
系統調用
,那麼此時進程就是正運行在內核態,而內核態的進程是不可被搶占的。
你說的這種情況,屬於編譯內核的時候開啟了「內核可搶占」這個特性,這種情況下,即使進程正在內核態
執行系統
調用,也可以被其他進程搶占,這時,首先系統會在進程
結構體
中記錄下這個進程當前是在內核態運行,然後,每個進程都有專屬於自己的內核棧,系統會把當前的執行上下文信息都記錄到這個進程的內核堆棧上。
以後這個進程恢復運行的時候,內核會從它的結構體中讀到被打斷前它處於內核態,進而從它的內核棧中讀取當時的上下文信息並進行恢復,這樣,進程就得以重新運行了。
有問題請追問

5. Linux中斷 異常 系統調用 中斷上半部 中斷下半部 這些有什麼區別和聯系

中斷分軟中斷跟硬中斷,硬中斷是由硬體從外部觸發,軟中斷由軟體觸發,就像linux系統調用int 80一樣。至於中斷的上下部其實就是因為中斷的處理時間跟它的優先順序不一定成正比,所以一般先處理中斷最重要的部分(上半部),待到不怎麼忙的時候,再來處理比較悠閑的部分(下半部)。就像輸入的時候,拿到鍵盤輸入的是什麼才是最重要的(上半部),顯示字元才是次要的(下半部)。

6. 系統調用怎麼實現

所謂系統調用,就是用戶在程序中調用操作系統所提供的一些子功能。它是通過系統調用命令,中段現行程序而轉去執行相應的子程序,以完成特定的系統功能。完成後,控制又返回到發出系統調用命令之後的一條指令,被中斷的程序將繼續執行下去。

系統調用與一般過程調用不同,其主要區別是:

1.運行的狀態不同。在程序中的過程一般或者都是用戶程序,或者都是系統程序,即都是運行在同一個系統狀態的(用戶態或系統態)。

2.進入的方式不同。一般的過程調用可以直接由調用過程轉向被調用的過程。而執行系統調用時,由於調用過程與被調用過程是處於不同的狀態,因而不允許由調用過程直接轉向被調用過程,通常是通過訪問管中斷(即軟中斷)進入,先進入操作系統,經分析後,才能轉向相應的命令處理程序。

3.返回方式的不同。

4.代碼層次不同。一般過程調用中的被調用程序是用戶級程序,而系統調用是操作系統中的代碼程序,是系統級程序。
度規定為度,在度和度之間分成等分,每一等分為℃。

7. 系統調用被信號中斷產生EINTR錯誤怎麼解

001信號中斷有以下幾種可能性:一、天線移位,就是說方向完全沒有對好衛星!提示如參考資料的圖片;二、線頭或者是線路中斷,相當於接收器沒有鏈接天線;三、天氣不好或者是暴風雨現象!出現以上情況,請按此步驟操作:按遙控上的菜單-系統設置-選擇安裝與信號檢測(然後再按以下確認鍵),此時看看信號強度和信號質量,若信號由信號強度出現,信號質量是0,證明是天線移位。若信號強度很信號質量都為0證明線路出現故障。問題可以這樣排除,以便調整。

8. 什麼是中斷系統調用

所謂中斷是指CPU對系統發生的某個事件做出的一種反應,CPU暫停正在執行的程序,保留現場後自動地轉去執行相應的處理程序,處理完該事件後再返回斷點繼續執行被「打斷」的程序。

中斷可分為三類,第一類是由CPU外部引起的,稱作中斷,如I/O中斷、時鍾中斷、控制台中斷等。第二類是來自CPU的內部事件或程序執行中的事件引起的過程,稱作異常,如由於CPU本身故障(電源電壓低於105V或頻率在47~63Hz之外)、程序故障(非法操作碼、地址越界、浮點溢出等)等引起的過程。

第三類由於在程序中使用了請求系統服務的系統調用而引發的過程,稱作「陷入」(trap,或者陷阱)。前兩類通常都稱作中斷,它們的產生往往是無意、被動的,而陷入是有意和主動的。

1.中斷處理

中斷處理一般分為中斷響應和中斷處理兩個步驟。中斷響應由硬體實施,中斷處理主要由軟體實施。

(1)中斷響應

對中斷請求的整個處理過程是由硬體和軟體結合起來而形成的一套中斷機構實施的。發生中斷時,CPU暫停執行當前的程序,而轉去處理中斷。這個由硬體對中斷請求作出反應的過程,稱為中斷響應。一般說來,中斷響應順序執行下述三步動作:

◆中止當前程序的執行;

◆保存原程序的斷點信息(主要是程序計數器PC和程序狀態寄存器PS的內容);

◆從中斷控制器取出中斷向量,轉到相應的處理程序。

通常CPU在執行完一條指令後,立即檢查有無中斷請求,如果有,則立即做出響應。

當發生中斷時,系統作出響應,不管它們是來自硬體(如來自時鍾或者外部設備)、程序性中斷(執行指令導致「軟體中斷」—Software Interrupts),或者來自意外事件(如訪問頁面不在內存)。

如果當前CPU的執行優先順序低於中斷的優先順序,那麼它就中止對當前程序下條指令的執行,接受該中斷,並提升處理機的執行級別(一般與中斷優先順序相同),以便在CPU處理當前中斷時,能屏蔽其它同級的或低級的中斷,然後保存斷點現場信息,通過取得的中斷向量轉到相應的中斷處理程序的入口。

(2)中斷處理

CPU從中斷控制器取得中斷向量,然後根據具體的中斷向量從中斷向量表IDT中找到相應的表項,該表項應是一個中斷門。於是,CPU就根據中斷門的設置而到達了該通道的總服務程序的入口。

核心對中斷處理的順序主要由以下動作完成:

◆保存正在運行進程的各寄存器的內容,把它們放入核心棧的新幀面中。

◆確定「中斷源」或核查中斷發生,識別中斷的類型(如時鍾中斷或盤中斷)和中斷的設備號(如哪個磁碟引起的中斷)。系統接到中斷後,就從機器那裡得到一個中斷號,它是檢索中斷向量表的位移。中斷向量因機器而異,但通常都包括相應中斷處理程序入口地址和中斷處理時處理機的狀態字。

◆核心調用中斷處理程序,對中斷進行處理。

◆中斷處理完成並返回。中斷處理程序執行完以後,核心便執行與機器相關的特定指令序列,恢復中斷時寄存器內容和執行核心棧退棧,進程回到用戶態。如果設置了重調度標志,則在本進程返回到用戶態時做進程調度。

2.系統調用

在Unix/Linux系統中,系統調用像普通C函數調用那樣出現在C程序中。但是一般的函數調用序列並不能把進程的狀態從用戶態變為核心態,而系統調用卻可以做到。

C語言編譯程序利用一個預先確定的函數庫(一般稱為C庫),其中有各系統調用的名字。C庫中的函數都專門使用一條指令,把進程的運行狀態改為核心態。Linux的系統調用是通過中斷指令「INT 0x80」實現的。

每個系統調用都有惟一的號碼,稱作系統調用號。所有的系統調用都集中在系統調用入口表中統一管理。

系統調用入口表是一個函數指針數組,以系統調用號為下標在該數組中找到相應的函數指針,進而就能確定用戶使用的是哪一個系統調用。不同系統中系統調用的個數是不同的,目前Linux系統中共定義了221個系統調用。

另外,系統調用表中還留有一些余項,可供用戶自行添加。

當CPU執行到中斷指令「INT 0x80」時,硬體就做出一系列響應,其動作與上述的中斷響應相同。CPU穿過陷阱門,從用戶空間進入系統空間。相應地,進程的上下文從用戶堆棧切換到系統堆棧。

接著運行內核函數system_call()。首先,進一步保存各寄存器的內容;接著調用syscall_trace( ),以系統調用號為下標檢索系統調用入口表sys_call_table,從中找到相應的函數;然後轉去執行該函數,完成具體的服務。

執行完服務程序,核心檢查是否發生錯誤,並作相應處理。如果本進程收到信號,則對信號作相應處理。最後進程從系統空間返回到用戶空間。

上面兩講簡要介紹了Linux內核的主要數據結構和相應的演算法。Linux內核包含了豐富的內容,這里僅是其中的一點點,以求起到「拋磚引玉」的作用。

9. 系統調用與中斷調用有什麼聯系與區別

它們都是操作系統概念。中斷調用是DOS操作系統中,系統調用的特殊形式而已。

系統調用,都是指操作系統的開發者,提供了許多系統的程序庫,實現輸入/輸出等基本的功能,我們編寫程序的時候就調用這些程序庫,不必要自己到顯示器上繪圖和讀取鍵盤埠。

在UNIX操作系統下,系統調用主要是C語言格式調用的一些函數庫。比如printf和scanf函數,我們寫程序的時候直接可以用,編譯系統把它轉變為對操作系統函數庫調用的代碼,目標文件可以獨立運行。

在WINDOWS系統,系統調用主要是以一系列的DLL、EXE文件方式給出,比如USER32.DLL、NTDLL.DLL等,編寫程序的時候可以直接調用裡面的GETDC等函數庫。

在DOS系統下,操作系統不以函數庫形式提供系統調用,而是把整個操作系統的所有代碼都LOAD到內存裡面,把相關系統調用功能安裝到中斷介面裡面,我們寫的程序需要調用的時候,調用相應的中斷。比如打開文件等操作,就調用INT 21

10. 操作系統中有一組常稱為特殊系統調用,它不能被系統中斷,在操作系統中稱為什麼

操作系統中有一組常稱為特殊系統調用,它不能被系統中斷,在操作系統中稱為原語。