THIS SECTION IS UNDER CONSTRUCTION
ПРОЦЕССЫ Процесс - это в первую очередь владелец ресурсов: памяти объектов (файлов итд)
Структура процесса
Из чего вообще состоят структуры связанные с процессами в современных OS? PID (Process ID) PID родителя Состояние процесса (в общем то всех интересует зомби ли он или нет) Указатели на структуры управления памятью Affinity Mask (показывает на каких процессорах процесс может выполняться) (особенно полезно для архитектур типа ccNUMA). Идеальный процессор для выполнения Класс приоритета процесса (как правило, Idle, Normal, Runtime) Базовый приоритет процесса Размер кванта времени Указатели на дескрипторы файлов Текущий каталог Терминал ассоциированный с процессом Структуры связанные с обработкой внешних событий Для UNIX систем - таблицы обработчиков сигналов и принятые сигналы Для Windows систем - LPC ports (exceptions, debug) Quotes (Ограничения) на размер адрессного пространства процесса на количество процессорного времени на размер стека на размер кучи на количество locked memory максимальный размер рабочего набора процесса Security связанный с процессом Для UNIX систем: Effective UID, Effective GID Для Windows систем: Token доступа Статистика Текущий размер виртуальной памяти используемой процессом Пиковый размер виртуальной памяти используемой процессом Время выполнения в режиме ядра Время выполнения в пользовательском режиме Startup information Имя программного модуля (и/или командная строка) Набор переменных окружения Список нитей процесса
Состояния процесса
Управление реальной памятью Bitmap List Управление физической памятью
Стратегии выделения First fit Next fit Best fit Worst fit Quick fit
Виртуальная память Виртуальная память
Сегментная Селектор.смещение
Страничная Адресс страницы.смещение
Отображение виртуальной памяти в физическую Отображение виртуальной памяти в физическую
Адрессное пространство User Kernel
segment not present page fault
Swapping перемещение moveable сброс кода discardable swappable Зачистка использованных страниц при новом выделении Подкачка
Thrashing
Paged pool Non-paged pool Блокировка страниц (если на них буфер ввода-вывода) Динамическое выделение стека (Win32 implementation)
Page Fault Сбой страницы
Алгоритмы вытеснения страниц Дисциплины вытеснения страниц
FIFO- FIFO
additional reference bit second chance
enhanced second chance
NRU- не использованная в последнее время LRU- LRU
Optimal (Optimal)
Stack
Belady Anomaly
Clock- Clock
Сравнение дисциплин
Рабочий pool процесса prepaging при старте процесса Рабочий pool процесса
Жизненый цикл страницы
бит обращения к странице (accessed) Совмесное использование секций кода (если запущено несколько копий приложения) Разделение между процессами Разделяемая память
Разделение данных и кода
fork() копия адрессного пространства (оптимизация - copy-on-write) vfork() управление возращается родителю только после вызова childом exec() TLS (Thread Local Storage) Memory Mapped Files