
- •Операционные системы для программиста
- •Введение
- •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. Командные файлы и сценарии
- •Библиографический список
1.2. Системные соглашения для доступа к функциям ос
К настоящему времени в России относительно широко используются следующие типы операционных систем: Windows 9x, Windows NT, различные клоны семейства Unix. К первому типу относятся ОС Windows 95, Windows 98 и Windows Millenium. Последние модификации типа Windows NT называются Windows 2000, Windows XP и Windows Server 2003. Операционная система Unix в основном представлена в России клоном BSD (Berkley Software Distribution) и различными модификациями ОС Linux (Red Hat, Debian, Slackware, Mandrake и т.д.). Привлекательным достоинством ОС Linux является ее бесплатность для пользователей. (Строго говоря, с точки зрения профессионалов, Linux не является разновидностью Unix, но их различия касаются только внутреннего построения этих ОС, с точки же внешнего взаимодействия с программами в текущем курсе изучения их можно считать одинаковыми.)
Особое место до недавнего времени занимала OS/2. С одной стороны, она оказалась жертвой конкурентной борьбы с фирмой Microsoft, с другой – это единственная ОС, являющаяся одновременно и современной, и простой для профессионального изучения. Практическое неудобство OS/2, проявившееся в последние годы, заключается в прекращении поддержки ее производителями видеокарт, в результате чего оказывается невозможным использование режимов высокого разрешения и частоты на современных видеосистемах с этой ОС. Операционная система OS/2 по своей функциональной структуре занимала место между простой MS DOS и современными Windows, причем по простоте ближе к первой, а по возможностям – ко вторым. Поэтому изучение OS/2 есть простейший и кратчайший путь, чтобы разобраться в функционировании операционных систем. Многие технические решения, использованные в OS/2, многократно проще, чем примененные в Windows, причем при тех же функциональных возможностях.
Изучение лишь одного из известных технических решений приводит к малограмотности инженера. Поэтому изучение операционных систем в данном пособии будет базироваться на рассмотрении основных решений для двух операционных систем: Unix и Windows. В отдельных случаях будут упоминаться соответствующие средства для OS/2. Заметим, что в OS/2, как правило, имеют место простые и прозрачные для начального знакомства решения, но практическое значение этой системы приближается к нулю. В Windows мы сталкиваемся с самыми громоздкими и часто очень не безопасными в использовании средствами, но практическое использование ее чрезвычайно широко среди неквалифицированных масс. В Unix знакомимся с классическими решениями, относительным недостатком которых является только некоторый архаизм, неизбежно заложенный в начале 70-х годов. (Unix – самая древняя из современных ОС, но не теряющая свое совершенство для профессионалов.)
Программный интерфейс пользователя для современных ОС описывается исключительно на языке С. Причинами этого являются как заложенные в основных ОС мобильность (Unix, Windows), так и удобство С в качестве языка системного программирования. Заметим, что более ранние ОС имели API, описываемый исключительно на ассемблере, что крайне мешало переносу таких ОС на иные типы процессоров и повышало трудоемкость разработки самих ОС. Тем не менее, критические части современных ОС целесообразно записывать на ассемблере. (Заметим, что даже в громоздкой системе программирования MS Visual C++ содержится более двух сотен килобайтов ассемблерных текстов для подпрограмм, критически влияющих на производительность приложений.) Поэтому в данном пособии все изложение будет основываться на языке С. (Заметим, что описываемое на языке С всегда может быть описано и использовано с помощью языка ассемблера. Такой вариант применяться не будет, так как не предполагается знакомство читателей с программированием на ассемблере.)
Во всех изучаемых здесь ОС обращение к системным функциям (системным подпрограммам), т.е. программным функциям операционной системы выполняется путем вызова этих подпрограмм по имени. (Иной способ, основанный на механизме прерываний, требует использования ассемблера для его записи в исходных программах.) Таким образом, для использования этих функций необходимо найти описание прототипа системной функции, задать в соответствии с ним аргументы и записать синтаксически верный вызов. При внимательном чтении описания функции можно даже достичь семантически правильного задания системного вызова.