- 论坛徽章:
- 0
|
学习LINUX内核的教材--linux内核情景分析
NOTE:We used to use x86 hardware context switching.The reason for not using it any more becomes apparent when you try to recover gracesfully from saved state that is no long valid(state segment registor values in particular). With the hardware task-switching,there is no way to fix bad state in a reasonable manner.
<<情景>;>;的作者对第375页的LINUX不使用的X86的硬切换的三个注释原因,作者没有搞明白第一个,我在这里补一下:
先来翻译一遍:我们曾经使用X86的硬求换机制,现在不再使用的原因是显而易见的:当你幽雅的恢复保存的状态时不幸的是不再合法了(状态段寄存器的值是唯一的).在硬切换中,我们没有办法以一个合适的方式来修复这种错误的状态.
结合下面的的两个注释是讲软切的优点,这里的注释就是说我不得不使用软切,因为硬切要出错,而又没有办法来修复这个错误.
好,下面解释一下为什么硬切有错误:
以OSR5为例子:在./sys/seg.h中定义了两个当前TSS选择子,LINUX只有一个,
这就是错误的原因,OSR5的一个是用来表示当前进程的,另一个就是用来硬切的,
因为X86要求正在使用的TSS描述符被设置成忙,JMP到忙的TSS描述符要引起硬故障,所以使用硬切的必须要准备两个TSS描述符,当时我很奇怪为什么OSR5要设置两个TSS描述符(按X86的设计要求,是每个进程都设置一个TSS描述符的,只是UNIX对此做了简化,对当前的进程才设置TSS描述符,后来明白了,当我看LINU的时候又觉得奇怪了,LINUX只有一个TSS描述符,他怎么切换呢?)LINUX更彻底,我的切换根本就不使用TSS描述符,从这个意义上讲,LINUX的所有任务对X86来说都是在一个
任务中执行的,看来LINUX不仅仅是不使用X86设计好的东西,而且是刻意破坏它,X86的这种设计对他来说反而是个累赘,INTEL对此不知道会不会吐血呵呵. |
|