КАТЕГОРИИ: Архитектура-(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) |
Виртуальная память
Лекция 13 На заре компьютерной эпохи не было возможности выполнять программу, размер которой превышает объем физической памяти компьютера. Позже программисты стали писать оверлейные программы, которые выгружали одни части своего кода на диск и загружали другие в память. Когда программе требовался код, находящийся на диске, она загружала его в память поверх ненужного в данный момент кода. Помимо того, что оверлейные программы было утомительно писать и трудно сопровождать и модифицировать, в каждой программе нужно было заново создавать код, выгружающий содержимое памяти на диск. Виртуальная память, реализованная впервые в 1959 году, сняла бремя управления памятью с программиста и переложила его на ОС. Виртуальная память — это централизованная система выгрузки на диск содержимого памяти при переполнении последней. Она позволяет программистам создавать и запускать программы, которые требуют памяти больше, чем есть у компьютера. Виртуальная память стала стандартным методом управления памятью для всех ОС, кроме простейших. Виртуальное адресное пространство (virtual address space) — это набор адресов памяти, которые могут использовать потоки процесса. Каждый процесс имеет отдельное адресное пространство, которое обычно гораздо больше размера физической памяти. Хотя диапазон физических адресов для конкретного компьютера ограничен объемом имеющейся у него памяти (каждый байт которой обладает уникальным адресом), диапазон виртуальных адресов ограничен только количеством битов в адресе. Каждый бит может быть либо установлен, либо сброшен; таким образом, например, процессор, имеющий 32-разрядные адреса, является счастливым обладателем виртуального адресного пространства в 232, или 4 миллиарда байт (4 Гбайт), Это несоответствие между физическим и виртуальным адресными пространствами приводит к тому, что система виртуальной памяти обязательно должна выполнять следующие две задачи: · Транслировать, или отображать (map), некоторое подмножество виртуальных адресов каждого процесса в участки физической памяти. Когда поток производит чтение или запись в своем виртуальном адресном пространстве, система виртуальной памяти (часть которой может быть реализована аппаратно) перед пересылкой данных определяет по виртуальному адресу соответствующий физический адрес. · Выгружать на диск часть содержимого памяти, когда она переполняется, т. е. когда потоки, выполняющиеся в системе, пытаются использовать больше памяти, чем доступно физически. Выполнение первой задачи — отображение виртуальных адресов в физические — позволяет легко перемещать программу в памяти в ходе ее неполного исполнения. Система виртуальной памяти перемещает фрагменты программы на диск и затем обратно в память, причем, возможно, по другим адресам. Затем она модифицирует отображение логических адресов в физические, так чтобы оно указывало на новое местоположение. Вторая задача, выгрузка содержимого памяти на диск, является следствием первой. Ясно, что процесс не может адресовать 4 Гбайт памяти, если в компьютере физически установлено только 4 Мбайт. Такой эффект достигается системой виртуальной памяти за счет использования диска в качестве резервной "памяти", называемой резервным хранилищем (backing store). При переполнении физической памяти система виртуальной памяти определяет, какие данные можно из нее удалить, и временно перемещает их в файл на диске. Когда эти данные вновь потребуются выполняющемуся потоку, система виртуальной памяти считывает их обратно с диска. Перемещение данных между памятью и диском было бы недопустимо медленным, если бы диспетчер виртуальной памяти перемещал лишь по одному байту за раз. Поэтому виртуальное адресное пространство разделено на блоки равного размера, которые называются страницами (pages). Соответственно, физическое адресное пространство разделяется на блоки, называемые страничными фреймами (page frames), которые используются для хранения страниц. В любой момент времени в памяти находится некоторое множество страниц из виртуального адресного пространства каждого процесса. Страницы, находящиеся в физической памяти и доступные немедленно, называются действительными страницами (valid pages). Страницы, находящиеся на диске (или находящиеся в памяти, но не доступные немедленно), называются недействительными (invalid pages). При обращении потока по виртуальному адресу, который находится на странице, помеченной как недействительная, процессор генерирует системную ловушку, называемую страничной ошибкой (page fault). Система виртуальной памяти находит нужную страницу на диске и загружает ее в свободный страничный фрейм физической памяти. Когда число доступных страничных фреймов становится мало, система виртуальной памяти выбирает фреймы, подлежащие освобождению, и копирует их содержимое на диск. Этот процесс, называемый подкачкой страниц (paging), невидим прикладному программисту. Обработка страничной ошибки может быть дорогой операцией, требующей много тактов процессора. Однако большие размеры страницы снижаю затраты, так как в память загружается большее количество данных и страничные ошибки происходят реже. (Конечно, слишком большой размер страницы может привести к загрузке большего объема данных, чем необходимо, так что здесь требуется определенный баланс.) В общем случае число байт на странице выражается степенью двойки и зачастую определяется аппаратурой. Windows NT использует размер страницы, установленный в Intel 38б и равный 2, или 4 Кбайт. (MIPS R4000 позволяет задавать размер страницы программно.)
Дата добавления: 2014-01-07; Просмотров: 693; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |