Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
X86 为什么IA 32任务是不可重入的_X86_Task_Intel_Tss - Fatal编程技术网

X86 为什么IA 32任务是不可重入的

X86 为什么IA 32任务是不可重入的,x86,task,intel,tss,X86,Task,Intel,Tss,我有一个关于IA32任务的问题 TSS只允许为任务保存一个上下文;所以一次 一个任务被调用(分派),一个对 任务将导致任务的当前状态丢失 我只是不明白为什么任务在IA 32中是不可重入的。如果正在运行任务,然后使用实际任务的tss段选择器执行jmp far,则任务的当前状态将保存在tss中。然后它将搜索tss描述符,并加载以前保存的状态。因此,EIP将指向下一条指令,等等。这种推理有什么错 我理解忙位是如何工作的,但不理解为什么他们禁止调用同一个任务。我注意到,如果您有一个嵌套任务链,然后有一个

我有一个关于IA32任务的问题

TSS只允许为任务保存一个上下文;所以一次 一个任务被调用(分派),一个对 任务将导致任务的当前状态丢失

我只是不明白为什么任务在IA 32中是不可重入的。如果正在运行任务,然后使用实际任务的tss段选择器执行jmp far,则任务的当前状态将保存在tss中。然后它将搜索tss描述符,并加载以前保存的状态。因此,EIP将指向下一条指令,等等。这种推理有什么错


我理解忙位是如何工作的,但不理解为什么他们禁止调用同一个任务。我注意到,如果您有一个嵌套任务链,然后有一个任务调用它自己,它将创建一种循环,因为tss的前一个任务链接将是它自己

除了现代操作系统不使用x86任务切换这一事实之外,我对x86任务切换了解不多,因为在软件中这样做更快。大概设计意图是让操作系统只使用“任务”功能来处理用户空间进程/线程之间的上下文切换。任务直接跳转到其他任务(而不是让操作系统的调度程序选择一个任务并跳转到它)是否有用或合理?作为将控制权交给另一个内核线程的一种方式,它在微内核中有意义吗;您拥有所有其他寄存器、I/O端口权限和其他权限级别堆栈指针。重入意味着你可以回来。如果您刚刚破坏了任务的前一个状态,然后进行了重大修改,那么当您尝试返回时会发生什么?至于“为什么”,这是硬件设计师的问题。