Раздел 2. Семейство операционных систем UNIX, WINDOWS
Тема 2.1. Основные компоненты ОС UNIX. Каталоги и файлы. (стр. 221-230 [4])
Цель: рассмотреть понятие и основные компоненты ОС UNIX .
Операционная система UNIХ — одна из самых популярных в мире операционных систем благодаря тому, что ее сопровождает и распространяет большое число компаний. Была разработана Кеном Томпсоном — сотрудником фирмы Веll Laboratories концерна АТ&Т в 1969 году как многозадачная система для миникомпьютеров и мэйнфреймов. UNIХ вобрала в себя целый ряд новых разработок в области операционных систем. В принципе, она создавалась как операционная система для исследователей. При разработке UNIХ была поставлена задача создать систему, которая могла бы удовлетворять непрерывно изменяющимся требованиям сотрудников, занимающихся разнообразными исследованиями.
В 1970 году Деннис Ритчи вместе с Кеном Томпсоном переписали код системы с машинно-зависимого языка ассемблера (на котором тогда писались все операционные системы) на язык высокого уровня — Си. Это позволило им написать всего одну версию операционной системы 1Ж1Х, которую потом можно было компилировать Си-компиляторами на различных машинах. Операционная система UNIХ стала, по сути дела, мобильной, то есть способной работать на различных типах машин практически без перепрограммирования. Кроме того, она позволяет иметь несколько видов Shell, т. е. интерфейсов взаимодействия между ядром и пользователем или интерпретаторов.
В 1974 году UNIХ была передана университетам «для образовательных целей», а несколько лет спустя нашла коммерческое применение. С тех пор она выросла в одну из наиболее распространенных операционных систем. Сейчас существуют версии UNIХ для многих систем, начиная от РС (персонального компьютера) до суперкомпьютеров, таких, как Сrау У-МР.
Для проведения сложных экспериментальных исследований, связанных с большим количеством сложных вычислений над большим объемом данных, требуются значительные системные ресурсы. В этом случае многие UNIХ системы позволяют организовать кластер, т. е. многомашинный вычислительный комплекс, где все ресурсы компьютеров (дисковое пространство, память, ресурсы процессора) являются разделяемыми и доступными для любого пользователя в соответствии с его правами. В такой системе существует возможность постоянного наращивания мощности кластера, путем подсоединения дополнительных компьютеров, а работа в ней при этом остается для пользователя абсолютно «прозрачной», как если бы он работал на одном компьютере с огромными ресурсами.
Основные компоненты ОС UNIX:
соrе — ядро системы;
kernel — оболочка ядра системы;
development system — средства разработки программ;
manuals — экранные руководства пользователя и программиста;
VP/ix - эмулятор MS-Dos;
UUCP — средства передачи данных по каналам связи;
STREAMS — механизм сетевых протоколов;
ТСР/IР — сетевой протокол;
NFS — сетевая файловая система;
X Windows— средства сетевых графических интерфейсов пользователя (GUI);
Looking Clast — командная оболочка на базе GUI.
Ядро управляет основными ресурсами (процессор, оперативная память) и периферийными устройствами обмена и хранения данных (магнитные диски, магнитные ленты, принтеры, терминалы, линии связи и т. д.). Одной из функций ядра ОС UNIХ является программная поддержка файловой системы (ФС). Командный интерпретатор Shell обслуживает терминал пользователя и транслирует команды в запрос к ядру ОС.
Основные понятия, связанные с работой пользователя в ОС UNIX.
Начало и конец сеанса работ. Каждый пользователь системы имеет:
Пользователи могут быть объединены в группы (например, во время работы над совместными проектами) для разделения общих ресурсов, тогда еще есть имя группы пользователей.
Один пользователь, называемый superuser, является администратором системы (его имя root). В частности, он «заводит» (регистрирует) всех прочих пользователей.
Можно сменить свой пароль в любое время:


