
- •Операционные системы для программиста
- •Введение
- •1. Основные понятия
- •1.1. Понятие операционной системы
- •1.2. Системные соглашения для доступа к функциям ос
- •1.3. Особенности разработки программ в базовых ос
- •1.4. Командный интерфейс пользователя в ос
- •1.5. Информация об ошибках системной функции
- •2. Программный доступ к файловой системе
- •2.1. Понятия дескрипторов, идентификаторов и хэндлов
- •2.2. Ввод и вывод в стандартные файлы.
- •2.3. Базовые средства использования файлов
- •2.4. Многопользовательская блокировка файлов
- •2.5. Установка произвольной позиции в файле
- •3. Принципы построения ос
- •3.1. Модульная структура построения ос
- •3.2. Использование прерываний в ос
- •3.3. Управление системными ресурсами
- •3.4 Строение ядра операционной системы
- •3.5. Структура операционной системы типа Windows nt
- •4. Многофункциональный консольный вывод
- •4.1. Функции управления курсором
- •4.2. Многократный вывод символов и атрибутов
- •4.3. Вывод в произвольную позицию экрана
- •4.4. Ввод данных, размещенных предварительно на экране
- •5. Системные функции ввода для консольных устройств
- •5.1. Системные функции ввода текстовых строк
- •5.2. Событийно-управляемый ввод
- •5.3. Системные функции ввода с клавиатуры
- •5.4. Опрос ввода с клавиатуры в программе
- •5.5. Системные функции мыши для текстового режима
- •6. Файловые системы
- •6.1. Структуры файловых систем для пользователя
- •6.2. Методы распределения внешней памяти
- •6.3. Принципы построения файловых систем типа fat
- •6.4. Современные модификации файловой системы fat
- •6.5. Особенности построения файловой системы hpfs
- •6.6. Принципы построения файловой системы ntfs
- •6.7. Особенности строения файловых систем для Unix
- •6.8. Программный опрос файловой системы
- •7. Обеспечение множественности процессов
- •7.1. Основные понятия теории вычислительных процессов
- •7.2. Программное порождение процессов
- •7.3. Уничтожение процессов
- •7.4. Ожидание завершения процессов
- •8. Многопоточное функционирование ос
- •8.1. Понятие нити и связь Хе с процессом
- •8.2. Создание нитей (thread) в программе
- •8.3. Уничтожение нитей
- •8.4. Приостановка и повторный запуск нити
- •8.5. Ожидание завершения нити
- •9. Средства взаимодействия программных единиц
- •9.1. Абстрактные критические секции
- •9.2. Абстрактные семафоры
- •9.3. Семафоры взаимоисключения
- •9.4. Семафоры событий
- •9.5. Средства группового ожидания
- •9.6. Программные критические секции
- •9.7. Программные семафоры с внутренним счетчиком
- •10. Управление памятью
- •10.1. Виртуальная память
- •10.2. ЏодкРчка страниц для реализациШ виртуальной памяти
- •10.3. Системные функции распределения памяти
- •10.4. Совместное использование памяти
- •10.5. Отображение файлов в оперативную память
- •10.6. Динамически распределяемая память
- •11. Средства коммуникации процессов
- •11.1. Неименованные коммуникационные каналы Unix
- •11.2. Переназначение хэндлов для доступа к каналу
- •11.3. Неименованные каналы в Windows
- •11.4. Именованные каналы в Windows nt
- •11.5. Именованные каналы в Unix
- •12. Взаимодействие пользователя с ос
- •12.1. Интерфейсы операционных систем
- •12.2. Командные и операционные оболочки (shells)
- •12.3. Основные команды базовых операционных систем
- •12.4. Групповое выполнение и фоновый запуск команд
- •12.5. Стандартный ввод-вывод и конвейеры командной строки
- •12.6. Командные файлы и сценарии
- •Библиографический список
12.4. Групповое выполнение и фоновый запуск команд
Практическая деятельность администратора операционной системы требует запуска более чем одной команды одновременно. Такая потребность связана как с многопрограммными возможностями современных ОС, так и периодической потребностью задавать одновременно выполнение более чем одной команды.
С учетом краткости большинства команд ОС для практика-пользователя оказывается соблазнительным задавать в одной строке более чем одной команды. Дело в том, что в отличие от обычного программирования, где программа для компилятора может иметь большой размер, но просматривать ее удобно текстовым редактором, команды операционной системы в простейшем управлении выполняются немедленно после ввода, поэтому в поле экрана желательно иметь как можно больше команд.
Командные интерпретаторы Unix позволяют комбинировать в одной строке более одной команды, разделяя их символом "точка с запятой" (символ ';'). Если же какая-то команда для Unix не помещается в стандартной длине строки экрана, ее можно продолжить на следующей строке, завершив предыдущую символом \, непосредственно за которым должна быть нажата клавиша "перевод строки" (символ '\n' в языке Си).
В ОС Windows NT и OS/2 для группирования в одной строке более чем одной команды служит символ &. Он используется совершенно так же как разделитель ';' в Unix. Например, задание копирования файла fff из текущего каталога в подкаталог sss и немедленное после этого переименование исходного файла в файл qqq запишется для этих ОС в виде одной группы команд (пакета команд):
copy fff sss\fff & ren fff qqq
а в Unix составной командой
cp fff sss/fff ; mv fff qqq
При подобном группировании нескольких команд в один пакет могут возникать проблемы из-за невыполнения каких-то составляющих команд этого пакета. Поэтому интерфейс командной строки предоставляет средства приказов выполнения следующей команды только при условии выполнения предыдущей или, наоборот, приказывается выполнение следующей команды при невыполнении предыдущей. Для этих целей предназначены соответственно обозначения && и ||. Так, копирование исходного файла fff из текущего каталога в подкаталог sss и удаление исходного файла при удачном копировании запишется в виде
copy fff sss/fff && del fff
а выдача командой ECHO предупреждения после неудачной попытки копирования может быть задана составной командой
copy fff sss/fff || echo NOT COPY
Другой принципиальной возможностью, представляемой современными ОС, является запуск программы как параллельного процесса относительно последующих указаний с консоли. Для этих целей в ОС Windows NT и OS/2 предназначена команда START. В качестве параметра этой команде задается имя программы или команды операционной системы. Действие команды start в Windows NT и OS/2 заключается в создании отдельной консоли (текстового окна), в котором запускается указываемая команда или программа.
В Unix аналогичная функция командного режима задается менее выразительно: для запуска команды или программы параллельно с основной работой консоли служит символ &, записываемый после указания в командной строке этой команды или программы. Происходящее при этом называют запуском в фоновом режиме. Это название отражает тот факт, что запущенная таким образом программа не использует явно консоль, а выполняется как бы "за кадром", причем такое выполнение производится с более низким приоритетом, чем работа консоли и непосредственно запускаемых с нее команд. Запуск в фоновом режиме сопровождается выдачей на консоль номера задания и PID идентификатора нового запущенного процесса, созданного для фонового задания. Первое из этих значений выдается в следующей строке в квадратных скобках, а значение PID за ним как обычное число. В дальнейшем пользователь с консоли может частично управлять таким фоновым процессом, используя для его обозначения либо номер задания, либо идентификатор процесса.
Управление процессом, запущенным с консоли Unix, представляют средства уничтожения этого процесса, его приостановки и перевода в приоритетный режим. Уничтожение запущенного ранее процесса осуществляется с помощью команды kill. В качестве единственного аргумента этой команды используется номер задания или идентификатор процесса, причем значение идентификатора задается непосредственно числом, а номеру задания должен предшествовать специальный символ %.
Для приостановки запущенного с консоли задания служит не просто команда, а управляющая комбинация клавиш, задаваемая нажатием клавиши z при нажатой клавиши Ctrl (нажатие, обозначаемое обычно как [Ctrl+z]. После приостановки задания оно сопровождается на консоли информацией вида
[номер] + Stopped имя команды с параметрами
где номер дает идентификатор приостановленного процесса. После приостановки задание можно запустить далее в обычном приоритетном режиме, вводя команду fg с аргументом, задающим приостановленный процесс (номер идентификатора или номер задания с предшествующим ему символом %) или запустить в фоновом режиме командой bg.
Получение полной информации о запущенных в системе процессах возможно с помощью специальной команды. В Unix – это команда ps, а в Windows NT и OS/2 – команда pstat.