совместное использование адресного пространства и дублирование записей таблицы страниц - PullRequest
4 голосов
/ 01 июня 2011
  1. До copy on write (COW), когда говорится, что родительский и дочерний процессы совместно используют одно и то же адресное пространство, это означает, что они совместно используют один и тот же сегмент кода, сегмент данных, кучу и стек, верно?

  2. Если родительский и дочерний процессы используют одно и то же адресное пространство перед COW, что означает the page table entries are copied from parent process to child process?

  3. Означает ли дублирование записей таблицы страниц дублированиеадресное пространство?

Ответы [ 3 ]

5 голосов
/ 01 июня 2011

Допустим, ваш процесс получил имя переменной X с виртуальным адресом 100 и физическим адресом 200. PTE поддерживает отображение адресов от виртуального 100 к физическому 200.

после разветвления, каждый процесс(родитель и ребенок) будет иметь свой личный PTE.в этот момент оба PTE будут отображать виртуальные 100 на физические 200.

, пока оба процесса только читают оттуда, они будут читать с физического адреса 200.

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

* Примечание: это просто резюме, и реальная вещь происходит в разрешении страницы.

2 голосов
/ 01 июня 2011
  1. Да, одна и та же физическая память используется процессами (родительским и дочерним).

  2. Это означает, что у каждого есть свой собственный PTE, который переводит виртуальное адресное пространство в физическое адресное пространство. сразу после разветвления они в целом одинаковы.

  3. Да, это означает, что после разветвления у каждого есть свое собственное адресное пространство, которое в начале одинаково, но может и будет изменено позже. например на COW, malloc, free, в основном для любого изменения использования памяти процессами.

2 голосов
/ 01 июня 2011

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

...