Здравствуйте, извиняюсь за возможно глупый вопрос, но скажите пожалуйста где располагаются регистры eax, ebx, ecx, edx, edi, esi, в оперативной памяти или процессоре?
Сам вопрос появился после того как я подумал, что если я не чего не путаю, то регистры всегда вроде-бы располагались в процессоре (ну если верить книжкам), но я не могу понять одного, как десятки процессов используют эти регистры грубо говоря асинхронно, процессор же не может разорваться на каждый процесс. Ну и вот с этого момента мне стало очень интересно как так может быть и я решил спросить у профессионалов.
Ответ
регистры располагаются, конечно, в процессоре (если речь о современных распространённых процессорах).
попеременно же используются они разными процессами благодаря механизму многозадачности
в грубом приближении:
внутри процессора есть таймер, который время от времени посылает процессору сигнал («прерывание»), при получении которого процессор сохраняет текущее содержимое всех регистров в стек (находится в оперативной памяти, обычно каждый процесс имеет собственный стек; а сохраняются туда регистры не только с данными, но и со всякой контрольно-управляющей информацией, типа ip — instruction pointer — адресом следующей выполняемой команды) и передаёт управление по адресу обработчика данного прервывания (обработчик обычно реализован в ядре операционой системы).
обработчик выбирает, какой процесс следует запустить следующим (какому процессу отдать очередной «квант времени»), и даёт процессору команду «загрузить в регистры то, что сохранённо там-то».
восстановленный же из стека процесс продолжает работу «как ни в чём не бывало», до следующего срабатывания таймера.
Комментариев нет:
Отправить комментарий