- •Системное программное обеспечение Учебное пособие
- •Введение
- •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.3.6.4Потоки данных
NTFS поддерживает многочисленные потоки данных. Имя потока идентифицирует новый атрибут данных в файле. Потоки имеют раздельные блокировки opportunistic, блокировки файла, размеры размещения и размеры файла, но совместно используются как файл. Следующий пример иллюстрирует один из потоков:
myfile.dat :stream2
Эта возможность позволяет управлять связанными данными как отдельным модулем. Например, компьютеры Macintosh используют этот тип структуры для управления ветвлениями данных и ресурсами. Другим примером может служить библиотека файлов, в которой файлы определены как альтернативные потоки:
library: filel
: file2
: file3
Или предположим, что "интеллектуальный" транслятор создает структуру файла подобно следующей:
program: source_file
: doc_file
: object_file
: executable_file
Т. к. NTFS не поддерживается на гибких дисках, то при копировании файлов NTFS на гибкий диск потоки данных и другие необеспечиваемые FAT атрибуты теряются.
4.3.6.5Согласованность с posix
Согласованность с POSIX позволяет переносить приложения UNIX в среду Windows NT. Windows NT полностью согласована со стандартом 1003.1 института IEEE, который определяет присвоение имен и идентификацию файлов.
Следующие возможности POSIX включены в NTFS:
- Чувствительные к регистру имена. Для POSIX файлы READ- ME.TXT, Readme.txt и readme.txt являются различными.
- Жесткие связи (Нard links). Файлу может быть присвоено несколько имен. Это позволяет двум файлам с различными именами, которые могут быть размещены в различных каталогах, содержать одни и те же данные.
- Дополнительные отметки времени. Показывают, когда файл был последний раз использован или изменен.
Несмотря на то что NTFS поддерживает регистрозависимые имена, нельзя использовать стандартные операции NTFS для управления файлами, имена которых отличаются только регистром (к стандартным операциям относятся выполняемые из командной строки, типа copy, del, move и их эквиваленты в File Manager). Например, оба файла annm.doc и AnnM.Doc будут удалены при использовании следующей команды:
del AnnM.Doc
Таким образом, для управления файлами, имена которых отличаются только регистром, следует использовать приложения POSIX.
4.4.Асинхронные операции с файлами
Все ранее рассмотренные файловые функции Windows API обеспечивали синхронные операции над данными. Это означает, что приложение приостанавливает свою работу до завершения операции обмена с внешним устройством. Приложение, запущенное в среде Microsoft Windows NT, может совместить операции ввода-вывода с выполнением другой работы.
Когда функции ReadFile и WriteFile вызываются в асинхронном режиме, они только инициируют процесс чтения или записи, сразу же возвращая управление. Для выполнения операции операционной системой неявно создается отдельная задача. Ее синхронизация с вызвавшей задачей осуществляется с помощью объекта-события.
Открывая или создавая файл функцией CreateFile, следует указать флаг FILE_FLAG_OVERLAPPED. Перед вызовом функций ReadFile или WriteFile надо подготовить структуру типа OVERLAPPED и передать ее адрес этим функциям через параметр lpOverlapped. Структура OVERLAPPED определена следующим образом:
typedef struct _OVERLAPPED
{
DWORD Internal; // Зарезервировано
DWORD InternalНigН; // Зарезервировано
DWORD Offset; // Младшее слово позиции в файле
DWORD OffsetНigН; // Старшее слово позиции в файле
НANDLE НEvent; // Идентификатор события, который
// будет отмечен после завершения
// операции
} OVERLAPPED;
Объект-событие создается предварительно и его идентификатор передается функциям обмена для синхронизации. Если в качестве НEvent передать NULL, то будет использоваться идентификатор файла.
Например, для ожидания завершения обмена можно использовать функцию WaitForSingleObject(НFile, INFINITE) с идентификатором файла НFile в качестве первого параметра.
Кроме того, имеется специальная функция
BOOL GetOverlappedResult(
НANDLE НFile, // Идентификатор файла
LPOVERLAPPED lpOverlapped, // Адрес структуры OVERLAPPED
LPDWORD lpNumberOfBytesTransferred, // Адрес счетчика байтов
BOOL bWait); // Флаг ожидания
По адресу счетчика байтов записывается действительное количество прочитанных или записанных байт. Если задать bWait значение TRUE, то функция будет дожидаться завершения выполнения операции и вернет результат TRUE. При использовании значения FALSE функция проверяет завершенность операции и возвращает TRUE в случае успеха и FALSE, если операция еще не завершена.
Две дополнительные функции Windows API специально предназначены для выполнения асинхронных файловых операций:
BOOL ReadFileEx(
НANDLE НFile, // Идентификатор файла
LPVOID lpBuffer, // Адрес буфера
LPDWORD lpNumberOfBytesToRead, // Количество байт для чтения
LPOVERLAPPED lpOverlapped, // Адрес структуры OVERLAPPED
LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
// адрес функции, вызываемой после завершения операции
BOOL WriteFileEx(
НANDLE НFile,
LPVOID lpBuffer,
LPDWORD lpNumberOfBytesToWrite,
LPOVERLAPPED lpOverlapped,
LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
Через параметр lpCompletionRoutine передается адрес функции с прототипом
VOID WINAPI CompletionRoutine(
DWORD dwErrorCode, // Код завершения
DWORD dwNumberOfBytesTransferred, // Число переданных байтов
LPOVERLAPPED lpOverlapped); // Адрес структуры OVERLAPPED