Сейчас на форуме: tyns777, bezumchik (+4 невидимых)

 eXeL@B —› Вопросы новичков —› Виртуальная память процесса
Посл.ответ Сообщение

Ранг: 3.6 (гость)
Активность: 0.02=0.02
Статус: Участник

Создано: 11 декабря 2019 20:38
· Личное сообщение · #1

Доброго времени суток! Не могу разобраться, каждому процессу Windows выделяет по 4 гб виртуального пространства(32 битная система). Если каждый процесс "грубо" отнимает по 4 гб, то сколько при этом должен весить файл подкачки? И написано, что память делится на 2 гб адресного пространства, где хранится, собственно, сам процесс с потоками и dll-библиотеками, а вторая половину под ядро.... Дак, собственно, что там система хранит в таком количестве в каждом виртуальном пространстве каждого отдельного процесса?Спасибо



Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 11 декабря 2019 20:50
· Личное сообщение · #2

AlexsandrS пишет:
Если каждый процесс "грубо" отнимает по 4 гб, то сколько при этом должен весить файл подкачки

Весь фокус в том, что рядовые процессы со всеми библиотеками и выделенной памятью занимают менее 100 Мб. Обычно всю память сжирает один ответсвенный процесс (main engine в игрушке, рендер в 3dmax, dev env в visual studio, ida pro), который вызывает VirtualAlloc с космическими значениями (чаще всего).




Ранг: 324.3 (мудрец), 222thx
Активность: 0.480.37
Статус: Участник

Создано: 12 декабря 2019 00:14 · Поправил: DenCoder
· Личное сообщение · #3

Говоря более простым языком, на работу каждого процесса отводится квант времени. Перед тем, как процесс снова вступает в своё дело, переключаются таблицы памяти. Каждый процесс напрямую видит только свои таблицы. Есть регистры для этого. Это была попытка просто объяснить страничную адресацию...

В общем на то она и виртуальная, что её как бы и нет. ))

Добавлено спустя 6 минут
AlexsandrS пишет:
Дак, собственно, что там система хранит в таком количестве в каждом виртуальном пространстве каждого отдельного процесса?

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

Из Зубкова:
Если одна страница описывает 4 кб, то полностью заполненная таблица страниц описывает 4 Мб, а полный каталог 4 Гб.

Значит, все вместе процессы, включая и системный System с pid = 4, не могут занимать больше 4 гб, сколько бы ни был файл подкачки. Одновременно пользоваться не получится. И, наверное, любые механизмы расширения этого предела будут тормозить всё дело.

-----
IZ.RU





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 12 декабря 2019 07:08
· Личное сообщение · #4

DenCoder пишет:
Значит, все вместе процессы, включая и системный System с pid = 4, не могут занимать больше 4 гб, сколько бы ни был файл подкачки

Не все вместе, а каждый из них имеет ограничение на 4. А все вместе теоретически могут сожрать 2 (общая для всех память ядра, иногда бывает 1)+2 (у каждого своя память юзермода, иногда соответственно 3)*число_процессов. А происходит так потому, что для каждого процесса своё значение CR3.

Ну и есть ещё PAE (используется часто) и PSE (используется реже), что позволяют адресовать адреса по 36 битам, используя до 64Гб физической памяти.




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 12 декабря 2019 16:28
· Личное сообщение · #5

Иди лучше за пивом сходи и не парься

-----
vx



 eXeL@B —› Вопросы новичков —› Виртуальная память процесса
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати