
- •Вопросы по курсу «Операционные системы» весеннего семестра 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. Службы
12. Теоретические основы параллельного программирования: принцип организации критических секций.
Критические секции могут быть организованы полностью программно на основе алгоритма Деккера. Однако этот алгоритм достаточно сложен, медленен, и к тому же его сложность возрастает одновременно с количеством процессов экспоненциально.
Рассмотрим программно-аппаратный способ организации критических секций. Этот способ основан на наличии в составе команд процессора специальной команды, выполняющей сразу 2 операции, а именно считывание данных из памяти и занесение данных в память. Впервые такая команда появилась в IBM 360 (команда TS). Команда была двухоперандной: TS <oп1> <oп2> Значение oп2 присваивалось оп1 а в оп2 записывалась «1». Аналогом в системе команд Intel IA-32 является команда XCHG. Эта команда отличается от всех других команд Intel IA-32 тем, что во время ее выполнения на шину управления всегда подается особый сигнал - #lock (блокирует ПДП для всех других периферийных устройств).
Xchg eax, status status – статус критической секции.
Процесс, который хочет занять критическую секцию, должен выполнить следующие инструкции:
Wait: move eax,1
Xchg eax, status
Cmp eax,1
Je wait
Если после выполнения команды xchg в eax оказывается единица, то это значит, что критическая секция занята другим процессом, и требуется подождать, пока критическая секция освободится. Если в регистре eax после выполнения команды xchg оказывается 0, то это означает, что до выполнения команды xchg критическая секция была свободна, а теперь она занята нашим процессом, и мы уже внутри критической секции.
Для того, чтобы выйти из критической секции, необходимо выполнить следующую команду:
Mov status,0
Способ универсален и работает в том числе и на многопроцессорных компьютерах (из-за сигнала #LOCK). Все современные ОС построены на критических секциях, а все критические секции для IA-32 построены на команде xchg.
В ОС windows существует функция LONG InterlockedExchange(LONG * status, LONG * value)
Благодаря этой функции программа может сама организовать критические секции без обращения к ядру ОС. Значение Value записывается на место старого значения (*Status), а старое значение (*Status) возвращается функцией InterlockedExchange.
Использование для организации критической секции:
LONG Status = 0;
…
While (InterlockedExchange(&Status, 1) == 1);
…
… критическая секция
…
Status = 0;
Такой вариант приводит к полной загрузке ЦП (зависание в нити, ожидающей обслуживания). Для решения проблемы используется вариант:
…
While (InterlockedExchange(&Status, 1) == 1){sleep(0) ;} //Перевод текущей нити в
… // конец списка обслуживания
… критическая секция
…
Однако такой вариант все еще не удовлетворяет условию 3. Чтобы все работало:
Time(&t)
While (InterlockedExchange(&Status, 1) == 1)
{
sleep(0);
time(&t1);
if ((t1-t) > 1) return false;
} Return true; //Вход в КС.