[OS] 프로그램/프로세스/스레드/컨텍스트 스위칭
Updated:
프로그램
- 실행되고 있지 않은(메모리에 올라가 있지 않은) 정적인 상태의 명령어 집합체
프로세스
- 운영체제로부터 자원을 할당 받아 실행 중인 동적인 상태의 프로그램
- 운영체제 작업의 최소 단위
- 최소 1개 이상의 스레드로 구성
- 메모리 구조
- 코드 영역
- 기계어 형태의 명령어 코드가 저장
- CPU가 명령어를 하나씩 가져와서 처리
- 데이터 역역
- 전역 변수와 정적 변수가 저장
- 프로그램 시작 시 할당되어 종료 시 소멸
- 컴파일 타임에 크기가 결정
- 스택 영역
- 함수 복귀 주소, 지역변수, 매개변수, 리턴 값 등이 임시로 저장
- 함수 호출 시 할당되고 반환 시 소멸
- 컴파일 타임에 크기가 결정
- 힙 영역
- 동적 데이터 영역
- 컴파일 타임에 크기가 결정
- 상태
- new
- 생성 중
- ready
- 실행 준비가 끝난 상태에서 프로세서에 할당되기를 대기
- running
- 프로세스가 프로세서를 차지하여 명령어들을 실행 중
- waiting
- I/O, signal 등의 이벤트를 대기 중
- terminated
- 종료
- 코드 영역
- 통신 방법
- IPC(Inter Process Communication)
- LPC(Local inter-Process Communication)
- shared memory
- 프로세스 제어 블록(PCB, Process Control Block)
- 운영체제가 프로세스 관리하기 위해 필요한 정보를 지닌 운영체제 커널의 자료 구조
- 작업 제어 블록(TCB, Task Control Block)라고도 불림
- 정보
- 식별자
- 상태
- 프로그램 계수기
- 레지스터
- 스케줄링 정보
- 메모리 관리 정보
- 프로세스 계정 정보
- 입출력 상태 정보
스레드
- 프로세스가 할당 받은 자원을 이용하는 CPU 작업의 최소 단위
- 레지스터, 스택 영역외에는 프로세스와 공유
프로세스 VS 스레드
- 생성 비용
- 스택 영역만 새로 할당받으면 되는 스레드의 생성 비용이 낮음
- 자원 비용
- 스택 영역외의 메모리를 공유하는 스레드의 자원 비용이 낮음
- 통신 비용
- 프로세스간의 공유되는 메모리가 없으므로 통신 비용 증가
- 스레드는 같은 이유로 인해 병목 현상, 데드락 등의 문제를 수반
- 비정상 종료 시 영향 범위
- 프로세스
- 공유 파일 등의 손상을 제외하면 거의 없음
- 스레드
- 프로세스가 비정상 종료
- 즉 모든 스레드가 비정상 종료
- 프로세스가 비정상 종료
- 프로세스
- 컨텍스트 스위칭
- 프로세스의 경우 공유하는 데이터가 없어서 레지스터, 캐시 메모리의 많은 부분이 스위칭되어야 하므로 느림
- 스레드는 스택을 제외한 나머지를 공유하므로 스위칭 속도가 빠름
컨텍스트 스위칭
- 인터럽트 요청에 의해 현재 실행 중인 프로세스의 컨텍스트(상태, 레지스터 값)와 실행해야 할 프로세스의 컨텍스트가 전환되는 과정