Курынин Р.В., Машечкин И.В., Терехин А.Н. - Конспект лекций по ОС (1114685), страница 17
Текст из файла (страница 17)
сохранить содержимое тех регистров, которые использовались впрограмме на данном текущем уровне).g:.........CALL f(x).........Сохранение/восстановлениерегистров, используемых вподпрограмме g.Рис. 44.Вложенные обращения к подпрограммам.Накладные расходы при смене обрабатываемой программы.
Это аналогичнаяпроблема, связанная со сменой обрабатываемых программ (или процессов): операционная системадолжна сохранить контексты процессов. К этому необходимо добавить, что в современныхкомпьютерах количество одновременно обрабатываемых процессов очень велико, что лишьувеличивает объем возникающих накладных расходов.Перемещаемость программы по ОЗУ (1.2.6.2).
Рассмотрим процесс полученияисполняемого кода программы. После того, как исходный текст программы попадает на входкомпилятору, образуется объектный модуль. А уже из пользовательских модулей и библиотечныхформируется исполняемый код, т.е.
тот модуль, который можно загрузить в оперативную память иначать его исполнять, причем момент создания исполняемого модуля и момент запуска его наисполнение разнесены во времени. Исторически первые исполняемые модули настраивались на теадреса оперативной памяти, в рамках которых он должен был исполняться. Это означает, что еслипамять в данный момент занята другой программой, то эту программу поставить на счет неудастся (пока память не освободится). И, соответственно, возникает проблема перемещаемостипрограммы по ОЗУ: ресурс свободной памяти в ОЗУ может быть достаточно большим, чтобы вней разместилась вновь запускаемая программа, но в силу привязки каждой программы кконкретным адресам ОЗУ эту программу запустить не удается.57Буфер программ,ожидающих началаобработкиОСПрограмма 1Программа 2…Загрузка и началовыполнения…Программа K…Соответствие адресов, используемых в программе, областиОЗУ, в которой будет размещена данная программаРис. 45.Перемещаемость программы по ОЗУ.Фрагментация памяти.
Положим, что предыдущая проблема, связанная сперемещаемостью кода, решена в нашей системе: любой исполняемый модуль может бытьзагружен в произвольное место ОЗУ для дальнейшего выполнения. Но в этом случае возникаетиная проблема.Пускай наша система работает в мультипрограммном режиме. И в начале работы былизапущены на исполнение Программа 1, Программа 2 и т.д., вплоть до некоторого номера K.
Современем некоторые задачи завершаются, а, соответственно, место, занимаемое ими в ОЗУ,высвобождается. Операционная система способна оценивать свободное пространство оперативнойпамяти и из буфера программ, готовых к исполнению, выбрать ту программу, которая можетпоместиться в свободный фрагмент памяти. Но зачастую размер загружаемой программынесколько меньше того фрагмента, который был свободен. И постепенно проявляется т.н.проблема фрагментации оперативной памяти (1.2.6.2). В некоторый момент может оказаться,что в ОЗУ находится несколько процессов, между которыми имеются фрагменты свободнойпамяти, каждый из которых не достаточен для того, чтобы загрузить какую-либо готовую кисполнению программу. Но количество подобных фрагментов может быть настолько большим,что суммарно свободное пространство ОЗУ позволил бы разместить в нем хотя бы один готовый кисполнению процесс.
Таким образом, система начинает деградировать: имея ресурс свободнойпамяти, мы не можем его использовать, а это означает, что система используется в усеченномкачестве.Буфер программ,ожидающих началаобработкиОСПрограмма N11V1своб.Программа N22Программа 1V1прог.Программа 2V2прог.V2своб.несмотря на то, что ∃i:…Программа KKПроблема фрагментации:Viпрог. > Vjсвоб. , ∀i, j,VKсвоб.⇒ деградация системы…Программа LVLпрог.Рис. 46.Фрагментация памяти.58После того, как мы указали основные проблемы, возникающие при исполнении программ,рассмотрим, как эти проблемы могут решаться.1.2.6.3Регистровые окнаОдно из более или менее новых решений, предназначенное для минимизации накладныхрасходов, связанных с обращениями к подпрограммам, основано на использовании в современныхпроцессорах т.н.
регистровых окон (register windows). Суть этого решения заключается вследующем (1.2.6.3). В процессоре имеется некоторое количество K физических регистров,предназначенных для использования в пользовательских программах. Эти регистрыпронумерованы от 0 до K–1. Также имеется понятие регистрового окна — это набор регистров, поколичеству меньший K, который в каждый момент времени доступен для программыпользователя.
Соответственно, эти K физических регистров разделяются на регистровые окнанекоторым способом. Один из способов предполагает, что с нулевого физического регистраначинается нулевое физическое окно, причем в этом нулевом физическом окне программепользователя доступны физические регистры с номерами от 0 до L–1. Первое физическое окнопредставляет собою очередные L регистров, которые внутри окна также имеют нумерацию от 0 доL–1, но в реальности им соответствуют физические регистры с номерами, начинающимися с L–1.Т.е. окна организованы таким способом, что последний регистр предыдущего окна отображаетсяна тот же физический регистр, что и нулевой регистр следующего окна.Итак, имеющиеся K физических регистров разбиты на N окон, в каждом из которыхрегистры имеют номера от 0 до L–1. Соответственно, в системе организована логика такимспособом, что все окна расположены в циклическом списке: нулевое окно пересекается с первым,первое — со вторым, и так далее, вплоть до N–1-ого окна, которое пересекается снова с нулевым.Также в системе имеется команда смены окна.
Соответственно, при обращении к подпрограммечерез пересекающиеся точки передаются адреса возвратов, а внутри окна можно работать срегистрами, причем при обращении к подпрограмме не встает необходимость их сохранения.Считается, что достигается эффект оптимизации при четырех окнах, что означает, что среднийуровень вложенности подпрограмм не более четырех. Недостатком такого решения являетсяфиксированный размер каждого окна, что на практике часто оказывается неоптимальным (т.к.иногда требуется больше регистров, иногда — меньше). Ниже на 1.2.6.3 приведены схемы работыс регистровыми окнами.59000Окно 0Окно 1L–1…L–10Окно N–1Окно 0CWP — указательтекущего окна (currentwindow pointer)SWP — указательсохраненного окна(saved window pointer)L–1Окно 1…Окно N–10K–1L–1МножествофизическихрегистровВиртуальные регистрыРис. 47.Регистровые окна.При вызовеподпрограммыПри выходе изподпрограммыCWP = (CWP + 1) % NCWP == SWPCWP = (CWP – 1 + N) % Nнет(CWP+1)%N == SWPданетдаПрерываниеПрерываниеОткачка окна SWP впамятьВосстановление окна(CWP + 1) % NSWP = (SWP++) % NЕсли еще есть сохраненные окнаSWP = (SWP–1+N) % NИспользование окна CWP,вызов функцииИспользование окна CWP, вызовфункцииРис.
48.Регистровые окна. Вход и выход из подпрограммы.Модель организации регистровой памяти в Intel Itanium. В современных компьютерахимеется возможность варьирования размера регистрового окна. В частности, в 64-разрядных60процессорах Itanium компании Intel размер окна динамический. В данном процессоре врегистровом файле первые 32 регистра (с номерами от 0 до 31) являются общими, а на регистрах сномерами от 32 по 127 организуются регистровые окна, причем окно может быть произвольногоразмера (например, от 32-ого регистра до регистра с номером 32+N, где N=0..95).
Такаяорганизация позволяет оптимизировать работу с точки зрения входов-выходов из функций изамены функциональных контекстов.1.2.6.4Системный стекБудем рассматривать системы, в которых имеется аппаратная поддержка стека. Этоозначает, что имеется регистр, который ссылается на вершину стека, и есть некоторый механизм,который поддерживает работу со стеком. Системный стек может применяться для оптимизацииработ, связанных со сменой контекстов программ. В частности, этот механизм можетиспользоваться при обработке прерывания: если в системе возникает прерывание, процессорпросто скидывает в стек содержимое необходимых регистров. Если же возникнет второепрерывание, то процессор поверх предыдущих данных скинет в стек новое содержимое регистров,чтобы обработать вновь пришедшее прерывание.Регистровый буфер (специальныерегистры или КЭШ L1)Вершина стекаSP (указатель стека)Оперативная памятьКоманды работы со стеком:PUSH — добавить новыйэлемент.POP — изъять элемент извершины стекаОснование стекаРис.
49.Системный стек.Но у данного подхода есть и недостаток. Поскольку стек располагается в оперативнойпамяти, то при каждой обработке прерывания процессору придется обращаться к оперативнойпамяти, что сильно снижает производительность системы при частых возникновенияхпрерываний. Решений может быть несколько (1.2.6.4).
Во-первых, в процессоре могутиспользоваться специальные регистры, исполняющие роль буфера, аккумулирующего вершинустека непосредственно в процессоре. Во-вторых, работу со стеком можно организоватьпосредством буферизации в КЭШе первого уровня (L1).1.2.6.5Виртуальная памятьСледующий аппарат компьютера, который также сильно связан с поддержкойпрограммного обеспечения, — это аппарат виртуальной памяти. Что понимается подвиртуальной памятью и виртуальным адресным пространством? Неформально виртуальноеадресное пространство можно определить как то адресное пространство, которое используетсявнутри программ (написанных, например, на языках программирования высокого уровня).
Ведькогда программист пишет программу, оперируя теми или иными адресами, он зачастую незадумывается, где реально будут размещены, к каким физическим адресам привязаны.Виртуальные адреса существуют «вне машины». Соответственно, стоит проблема привязки61виртуального адресного пространства физической памяти. И эта проблема решается за счетаппарата виртуальной памяти.Итак, аппарат виртуальной памяти — это аппаратные средства компьютера,обеспечивающие преобразование (установление соответствия) программных адресов,используемых в программе, адресам физической памяти, в которой размещена программа привыполнении. И реализацией одной из моделей аппарата виртуальной памяти является аппаратбазирования адресов.Механизм базирования адресов основан на двоякой интерпретации получаемых в ходевыполнения программы исполнительных адресов (Aисп.прог.).
С одной стороны, его можноинтерпретировать как абсолютный исполнительный адрес, когда физический адрес в некоторомсмысле соответствует исполнительному адресу программы (Aисп.физ.= Aисп.прог.). Например, требуется«прочитать ячейку с адресом (абсолютным адресом) 0», или «передать управление по адресувхода в обработчик прерывания».