DAY10 (Старые версии Машбука или нечто подобное)

2019-05-08СтудИзба

Описание файла

Файл "DAY10" внутри архива находится в следующих папках: Старые версии Машбука или нечто подобное, Лекции (Машечкин 1998). Документ из архива "Старые версии Машбука или нечто подобное", который расположен в категории "". Всё это находится в предмете "операционные системы" из 3 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Онлайн просмотр документа "DAY10"

Текст из документа "DAY10"

5

Лекция №10

Лекция 10

Мы рассмотрели структуру файловой системы ОС UNIX как с точки зрения системы, так и с точки зрения организации логики. Мы выяснили свойства, которые получила файловая система за счет структурной организации, а также концептуальные возможности, которые предоставляются пользователю. Мы выяснили, что в UNIX строго персонифицирован доступ к системе. Система обеспечивает защиту доступа к файлу трех типов: на чтение, запись и выполнение. Для любого файла определены три блока защиты: для владельца файла, для группы, в которой зарегистрирован владелец и для всех остальных. Более подробную информацию о защите файлов-каталогов вы можете получить в доступной литературе. На этом моменте мы поставим промежуточную точку в рассмотрении файловой системы и перейдем к новой главе.

Глава IV. Процессы и взаимодействие процессов

Понятие процесса

Мы говорили, что ОС UNIX основывается на понятиях файла (в широком смысле) и процесса. На сегодняшней лекции мы поговорим о втором по значимости базовом «кирпичике» UNIX - о процессе. Понятие процесса можно определить по-разному. Например, процессом можно назвать сущность, которая имеет привилегированные права по доступу к тому или иному ресурсу.

С точки зрения UNIX, процесс - это некий объект, зарегистрированный в таблице процессов ОС UNIX. Структура таблицы процессов такова: номер записи в таблице есть идентификатор процесса (PID). Таблица процессов характеризуется своим объемом (количеством записей). Объем таблицы процессов, т. е. предельное число процессов, которые система может одновременно обрабатывать, есть параметр настройки ОС UNIX. Заметим, что от выбора объема таблицы зависит эффективность работы в целом: в научных лабораториях, когда работают две три большие задачи, разумно работать с небольшой таблицей процессов; а при проведении занятий по практикуму, когда студентов много и, соответственно, в систему для обработки поступает большое число маленьких задач, то системный администратор должен опционально установить довольно большой объем этой таблицы.

Итак, таблица состоит из записей, номера которых представляют собой идентификаторы процессов. В строке таблицы находятся ссылки на ассоциированные с PID данные. В частности к этим наборам данных относятся контекст процесса и тело процесса. Тело процесса - набор команд и данных, которыми оперирует процесс. В развитых системах присутствует разделение тела процесса на два сегмента:

  • сегмент кода (неизменяемая часть программы);

  • сегмент данных (возможны динамические изменения, здесь, например, может находиться стек).

Это разделение применяют для минимизации использования RAM. В этом случае появляются так называемые разделяемые сегменты кода, это означает, что два или более процессов могут иметь общий сегмент кода, но каждый из них имеет свой сегмент данных (Например, в нашем машинном зале при использовании редактора AXE, можно пользоваться общим сегментом кода, но каждый студент может изменять настройки редактора - следовательно, необходимы раздельные сегменты данных). При такой схеме работы накладывается ограничение на использование сегмента кода - процесс не имеет права в него писать. Обеспечение этого ограничения может достигаться разными способами, например, с помощью договоренности, или же сегмент кода размещается в части памяти, аппаратно доступной только на чтение.

Контекст процесса отражает оперативное состояние процесса, т. е. то состояние, которое характеризует выполнение процесса в данный момент времени. В разных операционных системах контекст процесса называется по-разному. Контексты всех активных процессов находятся в памяти ОС, копии контекстов ожидающих процессов находятся в таблице процессов. При смене процессов в системе должна осуществляется смена соответствующих контекстов.

Контекст содержит несколько полей. Полей много, мы рассмотрим основные:

  • номер пользователя и группы (номер берется из таблиц регистрации пользователей);

  • указатель на индексный дескриптор текущего каталога;

  • специфические условия работы процесса

(В частности, правила обработки сигналов).

