- •Классификация системного программного обеспечения
- •Другая классификация
- •Требования к системному программному обеспечению
- •2. Операционная система. Основные функции ос. Структура операционной системы.
- •3. Интерфейс прикладных программ (api) ос. Api Win32 (системные функции).
- •Api операционных систем.
- •Структура api-программ
- •4. Дисковая подсистема в архитектуре ibm pc.
- •5. Низкоуровневая организация дисковой памяти. Сервис bios доступа к дисковой подсистеме.
- •Емкость Диска
- •Оглавление Диска (Каталог)
- •Основные Положения На Память
- •6. Понятие файловой системы. Назначение, требования, функции. Способы организации фс.
- •7. Объекты файловой системы: файлы, директории, логические устройства, другие виды объектов. Файловая система
- •Имена файлов
- •Типы файлов
- •Логическая организация файла
- •Физическая организация и адрес файла
- •Права доступа к файлу
- •Кэширование диска
- •Общая модель файловой системы
- •Отображаемые в память файлы
- •Современные архитектуры файловых систем
- •8. Файловые системы на основе fat (либо по желанию ntfs, s5fs, ufs, ext и т.Д.).
- •9. Служебные структуры файловых систем fat и их использование.
- •1.3.2. Файловые системы
- •Файловая система fat Краткие теоретические сведения
- •Обзор файловой системы fat
- •Имена файлов в fat
- •Преимущества файловой системы fat
- •Недостатки файловой системы fat
- •Обзор файловой системы hpfs
- •Суперблок
- •Запасной блок
- •Преимущества файловой системы hpfs
- •Недостатки файловой системы hpfs
- •Обзор файловой системы ntfs
- •Надежность
- •Дополнительные функции
- •Поддержка posix
- •Устранение ограничений
- •Преимущества файловой системы fat
- •Недостатки файловой системы ntfs
- •Соглашения именования в ntfs
- •10. Программный интерфейс файловой системы (функции для взаимодействия с фс, файлового ввода-вывода) - dos, Win32.
- •12. Вычислительный процесс. Состояния вычислительного процесса.
- •[Править]Создание программ
- •[Править]Использование программ
- •[Править]Правовые аспекты
- •13. Адресное пространство процесса (задачи).
- •20. Адресное пространство процесса
- •14. Приложения Windows (Win 32), разновидности. Структура оконных (windowed) приложений.
- •2. Особенности приложений Win 32.
- •17. Событийное управление в Win32. Сообщения и очереди сообщений Windows (Windows messages): назначение, структура, отсылка, доставка, обработка.
- •18. Цикл обработки сообщений. Оконная процедура: назначение, выполнение, способы активизации и завершения. Краткие теоретические сведения
- •19. Многозадачность, многозадачные операционные системы, особенности выполнения приложений в многозадачной среде.
- •Краткие теоретические сведения поток
- •Краткие теоретические сведения
- •27. Взаимодействие процессов/потоков, взаимное исключение, синхронизация (базовые сведения)
- •Синхронизация субъектов взаимодействия
- •Сравнительная характеристика механизмов взаимодействия
- •33. Графическая подсистема Win32 (gdi) - общая характеристика, основные концепции, объекты (инструменты).
- •Х.1 Общие сведения
- •Х.2 Системы координат и единицы измерения
- •Х.3 Цвета и палитры
- •Х.4 Основные инструменты графической подсистемы
- •Х.4 Растровая графика
- •Х.5 Управление областями вывода и отсечением
- •Х.6 Некоторые аспекты использования графической подсистемы
- •34. Подсистема памяти. Основные задачи, функции, требования. 35. Виртуальное адресное пространство, управление памятью с использованием виртуального адресного пространства.
- •37. Подсистема памяти Win32. Регионы (области) памяти. Группы функций api подсистемы памяти.
- •38. Распределение памяти на уровне менеджера виртуальной памяти (vmm api - Win32). In (35) 3. Архитектура памяти в Win32® api. 3.2. Управление виртуальной памятью. Vmm.
- •39. Отображение файлов в память (File mapping - Win32).
- •4.1 Адресное пространство процесса.
- •4.2 Функции работы с виртуальной памятью.
- •4.3 Проецирование файлов в память
- •4.4.1 Запуск исполняемых файлов и динамически связываемых библиотек
- •4.4.2 Проецирование файлов данных
- •4.4.3 Взаимодействие процессов через общую область данных
- •4.4 Функции работы с кучами (heap-область)
- •4.5 Глобальные и локальные объекты "память"
- •4.6 Функции crt Memory api
- •X.2. Структура подсистемы памяти Win 32 и группы функций
- •40. Системный реестр Windows: назначение, организация, доступ.
Краткие теоретические сведения поток
Поток (Thread) – системный объект, соответствующий последовательности («потоку») команд, выполняемой независимо и асинхронно по отношению к другим подобным последовательностям. Поток – базовый объект, для которого планировщик задач ОС распределяет время центрального процессора. Каждый процесс имеет как минимум один главный (первичный – primary) поток. Главный поток может порождать подчиненные (вторичные) потоки, которые будут выполняться одновременно с ним, равно как и с потоками прочих процессов.
Многопоточность, свойственная Win 32 и ряду других современных ОС, удачно дополняет их многозадачность и существенно повышает гибкость системы. Процесс в Win 32 играет роль владельца ресурсов и «контейнера потоков» планирования ресурсов. Ресурсы процесса доступны всем его потокам, и все потоки одного процесса совместно используют его виртуальное адресное пространство (но каждый поток имеет собственный стек). В то же время процессорное время распределяется именно между потоками, а не между процессами.
Поток может находиться в нескольких состояниях, начиная от его инициализации до завершения, но наибольший интерес представляют следующие:
– выполнение (running) или активность (active) – поток обладает всеми необходимыми ресурсами, включая процессорное время, и выполняется;
– готовность (ready) – поток обладает ресурсами для выполнения, но время ему не выделено, и он ожидает активизации в очереди планировщика;
– ожидание (wait), или заблокированное (blocked), или «спящее» (sleep) – поток не обладает требуемыми ресурсами и не может выполняться, он ожидает выполнения необходимых условий или наступления каких-либо событий.
Например, активный поток переходит в состояние ожидания после обращения к блокирующему системному вызову до его завершения, затем перемещается в очередь планировщика, откуда выбирается для следующей активизации. В простейшем случае переход в состояние ожидания произойдет при выполнении вызова Sleep().
Планировщик задач ОС в рамках принятой в Win 32 модели многозадачности выделяет процессорное время отдельным потокам квантами. Переключение потоков и изменение их состояний происходит по мере израсходования выделенных квантов и в соответствии с приоритетами потоков.
Потоки идентифицируются их описателями (handle), уникальными в рамках одного процесса, и идентификаторами (уникальны в системе). Однако большинство функций работают именно с описателями. Поток всегда сам является обладателем специального локального описателя, поэтому закрытие «внешнего» его описателя не приводит к удалению объекта. Одновременно поток как объект системы не может быть удален даже после прекращения его выполнения, если «внешний» описатель не был закрыт. Неверная работа с описателями может приводить при интенсивном создании и разрушении потоков к заметному накоплению «мусора» и дальнейшим ошибкам.
Новые потоки порождаются из функций потока с помощью вызова CreateThread(). Функция потока – одна из функций головной программы, соответствующая требованиям по типу, параметрам и формату вызова:
DWORD WINAPI ThreadProc( LPVOID pParam)
{
… //действия, выполняемые в потоке
return result;
}
Интерпретации как параметра, так и возвращаемого значения произвольны и зависят от конкретной программы. Например, параметр может быть адресом структуры или просто целым числом (используя приведение типа).
Все операции, выполняемые этой функцией, включая вызовы других подпрограмм, будут выполняться внутри созданного потока. Поток завершается после завершения его функции. Возвращаемое ею значение будет доступно после завершения потока до его окончательного разрушения.
Последним параметром CreateThread() передается указатель на ячейку типа DWORD, куда записывается возвращаемый идентификатор созданного потока. В Window 9x этот указатель не должен быть нулевым. В Windows NT такого ограничения нет.
Уже существующий поток может быть открыт вызовом OpenThread(), для этого необходимо знать его идентификатор.
Для корректного завершения потока служит функция ExitThread(), вызываемая «изнутри» потока, её аргументом является код возврата потока. Фактически результат ничем не отличается от стандартного завершения функции потока. Принудительное завершение потока, в том числе и «извне», возможно с помощью функции TerminateThread(), но при этом глобальные данные и другие ресурсы, с которыми он в этот момент работал, могут остаться в некорректном состоянии. Поэтому предпочтительнее организовать взаимодействие так, чтобы завершение потоков согласовывалось с их текущим состоянием, оптимально – обеспечивалось самим же потоком.
Кроме завершения, поток может быть приостановлен и вновь запущен функциями SuspendThread() и ResumeThread() соответственно. В действительности для потока ведется счетчик, при нулевом значении которого он может выполняться, при ненулевом (положительном) – останавливается. SuspendThread() увеличивает «счетчик остановок», ResumeThread() уменьшает его, но не ниже нулевого значения. Это позволяет делать «вложенные» приостановки потока без риска ошибочно разблокировать его, но требует следить за сбалансированностью приостановок.
Остановленный поток не участвует в планировании выполнения, и его разблокирование зависит только от описанного счетчика.