免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1003 | 回复: 0
打印 上一主题 下一主题

《自己动手写操作系统》笔记二 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-11-24 11:18 |只看该作者 |倒序浏览
     在linux0.11任务切换中,一直都不明白中断门、陷阱门、任务门,因为在和同学一起搞个操作系统出来,所以我也问了他这些问题,他查了很多资料并把所知的写了下来,今天我把这些写下来只是让自己以后有机会再看,因为准确的说这是同学的功劳与辛苦,如果有兴趣的朋友可以到我同学的博客中去看看:
Zcanoe.cublog.cn


        通过中断门及陷阱门的转移
    若通过中断矢量号乘以8从IDT表中检索的IDT描述符是一个中断门或陷阱门, 则表示中断(或异常)处理程序与当前正执行程序处于同一任务中, 并且中断(或异常)处理程序的首地址由中断门或陷阱门提供.如图,门中的选择子用来选择GDT或LDT中的描述符, 该描述符必须指定一个可执行的存储器段, 该可执行存储器段即为中断(或异常)处理程序所在的存储段, 它的起始地址及限量均由其对应的存储段描述符给出, 而中断(或异常)处理程序首地址在该存储段中的偏移地址由门描述符的偏移量给出.
    通过中断门或陷阱门进行转移时,处理程序要负责保护程恢复处理器中寄存器的状态.①当通过中断门或陷阱门在同一特权级中转移,不会发生栈切换。②当通过中断门或陷阱门从外层特权级(CPL小)到内层特权级(RPL大)的转移时,会发生堆栈切换。
    首先, 老栈的SS与ESP值被压入新栈后, 将其中的NT及TF标志清零.TF = 0意味着处理程序不允许单步执行;NT = 0意味着处理程序返回时, IRET指令执行结果返回到同一任务, 而不是一个嵌套任务.同时, 若是通过中断门进行控制转移还需要将IF清零, 以便中断处理程序中不允许可屏蔽中断产生;若是通过陷阱门进行控制转移,则IF状态保持不变.显然,中断门适宜于处理中断,陷阱门适宜于处理异常.然后,返回地址(外层程序即主程序的CS及EIP值)压栈.同时,门中选择子的RPL置入CPL;门中选择子装入CS;门中偏移量装入EIP, 完成向处理程序转移.最后,根据需要再将出错码压入新栈.在新, 老栈之间不进行参数拷贝,因而Dword Count字段也忽略不用.
     NT=0位的中断与返回
    若通过中断门或陷阱门转入处理程序, 在转入过程中已将NT清零, 表明是同一任务内的程序转移.因此,NT = 0 时的中断处理程序(或异常)返回属于同一任务的返加. 然而, 由于转入中断处理程序时, 可以转入同级或更内层的级, 故返回时是返回到同一级还是外层级.
    下面结合上图 说明NT = 0时的返回过程.返回时, 当前栈为内层栈,在执行IRET指令之前, 处理程序必须将错误码(如果有的话)从栈中弹出, 首先弹出EIP及CS 值至相应寄存器, 恢复断点地址, 然后弹出EFLAGS值, 恢复中断或异常发生前各标志的状态. 同时对弹出的CS选择子的RPL字段进行检验, 若RPL相对CPL为更外层的特权级, 则需要进行特权改变.图中弹出的CS选择子的RPL为更外层特权级, 故还需从内层栈继续弹出外层栈的栈指针ESP值及SS值到相应寄存器中, 以便恢复外层栈.至此, 被中断的SS, ESP, EFLAGS, CS及EIP等寄存器内容均恢复成中断被接受时保存下来的值.以上过程均在IRET指令执行过程中由CPU自动完成.
     通过任务门的转移
     系统产生某一中断或异常时, 将该中断或异常的矢量叼乘以8后作为指针去检索中断描述表IDT, 若检索到的描述符是一个任务门, 则表示要转移到不同任务的处理程序.与CALL指令通过任务门进行任务切换一样, 任务门提供一个16位选择子, 以指向处理程序任务的TSS段.该TSS段必须是一个可用的286TSS段或386/486TSS段. 通过任务门到一个可用的TSS段, 转入中断或异常处理程序的过程, 与CALL指令通过任务门到可用的TSS段, 实现任务切换的过程相同. 惟一不同的是, 中断或异常通过任务门引起的任务切换和程序转移提供错误码. 在任务切换完成后, 如有必要, 应将错误码压入新任务的堆栈中.
       如果中断或异常发生时, 是通过任务门转入处理程序, 则在转入过程中, 使EFLAGS中的NT位置1. 这表明从处理程序返回主程序执行IRET指令时, 必须返回到一个嵌套的任务. IRET指令应从当前TSS段的链接字段中索取返回到的任务的TSS选择子, 从而完成任务切换和程序返回。

   
     
     



本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/53855/showart_429753.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP