Некоторые (многие? все?) 64-разрядные 1 дистрибутивы Linux позволяют запускать 32-разрядные приложения, отправляя параллельные коллекции 32-разрядных и 64-разрядных библиотек (включая libc). Таким образом, 32-битное приложение может связываться с 32-разрядными библиотеками и работать под 64-разрядным ядром.
Мне хотелось бы знать, как 32-разрядные приложения выполняют системные вызовы в 64-битном ядре. Я подозреваю, что ответ находится где-то в libc и/или исходном коде ядра, но мне было бы много времени погружаться в источник, так как я не знаю, где искать.
И еще более важный вопрос: есть ли накладные расходы на производительность? 2 Логически, вызов из 32-битного системного вызова приложения придется перевести на 64-битную внутреннюю среду ядра. Как и где это достигается?
1 "32-бит" = IA-32 и "64-бит" = AMD64
2 В вашем ответе сделайте предположение, что это важно:)