프로세스는 실행중인 프로그램이다. 이러한 프로세스의 하드웨어 상태 중 가장 중요한 구성 요소는 메모리이다. 명어들은 메모리에 저장된다. 실행 프로그램이 읽고 쓰는 데이터도 메모리에 저장된다.
프로세스의 하드웨어 상태를 구성하는 레지스터는 다음과 같다.
프로그램은 영구 저장장치에 접근하기도하며, 입출력 정보는 프로세스가 열어 놓은 파일 목록을 가지고 있다.
생성: 새로운 프로세스를 생성합니다. 쉘에 명령어를 입력하거나 응용 프로그램을 실행 시키면, OS가 새로운 프로세스를 생성합니다.
제거: 프로세스를 강제로 제거할 수 있습니다. 원래는 대부분의 프로세스는 실행되고 할 일을 다하면 종료하지만, 사용자가 프로세스를 제거하고 싶을 수도 있습니다. 그래서 해당 프로세스를 중단시키기 위해 사용합니다.
대기: 어떤 프로세스의 실행 중지를 기다릴 필요가 있기 때문에 여러 종류의 대기 인터페이스가 제공됩니다.
해당 밑에 내용은 그외의 API입니다.
각종 제어: 프로세스의 제거, 대기 이외에 여러 가지 제어 기능들이 제공됩니다. (예를 들면, 프로세스를 일시정지하거나 재개하는 기능)
상태: 프로세스 상태 정보를 얻어내는 인터페이스를 제공합니다. 상태 정보에는 얼마 동안 실행되었는지 또는 프로세스가 어떤 상태에 있는지 등이 포함됩니다.
프로그램을 실행하면서 코드나 데이터가 필요할 때 필요한 부분만 메모리에 탑재합니다. 코드와 데이터의 늦은 탑재의 동작을 정확하게 이해하기 위해서는 페이징과 스와핑 동작을 이해해야합니다.

코드와 정적 데이터가 메모리로 탑재된 후, 프로세스를 실행시키기 전에 운영체제가 해야 할 일이 몇가지 있습니다. 일정량의 메모리가 프로그램의 실행시간 스택 용도로 할당되야 합니다.
OS는 스택을 주어진 인자로 초기화합니다.
특히, main() 함수의 인자인 argc와 argc 벡터를 사용하여 스택을 초기화합니다.
OS는 프로그램의 힙을 위한 메모리 영역을 할당합니다.
프로그램은 malloc()을 호출해 메모리 공간을 요청하고 free로 해제합니다. 힙은 연결리스트, 해시 테이블, 트리 등 크기가 가변적인 자료 구조를 위해 사용됩니다. 프로그램이 실행되면 malloc() 라이브러리 API를 호출하여 메모리를 요청하고, 운영체제가 이를 충족하도록 메모리를 할당합니다.
OS는 입출력과 관계된 초기화 작업을 수행합니다.
Unix 시스템에서 각 프로세스는 기본적으로 표준 입력(stdin), 표준 출력(stdout), 표준 에러(stderr) 장치에 해당하는 세 개의 파일 디스크립터를 갖습니다. 이 FD들을 이용하여 터미널로부터 입력을 읽고 화면에 출력을 프린트하는 작업을 쉽게 할 수 있습니다.
코드와 정적 데이터를 메모리에 탑재하고, 스택과 힙을 생성하고 초기화하고, 입출력 셋업과 관계된 다른 작업을 마치게 되면, 운영체제는 프로그램 실행을 위한 준비를 마치게 됩니다. 이제 프로그램의 시작 지점과 실행을 시작하는 마지막 작업만이 남습니다. main() 루틴으로 분기함으로써, 운영체제는 CPU를 새로 생성된 프로세스에게 넘기게 되고 프로그램 실행이 시작됩니다.
프로세스의 상태를 단순화하면 세 가지 상태 중 하나에 존재할 수 있습니다.

위의 그림처럼 프로세스는 준비 상태와 실행 상태를 운영체제의 정책에 따라 이동합니다.
해당 과정에 대해서 어떠한 순서, 기준으로 프로세스를 처리할 지는 CPU 스케줄러를 통해 결정을 합니다.
OS도 일종의 프로그램입니다. 다른 프로그램들과 같이 다양한 정보를 유지하기 위한 자료 구조를 가지고 있습니다. 프로세스 상태를 파악하기 위해 준비 / 실행 / 대기 상태의 프로세스들을 위한 프로세스 리스트가 그 예시입니다. 입출력 요청이 완료되면 운영체제는 적절한 프로세스를 꺠워 준비 상태로 전이시킬 수 있어야하기 때문입니다.
레지스터 문맥 자료 구조는 프로세스가 중단되었을 때 해당 프로세스의 레지스터 값들을 저장합니다. 이 레지스터값들을 복원하여 운영체제는 프로세스 실행을 재개합니다. Context switch라는 개념도 여기서 나옵니다.

그림에서 실행, 준비, 대기 외에 다른 상태들이 존재하는 것을 볼 수 있습니다. 초기 상태를 가지는 시스템도 있습니다. 프로세스가 생성되는 동안에는 초기 상태에 머무릅니다.
좀비 상태는 프로세스는 종료되었지만 메모리에 남아 있는 상태로 프로세스가 성공적으로 실행했는지를 부모 프로세스가 검사하는데 유용합니다. 검사를 위해 성공적 종료는 0, 비정상 종료는 0 아닌 값을 반환합니다.
여기서 부모 프로세스는 자식 프로세스의 종료를 대기하는 시스템 콜 wait()을 사용합니다. 이 호출은 종료된 프로세스와 관련된 자원들을 정리할 수 있다고 운영체제에 알리는 역할도 합니다.
다음 개념으로 프로세스 API 개념이 있는데, CSAPP의 시그널 내용 fork() 와 겹치는 부분이 많아 넘어가겠다.