ЗНАЕТЕ ЛИ ВЫ?

Связь флагов с системой безопасности Unix



В ОС FreeBSD существуют четыре уровня безопасности:

· 0 - система безопасности включена, но никаких ограничений нет. В этом режиме можно сбросить флаги immutable и append;

· 1 - "режим безопасности", установлен ряд ограничений на работу с внешними устройствами и операции с флагами, а именно: флаги immutable и append нельзя сбросить, а диски, содержащие смонтированные файловые системы - /dev/mem и /dev/dmem нельзя открыть на запись;

· 2 - "повышенная безопасность", еще больше ограничений, чем на уровне 1. Установлены те же ограничения, что и для режима 1, плюс дополнительно нельзя открыть диски на запись, независимо от того, смонтированы они или нет, а также подавляется запуск команды newfs в многопользовательском режиме.

Понятие процесса. Состояния и свойства процессов.

Понятие процесса характеризует некоторую совокупность набора исполняющихся команд, ассоциированных с ним ресурсов и текущего момента его выполнения, находящуюся под управлением операционной системы.

В любой момент времени процесс полностью описывается своим контекстом, состоящим из регистровой, системной и пользовательской частей.

В операционной системе процессы представляются определенной структурой данных — PCB, отражающей содержание регистрового и системного контекстов.

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

· создание процесса,

· завершение процесса,

· приостановка процесса,

· запуск процесса,

· блокирование процесса,

· разблокирование процесса,

· изменение приоритета процесса.

Между выполнением операций содержимое PCB не изменяется. Деятельность мультипрограммной операционной системы состоит из цепочек перечисленных операций, выполняемых над различными процессами, и сопровождается процедурами сохранения/восстановления работоспособности процессов, т.е. переключением контекста.

Переключение контекста не имеет отношения к полезной работе, выполняемой процессами, и время, затраченное на него, уменьшает полезное время работы процессора.

Ядро Unix и процессы. Системные ресурсы. Системные вызовы. Виртуальное адресное пространство процесса. Сегменты объектного модуля.

Ядро Unix и процессы

Резидентная в оперативной памяти часть системы называется ядром.

На диске ядро оформлено как исполнимый файл, считываемый начальным загрузчиком в оперативную память, начиная с нулевого адреса.

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

Распределение памяти внутри ядра статично. Число управляющих структур (дескрипторов процессов, блоков КЭШ-памяти и т.п.) определяется при генерации и задает тем самым предельные количественные характеристики системы.

Все работы, выполняемые вне ядра, оформлены в виде процессов, работающих в режиме «пользователь». Процессы, выполняющиеся в ядре, работают в режиме «система».

В функции ядра входит распределение между процессами системных ресурсов:

· времени центрального процессора;

· оперативной памяти;

· дисковой памяти;

· файлов;

· разделяемых процедурных сегментов.

Ядро также выполняет системные вызовы – программные запросы от процессов к операционной системе.

Единицей управления и потребления ресурсов в системе служит процесс.

Процесс - это последовательное вычисление, так что никакие асинхронные действия в рамках одного процесса происходить не могут.

Процесс может быть создан только системным вызовом fork().

Процесс, выполняющий системный вызов fork(), называется порождающим или отцом (предком), а созданный этим вызовом процесс – порожденным или сыном (потомком).

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

Полученный после компиляции объектный модуль (файл) состоит из процедурного сегмента и сегмента данных. Потенциально существует ещё два сегмента – динамический и стек, но они не занимают места на диске. Эти сегменты создаются в момент загрузки исполнимого файла (полученного из объектного модуля) в оперативную память.

Процедурный сегмент содержит машинные инструкции (команды) и константы. Как правило, он не изменяется во время выполнения исполнимой программы.

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

Динамический сегмент дополняет сегмент данных и содержит не инициализируемые объекты. Место в оперативной памяти под динамический сегмент и стек выделяется только при загрузке образа процесса в оперативную память.

Объектные файлы объединяются редактором связей (компоновщиком) ld в исполнимый файл. В общем случае образ процесса (исполнимый файл) загружается и подвергается свопингу полностью.

