Добавил:
github.com Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
11
Добавлен:
30.09.2023
Размер:
875.49 Кб
Скачать

Лабораторные работы по курсу

Операционные системы

Лабораторная работа 2

Процессы и межпроцессное взаимодействие

2022

Оглавление

Список сокращений 4

Введение 5

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

2. Взаимодействие пользователя с процессами 7

2.1. Информация о процессах 7

2.2. Иерархия процессов 9

2.3. Запуск процессов 10

2.4. Завершение процессов 11

3. Межпроцессное взаимодействие 12

3.1. Механизмы информационного обмена 12

3.2. Сигналы 13

3.3. Неименованные каналы 16

3.4. Именованные каналы 17

4. Упражнения 18

5. Индивидуальные задания 25

6. Контрольные вопросы 25

7. Список литературы 25

Приложение 1. Справка по используемым утилитам 27

Приложение 2. Листинги используемых программ 30

Список сокращений

ОС

Операционная Система

CPU

Central Processing Unit

IPC

Inter Process Commutation

MMU

Memory Management Unit

PID

Process Identifier

POSIX

Portable Operating System Interface

PPID

Parent Process Identifier

FIFO

First Input First Output

Введение

Концепция процессов является одной из наиболее важных абстракций в ОС [ CITATION Тан15 \l 1049 ]. Именно за счет ее реализации современные вычислительные системы способны параллельно работать над разными задачам. При этом разработка многопроцессных программных комплексов, в особенности для встраиваемых систем, требует от программиста не только полного понимания поведения процессов, но и владения соответствующим инструментарием.

Целью данной лабораторной работы является освоение навыков работы с процессами и межпроцессным взаимодействием в командной оболочке на примере лабораторного стенда на базе микрокомпьютера Raspberry Pi.

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

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

ОС Linux является многопроцессной, то есть поддерживает запуск большого числа процессов параллельно. Ввиду того, что количество одновременно запущенных в ОС процессов, как правило, превосходит количество доступных аппаратных устройств, способных производить вычисления, невозможно действительно исполнять инструкции всех процессов параллельно. Поэтому подсистема управления процессами ядра ОС создает видимость параллельности – она исполняет машинные инструкции каждого процесса «квазипараллельно»: небольшими порциями за короткий промежуток времени, перебирая процессы по очереди или используя более сложные механизмы приоритезации запуска.

В ОС Linux все процессы разделяются на:

  1. Системные – они являются частью ядра;

  2. Демоны – выполняют роль сервисов и не взаимодействуют с пользователем напрямую;

  3. Пользовательские.

Ключевое отличие системных процессов от остальных заключается в способе обращения к памяти: системные процессы могут обращаться ко всей области памяти и адресуют свои данные по ее физическим адресам («kernelspace»), а пользовательские процессы могут обращаться только к строго отведенным для них участкам и делать это по «виртуальным» адресам («userspace»). Пояснение приведено на Рисунке Рисунок 1.

Рисунок 1. Разделение памяти

Пользовательские процессы используют одинаковые виртуальные адреса, которые преобразуются в физические адреса различных участков памяти. Преобразования между виртуальными и физическими адресами для каждого пользовательского процесса происходит с помощью аппаратного блока MMU [ CITATION Mem \l 1033 ], являющегося частью микропроцессора.

Организация хранения контекста пользовательских процессов через виртуальные адреса имеет несколько преимуществ. Во-первых, каждая программа всегда обращается к одним и тем же адресам вне зависимости от того, где реально расположены ее данные, что позволяет оптимально распределять память между процессами и не требует перекомпоновки программы из объектных файлов перед каждым вызовом. Во-вторых, изолированные области данных между процессами повышают стабильность системы – ни один процесс не может испортить данные другого процесса. Но применение виртуальных адресов не позволяет процессам обмениваться данными между собой напрямую, что требует от ОС наличия механизмов межпроцессного взаимодействия (IPCInterProcess Communications)[ CITATION Тан15 \l 1033 ], которые более подробно будут рассмотрены в п. 3 «Межпроцессное взаимодействие».

Соседние файлы в папке OS_labs