来源:赛迪网 作者:korn

一、tast_struct结构
他是个数据结构,能够说,他代表了一个进程。他有很多字段,大体有一下几种:
标识号:进程标识、用户标识、组标识。
状态: Linux的进程的四种基本状态
调度信息:优先级、时间片等
进程链信息:父进程、子进程的指针
文档信息:打开文档、虚拟文档系统
上下文信息:进程的运行环境
二、I386体系的任务管理和调度
I386体系从硬件上支持任务间的转换。为此目的,增设了一种新段:任务状态段(TSS),首先他和数据段、代码段相同也是一种段,其次他记录了任务的状态信息。
和其他段相同,也有描述他的结构:TSS描述符表,他记录了一个TSS的信息,同时更有一个TR寄存器,他指向当前任务的TSS。任务转换的时候,cpu会将原寄存器的内容写出到相应的TSS,同时将新TSS的内容填到寄存器中,这样就实现了任务的转换。
三、Linux进程转换
Linux任务转换是通过switch_to这个宏实现的,他利用长跳指令,当长跳指令的操作数是TSS描述符的时候,就会引起CPU的任务的转换,此时,cpu将任何寄存器的状态保存到当前任务寄存器TR所指向的TSS段(当前任务的任务状态段)中,然后利用长跳指令的操作数(TSS描述符)找到新任务的TSS段,并将其中的内容填写到各个寄存器中,最后,将新任务的TSS选择符更新到TR中。这样系统就正式开始运行新转换的任务了。上面提到的task_struct中的tss成员就是记录TSS段内容的。


本文来自ChinaUnix博客,假如查看原文请点:http://blog.chinaunix.net/u/31/showart_523037.html