Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Операционные системы. Учебное пособие (лабораторный практикум)
.pdf
является просто точка ".". Скрипт оболочки служит просто аргумен-
том этой команды. Ее формат: source filename [arguments]
или.filename [arguments]
Эта команда читает и выполняет команды из файла с именем
filename в текущем окружении и возвращает статус, определяемый
последней командой из файла filename. Если filename не содержит
слэша, то пути, перечисленные в переменной PATH, используются
для поиска файла с именем filename. Этот файл не обязан быть исполняемым. Если в каталогах, перечисленных в PATH, нужный
файл не найден, его поиск производится в текущем каталоге.
Если заданы аргументы, на время выполнения скрипта они становятся позиционными параметрами. Если аргументов нет, позиционные параметры не изменяются. Значение (статус), возвращаемое
командой source, совпадает со значением, возвращаемым последней
командой, выполненной в скрипте. Если ни одна команда не выполнялась, или файл filename не найден, то статус выхода равен 0.
Команда sh. Вы всегда можете запустить новый экземпляр обо-
лочки bash, дав команду bash или sh. При этом можно заставить новый экземпляр оболочки выполнить какой-то скрипт, если передать
имя скрипта в виде аргумента команды bash. Так, для выполнения
скрипта myscript надо дать команду "sh myscript".
Если вы заглянете в какой-нибудь файл, задающий скрипт (таких файлов в системе очень много), вы увидите, что первая строка
в нем имеет вид: #!/bin/sh. Это означает, что когда мы запускаем
скрипт на выполнение как обычную команду, /bin/sh будет выполнять ее для нас. Можно заменить эту строку ссылкой на любую программу, которая будет читать файл и исполнять соответствующие
команды. Например, скрипты на языке Perl начинаются со строки
вида #!/bin/perl.
Отметим также, что символ # служит для выделения в скриптах
комментариев. Все, что стоит в текущей строке после этого символа
и до символа конца строки, оболочка будет считать комментариями
и игнорировать (т. е. оболочка не рассматривает этот текст как команды). Если хотите убедиться в действии этого символа, введите в
командной строке любую команду, поставив перед ней символ #,
например, "# ls", и вы увидите, что команда игнорируется оболочкой.
Оборудование и материалы: см. приложение 1.
Указания по технике безопасности: см. приложение 2.
71

Вар.
Операционная система 1
(версия и год выпуска на
выбор студентов ‒ любые)
Операционная система 2
(версия и год выпуска на выбор
студентов ‒ любые)
1.
Ubuntu Linux
Lubuntu Linux
2.
Fedora Linux
CentOS Linux
3.
ASP Linux
Mandrake Linux
4.
Mageia Linux
OpenMandriva
5.
Kali Linux
BugTrack Linux
6.
Calculate Linux
Slackware Linux
7.
Red Hat Linux
OpenSuse Linux
8.
Rosa Linux
Bodhi Linux
9.
Альт Линукс
Red Star OS
10.
MCBC 3.0
Astra Linux
11.
Mandriva Linux
Black Cat Linux
12.
Elementary OS
Linix Mint
13.
Windows 95
Windows NT 4.0
14.
Gentoo Linux
Arch Linux
15.
WiFiSlax Linux
Parrot Security OS
16.
Deepin Linux
Debian Linux
17.
FreeDOS + Windows 3.11 FWG
MS-DOS 6.22 + Windows 3.11 FWG
18.
React OS
Windows XP
19.
FreeBSD
Frenzy
20.
DragonFly BSD
FreeBSD
21.
OpenIndiana
OpenSolaris
22.
NetBSD
OpenBSD
23.
ОЛИВИЯ
OpenBSD
24.
Plan9
Minix 3.0
25.
Kolibri OS
BeOS
Задания
Установить в виртуальную ЭВМ VirtualBox одну из двух операционных систем на выбор студента и провести исследование.
Создать пакетный файл (.bat, .sh, .csh или им подобный) для поиска в текущем каталоге всех файлов больших указанного в скрипте
размера, выводе списка этих файлов на экран и переносе этих файлов в указанную внутри скрипта директорию. Привести скриншоты
работы этого скрипта.
72

