免费注册 查看新帖 |

Chinaunix

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

请问大家一个中断保存时的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-20 09:27 |只看该作者 |倒序浏览
新手在学习linux kernel的问题:
  在中断或异常发生的时候,若CPL和DPL不相等的情况下,会改变堆栈来切换到新的privilege的堆栈下
  但是ULK3上面说的是先取出新的ss和esp,然后在新的堆栈下面保存以前的ss和esp,但是既然ss和esp已经变了,怎么还能保存以前的呢?

ULK3上的原文如下:
第142页
   Loads the ss and esp registers with the proper values for the stack segment and stack pointer associated with the new privilege level. These values are found in the TSs
  In the new stack,it saves the previous values of ss and esp,which define the logical address of the stack associated with the old privilege level

请大家告诉一下小弟这是为什么?

论坛徽章:
0
2 [报告]
发表于 2007-09-20 09:48 |只看该作者
呵呵,这个是cpu来透明完成的,你不需要担心的。

论坛徽章:
0
3 [报告]
发表于 2007-09-20 11:00 |只看该作者
原帖由 flyinox 于 2007-9-20 09:27 发表
新手在学习linux kernel的问题:
  在中断或异常发生的时候,若CPL和DPL不相等的情况下,会改变堆栈来切换到新的privilege的堆栈下
  但是ULK3上面说的是先取出新的ss和esp,然后在新的堆栈下面保存以前的ss和 ...


TSS中不止一对ss和esp。kernel中对应的tss结构和它相似。老的ss和esp仍然保存在tss里面。
如果我没记错,kernel中描述tss的数据结构在processor.h(i386)中,lz可以参考

tss.JPG (31.45 KB, 下载次数: 21)

tss.JPG

论坛徽章:
0
4 [报告]
发表于 2007-09-20 11:32 |只看该作者
谢谢wing兄!好像内核的堆栈地址是从ss0和sp0中取出的,那么是不是说这个时候老的privilege的ss和sp是保存在ss1和sp1或者ss2和sp2中的,这个时候tss是没有变化的对么。我不是很确定,呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP