In Computer Systems, a process is a running instance of a program. Thus, it will have its own virtual address space — protected from other processes, and no direct access to hardwares. Processes also have context (states,) including page tables, open file descriptors, and environment variables. Process owns a thread. Therefore, different threads can share virtual address space and contexts. For each thread, they will have a program counter, stack, and registers.