(P36)线程介绍

文章目录

(P36)线程介绍

多线程有多个控制序列,单线程只有一个控制序列
控制序列(指令序列)
(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
每个线程都有一个对信号的处理状态
(P36)线程介绍

(P36)线程介绍

一个进程若有2个线程构成,则这2个线程可能竞争到2个CPU

密集:一个线程可以等待多个不同的IO,I/O密集型占用IO,可以让出CPU
(P36)线程介绍

一个进程不会随意破坏其它进程的地址空间,因为他受到内存管理单元MMU的保护
(P36)线程介绍

进程与进程之间竞争CPU时间片,这个CPU时间片分享给各个进程的多个线程
(P36)线程介绍

(P36)线程介绍

KERNEL THREADS:实际上就是进程,系统中并未提供线程的支持
USER THREADS:表示线程
只要一个线程阻塞了,另外一个线程也不能工作了
(P36)线程介绍
(P36)线程介绍

操作系统对线程开始支持了
USER THREADS的2个用户线程,对应KERNEL THREADS核心的2个线程,这2个线程可以调度到2个CPU

(P36)线程介绍

(P36)线程介绍

结合了1:1和N:1线程的优势,因为轻量级进程LWP比核心线程的切换开销小,所以用户线程的切换开销更小,另外也充分利用了多核处理器的功能,因为轻量级进程可以调度到核心线程KERNEL THREAD,每个核心线程可以调度到CPU,因为可以充分利用到多核的功能;
当前的POSIX 线程就是N:M混合线程实现的

(P36)线程介绍

进程数据结构
轻量级进程的数据结构,用他调度到核心线程,因而这些轻量级进程(线程)共享进程的数据结构,但是他也有自己的CPU状态,调度到核心线程,从而调度到CPU

(P36)线程介绍