Файл: Учебнометодическое пособие Томск 2016 2 удк 004. 451(075. 8) Ббк 32. 973. 2018. 2я73 к 754 Рецензенты.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 07.11.2023
Просмотров: 337
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
236
1 ... 15 16 17 18 19 20 21 22 23
8.4.3 Изменение диспозиции сигналов
Сразу же после создания процесса с помощью вызова fork, диспозиция сигналов нового процесса точно такая же, как и у процесса-отца (наследование диспозиции). Но если далее для загрузки программы выполняется вызов exec, то для всех сигналов устанавливается диспозиция «по умолчанию». Это объяс- няется тем, что все прежние обработчики сигналов уничтожены (как и все дру- гие прикладные подпрограммы). Если такая начальная диспозиция не устраива- ет, то для ее изменения процесс выполняет системный вызов sigaction:
#include int sigaction(int signo, const struct sigaction *act, struct sigaction *oact);
Первый параметр (signo) задает сигнал, диспозицию которого требуется изменить. Второй параметр (act) задает новый обработчик сигнала. Третий па- раметр (oact) указывает на структуру, в которой будет сохранено описание прежнего обработчика сигнала. Если в качестве этого параметра задано значе- ние NULL, то это описание сохранено не будет.
8.4.4 Задание
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
Примечание. Для получения номера своего процесса можно использовать функцию getpid:
#include pid_t getpid(void);
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
Разработать одну из следующих программ:
1. Процесс-отец порождает четыре дочерних процесса, каждый из кото- рых выполняет бесконечный цикл. Далее в течение 10 секунд про- цесс-отец выводит на экран какое-то сообщение. По истечении этого времени он уничтожает два из четырех процессов, используя для это- го всего одну команду. Перед завершением процесс-отец выводит на экран перечень процессов данного пользователя.
2. Процесс-отец порождает четыре дочерних процесса, каждый из кото- рых выполняет бесконечный цикл. Далее в течение 15 секунд процесс- отец выводит на экран какое-то сообщение. По истечении этого вре- мени он уничтожает три из четырех процессов, используя для этого
Первый параметр (signo) задает сигнал, диспозицию которого требуется изменить. Второй параметр (act) задает новый обработчик сигнала. Третий па- раметр (oact) указывает на структуру, в которой будет сохранено описание прежнего обработчика сигнала. Если в качестве этого параметра задано значе- ние NULL, то это описание сохранено не будет.
8.4.4 Задание
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
Примечание. Для получения номера своего процесса можно использовать функцию getpid:
#include
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
Разработать одну из следующих программ:
1. Процесс-отец порождает четыре дочерних процесса, каждый из кото- рых выполняет бесконечный цикл. Далее в течение 10 секунд про- цесс-отец выводит на экран какое-то сообщение. По истечении этого времени он уничтожает два из четырех процессов, используя для это- го всего одну команду. Перед завершением процесс-отец выводит на экран перечень процессов данного пользователя.
2. Процесс-отец порождает четыре дочерних процесса, каждый из кото- рых выполняет бесконечный цикл. Далее в течение 15 секунд процесс- отец выводит на экран какое-то сообщение. По истечении этого вре- мени он уничтожает три из четырех процессов, используя для этого
237 всего одну команду. Перед завершением процесс-отец выводит на экран перечень процессов данного пользователя, предваряя их тек- стовой строкой hi!:.
3. Процесс-отец порождает четыре дочерних процесса, каждый из кото- рых выполняет бесконечный цикл. При этом каждый из дочерних процессов особым образом реагирует на сигналSIGINT:
процесс 1 при получении сигналаSIGINT выводит сообщение на экран и продолжается;
процесс 2 обрабатывает сигналSIGINT в бесконечном цикле, вы- давая свое сообщение на экран. Данный цикл защищен от воздей- ствия сигналаSIGQUIT;
вся программа процесса 3 защищена от воздействия сигнала
SIGINT;
перед входом процесса 4 в бесконечный цикл для него меняется идентификатор сеанса.
Сразу после порождения дочерних процессов процесс-отец заверша- ется.
Далее следует проверить реакцию оставшихся процессов на сигналы
SIGINT иSIGQUIT.
4. Процесс-отец порождает четыре дочерних процесса, каждый из кото- рых выполняет бесконечный цикл. При этом каждый из дочерних процессов особым образом реагирует на сигналSIGINT:
процесс 1 обрабатывает сигналSIGINT в бесконечном цикле, вы- давая свое сообщение на экран, добавляя к нему текущую дату.
Данный цикл защищен от воздействия сигналаSIGQUIT;
процесс 2 при получении сигналаSIGINT выводит сообщение на экран и продолжается;
вся программа процесса 3 защищена от воздействия сигнала
SIGINT;
перед входом процесса 4 в бесконечный цикл для него меняется идентификатор сеанса.
Сразу после порождения дочерних процессов процесс-отец заверша- ется.
Далее следует проверить реакцию оставшихся процессов на сигналы
SIGINT иSIGQUIT.
238 5. Процесс-отец порождает три дочерних процесса, каждый из которых выполняет бесконечный цикл. При этом каждый из дочерних процес- сов особым образом реагирует на сигналSIGINT:
процесс 1 обрабатывает сигналSIGINT в бесконечном цикле, вы- давая свое сообщение на экран, добавляя к нему текущую дату
Данный цикл защищен от воздействия сигналаSIGQUIT;
процесс 2 при получении сигналаSIGINT выводит сообщение на экран и продолжается;
вся программа процесса 3 защищена от воздействия сигнала
SIGINT.
Сразу после порождения дочерних процессов процесс-отец заверша- ется.
Далее следует проверить реакцию оставшихся процессов на сигналы
SIGINT иSIGQUIT.
6. Процесс-отец открывает существующий текстовый файл, а затем по- рождает два дочерних процесса, которые по очереди выводят содер- жимое этого файла фиксированными порциями по 10 символов, пред- варяя каждый вывод номером своего процесса. Вывод на экран заканчивается или при достижении конца файла, или по истечении интервала времени в 10 секунд.
7. Процесс-отец открывает существующий текстовый файл, а затем по- рождает два дочерних процесса, которые по очереди выводят содер- жимое этого файла фиксированными порциями по 20 символов, пред- варяя каждый вывод номером своего процесса. Вывод на экран заканчивается или при достижении середины файла, или по истечении интервала времени в 10 секунд.
8. Процесс-отец открывает существующий текстовый файл, а затем по- рождает два дочерних процесса, которые по очереди выводят содер- жимое этого файла фиксированными порциями по 15 символов, пред- варяя каждый вывод номером своего процесса. Вывод на экран заканчивается или при достижении середины файла, или по истечении интервала времени в 5 секунд.
9. Процесс-отец открывает существующий текстовый файл, а затем по- рождает два дочерних процесса, которые по очереди выводят содер- жимое этого файла фиксированными порциями по 30 символов, пред-
239 варяя каждый вывод номером своего процесса. Вывод на экран закан- чивается или при достижении конца файла, или по истечении интер- вала времени в 2 секунды.
10. Процесс-отец открывает существующий текстовый файл, а затем по- рождает два дочерних процесса, которые по очереди выводят содер- жимое этого файла фиксированными порциями по 22 символа, пред- варяя каждый вывод номером своего процесса. Вывод на экран заканчивается или при достижении конца файла, или по истечении интервала времени в 12 секунд.
240
Заключение
Ограниченный объем данного пособия не позволил рассмотреть все во- просы с одинаковой степенью подробности. При этом некоторые вопросы рас- смотрены в сокращенном варианте и при наличии времени и желания могут быть рассмотрены более подробно. Перечислим эти вопросы и возможные те- мы дальнейшего их изучения:
1) системная поддержка мультипрограммирования – тупики (причины тупиков, методы предотвращения тупиков, методы ликвидации тупи- ков);
2) подсистема управления процессами – реализация информационного
взаимодействия между процессами (разделяемая память, очереди со- общений, сокеты);
3) управление файлами – реализация дискового кэша (традиционный подход, использование подсистемы управления памятью).
Кроме того, по указанной выше причине некоторые вопросы не рассмат- ривались в пособии совсем:
1) подсистема ввода-вывода;
2) управление передачей информации по сети;
3) переключения ЦП;
4) настройка и начальная загрузка операционной системы.
241
Литература
1. Таненбаум Э. С. Современные операционные системы / Э. С. Танен- баум. – 3-е изд. – СПб. : Питер, 2010. – 1040 с.
2. Одиноков
В. В. Операционные системы / В. В. Одиноков,
В. П. Коцубинский. – Томск : ТУСУР, 2006. – 342 с.
3. Одиноков В. В. Операционные системы и сети / В. В. Одиноков,
В. П. Коцубинский. – Томск : ТУСУР, 2008. – 395 с.
4. Дунаев С. UNIX SYSTEM V. Releas 4.2 : Общее руководство / С. Ду- наев. – М. : ДИАЛОГ-МИФИ, 1995. – 287 с.
5. Рейчард К., Фостер-Джонсон Э. UNIX : справочник / К. Рейчард,
Э. Фостер-Джонсон. – СПб. : Питер, 2000. – 384 с.
6. Робачевский А. Операционная система UNIX / А. Робачевский. –
СПб. : БХВ – Санкт-Петербург, 1999. – 528 с.
7. Соловьев А. А. Программирование на shell / А. А. Соловьев. – М. :
Финансы и статистика, 1999. – 318 с.
8. Столлингс В. Операционные системы. Внутреннее устройство и принципы проектирования / В. Столлингс. – М. : Вильямс, 2002. –
848 с.
9. Олифер В. Г. Сетевые операционные системы / В. Г. Олифер,
Н. А. Олифер. – СПб. : Питер, 2001. – 544 с.
10. PuTTY Download Page [Электронный ресурс]. – Режим доступа: http://www.chiark.greenend.org.uk/sgtatham/putty/download.html (дата обращения: 05.05.2016).
11. Установка Ubuntu Linux : инструкция для пользователя Windows
[Электронный ресурс]. – Режим доступа: http://help.ubuntu.ru/ wiki/ubuntu_install (дата обращения: 11.01.2016).
242
Глоссарий
BIOS – базовая система ввода-вывода.
Адрес – место в ОП, которое займет соответствующий программный объ- ект – команда или данное.
Аларм – отправка сигнала процессу по истечении заданного интервала времени.
Алгоритм – правило, определяющее последовательность действий над исходными данными, приводящую к получению искомых результатов.
Аппаратура – совокупность аппаратных средств ВС, предназначенных для выполнения машинных программ.
Ассемблер – язык низкого уровня, пригодный для написания виртуальных программ.
Выражение – совокупность нескольких переменных и (или) констант, со- единенных знаками операций. Различают арифметические и логические выра- жения.
Интерфейс – граница между двумя взаимодействующими системами.
Интерфейсное устройство (ИУ) – устройство, предназначенное для того, чтобы согласовать стандартную для данной ЭВМ структуру ОШ с конкретным типом ПУ, которых существует очень много.
Канал – специальный файл, запись в который возможна только с одного, а чтение – с другого конца.
Командный файл – файл, содержащий список команд интерпретатора ко- манд ОС. Применение командных файлов позволяет избежать повторения набора часто используемых команд, и фактически каждый такой файл пред- ставляет собой виртуальную программу, записанную на входном языке ИК.
Коммутатор файловых систем – массив, элементами которого являются описатели точек входа в программные части реальных ФС.
Компилятор – транслятор, выполняющий преобразование текста про- граммы на языке высокого уровня в программу на языке низкого уровня.
КОП – это комбинация битов, кодирующая тип операции, которую следу- ет выполнить над операндами (например, суммирование).
Линейная виртуальная память (ЛВП) – абстракция, используемая не са- мой программой (она работает с сегментной виртуальной памятью), а операци- онной системой.
243
Логический ресурс (ресурс) – объект, нехватка которого приводит к бло- кированию процесса и переводу его в состояние «Сон».
Логическое выражение – выражение, имеющее только два значения –
0 (истина) и 1 (ложь).
Монтирование – операция подсоединения одной информационной части реальной ФС к файловой структуре системы.
Оперативная память (ОП) – память, предназначенная для кратковремен- ного хранения программ и обрабатываемых ими данных.
Операционная система (ОС) – множество управляющих программ, пред- назначенных для выполнения трех функций: 1) оказание помощи прикладным и системным обрабатывающим программам в использовании ими ресурсов ВС;
2) обеспечение однопользовательской мультипрограммности; 3) обеспечение многопользовательской мультипрограммности.
Отложенный вызов – выполнение требуемой подпрограммы ядра через требуемое время.
Периферийные устройства (ПУ) – устройства ввода-вывода, устройства внешней памяти, а также устройства сопряжения со средой передачи данных.
Пользовательский приоритет (NICE) – приоритет, заявленный пользова- телем при создании процесса.
Поток данных – последовательность байтов, в состав которой не входят какие-то особые байты, используемые информационным каналом.
Права доступа к файлу – формы доступа к файлу, разрешенные для этого пользователя.
Препроцессор – транслятор, выполняющий обработку исходных модулей программы, подсоединяя к ним содержимое файлов заголовков и выполняя подстановки, заданные в этих файлах.
Прикладная программа – форма представления алгоритма решения зада- чи, ориентированная на машинную реализацию.
Протокол – алгоритм взаимодействия модулей, удаленных друг от друга.
Прототип функции – правильно записанный ее виртуальный интерфейс, с указанием типов всех ее параметров, включая значение, возвращаемое функ- цией.
Процесс– последовательная программа, располагающая окружением, до- статочным для своего выполнения.
Псевдотерминал– программный модуль ОС, предназначенный для пере- дачи информации между двумя процессами, а также для некоторого преобразо-
244 вания этой информации. Это преобразование нужно для того, чтобы один из процессов, соединяемых псевдотерминалом, выполнялся бы так, как будто он взаимодействует с настоящим терминалом.
Редиректор – подпрограмма сетевой ОС, выполняющая обработку тех системных вызовов из прикладных программ, которые требуют выполнения операций с файлами (в том числе и с устройствами ввода-вывода).
Сегментный свопинг – перекачка сегментов между ОП и ВП.
Сервер файловой системы – процесс (демон), предназначенный для вы- полнения удаленных системных вызовов.
Сеть передачи данных – совокупность ЭВМ, связанных каналами пере- дачи данных.
Сигнал – команда, которую один процесс посылает другому процессу
(процессам) с целью оказания влияния на ход выполнения этого процесса (про- цессов).
Синхронизация – согласование этапов выполнения двух или более парал- лельных процессов путем обмена ими инициирующими (командными) воздей- ствиями.
Системная функция – подпрограмма, объектный модуль которой нахо- дится в одной из системных библиотек.
Сообщение – последовательность байтов, предваряемая специальными служебными байтами.
Сопроцессор – процессор, расположенный на той же плате, что и ЦП, и имеющий такой же доступ к ОП. В отличие от ЦП сопроцессор предназначен для выполнения не всей прикладной программы, а лишь отдельных ее команд
(чаще всего команд обработки данных с плавающей точкой).
Статическое распределение ВП – ситуация распределения, когда вся па- мять назначается файлу при его создании.
Таймер – аппаратное устройство, выдающее сигналы прерывания в ЦП через фиксированный промежуток времени, называемый тиком. В UNIX тик обычно равен 10 мс, но может иметь и другое значение. Прерывания таймера имеют наивысший приоритет среди внешних маскируемых прерываний.
Текущий прикладной приоритет – динамически изменяющийся приори- тет процесса в состоянии «Задача».
Текущий системный приоритет – приоритет процесса в состоянии «Яд- ро».
Терминал – совокупность устройства ввода и устройства вывода.