ОС ИТМО
.pdf
4 |
ILL |
Illegal Instruction. Центральный |
Да |
Да |
|
|
|
процессор столкнулся с |
|
|
|
|
|
незнакомой командой (в |
|
|
|
|
|
большинстве случаев это |
|
|
|
|
|
означает, что допущена |
|
|
|
|
|
программная ошибка). Сигнал |
|
|
|
|
|
отправляется программе, в |
|
|
|
|
|
которой возникла проблема |
|
|
|
8 |
FPE |
Floating Point Exception. |
Да |
Да |
|
|
|
Вычислительная ошибка, |
|
|
|
|
|
например, деление на ноль |
|
|
|
9 |
KILL |
Всегда прекращает выполнение |
Нет |
Нет |
|
|
|
процесса |
|
|
|
11 |
SEGV |
Segmentation Violation. Доступ к |
Да |
Да |
|
|
|
недозволенной области памяти |
|
|
|
13 |
PIPE |
Была предпринята попытка |
Да |
Да |
|
|
|
передачи данных с помощью |
|
|
|
|
|
конвейера или очереди FIFO, |
|
|
|
|
|
однако не существует процесса, |
|
|
|
|
|
способного принять эти данные |
|
|
|
15 |
TERM |
Software Termination. |
Да |
Да |
|
|
|
Требование закончить процесс |
|
|
|
|
|
(программное завершение) |
|
|
|
17 |
CHLD |
Изменение статуса |
Да |
Да |
|
|
|
порожденного процесса |
|
|
|
18 |
CONT |
Продолжение выполнения |
Да |
Да |
|
|
|
приостановленного процесса |
|
|
|
19 |
STOP |
Приостановка выполнения |
Нет |
Нет |
|
|
|
процесса |
|
|
|
20 |
TSTR |
Сигнал останова, генерируемый |
Да |
Да |
<Ctrl>+<Z> |
|
|
клавиатурой. Переводит |
|
|
|
|
|
процесс в фоновый режим |
|
|
|
В случае системных сигналов, как правило, процесс имеет обработчик этого сигнала – код, который выполнится в случае получения процессом этого сигнала. Для использования пользовательских сигналов необходимо написать свой обработчик.
Для обработки сигналов в sh (bash) используется встроенная команда trap с форматом
trap action signal
Команде нужно передать два параметра: действие при получении сигнала и сигнал, для которого будет выполняться указанное действие. Обычно в качестве действия указывают вызов функции, описанной выше в коде скрипта.
31
С помощью команды trap можно не только задать обработчик для
пользовательского сигнала, но и подменить обработчик для некоторых из системных сигналов (кроме тех, перехват которых запрещен). В этом случае обработка сигнала перейдет к указанному в trap обработчику.
Для демонстрации передачи управления от одного процесса к другому рассмотрим еще одну пару скриптов.
Генератор |
Обработчик |
#!/bin/bash |
#!/bin/bash |
while true; do |
echo $$ > .pid |
read LINE |
A=1 |
case $LINE in |
MODE="rabota" |
STOP) |
usr1() |
kill -USR1 |
{ |
$(cat .pid) |
MODE="ostanov" |
;; |
} |
*) |
trap 'usr1' USR1 |
: |
while true; do |
;; |
case $MODE in |
esac |
"rabota") |
done |
let A=$A+1 |
|
echo $A |
|
;; |
|
"ostanov") |
|
echo "Stopped by |
|
SIGUSR1" |
|
exit |
|
;; |
|
esac |
|
sleep 1 |
|
done |
В этом случае скрипт «Генератор» будет в бесконечном цикле считывать строки с консоли и бездействовать (используется оператор : ) для любой
входной строки, кроме строки STOP, получив которую, он отправит пользовательский сигнал USR1 процессу «Обработчик». Поскольку процесс
«Генератор» должен знать PID процесса «Обработчик», передача этого идентификационного номера осуществляется через скрытый файл. В процессе «Обработчик» определение PID процесса производится с помощью системной переменной $$.
Процесс «Обработчик» выводит на экран последовательность натуральных чисел до момента получения сигнала USR1. В этот момент
32
запускается обработчик usr1(), который меняет значение переменной MODE.
В результате на следующем шаге цикла будет выведено сообщение о прекращении работы в связи с появлением сигнала, и работа скрипта будет завершена.
Задание на лабораторную работу
Создайте скрипты или запишите последовательности выполнения команд для перечисленных заданий и предъявите их преподавателю.
1.Создайте и однократно выполните скрипт (в этом скрипте нельзя использовать условный оператор и операторы проверки свойств и значений), который будет пытаться создать директорию test в домашней директории. Если создание директории пройдет успешно, скрипт выведет в файл ~/report сообщение вида "catalog test was created successfully" и создаст в директории test файл с именем Дата_Время_Запуска_Скрипта. Затем независимо от результатов предыдущего шага скрипт должен опросить с помощью команды ping хост www.net_nikogo.ru и, если этот хост недоступен, дописать сообщение об ошибке в файл ~/report.
2.Задайте еще один однократный запуск скрипта из пункта 1 через 2 минуты. Организуйте слежение за файлом ~/report и выведите на консоль новые строки из этого файла, как только они появятся.
3.Задайте запуск скрипта из пункта 1 каждые 5 минут каждого часа в день недели, в который вы будете выполнять работу.
4.Создайте два фоновых процесса, выполняющих одинаковый бесконечный цикл вычисления (например, перемножение двух чисел). После запуска процессов должна сохраниться возможность использовать виртуальные консоли, с которых их запустили. Используя команду top,
проанализируйте процент использования ресурсов процессора этими процессами. Добейтесь, чтобы тот процесс, который был запущен первым, использовал ресурс процессора не более чем на 20%.
5.Процесс «Генератор» передает информацию процессу «Обработчик» с помощью файла. Процесс «Обработчик» должен осуществлять следующую обработку новых строк в этом файле: если строка содержит единственный символ «+», то процесс «Обработчик» переключает режим на сложение и ждет ввода численных данных. Если строка содержит единственный символ «*», то обработчик переключает режим на
умножение и ждет ввода численных данных. Если строка содержит целое число, то обработчик осуществляет текущую активную операцию (выбранный режим) над текущим значением вычисляемой переменной и считанным значением (например, складывает или перемножает результат
33
предыдущего вычисления со считанным числом). При запуске скрипта режим устанавливается в сложение, а вычисляемая переменная приравнивается к 1. В случае получения строки QUIT скрипт выдает
сообщение о плановой остановке и завершает работу. В случае получения любых других значений строки скрипт завершает работу с сообщением об ошибке входных данных.
6.Процесс «Генератор» считывает строки с консоли, пока ему на вход не поступит строка TERM. В этом случае он посылает системный сигнал SIGTERM процессу обработчику. Процесс «Обработчик» (как и в примере, выводящий в бесконечном цикле натуральное число каждую секунду) должен перехватить системный сигнал SIGTERM и завершить
работу, предварительно выведя сообщение о завершении работы по сигналу от другого процесса.
7.Процесс «Генератор» считывает с консоли строки в бесконечном цикле. Если считанная строка содержит единственный символ «+», он посылает процессу «Обработчик» сигнал USR1. Если строка содержит единственный символ «*», генератор посылает обработчику сигнал USR2. Если строка содержит слово TERM, генератор посылает обработчику сигнал SIGTERM. Другие значения входных строк игнорируются. Обработчик добавляет 2 или умножает на 2 текущее значение обрабатываемого числа (начальное значение принять на единицу) в зависимости от полученного пользовательского сигнала и выводит результат на экран. Вычисление и вывод производятся один раз в секунду. Получив сигнал SIGTERM, «Обработчик» завершает свою
работу, выведя сообщения о завершении работы по сигналу от другого процесса.
Лабораторная работа №5. Работа с файлово-каталожной системой в ОС GNU/Linux
Рассматриваемые вопросы
1.Основные команды для работы с файлами и каталогами
2.Использование механизма ссылок
3.Прямая и косвенная адресация каталогов
Методические рекомендации
Понятие файла является фундаментальным понятием для *nix операционных систем. Кроме простых (регулярных) файлов с данными в этом семействе операционных систем принято реализовывать с помощью специальных типов файлов интерфейсы доступа к внешним устройствам,
34
отображения данных о процессах и ресурсах операционной системы, настроек компонентов операционной системы и пользовательских приложений и т.п. Следует отметить, что каталог (директорий) в *nix операционных системах также представляет собой специальный тип файла, хранящий имена и номера дескрипторов входящих в него подкаталогов и файлов.
Основные команды для работы с файлами и каталогами
cd - смена каталога
cp - копирование файлов
ls - выводит список файлов и каталогов текущей директории file - указывает тип указанного файла
find - поиск файлов ln - создание ссылок
mkdir - создание каталога
mv - перемещение файла или каталога pwd – вывод имени текущего каталога rm - удаления файла
rmdir - удаление каталога cat - слияние и вывод файлов
Ссылки на файлы
ВLinux существует два вида ссылок, обычно называемых жесткие ссылки
исимвольные, или "мягкие" ссылки.
Жесткая ссылка является всего лишь именем какого-либо файла – записью в соответствующем каталоге со ссылкой на индексный дескриптор этого файла. Таким образом, файл может иметь одновременно несколько имен в различных каталогах. Он будет удален с диска только тогда, когда будет удалено последнее из его имен. Нет такого понятия, как "настоящее" имя: все имена имеют одинаковый статус.
35
Мягкая ссылка (или символьная ссылка, или symlink) полностью отличается от жесткой ссылки: она является специальным файлом, который содержит путь к другому файлу. Таким образом, мягкая ссылка может указывать на файлы, которые находятся на других файловых системах, и не нуждается в наличии того файла, на который она указывает. Когда происходит попытка доступа к файлу, ядро операционной системы заменяет ссылку на тот путь, который она содержит. Однако команда rm удаляет саму ссылку, а не файл, на который она указывает. Для чтения состояния символьной ссылки, а также имени файла, на который она указывает, используется команда readlink.
Полное имя файла может задаваться как с использованием абсолютного пути, например, /home/user/file, так и с помощью относительного пути – пути, заданного относительно текущего каталога. Это особенно часто применяется в скриптах. Для этого в каждом каталоге есть два служебных каталога:
.. – указывает на родительский каталог
. – указывает на текущий каталог
Например, команда cd .. позволит перейти на уровень выше, а команда cd . ничего не изменит.
Другой пример: команда ./script.bash запускает скрипт именно из текущего каталога.
Наконец, если мы находимся в домашнем каталоге пользователя user, то путь к файлу
./../../home/user/file
будет соответствовать пути к файлу в домашнем каталоге, как и описанный выше пример абсолютного пути.
Для того, чтобы перейти к корню файловой системы можно использовать команду cd /
Для обозначения домашнего каталога активного пользователя можно использовать символ ~. Тогда запись cd ~ будет эквивалентна записи cd $HOME.
36
Задание на лабораторную работу
Создайте скрипты для перечисленных заданий и предъявите их преподавателю.
1.Скрипт rmtrash
a.Скрипту передается один параметр – имя файла в текущем каталоге вызова скрипта.
b.Скрипт проверяет, создан ли скрытый каталог trash в домашнем каталоге пользователя. Если он не создан – создает его.
c.После этого скрипт создает в этом каталоге жесткую ссылку на переданный файл с уникальным именем (например, присваивает каждой новой ссылке имя, соответствующее следующему натуральному числу) и удаляет файл в текущем каталоге.
d.Затем в скрытый файл trash.log в домашнем каталоге пользователя помещается запись, содержащая полный исходный путь к удаленному файлу и имя созданной жесткой ссылки.
2.Скрипт untrash
a.Скрипту передается один параметр – имя файла, который нужно восстановить (без полного пути – только имя).
b.Скрипт по файлу trash.log должен найти все записи, содержащие в качестве имени файла переданный параметр, и выводить по одному на экран полные имена таких файлов с запросом подтверждения.
c.Если пользователь отвечает на подтверждение положительно, то предпринимается попытка восстановить файл по указанному полному пути (создать в соответствующем каталоге жесткую ссылку на файл из trash и удалить соответствующий файл из trash). Если каталога, указанного в полном пути к файлу, уже не существует, то файл восстанавливается в домашний каталог пользователя с выводом соответствующего сообщения.
3.Скрипт backup
a.Скрипт создаст в /home/user/ каталог с именем Backup-YYYY- MM-DD, где YYYY-MM-DD – дата запуска скрипта, если в /home/user/ нет каталога с именем, соответствующим дате, отстоящей от текущей менее чем на 7 дней. Если в /home/user/ уже есть «действующий» каталог резервного копирования (созданный не ранее 7 дней от даты запуска скрипта), то новый каталог не создается. Для определения текущей даты можно воспользоваться командой date.
37
b.Если новый каталог был создан, то скрипт скопирует в этот каталог все файлы из каталога /home/user/source/ (для тестирования скрипта создайте такую директорию и набор файлов в ней). После этого скрипт выведет в режиме дополнения в файл /home/user/backup-report следующую информацию: строка со сведениями о создании нового каталога с резервными копиями с указанием его имени и даты создания; список файлов из /home/user/source/, которые были скопированы в этот каталог.
c.Если каталог не был создан (есть «действующий» каталог резервного копирования), то скрипт должен скопировать в него все файлы из /home/user/source/ по следующим правилам: если файла с таким именем в каталоге резервного копирования нет, то он копируется из /home/user/source. Если файл с таким именем есть, то его размер сравнивается с размером одноименного файла в действующем каталоге резервного копирования. Если размеры совпадают, файл не копируется. Если размеры отличаются, то файл копируется c автоматическим созданием версионной копии, таким образом, в действующем каталоге резервного копирования появляются обе версии файла (уже имеющийся файл переименовывается путем добавления дополнительного расширения «.YYYY-MM-DD» (дата запуска скрипта), а скопированный сохраняет имя). После окончания копирования в файл /home/user/backup-report выводится строка о внесении изменений в действующий каталог резервного копирования с указанием его имени и даты внесения изменений, затем строки, содержащие имена добавленных файлов с новыми именами, а затем строки с именами добавленных файлов с существовавшими в действующем каталоге резервного копирования именами с указанием через пробел нового имени, присвоенного предыдущей версии этого файла.
4.Скрипт upback
a.Скрипт должен скопировать в каталог /home/user/restore/ все файлы из актуального на данный момент каталога резервного копирования (имеющего в имени наиболее свежую дату), за исключением файлов с предыдущими версиями.
5.Все скрипты должны корректно обрабатывать любые передаваемые им входные параметры и значения. Не допускается вывод сообщений об ошибках от отдельных команд, использующихся в скрипте. В случае
некорректных входных данных или невозможности выполнить операцию,
38
пользователю должно выводиться отдельное сообщение, формирующееся в скрипте. Перед предъявление результатов выполнения лабораторной работы преподавателю необходимо провести тестирование разработанных скриптов.
Лабораторная работа №6. Консольный интерфейс ОС
Microsoft Windows
Рассматриваемые вопросы
1.Познакомиться с командной строкой ОС Microsoft Windows.
2.Получить навыки использования команд для работы с файловокаталожной системой.
3.Научиться управлять службами и драйверами.
Методические рекомендации
В отличие от *nix операционных систем в операционных системах семейства Microsoft Windows основным является графический пользовательский интерфейс, предоставляющий доступ ко всем возможным для изменения параметрам операционной системы и приложений. Однако в операционных системах этого семейства есть возможность использовать командный интерпретатор и создавать скрипты для автоматизации задач администрирования.
Запуск командного интерпретатора (оболочки командной строки) производится исполняемым файлом cmd.exe, который находится в каталоге
%SystemRoot%\SYSTEM32, где %SystemRoot% - переменная окружения, в
которой записан путь к системному каталогу Windows (например, С:/Windows). Командный интерпретатор может выполнять команды двух типов: внутренние и внешние. Внутренние команды распознаются непосредственно интерпретатором. Любую команду, не относящуюся к внутренним, интерпретатор пытается рассматривать как внешнюю. Внешние команды реализуются отдельными утилитами, исполняемые файлы которых, как правило, располагаются в том же каталоге, что и cmd.exe. Вызов как внутренних, так и внешних команд нечувствителен к регистру.
Синтаксис вызова команды включает в себя название команды, после которого через пробелы следуют передаваемые команде параметры и ключи. В ОС семейства Microsoft Windows традиционно ключи обозначаются /ключ,
например, /A или /X. Любая команда поддерживает ключ /?, с которым на
экран выводится справка по этой команде. По структуре она напоминает man в *nix системах. Обязательными элементами справочной информации являются
39
описание назначения команды, синтаксис ее вызова и описание назначения ключей.
Командный интерпретатор cmd.exe поддерживает конструкции для перенаправления ввода и вывода команд аналогично *nix операционным системам: >, >>, <, |.
Основные команды, необходимые для выполнения лабораторной работы:
cmd – запускает командный интерпретатор.
echo – выводит текстовое сообщение в консоль или отключает/включает режим отображения в консоли информации о работе команд.
сopy – копирует один или группу файлов. Может использоваться для
объединения нескольких текстовых файлов в один. Команда не позволяет копировать файлы в подкаталогах.
xcopy – копирует файлы и каталоги, включая подкаталоги.
dir – выводит список файлов и подкаталогов каталога. В случае вызова
команды без параметров, она отображает метку тома и серийный номер тома, за которыми следует список подкаталогов и файлов в текущем каталоге с указанием их даты и времени последнего изменения. Для файлов также выводится размер в байтах. После списка выводится общее число перечисленных файлов и подкаталогов, их суммарный размер и свободное пространство (в байтах) на диске.
cd – изменяет текущий каталог.
md – создает каталог.
rd – удаляет пустой каталог.
rm – удаляет файл.
find – ищет заданную строку текста в файле или в группе файлов. Результатом
поиска является вывод на экран всех строк файлов, содержащих заданный образец.
sort – сортирует входной поток данных.
mem – выводит сведения об используемой и свободной памяти.
40
