
1. 프로세스 제어 블록(PCB)
프로세스를 실행할 때 필요한 중요한 정보를 보관하는 자료구조이다. 프로세스가 생성될 때 커널 영역에서 만들어져 프로세스 실행이 끝나면 폐기된다.
PCB에 담기는 대표적인 정보는 아래와 같다.
- 프로세스 ID: 특정 프로세스를 식별하기 위해 부여한 고유 번호
- 레지스터 값: 프로세스는 자신의 실행 차례가 오면 이전까지 사용한 레지스터 중간값을 모두 복원 -> 실행 재개
- 프로세스 상태: 실행, 대기, 준비 등 프로세스 상태
- CPU 스케쥴링 정보: 프로세스가 언제 CPU를 할당받을 지에 대한 정보
- 메모리 정보: 프로세스가 어느 주소에 저장되어 있는지, 페이지 테이블 등
- 사용한 파일과 입출력 장치 정보: 할당된 입출력 장치, 사용중인 파일 정보
2. 문맥 교환(Context Switch)
한 프로세스에서 다른 프로세스로 실행 순서가 넘어가면 기존에 실행되던 프로세스는 중간 정보를 백업한다.
프로그램 카운터와 같은 레지스터 값, 메모리 정보, 파일, 입출력 장치 등
이러한 중간 정보를 문맥이라고 하고, 다음 차례가 왔을 때 실행을 재개하기 위해 백업한다.
이처럼 기존의 실행 중인 프로세스 문맥을 백업하고 새로운 프로세스를 실행하기 위해 문맥을 복구하는 과정을 문맥 교환이라고 한다.
3. 사용자 영역 프로세스
코드 영역(텍스트 영역)
- 실행할 수 있는 코드, 기계어로 이루어진 명령어 저장
- 데이터가 아닌 CPU가 실행할 명령어가 담기기에 쓰기가 금지됨(read only)
데이터 영역
- 프로그램이 실행되는 동안 유지할 데이터 저장(전역 변수 등)
힙 영역
- 프로그램을 만드는 사용자가 직접 할당할 수 있는 저장공간
- 여러 프로그래밍 언어에는 힙 영역에 담긴 메모리를 자동으로 반환해주는 garbage collector가 있음(메모리 누수 방지)
- 일반적으로 낮은 주소에서 높은 주소로 할당
스택 영역
- 데이터가 일시적으로 저장되는 공간(매개 변수, 지역 변수 등)
- 일반적으로 높은 주소에서 낮은 주소로 할당
'CS > 운영체제' 카테고리의 다른 글
[운영체제] 스케줄링 시 고려 사항 (0) | 2024.12.09 |
---|---|
[운영체제] CPU 스케줄링 단계와 목적 (0) | 2024.12.08 |
[운영체제] 스레드 (0) | 2024.11.27 |
[운영체제] 프로세스 계층구조 (0) | 2024.11.26 |
[운영체제] 프로세스의 상태 (0) | 2024.11.24 |