THIS SECTION IS UNDER CONSTRUCTION
Структура нити - что она в себе содержит? Контекст (регистры процессора) Состояние нити TID (Thread ID) PID (Process ID которому принадлежит нить) Wait Status Список объектов которые нить ждет Счетчик критических секций Localization info Время проведенное в режиме ядра Время проведенное в пользовательском режиме Стартовый адресс нити TO BE CONTINUED
Пседопараллелизм (на одном CPU) Мультипроцессор Многозадачность
Многозадачность Кооперативная программа сама вызывает функцию смены задачи Yield() или GetNextEvent() [Win16] Вытесняющая (preemptive) по таймеру снимают задачу когда она выработает свой квант времени
Контекст нити/процесса (зависит от терминологии в OS) Регистры (IP, stack, GPR, Flags) Virtual Memory control registers Варианты уменьшить размер контекста TS флаг в x86 Смена контекста - дорогая операция Почему у MMX регистры теже что и в FP? Из-за контекста У каждой нити свой stack Контекст нити
Состояния нитей New Ready Running Wait (Blocked) Ready+Paused Wait+Paused Terminating Состояния нити
Процессы и потоки
Планировщик
Большинство задач не доживают свой квант Перепланировка
Перепланировка
Планировщики с приоритетами Классы планирования Real-Time Shared-Time Планировка с приоритетами
Динамическая приоритезация для Shared-Time: Повышение приоритета задачам которые зависли на вводе/выводе или на подкачке. Снижение приоритета задачам отработавшим полный квант
Потоки в пространстве пользователя в ядре смешанные Стратегии планирования
Задачи:
FCFS (First Come First Serving): FCFS
Обрабатываются в том порядке в каком поступили Проблемы: Длинные задания задерживают всех кто дальше в очереди
RR (Round Robin): RR
Каждый процесс получает фиксированный временной слот *квант* Ротация между готовыми процессами Выбор кванта Слишком короткий - много времени уходит на смену контекста Слишком длинный - медленный ответ на интерактивные запросы типичный размер кванта 10-100 ms SRR (Selfish Round Robin):
FB (FeedBack): FB
ExpFB:
SPN (Shortest Process Next): SPN
иногда называют SJF (Shortest Job First) Версия для вытесняющей многозадочности: SRTF (Shortest Remaining Time First) Проблемы: как узнать кто более короткий
Каждому процессу дают лотерейные билеты Каждый квант генерирует номер билета Процесс получает n/m, где n - кол-во тикетов у процесса, m-общее число тикетов (Процессы могут обмениваться тикетами) (Клиеты могут передавать серверу) Lottery
Процессам присваиваются приоритеты Например у одного usera - приоритет 40%, у другово 20%, Машинное время будет делиться между ними согласно приоритетам Policy