用户相关:进程地址空间(包括代码段、数据段、堆和栈、共享库...)
寄存器相关:程序计数器、指令寄存器、程序状态寄存器、栈指针、通用寄存器等的值
内核相关:
静态部分:PCB及各种资源数据结构
动态部分:内核栈(不同进程在进入内核后使用不同的内核栈)
将CPU硬件状态从一个进程换到另一个进程的过程称为上下文切换。
进程运行时,其硬件状态保存在CPU上的寄存器中
寄存器:程序计数器、程序状态寄存器、栈指针、通用寄存器、其他控制寄存器的值
程序不运行时,这些寄存器的值保存在进程控制块PCB中;当操作系统要运行一个新的进程时,将PCB中的相关值送到对应的寄存器中。
5. 线程 5.1 线程的引入构造服务器的三种方法:
模型 特性多线程 有并发、阻塞系统调用
单线程进程 无并发、阻塞系统调用
有限状态机 有并发、非阻塞系统调用、中断
开销的考虑
进程相关的操作:
创建进程
撤销进程
进程通信
进程切换
时间/空间开销大,限制了并发度的提高。
线程的开销小
创建一个新线程话费时间少,撤销也是
两个线程切换花费时间少
线程之间相互通信无须调用内核(同一进程内的线程共享内存和文件)
性能的考虑
多个线程,有的计算,有的I/O
多个处理器
5.2 线程的基本概念进程的两个基本属性
资源的拥有者----进程还是资源的拥有者
CPU调度单位----线程继承了这一属性
线程:进程中的一个运行实体,是CPU的调度单位,有时将线程称为轻量级进程。
在同一进程增加了多个执行序列(线程)。
5.3 线程的属性线程:
有标识符ID
有状态及状态转换
不运行时需要保护的上下文
有上下文环境:程序计数器等寄存器
有自己的栈和栈指针
同一个进程的不同线程,共享所在进程的地址空间和其他资源
可以创建、撤销另一个线程
程序开始是以一个单线程进程方式运行的。
用户级线程
在用户空间建立线程库:提供一组管理线程的过程。
运行时系统:完成线程的管理工作(操作、线程表)
内核管理的还是进程,不知道线程的存在
线程切换不需要内核态特权
多线程编程接口,以线程库方式提供给用户,pthread
pthread_create()
pthread_exit()
pthread_join()
pthread_yield()
优点:
线程切换快
调度算法是用用程序特定的
用户级线程可运行在任何操作系统上(只需要实现线程库)
缺点:
内核只将处理器分配给进程,同一进程中的两个线程不能同时运行与两个CPU上
大多数系统调用是阻塞的,因此,由于内核阻塞进程,所以进程中所有线程也被阻塞
内核管理所有线程,并向应用程序提供API接口
内核维护进程和线程的上下文
线程的切换需要内核支持
以线程为基础进行调度:
如:Windows
混合模型
线程创建在用户空间完成
线程调度等在核心态完成
多个用户级线程多路复用多个内核级线程
并发性 任何进程都可以与其他进程一起向前推进执行
动态性 进程是正在执行程序的实例
进程是动态产生、动态消亡的
进程在其生命周期内,在三种基本状态之间转换
独立性 进程是资源分配的一个独立单位
各进程的地址空间相互独立
交互性 指进程在执行过程中可能与其他进程产生直接或间接的关系
异步性 每个进程都以其相对独立的、不可预知的速度向前推进
进程映像 程序 + 数据 + 栈(用户栈、内核栈) + PCB
多线程应用场景
线程基本概念、属性
线程实现机制
可再入程序(可重入):
可被多个进程同时调用的程序,具有下列性质:
是纯代码的,即在执行过程中自身不改变;调用它的进程应该提供数据区
进程、进程状态及状态转换、进程控制、进程控制块(PCB)、进程地址空间、进程上下文环境
线程、线程属性、用户级线程、核心级线程、pthreads、可重入程序、原语、Web服务器