Русский / Russian English / Английский

Сейчас на форуме: tihiy_grom (+3 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS ·

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

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

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

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

Ранг: 414.8 (мудрец)
Статус: Участник
"Тибериумный реверсинг"

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

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

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


Ранг: 324.3 (мудрец)
Статус: Участник

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

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

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

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

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

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

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


Ранг: 2012.6 (!!!!)
Статус: Модератор
retired

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

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

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

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


Ранг: 329.0 (мудрец)
Статус: Участник

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

Иди лучше за пивом сходи и не парься
 eXeL@B —› Вопросы новичков —› Виртуальная память процесса

Видеокурс ВЗЛОМ