Операционная система UNIX

Автор работы: Пользователь скрыл имя, 19 Января 2014 в 18:12, реферат

Краткое описание

Термин Unix и не вполне эквивалентный ему UNIX используется в разных значениях. Начнем со второго из терминов, как более простого. В двух словах, UNIX (именно в такой форме) - зарегистрированная торговая марка, первоначально принадлежавшая корпорации AT&T, сменившая за свою долгую жизнь много хозяев и ныне являющаяся собственностью организации под названием Open Group. Право на использование имени UNIX достигается путем своего рода "проверки на вшивость" - прохождения тестов соответствия спецификациям некоей эталонной ОС (Single Unix Standard - что в данном случае можно перевести как Единственный Стандарт на Unix).

Содержание

Что такое Unix?
Где взять бесплатный Unix?

Основная часть. (Описание Unix).
1. Основные понятия Unix.
2. Файловая система.
2.1. Типы файлов.
3. Командный интерпретатор.
4. Ядро ОС UNIX.
4.1. Общая организация традиционного ядра ОС UNIX;
4.2. Основные функции ядра;
4.3. Принципы взаимодействия с ядром;
4.4. Принципы обработки прерываний.
5. Управление вводом/выводом.
5. 1. Принципы системной буферизации ввода/вывода;
5. 2. Системные вызовы для управления вводом/выводом.
6. Интерфейсы и входные точки драйверов.
6. 1. Блочные драйверы;
6. 2. Символьные драйверы;
6. 3. Потоковые драйверы.
7. Команды и утилиты.
7. 1. Организация команды в ОС UNIX;
7. 2. Перенаправление ввода/вывода и организация конвейера;
7. 3. Встроенные, библиотечные и пользовательские команды;
7. 4. Программирование на командном языке.
8. Средства графического интерфейса пользователей.
8.1. Идентификаторы пользователя и группы пользователей;
8.2. Защита файлов;
8.3. Перспективные ОС, поддерживающие среду ОС UNIX.

Заключение.
Основные отличия Unix от других OS.
Области применения Unix.

Прикрепленные файлы: 1 файл

доклад Крайновой К.В. СГС-411.docx

— 86.89 Кб (Скачать документ)

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

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

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

 

5. 2 Системные вызовы для управления  вводом/выводом

Для доступа (т.е.для получения возможности последующего выполнения операций ввода/вывода) к файлу любого вида (включая специальные файлы) пользовательский процесс должен выполнить предварительное подключение к файлу с помощью одного из системных вызовов open, creat, dup или pipe.

Последовательность действий системного вызова open (pathname, mode) следующая:

анализируется непротиворечивость входных параметров (главным образом, относящихся к флагам режима доступа  к файлу);

выделяется или находится  пространство для описателя файла  в системной области данных процесса(u-области);

в общесистемной области  выделяется или находится существующее пространство для размещения системного описателя файла (структуры file);

производится поиск в  архиве файловой системы объекта  с именем "pathname" и образуется или обнаруживается описатель файла уровня файловой системы (vnode в терминах UNIX V System 4);

выполняется связывание vnode с ранее образованной структурой file.

Системные вызовыopen и creat (почти) функционально эквивалентны. Любой существующий файл можно открыть с помощью системного вызова creat, и любой новый файл можно создать с помощью системного вызова open. Однако, применительно к системному вызову creatважно подчеркнуть, что в случае своего естественного применения (для создания файла) этот системный вызов создает новый элемент соответствующего каталога (в соответствии с заданным значением pathname), а также создает и соответствующим образом инициализирует новый i-узел.

Наконец,системный вызов dup (duplicate - скопировать) приводит к образованию нового дескриптора уже открытого файла. Этот специфический для ОС UNIX системный вызов служит исключительно для целей перенаправления ввода/вывода). Его выполнение состоит в том, что в u-области системного пространства пользовательского процесса образуется новый описатель открытого файла, содержащий вновь образованный дескриптор файла (целое число), но ссылающийся на уже существующую общесистемную структуру file и содержащий те же самые признаки и флаги, которые соответствуют открытому файлу-образцу.

Другими важными системными вызовами являются системные вызовы read и write. Системный вызовread выполняется следующим образом:

в общесистемной таблице  файлов находится дескриптор указанного файла, и определяется, законно ли обращение от данного процесса к  данному файлу в указанном  режиме;

на некоторое (короткое) время устанавливается синхронизационная блокировка на vnode данного файла (содержимое описателя не должно изменяться в критические моменты операции чтения);

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

Операция записи выполняется  аналогичным образом, но меняет содержимое буфера буферного пула.

Системный вызов close приводит к тому, что драйвер обрывает связь с соответствующим пользовательским процессом и (в случае последнего по времени закрытия устройства) устанавливает общесистемный флаг "драйвер свободен".

