微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

关于发生中断时 TSS 参与的两个问题

如何解决关于发生中断时 TSS 参与的两个问题

当我阅读 xv6(x86 版本)关于如何保存用户进程的寄存器时出现了问题。情况是,当一个普通用户程序正在运行时,会像定时器一样发生硬件中断。从我对xv6代码及其书籍的阅读来看,我的理解如下:

由于处理器将从用户权限级别(3)转移到内核权限级别(0),这是一个权限更改,因此应该保存用户进程的%ss%esp。它应该保存到权限级别 0 的堆栈中,因为用户进程的堆栈不可靠且不安全。但是进程如何知道特权级别 0(内核堆栈)的堆栈在哪里?我认为它是通过函数 switchuvm 中的以下代码设置为 TSS(如果我错了,请立即纠正我,以便我知道我的问题来自哪里):

1869 pushcli();
1870 mycpu()−>gdt[SEG_TSS] = SEG16(STS_T32A,&mycpu()−>ts,1871 sizeof(mycpu()−>ts)−1,0);
1872 mycpu()−>gdt[SEG_TSS].s = 0;
1873 mycpu()−>ts.ss0 = SEG_KDATA << 3;
1874 mycpu()−>ts.esp0 = (uint)p−>kstack + KSTACKSIZE;
1875 // setting IOPL=0 in eflags *and* iomb beyond the tss segment limit
1876 // forbids I/O instructions (e.g.,inb and outb) from user space
1877 mycpu()−>ts.iomb = (ushort) 0xFFFF;
1878 ltr(SEG_TSS << 3);
1879 lcr3(V2P(p−>pgdir)); // switch to process’s address space
1880 popcli();

当中断发生时,处理器将旧的 %ss%esp 保存在某处(这对我来说看起来很奇怪,因为我读过的 online document 中没有任何地方谈到这一点。但是让我们忽略这一点),从上面设置的 TSS 中读取内核堆栈的地址并让 %ss%esp 指向它,并将保存的旧 %ss%esp 推送到新内核堆栈。继续,处理器会将用户进程的 %eflags%cs%eip 保存到内核堆栈。

为了更好地说明,我复制了下面 vx6 书中的内核堆栈图。

enter image description here

正如图的标题所证实的,保存用户栈的是“内核栈”,据我所知,内核栈的地址仅来自在switchuvm函数中设置的TSS .

根据这里的在线文档:http://www.logix.cz/michal/doc/i386/chp07-05.htm,x86 任务切换仅在四种情况下发生。但是 xv6 只在 1878 行加载任务寄存器,并且 xv6 的 IDT 中的所有描述符都是陷阱或中断门,即四种情况都不会发生。我认为仅仅加载 TR 不会触发任务切换(对吧?)。但是,我认为 i386 中 TR 或 TSS 的机制/数据结构用于任务切换(多任务)。如果没有任务切换,TSS应该根本就没有用过(对吧?)

接下来是我的问题:

  1. 我声称当用户程序运行时发生中断时 xv6 中不会发生任务切换,以及 TSS 如何参与,是否正确?
  2. 如果没有发生任务切换,为什么 TSS 会参与提供内核堆栈的地址? TSS 的这种用法是否与任何 x86 文档中描述的任务切换无关?

谢谢。

PS:我正在开发兼容英特尔 i386 的机器。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?