主頁 > 軟體設計 > 作業系統學習筆記:作業系統基礎知識

作業系統學習筆記:作業系統基礎知識

2021-09-22 08:38:36 軟體設計

作業系統的概念、功能和目標

概念(定義)

首先來一張圖來看看計算機系統的層次結構:

在這里插入圖片描述

可以看到的是,作業系統扮演這一個連接硬體和軟體、用戶的角色,

由此可以得出作業系統的定義

作業系統(Operating System, OS)是指控制和管理整個計算機系統的硬體和軟體資源,并合理地組織調度計算機的作業和資源的分配,以提供給用戶和其他軟體方便的介面和環境,它是計算機系統中最基本的系統軟體

  • 從中間往上下看,它控制和管理整個計算機系統的硬體和軟體資源
  • 從上往下看,它提供給用戶和其他軟體方便的介面和環境
  • 從下往上看,它是計算機系統中最基本的系統軟體,是最接近硬體的軟體

如果想要更直觀的解釋,我們可以打開任務管理器的界面:
在這里插入圖片描述

這張圖可以很直觀的展示作業系統所干的事情,

功能和目標

首先結合上面作業系統的層次結構圖,思考作業系統在以下三個方面的功能實作:

  • ①作業系統作為系統資源的管理者(這些資源包括軟體、硬體、檔案等),需要提供什么功能?
  • ②作業系統作為用戶與計算機硬體之間的介面,要為其上層的用戶、應用程式提供簡單易用的服務,需要實作什么功能?
  • ③作業系統作為最接近硬體的層次,需要在純硬體的基礎上實作什么功能?

這三個問題對應的層次如何所示:

在這里插入圖片描述

補充知識

  • 行程:表示一個程式的執行程序,執行前需要將該程式放到記憶體中,才能被CPU處理

首先解決第一個問題:作業系統作為資源的管理者,需要提供/實作哪些功能,

我們拿QQ進行視頻聊天的作業程序來講解:

使用QQ的第一步,是在各個檔案夾中找到QQ安裝的位置,作業系統將逐層打開檔案夾,這一步涉及檔案管理;第二步,就是運行QQ.exe,在這一步,作業系統會把該程式的相關資料放入到記憶體中,并決定放在記憶體中的位置,這一步涉及存盤器管理(記憶體管理);第三步就是將QQ程式放入等待佇列中,之后對應的行程將被放進處理機(CPU)中處理,這一步涉及處理機管理;最后一步,當我們需要打開攝像頭跟朋友聊天的時候,作業系統會將攝像頭設備分配給該行程,在攝像頭使用完成后還要進行資源回收,這一步涉及設備管理,對于整個流程,作業系統必須保證這些行為都是安全高效

總結如下圖所示:
在這里插入圖片描述

其次是第二個問題:作業系統作為用戶與計算機硬體之間的介面,要為其上層的用戶、應用程式提供簡單易用的服務,需要實作什么功能,

想要解決這一個問題,作業系統需要提供以下三個功能:

  • 命令介面:允許用戶直接使用
  • 程式介面:允許用戶通程序式間接使用
  • GUI:現代作業系統中最流行的圖形用戶介面

命令介面和程式介面可以統稱為用戶介面,在考研當中,這兩種功能經常考察

以下是圖示:

在這里插入圖片描述

命令介面是允許用戶直接使用的,其分為聯機命令介面脫機命令介面

其中,聯機命令介面的特點是:用戶說一句,系統做一句,而脫機命令介面的特點是:用戶說一堆,系統做一堆

下面拿兩個例子來解釋聯機命令介面和脫機命令介面:

例1:在Windows作業系統中,我們可以打開cmd視窗,輸入time指令,視窗會回傳當前系統時間,并且將操作權限返還給用戶,用戶隨后可以設定一個新的時間,這就是一個典型的聯機命令介面,或者叫互動式命令介面,

