
- •Понятие операционной системы. Типы операционных систем. Обобщенная структура операционной системы. Общая характеристика ос семейства unix.
- •Файловые системы современных ос. Интерфейс пользователя для работы с файловой системой.
- •Защита данных в операционных системах. Управление правами доступа к файлам.
- •Способы группирования команд в операционных системах. Командные файлы. Программные каналы, конвейеры команд.
- •5. Обзор возможностей командных процессоров (оболочек) операционных систем.
- •6. Принципы организации многозадачного режима в операционных системах.
- •1.1) Пакетный режим:
- •1.2) Режим разделения времени:
- •2.2) Режим виртуальных машин:
- •7. Коммуникационные средства операционных систем семейства unix
- •8. Генерация, конфигурирование, настройка операционных систем на потребности
- •9. Средства и способы обеспечения многопользовательского режима в операционных системах.
- •10. Понятие процесса. Управление процессами в операционной системе unix.
Способы группирования команд в операционных системах. Командные файлы. Программные каналы, конвейеры команд.
Группировка команд:
&& - выполнить вторую команду, если первая выполнится успешно
|| - не выполнять вторую, если первая выполнилась успешно.
() – запуск команды в отдельном shell
{} – логическая группировка команд
&- команды выполняются параллельно, первая в фоновом режиме, вторая - как обычно
`команда` - подстановка результата выполнения команды
k0||{k1 && k2; k3}: k0,k1, k2 и k3 – команды. При неудачном выполнении k0 будет выполнено выражение в {}. k2 будет выполнена только при успешном завершении k1; после любого из исходов обработки k2 (т.е. k2 будет выполнена, либо пропущена) будет выполнена k3.
{k1 >> f1; k2 > f2} &: В фоновом режиме будет выполняться последовательность команд k1(вывод перенаправлен в конец файла f1) и k2 (вывод перезапишет файл f2).
; - последовательное выполнение
Конвеер позволяет использовать вывод одной команды в качестве ввода другой. Конвеер по сути это программный канал для создания потока данных от команды к команде: команда_1 | команда_2 | команда_3 | ... | команда_n. Команды выполняются последовательно.
Программные каналы делятся на именованные и неименованные.
Неименованный канал является средством взаимодействия между связанными процессами - родительским и дочерним. Родительский процесс создает канал при помощи системного вызова: int pipe(int fd[2]), который возвращает два файловых дескриптора — fildes[0] для записи в канал и fildes[1] для чтения из канала. Теперь, если один процесс записывает данные в fildes[0], другой сможет получить эти данные из fildes[1]. Дочерний процесс наследует и разделяет все назначенные файловые дескрипторы родительского. То есть доступ к дескрипторам fildes канала может получить сам процесс, вызвавший pipe, и его дочерние процессы. Если нужен двунаправленный обмен данными между процессами, то родительский процесс создает два канала, один из которых используется для передачи данных в одну сторону, а другой - в другую.
Именованные каналы (FIFO) могут использоваться как средство взаимодействия между неродственными и удаленными процессами. Такой канал имеет внешнее имя, которое включается в пространство имен файловой системы. FIFO является отдельным типом файла в файловой системе UNIX ( ls –l покажет символ р в первой позиции). Для создания FIFO используется системный вызов int mknod(char *pathname, int mode, int dev); где pathname – указатель на строку, содержащую имя файла в файловой системе (имя FIFO), mode — флаги владения, прав доступа и т. д., dev — при создании FIFO игнорируется. После создания FIFO может быть открыт на запись и чтение, причем запись и чтение могут происходить в разных независимых процессах. При работе с именованным каналом используются файловые системные вызовы: int open(int *name, int oflag); int read(int pipe_fd, void *area, int cnt); int write(int pipe_fd, void *area, int cnt); int close(int pipe_fd); Именованный канал является постоянным объектом, он сохраняется после завершения создавшего его процесса и при необходимости должен быть уничтожен явно - при помощи системного вызова: int unlink(char *name).
Командные файлы (Unix – Shell procedure).
Shell- процедура – это обычный файл, содержащий команды системы UNIX, а также дополнительные команды, позволяющие программисту создавать ветвящиеся участки и циклы.
Процедура - аналог командного файла в MS-DOS, но с несравнимо более широкими возможностями. Здесь же отметим, что операторы могут быть использованы как в теле процедуры, так и выполнены независимо как обычные команды в диалоговом режиме.
Для выполнения shell- процедуры необходимо иметь право доступа к этому файлу на чтение и выполнение. Для обращения к shell- процедуре из командной строки необходимо ввести имя shell- процедуры и ряд параметров, если это необходимо.
$ <имя shell- процедуры><параметр1>< параметр2>
Каждому аргументу, передаваемому в shell- процедуру из командной строки, ставится в соответствие порядковый номер от 1 до 9 (в командном файле к аргументам можно обращаться как $1…$9). Если порядковый номер двузначный, то он должен быть заключен в фигурные скобки {}. Имени процедуры ставится в соответствие порядковый номер 0. Операторы оболочки (if, while, until, case, for) см. вопрос 5.
Подстановка переменной $a:
даже если она ни разу не использовалась считается по умолчанию, что все переменные есть, они имеют строковый тип и равны пустой строке по умолчанию (если переменной ничего не присваивалось, вместо неё подставится пустая строка)
$ab - переменная ab
${a}b - конкатенация переменной а и b