Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Виртуальная память




УПРАВЛЕНИЕ ПАМЯТЬЮ

Упражнения

Разработать многопоточную программу, отображающую на экране взаимодействие трех нитей "читателей" из общей области данных и двух "писателей", записывающих в этот буфер данные. Буфер предназначен для хранения 10 символов. Первая нить-писатель выводит в буфер данные в латинском алфавите, вторая нить-писатель выводит в буфер данные в русском алфавите. Такой вывод эти две нити осуществляют в два приема, первый из которых записывает половину своего текста без завершающего этот промежуточный текст нуля. Между такими половинами вывода нити производят задержку на случайную величину миллисекунд, но не более 2 с. После вывода своего текста в буфер каждая нить-писатель переходит в ожидание порядка 2–3 с до следующей попытки записи в буфер. Нити-читатели через случайный интервал порядка 300 мс читают данные из буфера, если это позволяют средства синхронизации доступа между нитями, и выводят прочитанный текст на экран, каждая в свой столбец. Каждый вывод нити-читателя осуществляется в новую строку своего столбца, поэтому суммарные действия вывода в таких нитях предусмотреть только для 20–24 строк. Синхронизацию осуществить с помощью семафоров. (Выполнить два варианта разработки – для Windows и для Linux).

 

Память является важнейшим после процессора ресурсом компьютера. Поэтому ее распределению – в простейших случаях, и управлению – в современных ОС уделяется пристальнейшее внимание.

Оперативная память по своей сущности – физический объект и поэтому существенно зависит от организации работы процессора с памятью. Иначе говоря, непосредственно зависит от особенностей архитектуры процессора. До настоящего времени наибольшее распространение в качестве процессоров компьютеров получили различные модификации процессоров с архитектурой типа Intel386, называемой также архитектурой IA32. Особенностью ее являются 32-битные адреса ячеек памяти, каждая из которых хранит отдельный байт. Таким образом, можно обозначать для автоматического аппаратного доступа (что называется адресовать) 232 = 4 Гбайт памяти. Это составляет около 4 млрд. таких ячеек, точнее 4 294 967 296. Такое огромное количество ячеек памяти редко бывает установлено в большинстве компьютеров, а отражает принципиальную возможность процессора по манипулированию такими ячейками.

Тем не менее, современным многопрограммным компьютерам и такого большого количества оперативной памяти оказывается недостаточно, если выполняется много программ одновременно. Тем более может оказаться недостаточным и тех 256 Мбайт или несколько более того, как было характерно на момент написания пособия. Такая недостаточность оперативной памяти послужила одной из причин конструктивного построения виртуальной памяти. Другой, и более существенной, хотя не столь простой и очевидной причиной явилась необходимость глубокой изоляции программ и данных для различных процессов, одновременно выполняющихся компьютером. Такая изоляция программ и данных, принадлежащих одному процессу, от возможных изменений другим, называется защитой памяти.

Ошибки в прикладной программе без описанной взаимной изоляции приводят к ошибочному функционированию не только самой этой программы, но и любых других программ, одновременно выполняемых с нею. Более того, области оперативной памяти, используемые операционной системой, совершенно необходимо защищать от возможного, в том числе ошибочного доступа со стороны прикладных программ. Все эти соображения привели (еще в 1959 г.) к созданию аппаратно-программных средств виртуальной памяти. Эта память требует глубоко встроенных в аппаратуру процессора внутренних средств, которые в совокупности со служебными структурами данных, создаваемыми и поддерживаемыми программно, создают видимость для отдельной программы полного владения ею всей совокупностью имеющихся ячеек физической памяти. Эта видимость называется также страничной переадресацией.

