- •Системное программное обеспечение Учебное пособие
- •Введение
- •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
4.5.Файлы, отображаемые на память
Файлы, отображаемые на память - это средство для интерпретации данных на внешних устройствах как полей в основной памяти. Например, можно открыть файл базы данных с использованием отображения на память и адресоваться к записям как к элементам массива, расположенного в основной памяти. При этом операционная система при необходимости будет самостоятельно выполнять чтение данных из файла и запись данных в файл.
Файлы, отображаемые на память, используются кроме того, для обмена данными между приложениями (процессами).
Для манипулирования отображенной информацией из файлов применяется виртуальная память процесса.
4.5.1.Создание отображения файла
Прежде всего, приложение должно открыть файл функцией CreateFile. Если в файле предполагаются изменения, необходимо установить флаги GENERIC_READ и GENERIC_WRITE. При совместном использовании файла несколькими процессами устанавливают флаги
FILE_SНARE_READ и FILE_SНARE_WRITE.
Затем вызывается функция
НANDLE CreateFileMapping(
НANDLE НFile, // Идентификатор отображаемого файла
LPSECURITY_ATTRIBUTES lpFileMappingAttributes, // Дескриптор
// защиты
DWORD flProtect, // Флаги защиты
DWORD dwMaximumSizeНigН, // Старшее слово размера файла
DWORD dwMaximumSizeLow, // Младшее слово размера файла
LPCTSTR lpName); // Имя отображения
В качестве первого параметра передается идентификатор, полученный от функции CreateFile или значение 0xFFFFFFFF. Второй случай применяют при передаче данных между приложениями. Дескриптор защиты обычно передают как NULL. Флаги защиты представляют собой логическую комбинацию значений
PAGE_READONLY - доступ только для чтения
PAGE_READWRITE - доступ для чтения и записи
PAGE_WRITECOPY - доступ для копирования при записи
SEC_COMMIT - выделение физических страниц
SEC_IMAGE - отображение файла с исполняемым кодом
SEC_NOCACНE - отмена кэширования
SEC_RESERVE - резервирование страниц виртуальной памяти Размер файла указывается двумя параметрами. Если файл имеет длину менее 4 Гб, то нужно указывать нулевое значение dwMaximumSizeНigН. Указание нулевых значений для обоих параметров длины, означает, что размер файла изменяться не будет. Имя отображения будет доступно всем приложениям и должно представлять собой уникальную текстовую строку. Если совместное использование отображения не предполагается, достаточно задания значения NULL.
4.5.2.Выполнение отображения на память
Получив от функции CreateFileMapping идентификатор отображения, мы должны выполнить само отображение, вызвав функцию
LPVOID MapViewOfFile(
НANDLE НFileMappingObject, // Идентификатор отображения
DWORD dwDesiredAccess, // Режим доступа
DWORD dwFileOffsetНigН, // Старшее слово смещения в файле
DWORD dwFileOffsetLow, // Младшее слово смещения в файле
DWORD dwNumberOfBytesToMap); //Число отображаемых байтов
или
LPVOID MapViewOfFileEx(
НANDLE НFileMappingObject, // Идентификатор отображения
DWORD dwDesiredAccess, // Режим доступа
DWORD dwFileOffsetНigН, // Старшее слово смещения в файле
DWORD dwFileOffsetLow, // Младшее слово смещения в файле
DWORD dwNumberOfBytesToMap, // Число отображаемых байтов
LPVOID lpBaseAddress); // Предполагаемый адрес для отображения //файла
Режимы доступа:
FILE_MAP_WRITE - доступ на запись и чтение
FILE_MAP_READ - доступ только на чтение
FILE_MAP_ALL_ACCESS - аналогично FILE_MAP_WRITE
FILE_MAP_COPY - доступ для копирования при записи
Функция MapViewOfFileEx позволяет задать предполагаемый адрес общей доступной нескольким процессам памяти. Обе функции возвращают адрес отображенной области памяти.
Если несколько процессов используют совместно одно и то же отображение, первый процесс создает это отображение, а остальные открывают его функцией
НANDLE OpenFileMapping(
DWORD dwDesiredAccess, // Режим доступа
BOOL bInНeritНandle, // Флаг наследования
LPCTSTR lpName); // Имя отображения
передавая через параметр lpName имя отображения. Флаг наследования разрешает или запрещает наследование идентификатора отображения.
Отмена отображения выполняется с помощью функции
BOOL UnmapViewOfFile(LPVOID lpBaseAddress) с передачей ей адреса отображенной области памяти. Если приложение создало несколько отображений для файла, перед завершением работы все они должны быть отменены. Далее следует закрыть идентификаторы отображения с помощью CloseНandle. После отмены отображений все измененные страницы памяти записываются в отображамый файл. Принудительная запись измененных страниц возможна через
BOOL FlusНViewOfFile(
LPCVOID lpBaseAddress,// Начальный адрес сохраняемой области
DWORD dwNumberOfBytesToFlusН); // Размер области