
Лабораторная работа № 2
ОПЕРАЦИОННАЯ СИСТЕМА LINUX
Управление процессами. Файловая система /proc
Общие сведения
В ОС Linux основным средством организации многозадачности является процесс – уникальным способом идентифицируемая программа которая нуждается в получении доступа к ресурсам компьютера. Операционная система манипулирует образом процесса, который представляет собой программный код , а так же разделами данных процесса, определяющими среду выполнения. Сегмент кода содержит реальные инструкции процессора, включающие как строки, скомпилированные и написанные пользователем, так и стандартный код, сгенерированный компилятором для системы. Этот системный код обеспечивает взаимодействие между программой и операционной системой.
Основой операционной системы Linux является ядро. Ядро представляет собой специальную программу (или несколько программных модулей в случае модульного ядра), которая постоянно находится в оперативной памяти и работает, пока работает операционная система. Ядро управляет всеми таблицами, используемыми для отслеживания процессов и других ресурсов. Ядро загружается в память во время начальной загрузки и немедленно запускает необходимы процессы в частности процесс инициализации операционной системы- init. Далее init запускает все пользовательские процессы. Процесс в Linux имеет ряд атрибутов позволяющих операционной системе управлять его работой.
Атрибуты процессов
Идентификатор процесса (PID) – позволяет ядру системы различать процессы. Когда создаётся новый процесс, ядро присваивает ему следующий свободный идентификатор. Присвоение идентификатора обычно происходит по возрастающей, т.е. идентификатор нового процесса больше, чем идентификатор процесса, созданного перед ним. Если идентификатор достигает максимального значения (обычно 65737), следующий процесс получает минимальный свободный PID и цикл повторяется. Когда процесс завершает работу, ядро освобождает использовавшийся им идентификатор.
Идентификатор родительского процесса (PPID) – идентификатор процесса породившего этот процесс. Все процессы в системе, кроме системных процессов и процесса init, являющегося прародителем остальных процессов, порождены одним из существующих или существовавших ранее процессов.
Поправка приоритета (NI) – относительный приоритет процесса, учитываемый планировщиком при определении очерёдности запуска. Фактически же распределение процессорных ресурсов определяется приоритетом выполнения (атрибут PRI), зависящим от нескольких факторов, в частности от заданного относительного приоритета. Относительный приоритет не изменяется системой на всём протяжении жизни процесса (хотя может быть изменён пользователем или администратором) в отличии от приоритета выполнения, динамически изменяемого планировщиком.
Терминальная линия (TTY) – терминал или псевдотерминал, связанный с процессом. С этим терминалом по умолчанию связаны стандартные потоки: входной и выходной и поток сообщений об ошибках. Потоки (программные каналы) являются стандартным средством межпроцессного взаимодействия в ОС Linux.
Реальный (GID) и эффективный (EGID) идентификаторы группы – реальный идентификатор группы равен идентификатору основной или текущей группы пользователя, запустившего процесс. Эффективный идентификатор служит для определения прав доступа к системным ресурсам от имени группы. Обычно эффективный идентификатор группы совпадает с реальным.Но если для выполняемого файла установлен бит SGID, такой файл выполняется с эффективным идентификатором группы владельца.
1.2 Приоритеты процессов
Планирование процессов Linux основано на приоритете процесса. Планировщик всегда выбирает процесс с наивысшим приоритетом. Приоритет процесса не является фиксированным и динамически изменяется системой в зависимости от использования вычислительных ресурсов, времени ожидания запуска и текущего состояния процесс. Если процесс готов к запуску и имеет наивысший приоритет, планировщик приостановит выполнение текущего процесса (с более низким приоритетом), даже если последний не ‘выработал’ свой временной квант.
Ядро Linux является непрерываемым (nonpreemptive). Это означает что, что процесс находящийся в режиме ядра (в результате системного вызова или прерывания) и выполняющий системные инструкции, не может быть прерван системой, а вычислительные ресурсы переданы другому высокоприоритетному процессу. В этом состоянии выполняющийся процесс не может освободить процессор 'по собственному желанию', в результате недоступности какого либо ресурса перейдя в состояние сна. В противном случае система может прервать выполнение процесса только при переходе из режима ядра в пользовательский режим. Такой подход значительно упрощает решение задач синхронизации и поддержки целостности структур данных ядра. Каждый процесс имеет два атрибута приорита: текущий приоритет, на основании которого происходит планирование, и относительный приоритет, называемы также поправкой приоритета (nice number), который задаётся при порождении процесса и влияет на текущий приоритет. Диапазон значений текущего приоритета различен, в зависимости от версии ОС Linux и используемого планировщика. В любом случае, процессы, выполняющиеся в пользовательском режиме, имеют более низкий приоритет, чем работающие в режиме ядра.