Soft IRQ - это программные прерывания, обычно соответствуют прерываниям от программных таймеров, переключения контекста, прерываний на ввод/вывод и от системных примитивов. Генерируются ядром и им же обрабатываются.
Hard IRQ - это аппаратные прерывания, обычно соответствуют запросам на обработки от конкретных железок и устройств, в том числе и от устройств в CPU (процессоре). Генерируются периферией и обрабатываются в драйверах. Драйвер, в критической секции может замаскировать некоторые линии прерываний для выполнения критических участков кода.
NMI IRQ - отдельный тип аппаратных прерываний, так называемые немаскируемые прерывания, обычно соответствуют запросам CPU в критических случаях - обработка аппаратных ошибок, выход за границы памяти, ошибок в арифметике, памяти, инструкциях процессора и т.д.
Если нужно углубиться - могу рассказать.