Цитата: Поверонов от 10.08.2019 20:48:54Насколько помнится проблема ОС РВ была в том что там мог быть только один критический процесс, то есть если он включился то все прочие будут ждать. Наверное нынче эта проблема разрешима числом ядер в процессоре , то есть критических процессов может быть по числу ядер ( -1 на обработчик прерываний )
Нет никаких критических процессов – есть критические участки кода (критические секции), которые могут выполняться атомарно. Максимум, что может сделать любая ОС для секции критического кода – это не прерывать процесс по таймеру планировщика при вытесняющей многозадачности, пока процесс в критической секции. Как правило, пользовательский процесс, например, обработчик верхнего уровня, самостоятельно заботится о своих критических секциях, используя некоторые соглашения, которые должны соблюдать все процессы в системе. В результате никакой необходимости в услугах ОС для поддержки критических секций не требуется – это прерогатива алгоритмов синхронизации, а не ОС. В принципе, процесс может "известить" ОС о входе в КС и выходе из нее, установив какой-нибудь флаг, а ОС, получив прерывание по таймеру может проверить состояние флага и прерывание проигнорить.
Внешние события прерывают критическую секцию, если их приоритет выше и контроллер прерываний "пропускает" запрос процессору/ядру и прерывания разрешены.
Количество же процессоров и/или ядер принципиально ни на что не влияет, кроме усложнения кода ОС.
Преимущества многоядерной оархитектуры проявляются только в тяжело нагруженных системах – в этом случае обработку запросов можно выполнять параллельно. Например, колупаться в сетевых пакетах на маршрутизаторе