2.2.3 Обработка и многопроцессорная обработка

Процесс это исполняемый экземпляр приложения. Несколько процессов можно одновременно запустить либо на одном процессоре, либо на нескольких процессорах. Под многозадачностью (Multitasking) понимают способность ОС разделять ресурсы одного процессора между несколькими процессами. В задачи ядра входит синхронизация процессов и обеспечение эксклюзивного использования ресурса. Если компьютер содержит несколько процессор, либо в процессоре несколько ядер, можно запустить разные процессы на разных процессорах или ядрах. В случае многозадачности появляется иллюзия того, что несколко приложений работают одновременно, но в случае многопроцессорной обработки (многопроцессорности, Multiprocessing) именно так и происходит - разные процессы запущены на разных процессорах или ядрах.
Многопроцессорная система может быть:
- Симметричной (SMP - Symmetric Multiprocessing) - все имеющиеся в системе процессоры равны, и на них можно в равной степени запускать все приложения. Все процессоры соединены одной шиной и делят между собой основную память и ресурсы ввода/вывода.
- Ассиметричной (AMP / Asymmetric Multiprocessing) - один процессор выделен под ядро ОС, а остальные предназначены для запуска пользовательских приложений.
Особой разновидностью многопроцессорной системы является гипер-поточная система (Hyper-Threading). Разработчиком этой технологии является Intel, и она позволяет разделить один физический процессор на несколько логических. Логические процессоры обладают отдельным набором регистров, но делят исполнительные модули и кэш-память.
ОС, поддерживающая SMP, представляется пользователю как многозадачная ОС с
одним процессором. Разработчики могут создавать приложения не зная о том, будут
ли они запущены на одном или нескольких процессорах. Следовательно, ОС
многопроцессорной обработки должна предоставлять все те же функции, что и
многозадачная ОС, а в дополнение поддержку нескольких процессоров.
Особенности строения такой ОС следующие:
- Поддержка одновременно параллельно работающих процессов: приложения ядра должны позволять запускать код ярда одновременно на разных процессорах. Следует правильно организовывать таблицы и структуры данных ядра, чтобы избежать застопориваний или ошибочных операций.
- Планировщик: нужно избегать конфликтов, когда части одного процесса запускаются на разных процессорах.
- Синхронизация: доступом к ресурсам нужно управлять так, чтобы было обеспечено взаимное исключение.
- Управление памятью: нужно координировать обращения к памяти разных процессоров.
- Устойчивость: при сбое одного процессора ОС должна продолжать работу.