eXeL@B —› Вопросы новичков —› Виртуальная память процесса |
Посл.ответ | Сообщение |
|
Создано: 11 декабря 2019 20:38 · Личное сообщение · #1 Доброго времени суток! Не могу разобраться, каждому процессу Windows выделяет по 4 гб виртуального пространства(32 битная система). Если каждый процесс "грубо" отнимает по 4 гб, то сколько при этом должен весить файл подкачки? И написано, что память делится на 2 гб адресного пространства, где хранится, собственно, сам процесс с потоками и dll-библиотеками, а вторая половину под ядро.... Дак, собственно, что там система хранит в таком количестве в каждом виртуальном пространстве каждого отдельного процесса?Спасибо |
Ранг: 419.0 (мудрец), 647thx Активность: 0.46↗0.51 Статус: Участник "Тибериумный реверсинг" |
Создано: 11 декабря 2019 20:50 · Личное сообщение · #2 AlexsandrS пишет: Если каждый процесс "грубо" отнимает по 4 гб, то сколько при этом должен весить файл подкачки Весь фокус в том, что рядовые процессы со всеми библиотеками и выделенной памятью занимают менее 100 Мб. Обычно всю память сжирает один ответсвенный процесс (main engine в игрушке, рендер в 3dmax, dev env в visual studio, ida pro), который вызывает VirtualAlloc с космическими значениями (чаще всего). |
|
Создано: 12 декабря 2019 00:14 · Поправил: DenCoder · Личное сообщение · #3 Говоря более простым языком, на работу каждого процесса отводится квант времени. Перед тем, как процесс снова вступает в своё дело, переключаются таблицы памяти. Каждый процесс напрямую видит только свои таблицы. Есть регистры для этого. Это была попытка просто объяснить страничную адресацию... В общем на то она и виртуальная, что её как бы и нет. )) Добавлено спустя 6 минут AlexsandrS пишет: Дак, собственно, что там система хранит в таком количестве в каждом виртуальном пространстве каждого отдельного процесса? В CR3 физический адрес каталога страниц. При обращении процессора по адресу, старшие 10 бит линейного адреса определяют номер таблицы страниц из этого каталога, следующие 10 - номер страницы из таблицы, младшие 12 - смещение в странице. Поскольку CR3 у процессора один, то и каталог один. Из Зубкова: Если одна страница описывает 4 кб, то полностью заполненная таблица страниц описывает 4 Мб, а полный каталог 4 Гб. Значит, все вместе процессы, включая и системный System с pid = 4, не могут занимать больше 4 гб, сколько бы ни был файл подкачки. Одновременно пользоваться не получится. И, наверное, любые механизмы расширения этого предела будут тормозить всё дело. ----- IZ.RU |
|
Создано: 12 декабря 2019 07:08 · Личное сообщение · #4 DenCoder пишет: Значит, все вместе процессы, включая и системный System с pid = 4, не могут занимать больше 4 гб, сколько бы ни был файл подкачки Не все вместе, а каждый из них имеет ограничение на 4. А все вместе теоретически могут сожрать 2 (общая для всех память ядра, иногда бывает 1)+2 (у каждого своя память юзермода, иногда соответственно 3)*число_процессов. А происходит так потому, что для каждого процесса своё значение CR3. Ну и есть ещё PAE (используется часто) и PSE (используется реже), что позволяют адресовать адреса по 36 битам, используя до 64Гб физической памяти. |
|
Создано: 12 декабря 2019 16:28 · Личное сообщение · #5 |
eXeL@B —› Вопросы новичков —› Виртуальная память процесса |