x86上的任务管理

Dhr*_*ruv 5 linux x86 assembly operating-system process

有人可以指出一些书籍或在线资源,它们详细解释了x86的任务管理功能吗?当发生中断或上下文切换时,我特别感兴趣的是理解x86硬件和OS(POSIX风格)之间的关系.英特尔手册非常令人困惑,我似乎无法从中获得太多.

谢谢,-Dhruv

and*_*soj 6

编辑添加您的实际答案:

保护模式软件架构
Tom Shanley
Addison-Wesley Professional(1996年3月16日)
ISBN-10:020155447X
ISBN-13:978-0201554472
googlebook,amazon

我的答案

您是否看过"了解Linux内核"第3版?它可以通过Safari获得,它可能是开始操作系统方面的好地方 - 我认为它不会给你带来细节,但它是一个很好的指南,可能会把linux内核的源代码和架构 - 特定的东西进入上下文 以下章节为您提供了内核方面要求的叙述("发生中断或上下文切换时硬件与操作系统之间的关系"):

  • 第3章:流程
  • 第4章:中断和例外
  • 第7章:进程调度


了解Linux内核,第3版.
Daniel P. Bovet; Marco Cesati
出版社:O'Reilly Media,
Inc.Pub.日期:2005年11月17日
打印ISBN-13:978-0-596-00565-8
打印ISBN-10:0-596-00565-2
Safari,亚马逊

我的推荐是这样一本书,有linux源代码和intel手册以及一个完整的啤酒冰箱,你就可以开始运行了.

来自第3章:流程的简短片段,以激发您的胃口:

3.3.2.任务状态段
80×86架构包括称为任务状态段(TSS)的特定段类型,用于存储硬件上下文.尽管Linux不使用硬件上下文切换,但它仍然被迫为系统中的每个不同CPU设置TSS.这样做有两个主要原因:
  • 当80×86 CPU从用户模式切换到内核模式时,它从TSS获取内核模式堆栈的地址(请参阅第4章"通过sysenter发出系统调用"中的"中断和异常的硬件处理"部分)第10章中的说明.
  • 当用户模式进程尝试通过输入或输出指令访问I/O端口时,CPU可能需要访问存储在TSS中的I/O权限位图以验证是否允许进程寻址端口.
更确切地说,当进程在用户模式下执行输入或输出I/O指令时,控制单元执行以下操作:
  1. 它检查eflags寄存器中的2位IOPL字段.如果设置为3,则控制单元执行I/O指令.否则,它会执行下一次检查.
  2. 它访问tr寄存器以确定当前的TSS,从而确定正确的I/O权限位图.
  3. 它检查与I/O指令中指定的I/O端口对应的I/O权限位图的位.如果清除,则执行该指令; 否则,控制单元会引发"一般保护"例外.
tss_struct结构描述了TSS的格式.正如第2章中已经提到的,init_tss数组为系统上的每个CPU存储一个TSS.在每个进程切换时,内核更新TSS的某些字段,以便相应的CPU的控制单元可以安全地检索它所需的信息.因此,TSS反映了CPU上当前进程的特权,但是当它们不运行时,不需要为进程维护TSS.

另一个潜在的参考是这一个,它确实有更多的x86特定的东西,你可能会从与PowerPC的对比中获益一点. Linux®内核入门,:x86和PowerPC架构的自上而下方法
Claudia Salzberg Rodriguez; 戈登菲舍尔; Steven Smolski
出版社:Prentice Hall
Pub.日期:2005年9月19日
打印ISBN-10:0-13-118163-7
打印ISBN-13:978-0-13-118163-2
Safari,亚马逊

最后,Robert Love的Linux内核开发第3版对上下文切换有一个非常详尽的描述,尽管它可能与上述内容有关.这是一个非常棒的资源.