零、进程
一、线程
线程拥有属性
线程相对于进程的优点
线程状态
用户级线程与内核级线程
用户级线程
用户级线程的优点
用户级线程的缺点
内核级线程
内核级线程的优点
内核级线程的缺点
二、微内核
微内核的优点
微内核缺点
微内核设计
三、Windows线程
四、Linux线程
windows与linux对比表
一、线程
线程拥有属性
线程相对于进程的优点
线程状态
用户级线程与内核级线程
用户级线程
用户级线程的优点
用户级线程的缺点
内核级线程
内核级线程的优点
内核级线程的缺点
二、微内核
微内核的优点
微内核缺点
微内核设计
三、Windows线程
四、Linux线程
windows与linux对比表
零、进程
进程被定义成资源分配单位和被保护的单位:
- 存放进程映像的虚拟地址空间,资源分配的对象
- 受保护地对处理器、其他进程(进程间通信)、文件和I/O资源的访问
一、线程
线程概念:系统在单个进程内支持多个并发执行路径的能力
线程拥有属性
- 执行状态
- 上下文
- 执行栈
- 静态存储空间
- 访问进程内资源的能力
多线环境中,进程仍只有一个与之关联的进程控制块与地址空间,但是其内部的线程各自拥有独立的栈、独立的控制块TCB(用于保存寄存器值、优先级、线程相关状态信息),并且进程中所有线程共享进程的状态和资源。
线程相对于进程的优点
- 在已有进程中创建新线程所需的开销比创建新进程少
- 终止线程比终止进程效率高
- 同一进程内线程切换比进程切换开销少
- 线程间通信比进程间通信效率高(进程间通信需要内核介入来提供保护和通信的必要机制)
线程状态
线程5种基本状态:
- 派生 新线程产生时。新线程拥有自己的寄存器上下文和栈空间,且位于就绪队列
- 阻塞 等待事件时被阻塞(保存用户寄存器程序,计数器和栈指针),此时处理器执行另一个同一进程中或不同进程中的就绪线程
- 运行 正在运行
- 解除阻塞 等待的事件发生,线程转移到就绪队列中
- 结束,线程完成,寄存器上下文和栈被释放
用户级线程与内核级线程
用户级线程
- 有关线程管理的所有工作都由应用程序完成,内核感觉不到线程的存在。
- 该管理工作包括线程的销毁与创建、线程间消息与数据的传递,线程的调度、线程上下文的保存与恢复
用户级线程的优点
- 用户级线程间切换不需要转到内核态,节省了两次状态转换的开销(用户态到内核态,内核态回到用户态)
- 调度算法可以为应用程序量身定做
- 可以在任何操作系统中运行,而不需要修改内核
用户级线程的缺点
- 当一个用户级线程调用系统函数时,该进程中所有线程都被阻塞
- 伪并行,用户级线程不能利用多处理器技术
内核级线程
有关线程管理的所有工作全部由内核完成
内核级线程的优点
- 内核可以同时把同一进程中的多个线程调度到不同的处理器中,实现正真的并行
- 如果一个线程被阻塞,内核可以调用同一进程中的其他线程
内核级线程的缺点
- 把控制从一个线程转移到另一个线程时,必须经过模式切换(用户态-内核态-用户态),会产生额外的开销
二、微内核
原理:最基本的操作系统功能才放在内核中,非基本的服务和应用程序在微内核之上构造,运行在用户态
内核外部的操作系统部件,被当做服务器进程实现,通过微内核传递消息来实现相互之间的交互,微内核起着信息交互与保护的功能
微内核的优点
- 一致接口,不用区分内核级服务与用户级服务接口,因为所有服务都是通过消息传递提供的
- 可扩展性,允许增加新的服务
- 灵活性,可以增加新功能与删减现有功能
- 可移植性,大部分处理器相关代码都在微内核中,移植需要修改的地方集中
- 可靠性,模块化设计增强可靠性
- 分布式支持,通过消息传递提供服务
微内核缺点
- 性能问题:
- 通过微内核构造消息、发送消息、接收应答并解码所花费的时间比一次系统调用多
- 当地址空间不重叠的进程之间传递消息会发生内存复制
微内核设计
微内核功能通常分为:
- 低级存储管理:微内核必须控制硬件概念上的地址空间,使得操作系统可以再进程级实现保护
- 进程间通信(IPC):微内核操作系统中进程间或线程间通信的基本形式是消息,地址空间不重叠的独立进程间消息传递设计内存间复制
- I/O和中断管理:内核识别中断但不处理中断,产生消息给该中断相关联的用户级进程
三、Windows线程
Windows区分进程与线程,同一进程内的多个线程可以分配给不同的处理器并且并发执行。
Windows先分配线程给处理器时,有软亲和性策略,分派器会试图把一个就绪线程指定给上一次运行它的同一个处理器,这有助于重新使用前一次执行该线程后仍处于高速缓存中的数据
四、Linux线程
老版本(2.4以前)的Linux并不区分进程与线程,任务统一由task_struct管理
图中
- 停止态 实际是一种暂停状态,只能由另一进程恢复
- 可中断 是一种阻塞状态,等待的是一个事件的结束、一个资源的可用或另一进程的信号。
- 不可中断状态 是一种与可中断状态不同的阻塞状态,它在等待一个硬件条件,不会接受任何信号
Linux上的组成一个用户进程的多个用户级进程被映射到共享同一组ID的多个内核级进程上
由于Linux是通过复制当前进程的属性的方式来创建新进程的,因此他们可以共享资源,如文件、信号处理程序和虚存,当两个进程共享相同虚存时,他们可以被当做是一个进程中的线程。
当内核需要从一个进程切换到另一个进程时,会检查当前进程的页目录地址是否和即将被调度的进程相同,如果相同,那么他们是共享了同一个地址空间了的,此时的上下文切换仅仅是从代码的处跳转到另一处。
虽然同组的进程共享一个内存空间,但是他们各自拥有一个独立的用户栈。