例2:還是以Windows為例,使用Windows的搜索功能,在C盤中搜索并隨便打開一個*.bat檔案,可以看到里面撰寫著一系列的指令,檔案本身就相當于一個指令清單,雙擊該檔案,作業系統就會根據用戶給出的這些一系列的指令,一條一條往下執行,這種就是典型的脫機命令介面實體,脫機命令介面也可以叫批處理命令介面

聊完了命令介面,接下來我們聊聊程式介面,

再拿Windows為例,我們在作業系統中能經常看見*.dll檔案,例如C:\Windows\System32目錄下的user32.dll,允許程式員在程式中呼叫該檔案,實作創建視窗等功能,該功能不是由程式員實作的,而是通程序式員撰寫的程式進行呼叫,實作間接使用,詳細的呼叫程序就是呼叫系統呼叫的程序(關于系統呼叫的相關概念將會在后面學習到),

程式介面就是由一組系統呼叫組成的,大部分情況可以認為程式介面=系統呼叫

注意,系統呼叫也可以稱為廣義指令系統呼叫命令

在這里插入圖片描述

圖形用戶界面這里不多贅述,其目標就是為了用戶能夠更加方便地操作計算機,

最后我們聊聊第三個問題:作業系統作為最接近硬體的層次,需要在純硬體的基礎上實作什么功能,

在這一層面上看,作業系統需要實作的最主要功能就是實作對硬體及其的拓展,在沒有任何軟體支持的計算機(裸機)上安裝的作業系統,要能夠提供資源管理功能和方便用戶的服務功能,將裸機改造成功能更強、使用更方便的機器,

如果把計算機比喻成錘子、釘子、木頭,那么作業系統就應該是優秀的工匠,作業系統將這些簡單的原料組織成房子、帆船、匹諾曹等等,普通用戶就可以直接使用工匠提供的房子、帆船、匹諾曹,而無需關心這些東西在底層是怎么組織起來的,

小結

下面對知識進行總結:

在這里插入圖片描述

其中需要以后重點掌握的是關于資源管理的四個小方面,以及系統呼叫的相關知識,

作業系統的特征

作業系統主要由四個特征:并發共享虛擬異步,其中并發和共享是作業系統兩個最基本的特征,二者也互為存在條件

并發

并發是指兩個或多個時間在同一時間間隔內發生,這些事件宏觀上是同時發生的,但微觀上是交替發生的,

注意把并發跟并行區分,后者指兩個或多個事件在同一時刻同時發生

通常,一個單核處理機(CPU)同一時刻只能執行一個程式,作業系統在這里的職責就是負責協調多個程式交替執行,事實上,作業系統就是伴隨著“多道程式技術”而出現的,可以說,作業系統和程式并發是一起誕生的,當然,現在的CPU一般都是多核CPU,

共享

共享即資源共享,是指系統中的資源可供記憶體中多個并發執行的行程共同使用,

共享有兩種方式:互斥共享和同時共享,

  • 互斥共享是指系統中的某些資源,雖然可以提供給多個行程使用,但一個時間段內只允許一個行程訪問該資源
  • 同時共享是指系統中的某些資源,允許一個時間段內有多個行程”同時“對它們進行訪問

其實,同時共享中的”同時“,往往只能表示宏觀層面,微觀層面上這些行程可能是交替地進行對資源的訪問(分時共享)

下面拿兩個案例來理解共享的兩種方式:

例1:使用QQ和微信進行視頻聊天,同一時間段內攝像頭只能分配給其中一個行程,這就是互斥共享;

例2:使用QQ發送檔案A,同時使用微信發送檔案B,宏觀上看,兩邊都在同時讀取并發送檔案,說明兩個行程都在訪問硬碟資源,從中讀取資料,微觀上看,兩個行程是交替著訪問硬碟的,這就是同時共享,

關于并發和共享

并發性指計算機系統中同時存在著多個運行著的程式,共享性是指系統中的資源可供記憶體中多個并發執行的行程共同使用,

通過下面這個例子來看并發與共享的關系:

使用QQ發送檔案A,同時使用微信發送檔案B,

