Курынин Р.В., Машечкин И.В., Терехин А.Н. - Конспект лекций по ОС (1114685), страница 26
Текст из файла (страница 26)
Т.е. система имеет возможностьпрервать выполнение текущего процесса и поместить его в указанную очередь. Но такая модельне предполагает свопинга, или механизма откачки процесса во внешнюю память. В принципе,такую возможность можно также добавить в модель системы (2.1.1), тогда появляется еще односостояние, характеризующее процесс, как откачанный во внешнюю память. Заметим, что в новоесостояние могут переходить процессы лишь из очереди готовых на выполнение процессов, а88процессы, ожидающие окончания ввода-вывода, свопироваться не могут, иначе в системе будут«зависать» заказы на обмен.0Ожиданиеначалаобработки15Обработка ЦПЗавершение4БВП26Ожиданиеоперацииввода-выводаБОПОчередь навыполнение3Рис.
71.Модель ОС с разделением времени. 6 — процесс прекращает обработку ЦП, но в любоймомент может быть продолжен (истек квант времени ЦП, выделенный процессу). Поступает в очередьпроцессов, ожидающих продолжения выполнения центральным процессором (БОП).0Ожиданиеначалаобработки15Обработка ЦПЗавершение4БВП26Ожиданиеоперацииввода-выводаБОП3Очередь навыполнениесвопингДискРис.
72.Модель ОС с разделением времени (модификация). Заблокированный процесс можетбыть откачан (свопирован) на внешний носитель, а на освободившееся место может быть подкаченпроцесс с внешнего носителя, который был откачен ранее, либо взят новый.2.1.2Типы процессовРассматривая процесс в той или иной операционной системе, можно обнаружить, чтовстречается деление процессов на две категории: т.н. полновесные процессы и легковесныепроцессы, или нити.Полновесные процессы (иногда их называют просто процессы) — это те процессы,машинный код которых обладает эксклюзивными правами на владение оперативной памятью (т.е.это традиционная однопроцессная программа).Альтернативой являются т.н.
легковесные процессы, известные также как нити, — этопроцессы, которые могут работать совместно с другими процессами на общем пространствеоперативной памяти. Обычно легковесные процессы реализуются внутри полновесного процесса.89процесса.б.нитьнитьнитьнитьнитьпроцессРис. 73.Типы процессов: однонитевая (а) и многонитевая (б) организации.Тогда традиционную однопроцессную программу, которую мы отнесли к полновеснымпроцессам, можно теперь переопределить как однонитевой процесс, т.е. этому процессуэксклюзивно выделена память, и внутри существует один набор команд, который владеет иработает в этой защищенной области памяти.
Многонитевая организация подразумеваетвыделение процессу защищенной области памяти, но внутри эта область доступна двум и болеенитям.Организуя многонитевые процессы, обычно преследуются следующие цели. Во-первых,это снижение накладных расходов. Как отмечалось выше, смена контекста полновесныхпроцессов является трудоемкой операцией. В то же время, смена контекста нитей в рамках одногопроцесса является более простой задачей, поскольку не требуется полного переконфигурированиясистемы.Также отметим, что многонитевые процессы хорошо ложатся на современныемногопроцессорные системы (например, SMP-системы), т.е.
в некоторых случаях при такойорганизации повышается эффективность системы.Кроме того, механизм нитевой организации позволяет осуществлять взаимодействие нитейв рамках одного процесса, причем адресное пространство, посредством которого онивзаимодействуют, остается защищенным от других процессов в системе.Соответственно, перед операционной системой помимо управления полновеснымипроцессами, планирования и выделения им ресурсов возникает задача управления нитями.Тогда определение процесса можно расширить. Процесс — это совокупностьисполняемого кода с собственным адресным пространством, представляющее собой множествовиртуальных адресов, которые может использовать процесс, и назначенными ему ресурсамисистемы, и которая содержит хотя бы одну нить.В заключение отметим, что многие современные операционные системы (как семействаUnix, так и Windows-системы, и др.) обеспечивают работу с нитями.2.1.3Контекст процессаГоворя о различных механизмах, происходящих в системе, часто затрагивался терминконтекст процесса.
Под контекстом процесса мы будем понимать совокупность данных,характеризующих актуальное состояние процесса. Обычно контекст процесса состоит изнескольких компонент:− пользовательская составляющая — это совокупность машинных команд и данных, которыехарактеризуют выполнение данного процесса;− системная составляющая, которая содержит в себе информацию об именовании, правахпроцесса, т.е. различного рода учетная системная информация, а также содержит информациюо состоянии процесса в точке останова (содержимое регистров, настройки процесса и пр.).Соответственно, о последнем имеет смысл говорить лишь тогда, когда процесс откачан. Вовремя исполнения процесса обычно говорят об аппаратной составляющей контекста (т.е этоактуальное состояние регистров, актуальные настройки процесса и пр.).
Таким образом, когда90процесс обрабатывается на процессоре, то актуальна аппаратная составляющая, когда процессотложен — актуальна системная составляющая.2.22.2.1Реализация процессов в ОС UnixПроцесс ОС UnixМеханизм управления и взаимодействия процессов в ОС Unix послужил во многом основойдля развития операционных систем в целом, и логического блока управления процессами вчастности.
Во многом организация управления процессами в ОС Unix является эталонной,рассмотрим ее теперь более детально.С точки зрения понимания термина процесса в ОС Unix данное понятие можно определитьдвояко. В первом случае процесс можно определить как объект, зарегистрированный в таблицепроцессов. Таблица процессов является одной из специальных системных таблиц, которая,очевидно, является программной таблицей. Второе определение объявляет процессом объект,порожденный системным вызовом fork().
Оба определения являются корректными иравносильными (если учесть, что в системе существуют два особых процесса с нулевым и первымномерами, и об их особенностях речь пойдет ниже).Остановимся сначала на первой трактовке процесса. В операционной системе имеетсятаблица процессов, размер которой является параметром настройки ОС, и, соответственно,количество процессов в системе является системным ресурсом. Таблица устроена позиционнымобразом, а это означает, что именование процесса осуществляется посредством номера записитаблицы, соответствующей данному процессу (нумерация строится от нуля до некоторогофиксированного значения).
Этот номер записи называется идентификатором процесса (PID —Process Identifier). Как только что отмечалось, две первые записи таблицы предопределены ииспользуются для системных нужд. Соответственно, каждая запись таблицы (2.2.1) имеет ссылкуна контекст процесса, который структурно состоит из пользовательской, системной и аппаратнойсоставляющих.Пользовательская составляющая — это тело процесса.
В нее входит сегмент кода,который содержит машинные команды и неизменяемые константы. Сегмент кода — это обычноне изменяемая программным способом часть тела процесса. Также в пользовательскуюсоставляющую входит сегмент данных, в который входит область статических данных процесса (вт.ч. статические переменные), область разделяемой памяти (т.е. область памяти, которая можетпринадлежать двум и более процессам одновременно), а также область стека. На стеке в системереализуется передача фактических параметров в функциях, реализуются автоматические ирегистровые переменные, а также в этой области организуется динамическая память (т.н. куча).91Таблица процессовКонтекст процессаПользовательский(тело процесса)адресное пространствопроцессаPIDАппаратныйСистемныйадресное пространство ядраРис. 74.Таблица процессов в ОС Unix.В ОС Unix реализован такая возможность, как разделение сегмента кода (2.2.1).Допустим, в системе работает несколько (пускай, 100) пользователей, каждый из которых помимопрочего работает с одним и тем же текстовым редактором.
Таким образом, в системеобрабатываются 100 копий текстового редактора. Ставится вопрос о необходимости держать вОЗУ все сегменты кода для этих 100 процессов. Для оптимизации подобных ситуаций в ОС Unixиспользуется указанный механизм разделения сегмента кода. Тогда каждый обрабатываемый всистеме процесс текстового редактора в пользовательской составляющей хранит ссылку наединственную копию сегмента кода редактора, а сегмент данных у каждого из процессовоказывается своим. Соответственно, в приведенном примере в памяти будут находиться одинсегмент кода и 100 сегментов данных.
Но рассмотренный механизм может иметь место в ОСтолько в том случае, когда сегмент кода нельзя изменить: он закрыт на запись.Сегментданных 1Сегмент кодатекстовогоредактораСегментданных 2Процесс1Процесс2…Сегментданных NПроцессNРис. 75.Разделение сегмента кода.Аппаратная составляющая включает в себя все регистры, аппаратные таблицыпроцессора и пр., характеризующие актуальное состояние процесса в момент его выполнения напроцессоре.92Системная составляющая содержит системную информацию об идентификации процесса(т.е.
идентификация пользователя, сформировавшего процесс), системная информация оботкрытых и используемых в процессе файлах и пр., а также сохраненные значения аппаратнойсоставляющей. Итак, системная составляющая хранит множество параметров, рассмотримнекоторые из них.Одними из таких параметров являются реальный и эффективный идентификаторыпользователя-владельца. В ОС Unix формирование процесса считается запуск исполняемого файлана выполнение. Исполняемым считается файл, имеющий установленный соответствующий битисполнения в правах доступа к нему, при этом файл может содержать либо исполняемый код,либо набор команд для командного интерпретатора.
Каждый пользователь системы имеет свойидентификатор (UID — User ID). Каждый файл имеет своего владельца, т.е. для каждого файлаопределен UID пользователя-владельца. В системе имеется возможность разрешать запуск файлов,которые не принадлежат конкретному пользователю. Большинство команд ОС Unix представляютсобой исполняемые файлы, принадлежащие системному администратору (суперпользователю).Таким образом, при запуске файла определены фактически два пользователя: пользовательвладелец файла и пользователь, запустивший файл (т.е.
пользователь-владелец процесса). И этаинформация хранится в контексте процесса, как реальный идентификатор — идентификаторвладельца процесса, и эффективный идентификатор — идентификатор владельца файла. А дальшевозможно следующее: можно подменить права процесса по доступу к файлу с реальногоидентификатора на эффективный идентификатор. Соответственно, если пользователь системыхочет изменить свой пароль доступа к системе, хранящийся в файле, который принадлежит лишьсуперпользователю и только им может модифицироваться, то этот пользователь запускает процессpasswd, у которого эффективный идентификатор пользователя — это идентификаторсуперпользователя (UID = 0), а реальным идентификатором будет UID данного пользователя.
И вэтом случае права рядового пользователя заменятся на права администратора, поэтомупользователь сможет сохранить новый пароль в системной таблице (в соответствующем файле).Итак, следуя второй трактовке, процессом называется объект, порожденный системнымвызовом fork(). Выше уже упоминалось определение системного вызова, повторим его. Подсистемным вызовом понимается средство ОС, предоставляемое пользователям, а точнее,процессам, посредством которого процессы могут обращаться к ядру операционной системы завыполнением тех или иных функций. При этом выполнение системных вызовов происходит впривилегированном режиме (поскольку непосредственную обработку системных вызововпроизводит ядро), даже если сам процесс выполняется в пользовательском режиме. Что касаетсяреализации системных вызовов, то в одних случаях системный вызов считается специфическимпрерыванием, в других случаях — как команда обращения к операционной системе.2.2.2Базовые средства управления процессами в ОС UnixРассмотрим теперь, что происходит при обращении к системному вызову fork().