Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lec01.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
241.66 Кб
Скачать

Тема 1. Основы Unix

    1. Структура unix

Рассмотрим вкратце общее устройство UNIX как операционной среды.

Центром ОС является менеджер ресурсов и планировщик задач. Функции этих частей системы востребованы, пока есть хоть одна задача. В UNIX они составляют ядро системы (kernel). Ядро постоянно находится в памяти, обслуживая непрерывный поток запросов на использование универсальных ресурсов системы: памяти и времени. В ядро UNIX, кроме того, входит реализация сетевых протоколов. Ядро UNIX предоставляет программам пользователя унифицированный интерфейс к ресурсам компьютера (так называемые системные вызовы, system calls) и содержит всю непростую логику распределения ресурсов по задачам, которые в UNIX называются процессами.

На самом деле далеко не все, что работает в режиме ядра, обязано присутствовать в конкретной системе, запущенной на конкретном компьютере. Функции, отвечающие за работу с самыми разнообразными внешними устройствами (которые отличаются логикой работы), бессмысленно включать в ядро все сразу. Отдельно взятый компьютер не содержит и сотой части всех устройств, поддерживаемых системой. Более того, зачастую весьма трудно автоматически определить марку устройства, подключенного к системе; еще труднее, не имея обширнейшей базы данных по всем устройствам, определить, какому из известных устройств соответствует найденное системой неизвестное. А вот администратору системы достаточно для этого посмотреть маркировку на самой плате или почитать документацию. Так мы приходим к понятию драйвера устройства. Драйверы включаются в состав ядра, если соответствующие им устройства входят (или могут входить) в состав компьютера. Одни драйверы (скажем, шины PCI) есть в системе почти всегда, другие написаны специально для контроллера какого-нибудь экзотического устройства.

Разработчики стараются собрать ядро, содержащее драйверы всех самых популярных устройств, чтобы оно, не занимая слишком много памяти, могло управлять системой на подавляющем большинстве компьютеров. Такое ядро называется базовым (generic).

Если базового ядра все-таки недостаточно, в современных системах многие драйверы можно загружать динамически, из модулей ядра. Ядро, уже работающее в памяти, можно дополнить, загрузив такой модуль из файла специального формата. Типичный пример: для работы с диском ядру нужен драйвер дискового массива (RAID-контроллера), который вместе с программой загрузки и компоновки модулей на этом массиве и находится. Разные системы выходят из этой ситуации по-разному.

Прочие части UNIX запускаются уже как процессы в режиме пользователя. С ядром взаимодействуют функциональные подсистемы (службы), то есть наборы программных средств, выполняющих определенную функцию (например, система печати, система передачи почты и т. д.). Управляющий центр функциональной подсистемы - так называемый демон. Демон - это процесс, который запускается при старте UNIX для обслуживания запросов к функциональной подсистеме. Пользователю запускать его незачем, он работает всегда. Именно демон обменивается данными с ядром системы, часто он держит очередь пользовательских запросов, работает с сетью и т. д.

Обращаться к системным вызовам могут, конечно, не только демоны, но и вообще любые программы. В UNIX входит немало программ, при помощи которых можно решать разнообразные инструментальные (т. е. связанные с работой самой системы) задачи. Это так называемые системные утилиты. Они используются в первую очередь самой системой и системным администратором - для управления системой. Однако и пользователь, не обладающий правами администратора, вполне может задействовать системные утилиты, если они помогают ему в работе, а системе не мешают (например, создавать файловую систему на дискете, просматривать состояние системы или демонов и т. п.).

Слово "утилиты" (utilities) буквально означает "полезности". Утилиты - это программы, которые могут понадобиться при решении всевозможных задач. Если есть высокая вероятность, что некоторая программа может понадобиться более чем одному пользователю для решения более чем одной задачи, то ее стоит включить в систему. Таких пользовательских утилит в UNIX еще больше, чем системных. Множество пользовательских утилит занимается преобразованием текста. Немало утилит помогает при разработке решений: компиляторы, отладчики, редакторы диаграмм, трассировщики и т. д. Почти всеми пользовательскими утилитами пользуется система, потому что при проективном подходе вообще невозможно провести четкую границу между системным и пользовательским наполнением. К обеим категориям, например, относятся утилиты для работы с файлами и файловой системой или интерпретатор командной строки (shell). На shell написаны все системные сценарии, поскольку он представляет собой еще и удобный высокоуровневый язык программирования.

Понятно, что для всякой прикладной области одних утилит недостаточно. Необходимы средства программирования и вообще средства разработки программ.