Содержание отчета
Лабораторная работа считается выполненной студентом и засчитывается преподавателем (с зачислением баллов пропорционально выполненным пунктам отчета, т. е. необязательно, чтобы отчет содержал все пункты) при предоставлении в электронном виде
к защите (бумажная распечатка не требуется!!!) аккуратно оформленного файла-отчета в формате .pdf (презентация), .odt
(OpenOffice, LibreOffice) или .doc (Microsoft Office), именованный
по шаблону (при несоответствии работа не допускается к защите):
OS_PMI_LR4_V(номер варианта)_(фамилия).pdf
Файл-отчет должен иметь следующие элементы-слайды презентации или пункты текстового отчета-документа в указанном порядке
(с сохранением их номера в случае пропуска некоторых пунктов):
1. Титульный лист, содержащий название дисциплины, тему и
номер лабораторной работы, ФИО студента, курс, группу.
Форму и дизайн титульного листа студент определяет самостоятельно, ориентируясь на удобство восприятия информации на титульном листе.
2. Отметка об ознакомлении с техникой безопасности (прави-
лами поведения в компьютерном классе (аудитории, лаборатории)).
В данном пункте необходимо наличие записи «С правилами
техники безопасности при выполнении лабораторной работы и поведения в компьютерном классе (аудитории, лаборатории) ознакомлен, обязуюсь выполнять _____ (ФИО), _____ дата».
3. Постановка задачи (полное условие в соответствии с выбран-
ным вариантом).
4. Реферативный обзор информационных (интернет) источни-
ков по заданию.
В данном пункте указать по шагам:
4.1. Командный интерпретатор.
4.2. Синтаксис командного интерпретатора COMMAND.COM.
4.3. Синтаксис командного интерпретатора CMD.
4.4. Синтаксис командного интерпретатора PowerShell.
4.5. Синтаксис командного интерпретатора SH.
4.6. Синтаксис командного интерпретатора BASH.
4.7. Синтаксис командного интерпретатора CSH.
4.8. Язык создания скриптов PERL.
4.9. Язык программирования Python.
73

Необходимо указать по порядку информационные источники и
их содержимое по заданию. Допустимо использовать текст, гиперссылки, таблицы, рисунки и т. д., любую информацию, облегчающую просмотр и защиту презентации-отчета. Разрешено использование только открытых публичных источников информации, не
требующих передачи авторских прав или каких-либо иных отчислений. Если информация по какому-либо из разделов реально отсутствует в публичном доступе или засекречена, то напечатать «информация засекречена» с указанием ведомства или организации, засекретившей данную информацию. Рекомендуемый объем реферативного обзора – 3‒10 страниц (5‒10 слайдов).
5. Необязательный пункт отчета для получения повышенных
баллов. Экранные снимки установленной в виртуальную машину,
контролируемую студентом или на реальный компьютер, принадлежащий студенту, выбранной согласно варианта операционной системы. На скриншоте должны быть четко различимы ФИО студента
на ключевых интерфейсных элементах виртуальной машины или в
программах, запущенных внутри исследуемой ОС. Рекомендуемый
объем – 5‒10 скриншотов (5‒10 слайдов).
6. Необязательный пункт отчета для получения повышенных
баллов. Личное исследование работы операционной системы.
В данном пункте требуется написать от первого лица инструкцию по работе с несколькими программами, характерными именно
для этой ОС и отличающие ее от аналогичных ОС. Рекомендуемый
объем – 3‒5 страниц (5‒10 слайдов).
7. Необязательный пункт отчета для получения повышенных
баллов. Публичная защита отчета по лабораторной работе.
В данном пункте привести ссылку на Youtube-видео или иной
публичный видео-ресурс, на котором записана защита-выступление
отчета или презентации по лабораторной работе лично студентом.
Рекомендуемое время видеоролика – 5‒10 минут.
Контрольные вопросы
1. Обеспечение безопасности в файловой системе NTFS.
2. Реестр.
Литература: 1–6.
74