1.兩個行程正在并發執行(并發性)

2.需要共享地訪問硬碟資源(共享性)

如果失去并發性,則系統中只有一個程式正在運行,則共享性失去存在的意義;如果失去共享性,則QQ和微信不能同時訪問硬碟資源,就無法實作同時發送檔案,也就無法并發,

虛擬

虛擬是指把一個物理上的物體變為若干個邏輯上的對應物,前者(物理物體)是實際存在的,后者(邏輯對應物)是用戶感受到的,

下面用一個例子來理解虛擬:

通過之前的學習我們知道,一個程式需要放入記憶體并給他分配CPU才能執行,假如說GTA5需要4GB的運行記憶體,QQ需要256MB的運行記憶體,網易云也需要256MB的運行記憶體,而我的電腦只有4GB的記憶體,但是卻可以同時運行以上程式,問題來了:以上程式同時運行所需記憶體已經大于4GB了,為什么它們還可以同時運行在電腦上呢?原因就是作業系統采用了虛擬存盤器技術,

虛擬存盤器技術其實就是虛擬技術中的”空分復用技術“,對于這個概念,這里只需了解,會在后續學習程序進行學習,

再來一個例子:

在一臺單核CPU中,用戶可以打開QQ、Chrome、QQ音樂等程式,一個程式需要被分配CPU才能運行,而單核CPU卻能在電腦中同時運行多個程式,背后其實就是運用了虛擬處理器技術,

虛擬處理器技術就是虛擬技術中典型的”時分復用技術“,在微觀層面上處理機會在各個微小的時間段內交替著為各個行程服務,

當然,虛擬往往也伴隨著并發,

異步

異步是指,在多道程式環境下,允許多個程式并發執行,但由于資源有限,行程的執行不是一貫到底的,而是走走停停,以不可預知的速度向前推進,這就是行程的異步性,

這里拿一個老渣與兩個女孩約會的例子來解釋異步:

在這里插入圖片描述

加入兩個女孩都給老渣下達了兩道命令,同時要求老渣陪其吃飯和把心給她,而老渣的心和老渣的人都只有一個,假如一開始跟一號吃飯,之后一號和二號同時要求老渣把心給她,那么老渣將有兩種選擇,所以會有不同的約會程序,

老渣與與一號、二號的約會相當于對兩個行程的處理,每個行程都有各自需要執行的指令,老渣的心相當于有限的系統資源,由于可分配的資源有限,行程的執行不是一貫到底的,而是走走停停的,以不可預知的速度向前推進,

顯然,如果失去了并發性,那么系統只能串行的處理每個行程,每個行程的執行會一貫到底,所以,只有系統擁有并發性,才可能導致異步性,

小結

下面對知識進行總結:

在這里插入圖片描述

重要考點:

  • 理解并發和并行的區別
  • 并發和共享互為存在條件
  • 沒有并發和共享,就談不,上虛擬和異步,因此并發和共享是作業系統的兩個最基本的特征

作業系統的發展和分類

手工操作階段

計算機剛被發明的時代的操作方式,那時并沒有作業系統,程式員撰寫程式需要通過打孔機對紙帶進行打孔,通過打孔與否區別二進制的1和0,機器讀取紙帶中的資訊,并將其輸入到計算機當中,計算機進行運算過后,CPU會將記憶體中的結果,操控機器對紙帶打孔,進行結果輸出,

在這里插入圖片描述

主要缺點:用戶獨占主機、人機速度矛盾導致資源利用率極低

批處理階段

單道批處理系統

為了解決手工操作階段暴露出的問題,人們引入了脫機輸入/輸出技術(用磁帶完成),并使用**監督程式(作業系統雛形)**負責控制作業的輸入、輸出,

程式員會事先將程式撰寫到紙帶上,然后通過專門的外圍控制機,把紙帶機上的紙帶的資料讀到一個速度更快的磁帶上,之后計算機直接從磁帶上讀取程式并處理,處理的結果將重新輸送到磁帶上,再通過外圍控制機將結果輸出到紙帶上,

