How do interrupts work in embedded systems? I need a general view
What you have written is correct in itself, but I'm not sure what purpose it serves.
It's at too low a level to understand when you need to use interrupts or what they do for you. You can't see the wood for the trees.
However it's too high level and not detailed enough to implement interrupts on any particular machine, as they will have different specific addresses for their vectors, or bit numbers for their masks, so you have to dig down into the detailed documentation for any particular target to use them. It's almost meaningless to talk about them until you're trying to program a particular machine
At the simplest level, interrupts allow a computer or controller to respond in real time to a particular event happening.
Without interrupts, a computer would poll the various inputs, and depending on how fast the poll loop was, and how long it took to service another event, you could wait a long time to have your event serviced. If all your service routines are short, if all your events are tolerant of that wait before service, then there is no need for interrupts.
A common simple model I often implement in microcontrollers is to think of it as two machines, a real time machine, and a background machine, sharing a chip. I then have a fast(ish) interrupt running, every 1 ms or 10 us or so, which does what has to be done now, for instance load a peripheral register or read an ADC. I then have a background process that handles complicated but slower things like parsing incoming messages or writing files to SD card.
That's very simple. For more complicated systems you will need finer control. Whether interrupts can interrupt other interrupt routines depends on their importance and running time, which is an application specific thing. The mask bits, ISR flags etc, are just resources that enable you to control what can interrupt what and when. Whether interrupts have to generate the response in 10 clock cycles or 1000 affects whether you must use a vectored interrupt, or can wait for a non-vectored one to find out why it's been invoked, and it is again very application specific.