Lecture Topic: Processes Parts of memory - Stack - Heap - Program Counter - Registers - Arguments Vector - Environment PATH | Stack Layout | | ------------------------------ | | argv, argc | | stack | | heap | | uninitialized global variables | | initialized global variables | | text | Heap Memory, only the result of calls to malloc or calloc Stack Memory, anything else, even pointers or custom typedefs, unless it was specifically allocated Possible Process States - New: First Stage, when the OS loads the program and before it is given CPU cycles - Ready: When the program is ready to execute and has been added to the OS queue for execution - Running: The program is executing instructions on the CPU - Waiting: The program is waiting for CPU cycles or is dormant, either due to timeout or waiting for IO or events - Terminated: The program memory is unallocated and revoked. Can be invoked by program itself or by parent (includes OS) Process Control Block or Task Control Block - Process state - Program counter - Scheduling information - Memory info - Accounting info - IO status info (fds, etc) In Linux this is implemented with a structure called `task_struct` It's organized in a Linked List, it's used for scheduling. The process scheduler, selects which process get CPU attention, with the goal of improving response time, as well as multiprorgramming. Maintained Queues - Waiting Queue - Ready Queue Processes could be CPU bound or IO bound In general 100% utilization (CPU, IO) is not bad