在這里插入圖片描述

主要優點:緩解了一定程度的人機速度矛盾,資源利用率有所提升,

主要缺點:記憶體中僅能有一道程式運行,只有該程式運行結束之后才能調入下一-道程式,CPU有大量的時間是在空閑等待I/0完成,資源利用率依然很低,

多道批處理系統

為了解決單道批處理系統所暴露的問題,人們發明了多道批處理系統,

用戶還是利用磁帶將程式輸入到計算機中,但是每次的傳輸將往記憶體傳入多道程式,這些程式將在計算機中并發地執行,這個時候,作業系統正式誕生,并且引入了中斷技術,由作業系統負責管理這些程式的運行,
在這里插入圖片描述

主要優點:多道程式并發執行,共享計算機資源,資源利用率大幅提升,CPU和其他資源保持“忙碌”狀態,系統吞吐量增大,

主要缺點:用戶回應時間長,沒有人機互動功能,用戶提交自己的作業之后就只能等待計算機處理完成,中間不能控制自己的作業執行,

可以看到,并發和共享兩大特性自作業系統誕生時就已存在

兩者的比較

拿個例子來說明多道批處理系統相對于單道批處理系統,資源利用率為什么會大幅度提升,

假設計算機需要處理三個作業:

作業一:輸入1秒,計算1秒,輸出1秒
作業二:輸入1秒,計算1秒,輸出1秒
作業三:輸入1秒,計算1秒,輸出1秒

若采用單道批處理技術:

在這里插入圖片描述

采用多道批處理技術:

在這里插入圖片描述

上訴兩種比較很好的說明了單道批處理和多道批處理的區別,同時也要記住,作業系統的出現是在多道批處理階段

分時作業系統

為了提供人機互動能力,人們發明了分時作業系統,計算機以時間片為單位輪流為各個用戶/作業服務,各個用戶可通過終端與計算機進行互動,

比如時間片為50ms,那么計算機為一個用戶服務50ms之后就會處理為下一個用戶服務,在這50ms當中,用戶都可以通過終端跟計算機進行互動,

在這里插入圖片描述

主要優點:用戶請求可以在對應的時間片內被即時回應,解決了人機互動問題,允許多個用戶同時使用一臺計算機,并且用戶對計算機的操作相互獨立,感受不到別人的存在,
主要缺點:不能優先處理一些緊急任務,作業系統對各個用戶/作業都是完全公平的,回圈地為每個用戶/作業服務一個時間片,不區分任務的緊急性,

實時作業系統

由于分時作業系統無法即使處理緊急任務的局限性,導致它無法被用于一些特別的場景,比如武器控制系統,所以人們發明了實時作業系統,在實時作業系統的控制下,計算機系統接收到外部信號后及時進行處理,并且要在嚴格的時限內處理完事件,該系統的特點時及時性可靠性

實時作業系統主要分為硬實時系統軟實時系統

  • 硬實時系統要求必須在絕對嚴格的規定時間內完成處理,如導彈控制系統、自動駕駛系統,
  • 軟實時系統規定能接收偶爾違反時間規定,如12306火車訂票系統

主要優點:能夠優先回應一些緊急任務,某些緊急任務不需要時間片排隊,

其他作業系統

網路作業系統

伴隨著計算機網路的發展而誕生的,能把網路中各個計算機有機地結合起來,實作資料傳送等功能,實作網路中各種資源的共享(如檔案共享)和各臺計算機之間的通信,(如Windows NT就是一種典型的網路作業系統,網站服務器就可以使用)

分布式作業系統

主要特點時分布性和并行性,系統中的和泰計算機地位相同,任何作業都可以分布在這些計算機上,由他們并行、協同完成這個任務,

個人計算機作業系統

如Windows XP、MacOS,方便個人使用

小結

在這里插入圖片描述

綠框部分是考研重點內容,整體重點理解各階段的優點和缺點,各階段的主要優點其實都是解決了上一階段的主要缺點,

