프로세스는 실행 중인 프로그램을 말한다. 프로그램은 하드디스크/보조기억장치에서 동작 하지 않는 상태를 의미하며 메인메모리에 할당되어 CPU를 사용하면서 실행되는 상태가 프로세스이다.
- Program : System Resource를 할당받지 못한 상태
- Process : 프로그램을 실행한 것으로 System Resource를 할당받은 상태
프로세스 메모리 구조
하나의 프로그램이 실행이 되어 프로세스로 전환되면 메인 메모리 상에서 하나의 세그먼트는 아래와 같은 구조를 가진다.
stack 영역
함수를 호출할 때마다 스택 영역에 함수에 관련된 정보가 쌓인다.
- 지역변수, 함수 호출 주소, 파라미터 등 함수에 필요한 정보가 포함된다.
- LIFO 구조로 함수를 호출할 때 필요한 정보를 쌓고, 함수가 종료되면 해당 영역을 pop 한다.
- 컴파일 시 영역 크기가 결정되며 스택 영역을 벗어날 경우 stack overflow가 발생한다.
heap 영역
프로그램 실행 중 할당된 변수(동적 할당 변수)가 포함된다.
- 데이터 삽입, 삭제가 빈번해 링크드리스트로 관리한다.
- 실행 도중 크기가 변경되며 힙 영역을 벗어나면 (stack 영역을 침범) heap overflow가 발생한다.
data 영역
- 전역변수, static 변수 등이 포함되며 컴파일 시 영역 크기가 결정된다.
- 초기화된 변수를 저장한다.
text 영역
프로그램을 실행하게 되면 text 영역에 있는 어셈블리 코드들이 한 줄씩 실행되며 프로그램이 동작하게 된다.
- 프로그램 코드가 CPU에서 수행할 수 있는 기계어 형태로 변환되어 저장된 공간이다.
- 컴파일 시 영역의 크기가 결정되며 read-only 상태이다.
프로세스 상태
생성 New 상태
- 프로그램이 커널 영역에서 PCB를 부여받아 프로세스로 생성된 상태
준비 Ready 상태
- 프로세스가 CPU를 할당 받기 위해 기다리는 상태
- S는 CPU 스케쥴링을 통해 우선순위가 높은 프로세스에게 CPU를 할당 Dispatch
실행 Running 상태
- 프로세스의 명령어가 실행되고 있는 상태
- CPU 스케쥴링 정책에 의해 CPU 자원을 빼앗기고 준비 상태로 변경될 수 있음 Time runout, Interrupt
- 프로세스가 I/O 작업 혹은 자원을 요청(System Call)하면 대기 상태로 변경 Block -> 다른 프로세스를 실행
대기 Waiting 상태
- 프로세스가 요청한 작업이 완료될 때까지 대기하는 상태
- 요청이 완료되면 준비 상태로 변경 Wake up
종료 Terminated 상태
- 프로세스가 정상적으로 실행을 완료하고 자원을 반납한 상태
- OS는 해당 프로세스의 흔적을 정리한 후 PCB를 삭제
728x90