Как ЦП узнает, какой физический адрес сопоставлен с каким виртуальным адресом?

Это означает, что в tarball хранятся файлы с идентификатором пользователя (UID) 10 и идентификатором группы (GID) 143, а поскольку вы извлекли его как root, эти идентификаторы были сохранены. Вы ничего не упустили, но вы можете chown файлы на root:

chown -R root:root jdk1.8.0_121

Это позволит избежать любых сюрпризов в будущем, если пользователь будет иметь идентификатор 10 в вашей системе.

5
12.05.2017, 11:34
3 ответа

В Linux ядро ​​поддерживает трехуровневую таблицу страниц (независимо от возможностей ЦП). Верхний уровень — это глобальный каталог страницы, и у каждого процесса есть свой собственный каталог,pgdв mm_struct. Таким образом, каждый процесс может иметь свои собственные сопоставления, поэтому адрес 12345 в разных процессах указывает на разные физические адреса.

Процессоры на самом деле не знают о процессах, но, как правило, имеют функции для их поддержки. В процессорах типа x86 есть различные функции, связанные с задачами, но на самом деле они, как правило, игнорируются. Поскольку планирование процессов управляется ядром, оно может само отслеживать изменения в таблице страниц и обновлять любое состояние процессора, необходимое для переключения на таблицу страниц нового процесса при переключении задач. На компьютерах с архитектурой x86 это включает обновление управляющего регистра CR3, который указывает на каталог страниц.

Глава Управление таблицей страницв книге Мела Гормана Understanding the Linux Virtual Memory Managerдает хороший обзор.

2
27.01.2020, 20:41

Каждый процесс в ОС имеет структуру данных, называемую PCB: https://en.wikipedia.org/wiki/Process_control_block

PCB содержит - наряду с несколькими другими вещами - информация о таблице страниц, ограничениях памяти, таблице сегментов в зависимости от памяти, используемой операционной системой. Обратите внимание, что PCB — это структура данных для каждого процесса, она есть у каждого процесса.

Адрес виртуальной памяти 12345делится на страница+ смещение— скажем, 123— это номер страницы, а 45 смещено.Для каждого процесса будет проведена консультация с его таблицей страниц, чтобы найти эквивалентную страницу (называемую фреймом) в физической памяти.

Учитывая вышеизложенное, даже если виртуальные адреса одинаковы, физические адреса будут разными.

Поскольку просмотр таблицы страниц может быть довольно медленным, когда дело доходит до перевода каждой страницы, MMU хранит кеш для недавно переведенных страниц. Вызывается буфером просмотра перевода (TLB): https://en.wikipedia.org/wiki/Translation_lookaside_buffer

1
27.01.2020, 20:41

MMU обращается к таблице, которая описывает, как преобразовывать виртуальные адреса в физические адреса. (Не нужно преобразовывать физические адреса в виртуальные адреса, и это было бы вообще невозможно, поскольку к одному и тому же физическому адресу можно получить доступ через несколько виртуальных адресов или его можно не отображать.) Структура этой таблицы зависит от архитектуры ЦП, но общий принцип всегда один и тот же: есть регистр ЦП, который содержит физический адрес таблицы, который содержит физические адреса следующих таблиц, и так далее (всего от 2 до 4 уровней в существующих архитектурах) до уровня таблиц который содержит физические адреса, где находятся данные. На каждом уровне, какой элемент таблицы использовать, определяется некоторыми битами виртуального адреса.

MMU ничего не знает о процессах операционной системы как таковых. Когда ЦП переключается на выполнение другого процесса, то есть когда происходит переключение контекста, задачей кода переключения контекста операционной системы является обновление таблиц MMU по мере необходимости.На практике я думаю, что все системы Unix хранят копии таблиц в памяти для каждого процесса и просто обновляют регистр MMU, чтобы он указывал на таблицу верхнего уровня для текущего процесса.

На самом деле есть часть MMU, которая заботится о процессах операционной системы: TLB. Поиск записей в таблице MMU довольно затратен, поскольку требует многократного доступа к памяти. TLB — это кеш этих запросов. При переключении контекста операционная система должна аннулировать TLB (т. е. удалить все записи кэша), поскольку сопоставление для нового процесса будет другим. Многие архитектуры позволяют ОС помещать индикатор в каждую запись таблицы MMU, чтобы сказать, что «эта запись принадлежит процессу N». Затем запись TLB пропускается, если номер процесса, который она содержит, не является текущим номером процесса. Регистр ЦП содержит номер текущего процесса, а код переключения контекста обновляет его. Этот механизм означает, что TLB может содержать информацию сразу о нескольких процессах, что повышает производительность при переключении между этими процессами. Поскольку для хранения N часто доступно меньше битов, чем необходимо для хранения всех идентификаторов процессов ОС, N — это не идентификатор процесса, а число, сгенерированное ОС для этой цели, и оно меняется со временем, если оно вообще используется.

3
27.01.2020, 20:41

Теги

Похожие вопросы