Наконец, для специальных  файлов поддерживается еще один "специальный" системный вызов ioctl. Это единственный системный вызов, который обеспечивается для специальных файлов и не обеспечивается для остальных разновидностей файлов. Фактически, системный вызов ioctl позволяет произвольным образом расширить интерфейс любого драйвера. Параметры ioctl включают код операции и указатель на некоторую область памяти пользовательского процесса. Всю интерпретацию кода операции и соответствующих специфических параметров проводит драйвер.

Естественно, что поскольку  драйверы главным образом предназначены  для управления внешними устройствами, программный код драйвера должен содержать соответствующие средства для обработки прерываний от устройства. Вызов индивидуальной программы  обработки прерываний в драйвере происходит из ядра операционной системы. Подобным же образом в драйвере может быть объявлен вход "timeout", к которому обращается ядро при истечении ранее заказанного драйвером времени(такой временной контроль является необходимым при управлении не слишком интеллектуальными устройствами).

Общая схема интерфейсной организации драйверов показана на рисунке 3.5. Как показывает этот рисунок, с точки зрения интерфейсов и  общесистемного управления различаются  два вида драйверов - символьные и  блочные. С точки зрения внутренней организации выделяется еще один вид драйверов - потоковые (stream) драйверы. Однако по своему внешнему интерфейсу потоковые драйверы не отличаются от символьных.

 

6. Интерфейсы и  входные точки драйверов

6. 1 Блочные драйверы

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

В случае, если копия требуемого блока не находится в буферном пуле или если по какой-либо причине  требуется заменить содержимое некоторого обновленного буфера, ядро ОСUNIX обращается к процедуре strategy соответствующего блочного драйвера. Strategy обеспечивает стандартный интерфейс между ядром и драйвером. С использованием библиотечных подпрограмм, предназначенных для написания драйверов, процедура strategy может организовывать очереди обменов с устройством, например, с целью оптимизации движения магнитных головок на диске. Все обмены, выполняемые блочным драйвером, выполняются с буферной памятью. Перепись нужной информации в память соответствующего пользовательского процесса производится программами ядра, заведующими управлением буферами

 

6. 2 Символьные драйверы

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

Символьные драйверы не используют системную буферизацию. Они напрямую копируют данные из памяти пользовательского  процесса при выполнении операций записи или в память пользовательского  процесса при выполнении операций чтения, используя собственные буфера.

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

 

6. 3 Потоковые драйверы

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

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

 

7. Команды и  утилиты

При интерактивной работе в среде ОС UNIX пользуются разнообразными утилитами или внешними командами  языка shell. Многие из этих утилит являются не менее сложными программами, чем сам командный интерпретатор (и, между прочим, командный интерпретатор языка shell сам является одной из утилит, которую можно вызвать из командной строки).

 

7. 1 Организация команды в ОС UNIX

Для создания новой команды  нужно просто следовать правилам программирования на языке Си. Каждая правильно оформленная Си-программа начинает свое выполнение с функцииmain. Эта "полусистемная" функция обладает стандартным интерфейсом, являющимся основой организации команд, которые можно вызывать в среде shell. Внешние команды выполняются интерпретатором shell с помощью связки системных вызовов fork и одного из вариантов exec. В число параметров системного вызова exec входит набор текстовых строк. Этот набор текстовых строк передается на вход функции main запускаемой программы.

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

Кроме того, чтобы соответствовать  стилю shell, такая программа не должна сама переопределять файлы, соответствующие стандартному вводу, стандартному выводу и стандартному выводу ошибок. Тогда команде может обычным образом перенаправляться ввод/вывод, и она может включаться в конвейеры.

 

 

 

7. 2 Перенаправление ввода/вывода  и организация конвейера

Как видно из последнего предложения предыдущего пункта, для обеспечения возможностей перенаправления  ввода/вывода и организации конвейера  при программировании команд не требуется  делать ничего специального. Достаточно просто не трогать три начальные дескриптора файлов и правильно работать с этими файлами, а именно, производить вывод в файл с дескриптором stdout, вводить данные из файла stdin и выводить сообщения об ошибках в файл stderror.

 

7. 3 Встроенные, библиотечные и пользовательские команды

Встроенные команды представляют собой часть программного кода командного интерпретатора. Они выполняются как подпрограммы интерпретатора, и их невозможно заменить или переопределить. Синтаксис и семантика встроенных команд определены в соответствующем командном языке.

Библиотечные команды  составляют часть системного программного обеспечения. Это набор выполняемых  программ (утилит), поставляемых вместе с операционной системой. Большинство этих программ (таких как vi, emacs, grep, find, make и т.д.)исключительно полезно на практике, но их рассмотрение находится за пределами этого курса (по поводу редакторов vi и emacs и утилиты поддержки целостности программных файлов make существуют отдельные толстые книги).

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

 

7. 4 Программирование на командном  языке

Любой из упоминавшихся вариантов языка shell в принципе можно использовать как язык программирования. Среди пользователей ОС UNIX существует много людей, которые пишут на shell вполне серьезные программы. Для программирования лучше использовать языки программирования (Си, Си++, Паскаль и т.д.), а не командные языки.

Информация о работе Операционная система UNIX