150 likes | 380 Views
第十九讲 核心级线程,线程调度 目的与要求: 掌握核心级线程实现原理 , 及典型的线程调度方法 。 重点与难点: 线程核心实现方法和混合实现方法。组调度方法。 作业: 3 , 6. 8.1.3 线程实现 二 . 内核级线程 由操作系统内核提供线程创建,结束,同步等系统调用。当进程被创建时,内核或同时为进程创建第一个核心级线程,运行用户初始程序;以后可调用创建线程系统调用,创建新的线程。 内核调度以线程为单位。核心级线程既运行用户程序,在陷入 / 中断进管时又运行核心程序。. 进程 2. 进程 1. L. L. L. L. L. 线程调度. CPU. ….
E N D
第十九讲 核心级线程,线程调度 目的与要求:掌握核心级线程实现原理,及典型的线程调度方法。 重点与难点:线程核心实现方法和混合实现方法。组调度方法。 作业:3,6
8.1.3线程实现 二. 内核级线程 由操作系统内核提供线程创建,结束,同步等系统调用。当进程被创建时,内核或同时为进程创建第一个核心级线程,运行用户初始程序;以后可调用创建线程系统调用,创建新的线程。 内核调度以线程为单位。核心级线程既运行用户程序,在陷入/中断进管时又运行核心程序。
进程2 进程1 L L L L L 线程调度 CPU … CPU
创建核心级线程系统调用处理过程: • 接收新线程执行函数地址,初始变量值,用户栈地址,私有区地址; • 在核心空间中分配TCB,核心栈;初始化上述表格及运行现场; • 将线程状态改为就绪; • 运行核心线程调度程序; • 恢复被调度线程的现场运行。
操 作 用户级线程 核心级线程 进 程 创建(ms) 52 350 1700 使用信号量同步(ms) 66 390 200 • 特点: • 可支持同一进程内线程在多CPU上的并行; • 线程状态由内核调度程序完全掌握; • 核心级线程比用户级线程开销大; • 核心级线程表格占用系统空间。* 在SPARC工作站上不同线程、进程操作开销比较
三. 混合实现 用户用多线程库函数编程,多线库合理安排用户级线程使用内核级线程。 … … 进程2 进程1 多线库调度 多线库调度 L L L L L 线程调度 CPU … CPU 用户按用户程序的并发度安排使用用户级线程,多线库程序参考计算机CPU个数安排使用核心级线程。
四. 纯内核线程 • 纯粹运行内核程序的线程,不提供创建此类线程的系统调用界面,由系统初始化时创建,用来处理核心的一些异步事务。如定时进行页面置换,定时刷新文件缓冲区等。
8.1.4线程调度 • 线程调度原则: • 让CPU充分被利用; • 同进程的线程尽量一起运行(提高系统吞吐率) • 一.负载共享 • 原则:让任意进程中的任意线程可在任意处理机上运行。 • 实现:系统有一全局就绪队列,每个处理机在运行调度程序时都可从全局队列中选择合适线程来运行。
优点: • 系统负载均匀分布到处理机上。 • 实现容易。 • 缺点: • 不能实现相关线程同时运行;线程切换可能频繁;同一就绪队列需要互斥访问。
二、负载绑定 如果将线程指定到处理机上运行而又允许处理机在执行到因I/O或同步等操作时而进行调度切换到其它线程,这种情况就是处理机与线程的绑定。 实现:每个CPU有自己的线程就绪队列,系统有一个就绪队列。CPU优先调度自己的就绪队列线程。 特点:用户通过指定CPU来平衡负载。
三 . 组调度 原则:让同一进程中的线程在多CPU上同时运行。 实现: ·引导型组调度:当CPU调度了进程中的一个线程时,通过机间中断通知其它CPU调度同一进程中的其它线程。 ·浮动型组调度:当某个CPU调度了进程中的一个线程时,同时也帮助把该进程的某些线程调度到其它CPU上,通过机间中断通知其它CPU去做线程切换。
特点:同一作业的多线程并发性好;减少了因同一作业线程间同步较多而相互等待时间,减少了线程切换次数。特点:同一作业的多线程并发性好;减少了因同一作业线程间同步较多而相互等待时间,减少了线程切换次数。
四. 独占处理机调度(独占式组调度): • 原则:让同一进程中的线程在多CPU上同时独占运行。 • 实现:把进程所需要的CPU一次性分给进程。 • 特点: • CPU利用率不高; • 线程运行过程中没有线程切换; • 避免了线程间同步时间因调度问题延长。
五. 多级动态调度 基础:有用户级和核心级线程支持。 原则:动态创建线程,内核调度程序调度核心级线程占用CPU,多线库调度程序调度用户级线程占用核心级线程。 核心调度策略:支持组调度,保证负载共享。 多线库调度策略:支持优先调度运行关键任务的线程,支持负载共享。
特点: • 动态创建线程可以减少多线程库和内核的内存资源使用量。 • 多线库调度和内核调度没有有机连接。如用户级线程在某一内核线程上阻塞于内核中时,多线程库调度程序并不能感知。 • 当内核级线程上有关键用户级线程运行时,内核调度程序也不能感知。