프로세스
- 메모리에 로딩되어 실행되는 프로그램
- 프로세스 생성은 보조기억장치에 있는 프로그램 데이터를 메모리에 로딩하는 것을 말한다.
- process
- foreground process
- background process
- 사용자와 상호작용하지 않는 백그라운드 프로세스 : daemon (unix), service (windows)
프로세스 제어 블록 (PCB, process control block)
- 프로세스와 관련된 정보를 저장하는 자료구조
- kernel space에 생성된다.
- 운영체제는 프로세스의 실행 순서 관리와 CPU와 같은 자원 배분에 PCB를 활용한다.
- 프로세스 생성 = 운영체제가 PCB 생성 / 프로세스 종료 = 운영체제가 PCB 폐기
- 저장되는 정보 (운영체제마다 어느정도 차이가 있음)
- PID (process ID) : 프로세스 식별자
- 레지스터 값 : 이전까지 사용했던 레지스터 값들을 복원하기 위해
- program counter와 같은 레지스터 값들
- 프로세스 상태 : new, ready, running, blocked, terminated
- CPU 스케줄링 정보 : 프로세스가 언제, 어떤 순서로 CPU를 할당 받을지에 대한 정보
- 메모리 관리 정보 : 프로세스가 어느 주소에 저장되었는지
- 베이스 레지스터, 한계 레지스터, 페이지 테이블 정보 등
- 사용한 파일 & 입출력장치 목록
context switching (문맥 교환)
- context : 하나의 프로세스 수행을 재개하기 위해 기억해야할 정보 → PCB에 저장된다.
- context switching : 기존 프로세스의 context를 PCB에 백업하고 새로운 프로세스에 대한 context를 PCB에서 복구하여 실행하는 것
- context switching을 너무 자주하면 오버헤드가 발생할 수 있다.
프로세스의 메모리 영역
- memory
- kernel space
- user space
- stack segment
- 데이터를 일시적으로 저장하는 공간
- 매개 변수, 지역 변수
- 동적 할당 영역에 포함
- heap segment
- 프로그래머가 직접 할당할 수 있는 저장 공간
- 메모리를 반환하지 않으면 memory leak 발생 가능
- 동적 할당 영역에 포함
- data segment
- 프로그램이 실행되는 동안 유지할 데이터가 저장되는 공간
- 전역변수
- 정적 할당 영역에 포함
- code segment
- 기계어가 저장되는 공간
- CPU가 실행할 명령어가 저장되어 있기 때문에 read-only
- 정적 할당 영역에 포함
- 동적으로 할당되는 주소가 겹치지 않게 일반적으로 heap 영역은 메모리의 낮은 주소에서 높은 주소로 할당되고, stack 영역은 높은 주소에서 낮은 주소로 할당된다.