Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Операционные системы. Учебное пособие (лабораторный практикум)

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
является просто точка ".". Скрипт оболочки служит просто аргумен- том этой команды. Ее формат: 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