
- •1. Определение ос. Функции ос. Процессы и потоки. Классификация ос. История развития.
- •1.1 Определение ос.
- •Уровни вс.
- •Микроархитектура.
- •Машинный язык.
- •Системное и прикладное по.
- •1.2 Основная функция ос.
- •Основные ресурсы вс.
- •Дополнительная функция ос.
- •1.3 Мультипрограммирование.
- •Процессы и потоки.
- •Варианты мультипрограммирования.
- •Приоритетное обслуживание.
- •Динамический приоритет.
- •Поддержка многопользовательского режима.
- •Многопроцессорная обработка.
- •Виды мультипроцессирования.
- •Системы пакетной обработки.
- •Системы разделения времени.
- •Системы реального времени.
- •Гибридные системы.
- •Структурная организация операционных систем.
- •Монолитная структура.
- •Многоуровневая структура.
- •Понятие ядра.
- •Модульное ядро.
- •Микроядро.
- •Достоинства и недостатки микроядра.
- •Ооп: достоинства и недостатки.
- •1.5 Эволюция операционных систем. Появление ос.
- •Первый “баг”.
- •Этапы эволюции.
- •1 Этап (1940-60).
- •2 Этап (1965-75).
- •3 Этап (1970-80).
- •4 Этап (1980-90).
- •5 Этап (1990 – …).
- •2. Операционная система ms Windows 2000 и выше. Общая характеристика и основные функции. Структура ms Windows 2000-2003. Объекты в ms Windows 2000-2003.
- •2.2 Основная характеристика Windows 2000-2008.
- •2.3 Архитектура ос Windows 2000-2003. Краткая характеристика.
- •Структура ядра.
- •2.4 Объекты Windows 2000-2008.
- •Назначение объектов.
- •Типы объектов Windows 2000-2008.
- •Структура объектов Windows 2000-2003.
- •Удержание объектов.
- •Учет использования ресурсов.
- •Защита объектов.
- •Избирательный доступ.
- •3. Основы файловых систем. Файлы и их атрибуты. Каталоги. Логическая организация фс. Логическая, физическая организация файлов. Кэширование. Raid - системы.
- •4. Основы файловых систем. Файлы и их атрибуты. Каталоги. Логическая организация фс. Логическая, физическая организация файлов. Способы учёта свободного дискового пространства.
- •3.1 Основы файловых систем.
- •3.2, 3.3 Файлы и их атрибуты. Каталоги.
- •3.4 Логическая организация фс.
- •3.5 Логическая, физическая организация файлов.
- •3.6 Кэширование.
- •Кэширование диска.
- •3.7 Raid - системы.
- •Raid - 0.
- •Raid - 1.
- •Raid - 4.
- •Raid – 5.
- •Сравнение raid-систем.
- •5. Файловые системы fat и fat32. Структура логического диска. Элемент каталога. Логическая, физическая организация файлов. Хранение длинных имён. Raid – системы.
- •5.1 Файловая система fat16.
- •5.2 Структура логического диска fat.
- •5.3 Элемент каталога fat16.
- •5.4 Логическая организация данных.
- •Фрагментация и дефрагментация.
- •Размеры разделов и кластеров fat16 для Windows 95-2000.
- •Файловая система vfat.
- •Long File Names.
- •Элемент каталога vfat.
- •Пример длинного имени.
- •6.1 Файловая система ntfs.
- •6.2 Тома ntfs.
- •6.3 Mft и ее структура.
- •6.4 Атрибуты файлов.
- •6.5 Хранение файлов.
- •6.6 Сжатие файлов.
- •6.7 Защита целостности данных.
- •6.8 Дополнительные возможности.
- •7. Сравнение структуры логического диска fat32 и тома ntfs . Функции win32 api для работы с файлами.
- •8. Сравнение структуры логического диска Fat32 и тома ntfs. Варианты организации асинхронной работы с файлами.
- •7.1 Файловая система ntfs vs. Fat.
- •7.2 Функции win32 api для работы с файлами.
- •9. Методы распределения памяти с использованием дискового пространства. Стратегии управления виртуальной памятью.
- •Классификация методов распределения памяти.
- •9.1 Методы распределения памяти с использованием дискового пространства.
- •Страничное распределение.
- •Сегментное распределение.
- •Сегментно-страничное распределение.
- •9.2 Стратегии управления виртуальной памятью (свопинг).
- •Понятие «trashing».
- •10. Архитектура памяти ms Windows 2000. Менеджер вп. Виртуальное ап. Средства защиты памяти. Страничное преобразование. Реализация свопинга в ms Windows 2000-2003.
- •Архитектура api управления памятью.
- •11. Архитектура памяти ms Windows 2000-2003. Организация «статической » виртуальной памяти. Блоки адресов. Состояния блоков адресов. Функции Win32 api.
- •12. Архитектура памяти в ms Windows 200-2003. Организация «динамической» виртуальной памяти. Назначение и преимущество по сравнению с кучами ansi c. Функции Win32 api.
- •13. Архитектура памяти в ms Windows 2000-2003. Проецируемые файлы, назначение и использование. Функции Win32 api.
- •Проецируемые файлы.
- •14. Объекты управления центральным процессором и объединения ресурсов в ms Windows 2000-2003. Атрибуты процессов и потоков. Классы приоритетов.
- •14.1, 14.2 Управление центральным процессором и объединение ресурсов.
- •Атрибуты процессов и потоков.
- •Объекты Windows .
- •Процессы.
- •Потоки.
- •Задание (job).
- •Волокна (fibers).
- •14.3 Классы приоритетов.
- •15. Общие принципы диспетчеризация (планирование загрузки) в ms Windows 2000-2003. Классы приоритетов. Относительные приоритеты. Динамическое изменение приоритетов.
- •15.1 Общие принципы диспетчеризация (планирование загрузки) в ms Windows 2000-2003.
- •Планирование загрузки однопроцессорной системы.
- •15.3 Относительные приоритеты потоков.
- •15.4 Динамическое изменение приоритетов.
- •16. Граф состояний потоков в ms Windows 2000-2003. Поток простоя. Принципы адаптивного планирования.
- •16.1 Граф состояний потоков в ms Windows 2000.
- •16.2 Поток простоя.
- •16.3 Принципы адаптивного планирования.
- •17. Граф состояний потоков в ms Windows 2000-2003. Особенности планирования в многопроцессорных системах.
- •17.2 Особенности планирования в многопроцессорных системах.
- •18. Граф состояний потоков в ms Windows 2000-2003. Особенности планирования в ос ms Windows Vista и Server 2008.
- •18.2 Особенности планирования в ос ms Windows Vista и Server 2008.
- •19. Планирование загрузки процессорного времени в ms windows 2000-2003. Функции win 32 api создания и завершение процессов и потоков, управление потоками
- •20. Планирование загрузки процессорного времени в ms windows 2000-2003. Функции win 32 api создания и завершения потоков.
- •Управление потоками.
- •21. Критические секции и состязания. Семафоры, Мьютексы. Задача о читателях и писателях. Предотвращение критических ситуаций и средства синхронизации процессов
- •23. Синхронизация потоков с использованием объектов ядра ms Windows 2000-2003. Основные принципы синхронизации. События. Семафоры. Функции win 32 api.
- •24. Синхронизация потоков с использованием объектов ядра ms Windows 2000-2003. Основные принципы синхронизации. Таймеры ожидания. Мьютексы. Функции win 32 api.
- •25. Межпроцессорное взаимодействие. Передача информации в ms Windows 2000-2003. Анонимные каналы. Почтовые ящики. Функции win 32 api.
- •26. Межпроцессорное взаимодействие. Передача информации в ms Windows 2000-2003. Именованные каналы. Почтовые ящики. Функции win 32 api.
Критические секции
Важным понятием синхронизации потоков для решения проблемы состязаний является понятие «критической секции» программы.
Критическая секция – это часть программы, результат выполнения которой может непредсказуемо меняться, если переменные, относящиеся к этой части программы, изменяются другими потоками в то время, когда выполнение этой части еще не завершено.
Во всех потоках, работающих с критическими данными, должна быть определена критическая секция.
В разных потоках критическая секция состоит в общем случае из разных последовательностей команд.
Самый простой и в то же время самый неэффективный способ обеспечения взаимного исключения состоит в том, что ОС позволяет потоку запрещать любые прерывания на время его нахождения в критической секции. Однако этот способ практически не применяется, так как опасно доверять управление системой пользовательскому потоку – он может надолго занять процессор, а при крахе потока в критической секции крах потерпит вся система, потому что прерывания никогда не будут разрешены.
Условия исключения гонок
Два процесса не должны одновременно находиться в критической секции
В программе не должно быть предположений о скорости или количестве процессоров
Процесс вне критической секции не может блокировать другие процессы
Должна быть невозможна ситуация, когда процесс вечно ждет попадания в критическую секцию
Взаимное исключение с использованием критических секций
Семафоры
Дийкстра (Dijkstra) предложил использовать переменные, которые могут принимать целые неотрицательные значения. Такие переменные, используемые для синхронизации вычислительных процессов, получили название семафоров.
Семафор - неотрицательная целая переменная S >= 0, которая может изменяться и проверяться только посредством двух примитивов:
V(S): переменная S увеличивается на 1 единым неделимым действием. К переменной S нет доступа другим потокам во время выполнения этой операции.
P(S): уменьшение S на 1, если это возможно. Если S=0 и невозможно уменьшить S, оставаясь в области целых неотрицательных значений, то в этом случае поток, вызывающий операцию Р, ждет, пока это уменьшение станет возможным. Успешная проверка и уменьшение также являются неделимой операцией.
Иллюстрация работы семафора
Данный пример демонстрирует использование семафора для ограничения доступа потоков к объекту синхронизации на основании их количества.
Создание семафора
HANDLE CreateSemaphore(
LPSECURITY_ATTRIBUTE psa,
LONG lInitialCount,
LONG lMaximumCount,
LPCTRTR pszName);
HANDLE OpenSemaphore(
DWORD fdwAccess,
BOOL bInheritHandle,
LPCTSTR pszName);
Параметр lMaximumCount сообщает системе максимальное состояние семафора.
Управление семафором
Поток получает доступ к ресурсу, вызывая одну из Wait-функций и передавая ей описатель семафора, который охраняет этот ресурс Wait-функция проверяет у семафора счетчик текущего числа ресурсов если его значение больше 0 (семафор свободен), уменьшает значение этого счетчика на 1, и вызывающий поток остается планируемым.
BOOL ReleaseSemaphore(
HANDLE hSem,
LONG lReleaseCount,
PLONG plPreviousCount);
Если Wait-функция определяет, что счетчик текущего числа ресурсов равен 0 (семафор занят), система переводит вызывающий поток в состояние ожидания Когда другой поток увеличит значение этого счетчика, система вспомнит о ждущем потоке и снова начнет выделять ему процессорное время (а он, захватив ресурс, уменьшит значение счетчика на 1).
Поток увеличивает значение счетчика текущего числа ресурсов, вызывая функцию ReleaseSemaphore.
Она просто складывает величину lReleaseCount со значением счетчика текущего числа ресурсов. Обычно в параметре lReleaseCount передают 1.
Функция возвращает исходное значение счетчика ресурсов в *plPreviousCount.
Атомы это очень простой и доступный путь IPC. Идея состоит в том, что процесс может поместить строку в таблицу атомов и эта строка будет видна другим процессам. Когда процесс помещает строку в таблицу атомов, он получает 32-х битное значение (атом), и это значение используется для доступа к строке. Система не различает регистр строки.
Набор атомов собирается в таблицу (atom table). Система обеспечивает несколько таблиц атомов для разных задач. По типу доступа их два типа:
Локальные (доступны только из приложения)
Глобальные (доступны из всех приложений)
Функции WIN 32 API для атомов
GlobalAddAtom
GlobalGetAtomName
GlobalFindAtom
GlobalDeleteAtom
Сообщение WM_COPYDATA
Отправитель:
COPYDATASTRUCT cds;
cds.cbData = (DWORD) nSize;
cds.lpData = (PVOID) pBuffer;
SendMessage (hWndTarget, WM_COPYDATA, (WPARAM) hWnd, (LPARAM) &cds);
Получатель:
PCOPYDATASTRUCT pcds = (PCOPYDATASTRUCT) lParam;
PBYTE pBuffer = (PBYTE) pcds -> lpData;
Критические секции
В составе API ОС Windows имеются специальные и эффективные функции для организации входа в критическую секцию и выхода из нее потоков одного процесса в режиме пользователя.
Они называются EnterCriticalSection и LeaveCriticalSection и имеют в качестве параметра предварительно проинициализированную структуру типа CRITICAL_SECTION.
Примерная схема программы может выглядеть следующим образом.
CRITICAL_SECTION cs;
DWORD WINAPI SecondThread()
{
InitializeCriticalSection(&cs); EnterCriticalSection(&cs);
//…критический участок кода LeaveCriticalSection(&cs);
}
Функции EnterCriticalSection и LeaveCriticalSection реализованы на основе атомарных Interlocked-функций.
Существенным является то, что в случае невозможности входа в критический участок поток переходит в состояние ожидания. Впоследствии, когда такая возможность появится, поток будет "разбужен" и сможет сделать попытку входа в критическую секцию.
Задача о читателях и писателях
Рассмотрим использование семафоров на классическом примере взаимодействия двух выполняющихся в режиме мультипрограммирования потоков, один из которых пишет данные в буферный пул, а другой считывает их из буферного пула.
Пусть буферный пул состоит из N буферов, каждый из которых может содержать одну запись. В общем случае поток-писатель и поток-читатель могут иметь различные скорости и обращаться к буферному пулу с переменой интенсивностью. В один период скорость записи может превышать скорость чтения, в другой – наоборот.
Для правильной совместной работы поток-писатель должен приостанавливаться, когда все буферы оказываются занятыми, и активизироваться при освобождении хотя бы одного буфера. Напротив, поток-читатель должен приостанавливаться, когда все буферы пусты, и активизироваться при появлении хотя бы одной записи.
Введем два семафора: е – число пустых буферов, и f – число заполненных буферов, причем в исходном состоянии е =N, a f =0. Тогда работа потоков с общим буферным пулом может быть описана следующим образом.
Таким образом, семафоры позволяют эффективно решать задачу синхронизации Доступа к ресурсным пулам, таким, например, как набор идентичных в функциональном назначении внешних устройств (модемов, принтеров, портов), или набор областей памяти одинаковой величины, или информационных структур. Во всех этих и подобных им случаях с помощью семафоров можно организовать доступ к разделяемым ресурсам сразу нескольких потоков.
23. Синхронизация потоков с использованием объектов ядра ms Windows 2000-2003. Основные принципы синхронизации. События. Семафоры. Функции win 32 api.
Синхронизация потоков с использованием объектов ядра Windows 2000
Простейшей формой связи потоков является синхронизация (synchronization).
Синхронизация означает способность потока добровольно приостанавливать свое исполнение и ожидать, пока не завершится выполнение некоторой операции другим потоком.
Все ОС, поддерживающие многозадачность или мультипроцессорную обработку, должны предоставлять потокам способ ожидания того, что другой поток что–либо сделает: например, освободит накопитель на магнитном диске или закончит запись в совместно используемый буфер памяти. ОС должна также дать потоку возможность сообщить другим потокам об окончании выполнения операции. Получив такое уведомление, ожидающий поток может продолжить выполнение.
Синхронизационные объекты и их состояния
процессы
потоки
задания
файлы
консольный ввод
уведомления об изменении файлов
события
ожидаемые таймеры
семафоры
мьютексы