Как в Винде происходит переключение процесов? Насколько я понимаю висит процес, который переключает выполнение других процесов. Он по идее находится в кеше, но когда он переключает другой процес, то в кеш должен загружаться он. Не слишком ли медленно? Насколько помню руководить загрукой кеша програмно - невозможно. Или может здесь есть что-то чего я не знаю? (.
Переключение адресных пространств процессов происходит как часть переключения контекстов потоков и, как это ни странно, для этого достаточно всего двух инструкций Код (Text): mov eax, KPROCESS.DirectoryTableBase ; get new directory base mov cr3, eax ; set new directory base DirectoryTableBase - это физический адрес каталога страниц процесса. По значению в cr3 процессор добирается до физических адресов. При этом специально из кэша ничего не грузится. Вся система (логически) поделена на кучку диспетчеров: Диспетчер памяти, Дипетчер объектов и т.п. Каждый отвечает за своё хозяйство. После переключения контекста, поток продолжает выполнение. Если он обращается к отсутствующей странице, происходит исключение и его обработчик вызывает диспетчер памяти, который и достает из кэша (имеется ввиду файл подкачки) страницу (есили она конечно была туда перемещена). Подробнее в книжках умных написано.
Есть, по-крайней мере, одна умная книжка: "Inside Microsof Windows 2000" y David A. Solomon and Mark E. Russinovich. У нас не приняты ссылки на книги выложенные в ущерб авторам, но где-то оно лежит
достаточно созранить все регистры в стек, сохранить где нить в структуре процесса esp, затем -меняем cr3, из структуры нового процесса загружаем esp и из стека читаем содеримое регистров. я во всяком случае так делал. без замены esp потоки в пространстве ядра не возможны.
А что с книжкой сложного? Я просто написал название в гугле и нажал кнопку "мне повезет". Сразу предложили выбрать путь для сохранения 19метров. Правда, я искал английскую, с русской, возможно, проблемы будут..