I'm gonna sketch my understanding of both. I've googled around but i'm not sure about my knowledge. Please correct me!
Hardware interrupt is generated by the operation system event scheduler to reassign the cpu time for another process. Is this true?
Software interrupt can be generated from a running program who wants for example to read a file, and for that we need to reassign the cpu for the appropriate operation system call. Is this true?
Is there other kind of software/hardware interrupts?