Страница: 7/18
Когда есть только один процессор, довольно просто сохранять описание уровней прерывания и масок, контролирующих доступ к структурам данных ОС. С добавлением каждого нового процессора эта задача становится все более трудной. Операционная система для SMP-платформы должна уточнить, что только один процессор в данный момент выполняет сегмент кода, который меняет глобальную структуру данных.
В системе с одним процессором маскированное прерывание предотвращает использование процессором ресурса. Но в SMP-среде этот механизм не дает возможности гарантировать, что различные процессы не будут иметь доступа к тому же самому ресурсу через другое прерывание.
В SMP ОС целесообразно использовать метод взаимоблокировки для управления прерываниями между процессорами. По сути, взаимоблокировка является программной процедурой, которая блокирует доступ второго процессора к уже занятому ресурсу. Например, когда ядро хочет получить доступ к защищенной области, такой как очередь отложенных вызовов процедур, оно должно "приобрести" замок, который связан с очередью. Если замок находится в распоряжении какого-либо процессора, то другой процессор пытается получить замок до тех пор, пока его не освободит другой процессор.
Такой метод позволяет предотвратить порчу процессорами глобальных структур данных на уровне ядра. Однако при непродуманной реализации, он может привести к тому, что процессоры будут бездействовать в течение длительного периода, ожидая освободившийся замок. Этот метод хорошо работает, когда выполняются небольшие фрагменты кода. Такой код наиболее часто используется в функциях ядра, которые не вызывают внешние процедуры, не вытесняются из памяти и не генерируют прерываний. Таким образом, во многих случаях взаимоблокировка не действует, в то время как ядро должно синхронизировать нити между процессорами.
Ядро также может управлять нитью, назначая ей одно из трех состояний: готова, выполняется или ждет. Когда нить ждет результатов запроса, ядро изменяет состояние нити с "выполняется" на "ждет" и удаляет ее из очереди на выполнение. После того как нить получила ожидаемую ею информацию, ядро изменяет состояние нити с "ждет" на "готова" и возвращает ее в очередь. Нить выполняется, когда появляется возможность.
Хотя это объяснение поверхностно, оно все же показывает, насколько сложным для операционной системы оказывается управление синхронизацией нескольких процессов. По мере добавления новых процессоров к системе накладные расходы на управление конфликтами возрастают, и это уменьшает отдачу от ОС, ориентированных на симметрично-многопроцессорную обработку.
3.2 Нити (threads)
Понятие "легковесного процесса" (light-weight process), или, как принято называть его в современных вариантах ОС, "thread" (нить, поток управления) давно известно в области операционных систем. Интуитивно понятно, что концепции виртуальной памяти и потока команд, выполняющегося в этой виртуальной памяти, в принципе, ортогональны. Ни из чего не следует, что одной виртуальной памяти должен соответствовать один и только один поток управления. Поэтому, например, в ОС Multics допускалось (и являлось принятой практикой) иметь произвольное количество процессов, выполняемых в общей (разделяемой) виртуальной памяти.
Понятно, что если несколько процессов совместно пользуются некоторыми ресурсами, то при доступе к этим ресурсам они должны синхронизироваться (например, с использованием семафоров, см. раздел “Семафоры”). Многолетний опыт программирования с использованием явных примитивов синхронизации показал, что этот стиль "параллельного" программирования порождает серьезные проблемы при написании, отладке и сопровождении программ (наиболее трудно обнаруживаемые ошибки в программах обычно связаны с синхронизацией). Это явилось одной из причин того, что в традиционных вариантах ОС понятие процесса жестко связывалось с понятием отдельной и недоступной для других процессов виртуальной памяти. Каждый процесс был защищен ядром операционной системы от неконтролируемого вмешательства других процессов. Многие годы это считалось одним из основных достоинств системы (впрочем, это мнение существует и сегодня).
Реферат опубликован: 6/09/2006