MLFQ is the scheduling family that ran production Unix and Windows NT for decades before Linux replaced it with CFS in 2007 (and CFS itself was replaced by EEVDF in kernel 6.6), precisely because naive MLFQ starves CPU-bound batch jobs without a periodic priority boost. The I/O-bound-versus-CPU-bound classification you build here is the same heuristic real schedulers use to decide whether a process is 'interactive' and deserves lower latency.