Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Акуленок_часть1.doc
Скачиваний:
41
Добавлен:
13.11.2019
Размер:
1.43 Mб
Скачать

2.1.5. Подсистема ввода/вывода

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

Ядро содержит драйверы устройств, которые управляют отдельными элементами аппаратных средств; остальная часть ядра отличается высокой степенью независимости от внешних устройств.

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

2.2. Командный процессор Shell

При интерактивной работе с системой пользователь постоянно сталкивается с необходимостью отдавать ей команды.

В UNIX эту работу выполняет программа, которая называется командным процессором. Командный процессор называют интерпретатором команд (что является не совсем неточным тнрмином, потому что круг задач командного процессора шире, чем интерпретация команд).

В большинстве операционных систем интерпретатор команд встроен в систему и является ее неотъемлемой частью. В ОС UNIX командный процессор – это независимая программа. Интерпретатор получил название «shell» (оболочка), возможно, потому, что защищает вас от лежащего ниже ядра (или ядро от вас).

Shell представляет собой интерактивную программу, которая позволяет вам связываться с операционной системой и которая выполняет функции интерпретатора командных строк. Shell отделен от операционной системы. Такое проектное решение предоставляет пользователю дополнительную гибкость с точки зрения выбора интерфейса, наилучшим образом отвечающего его потребностям. Назначение shell'а заключается в том, чтобы предоставить пользователю возможность ввести нужные ему команды, выполнить ряд функций и передать интерпретированную команду в операционную систему (ядро) для исполнения (рис. 2.4.).

0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Рис. 2.4. Функциональные возможности shell'a

Функциональные возможности shell'a можно охарактеризовать следующим образом:

  • shell осуществляет поиск указанной команды и выполняет ассоциированную с ней программу;

  • shell подставляет значения своих переменных. Он также выполняет подстановку результатов выполнения команд;

  • shell формирует имена файлов, используя символы генерации имен файлов;

  • shell выполняет перенаправление ввода/вывода и реализует конвейеры;

  • shell обеспечивает интерфейс интерпретирующего языка программирования, включающий в себя возможности проверки условий, реализации ветвления и циклов.

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

Интерпретатор shell представляется на экране дисплея с помощью специального знака–подсказки (приглашения системы к вводу команд) в виде символа процента – % или символа доллара – $, за которым следует курсор. Если вслед за этим знаком–подсказкой вы вводите команду, интерпретатор shell начинает связанный с данной командой процесс в системе UNIX. Для пользователей с именем root shell представлен в виде символа решетки – #.

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

Первый в мире UNIX командный интерпретатор в 1976 году написал Стив Баурн (Steve Bourne), когда он работал в Bell Laboratories в AT&T. По другим данным, Стив написал его в 1974 году. Через некоторое время в University of California Berkeley был написан C-shell (csh, произносится "си шелл"), а потом число разных командных процессоров стало быстро расти. Самые популярные из них сейчас - это Bourne again shell (bash), разработанный в рамках проекта GNU, и Korn shell (ksh) Дэвида Корна (David Korn).

С-shell был разработан студентом Университета в Беркли (University of California Berkeley) Биллом Джоем (Bill Joy), который по окончании Berkeley основал компанию Sun Microsystems. Еще Билл Джой написал самый известный в UNIX редактор vi и был одним из авторов первой версии BSD UNIX.

Для многих пользователей ОС UNIX начинается с командного процессора Баурна (известного как бурновский интерпретатор shell). Это один из старейших видов. Он присутствует в большинстве систем.

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

Программисты шутят: «Если вам не нравится командный процессор UNIX, напишите собственный».

В ОС Solaris принято использовать ksh, csh или bash.