5. ЭФФЕКТИВНОСТЬ, МОНИТОРИНГ И ОПТИМИЗАЦИЯ
ОПЕРАЦИОННЫХ СИСТЕМ
Цель работы ‒ закрепление знаний и изучение эффективности, мо-
ниторинга и оптимизации операционных систем.
Знания и умения, приобретаемые студентом в результате освоения темы, формируемые компетенции или их части: ОПК-4.
В результате освоения дисциплины обучающийся должен
знать: методы повышения эффективности, мониторинга и оптимиза-
ции операционных систем, концепция процесса, основные характерные
состояния процесса, свойства и классификация процессов, определение
ресурса, свойства ресурсов, классификация ресурсов, концепция виртуализации, концепция прерывания, планирование потоков, диспетчеризация
потоков, мультипрограммирование, планирование процессов и потоков,
потоки как средство распараллеливания вычислений, основные состояния
потока, вытесняющие алгоритмы планирования, невытесняющие алгоритмы планирования, алгоритмы планирования, основанные на квантовании, алгоритмы планирования, основанные на приоритетах, смешанные
алгоритмы планирования;
уметь: находить, анализировать, реализовывать программно и ис-
пользовать на практике математические методы повышения эффективности, мониторинга и оптимизации операционных систем;
владеть: методами повышения эффективности, мониторинга и опти-
мизации операционных систем.
Теоретическая часть
Начнем с рассмотрения того, как происходит процесс загрузки
ОС. Дело в том, что этот этап во многом определяет режим последующей работы системы и ее конфигурацию. Если вы умеете влиять на процесс загрузки, значит, вы уже сможете добиться желаемой
конфигурации системы после загрузки. Но для понимания процедуры начальной загрузки необходимо иметь самое общее представление о том, что такое процесс в системе, поскольку это понятие
будет постоянно использоваться в дальнейшем.
В самом первом приближении можно считать, что процесс – это
загруженная в оперативную память программа. Но это не совсем
точно, правильнее было бы сказать, что «процесс выполняет программу». Дело в том, что в Linux вначале запускается процесс, который загружает в оперативную память программу из указанного ему
файла и начинает ее выполнять. Это означает, что каждый процесс
должен быть запущен или порожден каким-то другим процессом. То
75

есть для каждого процесса однозначно определен его родитель или
предок, для которого данный процесс является дочерним или потомком. Если вы хотите увидеть «дерево» запущенных в вашей системе
процессов, выполните команду pstree. Вывод этой команды позволяет увидеть, что «отцом» всех процессов в системе является процесс
init, который первым запускается после загрузки ядра.
Каждый процесс в системе имеет уникальный идентификатор –
PID, назначаемый процессу при запуске. Процесс с идентификатором 1 выполняет программу init. Именно по этим идентификаторам
система различает процессы. Каждый запущенный процесс в любой
момент времени находится в одном из следующих состояний: активен (R), приостановлен (T) или «спит» (S). Текущее состояние процесса называют статусом процесса.
Поскольку Linux – система многозадачная, одновременно может быть запущено много процессов. Планировщик процессов выделяет каждому процессу небольшой квант времени и по истечении
этого кванта передает управление следующему процессу. Кванты
времени, выделяемые каждому процессу, так малы, что у пользователя создается иллюзия одновременного выполнения многих процессов. А для того чтобы некоторые, наиболее важные процессы получали больше процессорного времени, для каждого процесса установлен приоритет.
Пользователи могут «общаться» с процессами путем посылки
им сигналов. Процессы тоже общаются друг с другом посредством
сигналов. Когда мы нажимаем комбинацию клавиш <Ctrl>+<C>,
чтобы завершить выполнение какой-то программы, мы фактически
посылаем соответствующему процессу сигнал «Завершить работу».
Завершаясь, процесс посылает родительскому процессу сигнал о
своем завершении. Но бывают случаи, когда родительский процесс
завершается раньше дочернего. Процессы, не имеющие родителя,
называются «сиротами». «Сироты» автоматически усыновляются
процессом init, который и принимает сигналы об их завершении.
Если процесс-родитель по каким-то причинам не может принять сигнал о завершении дочернего процесса, то процесс-потомок превращается в «зомби» и получает статус Z. Процессы-зомби не занимают
процессорного времени (т. е. их выполнение прекращается), но соответствующие им структуры ядра не освобождаются. Уничтожение
таких процессов – одна из обязанностей системного администратора.
76