作業系統的運行機制與體系結構

運行機制

兩種指令

在將指令的類別之前,我們先來認識什么叫指令:

簡單點來說,指令就是處理器(CPU)能識別、執行的最基本命令,

一條高級語言的代碼翻譯過來可能會對應多條指令:

在這里插入圖片描述

有的指令”人畜無害“,比如加減乘除這些普通的指令;有的指令擁有很高的權限,比如記憶體清零指令,如果作業系統允許任意的用戶程式都可以無差別地使用系統指令,那么就意味著一個用戶可以將其他用戶地記憶體資料隨意清零,這樣做顯然是不符合安全規范地,

為了解決上述問題,我們需要將指令劃分為兩種類別,并對權限加以區分:

  • 特權指令:如記憶體清零指令,這類指令擁有很高的權限,不允許用戶程式使用
  • 非特權指令:如普通的運算指令,允許用戶程式使用
兩種處理器狀態

上面我們說到指令分為兩種,隨之而來的有一個新問題,CPU如何判斷當前是否可以執行特權指令?

為此,我們將處理器狀態劃分為兩種:

  • 用戶態(目態):如果CPU處于用戶態,那么此時CPU只能執行非特權指令
  • 核心態(管態):如果CPU處于核心態,那么CPU特權指令和非特權指令都可以執行

在系統中使用程式狀態暫存器(PSW)中的某標志位來表示當前處理器處于什么狀態,

兩種程式

對于程式而言,有些程式可以同時使用非特權指令和特權指令,而有的程式只能只用非特權指令,根據程式所能使用指令級別的不同,我們把程式分為兩種:

  • 內核程式:作業系統的內核程式是系統的管理者,既可以執行特權指令,又可以執行非特權指令,運行在核心態
  • 應用程式:只能執行非特權指令,運行在用戶態
小結

在這里插入圖片描述

作業系統內核

內核功能細分

在我們安裝完計算機的時候,可以發現作業系統給我們提供了多種多樣的功能,比如“記事本”、”任務管理器“等等,然而,有些功能看起來并不是必不可少的,就像沒有“任務管理器”,我們仍然可以使用計算機,可見,計算機內部的功能結構,也由核心與非核心之稱,

再來看之前的作業系統層次結構,這次我們把它再細分:

在這里插入圖片描述

作業系統的功能分為內核功能非內核功能,其中內核是我們比較關注的,它是計算機上配置的底層軟體,是作業系統最基本、最核心的部分,

實作作業系統內核功能的那些程式就是內核程式

內核主要分為兩部分,一部分是對系統資源進行管理的功能,主要包括行程管理、存盤器管理、設備管理等功能;另一部分主要包括時鐘管理(實作計時功能)、中斷處理、原語(一種特殊程式,是最接近硬體的部分,這種程式的運行具有原子性,涵括設備驅動、CPU切換等)

原子性是指一但操作就必須執行完成,不可中斷,否則回到執行之前的狀態,

小結

在這里插入圖片描述

作業系統的體系結構

上面我們說到作業系統有內核與非內核之分,

需要注意的是:有些作業系統并沒有把對系統資源進行管理的功能歸為“內核功能”,也就是說,不同的作業系統對內核的劃分并不嚴格一致,通常可以把內核包含了上述功能體系結構的稱為大內核,內核沒有把上述功能劃分在內的體系結構稱為微內核

它們倆的區別:
在這里插入圖片描述

作業系統的體系結構問題與企業的管理問題很相似:

內核就是企業的管理層,負責一些重要的作業,只有管理層才能執行特權指令,普通員工只能執行非特權指令用戶態核心態之間的切換相當于普通員工和管理層之間的作業交接大內核就相當于企業初創時體量不大,管理層的人會負責大部分的事情,優點是效率高;缺點是組織結構混亂,難以維護,微內核就相當于隨著企業體量越來越大,管理層只負責最核心的一-些作業,優點是組織結構清晰,方便維護;缺點是效率低,

小結

在這里插入圖片描述

