Н.В. Вдовикина, А.В. Казунин, И.В. Машечкин, А.Н. Техехин - Системное программное обеспечение - взаимодействие процессов, страница 7
Описание файла
PDF-файл из архива "Н.В. Вдовикина, А.В. Казунин, И.В. Машечкин, А.Н. Техехин - Системное программное обеспечение - взаимодействие процессов", который расположен в категории "". Всё это находится в предмете "практика расчётов на пэвм" из 3 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 7 страницы из PDF
6 Контекст процесса4.1.2 Тело процесса.Тело процесса состоит из сегмента кода и сегмента данных3.Сегмент кода содержит машинные команды и неизменяемыеконстанты соответствующей процессу программы. Данные в этомсегменте не подлежат изменению.Сегмент данных содержит данные, динамически изменяемыев ходе выполнения процесса. Сегмент данных содержит область3Под сегментом здесь мы понимаем область памяти, которой система управляет какединым целым35статических переменных, область разделяемой с другимипроцессами памяти, а также область стека (обычно эта областьслужит основой для организации автоматических переменных,передачи параметров в функции, организацию динамическойпамяти).Некоторые современные ОС имеют возможность разделенияединого сегмента кода между разными процессами.
Тем самымдостигается экономия памяти в случаях одновременноговыполненияидентичныхпроцессов.Например,прифункционировании терминального класса одновременно могут бытьсформированы несколько копий текстового редактора. В этомслучае сегмент кода у всех процессов, соответствующих редакторам,будет единый, а сегменты данных будут у каждого процесса свои.процесс 1Сегмент данных 1Сегмент кодатекстовогоредактораСегмент данных 2процесс 2Сегмент данных Nпроцесс NРис. 7 Разделение сегмента кода разными экземплярами программыСледует отметить, что при использовании динамическизагружаемых библиотек возможно разделение сегмента кода нанеизменную часть, которая может разделяться между процессами ичасть, соответствующую изменяемому в динамике кодуподгружаемых программ.4.1.3 Аппаратный контекст.Аппаратная составляющая содержит все регистры иаппаратные таблицы ЦП, используемые активным или исполняемымпроцессом (счетчик команд, регистр состояния процессора, аппаратвиртуальной памяти, регистры общего назначения и т.
д.).Аппаратная составляющая контекста доступна только в тот момент,36когда процесс находится в состоянии выполнения. В тот момент,когда процесс переходит из состояния выполнения в какое-либодругоесостояние,необходимыеданныеизаппаратнойсоставляющей его контекста сохраняются в область системнойсоставляющей контекста, и до тех пор, пока процесс снова неперейдет в состояние выполнения, в его контексте аппаратнойсоставляющей не будет.4.1.4 Системный контекст.В системной составляющей контекста процесса содержатсяразличные атрибуты процесса, такие как:- идентификатор родительского процесса- текущее состояние процесса- приоритет процесса- реальный и эффективный идентификатор пользователявладельца- реальный и эффективный идентификатор группы, ккоторой принадлежит владелец- список областей памяти- таблица открытых файлов процесса- диспозиция сигналов, т.е.
информация о том, какая реакцияустановлена на тот или иной сигнал- информация о сигналах, ожидающих доставки в данныйпроцесс- сохраненные значения аппаратной составляющей (когдавыполнение процесса приостановлено)Поясним сказанное выше.Реальные и эффективные идентификаторы пользователя игруппы. Как правило при формировании процесса этиидентификаторы совпадают и равны реальному идентификаторупользователя и реальному идентификатору группы, т.е. ониопределяются персонификацией пользователя, сформировавшегоданный процесс.
При этом права процесса по доступу к файловойсистеме определяются правами сформировавшего процесспользователя и его группы. Этого бывает недостаточно. Примеромможет служить ситуация, когда пользователь желает запуститьнекоторый процесс, изменяющий содержимое файлов, которые непринадлежать этому пользователю (например, изменение пароля на37доступ пользователя в систему). Для разрешения данной ситуацииимеется возможность установить специальный признак висполняемом файле, наличие которого позволяет установить впроцессе, сформированном при запуске данного файла в качествеэффективных идентификаторов, идентификатор владельца и группывладельца этого файла.виртуальное адресноепространство процессаисполняемый файл:исходныйтексткомпиляциязаголовокданныеданныекодкодданные библиотекфайлыбиблиотекстеккод библиотекданныебиблиотеккодбиблиотекпользовательскийрежимзапускрежим ядрасистемныйконтекстсистемныйстекаппаратныйконтекстРис.
8 Формирование контекста процесса.4.2 Аппарат системных вызов в OC UNIX.Как известно, одной из основных функций любой ОС являетсяуправление ресурсами. Вынесение непосредственного доступа кресурсам в зону ответственности ядра необходимо для того, чтобыобеспечить надежность и работоспособность всей вычислительнойсистемы, так как невозможно гарантировать, что пользовательскийпроцесс, получив непосредственный доступ к ресурсамвычислительной системы, будет работать с ними корректно. Крометого, в многозадачной системе имеет место конкуренция процессовза ресурсы, и ОС должна здесь выполнять также функциюпланирования доступа к ресурсам и защиты ресурсов, выделенных38конкретному процессу, от несанкционированного доступа состороны других процессов.Чтобы обеспечить гарантии того, что определенные действия,такие как операции с ресурсами, планирование процессов и т.п.,может выполнять только ОС, вычислительная система должнаобладать определенными свойствами, и в частности, иметьпривилегированный режим выполнения.
Это означает, что в ВСимеется два режима выполнения: обычный (пользовательский) ипривилегированный (иногда называемый также режимом ядра, илизащищенным режимом). Существует набор операций (инструкций),которые не могут быть выполнены процессом, работающим впользовательскомрежиме.Онидоступнытольковпривилегированном режиме, в котором работает ядро ОС.
Крометого, процессу, работающему в пользовательском режиме,недоступно адресное пространство других процессов и адресноепространство ядра.Итак, обычные процессы выполняются в пользовательскомрежиме, и им недоступны те операции, которые может выполнятьядро ОС, работающее в привилегированном режиме, в частности,непосредственный доступ к ресурсам.
Каким же образом обычныйпроцесс, работающий в пользовательском режиме, может все жеполучить возможность работать с ресурсами ВС, например,записывать данные в файл или выводить их на печать? Дляобеспечения такой возможности вводится аппарат системныхвызовов, посредством которых ядро предоставляет процессамопределенный набор услуг.С точки зрения пользовательского процесса, системныевызовы оформлены аналогично библиотечным функциям, иобращение к ним при программировании ничем не отличается отвызова обычной функции. Однако в действительности приобращении к системному вызову выполнение переключается впривилегированный режим, благодаря чему во время выполнениясистемного вызова процессу доступны все инструкции, в том числеи привилегированные, а также системные структуры данных.
Позавершении выполнения системного вызова выполнение процессаснова переключается в пользовательский режим. Таким образом,механизм системных вызовов, код которых является частью ядра,является для обычного пользовательского процесса единственнойвозможностью получить права для выполнения привилегированныхопераций, и тем самым обеспечивается безопасность системы вцелом.39Так как любой процесс может в различные моменты своеговыполнения находиться как в привилегированном режиме, так и впользовательском режиме, то и виртуальное адресное пространствопроцесса состоит из двух частей: одна из них используется, когдапроцесс находится в пользовательском режиме, а другая – впривилегированном.Причемпроцессу,находящемусявпользовательском режиме, недоступна та часть его виртуальногоадресного пространства, которая соответствует режиму ядра.
НаРис. 8 показано отображение исполняемого файла на виртуальноеадресное пространство процесса, которое производит ОС призапуске процесса.Далее нами будут рассмотрены некоторые системные вызовы,предоставляемые ОС UNIX. К интересующим нас вызовамотносятся вызовы- для создания процесса;- для организации ввода вывода;- для решения задач управления;- для операции координации процессов;- для установки параметров системы.Отметим некоторые общие моменты, связанные с работойсистемных вызовов.Большая часть системных вызовов определены как функции,возвращающие целое значение, при этом при нормальномзавершении системный вызов возвращает 0, а при неудачномзавершении -14. При этом код ошибки можно выяснить, анализируязначение внешней переменной errno, определенной в заголовочномфайле <errno.h>.В случае, если выполнение системного вызова прерваносигналом, поведение ОС зависит от конкретной реализации.Например, в BSD UNIX ядро автоматически перезапускаетсистемный вызов после его прерывания сигналом, и таким образом,внешне никакого различия с нормальным выполнением системноговызова нет.