организовать двустороннюю поочередную связь процесса-родителя и процесса-ребенка через pipe, используя для синхронизации сигналы sigusr1 и sigusr2. |
Введение в курс практических занятий. Знакомство с операционной системой UNIX
Введение в курс практических занятий
Настоящий курс практических занятий является одной из первых известных авторам попыток систематически проиллюстрировать лекционный курс "Основы операционных систем" на примере конкретной операционной системы, а именно – операционной системы UNIX.
Необходимость связывания систематического изложения материала семинарских и практических занятий с материалом лекций возникла в процессе становления базового четырехсеместрового набора курсов по информатике в МФТИ. Новизна излагаемого материала для многих преподавателей заставила лекторов для соблюдения некоторого стандарта обучения готовить по каждой теме методические указания для участников семинаров, и эти указания, как показал опыт, могут с успехом использоваться и студентами, в том числе для самостоятельного обучения. Обкатанная версия этих методических указаний, расширенная, дополненная и модифицированная по результатам многочисленных обсуждений предлагается сейчас вашему вниманию.
Семестровый курс "Основы операционных систем" является третьим по счету курсом цикла "Информатика", которому предшествуют курсы "Алгоритмы и алгоритмические языки" и "Архитектура ЭВМ и язык ассемблера". Предполагается, что к началу практических занятий студенты умеют программировать на языке С (с использованием функций стандартной библиотеки для работы с файлами и строками) и имеют представление о внутреннем устройстве ЭВМ.
Переход от обучения студентов информатике с использованием мэйнфреймов к обучению с использованием сетевых классов персональных компьютеров, свершившийся за последние двадцать лет, неизбежно наложил свой отпечаток на форму проведения практических занятий. Вместо раздельного проведения семинаров и практикума (лабораторных работ) появилось нечто смешанное – семинарский практикум или практический семинар, когда изложение нового материала в течение одного занятия чередуется с короткими практическими программными работами. Именно в виде таких семинаров-практикумов и построен наш курс. Ввиду достаточно высокой сложности используемых программных конструкций мы решили приводить готовые примеры программ для иллюстрации рассматриваемых понятий с последующей их модификацией студентами. Это позволило увеличить насыщенность занятий и за семестровый курс охватить большее количество материала.
Для иллюстрации лекций была выбрана операционная система UNIX, как наиболее открытая, изящная и простая для понимания, хотя создание подобного практического курса возможно и для других операционных систем, например для Windows NT.
В целом практический курс включает в себя 16 занятий, одно из которых в середине семестра – между семинарами 9 и 10-11 – посвящено проведению контрольной работы по материалам лекций. Некоторым темам выделено по два занятия, и соответствующие семинары имеют сдвоенные номера. Естественно, разбиение тем на занятия является достаточно условным, желательно лишь, чтобы они непосредственно следовали за лекциями, на которых основываются.
Далее мы переходим к изложению материала семинарско-практического курса.
По своему содержанию материал текущих семинаров 1–2 является наиболее критичным по отношению к используемому виду операционной системы и политике администрирования. Поэтому многие вопросы будут содержать ссылку "узнайте у своего системного администратора". Прежде чем приступать к занятиям, необходимо обеспечить наличие пользовательских account'ов для обучающихся. "Узнайте у своего системного администратора", как это сделать.
В тексте семинаров программные конструкции, включая имена системных вызовов, стандартных функций и команды оболочки операционной системы, выделены другим шрифтом. В UNIX системные вызовы и команды оболочки инициируют сложные последовательности действий, затрагивая различные аспекты функционирования операционной системы. Как правило, в рамках одного семинара полное объяснение всех нюансов их поведения является невозможным. Поэтому подробные описания большинства используемых системных вызовов, системных функций и некоторых команд оболочки операционной системы при первой встрече с ними вынесены из основного текста на серый фон и обведены рамочкой, а в основном тексте рассматриваются только те детали их описания, для понимания которых хватает накопленных знаний.
Если какой-либо параметр у команды оболочки является необязательным, он будет указываться в квадратных скобках, например, [who]. В случае, когда возможен выбор только одного из нескольких возможных вариантов параметров, варианты будут перечисляться в фигурных скобках и разделяться вертикальной чертой, например, {+ | - | =}.
Краткая история операционной системы UNIX, ее структура
На первой лекции мы разобрали содержание понятия "операционная система", обсудили функции операционных систем и способы их построения. Все материалы первой и последующих лекций мы будем иллюстрировать практическими примерами, связанными с использованием одной из разновидностей операционной системы UNIX – операционной системы Linux, хотя постараемся не связывать свой рассказ именно с ее особенностями.
Ядро операционной системы Linux представляет собой монолитную систему. При компиляции ядра Linux можно разрешить динамическую загрузку и выгрузку очень многих компонентов ядра – так называемых модулей. В момент загрузки модуля его код загружается для исполнения в привилегированном режиме и связывается с остальной частью ядра. Внутри модуля могут использоваться любые экспортируемые ядром функции.
Свой нынешний вид эта операционная система обрела в результате длительной эволюции UNIX-образных операционных систем. История развития UNIX подробно освещена практически во всей литературе, посвященной вычислительной технике. Как правило, это во многом один и тот же текст, с небольшими изменениями кочующий из одного издания в другое, и нам не хотелось бы повторяться. Мы просто сошлемся на достаточно подробное изложение в книге [ 23 ] или на оригинальную работу одного из родоначальников UNIX [ 7 ] . Для нас наиболее важным во всей этой истории является существование двух стержневых линий эволюции – линии System V и линии BSD, поскольку в процессе обучения мы будем сталкиваться с различиями в их реализации.