
- •Операционные системы для программиста
- •Введение
- •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. Взаимодействие пользователя с ос
12.1. Интерфейсы операционных систем
Одной из трех важнейших функций ОС является ее интерфейс с пользователем. Именно благодаря ему оказывается возможным запускать программы, управлять их выполнением и обеспечивать сопровождение файлов. В эти же средства взаимодействия с операционной системой входят множества других средств и функций.
К настоящему времени сложились две принципиально отличные системы интерфейса (в переводе – взаимодействия с пользователем). Первая система называется командным интерфейсом или интерфейсом командной строки. Она позволяет пользователю управлять запуском и выполнением программ, задавая из текстовой консоли управляющие тексты, т.е. команды. Такая система сложилась в начале 70-х годов XX века и наиболее полное развитие получила в рамках операционной системы Unix. Заметим, что управление с помощью специальных текстов очень близко по особенностям к обычному программированию на языках высокого уровня, и поэтому командным интерфейсом легко овладевают именно программисты, для непрофессиональных пользователей этот подход может оказаться столь же тяжелым, как и обучение программированию.
Второй из упомянутых систем интерфейса является графическая. Она сложилась в разработках PARC (Palo Alto Research Center фирмы Xerox) в конце 70-х годов XX века, но получила широкое применение вначале в операционных системах фирмы Apple (MacOS) середины 80-х годов, а затем в операционных оболочках, а позже в операционных системах фирмы Microsoft. Широким массам непрофессиональных пользователей она хорошо известна по графическим оболочкам MS Windows 3.1, Windows 9x, Windows NT и более поздним их модификациям.
Управление компьютером с помощью графического интерфейса так относится к интерфейсу командной строки, как просмотр комиксов (рассказов в картинках) относится к чтению художественных произведений. Несомненно, что оба первых варианта проще для невнимательного или малограмотного человека, а также для человека, не привыкшего утруждать себя. В то же время число пользователей и комиксов, и графического интерфейса на порядок, если не на порядки, превышает пользователей строгих текстов.
Управление с помощью графического интерфейса психологически многократно проще и требует существенно меньше волевых усилий, внимания и запомненной информации. Практически в графическом интерфейсе необходимая информация почти всегда присутствует непосредственно на экране, где предлагается сделать один из возможных выборов. Но при этом сложная настройка требует множества диалоговых окон, и во многих случаях общая картина настройки оказывается мало обозримой. Практически этот подход способен решать только небольшое число типовых задач настройки, но не обладает ни глубиной, ни универсальностью. В идейном плане графический интерфейс очень близок к так полюбившемуся американцам языку программирования Кобол (Cobol), который предназначен для решения экономических задач и позволяет записывать алгоритмы не с помощью специализированных и достаточно абстрактных операторов, а с помощью почти обычных фраз английского языка. В частности, арифметические операции в Коболе записываются не математическими символами, а английскими словами add, subtract, multiply. Непрофессионала такой стиль очень утешает, но профессионала раздражает отсутствие компактности и четкости в информационных управляющих конструкциях.
Несмотря на широкое применение графического интерфейса в ОС типа Windows, внутреннее общение между компонентами самой операционной системы неизбежно имеет характер управляющих текстов, в частности, машинных команд и текстовых вызовов системных функций. Принципиальная сложность задания внутри программы аналога воздействия на графический интерфейс вынужденно оставляет интерфейс командной строки на некотором заднем плане, не видном непрофессиональным пользователям. Поэтому практически все внимание в данной главе будет сосредоточено на интерфейсе командной строки, а возможности графического интерфейса рассматривать не будем, отсылая для его изучения к множеству руководств по поверхностному управлению конкретными операционными системами.