# #x86 #operating-system #kernel #minix
Вопрос:
Я изучаю исходный код версии MINIX book (3.1.0) и обнаружил, что MINIX 3 не использует функцию переключения задач процессора, вместо этого он просто выполняет нормальную 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
Ответ №1:
Да; это характерно почти для всех ОС x86 ( хотя я собираюсь опубликовать ту, которая пытается использовать ее для смеха ). Вся погоня NT за обратной ссылкой-отличная идея, но на самом деле она значительно усложняет реализацию ядер и, по-видимому, приносит очень мало пользы. Модель защиты 386 была унаследована через 80286 от iapx432. Модель 432 представляла собой объектно-ориентированную модель защиты, основанную на возможностях, реализованную в процессоре. Обратите внимание, что новая несколько фиолетовая ОС Google использует кучу этих модных словечек.
В отличие от 432, 80286 ( и его преемники ) внедрили модель системных вызовов unix-y, которая сделала всю привязку к задаче, вложенную задачу просто чем-то, что ОС должна была отменить; поэтому было проще полностью избежать ее и относиться к ней как к причудливому 68k.
Теперь, когда Роберт Бедичек вернулся в intel, я задаюсь вопросом, можем ли мы увидеть более амбициозные проекты, подобные этому, а не oh, и у нас есть 8 декодеров, которые помогали нам спать в течение 20 лет.