Для того чтобы оперативно добавлять программный продукт в систему или удалять его оттуда, необходимо заранее договориться о размещении в файловой системе всех входящих в него файлов. Запомнив каждый файл с полным именем, мы получим архив, целиком определяющий расположение программного продукта в системе. Такой архив в UNIX называется пакетом. Мы можем устанавливать пакет в систему и удалять его, зная, что записываем и удаляем файлы, принадлежащие только ему. В пакете могут храниться не только программные продукты, но и вообще любые "кирпичики", из которых можно складывать систему: утилиты, драйверы, документация, шрифты и все остальное. Если при установке или удалении пакета нужно проделать какие-нибудь действия (например, зарегистрировать устанавливаемый шрифт), к нему прилагаются установочный сценарий и сценарий удаления.

Для диалога с пользователем в UNIX выбран интерфейс командной строки. О достоинствах и недостатках этого способа общения человека и машины будет сказано далее, пока же ограничимся только его описанием: человек вводит команду с клавиатуры, машина ее выполняет. Команды могут быть совсем короткими, могут содержать имя запускаемой утилиты и несколько коротких параметров, а могут быть даже небольшими программами. Команды большего размера неудобно вводить и исправлять прямо в командной строке, их стоит складывать в файл, называемый сценарием (script). Такой сценарий тоже считается программой, его можно вызывать по имени, передавать параметры и т. д. Все эти команды распознает и выполняет интерпретатор командной строки (shell, "оболочка"), в который встроены специальные возможности, помогающие очень быстро набирать командную строку и оперативно объединять и использовать результаты выполнения других программ.

Для обозначения точки входа в систему - места, откуда приходят команды, и куда следует выдавать результат их работы, используется понятие терминала. Терминал - это устройство, способное принимать и передавать текстовую информацию.

Способ доступа к файлам на носителе данных и принцип их именования (идентификации) принято называть файловой системой. Файловая система в UNIX - это не только способ хранения собственно файлов, но и вообще место хранения и отображения информации о системе. Манипулировать файлами с помощью соответствующих утилит чрезвычайно легко - и вручную, и автоматически, из командного сценария. Часто пользователь обменивается информацией с UNIX путем изменения или просмотра специальных файлов. Поэтому файловую систему можно считать частью интерфейса UNIX.

В роли задач в UNIX выступают процессы. Процесс - это программа, запущенная пользователем, которая находится в памяти и, как полагается задаче, потребляет ресурсы: выполняется, требует памяти, обменивается данными с системой, внешними устройствами и другими процессами. При запуске процесс получает уникальный идентификатор процесса (Process IDentifier, PID), по которому он становится доступен другим процессам и планировщику. Планировщик процессов в UNIX устроен сложнее, чем описано в лекции 4. Наше описание предельно упрощено, а полностью разобраться в планировании процессов поможет. Главное отличие планировщика UNIX заключается в том, что каждая задача из очереди работает в течение всего отведенного ей промежутка времени, только если ей есть чем заняться. Если задача к этому времени работать не может (например, ожидает завершения операции ввода/вывода, или сигнала, или освобождения какого-либо ресурса), она из начала очереди перемещается в конец очереди. Сверх того процессы в UNIX могут иметь разные приоритеты, сообразно которым идет планирование очередного запуска процесса. Например, полностью отработав свой промежуток времени, процесс может помещаться не в конец очереди.

Между собой процессы могут обмениваться данными не только стандартными пользовательскими средствами (посредством файлов, каналов или сокетов), но и с помощью более быстрых системных, именуемых средствами межпроцессного взаимодействия (Interprocess Communication, IPC). Процессы могут заказать у системы общую память, для индикации занятости ресурса использовать семафор и посылать друг другу сигналы и сообщения.

Принцип информационной открытости соблюдается в UNIX по максимуму. Все, что можно документировать, документируется. Документация ведется не только на средства (утилиты, системные и библиотечные вызовы), но и на структуру системных файлов, работу с устройствами и многое другое. Большинство программных продуктов для UNIX и основательная часть базовых дистрибутивов UNIX-подобных систем распространяется в исходных текстах. Это означает, что любому квалифицированному пользователю доступна полная информация о внутреннем устройстве инструмента, которым он пользуется, и любой может исправить или улучшить его по своему усмотрению.

Большинство демонов и утилит UNIX пользуется для настройки своей работы текстовыми файлами. Практически все демоны и приложения UNIX используют так называемые файлы настроек (или rc-файлы, от resource container). Это текстовые файлы, и, если количество содержащейся в них информации достаточно велико, они разбиты на секции и подсекции.

В UNIX существует пользователь, которому никакие действия по изменению системы не запрещены. Это так называемый суперпользователь или root. Как правило, правами суперпользователя наделяют человека настолько опытного, что он в состоянии нести ответственность за любое поведение вверенной ему системы

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]