MINIX не использует преимущества переключения задач x86, верно?

# #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 лет.