· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Многозадачность

Посл.отвђт Сообщенiе


Дата: Сен 27, 2004 10:34:44

Как в Винде происходит переключение процесов? Насколько я понимаю висит процес, который переключает выполнение других процесов. Он по идее находится в кеше, но когда он переключает другой процес, то в кеш должен загружаться он. Не слишком ли медленно? Насколько помню руководить загрукой кеша програмно - невозможно. Или может здесь есть что-то чего я не знаю? :((.


Дата: Сен 27, 2004 12:31:20

Переключение адресных пространств процессов происходит как часть переключения контекстов потоков и, как это ни странно, для этого достаточно всего двух инструкций :)
mov eax, KPROCESS.DirectoryTableBase ; get new directory base
mov cr3, eax                         ; set new directory base


DirectoryTableBase - это физический адрес каталога страниц процесса. По значению в cr3 процессор добирается до физических адресов. При этом специально из кэша ничего не грузится. Вся система (логически) поделена на кучку диспетчеров: Диспетчер памяти, Дипетчер объектов и т.п. Каждый отвечает за своё хозяйство. После переключения контекста, поток продолжает выполнение. Если он обращается к отсутствующей странице, происходит исключение и его обработчик вызывает диспетчер памяти, который и достает из кэша (имеется ввиду файл подкачки) страницу (есили она конечно была туда перемещена).

Подробнее в книжках умных написано.


Дата: Сен 29, 2004 12:26:03

В каких умных книжках, если можно названия и адреса в нете?


Дата: Сен 29, 2004 13:18:23

Есть, по-крайней мере, одна умная книжка: "Inside Microsof Windows 2000" y David A. Solomon and Mark E. Russinovich.

У нас не приняты ссылки на книги выложенные в ущерб авторам, но где-то оно лежит ;)


Дата: Сен 29, 2004 22:09:11

достаточно созранить все регистры в стек, сохранить где нить в структуре процесса esp, затем -меняем cr3, из структуры нового процесса загружаем esp и из стека читаем содеримое регистров.
я во всяком случае так делал. без замены esp потоки в пространстве ядра не возможны.


Дата: Сен 30, 2004 02:53:23

хорошо бы уже PM реализовать, что так долго никак :(

если что, с книжкой могу помочь


Дата: Сен 30, 2004 10:48:46

А что с книжкой сложного? Я просто написал название в гугле и нажал кнопку "мне повезет". Сразу предложили выбрать путь для сохранения 19метров. Правда, я искал английскую, с русской, возможно, проблемы будут..


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.043