
- •Вопросы по курсу «Операционные системы» весеннего семестра 2010-2011 учебного года
- •1. Общие сведения об операционных системах, цели применения ос, структура ос.
- •2. Модель взаимодействия компонентов операционной системы.
- •3. Классификация ос.
- •4.5. Теоретические основы параллельного программирования, понятия: процесс, задача, мультизадачный режим работы ос, нить, контекст нити.
- •6. Теоретические основы параллельного программирования: классификация программных модулей; понятия реентерабельности и повторной входимости программных модулей.
- •7. Прерывания и механизмы обработки прерываний операционной системой.
- •8.9.Диспетчер задач: дисциплины диспетчеризации, критерии оценки дисциплин диспетчеризации задач.
- •10. Теоретические основы параллельного программирования: независимые и взаимодействующие процессы, понятия ресурса и критического ресурса.
- •11. Теоретические основы параллельного программирования: список условий функционирования взаимодействующих процессов, понятие тупика.
- •12. Теоретические основы параллельного программирования: принцип организации критических секций.
- •13. Теоретическая классификация видов взаимодействия процессов: сигналы, семафоры, мьютексы.
- •15. Теоретическая классификация видов взаимодействия процессов: очереди сообщений, файлы, разделяемая память, объект «ресурс».
- •16. Теоретическая классификация видов взаимодействия процессов: почтовые ящики, конвейеры.
- •17 Организация подсистемы безопасности в ос Windows: создание и открытие объектов, понятие описателя, атрибуты безопасности, права доступа, структура описателя безопасности.
- •18.Организация подсистемы безопасности в ос Windows: маркеры, привилегии пользователей, олицетворение.
- •19. Организация подсистемы безопасности в ос Windows: получение доступа к объекту.
- •20. Процессы в ос Windows: понятие Win32 api; main() и WinMain(), создание и завершение процессов и нитей, основные функции работы с процессами и нитями.
- •21. Работа с файлами в ос Windows: синхронная и асинхронная.
- •24. Таймеры ожидания в ос Windows и понятие apc
- •25. Структурная обработка исключений.
- •26. Способы управления памятью: простое непрерывное распределение, оверлейное распределение.
- •1. Простое непрерывное распределение
- •2. Оверлейное распределение (OverLay)
- •27. Способы управления памятью: распределение статическими и динамическими разделами.
- •28. Способы управления памятью: сегментная организация памяти.
- •29. Страничная организация памяти
- •30. Сегментно-страничный способ организации памяти
- •31. Таблицы физических страниц памяти в современных ос. Понятие pfn, понятие mdl.
- •32. Распределение оперативной памяти в современных компьютерах. Спецификация acpi
- •33. Распределение первого мегабайта оперативной памяти в персональных компьютерах.
- •35. Резервирование памяти с помощью функции VirtualAlloc
- •36. Работа с кучами процессов
- •37 . Динамически загружаемые библиотеки (dll). Связывание во время загрузки библиотеки.
- •38. Системные перехватчики (hook
- •40. Службы
33. Распределение первого мегабайта оперативной памяти в персональных компьютерах.
Распределения памяти в 1-ом мб физ памяти
ОС MS-DOS может оперировать 1 мб физ памяти благодаря особенностям адрессации процессора 8086 адрес состоял из 20б. В эту область умещался и BIOS компьютера, и видеопамять, и область программ, включая ОС. Сразвитием процессорной архитектуру появлисаь возможность адресовать память 1-ым мб. Однока для сохранения совместимости с IBM-PC при включении компьютера до настоящего времени 20 линия адреса всегда равна нулюпри обращении к ОЗУ. Реальные значения 20 линии адреса можновключить посредствам команды мат паты с через клавиатурный порт. После этго в распоряжении MS-dos оказыввется 1мб+64б-4б адресного пространства.Такое включение в ms-dos производят драйверы hymen.sys.
35. Резервирование памяти с помощью функции VirtualAlloc
Вся виртуальная память программы в ОС windows делится на 3 классса:
-Доступная – все адресное пространство процесса
-Заерезервированная-выделенное адресное пространство без подключения памяти.
-Выделенная- выделенное адресное пространство с подключенной к нему памятью.
Память в любой момент времени может находиться в оперативной памяти
Резервирвоание или выделение памяти делается с помощью ф-ии Virtual
LPVOID VirtualAlloc( LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect);
Параметры функции:
lpAddress – предпочтительный адрес выделения памяти,
dwSize – размер выделяемого блока (выравнивается по границе 4 Кб),
flAllocationType – тип выделения (MEM_RESERVE – память резервируется, MEM_COMMIT – память выделяется),
flProtect – тип защиты страниц (см. функцию MemoryMapFile).
Освобождение памяти осуществляется с помощью функции
LPVOID VirtualFree( LPVOID lpAddress, SIZE_T dwSize, DWORD dwFreeType);
Параметры функции:
lpAddress –адрес выделения памяти,
dwSize – размер выделенного блока,
dwFreeType – тип освобождения (MEM_DECOMMIT).
Память под исполняемый код программ выделяется в самих файлах программ, а не в файле свопинга.
По сути, происходит процесс memory mapping.
При отсутствии свободной ОП код программы в ОЗУ просто уничтожается, а затем при необходимости загружается из файла программы.
Резервирование виртуальной памяти позволяет программисту очень элегантно решить проблему больших массивов данных.
Например, имеется массив на 4 Мб памяти.
typedef int TData[100][100][100];
Из этого массива потребуется лишь небольшая часть. Тогда память массива можно не выделять, а зарезервировать.
Тем самым мы избегаем затрат памяти, и гарантируем при этом, что следующие выделения памяти не попадут в этот участок адресного пространства. Код, работающий с массивом данных, помещается внутрь структурного обработчика исключений. При обращении к ячейке памяти внутри массива возникает исключение, и выделяется участок требуемой памяти с помощью функции VirtualAlloc.
void main()
{
TData *pData;
pData = (TData*)VirtualAlloc(0,sizeof(TData),
MEM_RESERVE,PAGE_READWRITE);
int *pSomeData = &(*pData)[50][50][50];
__try {
*pSomeData = 1;
}
__except(VirtualAlloc(pSomeData,sizeof(int),
MEM_COMMIT,PAGE_READWRITE),-1) { }
printf("Some Data = %d",*pSomeData);
VirtualFree(pData,sizeof(TData),MEM_DECOMMIT);
return;
}
При освобождении памяти освободятся и зарезервированные, и выделенные блоки памяти.
Выделенние памяти в адресном простарнстве windows происходит 64кб блоками. Ядро windows определяет блок в который попадает указатель pSomeData и выделяет память в эит блоки ( 64 кб или 128 кб) «-1» вернет нас в try «1» присваивается.