需要注意的是,作業系統體系結構之間的差別可能做作為選擇題進行考察,

中斷和例外

中斷機制的誕生

早期的計算機是采用串行機制處理程式的,一個程式進入計算機運行結束之后,只有等待I/O程式將結果輸出,才能讀取運行下一個程式:

在這里插入圖片描述

這種方式的缺點顯而易見:各程式只能穿行執行、資源利用率極低,

為了解決上述問題,人們發明了作業系統(作為計算機的管理者),同時引入了中斷機制,實作了多道程式并發執行(多道批處理階段),
在這里插入圖片描述

中斷的本質:發生中斷就意味著需要作業系統介入開展管理作業

中斷的概念和作用

中斷是指計算機運行程序中,出現某些意外情況需主機干預時,機器能自動停止正在運行的程式轉入處理新情況的程式,處理完畢后又回傳原被暫停的程式繼續運行,

下面說說中斷機制運行的例子:

假如計算機中有三個行程,行程一運行程序中,CPU可能受到計時部件發出的中斷信號(例如過了一個時間片),此時就意味著需要作業系統的介入,因此CPU的狀態將切換到核心態,對中斷進行處理;此時CPU的權限會移交給作業系統,作業系統的內核負責對中斷信號進行處理,此時作業系統發現剛才的中斷是表明行程一的時間片已用完,所以切換到行程2執行;之后作業系統會將CPU的使用權交還給用戶行程,之后行程二就會在用戶態下開始執行,

假如行程二發出系統呼叫(內中斷信號),請求輸出資料,此時CPU的狀態將切換到核心態,同時移交權限給作業系統,作業系統內核再次負責對中斷信號的處理,并要求列印機要是作業,此時行程二暫停運行等待I/O完成,換行程三運行,此時CPU狀態回傳用戶態,等到I/O完成,設備向CPU發出中斷信號,CPU接收到I/O設備發來的而中斷信號,切換到核心態對中斷行程處理,作業系統內核再次對中斷信號行程處理,此時因為行程2的I/O已經完成,所以作業系統會讓行程二恢復運行,以完成后續作業,

從上面的例子我們不難發現中斷有三個特點:

  • 當中斷發生時,CPU立即進入核心態
  • 當中斷發生后,當前運行的行程暫停運行,并由作業系統內核對中斷進行處理
  • 對于不同的中斷信號,會進行不同的處理

發生了中斷,就意味著需要作業系統介入,開展管理作業,由于作業系統的管理作業(比如行程切換、分配I/O設備等)需要使用特權指令,因此CPU要從用戶態轉為核心態中斷可以使CPU從用戶態切換為核心態使作業系統獲得計算機的控制權,有了中斷,才能實作多道程式并發執行

需要注意的是,中斷是CPU從用戶態切換到核心態的唯一途徑,核心態切換用戶態只需要通過執行一個特權指令,將PSW的標志位設定為表示“用戶態”的標志位

中斷的分類

中斷主要分為內中斷外中斷,內中斷也稱為例外、例外、陷入,外中斷可以簡稱為中斷(狹義上的中斷就是指外中斷),

這兩種中斷的區分主要根據信號的來源是CPU的內部還是外部,內中斷與當前執行的指令有關,外中斷與當前執行的指令無關,

內外中斷還有下面的細分:

在這里插入圖片描述

指令中斷如:系統呼叫時使用的訪管指令,硬體故障如:缺頁,軟體中斷如:整數除0,

外設請求如:I/O操作完成發出的中斷信號,人工干預如:用戶強行終止有個行程,

當然,有些書上也把中斷做如下的細分:

在這里插入圖片描述

但其實上面兩種分類都是一樣的,陷入值得就是有意為之的例外,比如系統呼叫;故障就是指由錯誤條件引起的,可能被故障處理程式修復,如缺頁;終止就是無可恢復的致命錯誤造成的結果,終止處理程式不再將控制回傳給引發終止的應用程式,如整數除0,

外中斷的處理程序

下面拿一個案例來講解外中斷的處理程序:

