dragon писал(а):
SII, между модулями самого ядра. Понятно, а про WDM можно подробнее? Или ссылку на максимально краткое описание? Там по сути через импорт функций ntoskrnl? А допустим файловые системы - это что нибудь типа vfat.dll, к которому подключаются все драйвера файловых систем?
Просто заранее известны имена подпрограмм ядра, которые могут вызываться драйверами (в т.ч. файловыми системами), и чётко прописаны соглашения о связях, параметры и т.д. Соответственно, реализация подсистем ядра может меняться как угодно, но драйверы будут нормально работать -- поскольку интерфейс между драйверами и ядром не меняется. И наоборот, можно менять драйверы, но всё будет нормально работать.
То же самое можно распространить на всю систему в целом (собственно, и распространяется, просто документация не открывается). Например, можно полностью переписать менеджер памяти, но, если соблюсти все заранее описанные соглашения о связях (подпрограммы менеджера, доступные другим модулям), то всё остальное будет с ним нормально работать и дальше.
Технически используются команды CALL, естественно: переключение режимов процессора не требуется, поскольку весь код находится в ядре, поэтому такие вызовы являются самыми оптимальными. Если надо реализовать часть системы в пространстве пользователя, там надо придумывать иной метод, который в общем случае сводится к INT.