Обычно (в любом случае, в монолитных ядрах) процессы могут выполняться как в пространстве пользователя, так и в пространстве ядра, в зависимости от того, что они делают. Пользовательский код будет выполняться в пространстве пользователя до тех пор, пока ему не понадобятся службы ядра, то есть системный вызов ядра. Затем программа вызовет ловушку, которая переключает ЦП в защищенный режим, когда код ядра выполняет системный вызов (например, для чтения или записи файла). После этого ядро переключается обратно в режим пользователя, и приложение пользователя продолжает работать. Во все времена работает пользовательский процесс; он просто запускает пользовательский код или код ядра, в зависимости от ситуации.
EDIT
По крайней мере, в Linux, я не думаю, что есть какой-либо способ определить, попадет ли процесс, работающий только на ядро, в пространство пользователя; В конце концов, ядру разрешено делать все, что захочет. Но вы можете использовать некоторую эвристику, чтобы сделать обоснованное предположение. Например, pmap скажет вам, какая память пользовательского пространства отображена для процесса; отсутствие памяти является достаточно убедительным доказательством (возможно, неопровержимым) того, что это задача ядра. Таким же образом, если поле VSZ в 'ps l' равно 0, это означает, что у задачи нет выделенной памяти пользовательского пространства. Если вам просто интересно, находится ли задача в ядре в данный момент времени, поле WCHAN в 'ps l' подскажет вам; если это что-то отличное от ..., это в ядре, если это -, то, скорее всего, в пользовательском пространстве, но я не уверен, может ли это также означать, что оно было просто вытеснено в пространстве ядра.