Qualquer kernel é praticamente o oposto de um "programa normal". Mesmo que os microkernel possam gostar da idéia de serviços OS rodando como processos no mesmo nível que o aplicativo do usuário, o kernel sempre terá que incluir alguma parte que não é. Se nada mais, deve haver alguma parte do sistema operacional que manipula o agendamento e a alternância entre os processos e a comunicação entre eles.
Particularmente, no Linux, o kernel é mapeado para o espaço de endereço de todos os processos, na parte superior do espaço de endereço. De certa forma, é parte de cada processo, em que alguns processos podem estar executando o código do kernel, enquanto ao mesmo tempo algum outro processo pode estar executando o código do espaço do usuário.
Eu não diria que o kernel é executado como um programa normal, mas ele também não roda "apenas" em interrupções, pois o código de espaço do usuário também pode chamar rotinas do kernel: são as chamadas do sistema. Citações em torno de "somente", já que as interrupções não são excepcionais, é comum haver algum tipo de temporizador regular.