3.1 프로세스란?
- 프로세스란 실행중인 프로그램을 의미한다. 즉, 프로그램이 디스크에 저장된 정적인 명령어와 데이터의 집합이라면, 프로세스는 이 프로그램이 메모리에 적재되어 실행되고 있는 동적인 개체이다.
- 프로세스는 운영체제 1장에서 다뤘듯이 코드영역, 데이터영역, 힙영역, 스택 영역으로 구성되어있다. 추가로 가장 위에는 밑의 내용에서 다룰프로세스 제어블록(PCB)이 있다.
- 프로세스는 운영체제가 프로그램을 실행하고 관리하기 위한 기본 단위로서, 시스템 자원을 효율적으로 활용하고 안정적인 프로그램 실행을 보장하는 데 핵심적인 역할을 한다.
디스패처

- CPU 스케줄러가 선택한 프로세스에 실제로 CPU를 할당하는 역할
- 디스패처는 수행이 끝나거나 블록 상태인 프로세스를 준비 상태인 다른 프로세스에 처리기(CPU)를 옮기는 작업을 수행한다.
- 현재 실행 중인 프로세스의 상태를 저장하여 실행 중인 프로세스의 레지스터 값 등 현재 상태를 보존하고, 새로 선택된 프로세스의 상태를 복원하여 새롭게 실행될 프로세스의 이전 상태를 복원하여 실행을 재개한다.
3.2 프로세스 상태
7-상태 프로세스 모델(중요)

- 5-상태 프로세스 모델에서 메모리 공간이 부족할 수 있기 때문에 HDD(swap-space)를 추가하여 7-상태 프로세스 모델을 만들었다.
- 생성(create) : 주소공간 생성 및 자료구조 구축, 승인(admit)시 준비(ready)상태가 된다.
- 수행(running) : 준비(ready)상태인 프로세스에서 디스패처가 디스패치(dispatch)하면 수행(running) 상태가 되고, 시분할 시스템(Time-Sharing-System)에서 수행(running)중에 할당된 할당 시간 할당량을 모두 사용하면 시간만료(time out)가 되어 다시 준비(ready) 상태가 된다.
- 블록(blocked) : I/O 입력 작업과 같은 이벤트를 잠깐 대기해야 할 때 블록(blocked)상태가 되고, 기다리던 이벤트나 입력이 완료가 되면(사건 발생) 준비(ready)상태가 된다.
- 보류(suspending) : 준비(ready)상태나 블록(blocked)상태에서 메모리 공간이 부족할 때나 다른 경우에 스와핑(swapping)(정확히는 swap-out)을 통해 보류(suspending)상태가 된다.
- 스와핑(swapping) : 종료되지 않은 프로세스의 전체이미지(또는일부이미지)를
메인 메모리 -> swap-space로 이동시키는 것을 swap-out 이라고 하고, swap-space -> 메인메모리 이렇게 이동시키는 것을 swap-in 이라고 한다.
- 추가적으로 swap-space와 메인메모리를 스와핑하는 과정은 가상메모리를 예시로 들 수 있다. 또한 주로 블록(block)상태에 있는 작업을 swap-space로 내리고 swap-space에서 준비(ready)상태로 올린다.

