Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПВ. КУЗНЕЦОВ Д. Б. СПО.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
143.84 Кб
Скачать

3 Практические вопросы

3.1 Системное программное обеспечение

1. В чем особенность создания нового процесса в UNIX?

2. Предположим, что ядро выполняет отложенную запись блока. Что произойдет, когда другой процесс вы­берет этот блок из его хеш-очереди? Из списка свободных буферов?

3. В версии V системы UNIX разрешается использовать не более 14 символов на каждую компоненту име­ни пути поиска. Что нужно сделать в файловой системе и в соответствующих алгоритмах, чтобы стали допустимыми имена компонент произвольной длины?

4. Известно, что в i-ноде UNIX-подобных ОС не содержится имя файла. Где его хранит система?

5. Назовите причины назначения разного уровня приоритетов у прерываний? Как эти приоритеты сказыва­ются на работе системы со стеком контекстных слоев?

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

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

8. К файлам терминалов обычно устанавливаются следующие права доступа: crw—w—w- 2 mjb lus 33,11 Oct 25 20:27 tty61

при входе пользователя в систему. То есть, чтение и запись разрешаются пользователю с именем «mjb», a остальным пользователям разрешена только запись. Почему?

9. Какие функции UNIX доступны программисту для создания tcp-соединения? Чем протокол tcp отличается от udp?

10. Напишите сценарий для shell меняющий расширения в именах файлов текущего каталога '.с' на '.ее'

1. В чем особенность создания нового процесса в unix?

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

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

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

Fork

Единственная возможность породить процесс. Создает копию. Не наследует PID.

Алгоритм:

1) Проверяет доступность ресурсов ядра

2) Получает место в таблице

3) Заполняет таблицу. Копирование записи родителя.

4) Увеличивает счетчик ссылок файла

5) Копирует контекст.

если выполняется родитель

перевести порожд. процесс в (3), (5)

возвратить PID порожд. процесса родитель

иначе

инициализация

возвратить 0; потомок

Exec

1) загружает текст

2) загружает инициализ. данные

3) выделяет память под неинициализ. данные

4) создает стек

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

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

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

Пример:

main (arg c, arg v)

int arg c;

char *arg v[];

{ if (fork() == 0)

execl (“copy”, “copy”, arg v[1], arg v[2], 0);

wait ((int *)0);

printf (“copydone/n”);

}

Exit

Системная функция, завершает работу процесса

Int exit (int c);

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

Состояние процесса «зомби», если родитель завершает существование, а порожденный продолжает.

Алгоритм работы:

1) если процесс возглавляет группу, связанную с терминалом. Посылается сообщение всей группе – завершение.

2) закрыть все открытые файлы, освободить текущий каталог

3) освободить область памяти, связанную с процессом

4) перевести процесс в состояние завершения

5) назначить всем потомкам в качестве родителя – класс Unit, если кто-то из потомков перестал существовать init посылается сообщение о гибели потомка.

6) переключение контекста

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]