操作系统学习笔记----进程/线程模型----Coursera课程笔记 (3)

用户相关:进程地址空间(包括代码段、数据段、堆和栈、共享库...)
寄存器相关:程序计数器、指令寄存器、程序状态寄存器、栈指针、通用寄存器等的值
内核相关:
静态部分:PCB及各种资源数据结构
动态部分:内核栈(不同进程在进入内核后使用不同的内核栈)

4.5 上下文(Context)切换

将CPU硬件状态从一个进程换到另一个进程的过程称为上下文切换。

进程运行时,其硬件状态保存在CPU上的寄存器中
寄存器:程序计数器、程序状态寄存器、栈指针、通用寄存器、其他控制寄存器的值

程序不运行时,这些寄存器的值保存在进程控制块PCB中;当操作系统要运行一个新的进程时,将PCB中的相关值送到对应的寄存器中。

5. 线程 5.1 线程的引入

构造服务器的三种方法

模型 特性
多线程   有并发、阻塞系统调用  
单线程进程   无并发、阻塞系统调用  
有限状态机   有并发、非阻塞系统调用、中断  

开销的考虑

进程相关的操作:
创建进程
撤销进程
进程通信
进程切换

时间/空间开销大,限制了并发度的提高。

线程的开销小
创建一个新线程话费时间少,撤销也是
两个线程切换花费时间少
线程之间相互通信无须调用内核(同一进程内的线程共享内存和文件)

性能的考虑

多个线程,有的计算,有的I/O

多个处理器

5.2 线程的基本概念

进程的两个基本属性
资源的拥有者----进程还是资源的拥有者
CPU调度单位----线程继承了这一属性

线程:进程中的一个运行实体,是CPU的调度单位,有时将线程称为轻量级进程。

在同一进程增加了多个执行序列(线程)。

5.3 线程的属性

线程:

有标识符ID
有状态及状态转换
不运行时需要保护的上下文
有上下文环境:程序计数器等寄存器
有自己的栈和栈指针

同一个进程的不同线程,共享所在进程的地址空间和其他资源

可以创建、撤销另一个线程
程序开始是以一个单线程进程方式运行的。

6. 线程机制的实现 6.1 线程的实现

用户级线程

在用户空间建立线程库:提供一组管理线程的过程。

运行时系统:完成线程的管理工作(操作、线程表)

内核管理的还是进程,不知道线程的存在

线程切换不需要内核态特权

多线程编程接口,以线程库方式提供给用户,pthread

pthread_create()
pthread_exit()
pthread_join()
pthread_yield()

6.2 用户级线程小结

优点
线程切换快
调度算法是用用程序特定的
用户级线程可运行在任何操作系统上(只需要实现线程库)

缺点
内核只将处理器分配给进程,同一进程中的两个线程不能同时运行与两个CPU上
大多数系统调用是阻塞的,因此,由于内核阻塞进程,所以进程中所有线程也被阻塞

6.3 核心级线程

内核管理所有线程,并向应用程序提供API接口
内核维护进程和线程的上下文
线程的切换需要内核支持
以线程为基础进行调度:
如:Windows

混合模型

线程创建在用户空间完成
线程调度等在核心态完成
多个用户级线程多路复用多个内核级线程

7. 本章重点小结 7.1 进程

并发性 任何进程都可以与其他进程一起向前推进执行
动态性 进程是正在执行程序的实例
进程是动态产生、动态消亡的
进程在其生命周期内,在三种基本状态之间转换
独立性 进程是资源分配的一个独立单位
各进程的地址空间相互独立
交互性 指进程在执行过程中可能与其他进程产生直接或间接的关系
异步性 每个进程都以其相对独立的、不可预知的速度向前推进
进程映像 程序 + 数据 + 栈(用户栈、内核栈) + PCB

7.2 线程

多线程应用场景
线程基本概念、属性
线程实现机制

可再入程序(可重入)
可被多个进程同时调用的程序,具有下列性质:
是纯代码的,即在执行过程中自身不改变;调用它的进程应该提供数据区

8. 重点概念

进程、进程状态及状态转换、进程控制、进程控制块(PCB)、进程地址空间、进程上下文环境
线程、线程属性、用户级线程、核心级线程、pthreads、可重入程序、原语、Web服务器

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyxxxy.html