加入收藏 | 设为首页 | 会员中心 | 我要投稿 南京站长网 (https://www.025zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

unix线程切换 本文所属图书?>?深入理解UNIX系统内核

发布时间:2022-10-28 14:30:47 所属栏目:Unix 来源:转载
导读: Solaris上的内核线程(kernel thread)是一个基本的轻量级进程对象,可以被单独调度和分发到某个系统处理器上运行。它不需要与任何进程进行关联,可以由内核通过执行特殊函数来创建、运行和

Solaris上的内核线程(kernel thread)是一个基本的轻量级进程对象,可以被单独调度和分发到某个系统处理器上运行。它不需要与任何进程进行关联,可以由内核通过执行特殊函数来创建、运行和销毁。也因为如此,内核在内核线程间切换时不需要重新映射虚拟地址空间[Kepp 91]。因此,内核线程的上下文切换比进程的上下文切换的开销来得小。

内核线程使用的资源仅仅是一个小的数据结构和一个栈。这个数据结构包含了以下信息:

保存内核寄存器的内容拷贝。

优先级和调度信息。

指向把线程放入调度队列的指针,或者,如果这个线程是被阻塞的,指向的是把线程放入资源等待(resource wait)队列的指针。

指向栈的指针

指向关联的LWP和proc结构的指针(如果线程没与LWP绑定,该指针指向的是NULL)

指向用于维护进程中所有线程的队列的指针和指向维护系统中所有线程的队列的指针。

关联LWP的信息,如果存在的话(见3.6.2节)

Solaris的内核由一组内核线程组成。有些内核线程运行着LWP,而其他内核线程则执行内部的内核函数。内核线程是完全可抢占的。它们可以属于系统中任何一个调度类(scheduling class)(见5.5节),包括实时类(real-time class)。内核线程使用的是同步原语中的特殊版本(信号量、条件变量等等。)来防止优先级反转(priority inversion),这是指低优先级线程锁住了高优先级线程所需的资源而阻碍高优先级进程的向前执行。这些特性将会在5.6节里介绍。

内核线程用来处理异步活动,例如延迟的磁盘写入、STREAMS服务过程unix线程切换,和callout(见5.2.1)。这允许内核为每个活动关联一个优先级(通过设置线程的优先级),并据此来适当地调度这些活动。内核线程也可用于支持轻量级进程。每个LWP都被附加到一个内核线程上(虽然并不是所有的内核线程都有一个LWP)。

(编辑:南京站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章