操作系統基礎原理篇(三)

1.進程
操作系統的核心概念,一個運動中的程序(進展中的程序),一個程序一旦在計算機裏動起來,它就成爲一個進程。操作系統對進程的管理通過進程表來實現。因爲進程表裏存放的是關於進程的一切信息,在任何時候,進程所佔的全部資源,包括分配給該進程的內存,內核數據結構和軟件資源形成一個進程核(core)。核快照代表的是進程在某一特定時刻的狀態。
進程與進程之間可以進行通信,同步,競爭,並在一定情況下會形成死鎖
2.內存
它是進程存放的場所,所以對於內存的管理顯得尤爲重要,內存管理使得數據的讀寫具有高效,高安全,高空間利用率和位置透明!
3.文件
文件是操作系統提供的外部存儲設備的抽象,它是程序和數據的最終存放地點,如何讓用戶的數據存放變得容易,方便,可靠和安全是文件系統的事。
4.系統調用
操作系統是系統程序,用系統調用的方式提供服務,也就是操作系統提供的應用程序接口(界面),也成爲API。
例如:如果用戶程序需要進行都磁盤操作,在程序代碼裏使用的是:result=read(fd,buffer,nbytes);這個read函數就是C語言提供的庫函數,而這個庫函數本身就是調用的操作系統的read系統調用,在編譯器上看到上述語句後將read庫函數擴展爲read系統調用。
系統調用按照功能可以劃分爲:
1)進程控制類
2)文件管理類
3)設備管理類
4)內存管理類
5)信息維護類
6)通信類
系統調用一般分爲三個階段:
1)參數準備階段
需要使用系統服務程序將系統調用所需要的參數,如上述的fd,buffer,nbytes壓到棧上,然後調用庫函數read,庫函數read將系統調用read的代碼放到一個約定好的寄存器裏,通過陷入(trap,一種中斷方式)將控制權交給操作系統
2)系統調用識別階段
操作系統拿到控制權後,將系統調用代碼從寄存器裏取出,與操作系統維護的一張系統調用表進行比較,獲得系統調用read的程序體所在的內存地址,之後跳到該地址。
3)系統調用執行階段
執行系統調用函數,系統調用完畢後返回到用戶程序
如圖:
在這裏插入圖片描述
由圖得,參數傳遞是通過棧來進行的,但是這不是唯一的傳參方式,效率最高的是使用寄存器,寄存器的訪問速度大於棧,可以提大亨喜用調用執行的效率。
5:shell(殼)
使用API需要編程,但是對於不想編程的用戶,或者需要與操作系統進行交互的用戶來說,就可以使用使用操作系統提供的殼,來與用戶交互,每個操作系統都有。既可以是文本,也可以是文本,是覆蓋在操作系統服務上面的一個用戶界面,用戶使用的是類似C語言庫函數,是通過utilities來獲取操作系統的服務。powershell是一個文本命令殼。
一個殼的功能包括如下幾項:
1)顯示提示符,如UNIX下的提示符$與%
2)接收用戶命令並執行
3)實現間接輸入輸出
4)啓動後臺進程
5)進行工作控制
6)提供僞終端服務
這個殼一旦啓動,就循環往復直到無窮
1)顯示命令提示符
2)等待用戶輸入命令
3)使用fork創建一個子進程
4)使用execve在創建的子進程裏執行用戶輸入的命令
5)重複上述步驟
上面簡單敘述了各個概念的解釋,下面我們將進行詳細的說明

進程細說

