Software interrupts are Instruction itself i suppose !
So for option a :- Not just software inteerupts , but also interrupt by I/o devices are used to test the interrupt system of the processor
for option b -- It is not related to co routine in any way .
A coroutine is similar to a thread (in the sense of multithreading): it is a line of execution, with its own stack, its own local variables, and its own instruction pointer; but it shares global variables and mostly anything else with other coroutines. The main difference between threads and coroutines is that, conceptually (or literally, in a multiprocessor machine), a program with threads runs several threads in parallel. Coroutines, on the other hand, are collaborative: at any given time, a program with coroutines is running only one of its coroutines, and this running coroutine suspends its execution only when it explicitly requests to be suspended.
option d: whver you encounter IRET in Interrupt service routine you return back , but for this there is not xternal interrupt required for this so option d wrong
For option c : is the right answer
Since i said software inteerupts are instrcution in progarm . so in a program if i have print or sacnf statements . then these statements must be need servce from OS . so hence we required interrupt when we need to excuted privileged instruction
hence option c - right