- •Основные понятия ос. Ос как расширенная машина. Ос как система управления ресурсами.
- •Функции ос. Подсистема управления подпрограммами. Диаграмма состояния процесса.
- •Процессы и потоки.
- •Алгоритмы синхронизации потоков. Критическая секция.
- •Синхронизация в режиме ядра. Семафоры, мьютексы. Типичные задачи: производители-потребители и читатели-писатели.
- •Организация памяти компьютера. Логическая память. Сегменты. Связывание адресов.
- •Простейшие схемы управления памятью. Схемы с фиксированными и переменными разделами. Страничная память. Сегментно-страничная организация памяти.
- •Файловые системы.
- •Архитектура ос. Ядро и вспомогательные модули. Микроядерная архитектура. Преимущества и недостатки.
- •Программирование, управляемое событиями. Простейшее приложение Windows.
- •Окна в Windows. Функции окна. Класс окна.
- •Обработка сообщений. Приложение с обработкой сообщений.
- •Вывод текста в окно. Контекст отображения.
- •Стили окна. Приложение, использующее предопределенные в Windows стили окна.
- •Работа с файлами в Windows.
Процессы и потоки.
Для каждого процесса ОС выделяет необходимые ресурсы, и он выполняется на отдельной виртуальной машине.
Средства защиты системы обеспечивают невмешательство одного процесса в другой. Для каждого процесса ОС выделяет свое адресное пространство. Термин «мультизадачность» применим в тех случаях, когда необходимо обеспечить взаимодействие между вычислениями. Мультизадачность позволяет задействовать внутренний параллелизм, который реализуется в самих процессах.
Например, если программные модули выполняют медленные операции ввода/вывода, то выделив их в виде самостоятельного подпроцесса, можно значительно ускорить вычисления.
ОС реализует такой механизм в виде нитей или потоков.
Понятие потока введено для того, чтобы распределять процессор. При этом другие вычислительные ресурсы не затрагиваются. Каждый процесс состоит из одного потока. Все потоки одного процесса выполняются в одном адресном пространстве, поэтому между ними можно организовать взаимодействие. При этом за распределение ресурсов между потоками отвечает программист. Для этих целей используются такие средства синхронизации потоков, как критические секции, семафоры и мьютексы.
Создание процесса:
STARTUINFO si = {sizeof(si)};
PROCESS_INFORMATION po;
TCHAR CommandLine[] = TEXT(“NOTEPAD.exe”);
CreateProcess(NULL, CommandLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
Void ExitProcess(UINT code); //освобождает системные ресурсы, но память под объекты, созданная в //процессе, не освобождается. Либо процесс сам завершается после выполнения.
BOOL TerminateProcess(HANDLE, UINT); //ресурсы не освобождаются.
Функции потока. Поток начинает выполнение некоторой функции. В первичном потоке это WIN MAIN, во вторичном нужно определить функцию потока:
DWORD WINAPI ThreadFunc(PVOID pvParam) { DWORD dwResult = 0;
return(dwResult); }
Создание потока:
HANDLE CreateThread( PSECURITY_ATTRIBUTES psa, DWORD cbStack, PTHREAD_START_ROUTINE pfnStartAddr, PVOID pvParam, DWORD fdwCreate, PDWORD pdwThreadID);
Завершение потока:
VOID ExitThread(DWORD dwExitCоde);
BOOL TerminateThread( HANDLE hThread, DWORD dwExitCode);
Алгоритмы синхронизации потоков. Критическая секция.
Алгоритмы синхронизации потоков – семафоры, мьютексы и критические секции.
Синхронизация в пользовательском режиме:
Критическая секция – это часть программы, в которой код получает доступ к разделяемым ресурсам. Для того, чтобы исключить эффект гонок по отношению к ресурсу необходимо, чтобы только один процесс мог находиться в своей критической секции, т.е. критическая секция должна выполняться как атомарная операция. При создании критической секции используется тип:
CRITICAL_SECTION s;
При входе в критическую секцию поток должен вызвать функцию
EnterCriticalSection(& s);
…
При выходе из критической секции – функцию:
LeaveCriticalSection(& s);
Простейшая реализация критической секции с помощью запрета прерывания. Использование критической секции не исключает взаимной блокировки процессов (это недостаток). Реализация в пользовательском режиме выполняется достаточно быстро, но недостатком является активное ожидание потоков, когда они проверяют свои условия входа в критические секции и тратят впустую процессорное время.
