The selection process is carried out by the appropriate scheduler for scheduling purpose. There are three types of schedulers: Long-term scheduler, Medium-term scheduler and Short-term scheduler.
Long-term scheduler: Also known as Job scheduler. The primary goal of long-term scheduler is maintaining/controlling good degree of multiprogramming. When a process moves state from new to ready state then there is long term scheduler. It decides next process to go ready state and loads it into main memory.
Short-term scheduler: Also known as CPU scheduler. The primary goal of short term scheduler is enhance the performance of CPU. It determines next process to go running state. So, sometime it's called as Dispatcher. Short term scheduler is faster than long term scheduler. It provides lesser control of degree of multiprogramming.
Medium-term scheduler: It reduces degree of multiprogramming. Medium term scheduler moves process from main memory to secondary memory, so it's a part of swapper. It transit job from ready state(or suspended waiting state) to suspended ready. Speed of medium term scheduler is between both short term and long term scheduler.
New state has job queue, ready state has ready queue and suspended blocked state has device queue.