3.3 프로세스 기술(description): OS
OS : 프로세스와 자원 관리를 담당
OS 제어구조
- 각 프로세스 및 자원의 현재 상태에 대한 정보를 유지한다.
- 보통, OS가 관리하는 각 개체(entity)를 위한 4개의 테이블(메모리, I/O, 파일, 프로세스)이 구성된다. 아래부터는 각 4개의 테이블을 알아보자.
메모리 테이블
- 프로세스의 주소(메인메모리 주소) 정보
- 프로세스들에 할당된 2차메모리(디스크) 정보
- 공유 메모리 영역에 접근하기 위한 보호 속성
- 가상메모리를 관리하는 필요한 정보
I/O 테이블
- I/O 연산에 필요한 정보 유지(I/O장치가 이용가능한가, 어디에 할당되어있는가 등,,,)
- I/O 전송에서 소스 또는 목적지 주소로 사용될 메인메모리에서의 위치
파일 테이블
- 2차 메모리에서의 위치
- 현재 상태, 속성(Attributes)
- 파일 시스템을 관리하는데 필요한 정보
프로세스 테이블
- 프로세스 위치 정보
- 프로세스 제어블록(PCB)의 속성: 프로그램, 데이터, 스택
문맥
문맥이란 프로세스의 현재 상태와 관련된 모든 정보를 의미한다.
강의자료에는 커널이 관리하는 태스크의 자원과 제어 흐름의 집합이라고 나와있다. 문맥은 시스템 문맥, 메모리 문맥, 하드웨어 문맥 3가지로 나누어져 있다.
시스템 문맥(system context)은 커널이 관리하는 자료구조이다. 커널이 메모리를 관리하는 테이블, 파일 테이블, I/O 테이블의 모든 자료구조라고 할 수 있다.
메모리 문맥(memory context)은 프로세스 이미지이다. 메인메모리에 있는 프로세스 이미지, 또는 swap-space에 있는 프로세스 이미지를 말한다.
하드웨어문맥(hardware context)은 CPU 레지스터 값이다. 인터럽트 서비스 루틴으로 점프할 때 CPU레지스터에 복사해놓는 값이라고도 할 수 있다.
프로세스제어블록: process table
프로세스 제어 블록(PCB): 각 프로세스의 정보를 저장하는 데이터 구조이다. 각 프로세스는 고유한 PCB를 가지며, 이를 통해 프로세스 상태, 메모리 사용, 스케줄링 정보 등이 관리된다.
이 사진을 통해 해석해보자면, 프로세스 테이블이 있고 프로세스 테이블에는 각 PCB에 대한 포인터값이 있다. 이를 통해 운영체제는 PCB에 빠르게 접근할 수 있다.
운영체제는 시스템 전체 또는 사용자별 프로세스 테이블에 각 프로세스의 PCB에 대한 포인터를 유지한다. 이를 통해 운영체제는 PCB에 빠르게 접근할 수 있다.
프로세스가 종료되면, 운영체제는 해당 프로세스를 프로세스 테이블에서 제거하고, 그 프로세스가 사용하던 모든 자원을 해제한다.
프로세스 이미지

PCB의 전형적인 구성요소
프로세스 식별
식별자
- 이 프로세스의 식별자
- 이 프로세스를 생성한 프로세스(부모 프로세스)의 식별자
- 사용자 식별자
처리기 상태정보
사용자가 사용 가능한 레지스터
- 처리기가 사용자 모드에서 수행하는 기계 언어에 의해 참조될 수 있는 레지스터
제어 레지스터 및 상태 레지스터
- 다음과 같이 처리기의 동작을 제어하기 위해 사용되는 다양한 처리기 레지스터가 있다.
- 프로그램 카운터(PC) : 다음에 반입(fetch)할 명령어의 주소를 가진다.(잘 모르겠으면 운영체제 1-1을 다시 보고 오자)
- 조건 코드: 가장 최근에 수행된 산술 또는 논리 연산의 결과
- 상태 정보: 인터럽트 가능/불가 플래그들과 수행모드를 가짐
- 스택 포인터: 스택은 프로시저와 시스템 호출의 매개변수와 호출 주소를 저장하는데 사용된다.
프로세스 제어정보

프로그램 상태 워드(PSW)
1장에서 말했듯이, PSW는 CPU의 현재 상태 및 실행 정보를 저장하는 레지스터로, 인터럽트 처리나 문맥 전환(Context Switching) 시 중요한 역할을 한다.

3.4 프로세스 제어
3.5 운영체제의 실행
3.6 UNIX SVR4의 프로세스 관리