почему не удается получить доступ к непрерывным адресам памяти в физической памяти

Согласно документации Microsoft по следующей ссылке:

https://msdn.microsoft.com/en-us/library/windows/hardware/hh439648%28v=vs.85%29.aspx

  • Программа может использовать непрерывный диапазон виртуальных адресов для доступа к большому буферу памяти, который не является непрерывным в физической памяти.

Итак, возникает вопрос, почему в физической памяти не может быть непрерывной памяти для процесса?

Также есть еще один вопрос из-за документации, на следующем рисунке показана виртуальная память для пользователя и системного пространства:

введите здесь описание изображения

Системное виртуальное адресное пространство уникально во всей памяти, но есть ли виртуальное адресное пространство для каждого процесса?

Спасибо.


person Mohammad yummy    schedule 14.02.2015    source источник
comment
Вы читали en.wikipedia.org/wiki/Virtual_memory?   -  person Oliver Charlesworth    schedule 14.02.2015
comment
@OliverCharlesworth да, но несколько месяцев назад, извините за это   -  person Mohammad yummy    schedule 14.02.2015
comment
@OliverCharlesworth Не могли бы вы сделать одолжение? Я ничего не нашел о том, что вы сказали. Если вы не возражаете, покажите мне хотя бы на странице, где была указана причина. Благодарность   -  person Mohammad yummy    schedule 14.02.2015


Ответы (2)


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

person lychee    schedule 14.02.2015
comment
Не могли бы вы добавить дополнительные пояснения по второму вопросу? Благодарность - person Mohammad yummy; 14.02.2015
comment
@Mohammadyummy, да, ядро ​​​​имеет свое собственное виртуальное пространство, и каждый пользовательский процесс имеет свое собственное виртуальное пространство. Каждый процесс изолирован друг от друга, и процесс A не может получить доступ к адресному пространству процесса B, если только процесс B не сделает это в случае интер -технологическая коммуникация - person lychee; 14.02.2015

Ваш вопрос прост! Вы спросили, почему у нас может быть большой буфер памяти в виртуальной памяти, а не в физической! это потому, что мы ограничены аппаратным обеспечением! Если бы мы могли получить доступ к тому объему буфера, который нам нужен, в нашей физической памяти, промышленность должна была бы производить около 1024 ГБ памяти для нашего удовлетворения! но мы используем 8 ГБ памяти, и мы довольны...! виртуальная память существует, чтобы удовлетворить наши потребности и сделать аппаратное обеспечение намного более эффективным!

надеюсь поможет ‹3

person sci3nt15t    schedule 14.02.2015
comment
Я не минусовал, но ваш ответ не имел никакого смысла и, похоже, не отвечает на вопрос. - person tangrs; 15.02.2015