Порождение процессов в ОС Unix. Методы организации параллельных процессов.

Порождение процессов

Образ процесса – это совокупность составляющих его сегментов.

При создании процесса строится образ порожденного процесса, являющегося точной копией образа породившего процесса.

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

Процедурный сегмент копируется только тогда, когда НЕ является разделяемым. В противном случае сын становится ещё одним процессом, разделяющим данный процедурный сегмент.

После выполнения системного вызова fork() оба процесса продолжают выполнение с одной и той же точки.

Чтобы процесс мог опознать, является он отцом или сыном, системный вызов fork() возвращает в качестве своего значения в породивший процесс идентификатор порожденного процесса, а в порожденный процесс – нуль.

Следует обратить внимание на следующее обстоятельство:

· процессы не имеют предопределенных заранее описанных имен или идентификаторов.

· идентификатор процесса никак не связан с именем программы, выполняемой процессом.

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

1) Порожденный процесс выполняет ту же программу, что и порожденный процесс. Однако процессы выполняют различные части программы (см. выше оператор switch).

Например, порожденный процесс выполняет только коды для альтернативы с меткой case, а порожденный процесс - только коды для альтернативы с меткой default. Этот метод приводит к нерациональному использованию памяти, так как в ней содержатся коды программы, которые не будут выполняться. Более того, использование такого метода может привести к непредсказуемым ошибкам, так как порождающий, так и порожденный процессы могут изменять данные одного и того же файла и выполнять операции чтения и записи с одним и тем же каналом.

2). Порождающий процесс продолжает выполнение исходной программы, а порожденный процесс выполняет другую программу, которая перекрывается с исходной.

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

Сигналы. Система прерываний процесса. Сигналы ОС Unix.

Сигналы

Операционная среда, создаваемая ядром Unix, имитирует для каждого процесса систему прерываний.

Сигналы Unix – средство, с помощью которого ядро или какой-либо процесс могут уведомлять определенный процесс о наступлении того или иного события. Получив сигнал, процесс обязан предпринять соответствующие действия. (В некотором смысле сигналы соответствуют прерываниям в MS-DOS).

К типичным событиям, которые могут заставить процесс принять сигнал, относятся:

·аппаратные прерывания, например ввод с клавиатуры или поступления данных с последовательного порта;

·нарушение нормального выполнения программы;

·тайм-аут;

·сбой оборудования;

·попытка выполнить недопустимую команду;

выход из порожденного процесса.

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

Ряд сигналов нельзя перехватить; они обрабатываются стандартными программами (обычно это приводит к прекращению выполнения процесса, принявшего сигнал). В различных версиях Unix определены 30-40 сигналов. Некоторые из этих сигналов приводятся ниже.

SIGHUP Ситуация, аналогичная прерыванию соединения или остановке процесса
SIGINT Сигнал прерывания
SIGQUIT Сигнал завершения работы
SIGILL Недопустимая команда
SIGTRAP Останов в контрольной точке в процессе отладки
SIGFPE Исключительная ситуация при обработке данных с плавающей точкой
SIGKILL Удаление процесса (перехватить или игнорировать невозможно)
SIGBUS Ошибка обмена с шиной данных процессора
SIGSYS Неправильный аргумент при системном вызове
SIGALRM Сигнал «будильника»
SIGTERM Завершение программы
SIGUSR1 Пользовательский сигнал 1
SIGUSR2 Пользовательский сигнал 1
SIGPWR Сбой питания/перезапуск

 

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

Синхронные сигналы чаще всего приходят от системы прерываний процесса и свидетельствуют о действиях процесса, блокируемых аппаратурой (сигналы 4-8, 10, 11).

Асинхронные сигналы возникают при использовании системного вызова kill() или команды kill. По умолчанию ядро Unix обрабатывает стандартную реакцию на сигнал, которая сводится к завершению процесса. Иными словами, если возникает сигнал, то процесс завершается.

Стандартная реакция на сигнал предусматривает завершение процесса, которому предназначался сигнал.





Последнее изменение этой страницы: 2016-08-16; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.237.66.86 (0.009 с.)