- •Системное программное обеспечение Учебное пособие
- •Введение
- •1.Основные понятия
- •1.1.Функции и ресурсы ос
- •1.2.Структура программного обеспечения
- •1.3.Режимы функционирования компьютера
- •1.4.Классификация ос
- •1.5.Состав ос
- •2.Управление памятью
- •2.1. Основная память
- •2.2.Регистровая память
- •2.3.Кэш память
- •2.4.Организация основной памяти
- •2.4.1.Режимы работы процессоров Intel
- •2.4.2.Преобразование логического адреса в физический в реальном режиме
- •2.4.3.Адресация памяти в защищенном режиме
- •2.5.Управление памятью
- •2.5.1.Модели памяти
- •2.5.2.Динамическое распределение памяти
- •2.5.3.Динамическое распределение памяти в windows nt
- •2.5.4.Функции ос по управлению основной памятью
- •2.6.Виртуальная память
- •2.6.1.Преобразование виртуального адреса в реальный
- •2.6.2.Страничная организация
- •2.6.3.Сегментная организация
- •2.6.4.Странично-сегментная организация
- •2.6.5.Сплошная модель памяти flat
- •2.6.6.Функции для доступа к виртуальной памяти
- •2.6.6.1Освобождение виртуальной памяти
- •2.6.6.2Фиксирование страниц основной памяти
- •2.6.7.Стратегии управления виртуальной памятью
- •2.6.7.1Определение оптимального размера страниц
- •2.6.7.2Поведение программ при подкачке страниц
- •3.Процессы и задачи. Мультипроцессорные системы
- •3.1.Управление процессами
- •3.1.1.Блок управления процессом (pcb)
- •3.1.2.Управление асинхронными параллельными процессами
- •3.2.Мультизадачность
- •3.2.1.Виды мультизадачности:
- •3.2.2.Процессы и задачи
- •3.2.3.Распределение времени между задачами
- •3.2.4.Процессовая мультизадачность
- •3.2.5.Потоковая мультизадачность
- •3.2.6. Синхронизация задач
- •3.2.6.1Ожидание завершения задачи или процесса
- •3.2.6.2Синхронизация с помощью событий
- •3.2.7.Взаимоисключение
- •3.2.7.1Критические секции в программном интерфейсе windows
- •3.2.7.2Блокирующие функции
- •3.2.8.Семафоры
- •3.3.Тупики
- •3.3.1.Условия возникновения тупика
- •3.3.2.Предотвращение тупиков
- •3.3.3. Обход тупиков
- •3.3.4.Обнаружение тупиков
- •3.3.5.Восстановление после тупика
- •3.4.Средства обеспечения мультизадачности в защищенном режиме работы процессора Intel
- •3.4.1.Переключение задач
- •3.5.Обработка прерываний
- •3.5.1.Обработка прерываний в защищенном режиме
- •3.5.2.Обработка аппаратных прерываний
- •3.6.Управление потоками заданий. Планирование заданий и загрузка процессоров
- •3.6.1.Цели планирования
- •3.6.2.Критерии планирования
- •3.6.3.Дисциплины планирования
- •3.6.4.Многоуровневые очереди с обратными связями
- •3.7.Мультипроцессорные архитектуры. Планирование загрузки ресурсов
- •3.7.1.Параллелизм
- •3.7.2.Цели мультипроцессорных систем
- •3.7.3.Автоматическое распараллеливание
- •3.7.3.1Расщепление цикла
- •3.7.3.2Редукция высоты дерева
- •3.7.4.Мультипроцессорные операционные системы
- •3.7.5.Организация мультипроцессорных операционных систем
- •3.7.6.Производительность мультипроцессорных систем
- •3.7.7.Экономическая эффективность мультипроцессорных систем
- •3.7.8.Восстановление после ошибок
- •3.7.9.Перспективы мультипроцессорных систем
- •4.Управление внешней памятью и файловые системы
- •4.1.Структура дискового тома. Таблица разделов
- •4.2.Управление данными
- •4.2.1.Организация данных
- •4.2.2.Методы доступа
- •4.3. Файловые системы
- •4.3.1.Файловая система fat
- •4.3.2.Файловая система fat32
- •4.3.3.Функции windows api для работы с директориями
- •4.3.4.Файловая система windows 95
- •4.3.5.Файловая система нpfs (os/2)
- •4.3.5.1 Структура тома
- •4.3.5.2Файлы и Fnodes
- •4.3.5.3Каталоги
- •4.3.5.4Расширенные атрибуты
- •4.3.5.5Инсталлируемые файловые системы
- •4.3.5.6Проблемы эффективности
- •4.3.5.7Отказоустойчивость
- •4.3.6.Файловая система ntfs (Windows nt)
- •4.3.6.1Главная файловая таблица
- •4.3.6.2Атрибуты файла ntfs
- •4.3.6.3Длинные и короткие имена файлов
- •4.3.6.4Потоки данных
- •4.3.6.5Согласованность с posix
- •4.4.Асинхронные операции с файлами
- •4.5.Файлы, отображаемые на память
- •4.5.1.Создание отображения файла
- •4.5.2.Выполнение отображения на память
- •5.Средства ввода информации
- •5.1.Аппаратные и программные средства ввода информации с клавиатуры
- •5.1.1.Анализ и преобразование скэн-кода
- •5.1.2.Буфер клавиатуры
- •5.1.3.Схема работы буфера
- •5.1.4.Ввод информации с клавиатуры в Windows
- •5.1.4.1Поддержка горячих клавиш (нot-key)
- •5.1.4.2Языки и локализация
- •5.2.Управление манипулятором "мышь"
- •5.2.1.Аппаратные средства манипулятора
- •5.2.2.Программная поддержка "мыши" (на примере ms dos)
- •5.2.3.Основные функции интерфейса программы с манипулятором "мышь" (int 33н)
- •5.2.4.Чтение позиции курсора и состояния кнопок "мыши"
- •5.2.5.Управление мышью в приложениях Windows
- •5.2.5.1Обработка двойного щелчка (Double-Click Messages)
- •5.2.5.2Сообщения неклиентской области
- •5.2.5.3Активизация окна
- •6.Сетевые операционные системы
- •Литература
- •Оглавление
- •Учебное издание
- •394026 Воронеж, Московский просп., 14
3.2.6. Синхронизация задач
Синхронизация заключается в том, что некоторые задачи должны приостанавливать свое выполнение до тех пор, пока не наступит событие, связанное с другими задачами. Использование значений глобальных переменных в качестве признаков наступления событий не может считаться хорошим решением, т.к. проверяющая в цикле значение некоторой переменной задача полностью использует свои кванты времени, что отрицательно влияет на производительность системы. Приемлемым решением можно считать сообщение планировщику о том, что задача находится в состоянии ожидания и перевод задачи в состояние приостановки. При наступлении ожидаемого события задача возобновляется и использует свои кванты времени.
3.2.6.1Ожидание завершения задачи или процесса
Каждому процессу или задаче в системе соответствует идентификатор. Если задача выполняется, то идентификатор находится в так называемом неотмеченном состоянии (nonsigned). Как только задача или процесс завершится, он переходит в отмеченное состояние (signed). Для того, чтобы отследить это изменение состояния иден- тификатора используют функцию:
DWORD WaitForSingleObject (НANDLE НObject,
DWORD dwTimeOut);
Первым параметром передается идентификатор объекта, вторым - время таймаута, в течении которого следует ждать изменения состояния идентификатора. Если передать dwTimeOut = INFINITE, то время ожидания будет бессрочным. В качестве идентификатора можно передавать идентификаторы задач, процессов, событий, файлов и других объектов.
Функция возвращает
WAIT_FAILED при ошибке;
WAIT_OBJECT_0 при достижении отмеченного состояния;
WAIT_TIMEOUT при истечении таймаута;
WAIT_ABANDONED при принудительном завершении ожидания.
Ожидание завершения нескольких задач или процессов
DWORD WaitForMuitipleObject (DWORD cObject,
НANDLE*1pНObject,
BOOL fWaitAll,
DWORD dwTimeOut);
Первый параметр - это количество элементов массива идентификаторов. Второй параметр содержит указатель на массив идентификаторов. Третий параметр - тип ожидания. Если параметр установлен в значение True, то ожидание завершается при завершении всех задач, т.е. когда все идентификаторы переведены в состояние signed. Если установлено значение False, то функция завершается при переключении хотя бы одного идентификатора в отмеченное состояние. Коды завершения этой функции практически те же, за исключением нормального и принудительного завершения. При нормальном завершении функция возвращает результат в диапазоне от WAIT_OBJECT_0 до (WAIT_OBJECT_0+cObject-1), которое в зависимости от значения параметра fWaitAll означает, что либо все идентификаторы перешли в отмеченное состояние, либо за вычетом WAIT_OBJECT_0 равно индексу идентификатора отмеченного объекта. Аналогично код принудительного завершения возвращается в диапазоне от WAIT_ABANDONED_0 до (WAIT_ABANDONED_0+cObject-1).
3.2.6.2Синхронизация с помощью событий
Событие - это объект, который характеризуется одним свойством - фактом своего наступления. Событие может наступить, а может и не наступить. Наступление события характеризуется переводом его идентификатора в отмеченное состояние. Любое событие, которое существует в системе, должно быть создано. Создание события выполняет функция:
НANDLE CreateEvent (LPSECURITY_ATTRIBUTES lpEventAttr,
BOOL bManualReset,
BOOL bInitialState,
LPCTSTR lpName);
Первый параметр содержит указатель на структуру с атрибутами системы защиты. Параметр bManualReset - флаг ручного сброса события. Значение True сообщает о том, что сброс может быть выполнен только с помощью функции ResetEvent, а значение False обеспечивает автоматический сброс события сразу после того, как задача завершит ожидание этого события; Третий параметр - флаг начального состояния: True - событие отмечено, False - не отмечено; Последний параметр может передавать указатель на символьную строку, содержащую имя события. Имя события задается, когда предполагается синхронизировать несколько самостоятельных процессов. Если предполагается использовать синхронизацию в рамках одного процесса, то lpName указывается NULL.
Событие создается только в одном процессе. В этой же задаче событие автоматически открывается. Для всех других процессов, которые будут использовать это событие, необходимо открыть идентификатор события:
НANDLE OpenEvent (DWORD fdwAccess,
BOOL bInНerit,
LPCTSTR lpName);
Первыми передаются флаги доступа, возможные значения которых EVENT_ALL_ACCESS - все флаги; EVENT_MODIFY_STATE - позволяет переводить идентификатор в отмеченное или неотмеченное состояние; SYNCНRONIZE- идентификатор можно использовать в файлах, ожидающих событий.
Второй параметр - флаг наследования: True - идентификатор может наследоваться потомком, False - идентификатор не может наследоваться потомком.
Третий параметр - символьная строка с именем события.
Установка события (перевод в отмеченное состояние):
BOOL SetEvent (HANDLE НEvent);
Сброс события в неотмеченное состояние
BOOL ResetEvent (HANDLE НEvent);
Функция пульсирующей установки с последующим сбросом:
BOOL PulseEvent (HANDLE НEvent);
Если эта функция вызвана для события, работающего в ручном режиме, то все задачи, ожидающие этого события, завершат ожидание и продолжат работу. Событие при этом сбрасывается в неотмеченное состояние. В автоматическом режиме функция возвращает управление, как только хотя бы одна задача, ожидающая это событие, перейдет в активное состояние.