假如CPU正在執行某一個程式,這個程式有n條指令,CPU會按照順序依次執行這些指令,并且它會遵循下面的步驟:

1、在執行完每個指令之后,CPU都要檢查當前是否有外部中斷信號

在這里插入圖片描述

2、如果沒有檢測到中斷信號,則繼續執行下一條指令;如果檢測到外部中斷信號,則需要保護被中斷行程的CPU環境(如程式狀態字PSW、程式計數器PC、各種通用暫存器)

在這里插入圖片描述

3、根據中斷信號型別轉入相應的中斷處理程式

在這里插入圖片描述

4、恢復原行程的CPU環境并退出中斷,回傳原行程繼續往下執行

小結

在這里插入圖片描述

其中,中斷的概念和作用、中斷的分類是考研的考點

系統呼叫

概念

之前在介紹作業系統的概念時說到過作業系統在三個層次上應該實作的功能和目標,其中提到過在向用戶提供一些簡單易用的服務時,主要實作包括命令介面和程式介面,而程式介面就是由一組系統呼叫組成的,

在這里插入圖片描述

系統呼叫是作業系統提供給應用程式(程式員/編程人員)使用的介面,可以理解為一種可供應用程式呼叫的特殊函式,應用程式可以發出系統呼叫請求來獲得作業系統的服務

系統呼叫所解決的問題就是禁止多個行程隨機呼叫計算機資源,轉而由行程本身運行時只能通過系統呼叫的方式向作業系統發出請求,最后再由作業系統對哥哥請求進行協調管理,

如果要來個官方一點的解釋,那么應該這么說:應用程式通過系統呼叫請求作業系統的服務,系統中的各種共享資源都由作業系統統一掌管,因此在用戶程式中,凡是與資源有關的操作( 如存盤分配、I/0操作、檔案管理等),都必須通過系統呼叫的方式向作業系統提出服務請求,由作業系統代為完成,這樣可以保證系統的穩定性和安全性,防止用戶進行非法操作,

下面是系統呼叫的具體分類:

在這里插入圖片描述

主要注意到的是:系統呼叫一般涉及對系統資源的管理、對行程的控制,而這些功能一般都是需要執行一些特權指令才能完成的,因此系統呼叫的相關處理需要在核心態下進行,

系統呼叫與庫函式的區別

上面說過系統呼叫可以理解為是一種可供應用程式呼叫的特殊函式,但是它并不等同于我們開發程序中使用到的庫函式,

實際上,撰寫程式時可以通過匯編語言直接呼叫系統呼叫,也可以通過高級變成語言來實作相同的結果i,而平常我們所接觸到的庫函式,像C庫這種其實也是在內部實作對系統呼叫的請求:

在這里插入圖片描述

當然,不是所有的庫函式都會使用到系統呼叫,比如“取絕對值”;判斷庫函式是否使用系統呼叫,可以通過是否涉及對計算機共享資源的操作進行簡單判斷

系統呼叫背后的程序

對于系統呼叫的程序,可以看下面這張圖進行簡單的理解:

在這里插入圖片描述

這里的int指令的引數x指明了系統呼叫號(作業系統根據這個來進行系統呼叫),此處的int不是整形的意思,而是interrupt(中斷)的縮寫

當執行了陷入指令之后(用戶態,進行系統呼叫請求,引發內中斷),CPU的控制權就被轉交給作業系統(核心態),作業系統通過相應的系統呼叫對程式傳入的引數進行處理,系統呼叫完成后又會回傳之前的用戶程式,繼續執行下一條指令,可以概括成下面的程序:

傳遞系統呼叫引數->執行陷入指令(用戶態)->執行系統呼叫相應服務程式(核心態)->回傳用戶程式

需要注意的是:陷入指令是唯一一個只能在用戶態執行,而不可在核心態執行的指令

小結

在這里插入圖片描述

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/301925.html

標籤:其他

上一篇:cpp-http 庫的使用

下一篇:滑動視窗機制

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more