the process state model
Think of a single worker at a help desk who can only serve one person at a time. At any moment a customer is either newly arrived, waiting in line for their turn, currently being served, stepped away to fetch a document (and so not ready to be served), or finished and leaving. The process state model captures these same situations for a process: at any instant a process is in exactly one well-defined state, and it moves between states along allowed transitions.
The classic states are: new (the process is being created), ready (it could run and is just waiting for a free CPU), running (it is currently executing on a CPU), waiting or blocked (it cannot proceed until some event happens, like data arriving from disk), and terminated (it has finished). The important transitions are: new becomes ready when setup is done; ready becomes running when the scheduler picks it; running becomes ready when its time slice ends or it is preempted; running becomes waiting when it asks for something not yet available; waiting becomes ready when that event finally happens; and running becomes terminated when it exits. Notice a blocked process does not go straight back to running: when its event arrives it returns to ready and must be rescheduled.
This model is the backbone of how an OS juggles many processes. On a single CPU exactly one process is running at a time; many can be ready (lined up); and many can be waiting (each blocked on its own event). A common confusion is treating ready and waiting as the same 'not running' state. They are crucially different: a ready process wants only a CPU and could run instantly, while a waiting process cannot run no matter how free the CPU is, until its event occurs.
A process running on the CPU calls read() to get data from disk. It cannot continue until the data arrives, so it moves running -> waiting. When the disk finishes, it moves waiting -> ready, and later the scheduler moves it ready -> running again.
Blocking on I/O sends a process to waiting, then to ready, never straight back to running.
Ready and waiting are not the same. A ready process needs only a CPU; a waiting (blocked) process cannot run at all until its awaited event occurs, however idle the CPU is.