Я совершенно ничего не понимаю о внутренней работе операционной системы, но могу более или менее догадаться о приблизительном поведении многих функций. Одна вещь, которую я не могу понять, это многозадачность.
Теоретически, операционная система управляет временем, в соответствии с процессором, с небольшими интервалами, для запуска различных программ. Но не ясно, как это действительно работает.
Скажем, операционная система хочет запустить мою программу. Машинный код загружается где-то в ОЗУ, начиная с определенного адреса. Я думаю, что тогда следует выполнить переход по этому адресу, чтобы мой код мог выполняться. Но таким образом ОС не может восстановить контроль, пока я не отскочу назад.
В принципе, я могу представить только два способа сделать эту работу, но ни один из них не кажется действительно подходящим:
Операционная система может читать машинные инструкции, которые я хочу выполнить, и эмулировать их вместо непосредственного выполнения. Я намеренно расплывчато, так как я не знаю, как это будет работать, но похоже, что это значительно замедлит программу.
Кроме того, операционная система может подождать, пока я не сделаю системный вызов. В этот момент он восстанавливает контроль и может проверить, как долго я бегаю, и делиться своими делами. Это может сработать, но это кажется ненадежным, поскольку я мог бы сделать длинный расчет, который не включает системные вызовы и повесил все на некоторое время.
Таким образом, кажется, ни один механизм не будет работать очень хорошо. Как на самом деле выполняется многозадачность?
interrupt
INT
инструкцию. Что-то все еще таинственно для меня