Interprocess Communication
| Категория реферата: Рефераты по информатике, программированию
| Теги реферата: курсовые работы, рефераты скачать бесплатно
| Добавил(а) на сайт: Ponikarov.
Предыдущая страница реферата | 3 4 5 6 7 8 9 10 11 12 13 | Следующая страница реферата
Лекция №21
Тема, которую мы с вами начнем рассматривать будет короткой и простой, и мы обозначим основные болевые точки. Детали и подробности вы должны изучить сами.
Командный язык ОС UNIX CSHELL (CSH)
Для многих пользователей программного обеспечения основным и единственным свойством, на которое обращает внимание пользователь, является не внутреннее устройство системы, а тот интерфейс, который предоставляется системой пользователю. Почти каждая система имеет средства интерактивного взаимодействия с пользователем, т.е. средства, которые позволяют в той или иной форме вводить запросы на выполнение действий. С этой точки зрения UNIX поддерживает возможность работы с произвольным количеством интерпретаторов команд. В файле /etc/passwd/ одно из полей, относящихся к данному пользователю, содержит полное имя интерпретатора команд, который должен быть запущен при входе пользователя в систему. В общем случае, при входе пользователя в систему может быть запущена абсолютно любая программа.
Традиционными интерпретаторами команд в системе UNIX являются SH, CSH и BASH. Давайте рассмотрим на концептуальном уровне что такое СSH (в принципе все интерпретаторы команд похожи друг на друга и являются некоторым расширением SH).
Интерпретатор команд определяет структуру вводимой команды. Команда
(для CSH) - это последовательность символов, заканчивающаяся некоторым
кодом, и которая состоит из слов. Слова - это последовательности символов, не содержащих разделители. Разделители - это набор фиксированных символов, в частности привычным для нас разделителем является пробел. Кроме пробела
разделителями служат запятые, знаки < >, и т.д. Каждый из этих разделителей
имеет свою интерпретацию. В частности, символ "|" означает создание
конвейера. Например команда ls|more позволит избежать быстрый вывод текста
на экран и за экран, и позволит пролистать его.
Система UNIX поддерживает набор специальных символов, которые называются метасимволами. Метасимволы обычно встречаются в словах команды и интерпретируются по заранее определенным правилам. Метасимволов существует много, в частности среди них есть знакомые нам * и ?. Команда rm * удалит все файлы не начинающиеся с точки в текущем каталоге. ? означает, что на месте этого символа может быть один любой знак. Метасимволы могут быть парными. Например внутри квадратных скобок указывается альтернативная группа, предположим, [abc] означает, что вместо этой квадратной скобки может быть один из перечисленных в ней символов (любую цифру можно задать так [0-9]).
CSH позволяет объединять команды. Для этого также используются метасимволы. Если внутри круглых скобок перечислены некоторые команды, то запустится еще один интерпретатор, который выполнит эту последовательность команд. Например команда (cd /etc; ls -la|grep pas) сменит каталог и осуществит поиск в этом каталоге строки pas.
В чем разнится между тем, выполнилась ли эта команда в интерпретаторе с которым мы работаем, или если был запущен еще один интерпретатор. Разница в том что, в этом случае не изменится текущий каталог, несмотря на то, что выполнилась команда смены каталога.
Имеется возможность объединять команды с использованием {}. Все команды, перечисленные в фигурных скобках будут запущены слева направо, но при этом на стандартный вывод будет положена объединенная последовательность стандартных выводов всех команд. {more t.b; more t.c}>tt.b - в файле tt.b окажется стандартный вывод одной команды, а затем стандартный вывод другой, эта команда без фигурных скобок поместила бы туда стандартный вывод только второй команды.
Интерпретатор команд имеет набор встроенных команд. Все команды подразделяются на два типа:
1. Команды, которые реализованы в виде отдельных файлов. Это те команды, которые можно модифицировать или добавлять новые.
2. Команды, которые встроены в интерпретатор команд, т.е. те команды, которые выполняет сам интерпретатор. К таким командам относится команда kill, по которой осуществляется передача соответствующего сигнала от имени интерпретатора. Есть также полезная команда alias, которая используется для переименования существующих команд.
Интерпретатор команд CSH позволяет осуществлять работу с предысторией.
Он может организовать буферизацию N последних команд и организует доступ к
списку последних команд. В частности, можно выполнять и редактировать
командные строки из списка предыстории и снова их выполнять. CSH имеет
возможность именовать строки из списка предыстории. Ссылка на
соответствующую строку осуществляется с помощью команды, которая
начинается с символа ! , за которым следует некоторая суффиксная часть .
Ссылка !! выполняет последнюю команду. Ссылка вида !!N , где N -
некоторое число, выполняет строку из с писка предыстории с номером N. Если
N отрицательно, то номер строки отсчитывается с конца, к примеру, !!-1
означает выполнение последней команды. Кроме того, могут быть некоторые
контекстные ссылки вида !.
Переменные CSH
Интерпретатор команд предоставляет возможность программирования на уровне CSH. Для этого предусмотрена декларация переменных и возможность присвоения им значения, а также набор высокоуровневых операторов, которые по своей семантике похожи на операторы языка Си (отсюда и название интерпретатора CSH). CSH фактически есть высокоуровневый язык с операторами языка Си. Оперируя с переменными CSH можно составлять программы, которые выполняют некоторые действия.
Кроме всего прочего, имеются предопределенные имена, которые отвечают за настройку системы, в частности, о том, сколько строк предыстории сохраняются. Сохранение происходит в двух ипостасях: первое - это оперативное сохранение, есть параметр (переменная history), который определяет, сколько строк должно быть сохранено в течении последнего сеанса работы. Второе - есть возможность сохранения предыстории между сеансами, т.е. при очередном входе систему уже будет определен некоторый список предыстории (размер списка - в переменной savehistory).
Кроме переменных, с помощью которых осуществляется настройка, и имена которых определены, есть еще один класс переменных CSH - это т.н. внутренние переменные, которые также являются зарезервированными. Это переменные, которые имеют предопределенные имена и определяют свое значение через внутренние функции интерпретатора команд. В частности, есть переменная path, это есть текстовый массив, в котором находятся текстовые строки, содержащие полные имена некоторых каталогов. В соответствии с содержимым переменной path, CSH осуществляет поиск файлов, которые являются командами, введенными пользователями. Мы с вами говорили, что в UNIX (кроме встроенных команд) специальных команд нет, командой является любой исполняемый файл. Если пользователь ввел некоторое имя NAME, поиск исполняемого файла с именем NAME будет осуществляться, во-первых, в текущем каталоге, а во вторых, в каталогах, указанных в переменной path, в соответствующем порядке.
Переменная home - содержит имя домашнего каталога.
Переменная ignoreeof - это переменная, установка которой блокирует завершение сеанса работы по вводу символа ^D (Ctrl-D).
В системе можно варьировать вид приглашения (к вводу) с помощью переменной prompt, причем это приглашение может быть достаточно интеллектуальным. В нем, например, может присутствовать дата и т.п.
Мы с вами рассмотрели переменную path, она может определять много
директорий. Представьте себе, что я ввожу некоторую командную строку NAME и
в текущем каталоге соответствующего файла нет. Это означает, что будет
осуществлен поиск файла с именем NAME по всем каталогам, записанным в
переменной path (со всеми вытекающими последствиями). Это может быть долго.
А если еще учесть, что вы работаете в многопользовательской системе, и
каждый постоянно вводит какие-то команды, то накладные расходы получаются
сумасшедшими. Система UNIX разумная система, и одним из правил, которых
придерживались ее разработчики было то, что если где-то что-то можно
оптимизировать, то надо это сделать. При входе пользователя в систему на
основании значения переменной path формируется hash-таблица имен
исполняемых файлов, находящихся во всех перечисленных каталогах
(естественно, учитывается порядок каталогов). Поиск команды (если она не
найдена в текущем каталоге) будет заключаться в просмотре этой быстрой hash-
таблицы. За счет этого достигается ускорение доступа к команде, хотя при
входе в систему возможна значительная задержка, которая вызвана
формированием этой hash-таблицы.
Предположим, пользователь вошел в систему, а потом администратор добавил команду, которая этому пользователю необходима. Но за счет того, что hash-таблица уже сформировалась, доступ к ней (без набора полного имени) закрыт, хотя она есть в каталоге, указанном в path. В этом случае можно переформировать hash-таблицу с помощью команды rehash.
Кроме всех этих переменных, CSH имеет еще одну категорию переменных, которые называются переменными окружения. Если вы вспомните, то при запуске процесса функции main передаются несколько параметров, среди которых есть массив значений переменных окружения. В процесс можно передать те параметры, которые характеризуют сеанс работы пользователя в данный момент времени. В частности можно передать имя домашнего каталога, имя текущего каталога, имя терминала, с которого вызван данный процесс и т.д.
CSH имеет возможность работы с переменными окружения (можно их просматривать, устанавливать и т.п.).
Рекомендуем скачать другие рефераты по теме: история государства и права шпаргалки, класс.
Категории:
Предыдущая страница реферата | 3 4 5 6 7 8 9 10 11 12 13 | Следующая страница реферата