- •Операционные системы для программиста
- •Введение
- •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. Командные файлы и сценарии
- •Библиографический список
Федеральное агентство по образованию
Государственное образовательное учреждение
высшего профессионального образования
«Омский государственный технический университет»
А.Н. ФЛОРЕНСОВ
Операционные системы для программиста
Учебное пособие
ОМСК 2005
УДК 004.4(075)
ББК 32.973. - 018.2я73
Ф 73
Рецензенты: В. Т. Гиль, канд. техн. наук;
М. Ф. Шакиров, канд. техн. наук
Флоренсов А. Н.
Ф 73 Операционные системы для программиста: Учеб. пособие. Омск: Изд-во ОмГТУ, 2005. -240 с.
Рассматривается программирование, зависящее от особенностей конкретных широко используемых операционных систем. Изучаются средства создания и управления программными процессами и нитями внутри них, а также разнообразные средства обеспечения взаимодействия. Ориентировано на понимание роли системных объектов и средств доступа к ним. Изучение ведется параллельно в операционных системах MS Windows и Linux. Содержит множество небольших примеров программ.
Предназначено для подготовки студентов и бакалавров направления «Информатика и вычислительная техника» по дисциплине «Операционные системы».
Печатается по решению редакционно-издательского совета ОмГТУ.
УДК 004.4(075)
БК 32.973. - 018.2я73
Ф 73
Редактор В.А. Маркалева
ИД №06039 от 12.10.2001 г.
Сводный темплан 2005 г.
Подписано в печать 19.09.05. Формат 6084 1/16. Отпечатано на дупликаторе.
Усл. печ. л. 15,0 Уч.-изд. л. 15,0. Тираж 200 экз. Заказ
Издательство ОмГТУ. 644050, г. Омск, пр-т Мира, 11
Типография ОмГТУ
Ó Флоренсов А.Н., 2005
Ó Омский государственный
технический университет, 2005
Введение
С учетом широчайшего использования компьютеров в современной жизни операционные системы (ОС) целесообразно рассматривать с нескольких различных сторон. Во-первых, со стороны пользователя, не умеющего программировать. Таких пользователей – подавляющее большинство, и наиболее употребительные ОС рассчитаны именно на них. Управление компьютером для этих пользователей в значительной степени подобно управлению аппаратурой телевизора с помощью дистанционного пульта. В обоих случаях присутствует множество возможностей, как основных, так и более тонких. Управление компьютером на уровне пользователей можно назвать уровнем домашних хозяек, хотя за ними традиционно закрепилось название “чайников”. Для них выпускается соответствующая литература, иногда использующая указанную терминологию. Пользовательский уровень управления компьютером основан на двух типах средств: действиях с помощью манипулятора мыши и на задании действий в пунктах диалоговых окон. Последние действия обычно выполняются также с помощью мыши или, что реже, набором кратких текстов в полях окон диалога. Для огромного функционального многообразия современной ОС набор таких действий чрезвычайно велик, и практическое освоение их оказывается достаточно трудоемкой задачей. Заметим, что практики, владеющие значительной частью этого набора, пользуются всеобщим уважением среди непрофессиональных пользователей компьютеров.
Другая важная сторона, с которой рассматриваются операционные системы, –это внутреннее строение и разработка ОС. Детальное изучение внутреннего строения нужно в основном только разработчикам таких систем. В предшествующий период (в 70-х и 80-х годах XX века) этой стороне уделялось большое внимание. Оно было частично обусловлено сложностью практического использования ОС предыдущих поколений, когда даже от прикладного программиста требовались не очень элементарные представления о внутреннем функционировании ОС. Последнее было связано с чрезвычайно высокой стоимостью компьютерных систем и вызывало необходимость всеми средствами повысить эффективность использования компьютеров (час времени работы на компьютере стоил порядка 100$.) Практически все книги по операционным системам, написанные в указанные годы, рассматривали операционные системы именно с этой стороны.
К настоящему времени ОС настолько усложнились внутри, что изучение их строения является поистине титанической задачей. Отдельные попытки “укрупненно” описать их строение являются чисто декоративными и практически бесполезными как для поверхностных пользователей, так и для большинства достаточно грамотных программистов. Такое описание вынужденно концентрируется на одном выбранном типе ОС. Поэтому на данной традиционной стороне описания ОС останавливаться не будем, оставим его заинтересованным для самостоятельного овладения, т.к. по объему оно многократно превышает возможности изучаемого курса.
Наконец, третьей стороной изучения ОС является рассмотрение ее со стороны программных функций, вызываемых как подпрограммы. Причем имеются в виду вызовы подпрограмм, доступные людям, которые не являются разработчиками этой ОС. Совокупность таких программных функций принято называть программным интерфейсом пользователя или API (Application Program Interface). Программный интерфейс пользователя является границей между внутренней частью ОС и программами, использующими средства ОС. Он достаточно подробно описывается в руководствах программисту по операционной системе. Именно этой стороне изучения операционных систем и будет в основном посвящено учебное пособие. При этом для понимания действий отдельных функций API будем частично рассматривать некоторые особенности реализации функций внутри ОС. Такая необходимость появляется, когда функции API используют некоторые внутрисистемные структуры данных, без описания строения и взаимосвязи которых действия функций понять невозможно.
Для содержательного освоения предмета без значительного увеличения числа учебных и демонстрационных задач используется параллельное рассмотрение нескольких ОС. Изложение материала ведется на основе двух типов наиболее распространенных в настоящее время ОС: семействе Windows (Windows 2000, Windows NT, Windows 95 и Windows 98) и Unix. Кроме того, в отдельных примерах будут упоминаться технические решения, использованные в операционной системе OS/2. Это позволяет продемонстрировать, не только то, как следует применять специфические средства конкретной ОС (последнее важнее на этапе совершенствования в программировании), но и то, что требуется отобразить в конструкциях программы для решения простой конкретной задачи, использующего мощные средства многозадачной ОС. В конечном счете такой подход нацелен на формирование понятийной базы для полноценного использования операционных систем при разработке программ.