打开主菜单

求真百科

十字转门

十字转门

十字转门,又叫turnstile。Turnstile是一种数据抽象,用来封装休眠队列和与互斥锁和读/写锁相关的优先级继承信息。Turnstiles在Solaris7大幅改变,但基本前提仍然是相同的。首先,我们要看着2.5.1/2.6机制,然后看看在Solaris7发生什么改变。

目录

简介

tstile_mod的结构是这样展开的。它保持turnstiles的链接,以及实施所需的各个领域,如pool,活跃的数字行在tsm_chunk阵列的活跃入turnstiles,链接到pool中的turnstiles,一个数组的指针到pool中的turnstiles块(tsm_chunk[] -这些都是活跃的pool中的turnstiles)。turnstiles本身维护名单上的其他pool中的turnstiles,前向链路的结构与优先级继承信息(pirec),数组有两个休眠队列,读/写锁,读操作和写操作都保存在单独的休眠队列,而只有其中之一是用于互斥锁。正如上个月我们所看到的,休眠队列点上的队列(sq_first)内核线程。其他环节结合在一起,包括内核线程链接turnstiles(KTHREAD阻塞时,对一个同步对象设置),如果一个点从KTHREAD结构pirec的内核线程的优先级改变,由于优先级反转。由于继承是接收者(高优先级),benef领域pirec点回的内核线程更好的优先级。

评价

在这两种情况下,我们现在有一个同步对象(可适应互斥)的turnstile,并且我们能通过关联turnstile继续改变线程状态以休眠和设置休眠序列。内核的t_block()函数就是以这个目的被调用的,同时CL_SLEEP宏也为此调用。从之前的列中应该记住,调度特定类的函数是通过宏调用的,这些宏用于实现正确的基于调度内核线程类的功能。在TS和IA类线程情况下,ts_sleep()函数被调用,并且线程的优先级设置为SYS优先级。这是一个优先级的提升——当他被唤醒是,他会得到优先于TS和IA而运行的优先级——同时线程的状态被设置为TS_SLEEP。内核线程的t_wchan域(等待渠道)设置为同步对象操作向量的地址——一个有可适应互斥对象特定功能的数组。回想从上个月一个到相似函数设定的连接为休眠序列完成了。在这种turnstile的情况下,不同的同步对象的turnstile被用以定义一个操作的向量,这向量是一种简单的包含对象种类,拥有者的地址,和未休眠的优先级修改独特对象函数的数据结构。一个同步对象的操作结构为了所有同步对象而被声明,这存在于Solaris内核中。 [1]

参考文献