0.概述:
分段分页机制属于内存管理,是两种不同的地址变换技术。
任务切换作为任务管理的核心,也是本文重点讲述的部分。
这两部分内容尽量以“图表”展示
1.分段分页机制
分段、分页机制是两种不同的地址变换机制。
**分段机制**适应了程序中不同类型段和大小的逻辑分区,即段的大小是可变的。
**分页机制**按固定页大小(通常4K)管理内存以支持“虚拟存储技术”
(虚拟存储技术”:线性地址空间往往大于实际物理内存空间,故需要将
线性地址空间以“虚拟映射”到实际物理空间。而分页机制按页大小划分和映射线性地址空间)
具体的地址转换过程,如下图
2.任务切换
说到任务切换,不得不提TSS任务状态段(1024B),如下图所示
TSS在任务切换过程中起着重要作用,通过它实现任务的挂起和恢复。
所谓”任务切换“是指,挂起当前正在执行的任务,恢复或启动另一任务的执行。在任务切换过程中,首先,处理器中各寄存器的当前值
被自动保存到 TR(任务寄存器)所指定的TSS中;然后,下一任务的TSS的选择子被装入TR;最后,从TR所指定的TSS中取出各寄存
器的值送到处理器的各寄存器中。由此可见,通过在TSS中保存任务现场各寄存器状态的完整映象,实现任务的切换。
任务切换有两种途径:
1.任务TSS段的选择符
2.任务门选择符(内核中只在调度一个任务来处理一个中断或异常时,IDT中的中断或异常表项必须是一个任务门,并且其中含有中断或
异常处理任务的TSS选择符(通过任务门选择符锁定对应任务门描述符里存有TSS段选择符,进而在GDT中找到对应TSS描述符。故这是
间接切换的方式,**注意:若是中断或陷阱门,并不会造成任务切换(如:系统调用**))
详细的任务切换流程图如下:
保存上下文前后新老任务的标志变化表
3 总结
以上属于理论部分(省略了部分细节),尽量以图表的形式展现了。这部分知识比较晦涩难懂,会在后面讲解源码时细谈实现。
此外,这部分内容可在后续文章阅读后回来查阅以加深理解。
参考资料:
《Linux内核完全剖析——基于0.2内核》第四章