x86 - MINIX 没有利用 x86 任务切换,对吧?
问题描述
我正在研究MINIX book version (3.1.0) source code,发现MINIX 3没有使用cpu的任务切换功能,而是在iret
没有设置NT标志的情况下正常执行。那正确吗?
_restart:
! Restart the current process or the next process if it is set.
cmp (_next_ptr), 0 ! see if another process is scheduled
jz 0f
mov eax, (_next_ptr)
mov (_proc_ptr), eax ! schedule new process
mov (_next_ptr), 0
0: mov esp, (_proc_ptr) ! will assume P_STACKBASE == 0
lldt P_LDT_SEL(esp) ! enable process' segment descriptors
lea eax, P_STACKTOP(esp) ! arrange for next interrupt
mov (_tss+TSS3_S_SP0), eax ! to save state in process table
restart1:
decb (_k_reenter)
o16 pop gs
o16 pop fs
o16 pop es
o16 pop ds
popad
add esp, 4 ! skip return adr
iretd ! continue process
解决方案
是的; 这对几乎所有 x86 操作系统都是通用的(尽管我即将发布一个试图将其用于咯咯笑的操作系统)。整个 NT + 追逐反向链接是一个巧妙的想法,但实际上使内核更难实现,而且显然收益很少。386 保护模型是通过 iapx432 的 80286 继承而来的。432 是在处理器中实现的面向对象、基于能力的保护模型。请注意,谷歌新的有点紫色的操作系统使用了一堆流行语。
与 432 不同,80286(及其后继产品)插入了一个 unix-y 系统调用模型,它使整个任务链接、嵌套任务成为操作系统必须撤消的东西;因此更容易完全避免它,并将其视为古怪的 68k。
现在罗伯特·贝迪切克回到英特尔,我想知道我们是否会看到像这样更有野心的设计,而不是哦,我们有 8 个解码器单元帮助我们睡了 20 年。
推荐阅读
- javascript - 在按钮单击转换时高度不起作用
- powershell - 找不到 dir /b 的文件路径错误 - 复制所有文件名脚本
- salesforce - 每当文件移动到特定文件夹时,如何使用 talend 自动执行上传过程
- django - Wagtail:向 PageModel 添加方法以获取检查 url
- python - 剪刀石头布,学校作业,python 3.7
- mysql - 如何将 Oracle sql 文件导入 MySQL
- javascript - fullcalendar 后台事件 resourceIds 事件丢失时配置错误
- csv - 如何使用 Proc Transpose 将数据从多行翻转到列?
- python - Python - 将数组中存在的值推送到字典
- javascript - 在具有数组的对象内获取值并与另一个数组进行比较