Чтобы объяснить существо страничной переадресации, используем такой пример. Пусть аналог адресуемой программной ячейки есть адрес "квартиры" в некођорой вымышленной совокупности "домов", расположенных на одной очень длинной "улице". Пѓсђь такие "дома" одинаковые0и имеют0по 1000 "квартир" ё номерами от 0 до 999. На вымышленной улице может находиться до 1000000 таких "домов". Пусть все эти дома пронумерованы числами от 0 до 999999 в их естественном порядке месторасположения вдоль улицы. Тогда естественный физический номер квартиры можно задавать девятизначным десятичным номером, в котором три младшие цифры, в действительности, являются номером квартиры внутри дома (обычная нумерация квартир), а шесть старших цифр – номером дома на этой улице.

Реальный доступ по адресу, как известно, осуществляется не столько путем подсчета последовательной позиции дома вдоль улицы, сколько по адресным табличкам. Значит, принципиально можно развесить адресные таблички с номерами домов в некотором произвольном порядке (лишь бы были средства быстрого поиска по ним.)

Так вот, адресная переадресация в виртуальной памяти аналогична некоторому развешиванию адресных табличек по подобным домам, где функцию развешивания адресных табличек берет на себя операционная система. Причем для каждого вычислительного процесса используется своя подсистема развешивания адресов на аналоги домов, и адресные таблички одного процесса совершенно не видны другому процессу. Условно говоря, адресная табличка с номером 5 для одного процесса обозначает реальный дом (совокупность ячеек), на котором для другого процесса вообще не видно никаких адресных табличек, но для последнего есть свой – другой дом, на котором этому другому процессу видится табличка с номером 5. Добираясь до любой квартиры дома с адресом 5, эти процессы попадают в совершенно различные физические объекты.

Каждому процессу для такой переадресации необходима своя система замены видимых для него адресных табличек на действительные физические места расположения, причем система – незаметная самому процессу. В качестве такой системы не придумано ничего проще, чем таблицы страниц. Страницей в данной переадресации называют аналог дома в нашей вымышленной модели. Номера внутри страницы обеспечивают нумерацию ячеек, находящихся в пределах одной страницы, аналогично номерам квартир внутри дома. Таблица страниц для процесса в общем случае содержит информацию для перехода от номеров страниц, видимых процессу, к номерам реального размещения этих страниц в оперативной памяти. В простейшем, точнее упрощенном случае, строка такой таблицы с номером k содержит всего лишь номер реального размещения этой страницы в оперативной памяти. Когда для нашего примера видимый процессу обобщенный номер квартиры записывается десятичными цифрами как 007345804, то это обозначает квартиру номер 804 в доме с табличкой для процесса, обозначенной 007345. Если в таблице переадресации для данного процесса в строке с номером 007345 стоит число 017421, то в действительности за указанным обобщенным номером стоит квартира 804 в доме с физическим номером расположения 017421, т.е. физический адрес 017421804.

В более ранних компьютерных архитектурах, которые содержали не очень большое число адресуемых в командах ячеек памяти, таблицы переадресации строили непосредственно с числом строк, равным числу возможных страниц. В нашем примере получается, что нужно иметь таблицу переадресации с 1000000 строк. Такая величина для вспомогательной информации даже в современных компьютерах достаточна велика или, по крайней мере, очень чувствительна.

Поэтому разработчики архитектуры IA32 пустились в свое время на хитрость. Аналог номера дома они разбили на две равные части. Старшая часть стала определять номер строки в таблице каталога страниц. Каждый элемент последней таблицы содержит действительный адрес (местонахождение) соответствующей таблицы страниц, так что теперь имеется не одна таблица страниц, а множество. В архитектуре IA32 может быть до 1024 таблиц страниц, в нашем вымышленном примере их должно быть до 1000. В свою очередь, каждая таблица страниц служит для преобразования в физический номер страницы (физический номер страницы принято для сокращения называть страничным кадром).

