(P36)線程介紹

在這裏插入圖片描述

多線程有多個控制序列,單線程只有一個控制序列
控制序列(指令序列)
在這裏插入圖片描述

進程的相關概念

程序:完成特定功能的一系列有序指令的集合,通過編譯鏈接成:
可執行文件:稱之爲程序,代碼段(指令)+數據段(指令操作的程序),保存在磁盤上
進程:程序的一次動態執行過程,代碼段+數據段+堆棧段+PCB(進程控制塊:進程運行狀態(包括:就緒狀態,運行狀態,等待狀態),進程上下文,進程執行的CPU狀態,當前運行到哪個地址:IP指令指針+SP堆棧指針+寄存器狀態)

進程 程序
動態的(在不斷的推進的過程中,會更改數據段,產生一些臨時的數據保存在堆棧段當中,且PCB的的狀態也是不斷髮生改變的) 靜態的(保存在磁盤上,程序文件信息是不會改變的)
短暫的(只是程序的一次動態執行過程) 永久的
代碼段+數據段+堆棧段+PCB 代碼段+數據段

一個進程只能對應一個程序(一個進程是一個程序的動態執行實例,一個程序可以運行多個實例,一個程序可以對應多個進程

進程數據結構:多個線程共享下面的信息
進程ID,uid,gid,有效uid,有效gid,cwd當前工作狀態,地址空間Memory Map每個進程都有2^32=4GB 的地址空間(對於32位的機器而言),信號分發表Signal Dispatch Table處理信號,文件描述表File Descriptor(維護當前打開的文件),

不共享的信息如下:
CPU state(單線程只有一個,多線程有多個,保存執行程序所必要的信息):優先級Poriority,信號屏蔽字Signal Mask,寄存器Registers,內核堆棧Kernel Stack

IP指令指針+SP堆棧指針+通用寄存器等
線程的局部變量
每個線程都有一個errno
每個線程都有一個對信號的處理狀態
在這裏插入圖片描述

在這裏插入圖片描述

一個進程若有2個線程構成,則這2個線程可能競爭到2個CPU

密集:一個線程可以等待多個不同的IO,I/O密集型佔用IO,可以讓出CPU
在這裏插入圖片描述

一個進程不會隨意破壞其它進程的地址空間,因爲他受到內存管理單元MMU的保護
在這裏插入圖片描述

進程與進程之間競爭CPU時間片,這個CPU時間片分享給各個進程的多個線程
在這裏插入圖片描述

在這裏插入圖片描述

KERNEL THREADS:實際上就是進程,系統中並未提供線程的支持
USER THREADS:表示線程
只要一個線程阻塞了,另外一個線程也不能工作了
在這裏插入圖片描述
在這裏插入圖片描述

操作系統對線程開始支持了
USER THREADS的2個用戶線程,對應KERNEL THREADS核心的2個線程,這2個線程可以調度到2個CPU

在這裏插入圖片描述

在這裏插入圖片描述

結合了1:1和N:1線程的優勢,因爲輕量級進程LWP比核心線程的切換開銷小,所以用戶線程的切換開銷更小,另外也充分利用了多核處理器的功能,因爲輕量級進程可以調度到核心線程KERNEL THREAD,每個核心線程可以調度到CPU,因爲可以充分利用到多核的功能;
當前的POSIX 線程就是N:M混合線程實現的

在這裏插入圖片描述

進程數據結構
輕量級進程的數據結構,用他調度到核心線程,因而這些輕量級進程(線程)共享進程的數據結構,但是他也有自己的CPU狀態,調度到核心線程,從而調度到CPU

在這裏插入圖片描述

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