process states (running, ready, blocked, stopped)
A single CPU core can truly run only one process at a time, yet a system has many processes that all need to make progress. So at any instant most processes are not actually running - they are waiting for their turn, or waiting for something to happen. To manage this, the kernel labels each process with a state, the same way an air-traffic controller tracks whether each plane is in the air, queued for takeoff, or held at the gate. The state lives in the process control block and changes constantly.
The core states, at a glance: Running means the process is executing on a CPU right now. Ready (also called runnable) means it could run immediately and is just waiting for the scheduler to give it a CPU - it is in line. Blocked (also called sleeping or waiting) means it cannot proceed until some event happens, such as data arriving from disk or the network, or a lock becoming free; a blocked process uses no CPU and is not in the run queue. Stopped means the process has been paused by a signal (for example, pressing Ctrl-Z in a shell) and will not run again until told to continue. A process moves between these as work flows: it starts ready, the scheduler dispatches it to running, it blocks when it calls read() and the data is not there, then becomes ready again when the data arrives.
Why it matters: states explain behavior you will otherwise find baffling. A program 'doing nothing' while waiting on the network is blocked, not burning CPU - that is correct and efficient, not stuck. A long line of ready processes competing for few cores is why everything feels slow under load. And a special, easily-confused state - a process that has terminated but whose parent has not yet reaped it - is the zombie, which still occupies a slot precisely because its exit status has not been collected. Reading process states (the letters in ps or top: R, S, D, T, Z) is one of the fastest ways to understand what a system is really doing.
Run top and watch the S column. A process waiting for keyboard input shows S (sleeping/blocked). A tight compute loop shows R (running or ready). Press Ctrl-Z on a foreground program and it flips to T (stopped); a child that finished while its parent ignores it shows Z (zombie).
ps/top state letters: R running/ready, S/D sleeping, T stopped, Z zombie.
A blocked (sleeping) process is not a problem - it is correctly waiting and using no CPU. Beginners sometimes 'fix' a program that is merely blocked on I/O; the slow part is the I/O, not a stuck process.