操作系統對CPU進行管理和實施的手段就是進程與線程
1.解釋
在這裏插入圖片描述
操作系統的三大核心:
1)進程管理(CPU管理)
2)內存管理
3)文件管理
進程=程序+執行
cpu使用的效率不高,使得了進程的出現,併發執行,這些同時存在在計算機內存中的程序稱爲進程,多進程實現了多道編程。
在這裏插入圖片描述
每個進程佔用一片存儲空間(內存),物理程序計數器可查到正在執行的具體程序代碼,在物理層面上,所有進程公用一個程序計數器。從邏輯層面,每個進程都需要自己的計數器,所以程序計數器可以有很多個。從時間上看,每個進程必須向前推進,也就是一定時間內完成一定工作量。
在這裏插入圖片描述
進程不一定必須終結,事實上,許多系統進程是不會終結的(用來爲別的進程提供服務的進程),除非強制終止或關閉計算機。
2.就能成的產生與消失:
在一個系統初始化時,將有許多進程產生,這些進程的存在使得新的進程和用戶程序的執行成爲可能。在系統初始化後,系統就等待用戶輸入命令,如果這個用戶啓動一個程序,如雙擊一個可執行文件,那麼系統將爲這個文件創建一個進程。此外,用戶也可以載程序裏面通過系統調用,如fork或者createprocess直接產生新的進程。
造成進程消亡的的時間可以分爲四種情況:
1)壽終:任務完成推出//自願
2)自殺:進程錯誤自行退出//自願
3)他殺:進程唄其他進程殺死//非自願通常爲一個父進程殺死一個子進程,用戶只可以殺死自己的進程,但是一個超級用戶可以!
4)處決:進程因爲一場而強行終結//非自願,可能是某進程執行了非法操作,如訪問出街或者除以0之後發生,這總非法操作將被操作系統捕捉,捕捉到後將終結造成異常的進程。
3.進程的層次結構
一個進程可以通過系統調用創建新的進程,這個新建出來的進程被稱爲你子進程,創建子進程的進程稱爲父進程。進程樹就是循環創建進程的稱呼。
UNIX中的進程有層次架構,因此有不同層次,但是Windows沒有進程樹的概念,所有進程地位平等。
4.進程的狀態
進程可以在CPU上執行,就是執行態,如果CPU掛起呢?那得看爲什麼!因爲OS在進行調度時要從掛起的進程裏面選擇一個來執行,所以清除一個進程掛起的原因對調度的有效推進很總要。
如果一個進程在執行的過程中執行了某種阻塞操作,如讀寫磁盤。由於阻塞需要等待結果後再繼續執行,操作系統會把這個進程掛起來,讓其他進程運轉,另外一種就是一個進程執行時間太長了,也會被掛起,讓其他進程也有機會執行。
這樣我們把掛起進程分爲兩類:就緒態,和阻塞態
還有一個狀態就是執行態。如圖
在這裏插入圖片描述
能否相互轉換看箭頭指向。許多商業的操作系統進程可能不止三種。大同小異而已。
5.進程創立
步驟:
1)分配進程控制塊
2)初始化機器寄存器
3)初始化頁表
4)將程序代碼從磁盤讀進內存
5)將處理器設置爲”用戶態”
6)跳轉到程序的起始位置(設置程序計數器)
不同的操作系統,創建方式有差異
6.進程與地址空間
進程空間也成爲地址空間,也就是你進程所需要的所有資源,所有資源構成了狀態的劃分,不可能有兩個進程完全一樣。
進程與地址空間研究主要內容是如何讓多個進程空間共享一個物理內存,具體來說,就是高效,安全的讓所有進程共享這片物理內存。
7.進程管理需要的手段
由操作系統來管理,要維護關於進程的有一些信息,而操作系統用於維護進程記錄的結構就是進程表或進程控制塊,這個表或者pcb裏面存放的就是關進程的資料,這個資料裏面包括寄存器,程序計數器,狀態子,棧指針,優先級,進程ID,信號,創立時間,所耗CPU,當前出遊的各種句柄等。而採納的數據結構主要是線性表,鏈表和結構。
在這裏插入圖片描述
這個進程表保持在操作系統所在的內核空間裏,如圖:
在這裏插入圖片描述
8.進程的缺陷
進程讓我們的用戶感覺到自己獨享一個CPU,他只能在一個時間幹一件事,如果想同時幹多件事情,進程就不夠用了。
另外,進程在執行的過程中如果阻塞,整個進程都將被掛起,而無法繼續執行。就是因爲上述兩個原因,線程被髮明瞭出來!
線程的介紹,會在後面的文章中描述,謝謝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章