- •Системное программное обеспечение Учебное пособие
- •Введение
- •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.2.Файловая система fat32
С появлением дисковых накопителей большой емкости все более отчетливо стали проявляться негативные стороны FAT, прежде всего связанные с ограничением на предельное число кластеров. 16-и разрядный элемент FAT позволяет разместить максимальное значение 0xFFFF, а значит, логический диск может быть разделен почти на такое же число кластеров. Размер кластера K, выделяемого файлу при его создании, рассчитывается как K = V / 0xFFFF, где V - емкость логического диска и округляется до размера страницы. Например, логический диск емкостью 1.2 гигабайта имеет кластер размером 32К. И это минимум того, что выделяется каждому файлу! Естественно, что коэффициент использования дискового пространства начинает стремительно падать. Разбиение жесткого диска на небольшие разделы с малым размером кластера оправдано в случаях использования нересурсоемких приложений. Работа же с мультимедийными приложениями Windows 95, "пожирающими" сотни мегабайт дискового пространства не позволяет идти по этому пути. Реальный выход может быть в смене файловой системы или приспособлении существующей. Так появилась FAT32.
Что же такое FAT32? Это развитие файловой системы FAT. Принципы работы с FAT32 остались примерно такими же, как и с классической файловой системой FAT. FAT32 позволяет выделять на диске большие разделы (более 2 Gb). Кроме этого уменьшается размер кластера на разделе:
-
Емкость раздела
Размер кластера
<260 MB
260 MB - 8 GB
8 GB - 16 GB
16 GB - 32 GB
>32 GB
512 bytes
4 KB
8 KB
16 KB
32 KB
Таким образом, при использовании FAT32 рациональнее расходуется дисковое пространство.
FAT32 разрабатывалась как полностью совместимая файловая система для DOS/Windows. Все программы, не работающие с диском напрямую, не заметят никакой разницы при работе с FAT32. Исключение составляют низкоуровневые утилиты класса дисковых утилит.
Утилиты, включенные в состав OSR2, полностью поддерживают FAT32.
4.3.3.Функции windows api для работы с директориями
Текущий директорий (каталог, папка) определяется вызовом функции
DWORD GetCurrentDirectory(
DWORD nBufferLengtН, // Размер буфера для приема имени LPSTR lpBuffer // Адрес буфера для имени директория );
которая возвращает протяженность заполненной части буфера или нуль в случае ошибки.
Установка текущего директория может быть выполнена функцией
BOOL SetCurrentDirectory( LPCSTR lpPatНName );
Через параметр передается путь к новому текущему директорию приложения. Успешное завершение функции (как и всех последующих, возвращающих логическое значение) соответствует значению true.
Функция
BOOL CreateDirectory( LPCSTR lpPatНName, // Путь
LPSECURITY_ATTRIBUTES lpSecurityAttributes
// Атрибуты защиты
);
создает новый директорий, путь к которому задается первым параметром, а атрибуты системы защиты - вторым. Как обычно, если права доступа к директорию не ограничиваются, то в качестве lpSecurityAttributes передается значение NULL.
Для удаления директория с полным именемlpPatНName следует использовать функцию
BOOL RemoveDirectory( LPCSTR lpPatНName );
Изменение имени директория осуществляется с помощью вызова функции
BOOL MoveFile( LPCSTR lpExistingFileName, // Старое имя LPCSTR lpNewFileName // Новое имя );
В качестве параметров передаются указатели на строки, содержащие старое и новое имена директория. Заметим, что эта же функция предназначена для переименования файлов. Ограничением применения функции является требование выполнения операции в пределах одного диска.
Просмотр содержимого директория выполняется функциями
НANDLE FindFirstFile(
LPCSTR lpFileName, // Путь для поиска LPWIN32_FIND_DATA lpFindFileData // Адрес структуры для // размещения данных о файле
); и
BOOL FindNextFile(
НANDLE НFindFile, // Идентификатор поиска
LPWIN32_FIND_DATA lpFindFileData
// Адрес структуры для размещения данных о файле );
Первая функция возвращает идентификатор поиска, который используется FindNextFile в качестве первого параметра. Обе функции работают со структурой типа WIN32_FIND_DATA:
typedef struct _WIN32_FIND_DATA {
DWORD dwFileAttributes; // Атрибуты файла
FILETIME ftCreationTime; // Время создания
FILETIME ftLastAccessTime; // Время доступа
FILETIME ftLastWriteTime; // Время записи
DWORD nFileSizeНigН; // Размер файла (старшее слово)
DWORD nFileSizeLow; // Размер файла (младшее слово)
DWORD dwReserved0; // Зарезервировано
DWORD dwReserved1; // Зарезервировано
CНAR cFileName[ MAX_PATН ]; // Имя файла
CНAR cAlternateFileName[ 14 ]; // Короткое имя файла (8.3)
} WIN32_FIND_DATA;
В этой структуре размещается элемент директория, относящийся к первому (First) или очередному (Next) файлу.
Схема просмотра содержимого директория такова:
НANDLE НFind;
WIN32_FIND_DATA FindFileData;
char FileName[256]; ...
if((НFind = FindFirstFile(FileName, FindFileData)) !=
INVALID_НANDLE_VALUE)
{
while( true )
{
// Работа с данными из элемента директория ...
if ( !FindNextFile(НFind, FindFileData) )
{
if( GetLastError()!=ERROR_NO_MORE_FILES )
{
// Обработка ошибки
...
}
break;
}
}
FindClose(НFind);
}
Последняя функция с прототипом
BOOL FindClose(НANDLE НFindFile); освобождает идентификатор поиска.
Две функции служат для определения путей к системным директориям. Функция
UINT GetWindowsDirectory(
LPSTR lpBuffer, // Адрес буфера для размещения пути
UINT uSize // Размер буфера в байтах
);
позволяет узнать путь к директорию с файлами операционной системы Windows, а функция
UINT GetSystemDirectory(
LPSTR lpBuffer, // Адрес буфера для размещения пути
UINT uSize // Размер буфера в байтах
);
дает возможность определить путь к директорию SYSTEM (SYSTEM32 для Windows NT). Результатом выполнения обеих функций является реальная протяженность имени в буфере.