Необходимо организовать сбор достаточно большого объема информации при каждом переключении контекста, с последующей передачей буфера в пользовательский режим. Тут возникли вопросы. 1. На каком ядре (процессоре)будет непосредственно выполняться код свапконтекста? 2. Будут ли на это время заморожены остальные ядра? 3. Может ли один раз он выполниться например на 0м ядре, а следующий раз например на 3м, и если да, то как можно привязать его к какому-либо конкретному ядру.
на любом код планировщика реентерабелен: он может выполняться параллельно на всех процессорах нет никак
Как в XP, переключение контекта не имеет никакого отношения к окнам, а вызывается по прерыванию от таймера (APIC или PIT).
Из того, что переключение контекста вызывается по прерыванию таймера, не следует, что оно не имеет отношения к окнам, ибо процессы переключаются и по другим причинам (таким как приход событий и переход в состояние ожидания).
halyavin Переключение контекста происходит примерно раз в 10 мс (цифра взята из форума). Как думаешь, будет ли влиять user input на кол-во переключений?
В книге Марка Руссиновича этот процесс описан. Квант времени меняется динамически от того активно окно или нет, по таймеру планировщик квант подрезает, и как только тот кончится, и в системе есть другие потоки ожидающие времени процессора, то только тогда произойдет переключение. Измерения показали что наибольшее число переключений происходит при работе большого количества не сильно активных процессов, как то торрент клиен, менеджер закачек, и еще куча мелких но постоянно работающих приложений, в таких условиях количество переключений доходит до 10 тыс раз в секунду, однако если заргузить все доступные процессоры мощной вычислительной задачей, и при этом не имет торрентов и прочего висящего в фоне, а только WinXP и собственно математику, то количество переключений опускается до 100-200 раз в секунду.