@ Ву, да, вам нужно немного понимать виртуальную память, чтобы понимать псевдонимы. Позвольте мне сначала дать вам несколько объяснений:
Допустим, у меня есть ОЗУ (физическая память) 1 ГБ. Я хочу представить моему программисту, что у меня 4 ГБ памяти, а затем я использую виртуальную память. В виртуальной памяти программист думает, что у него 4 ГБ, и пишет свою программу с этой точки зрения. Им не нужно знать, сколько физической памяти существует. Преимущество в том, что программа будет работать на компьютерах с разным объемом оперативной памяти. Также программа может запускаться на компьютере вместе с другими программами (также потребляющими физическую память).
Итак, вот как реализована виртуальная память. Я приведу простую 1-уровневую систему виртуальной памяти (у Intel есть 2/3-уровневая система, которая просто усложняет объяснение.
Наша проблема в том, что у программиста есть 4 миллиарда адресов, и у нас есть только 1 миллиард мест для размещения этих 4 миллиардов адресов. Таким образом, адреса из виртуального адресного пространства должны быть сопоставлены с физическим адресным пространством. Это делается с помощью простой индексной таблицы, называемой таблицей страниц. Вы получаете доступ к Таблице страниц с виртуальным адресом, и он дает вам физический адрес этой ячейки памяти.
Некоторые подробности: Помните, что физическое пространство составляет всего 1 ГБ, поэтому система сохраняет в физической памяти только самый последний доступный объем в 1 ГБ и сохраняет остаток на системном диске. Когда программа запрашивает определенный адрес, мы сначала проверяем, находится ли он уже в физической памяти. Если это так, он возвращается в программу. Если нет, то его вывели с диска и поместили в физическую память, а затем вернули в программу. Последний известен как Page Fault.
Возвращаясь к псевдонимам в контексте виртуальной памяти: поскольку существует сопоставление между виртуальными -> физическими адресами, можно сделать два виртуальных адреса для сопоставления одному и тому же физическому адресу. это то же самое, что сказать, что если я посмотрю на свою таблицу страниц для виртуального
адреса X и Y, я получу один и тот же физический адрес в обоих случаях.
Ниже показан простой пример 8-страничной таблицы страниц. Скажем, есть 8 жизненных адресов и только 3 физических адреса. Таблица страниц выглядит следующим образом:
0: 1
1: On disk
2: 2
3: 1
4: On disk
5: On disk
6: On disk
7: 0
This mean that if virtual address 4 is accessed, you will get a page fault.
If virtual addresses 3 is accessed, you will get the physical address 1
In this case, virtual addresses 0 and 3 are aliasing to the same physical address 1 for both of them
ПРИМЕЧАНИЕ. Я везде использовал термины физический и виртуальный адреса, чтобы упростить концепцию. В реальной системе виртуальное физическое сопоставление не для каждого адреса. Вместо этого мы отображаем куски виртуального пространства в физическое пространство. Каждый чанк называется страницей (поэтому таблица сопоставления называется таблицей страниц), а размер чанка является свойством ISA, например, Intel x86 имеет 4-килобайтные страницы.