操作系統進程線程筆記

進程

1.進程創建,創建PCB,分配地址空間,初始化PCB(比如狀態設爲就緒) 

2.調度就是決定哪個進程去獲取cpu,進入執行狀態。有多個就緒隊列,不同種類的進程會進到對應的就緒隊列等待被調度。調度算法會決定哪個進程進入cpu執行。 

3.時間片用完,停止運行,保存寄存器信息到PCB,修改進程狀態爲就緒。

4.如果進程運行到I/O阻塞了,就會讓出cpu進入阻塞狀態,並且加入到阻塞隊列(不同阻塞原因對應不同阻塞隊列),I/O設備完成後會觸發事件,喚醒對應的進程,修改狀態爲就緒,並且加入到就緒隊列。

系統調度進程的過程:
1、查該進程的PCB,獲取其狀態、優先級
2、根據PCB保存的處理機狀態信息,恢復現場
3、根據PCB中程序和數據的內存始址,找到其程序和數據
4、執行中的同步信號等也要查閱PCB,暫停時進程執行的處理機環境保存回PCB。

 

對於每一個進程,操作系統都使用一個特定的進程控制塊(PCB)來表示,它包含了許多與一個特定進程相關的信息,例子如下:

進程控制塊(PCB)

在PCB中,一般包括如下信息:

1、 進程的狀態:狀態科包括新建態、就緒態、運行態、終止態、阻塞態。

2、 程序計數器:用於記錄進程要執行的下一條指令的地址。

3、 CPU寄存器這些信息CPU寄存器包括累加器,索引寄存器,堆棧指針,通用寄存器和其他一些條件碼信息寄存器。這些信息描述了程序執行的狀態,與程序計數器一起保存,以便進程以後的正確執行。

4、 CPU調度信息:這類信息包括進程的優先級,調度隊列的指針和其他調度參數,爲操作系統管理進程並進行調度提供支持。

5、 內存管理信息:根據操作系統對內存的使用情況,記錄下基址,界限寄存器,頁表、段表等信息。

6、 記賬信息:包括CPU時間,實際使用時間,時間界限,使用數據,記賬數據,作業和進程數量等。

7、 I/O狀態信息包括分配給進程的I/O設備表,打開的文件列表等。

Linux進程創建

1.fork函數創建,這種方式創建的子進程就是複製父進程的所有變量,資源,代碼,程序計數器。返回子進程id。子進程是從fork()代碼後面開始執行的。

2.exec函數族,傳入一個可執行文件路徑,創建一個子進程。子進程和父進程沒啥具體關係。

線程控制塊 TCB

線程 = 進程-公共資源

線程狀態,程序計數器(下一個指令),寄存器,堆棧

線程的狀態

運行,阻塞,就緒,終止四種狀態。被阻塞的線程正在等待某個釋放他的事件,例如一個線程執行從鍵盤讀入數據時,該線程被阻塞直到輸入事件。就緒表示線程可被調度運行,運行表示線程擁有cpu。

實現線程的幾種方式

1.使用內核線程實現

通過OS創建,管理線程,比如分時系統,分配一個單位時間給線程。

2.使用用戶線程實現

系統內核不能感知線程存在的實現。用戶線程的建立、同步、銷燬和調度完全在用戶態中完成,不需要內核的幫助。如果程序實現得當,這種線程不需要切換到內核態,因此操作可以是非常快速且低消耗的,也可以支持規模更大的線程數量,部分高性能數據庫中的多線程就是由用戶線程實現的。這種進程與用戶線程之間1:N的關係稱爲一對多的線程模型。OS分配一個單位時間是給進程的,然後進程裏面的多個線程再分這個時間。

3.使用用戶線程加輕量級進程混合實現。

https://www.cnblogs.com/lixiaochao/p/9490264.html

進程,線程,協程的關係

 

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