프로세스란?
- 컴퓨터에서 연속적으로 실행되고 있는 프로그램
- 종종 스케줄링의 대상이 되는 작업(task)라는 용어와 거의 같은 의미로 씀
- 여러 개의 프로세서 사용 => 멀티 프로세싱
프로세스의 구조
- Text Section
- 실행가능한 코드를 저장하는 공간
- 기계어로 저장
- Data Section
- 전역 변수, 정적 변수, 상수 등을 저장하는 공간
- 초기화된 변수와 초기화되지 않은 변수들이 나눠서 저장된다.
- 데이터 영역은 프로그램의 시작 시. 초기화되며, 프로세스가 종료될 때까지 유지된다.
- Heap Section
- 프로그램 실행동안 동적으로 생성되는 데이터 구조나 객체가 저장되는 공간
- 데이터가 추가됨에 따라 유동적으로 공간을 늘릴 수 있음
- 힙은 프로세스의 주소 공간의 나머지 영역에 위치, 크기는 동적으로 확장될 수 있음
- Stack Section
- 함수가 실행되는 동안 지역변수가 저장되는 임시 공간, 대표적으로 함수 매개변수, 리턴 주소, 지역 변수 등이 포함됨
- 프로세스마다 독립적인 stack을 가질 수 있고, stack 포인터를 통해 스택의 상태를 관리함
- 함수 호출 -> stack 공간 생성 , 함수 종료되면 제거됨
프로세스의 상태
- New : 프로세스가 생성된 상태
- Running : 프로세스가 수행되는 상태
- Waiting : 프로세스 이벤트가 발생되어 입/출력 완료를 기다리는 상태
- Ready : 프로세스가 프로세서에 의해 실행되기를 기다리는 상태(언제라도 실행 가능)
- Terminated : 프로세스 실행 종료 상태
프로세스 제어 블록
- 프로세스 상태(Process State) : new, ready, running, waiting, terminated 상태 중 하나에 해당됨
- 프로그램 카운터(Program Counter) : 메모리의 다음 명령어 주소를 저장함
- CPU 레지스터(CPU registers) : IR(Instruction Register), DR(Data Register), PC(Program Counter)와 같은 저장공간이 포함됨
- CPU 스케줄링 정보(CPU-scheduling information) : 프로세스 실행 순서를 정하는 정보
- 메모리 관리 정보(Memory-management information)
- 통계 정보(Accounting Information) : 프로세스의 실행, 시간 제한, 실행 ID 등에 사용되는 CPU양의 정보
- 입/출력 상태 정보(I/O status information)
프로세스와 쓰레드 구분
프로세스
- 실행중인 프로그램을 의미함
- 운영체제로부터 자원을 할당
- 각 프로세스간에는 자원이 독립적으로 할당됨
쓰레드
- 실행 제어만 분리한 것을 의미함
- 프로세스로부터 자원을 할당받음
- 자원 공유로 인해 문제가 발생할 수 있으니 이를 염두에 둔 프로그래밍을 해야함
- 프로세스의 코드/데이터/힙영역을 공유하기 때문에 좀 더 효율적으로 통신할 수 있음
- 컨텍스트 스위칭도 캐시 메모리를 비우지 않아도 되어 프로세스보다 빠름
-> 한 프로세스 안에 여러개의 스레드가 생성될 수 있음
컨텍스트 스위칭란?
- 프로세스에서 문맥(Context)이란 마지막에 수행했던 명령어 위치
- 컨텍스트는 PCB에 표시됨
- 인터럽트가 발생했을 때 운영체제는 현재 수행중인 Context을 저장, 그후 다시 그 프로세스를 수행할 때 저장했던 Context를 복구함
의미
- CPU Core를 다른 프로세스에게 양도하는 것
- 현재 프로세스의 상태를 저장함
- Context Switch하게되면 다른 Process Context 복원함
:참고
[인프런]운영체제 공룡책 강의
[위키백과]프로세스