2014-12-03 12 views
0

Работая над учебным упрощенным RISC-процессором, я задавался вопросом, как работают системные вызовы при реализации моей функции прерывания программного обеспечения. Например, гипотетически позволяет сказать, что наша программа вызывает sys_end, которая завершает текущий процесс. Теперь я знаю, что это пойдет в векторную таблицу, а затем в код, чтобы закончить текущий процесс.Системные вызовы ОС в x86

Мой вопрос - это код, который завершает процесс, выполняемый в режиме супервизора или в пользовательском режиме? Нет, где я, кажется, смотрю это. Я предполагаю, что, если его в нормальном режиме пользователя, который может представлять очень серьезную проблему как процесс пользовательского режима мог бы сказать что-то делать зло, как:

для (я = 0; я ++; я < 10000) { INT sys_fork // создает дочерний процесс }

, который может быть очень плохим. Я думал, что ОС будет говорить о том, сколько раз процесс мог повторить сам себе и не говоря уже о том, какие другие вредные вещи может сделать процесс, изменяя код в сам системный вызов.

ответ

0

Системные вызовы выполняются в режиме диспетчера в течение всего системного вызова. Режим супервизора необходим для доступа к аппаратным средствам (экран, клавиатура) и для обеспечения изолированности пользовательских процессов друг от друга.

Существуют (или могут быть настроены) лимиты на количество процессоров, количество процессов и т. Д. Пользовательский процесс может использовать или запрашивать, что может предложить некоторую защиту от описанной вами программы побега.

Но конфигурация linux по умолчанию позволяет создавать 10k-процессы в узком цикле; Я сделал это сам (как намеренно, так и случайно)

Смежные вопросы