- •3 Практические вопросы
- •3.1 Системное программное обеспечение
- •1. В чем особенность создания нового процесса в unix?
- •2. Предположим, что ядро выполняет отложенную запись блока. Что произойдет, когда другой процесс выберет этот блок из его хешочереди ? Из списка свободных буферов ?
- •4. Известно, что в иноде unix-подобных ос не содержится имя файла. Где его хранит система?
- •5. Назовите причины назначения разного уровня приоритетов у прерываний? Как эти приоритеты сказываются на работе системы со стеком контекстных слоев?
- •6. Поясните, какая угроза безопасности хранения данных возникает, если программа изменения прав пользователя не защищена от записи.
- •7. Что следует предпринять программе обработки отказов в том случае, если в системе исчерпаны страницы памяти?
- •8 К файлам терминалов обычно устанавливаются следующие права доступа
- •9. Какие функции unix доступны программисту для создания tcp-соединения? Чем протокол tcp отличается от udp?
- •10. Напишите сценарий для shell меняющий расширения в именах файлов текущего каталога '.C' на '.Cc'
6. Поясните, какая угроза безопасности хранения данных возникает, если программа изменения прав пользователя не защищена от записи.
Программа изменения прав сама проверяла может ли пользователь изменять свои права. Т.к. программа имеет привязку к ядру, то сторонняя программа не способна перевести пользователя к администратору, а вот немного модифицированная, но собственная, вполне.
Если кто-либо имеет права на изменение программы изменения прав, то этот кто-то может написать свою программу изменения прав пользователя. Изменить свои права в таком случае скорее всего не удастся, т.к. эта программа будет запускаться с правами этого пользователя, но можно изменить алгоритм программы таким образом, что при запуске её привелигированным пользователем она будет наделять правами непривигированного пользователя.
Вообще-то "программы изменения прав пользователя" в UNIX нет. Есть программа, которая позволяет отнести пользователя к той или иной группе, или поменять какие-то другие параметры как UID, GID, принадлежность к группам и т.д. Покажем на примере этой программы (usermod).
Допустим программа изменнения прав пользователя имеет такие права:
-rwxr-xrwx 1 root root 69996 Nov 16 16:18 /usr/sbin/usermod
Как видно, изменять её могут все. Теперь мы напишем свою программу, которая либо повышает наши права, либо выполняет какие-либо деструктивные действия. Теперь важно изменить существующий файл usermod, а не удалить его и скопировать новый, т.к. для удаления файла понадабяться права на запись в директории, а их скорее всего может и не быть.
После изменения файла остается дождаться, когда кто-либо с привелигированными правами им воспользуется.
7. Что следует предпринять программе обработки отказов в том случае, если в системе исчерпаны страницы памяти?
Свопиться. Свопинг
Рассмотрим три основных функции свопинга: 1. Управление пространством в свопе (на устройстве выгрузки). 2. Выгрузка процессов. 3. Подкачка процессов.
Управление пространством в свопе.
Своп - это устройство блочного типа, чаще всего раздел диска.
Если в файловой системе используются суперблоки, то в свопе используется карта памяти устройства.
Карта состоит из строк, в которых содержится адрес распределяемого ресурса и количество единиц этого ресурса.
Адрес начала ресурса |
Число единиц ресурса |
Показывает, где и сколько места на устройстве выгрузки.
В начальный момент в карте памяти устройства одна строка
Выгрузка процесса в своп происходит, когда:
∙ возникает системный вызов fork.
∙ процесс увеличивает свои размеры
∙ процессу необходима физическая память.
Выгрузкой загрузкой процессов занимается процесс подкачки. Он всегда выполняется в режиме ядра и имеет номер 0.
Алгоритм выгрузки:
1. Процесс подкачки уменьшает счетчик числа ссылок на область на 1.
2. Выделяет место в SWAP.
3. Блокирует процессы в памяти.
4. Выгружает из областей, где счетчик числа ссылок равен 0, непустые страницы через КЭШ.
Загрузка
SWAPPER≈ название алгоритма.
1. Выбирают готовый к выполнению процесс, дольше всех лежащий в свопе (если нет подходящих, то делают приостановку).
2. Загружают его.
Выгрузка
1. Выбирают процесс, который дольше спит (или дольше всего в памяти)
2. Выгружают его
В указанной ситуации более всего подходит первый вариант.