где (подсказка, prompt служит приглашением системы к вводу команды. В конкретной системе форма приглашения может быть изменена, т. е. знак «» может быть заменен на другой символ или строку символов.

Тема 2.2. Связь пользователь-пользователь.
Цель: рассмотреть коммуникации в ос UNIX и команды write, mail и др.
Система UNIX предполагает возможность коллективной работы и кооперации пользователей. Это требует развитых средств связи пользователей между собой.
В системе имеются следующие возможности коммуникации:
команда write (писать) для немедленной посылки сообщения другому пользователю;
команда mail (почта), реализующая электронную почту.
Посылка сообщений командой write. Командой write посылается сообщение указанному пользователю в момент исполнения этой команды. Это означает, что адресат должен быть в этот момент в системе (on line). Немногим нравится, когда сообщение приходит в случайный момент, в особенности — во время набора собственного текста. Поэтому вы должны быть уверены в необходимости такого немедленного взаимодействия.
Типичный пример:

Сообщение заканчивается вводом знака конца файла trl+O.
Адресат увидит у себя на экране:

Если вы намерены ждать ответа и вести диалог, можно не вводить знак конца файла до конца диалога.
Пример:

На стороне абонента на экране будет:


Чтобы узнать, работает ли абонент в системе в данный момент, можно воспользоваться командой who.
Пример:

Электронная почта (mail). Электронная почта — это средство позволяющее пользователям посылать друг другу сообщения которые накапливаются в почтовых ящиках, реализованных в системе.
При входе пользователя в систему он извещается о наличии почты, например:

В отличие от команды write, в режиме mail о приходе почты пользователь извещается только после окончания текущей работы.
Поступит сообщение:
mail

Подсказка (?) означает, что система mail ждет указания о том, что делать с почтой: печатать, сохранить, уничтожить или выйти из команды mail.
Введя знак вопроса, вы получите меню возможных действии (подкоманды):

Для посылки почты необходимо ввести команду mail с параметром (имя пользователя) и текст письма, заканчивая его знаком конца файла (trl+O), например:

Тема 2.3. Файловые системы.
Цель: рассмотреть структуру файловой системы и основные команды по ее созданию.
Файловая система имеет иерархическую структуру каталогов и файлов, включая корневой каталог. Файловая система располагается на устройстве, которое, как правило, является магнитным диском того или иного типа. Если диск достаточно велик, он может быть разбит на несколько логических дисков, тогда на каждом логическом диске может быть размещена отдельная файловая система.
Каждая файловая система, прежде чем стать доступной, должна быть смонтирована. Количество файлов в файловой системе ограничено (65536 для UNIХ версии 7).
Структура файловой системы. Каждая файловая система имеет четыре основные части:
загрузочный блок — это самый первый блок диска (блок 0), зарезервированный для системной загрузочной программы;
суперблок — это первый блок собственно файловой системы (блок 1), он содержит основные данные файловой системы и ее размещении на диске, в том числе о списках свободных узлов и блоков;
узлы — это последовательность блоков вслед за суперблоком. Каждый узел содержит ссылки на блоки. Имеется ровно один узел для каждого каталога или файла в файловой системе;
блоки – оставшееся пространство диска занимают блоки, которые содержат либо действительные данные каталогов и файлов (блоки данных), либо ссылки на блоки (косвенные блоки).
Суперблок содержит следующие данные:
размер дискового пространства, доступного файловой системе (в блоках);
число блоков, зарегистрированных для i-узлов;
имя файловой системы;
имя тома;
время последнего изменения;
время последнего копирования (backup);
ссылку на список свободных блоков;
ссылку на список свободных i-узлов.
Структура файловой системы представлена на рисунке 3.7.

Создание и монтаж: файловой системы. Команда mkfs создает новую файловую систему. Она расположена в каталоге /etc и имеет два параметра:
/еtс/mkfs
Первый параметр является именем специального файла и указывает устройство, на котором создается файловая система. Второй параметр — размер пространства файловой системы в блоках, он используется для определения по некоторым правилам числа блоков после того, как размещены i-узлы.
Пример создания файловой системы на флоппи-диске:
/еtс/mkfs /dev/flo 2000
isize = 230
Ответное сообщение указывает число блоков, выделенное для размещения i-узлов. Далее, чтобы сделать файловую систему известной операционной системе, надо ее смонтировать командой mount.
Эта команда подключает корневой каталог монтируемой файловой системы в один из каталогов корневой файловой системы. Команда Расположена в каталоге /еtс и имеет два параметра:
/еtс/mount
Первый параметр является именем файла для монтируем логического устройства, содержащего подключаемую файловую систему. Второй — имя уже существующего каталога, под которым монтируется файловая система.
Пример: монтажа вновь созданной файловой системы на гибком диске под каталогом, созданным командой mkdir в корне корневой файловой системы:
cd/
mkdir floppy 0
/еtс/mount/dev/f10/flорру0
Чтобы выяснить, какие файловые системы смонтированы в данный момент, нужно подавать команду mount без параметров:
mount
/ dev/ f10 on / floрру0.
Ответом является сообщение об этих системах (в данном случае — одной).
Оно формируется на основе данных о монтаже файловых систем, хранимых в файле:
/ еtс/ mnttab/
Следует заботиться о том, чтобы права доступа корневого каталога монтируемой файловой системы и каталога, под которым производится монтаж, были одинаковыми во избежание ошибок операционной системы.
Тема 2.4. Ядро ОС UNIX.
Цель: дать понятие ядра, структуры ядра и функций ядра.
Ядро ОС UNIX. Как и в любой другой многопользовательской операционной системе, обеспечивающей защиту пользователей друг от друга и защиту системных данных от любого непривилегированного пользователя, в ОС UNIX имеется защищенное ядро, которое управляет ресурсами компьютера и предоставляет пользователям базовый набор услуг.
Общая организация традиционного ядра ОС UNIX. Одно из основных достижений ОС 1ЛЧ1Х состоит в том, что система обладает свойством высокой мобильности. Смысл этого качества состоит в том, что вся операционная система, включая ее ядро, сравнительно просто переносится на различные аппаратные платформы. Все часть системы, не считая ядра, являются полностью машинно-независимыми. Эти компоненты аккуратно написаны на языке Си, и для переноса на новую платформу (по крайней мере, в классе 32-разоядных компьютеров) требуется только перекомпиляция исходных текстов в коды целевого компьютера.
Конечно, наибольшие проблемы связаны с ядром системы, которое полностью скрывает специфику используемого компьютера, но само зависит от этой специфики. В результате продуманного разделения машинно-зависимых и машинно-независимых компонентов ядра (видимо, с точки зрения разработчиков операционных систем, в этом состоит наивысшее достижение разработчиков традиционного ядра ОС УМ1Х) удалось добиться того, что основная часть ядра не зависит от архитектурных особенностей целевой платформы, написана полностью на языке Си и для переноса на новую платформу нуждается только в перекомпиляции.
Однако сравнительно небольшая часть ядра является машинно-зависимой и написана на смеси языка Си и языка ассемблера целевого процессора. При переносе системы на новую платформу требуется переписывание этой части ядра с использованием языка ассемблера и учетом специфических черт целевой аппаратуры.
Машинно-зависимые части ядра хорошо изолированы от основной машинно-независимой части, и при хорошем понимании назначения каждого машинно-зависимого компонента переписывание машинно-зависимой части является в основном технической задачей (хотя и требует высокой программистской квалификации).
Машинно-зависимая часть традиционного ядра ОС UNIХ
включает следующие компоненты:
раскрутки и инициализации системы на низком уровне (пока это зависит от особенностей аппаратуры);
первичной обработки внутренних и внешних прерываний;
управления памятью (в той части, которая относится к особенностям аппаратной поддержки виртуальной памяти);
переключения контекста процессов между режимами пользователя и ядра;
связанные с особенностями целевой платформы части драйверов устройств.
Основные функции. К основным функциям ядра ОС UNIХ принято относить следующие:
инициализации системы — функция запуска и раскрутки. Ядро системы обеспечивает средство раскрутки, которое обеспечивает загрузку полного ядра в память компьютера и запускает ядро;
управления процессами и нитями — функция создания, завершения и отслеживания существующих процессов и нитей («процессов», выполняемых на обшей виртуальной памяти) Поскольку ОС UNIХ является мультипроцессной операционной системой, ядро обеспечивает разделение между запущенными процессами времени процессора (или процессоров в мультипроцессорных системах) и другими ресурсами компьютера для создания внешнего ощущения того, что процессы реально выполняются в параллель;
управления памятью — функция отображения практически неограниченной виртуальной памяти процессов в физическую оперативную память компьютера, которая имеет ограниченные размеры. Соответствующий компонент ядра обеспечивает разделяемое использование одних и тех же областей оперативной памяти несколькими процессами с использованием внешней памяти;
управления файлами — функция, реализующая абстракцию файловой системы, — иерархии каталогов и файлов. Файловые системы ОС UNIХ поддерживают несколько типов файлов. Некоторые файлы могут содержать данные в формате АSCII, другие будут соответствовать внешним устройствам.
В файловой системе хранятся объектные файлы, выполняемые файлы и т. д. Файлы обычно хранятся на устройствах внешней памяти; доступ к ним обеспечивается средствами ядра. В мире UNIХ существует несколько типов организации файловых систем. Современные варианты ОС UNIХ:
одновременно поддерживают большинство типов файловых систем;
коммуникации и обеспечения возможности обмена данными между процессами, выполняющимися внутри одного компьютера, между процессами, выполняющимися в разных узлах локальной или глобальной сети передачи данных, а также между процессами и драйверами внешних устройств;
программного интерфейса — функция, обеспечивающая доступ к возможностям ядра со стороны пользовательских процессов на основе механизма системных вызовов, оформленных в виде библиотеки функций.
Название не изменяет смысл, который состоит в том, что для обращения к функциям ядра ОС используются «специальные команды» процессора, при выполнении которых возникает особого рода внутреннее прерывание процессора, переводящее его в режим ядра (в большинстве современных ОС этот вид прерываний называется (тар — ловушка). При обработке таких прерываний (дешифрации) ядро ОС распознает, что на самом деле прерывание является запросом к ядру со стороны пользовательской программы на выполнение определенных действий, выбирает параметры обращения и обрабатывает его, после чего выполняет «возврат из прерывания», возобновляя нормальное выполнение пользовательской программы.
Для пользователя библиотека системных вызовов представляет собой обычную библиотеку заранее реализованных функций системы программирования языка Си. При программировании на языке Си использование любой функции из библиотеки системных вызовов ничем не отличается от использования любой собственной или библиотечной Си-функции. Однако внутри любой функции конкретной библиотеки системных вызовов содержится код, являющийся, вообще говоря, специфичным для данной аппаратной платформы.
Принципы обработки прерываний. Конечна, применяемый в операционных системах механизм обработки внутренних и внешних прерываний в основном зависит от того, какая аппаратная поддержка обработки прерываний обеспечивается конкретной аппаратной платформой.
Дело операционной системы — разместить в соответствующих ячейках оперативной памяти программный код, обеспечивающий начальную обработку прерывания и инициирующий полную обработку.
В основном ОС UNIХ придерживается общего подхода. В векторе прерывания, соответствующем внешнему прерыванию, т. е. прерыванию от некоторого внешнего устройства, содержатся команды, устанавливающие уровень выполнения процессора (уровень выполнения определяет, на какие внешние прерывания процессор должен реагировать незамедлительно) и осуществляющие переход на программу полной обработки прерывания в соответствующем драйвере устройства. Для внутреннего прерывания (например, прерывания по инициативе программы пользователя при отсутствии в основной памяти нужной страницы виртуальной памяти, при возникновении исключительной ситуации в программе пользователя и т. д.) или прерывания от таймера в векторе прерывания содержится переход на соответствующую программу ядра ОС UNIХ.