Лекции по операционным системам (1114687), страница 11
Текст из файла (страница 11)
-
Системный стек.
Но у данного подхода есть и недостаток. Поскольку стек располагается в оперативной памяти, то при каждой обработке прерывания процессору придется обращаться к оперативной памяти, что сильно снижает производительность системы при частых возникновениях прерываний. Решений может быть несколько (Рис. 49.). Во-первых, в процессоре могут использоваться специальные регистры, исполняющие роль буфера, аккумулирующего вершину стека непосредственно в процессоре. Во-вторых, работу со стеком можно организовать посредством буферизации в КЭШе первого уровня (L1).
1.2.6.5Виртуальная память
Следующий аппарат компьютера, который также сильно связан с поддержкой программного обеспечения, — это аппарат виртуальной памяти. Что понимается под виртуальной памятью и виртуальным адресным пространством? Неформально виртуальное адресное пространство можно определить как то адресное пространство, которое используется внутри программ (написанных, например, на языках программирования высокого уровня). Ведь когда программист пишет программу, оперируя теми или иными адресами, он зачастую не задумывается, где реально будут размещены, к каким физическим адресам привязаны. Виртуальные адреса существуют «вне машины». Соответственно, стоит проблема привязки виртуального адресного пространства физической памяти. И эта проблема решается за счет аппарата виртуальной памяти.
Итак, аппарат виртуальной памяти — это аппаратные средства компьютера, обеспечивающие преобразование (установление соответствия) программных адресов, используемых в программе, адресам физической памяти, в которой размещена программа при выполнении. И реализацией одной из моделей аппарата виртуальной памяти является аппарат базирования адресов.
Механизм базирования адресов основан на двоякой интерпретации получаемых в ходе выполнения программы исполнительных адресов (Aисп.прог.). С одной стороны, его можно интерпретировать как абсолютный исполнительный адрес, когда физический адрес в некотором смысле соответствует исполнительному адресу программы (Aисп.физ.= Aисп.прог.). Например, требуется «прочитать ячейку с адресом (абсолютным адресом) 0», или «передать управление по адресу входа в обработчик прерывания». С другой стороны, исполнительный адрес программы можно проинтерпретировать как относительный адрес, т.е. адрес, зависящий от места дислокации программы в ОЗУ. Иными словами, имеется оперативная память с ячейками с номерами от 0 до некоторого A–1, и, начиная с некоторого адреса K, расположена программа. Тогда адрес Aисп.прог. внутри программы можно трактовать, как отступ от физической ячейки с адресом K на величину Aисп.прог.. Для реализации модели базирования используется специальный регистр базы, в который в момент загрузки процесса в оперативную память операционная система записывает начальный адрес загрузки (т.е. K). Тогда реальный физический адрес получается, исходя из формулы Aисп.физ.= Aисп.прог.+<Rбазы>.
Аппарат базирования позволяет разрешить проблему перемещаемости программ по ОЗУ, поскольку процесс можно загрузить в любую область памяти. Но при этом необходимо помнить, что программа представляется в виде непрерывной области виртуальной памяти, которая загружается в непрерывный фрагмент физической памяти.
Развитием аппарата виртуальной памяти является аппарат страничной организации памяти. Ниже мы рассмотрим модельный сильно упрощенный пример страничной памяти. Данная модель представляет все адресное пространство оперативной памяти в виде последовательности страниц. Страница — это область адресного пространства фиксированного размера: обычно размер страницы кратен степени двойки, будем считать, что размер страницы 2k. Тогда все адресное пространство представимо в виде последовательности страниц (нулевая, первая и т.д.). Сказанное означает, что структура адреса представима в виде двух полей (Рис. 50.): правые k разрядов представляют адрес внутри страницы, а оставшиеся разряды отвечают за номер страницы. Тогда количество страниц в системе ограничено разрядностью поля «Номер страницы».
-
Страничная организация памяти.
В центральном процессоре имеется аппаратная таблица, называемая таблицей страниц, предназначенная для следующих целей. Количество строк в этой таблице определяется максимальным числом виртуальных страниц, ограниченное схемами работы процессора и максимальной адресной разрядностью процессора. Каждой виртуальной странице ставится в соответствие строка таблицы страниц с тем же номером (нулевой странице соответствует нулевая строка, и т.п.). Внутри каждой записи таблицы страниц находится номер физической страницы, в которой размещается соответствующая виртуальная страница программы. Соответственно, аппарат виртуальной страничной памяти позволяет автоматически (т.е. аппаратно) преобразовывать номер виртуальной страницы на номер физической страницы посредством обращения к таблице страниц (Рис. 51.). Программных действий при таком подходе требуется минимально: при выборе операционной системой очередного процесса, который ставится на обработку на центральный процессор, она должна лишь корректно заполнить аппаратную таблицу страниц процессора для данного процесса.
-
Страничная организация памяти. Преобразование виртуального адреса в физический.
Типовая схема преобразования адресов достаточно проста (Рис. 52.). Пускай в таблице страниц имеется N строк. Это означает, что в компьютере дозволено использовать N страниц. Содержимое каждой i-ой строки таблицы — αi, оно определяется операционной системой в момент запуска процесса. Пускай в нашем модельном примере если αi >= 0, то это номер физической страницы, которая соответствует i-ой виртуальной странице. Если αi < 0, то это означает, что данной страницы у программы нет, и если в ходе обработки процесса процессор обращается к строке таблицы страниц с отрицательным содержимым, происходит прерывание по защите памяти. Причин возникновения прерывания в данном случае может две. Во-первых, может оказаться, что действительно i-ой виртуальной страницы у программы нет, что свидетельствует об ошибке в программе. Во-вторых, может оказаться, что соответствующей страницы нет в оперативной памяти, она расположена на внешнем запоминающем устройстве (ВЗУ), т.е. данная i-ая виртуальная страница легальна, но в данный момент ее нет в ОЗУ. Так или иначе, операционная система анализирует причину возникновения прерывания и для последнего случая осуществляет подкачку из ВЗУ в ОЗУ требуемой страницы.
Отметим, что страничная организация памяти решает все вышеперечисленные проблемы, связанные с выполнением программ. Здесь имеется механизм защиты памяти (в этой схеме процесс никогда не сможет обратиться к «чужой» странице), но также имеется возможность разделять некоторые страницы между несколькими процессами (в этом случае операционная система каждому из процессов допишет в таблицу страниц номер общей страницы). Данная схема обладает достаточной производительностью, поскольку ее функционирование построено на использовании регистров. Также данный подход решает проблему фрагментации, поскольку все программы оперируют в терминах страниц (каждая из которых имеет фиксированный размер). Помимо этого решается еще и проблема перемещаемости программ по ОЗУ, причем даже в рамках одной программы соответствие между виртуальными и физическими страницами может оказаться произвольным: ее нулевая виртуальная страница может располагаться в одной физической странице, первая виртуальная — в другой (совершенно не связанной с первой) физической странице, и т.д. Еще одним важным достоинством страничной организации памяти заключается в том, что нет необходимости держать в оперативной памяти весь исполняемый процесс. Реально в ОЗУ может находиться лишь незначительное число страниц, в которых расположены команды и требуемые для текущих вычислений операндов, а все оставшиеся страницы могут находиться на внешней памяти — в областях подкачки. Как следствие только что сказанного является то, что размеры физической и виртуальной памяти могут быть произвольными. Может оказаться, что физической памяти в компьютере больше, чем размеры адресного пространства виртуальной памяти, а может оказаться и наоборот: физической памяти существенно меньше виртуальной. Но во всех этих случаях система окажется работоспособной.
-
Страничная организация памяти. Схема преобразования адресов.
Но данный подход имеет и свои недостатки. Во-первых, это страничная фрагментация, или внутренняя (скрытая) фрагментация: если в странице используется хотя бы один байт, то вся страница отводится процессу (т.е., решив вопрос с т.н. внешней фрагментацией, в указанном случае не используется память, размером со страницу минус один байт). К тому же описанная выше модель является вырожденной: если таблица страниц целиком располагается на регистровой памяти, то в силу дороговизны последней размеры подобной таблицы будут слишком малы (а следовательно, будет невелико количество физических страниц). Реальные современные системы имеют более сложную логическую организацию, и речь о ней пойдет ниже.
Напоследок заметим, что данное нами определение аппарата виртуальной памяти расходится с определениями некоторых других источников. Повторим, что мы рассматриваем механизм виртуальной памяти как механизм преобразования виртуального адресного пространства в физическое. Во многих изданиях, посвященных рассмотрению операционных систем, виртуальной памятью считается то, что позволяет часть программы размещать на внешних устройствах, т.е. считают механизм виртуальной памяти как средство увеличения объема физической памяти. Мы считаем такое определение некорректным. Если рассматривать, например, виртуальную память как механизм увеличения объема, то возникает вопрос: в случае большого объема физической памяти разве виртуальная память отсутствует? Соответственно, возникают проблемы с подобным определением.
И еще одно важное замечание. В компьютере имеется физическое адресное пространство и виртуальное. Физическое пространство — это та оперативная память, которая физически может быть подключена к компьютеру, а виртуальное адресное пространство — это то пространство, которое доступно программе. И возникает вопрос, что и каким способом задает максимальные размеры этих адресных пространств. На размер виртуального адресного пространства влияет разрядность исполнительных адресов, получаемых в ходе обработки программы на центральном процессоре. Размеры физического пространства определяется характеристикой компьютера: зависит от того, сколько физически можно подключить памяти к машине, и какова разрядность внутренней аппаратной шины. Но и то, и другое являются аппаратными характеристиками компьютера.
1.2.7Многомашинные, многопроцессорные ассоциации
В настоящее время одиночный компьютер можно сравнить с телефонным аппаратом без телефонной сети. Т.е., говоря об ЭВМ, мы подразумеваем машину в некотором окружении и взаимодействии с другими машинами. В зависимости от степени интегрированности машин в рамках одного комплекса различают многопроцессорные ассоциации, где степень связанности машин довольно велика, и многомашинные ассоциации, в которых наблюдаются слабые связи между машинами (в некоторых случаях говорят о сетях ЭВМ).
Начиная данную тему, мы, следуя традиционному научному подходу, сначала рассмотрим классификацию — это позволит выявить среди большого разнообразия машинных ассоциаций группы с идентичными свойствами, которые помогут нам познакомиться с наиболее общими подходами, абстрагируясь от деталей реализации.
Для классификации существуют множество методов, проводящих деление по различным характеристикам (например, по производительности). Одна из наиболее простых классических классификаций — это классификация по Флинну (M.Flynn), основанная на оценке некоторых характеристик потоков информации в машине.
В контексте машины можно выделить два потока информации: поток управления (для передачи управляющих воздействий на конкретное устройство) и поток данных (циркулирующий между оперативной памятью и внешними устройствами). Возможны некоторые оптимизации данных потоков. В потоке команд — это переход от команд низкого уровня к высокоуровневым (когда ЦП вместо работы с микрокомандами начинает вырабатывать высокоуровневые команды, которые передаются «умному» устройству управления, непосредственно реализующему данные команды); в потоке данных — это исключение участия ЦП в обменах между внешними устройствами и оперативной памятью.
В классификации по Флинну выделяют следующие четыре архитектуры:
-
ОКОД (одиночный поток команд, одиночный поток данных, или SISD — single instruction, single data stream) — это традиционная однопроцессорная система (близкая машине фон Неймана).
-
ОКМД (одиночный поток команд, множественный поток данных, или SIMD — single instruction, multiple data stream) — например, векторные компьютеры, способные оперировать векторами данных. Обычно для этих целей в данных машинах существуют векторные регистры, а также обычно имеются векторные операции, предполагающие векторную обработку.
-
МКОД (множественный поток команд, одиночный поток данных, или MISD — multiple instruction, single data stream) — данный класс архитектур является спорным. Существуют различные точки зрения о существовании каких-либо систем данного класса, и если таковые имеются, то какие именно. В некотором смысле сюда можно отнести специализированные системы обработки видео- и аудиоинформации, а также конвейерные системы.
-
МКМД (множественный поток команд, множественный поток данных, или MIMD — multiple instruction, multiple data stream) — это системы, которые содержат не менее двух устройств управления (это может быть один сложный процессор с множеством устройств управления). На сегодняшний день данная категория во многом определяет свойства и характеристики многопроцессорных и параллельных вычислительных систем.
Среди систем МКМД можно выделить два подкласса: системы с общей оперативной памятью и системы с распределенной памятью (Рис. 53.). Для систем первого типа характерно то, что любой процессор имеет непосредственный доступ к любой ячейке этой общей оперативной памяти. Слово «непосредственно» означает, что любой адрес может появляться в произвольной команде в любом из устройств управления. Системы с распределенной памятью представляют собою обычно объединение компьютерных узлов. Под узлом понимается самостоятельный процессор со своей локальной оперативной памятью. В данных системах любой процессор не может произвольно обращаться к памяти другого процессора. Указанные системы иллюстрируют противоположные подходы, на практике обычно встречаются промежуточные решения.
-
Классификация МКМД.
Рассмотрение систем с общей оперативной памятью начнем с UMA. UMA (uniform memory access) — система с однородным доступом в память. В данной модели произвольный процессорный элемент имеет доступ к произвольной точке оперативной памяти (доступ с одинаковым временем). Развитием архитектуры UMA стала модель SMP (symmetric multiprocessor — симметричная мультипроцессорная система). В этой модели (Рис. 54.) к общей системной шине, или магистрали, подсоединяются несколько процессоров и блок общей оперативной памяти. У данного решения можно отметить следующие недостатки. Во-первых, это централизованная система, и шина в ней является «узким горлом», поэтому данная модель накладывает существенные ограничения на количество подключаемых процессоров (обычно 2, 4, 8, вплоть до 32). Во-вторых, возникают дополнительные проблемы с КЭШ первого уровня каждого процессора. Решений тут как минимум два: либо не использовать КЭШ, либо реализовать КЭШ-память со слежением. В последнем случае каждый КЭШ слушает шину и реагирует на ситуацию в системе. Различные ситуации приведены в следующей таблице:
Действия локального КЭШа (в том ЦП, где выполняется операцию) | Действия «внешнего КЭШа» (на других процессорах) | |
R– | M → C | ничего |
R+ | USE C | ничего |
W– | → M | ничего |
W+ | → C | соответствующая запись из КЭШа будет удалена |
Замечание. При промахе по записи производится только обновление памяти, т.к. реализуется стратегия, ориентированная на преимущественное чтение.
-
SMP-система.
Иной подход к реализации систем с общей оперативной памятью предлагает архитектура NUMA (non-uniform memory access — система с неоднородным доступом в память). Для данных систем (Рис. 55.) характерны следующие свойства:
-
общее адресное пространство;
-
характеристики доступа процессора к области оперативной памяти зависит от того, к каким областям идет обращение.
Модификацией модели NUMA является модель ccNUMA (Cache coherent NUMA) — это NUMA-система с когерентными КЭШами. Данные системы позволяют подключать несколько сотен процессоров, но остаются ограничения, связанные с использованием системной шины, а также возникают ограничения, связанные с cc-архитектурой: появляются системные потоки служебной информации, что ведет к дополнительным накладным расходам.