操作系统-线程
操作系统
线程是为了更好的使多个程序并发执行,同时减少系统的开销而出现的
线程与进程的比较
- 调度的基本单位
传统的OS中,进程作为独立调度和分派的基本单文,每一次调度的时候,都要进行上下文的切换,开销比较大,而用线程作为独立运行的基本单文是,线程的切换只需要保存和设置少量的寄存器内容,开销比进程的销。在同一进程能切换线程不会引起进程的切换,如果切换到另一个进程的线程,则需要切换进程
- 并发性
在引入线程之后,不仅进程之间可以并发执行,一个进程中的多个线程也可以并发执行,甚至还允许一个进程中所有的线程并发执行,更加有效的提高了系统资源的利用率和系统的吞吐量
- 拥有资源
线程本身不像进程那样拥有系统资源,仅有一些必不可少的,能保证独立运行的资源,例如线程控制块TCB等,除此之外,多个线程共享进程所拥有的资源
- 独立性
在独立性方面,线程不够进程好,进程为了防止进程之间干扰,破坏,每个进程都拥有一个独立的地址空间和其他资源,而线程是为了提高并发性以及进程相互之间的合作而创建的
- 系统开销
进程在系统上的开销主要是创建进程,撤销进程,进程切换,特别是在进程切换的时候,涉及到上下文的切换,开销比较大,而由于线程只有少量的资源,在上下文切换的时候,开销比较小
- 支持多处理机系统
线程的控制块TCB
线程和进程一样,拥有控制块TCB,在TCB中有:
- 线程标识符
每个线程的唯一标识
- 寄存器
包括程序计数器PC,状态寄存器和通用寄存器的内容
- 线程运行状态
用于描述线程在哪一个状态
- 优秀级
描述线程执行的优先级
- 线程专有存储区
用于线程切换时存放的现场保护信息,和与该新城的统计信息
- 信号屏蔽
对某些信号屏蔽
- 堆栈指针
保存局部变量和返回地址。在线程中设置了两个专项堆栈的指针
- 指向用户自己堆栈的指针
在用户态时,使用用户自己的用户栈来保存局部变量和返回地址
- 指向核心栈的指针
在内核态,线程运行在核心态使用系统的核心栈
线程的实现方式
线程的实现
-
内核支持线程的实现
在仅设置内核支持的线程OS中,一种可能的线程控制方法是系统在创建一个新进程时,为它分配一个任务数据区PTDA,但进程要创建一个线程的时候,就分配一个TCB,将相关信息填入该TCB,并分配资源。在撤销线程事不立即回收该线程的资源和TCB,在创建新线程时,直接利用这个。
-
用户级线程的实现
用户线程在用户空间实现,所有的用户线程都具有相同的结构,都运行在一个中间系统上。有两种方式实现中间系统,运行时系统和内核控制线程
- 运行时系统
运行时系统实质是用于管理和控制线程的函数(过程)的集合,所有的函数都驻留在用户空间,并作为用户级线程与内核的接口
- 内核控制线程
这种线程有叫做轻型进程LWP,在系统中,LWP不会设置太多,而是把这些LWP做成一个缓冲池,成为“线程池”,当用户级线程需要与内核通信的时候,借助LWP就可以实现,有LWP实现了内核与用户级线程直接的隔离