Самодел 2003 (Старые версии Машбука или нечто подобное), страница 5

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

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

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

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

Текст 5 страницы из документа "Самодел 2003"

о
днонитевой процесс многонитевой процесс

Понятие процесса можно определить несколькими способами. Как исполняемый код;

собственное адресное пространство, которое представляет собой совокупность виртуальных адресов, которые может использовать процесс;

ресурсы системы, которые назначены процессу ОС;

хотя бы одна выполняемая нить.

Одна из основных характеристик процесса – контекст – совокупность данных, характеризующих актуальное состояние процесса. Контекст включает в себя 2 составляющие:

1) Пользовательская составляющая – текущее состояние программы (совокупность машинных команд, размещенных в ОЗУ)

2) Системная составляющая

– информация идентификационного характера (PID процесса, PID «родителя»…)

– информация о содержимом регистров (РОН, индексные регистры, флаги...)

– информация, необходимая для управления процессом (состояние процесса, приоритет....)

Процессы в ОС UNIX.

Процесс в UNIXе имеет системно-ориентированные характеристики:

  • Объект, зарегистрированный в таблице процессов

  • Объект, порожденный системным вызовом fork()

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

Контекст процесса в UNIXе – совокупность данных, которые принадлежат адресному пространству процесса и ОС, состоит из 3х компонент:

  • пользовательская

  • аппаратная

  • системная

1)Пользовательская:

Сегмент кода

  • машинные компоненты

  • системные команды

Сегмент данных

  • статические данные

  • раздел. Память

  • стек

2) Аппаратная составляющая - все регистры и аппаратные таблицы ЦП, используемые активным или исполняемым процессом

• счетчик команд

• регистр состояния процессора

• аппарат виртуальной памяти

• регистры общего назначения

• и т. д.

3) Системная составляющая:

• приоритет процесса

• реальный и эффективный идентификаторы пользователя-владельца

• текущее состояние процесса

• реальный и эффективный идентификатор группы, к которой принадлежит владелец

• идентификатор родительского процесса

Создание нового процесса.

#include <sys/types.h>

#include <unistd.h>

pid_t fork(void);

1. Системный вызов fork()

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

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

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

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

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

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

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

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

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

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

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

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

Не наследуется при создании нового процесса идентификатор процесса

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


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

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

Пример:

int main(int argc, char **argv)

{

printf("PID=%d; PPID=%d \n", getpid(),

getppid());

fork();

printf("PID=%d; PPID=%d \n", getpid(),

getppid());

}

2. Системный вызов exec()

#include <unistd.h>

int execl(const char *path, char *arg0, …, char *argn, 0);

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

В результате exec() изменяется:

  • режим обработки сигналов;

  • эффект идентификации владельца;

  • файловые дескрипторы.

Пример:

#include <unistd.h>

int main(int argc, char **argv)

{

/*тело программы*/

execl(“/bin/ls”,”ls”,”-l”,(char*)0);

/* или execlp(“ls”,”ls”, ”-l”,(char*)0);*/

printf(“это напечатается в случае неудачного обращения к предыдущей функции, к примеру, если не был найден файл ls \n”);

}

Работа с функциями fork – exec.

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

Причинами завершения процесса могут быть:

  • системный вызов _exit()

  • оператора return, входящего в состав функции main()

  • получение некоторых сигналов

Пример:

int main(int argc, char **argv)

{

if(fork() == 0)

{

execl(“/bin/echo”,”echo”,”это”,”сообщение один”,NULL);

printf(“ошибка”);

}

if(fork() == 0)

{

execl(“/bin/echo”,”echo”,”это”,”сообщение два”,NULL);

printf(“ошибка”);

}

if(fork() == 0)

{

execl(“/bin/echo”,”echo”,”это”,”сообщение три”,NULL);

printf(“ошибка”);

}

printf(“процесс-предок закончился”)

}

Для завершения выполнения процесса предназначен системный вызов _exit()

void _exit(int exitcode);

Этот вызов никогда не завершается неудачно, поэтому для него не предусмотрено возвращающего значения. С помощью параметра status процесс может передать породившему его процессу информацию о статусе своего завершения. Принято, хотя и не является обязательным правилом, чтобы процесс возвращал нулевое значение при нормальном завершении, и ненулевое – в случае какой-либо ошибки или нештатной ситуации.

В любом из этих случаев происходит следующее:

- освобождаются сегмент кода и сегмент данных процесса

- закрываются все открытые дескрипторы файлов

- если у процесса имеются потомки, их предком назначается процесс с идентификатором 1

- освобождается большая часть контекста процесса, однако сохраняется запись в таблице процессов и та часть контекста, в которой хранится статус завершения процесса и статистика его выполнения

Процессу-предку завершаемого процесса посылается сигнал SIGCHLD

Процесс-предок имеет возможность получить информацию о завершении своего потомка. Для этого служит системный вызов wait():

pid_t wait(int *status);

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

Возвращаемым значением wait() будет идентификатор завершенного процесса, а через параметр status будет возвращена информация о причине завершения процесса (путем вызова _exit() либо прерван сигналом) и коде возврата. Если процесс не интересуется это информацией, он может передать в качестве аргумента вызову wait() NULL-указатель.

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

Жизненный цикл процесса может быть изображен сдежующим образом:

1. Процесс только что создан посредством вызова fork().

2. Процесс находится в очереди готовых на выполнение процессов.

3. Процесс выполняется в режиме задачи, т.е. когда реализуется алгоритм, заложенный в программу. Выход из этого состояния может произойти через системный вызов, прерывание или завершение процесса.

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

5. Процесс в ходе выполнения не имеет возможность получить требуемый ресурс и переходит в состояние блокирования.

6. Процесс осуществил вызов exit() или получил сигнал на завершение. Ядро освобождает ресурсы, связанные с процессом, кроме кода возврата и статистики выполнения. Далее процесс переходит в состоянии зомби, а затем уничтожается.



Последовательность действий при загрузке UNIXа.

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

1.Аппаратный загрузчик читает нулевой блок системного устройства.

2.После чтения этой программы она выполняется, т.е. ищется и считывается в память файл /UNIX, расположенный в корневом каталоге и который содержит код ядра системы.

3.Запускается на исполнение этот файл.

  1. инициализация системы включает в себя:

1. устанавливаются системные часы (для генерации прерываний),

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