Зачем использовать два разных стека в одной программе? Как trap изменяет текущий стек программы с пользовательского на стек ядра? Как он возвращается в стек пользователя после завершения системного вызова?
Каждый ли процесс имеет ядро и стек пользователя?