多线程技术单线程结构进程传统进程是单线程结构进程 单线程结构进程的问题: 单线程结构进程在并发程序设计上存在的问题,进程切换开销大,进程通信开销大,限制了进程并发的粒度,降低了并行计算的效率 解决问题的思路: 把进程的两项功能,即“独立分配资源”与“被调度分派执行”分离开来,进程作为系统资源分配和保护的独立单位,不需要频繁地切换,线程作为系统调度和分派的基本单位,能轻装运行,会被频繁地调度和切换,线程的出现会减少进程并发执行所付出的时空开销,使得并发粒度更细、并发性更好 多线程结构进程多线程环境下进程的概念: 在多线程环境中,进程是操作系统中进行保护和资源分配的独立单位。具有:用来容纳进程映像的虚拟地址空间,对进程、文件和设备的存取保护机制 线程是进程的一条执行路径,是调度的基本单位,同一个进程中的所有线程共享进程获得的主存空间和资源。它具有:线程执行状态,受保护的线程上下文,当线程不运行时,用于存储现场信息,独立的程序指令计数器,执行堆栈,容纳局部变量的静态存储器 多线程环境下线程的状态与调度线程状态有运行、就绪和睡眠,无挂起,与线程状态变化有关的线程操作有:孵化、封锁、活化、剥夺、指派、结束,OS感知线程环境下:处理器调度对象是线程,进程没有三状态(或者说只有挂起状态),OS不感知线程环境下:处理器调度对象仍是进程,用户空间中的用户调度程序调度线程 并发多线程程序设计的优点:快速线程切换,减少(系统)管理开销,(线程)通信易于实现,并行程度提高,节省内存空间 多线程技术的应用:前台和后台工作,C/S应用模式,加快执行速度,设计用户接口 KLT和ULT内核级线程KLT,Kernel-LevelThreads线程管理的所有工作由OS内核来做,OS提供了一个应用程序设计接口API,供开发者使用KLT,OS直接调度KLT用户空间P内核空间P 内核级线程的特点进程中的一个线程被阻塞了,内核能调度同一进程的其它线程占有处理器运行,多处理器环境中,内核能同时调度同一进程中多个线程并行执行,内核自身也可用多线程技术实现,能提高操作系统的执行速度和效率,应用程序线程在用户态运行,线程调度和管理在内核实现,在同一进程中,控制权从一个线程传送到另一个线程时需要模式切换,系统开销较大 用户级线程ULT,User-LevelThreads用户空间运行的线程库,提供多线程应用程序的开发和运行支撑环境,任何应用程序均需通过线程库进行程序设计,再与线程库连接后运行,线程管理的所有工作都由应用程序完成,内核没有意识到线程的存在P用户空间线程库内核空间 用户级线程的特点所有线程管理数据结构均在进程的用户空间中,线程切换不需要内核模式,能节省模式切换开销和内核的宝贵资源,允许进程按应用特定需要选择调度算法,甚至根据应用需求裁剪调度算法,能运行在任何OS上,内核在支持ULT方面不需要做任何工作,不能利用多处理器的优点,OS调度进程,仅有一个ULT能执行,一个ULT的阻塞,将引起整个进程的阻塞 Jacketing技术把阻塞式系统调用改造成非阻塞式的,当线程陷入系统调用时,执行jacketing程序,由jacketing程序来检查资源使用情况,以决定是否执行进程切换或传递控制权给另一个线程 ULT适用于解决逻辑并行性问题,KLT适用于解决物理并行性问题 多线程实现的混合式策略线程创建是完全在用户空间做的,单应用的多个ULT可以映射成一些KLT,通过调整KLT数目,可以达到较好的并行效果 多线程实现混合式策略的特点组合用户级线程/内核级线程设施,线程创建完全在用户空间中完成,线程的调度和同步也在应用程序中进行,一个应用中的多个用户级线程被映射到一些(小于等于用户级线程数目)内核级线程上,程序员可以针对特定应用和机器调节内核级线程的数目,以达到整体最佳结果,该方法将会结合纯粹用户级线程方法和内核级线程方法的优点,同时减少它们的缺点 线程混合式策略下的线程状态KLT三态,系统调度负责,ULT三态,用户调度负责,活跃态ULT代表绑定KLT的三态,活跃态ULT运行时可激活用户调度,非阻塞系统调用可使用Jacketing启动用户调度,调整活跃态ULT 多线程实现的各种策略总结处理器调度的层次高级调度:又称长程调度,作业调度,决定能否加入到执行的进程池中 中级调度,又称平衡负载调度,决定主存中的可用进程集合 低级调度:又称短程调度,进程调度,决定哪个可用进程占用处理器执行 高级调度分时OS中,高级调度决定:是否接受一个终端用户的连接,命令能否被系统接纳并构成进程,新建态进程是否加入就绪进程队列 批处理OS中,高级调度又称为作业调度,功能是按照某种原则从后备作业队列中选取作业进入主存,并为作业做好运行前的准备工作和完成后的善后工作 中级调度引进中级调度是为了提高内存利用率和作业吞吐量,中级调度决定那些进程被允许驻留在主存中参与竞争处理器及其他资源,起到短期调整系统负荷的作用,中级调度把一些进程换出主存,从而使之进入“挂起”状态,不参与进程调度,以平顺系统的负载 低级调度低级调度:又称处理器调度、进程调度、短程调度,按照某种原则把处理器分配给就绪态进程或内核级线程,进程调度程序:又称分派程序,操作系统中实现处理器调度的程序,是操作系统的最核心部分,处理器调度策略的优劣直接影响到整个系统的性能 低级调度的主要功能:
处理器调度算法选择处理器调度算法的原则
优先数调度算法根据分配给进程的优先数决定运行进程:抢占式优先数调度算法(对实时的适用),非抢占式优先数调度算法(对大多数适合) 优先数的确定准则:进程负担任务的紧迫程度,进程的交互性,进程使用外设的频度,进程进入系统的时间长短 与进入系统时间相关的优先数
时间片轮转调度算法
分级调度算法又称多队列策略,反馈循环队列,基本思想是建立多个不同优先级的就绪进程队列,多个就绪进程队列间按照优先数调度,高优先级就绪进程,分配的时间片短,单个就绪进程队列中进程的优先数和时间片相同 分级调度算法的分级原则
彩票调度算法基本思想:为进程发放针对系统各种资源(如CPU时间)的彩票;当调度程序需要做出决策时,随机选择一张彩票,持有该彩票的进程将获得系统资源,合作进程之间的彩票交换 |
|