- •1.Архитектура операционных систем
- •1.1Общие вопросы архитектуры операционных систем
- •1.2Архитектура Windows
- •1.2.1История возникновения Windows
- •1.2.2Архитектура ос Windows
- •1.2.3История возникновения ос Linux
- •1.2.4Архитектура Linux
- •1.2.5Интерфейсы системы unix
- •1.2.7Аутентификация в unix
- •1.2.6Файловая система unix
- •1.2.8Сценарии командной оболочки unix
- •1.3Операционная система qnx
- •1.3.1 Архитектура qnx
- •1.4Выводы
- •1.5Вопросы для самоконтроля
- •2.Типы и алгоритмы работы с оперативной памятью
- •2.1Общие принципы функционирования подсистемы памяти в ос
- •2.1.1Обобщённые принципы управления памятью
- •2.1.2Однозадачная система без подкачки на диск
- •2.1.3Многозадачность с фиксированными разделами
- •2.1.4Подкачка
- •2.1.5Управление памятью с помощью битовых массивов
- •2.1.6Управление памятью с помощью связанных списков
- •2.1.7Виртуальная память
- •2.1.8Многоуровневые таблицы страниц
- •2.1.9Алгоритмы замещения страниц
- •2.2Виртуальная память ос Windows
- •2.2.1Архитектура памяти в ос Windows
- •2.2.2Работа с виртуальной памятью в ос Windows
- •2.2.3Использование виртуальной памяти в приложениях
- •2.3Пример организации страничной памяти на примере linux
- •2.3.1Страничная организация памяти в Linux
- •2.3.2Права доступа к области памяти
- •2.3.3Работа с областями памяти в Linux
- •3.Процессы и потоки
- •3.1Процессы
- •3.1.1Модель процесса
- •3.1.2Создание процесса
- •3.1.3Завершение процесса
- •3.1.4Состояния процессов
- •3.1.5Реализация процессов
- •3.2Потоки
- •3.2.1Реализация потоков
- •3.2.2Реализация потоков на уровне ядра
- •3.2.3Смешанная реализация
- •3.2.4 Метод управления «Активация планировщика»
- •3.2.5Всплывающие потоки
- •3.3Межпроцессное взаимодействие
- •3.3.1Состояние состязания
- •3.3.2Критические секции (Критические области)
- •3.3.3Взаимное исключение с активным ожиданием
- •3.3.4Примитивы межпроцессного взаимодействия
- •3.4Семафоры
- •3.5Мьютексы
- •3.6Организация многопоточной обработки в среде Windows
- •3.6.1Объекты ядра Windows
- •3.6.2Потоки Windows
- •3.6.3Синхронизация потоков в Windows
- •3.6.4Синхронизация потоков с помощью объектов ядра
- •3.6.5Сравнение объектов, используемых для синхронизации потоков
- •3.7Организация процессов и потоков в Linux
- •3.7.1Среда окружения в Linux
- •3.7.2Создание нового процесса. Системный вызов exec.
- •3.7.3Потоки unix. Функции потоков стандарта posix.
- •3.8Синхронизация потоков в unix
- •3.8.1Мьютексы
- •3.8.2Семафоры
- •0,0,0, //Ожидать обнуления семафора
- •0,1,0 // Затем увеличить значение семафора на 1};
- •0,1, 0 // Увеличитьзначение семафора на 1};
3.6.5Сравнение объектов, используемых для синхронизации потоков
В следующей таблице суммируются сведения о различных объектах ядра примени тельно к синхрониаации потоков.
Таблица 3.2. Объекты, используемые для синхронизации потоков
Объект |
Находится в занятом состоянии, когда |
Переходит в свободное состояние, когда |
Побочный эффект успешного ожидания |
Процесс Поток |
процесс еще активен поток еще активен |
процесс завершается (ExitProcess, TerminateProcess) поток завершается (ExitThread, TerminateThread) |
Нет Нет |
Объект |
Находится в занятом состоянии, когда: |
Переходит в свободное состояние, когда: |
Побочный эффект успешного ожидания |
Задание |
время, выделенное заданию, еще не истекло |
время, выделенное заданию, истекло |
Нет |
Файл |
выдан запрос на ввод-вывод |
завершено выполнение запроса на ввод-вывод |
Нет |
Консольный ВВОД |
ввода нет |
ввод есть |
Нет |
Уведомление об изменении файла |
в файловой системе нет изменений |
файловая система обнаруживает изменения |
Сбрасывается в исходное состояние |
Событие с автосбросом |
вызывается ResetEvent, PulseEvent или ожидание успешно завершилось |
вызывается SetEvent или PulseEvent |
Сбрасывается в исходное состояние |
Событие со сбросом вручную |
вызывается ResetEvent или PulseEvent |
вызывается SetEvent или PulseEvent |
Нет |
Ожидаемый таймер с автосбросом |
вызывается CancelWaitable- Тiтеr или ожидание успешно завершилось |
наступает время срабатывания (SetWaitableTimer) |
Сбрасывается в исходное состояние |
Ожидаемый таймер со сбросом вручную |
вызывается CancelWaitableTimer |
наступает время срабатывания (SetWaitableTimef) |
Нет |
Семафор |
ожидание успешно завершилось |
счетчик > 0 (ReleaseSemaphore) |
Счетчик уменьшается на 1 |
Мьютекс |
ожидание успешно завершилось |
поток освобождает мьютекс (ReleaseMutex) |
Передается пото ку во владение |
Критическая секция (поль зовательского режима) |
ожидание успешно завершилось ( (Try)EnterCriticalSection) |
поток освобождает критическую секцию (LeaveCriticalSection) |
Передается потоку во владение |
Interlocked-функции (пользовательского режима) никогда не приводят к исключе нию потока из числа планируемых; они лишь изменяют какое-то значение и тут же возвращают управление.
При синхронизации потоков чащс всего используются функции WaitForSingleObject и WaitForMultipleObjects. OднaкoвWindows ecть и дpyгиe, нecкoлькo oтличaющиecя фyнк ции, которые можно применять с той же целью. В дальней