Поговорим несколько подробнее об аппарате сигналов. В общем случае в ОС UNIX любые два родственные процесса могут взаимодействовать с помощью механизма сигналов: один процесс может послать другому процессу некое программное воздействие, которое называется сигналом. С каждым возможным сигналом связано уникальное имя (номер) сигнала. Перечень сигналов с их номерами Вы можете найти в файле «sinal.h». Внимательные студенты наверно заметили, что аппарат сигналов несколько напоминает механизм прерываний. При приходе сигнала в процесс-получатель возможны три варианта реакции:

  1. Процесс реагирует на поступление сигнала стандартным образом.

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

  3. Игнорирование сигнала. Отметим, что не все сигналы можно игнорировать и не все сигналы можно перехватывать. Есть сигналы, которые всегда должны обрабатываться стандартным образом. Пример: 9-ый сигнал SIG_KILL не перехватывается и не переопределяется.

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

  • правила обработки сигналов;

  • информация об открытых в процессе к текущему моменту времени файлах;

  • информация о текущем состоянии процесса на случай его остановки;

  • и многое другое.

С понятием процесса в ОС UNIX связаны средства формирования процесса, суть их заключается в следующем. Ядром системы поддерживается функция fork(). При обращении к этой функции происходит дублирование процесса. Образуется процесс-двойник, который идентичен процессу-отцу (идентичен, но не совпадает с процессом-отцом!). Функция возвращает значение:

>0, это PID сыновнего процесса (мы находимся в процессе-отце)

=0 (мы находимся в процессе-сыне)

=-1 произошла ошибка - невозможно создать новый процесс, эта ошибка может возникнуть при недостатке места в таблице процессов, при нехватке места в системных областях данных и т.п.

Заметим, во-первых, что fork() - общесистемное средство порождения процессов. Система пользуется этим средством в подавляющем большинстве случаев. Во-вторых, система поддерживает родственные взаимоотношения между процессами, это означает, что существуют некоторые функции, характерные для работы с процессами, которые доступны только процессам, являющимся родственниками. Родственные связи процессов отражаются на использовании тех или иных средств UNIX. При порождении сыновнего процесса с использованием fork() порожденный процесс наследует от «отца»:

  • Окружение - при формировании процесса ему передается некоторый набор параметров-переменных, используя которые, процесс может взаимодействовать с операционным окружением (интерпретатором команд и т.д.). О переменных окружения мы поговорим на последних лекциях нашего курса;

  • Файлы, открытые в процессе-отце, за исключением тех, которым было запрещено передаваться процессам-потомкам с помощью задания специального параметра при открытии. (Речь идет о том, что в системе при открытии файла с файлом ассоциируется некоторый атрибут, который определяет правила передачи этого открытого файла сыновним процессам. По умолчанию открытые в «отце» файлы можно передавать «потомкам», но можно изменить значение этого параметра и блокировать передачу открытых в процессе-отце файлов.);

  • Способы обработки сигналов;

  • Разрешение переустановки действующего идентификатора пользователя (это то, что связано с s-bit’ом);

  • В ОС имеется возможность системными вызовами осуществлять отладку (профилирование) программы, в процессе может быть указано - разрешено или нет профилирование;

  • Разделяемые ресурсы процесса-отца;

  • Текущий рабочий каталог и домашний каталоги.

Не наследуется при создании нового процесса идентификатор процесса (почему - очевидно).

В ОС UNIX существует семейство функций exec(...). Эта группа объединяет в себе функции, которые частью своего имени имеют слово “exec” и выполняют приблизительно одинаковые действия, отличающиеся лишь деталями (набором или интерпретацией параметров).

Суть функций exec() - в следующем: при обращении к ней происходит замена тела текущего процесса, в соответствии с именем исполняемого файла, указанного одним из параметров функции. Функция возвращает «-1», если действие не выполнено, и код, отличный от «-1», если операция прошла успешно. Здесь следует отметить следующий факт - в UNIX-е при работе с системными вызовами иногда возникают диагностические сообщения в виде кода ответа, которые невозможно разделить на конкретные причины, вызвавшие возвращение этого кода. Примером этого являются коды “-1” для fork() и exec(...). Для того чтобы обойти это неудобство, следует включить в программу файл “errno.h”, и после этого при возникновении отказов в выполнении системных вызовов в переменной “errno” будет код конкретной причины отказа выполнения заказа. Всевозможные коды отказа описаны в самом “errno.h”.

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

main( int argc, char *argv[])

{ int i, pid;

for (i=1; i<argc; i++) {

if (pid=fork()) continue; // работа в отце

execlp(argv[i], argv[i], (char *) 0); // работа в сыне

}

}

Здесь, если pid=0, мы замещаем тело процесса-сына процессом, имя файла которого нам передается в качестве параметра. Если же pid>0, то есть мы находимся в процессе-отце, то продолжаем создавать сыновние процессы, пока есть аргументы.

