Do Linux kernel-Level operations (such as IO operations on the filesystem or communications over an ethernet interface) inherit the priority of the thread that triggered them, or do they run at a separate priority while the calling thread yields?
For example, lets say that I create a thread that has a policy of SCHED_FIFO and a priority of 99 (the highest), which does nothing other than sit in a tight loop and send a single byte out a serial port. Let's call this thread SERIAL_THREAD.
Lets say that I create a second thread that has a policy of SCHED_FIFO and a priority of 98, which does nothing other than sit in a tight loop and send the same TCP IP packet. Let's call this thread IP_THREAD.
Let's also assume the system has a single core, and that thread throttling has been disabled so that a thread is able to consume 100% of the system's CPU resources, blocking anything else from happening.
Regularly, given that SERIAL_THREAD has the highest priority in the system, and it never explicitly yields to the lower priority thread, I would expect that IP_THREAD would never be able to send its TCP-IP packets. However, because the thread interacts with an IO device via the kernel, I'm unsure of whether or not IP_THREAD will have any opportunity to run.