Наконец, процесс может надолго «впасть в сон», прервать который
не удается. Статус таких процессов обозначается символом D. Уничтожить их удается только при перезагрузке системы.
Особым видом процессов являются демоны. Вообще-то в них
нет ничего особого. Это просто процессы, выполняющиеся в фоновом режиме, без вывода каких-либо данных на терминал. Демоны
обычно используются для выполнения сервисных функций, обслуживания запросов от других процессов, причем не обязательно выполняющихся на данном компьютере.
Надо еще упомянуть, что процессы могут запускать («внутри
себя») отдельные нити (thread), или потоки. Нити – это параллельно
выполняемые части одной программы, которые в Linux реализованы как процессы, запускаемые со специальным флагом. С точки
зрения системы они отличаются от других процессов только тем,
что для них не создается отдельное окружение, они выполняются в
среде родительского процесса.
Процедура загрузки ОС Linux. Для начала надо отметить, что
все, о чем будет рассказано в этом разделе, относится к дистрибутиву Red Hat и его аналогам. В других дистрибутивах (например,
Debian) процедуры загрузки могут быть организованы иначе.
Процесс init и файл /etc/inittab. После включения питания компьютера и завершения тестирования аппаратной части BIOS считывает из первого сектора загрузочного диска короткую программузагрузчик. Эта программа запускает основной системный загрузчик
(например, lilo), который, в свою очередь, загружает в память ядро
системы, которое обычно хранится в файле vmlinuz-x.y.z-a в каталоге /boot. Здесь x.y.z – это номер версии ядра, а вместо символа "a"
часто стоит указание на какие-то конкретные модификации ядра.
Сразу после загрузки ядро монтирует корневую файловую систему и запускает процесс init. Процесс init – это программа, которая ответственна за продолжение процедуры загрузки, и перевод
системы от начального состояния, возникающего после загрузки
ядра, в стандартное состояние обработки запросов многих пользователей. Init выполняет еще массу различных операций, необходимых для дальнейшей работы системы: проверку и монтирование
файловых систем, запуск различных служб (демонов), запуск процедур логирования, оболочек пользователей на различных терминалах и т. д.
77

Точный список этих операций зависит от так называемого
уровня выполнения (run level). Уровень выполнения определяет перечень действий, выполняемых процессом init, и состояние системы
после загрузки, т. е. конфигурацию запущенных процессов. Уровень выполнения идентифицируется одним символом. В ОС Linux
существует 8 основных уровней выполнения:
0 – остановка системы;
1 – однопользовательский режим (для специальных случаев ад-
министрирования);
2 – многопользовательский режим без NFS (то же, что и 3, если
компьютер не работает с сетью);
3 – полный многопользовательский режим;
4 – использование не регламентировано;
5 – обычно используется для запуска системы в графическом
режиме;
6 – перезагрузка системы;
S (или s) – примерно то же, что и однопользовательский режим,
но S и s используются в основном в скриптах.
Первым делом после старта процесс init считывает свой конфигурационный файл /etc/inittab. Обработка файла /etc/inittab процессом init начинается в однопользовательском режиме (уровень 1), в
котором единственным пользователем является пользователь root,
работающий с консоли. Первым делом init находит строку, которая
определяет, какой уровень выполнения запускается по умолчанию:
id:3:initdefault:
Это и будет тот уровень, в котором запустится и будет работать
система после загрузки. После завершения загрузки init продолжает
работать в фоновом режиме, отслеживая изменения в состоянии системы.
Таким образом, процесс начальной загрузки init постоянно
находится в оперативной памяти и при получении соответствующих сигналов повторно выполняет цикл чтения из файла /etc/inittab
инструкций о том, что нужно делать, причем этот набор инструкций
различен для разных уровней выполнения.
Когда суперпользователь останавливает систему (командой
shutdown), именно init завершает все другие исполняющиеся процессы, размонтирует все файловые системы и останавливает процессор.
78