В нашем примере старшие три десятичные цифры обобщенного номера квартиры задают порядковый номер строки в таблице каталога. В аналоге этой строки аппаратура компьютера берет информацию о местонахождении соответствующей таблицы страниц. В последней таблице берется та строка, номер которой задается следующими тремя цифрами десятичного номера из обобщенного номера. Эта строка дает физический номер квартиры. Например, если виртуальный обобщенный номер квартиры для процесса есть 007345804, то из таблицы каталога выбирается строка с номером 007. Из этой строки находится местонахождение таблицы страниц и в последней берется строка с номером 345, которая пусть содержит физический номер 201745. К последнему номеру приписываются три младшие десятичные цифры исходного обобщенного номера и получается физический обобщенный номер 201745804. В компьютере все перечисленные действия с частями обобщенного номера выполняет аппаратура процессора, причем эти действия осуществляются при выполнении каждой команды (существуют достаточно сложные аппаратные методы ускоренного выполнения этих действий, но на текущем уровне изложения они не существенны).

Отличие страничного преобразования в архитектуре IA32 от предложенного упрощенного изложения состоит в следующем. Виртуальный и физический адреса задаются не в десятичных цифрах, а в двоичных кодах. Эти адреса, как уже указывалось, 32-битные. В качестве номера строки таблицы каталогов берется 10 старших битов этого адреса, что дает 1024 строки этой таблицы. В качестве номеров строк таблиц страниц используются следующие десять битов за десятью старшими битами (биты с номерами от 21-го до 11-го). Оставшиеся двенадцать младших битов задают номер байта внутри страницы.

Заметим, что каждый элемент таблицы каталога и таблицы страниц содержит по 4 байта. В действительности, только часть битов из этих строк используется для хранения указанных преобразований (младшие 12 битов из этих строк служат для других дополнительных целей, часть которых служит для ограничения доступа к информации в страницах). Это ограничение доступа заключается в том, что каждой странице, описанной строкой в таблице страниц, присваиваются атрибуты доступа. Такие атрибуты записываются отдельными битами непосредственно в строках таблиц страниц. В архитектуре IA32 эти возможности оказались достаточно скромными и представляют собой возможность указания доступа либо по чтению, либо еще и по записи. В других архитектурах возможным является отдельно задаваемый атрибут доступа по выполнению (в IA32 доступ к странице памяти только по чтению и доступ только по выполнению считаются равносильными).

Если подсчитать, каков получается объем таблиц для страничного преобразования только одного процесса, то получим 4 Кбайт для таблицы каталога и 4 Мбайт для его всевозможных таблиц страниц. Это, конечно, не очень мало. Все рассмотренные построения с двухуровневым преобразованием, на самом деле, были заложены в предположении, что не вся теоретическая память может потребоваться каждому из выполняемых процессов. В таком случае целесообразно для ОС предоставить процессу пользоваться только некоторыми диапазонами виртуальных адресов, а для остальных не строить, не хранить и не использовать таблиц страниц. Строки таблицы каталога, соответствующие этим диапазонам, можно отметить внутри таблицы как не используемые (вот зачем потребовались зарезервированные биты в строках таблицы каталога).

Заметим, что в старших моделях архитектуры IA32, начиная с Pentium II, кроме рассмотренной схемы страничной переадресации возможна еще одна, когда размер страниц аппаратно выбирается равным 1 Мбайт. Хотя для некоторых программ такая величина дискретности выделения памяти оказывается достаточно расточительной, но она позволила в той же 32-битной архитектуре иметь всего 4096 страниц, таблица одноуровневого страничного преобразования для которых требует всего-то 16 Кбайт. Еще раз отметим, что последнее решение также не является панацеей, потому что так называемая подкачка страниц, о которой будет идти речь далее, в этом случае требует перемещения каждый раз по 1 Мбайту между оперативной Ш внешней памятью, что не может ни сказаться на быстродействии компьютерной системы.

 




Поделиться с друзьями:


Дата добавления: 2014-01-05; Просмотров: 607; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.019 сек.