Состояние потока

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

Аппаратное состояние при выполнении в режиме ядра: переключение контекста может иметь место лишь в режиме ядра. Состояние аппаратного выполнения ядра определяется содержанием ТСВ, который расположен в структуре потока.

Аппаратное состояние при выполнении в режиме пользователя: при выполнении в режиме ядра состояние режима пользователя потока (такое, как копии счетчика команд, указатель стека и общие регистры) всегда находится в стеке выполнения ядра, который расположен в структуре потока. Ядро гарантирует такое размеще­ние состояния режима пользователя, требуя от системных вызовов и обработчиков исключений, чтобы они каждый раз при входе в ядро сохраняли содержимое кон­текста выполнения режима пользователя.

Структура процесса: структура процесса всегда остается в памяти.

Ресурсы памяти: ресурсы памяти процесса фактически описываются содержанием регистров управления памятью, расположенных в ТСВ, и значениями, присутст­вующими в структурах процесса и потока. Пока процесс остается в памяти, эти значения будут действительными и переключения контекста можно делать без сохранения и восстановления соответствующих таблиц страниц. Однако эти значения необходимо вычислить заново, когда процесс возвращается в основную память после подкачки из вторичного хранилища.

Еще материалы

  • Учет использования ресурсов -

    Система поддерживает простую форму учета использования ресурсов. По завершении каждого процесса учетная запись, описывающая использованные этим процессом ре­сурсы, записывается в системный файл учета.

  • Идентификаторы и SETID -

    FreeBSD реализует возможность setgid путем установки в нулевом элементе мас­сива дополнительных групп процесса, который выполняет программу setgid, значения группы этого файла. После этого можно проверять права доступа, как если бы это был обычный процесс. Из-за дополнительной группы программа setgid может иметь воз­можность доступа к большему количеству файлов, чем процесс пользователя, запус­кающий программу без этой особой привилегии.

  • Идентификаторы (Часть 2) -

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

  • Корректировка времени и интервальное время -

    Часто желательно на всех машинах сети поддерживать одно и то же время. Можно также поддерживать более точное время, чем возможно от базовых часов процессора. Например, без труда доступно оборудование, прослушивающее ряд радиостанций, рассылающих в Соединенных Штатах синхронизирующие сигналы UTC. Когда про­цессы на различных машинах приходят к соглашению относительно общего времени, им нужно изменить часы процессора своего хоста, чтобы согласовать их с сетевым значением времени.

  • Службы времени -

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