#cpu #ram #виртуальная_память
Опишу конкретную ситуацию.
При старте процесса CPU выдает виртуальный адрес.
Пусть TLB у нас будет пуст. Таблица страниц тоже не содержит необходимых записей
(или хотя бы есть одна пустая запись таблицы страниц самого верхнего уровня иерархии
с битом валидности 0). В оперативной памяти необходимого страничного блока нет.
Вопрос: как с помощью виртуального адреса мы сможем извлечь с диска страницу? Ведь
мы не сможем просмотреть все страницы и найти по смещению информацию. А индекс в виртуальном
адресе нам не поможет.
Как быть именно на старте процесса, когда TLB и PT пусты?
Ответы
Ответ 1
Что вы имеете ввиду под "процесс", если обычный процесс который работает под управлением операционной системы, то таблица страниц не будет пуста. При старте процесса операционная система прочитает в свои буфера начало выполнимого файла из заголовка, поймет какие сегменты и какого размера необходимо выделить для выполнения процесса, выделит блоки свободной оперативной памяти, построит таблицы страниц, при необходимости построит дескрипторные таблицы сегментов. После чего прочитает с диска необходимые блоки, подгрузит библиотеку загрузчика, который в свою очередь (с помощью функций ОС) догрузит необходимые библиотеки и настроит связи. После этого управление будет передано процессу, к этому моменту все таблицы уже будут существовать. А TLB будет просто очищен в момент передачи управления из ядра ОС в пространство процесса и набран CPU автоматически в процессе работы на основании информации из таблиц страниц. Обратите внимание, CPU сам не выдает никаких адресов, это делает операционная система, основываясь на своих собственных, внутренних таблицах трансляции адресов ОЗУ в адреса например swap раздела или файла отраженного на память.
Комментариев нет:
Отправить комментарий