When a program is run, the operating system (OS) orchestrates the transformation of a static executable file into a dynamic, active entity known as a process. The user’s request triggers a system call to the OS kernel, which immediately begins setting up the execution environment. First, the kernel creates a Process Control Block (PCB), the process’s internal descriptor containing its unique PID, security context, and execution state. Concurrently, the OS establishes the process’s virtual address space, an essential abstraction layer that isolates the program’s memory. The OS then loads the program’s code and data from secondary storage (disk) into Main Memory (RAM), mapping them into the virtual space’s key segments: the text segment (code), the data segment (global variables), the stack (local variables and function calls), and the heap (dynamically allocated memory). Critical to modern execution is the dynamic linker, which loads and binds necessary shared libraries (.dll or .so files) into the process’s address space, resolving external function references. Once initialization is complete, the OS places the process in the “ready” queue. When the CPU scheduler grants execution time, the processor begins the Fetch-Decode-Execute cycle, constantly pausing and resuming the process via context switching to accommodate other programs or to handle system calls for input/output (I/O) operations, ensuring the single CPU resource is shared efficiently across all active tasks.