Я абсолютно незрозумілий про внутрішню роботу операційної системи, але я можу більш-менш здогадатися про приблизну поведінку багатьох функцій. Одна річ, яку я не в змозі зрозуміти, - це багатозадачність.
Теоретично операційна система керує часом, відповідно до процесора, за невеликі інтервали для різних запущених програм. Але не ясно, як це насправді працює.
Скажімо, операційна система хоче запустити мою програму. Машинний код завантажується десь у оперативній пам'яті, починаючи з певної адреси. Я думаю, тоді слід виконувати стрибок на цю адресу, що дозволяє виконувати мій код. Але таким чином ОС не може відновити контроль, поки я не відскочу назад.
В основному я можу уявити лише два способи зробити цю роботу, але жоден не здається дійсно підходящим:
Операційна система могла прочитати інструкції на машині, які я хочу виконувати, та імітувати їх, а не виконувати їх безпосередньо. Я навмисно невиразний, оскільки не знаю, як це би працювало, але здається, що це значно уповільнить програму.
Крім того, операційна система могла зачекати, поки я здійснить системний дзвінок. У цей момент він повертається до контролю і може перевірити, як довго я бігаю і займаюся його обміном часу. Це може спрацювати, але це здається ненадійним, тому що я можу зробити довгий розрахунок, який не передбачає системних дзвінків і затримує все на деякий час.
Тож, здається, жоден механізм не спрацював би дуже добре. Як насправді виконується багатозадачність?
interrupt
INT
інструкцію. Щось все ще для мене загадкове