В качестве иллюстрации работы fork() можно привести следующую картинку:


Здесь процесс с PID=105 создается процессом с PID=101.

Также следует отметить, что если убивается процесс-отец, то новым отцом становится 1-ый процесс ОС.

Связка fork/exec по своей мощности сильнее, чем, если бы была единая функция, которая сразу бы создавала новый процесс и замещала бы его содержимое. Fork/exec позволяют вставить между ними еще некоторую программу, которая будет содержать какие-то полезные действия. Может возникнуть естественный вопрос: зачем все это нужно? ОС UNIX - конструктор. Система может конструировать сложные объекты за счет функциональных «кирпичиков». Так вот эти кирпичики - это функции fork(), exec(...) и др.

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

В наших лекция мы часто употребляли термин «ядро операционной системы», что это такое? Ядро ОС - программа, функцией которой является управление базовыми объектами системы (для UNIX-а это два объекта - файл и процесс). Структура ядра - прерогатива конкретной версии операционной системы. Существуют разные подходы к организации ядра. Обычно ядро в своем теле размещает необходимые таблицы данных и считается некоторой неразделяемой частью ОС. Оно обычно работает в режиме супервизора, все остальные функции ОС могут работать и в других режимах. Теперь поговорим немного о схеме начальной загрузки операционной системы.

Схема начальной загрузки ОС

Мы вплотную подошли к проблеме, которая возникает при включении компьютера - «как заставить все это работать?». Итак последовательность действий такова:

  1. Запускается аппаратный загрузчик. Он читает 0-й блок системного устройства и запускает его.

  2. Начинает работать программный загрузчик. Происходит поиск и запуск файла с именем unix.

  3. Инициализируются аппаратные интерфейсы. (Приведение в некоторое каноническое состояние диспетчеры памяти, таймер и т. д.) Формируются таблицы, определяющие размеры памяти, буферов.

  4. Инициализируется процесс №0 - это единственный случай образования процесса без использования функции fork(). Процесс №0 ассоциируется с функциями работы ядра. (В некоторых ОС этот процесс, конечно, может отсутствовать).

  5. Ядро копирует 0-й процесс, создавая 1-й процесс, и загружает в тело 1-го процесса программу /etc/init - диспетчер процесса. Система запускается в однопользовательском или в многопользовательском режиме. Первый режим - это однопользовательский режим. В этом случае процесс init загружает интерпретатор команд shell и ассоциирует его с консольным терминалом, а также запускает стартовый командный файл /etc/rc. Этот файл содержит произвольные команды, которые может устанавливать администратор системы, если он считает необходимым выполнить их при старте системы. Это могут быть команды, предположим, запуска программы тестирования целостности файловой системы или проверки расписания и, в зависимости от расписания, запуска процесса, который будет архивировать файловую систему и т.д. Т.е. в этом командном файле в общем случае могут находиться произвольные команды, установленные администратором системы. При этом если система запускается в однопользовательском режиме, на консольный терминал подается интерпретатор команд shell и считается, что консольный терминал находится в режиме супервизора (суперпользователя) со всеми правами, которые можно предоставить администратору системы.

Второй режим - многопользовательский. Если однопользовательский режим обычно используется в ситуациях, когда в системе произошла аварийная ситуация и необходимы действия администратора системы или системного программиста, то многопользовательский режим - это штатный режим, который работает в нормальной ситуации. При многопользовательском режиме процесс init запускает для каждого активного терминала процесс getty. Список терминалов берется из некоторого текстового файла, а их активность или пассивность - это прерогатива аппаратных свойств конкретного терминала и драйвера, который обслуживает данный терминал (когда вы включаете терминал, идет сигнал по соответствующему интерфейсу о включении нового устройства; система осуществляет идентификацию этого устройства в соответствии с портом, к которому подключен этот терминал).

Процесс getty при запуске сразу же запрашивает login. Копия процесса getty работает на один сеанс работы с пользователем, т.е. пользователь подтвердил свое имя и пароль, выполняет какие-то действия, и, когда он выполняет команду завершения работы, то копия процесса getty завершает свою работу. После завершения работы процесса getty, связанного с конкретным терминалом, запускается новая копия процесса getty.

Вот такая схема. Это нетрадиционные приемы формирования процессов в UNIX-е. Нетрадиционно формируется нулевой процесс (и он сам по себе нетрадиционен), нетрадиционно формируется первый процесс (который также нетрадиционен). Все остальные процессы работают по схеме fork/exec. На сегодня это все.

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5224
Авторов
на СтудИзбе
428
Средний доход
с одного платного файла
Обучение Подробнее