В приведенном описании опущены многие важные детали. Более подробное описание можно найти в man-страницах по init (8),
inittab (5) и getty (8), а также в документах «Linux Documentation
Project's Serial HOWTO».
Основные конфигурационные файлы. В обычной ситуации процесс init помимо запуска процессов getty выполняет 2 основных
действия:
запускает скрипт rc.sysinit из каталога /etc/rc.d;
запускает скрипт rc из того же каталога /etc/rc.d с опцией, равной уровню выполнения (обычно rc 3).
В файле rc.sysinit содержатся команды инициализации системы, в том числе команды установки системных переменных, загрузки таблиц раскладки клавиатуры (командой loadkeys) и системного шрифта (команда consolechars), монтирования и проверки файловых систем, загрузки модулей, задания предпочитаемой графической оболочки и т. д.
Прежде чем рассматривать функции, выполняемые скриптом
rc, надо сказать несколько слов о каталоге /etc/rc.d. Этот каталог вообще играет важную роль в процессе загрузки, поскольку он содержит основные скрипты (программы на языке командного процессора shell), служащие для организации процесса загрузки.
Каталог rc.d содержит следующий набор подкаталогов: rc0.d,
rc1.d, rc2.d, rc3.d,rc4.d, rc5.d, rc6.d, init.d
Если вы просмотрите (например, с помощью команды ls -l) содержимое подкаталогов rcX.d, то увидите, что в этих подкаталогах
содержатся не файлы, а только ссылки на файлы скриптов, находящиеся в других каталогах, а именно (за редким исключением), в каталоге /etc/rc.d/init.d. Названия этих ссылок имеют имена, начинающиеся либо с буквы K, либо с буквы S. Подкаталог init.d содержит
по одному скрипту для каждой из возможных в системе служб
(NFS, sendmail, httpd и т. п.).
Теперь вспомним, что процесс init после скрипта rc.sysinit запускает скрипт rc с опцией, равной заданному уровню выполнения.
Этот скрипт предназначен в общем случае для перевода системы из
одного уровня выполнения на другой. В процессе начальной загрузки этот скрипт переводит систему из однопользовательского
режима на уровень, задаваемый по умолчанию. Общий алгоритм работы rc состоит в следующем. При переходе на уровень X сначала
79

просматривается каталог rcX.d и для всех ссылок, которые начинаются на K, вызываются файлы, на которые идет ссылка, с опцией
stop, т. е. осуществляется останов соответствующих служб (которые не должны работать на данном уровне выполнения). Затем запускаются службы, которые на данном уровне выполнения должны
быть запущены. Это осуществляется путем последовательного просмотра ссылок, которые начинаются с символа S, и запуска соответствующих скриптов с опцией start. Из сказанного ясно, что буквы
(символы) S и K, с которых начинаются имена ссылок в подкаталогах rcX.d, происходят от start и kill, соответственно. Заметим еще,
что после S и K в именах ссылок стоят двузначные номера, которые
служат для задания порядка запуска скриптов.
Одна из последних ссылок вида SXXname, используемых
скриптом rc на уровнях 2–5, является ссылка на скрипт
/etc/rc.d/rc.local. Как сказано в самом этом файле, этот скрипт выполняется после всех других скриптов в процессе инициализации
системы, поэтому если вы хотите, чтобы в процессе загрузки были
выполнены какие-то дополнительные команды или ваши персональные настройки, то их целесообразно поместить именно сюда.
Тот вариант этого скрипта, который устанавливается из дистрибутива, выполняет очень ограниченные задачи: выводит на
экран логотип дистрибутива и формирует файлы /etc/issue и
/etc/issue.net, содержащие текст сообщений, выдаваемых пользователю при входе в систему.
Другие файлы, влияющие на процесс загрузки. Кроме файлов
/etc/inittab, /etc/rc.d/rc.sysinit, /etc/rc.d/rc, /etc/rc.d/rc.local на процесс
загрузки оказывают влияние те скрипты и отдельные программы,
которые вызываются из только что перечисленных файлов, а также
некоторые чисто конфигурационные файлы. Рассмотреть их все невозможно, но о некоторых необходимо упомянуть.
Все важнейшие общесистемные конфигурационные файлы
расположены в каталоге /etc и его подкаталогах. Приведем краткий
список с указанием на роль некоторых из этих файлов в системе и
ссылки на то, где искать более подробную информацию:
/etc/lilo.conf – файл, определяющий конфигурацию загрузчика
lilo;
/etc/modules.conf (или /etc/conf.modules) – файл, определяющий
конфигурацию загружаемых модулей ядра;
80
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
