操作系统原理:进程与线程、进程生命周期、线程的类型
一、進程定義
? ? ?進程可以看成程序的執行過程,可以展示在當前時刻的執行狀態。它是程序在一個數據集合上的一次動態執行的過程。這個數據集合通常包含存放可執行代碼的代碼段,存放初始化全局變量和初始化靜態局部變量的數據段、用于調試的符號表、未初始化的全局變量和未初始化的靜態局部變量的bss段,存放對象數據和臨時變量以及數據層次結構的堆棧,系統資源等。程序是靜態的,一組有序代碼的集合,保存在硬盤中,進程是動態的,是程序的執行過程,執行過程結束,進程也就被結束。進程分為用戶態和核心態。當進程需要在內核中進行系統調用完成功能時,這個步驟由操作系統完成,進程只需要向操作系統進行請求操作就行,此時的進程狀態稱之為核心態,進程不再內核中工作時的狀態稱之為用戶態。
二、進程具有的特點:
1)動態性:可以動態地被創建、結束進程
2)并發性:進程可以被獨立調度并占用處理機運行
3)獨立性:每個進程有自己的內存空間,進程執行的正確性不會受到其他進程的正常執行。
4)制約性:訪問共享內存和資源或者在進程間通信根據某種規則保持同步,所產生的制約
?
? ? 進程控制塊PCB:操作系統管理控制進程運行所運用的信息集合,也是進程存在的唯一標志。信息集合包含,進程標識信息(進程PID,父進程標識,所屬用戶等);處理機狀態信息保存區(用戶可見的寄存器、控制和狀態寄存器,棧指針);進程控制信息(調度和狀態信息、進程間通信信息、存儲管理信息、資源、有關數據結構的連接信息等);
?
三、進程的生命周期
1)進程創建。進程可以被用戶請求創建,也可被其他進程創建。在系統初始化時也會創建進程
2)進程運行。當進程可以被CPU執行時的狀態為就緒狀態,可以一個系統中有很多就緒狀態的進程。此時操作系統根據某種調度算法選擇出一個就緒態的進程給CPU執行,同時把進程的狀態改成運行態。這個運行在”暢通無阻“時也不是無休止的運行,當正常運行了一段時間后 ,也會被CPU置成就緒態,把CPU的使用權讓給其他進程執行。
3)進程等待(阻塞):當執行命令無法馬上完成時就會把進程置為阻塞狀態。例如這個文件正在其他進程寫入時,或者訪問資源不足時。例如換頁時,讀硬盤的操作時,CPU會在這個時間段去執行其他進程。
4)進程喚醒:當阻塞的進程所需要的資源被滿足,或者等待的事件被到達,有其他進程或者操作系統把該進程PCB插入到就緒隊列。
5)進程結束:當進程正常執行退出、錯誤退出、發生致命錯誤、被其他進程所kill 。就意味這這個進程結束了
OT)進程掛起:暫停進程的執行,此時進程不占內存空間,其映射在硬盤上。進程掛起,分為阻塞掛起和就緒掛起。解除掛起和掛起的操作主要原理是內存和硬盤換入換出。當內存空間不夠用時,操作系統就會將沒在執行的進程掛起(換到硬盤中)以騰出內存空間。或者有優先級更高的進程需要被執行時,此時可能會將低優先級的進程進行掛起。如果阻塞掛起進程的資源被滿足,可在磁盤上修改進程狀態為就緒掛起。
?
四、線程的定義
如果一個程序希望并發地執行不同功能。可以把這些需要并發的功能來建立進程,使它們可以并發地執行。這樣做的問題是,由于每個進程中的數據相互不共享,如何實現進程間的通信,共享數據呢?實現起來開銷難免會大。所以希望有一個實體能夠并發地執行不同功能,共享內存數據來方便并發運行,這就是線程的目的。線程是進程的一條執行流程。進程創建需要創建PCB,分配資源。而線程有自己的TCB(線程控制塊),TCB,其中包含自己獨有的一些棧和寄存器如IP/PC,SP等,但是每個線程共享進程的數據段、代碼段、堆空間等。
進程是資源分配的單位,線程是CPU調度單位。線程同樣有就緒、執行、阻塞三種狀態。線程的創建、之間的通信,切換線程要比進程的創建,之間的通信,切換進程開銷要來得小 。但是對于數據安全性來講,多進程要比多線程來得安全。
五、線程的類型
線程的實現方式可分為三種:用戶線程,內核線程,輕量級進程。
用戶線程是操作系統看不到的線程,而內核線程是操作系統能夠看得見的線程。用戶線程的管理是由用戶態的對應的代碼庫函數來進行管理,而內核線程由操作線程直接管理。通常多個用戶線程可以對應一個或多個內核線程。
每個用戶線程的TCB由代碼庫函數來管理,操作系統無法訪問到。所以用戶線程請求系統調用,在操作系統眼里,就是一個進程發起的系統調用,如果這個系統調用造成了系統阻塞,那么整個進程都會變成等待。除此之外,除非用戶線程交出CPU的使用權,那么該進程下的其他用戶線程都將無法運行。只不過這個使用權的時間片段很小讓用戶感覺線程在“并發執行”。
內核線程的TCB是放在操作系統的內核中的,其創建、回收、管理都是由操作系統通過系統調用/內核函數來完成的,由內核來維護進程和線程的上下文信息。所以內核線程的切換意味這硬件資源的切換,切換線程其開銷要比用戶線程來得大。內核線程直接由CPU來調度,如果一個內核線程被阻塞,不會影響其他內核線程,如果一個進程有多個內核線程,那么進程CPU平均使用時間要比其他進程來得長。
輕量級進程。由內核支持的用戶線程。一個進程有一個或多個輕量級進程,每個輕量級進程由一個單獨的內核線程來支持。因此多輕量級進程的進程,其CPU平均使用時間要比其他進程來得長,更高效
六、進程的上下文切換概述
? ? ? 當發生中斷時,在執行的進程要停止執行把CPU的控制權交給其他進程。此時CPU要做的就是把進程的狀態保存起來。進程的執行變量,代碼,數據由進程自身的數據段,代碼段,堆棧保存。而CPU需要另外保存的是寄存器里的值,例如SP永遠指向進程棧頂的指針寄存器,執行到的代碼位置的IP/PC 等寄存器。而這些寄存器的值都保存在PCB中,PCB保存在操作系統的內核中。
? ? 常用寄存器匯總:https://blog.csdn.net/superSmart_Dong/article/details/115920429
??
總結
以上是生活随笔為你收集整理的操作系统原理:进程与线程、进程生命周期、线程的类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux C : Makefile 的
- 下一篇: Linux C : GDB调试命令汇总