프로세스 & 스레드
프로세스: 메모리 상에서 실행중인 작업(프로그램), CPU 스케줄링의 대상이 되는 작업
스레드: 프로세스 내 작업의 흐름
- 프로그램이 메모리에 올라가면 프로세스가 됨 (인스턴스화)
- 기본적으로 프로세스마다 최소 1개의 스레드 소유
- 프로세스는 각각 별도의 주소공간 할당
동적 영역 - 스택, 힙
정적 영역 - 데이터 영역 (BSS Segment, Data segment), 코드 영역
스택
- 지역변수, 매개변수, 함수 저장
- 컴파일 시 크기 결정
- 동적인 특징 가짐
- 함수가 함수를 재귀적으로 호출하면서 동적으로 크기 늘어날 수 있음
→ 힙과 메모리 안 겹치게 사이 공간 비워놓음
힙
- 동적 할당 시 사용
- 런타임 시 크기 결정 (e.g. 벡터같은 동적 배열)
- 동적인 특징 가짐
데이터 영역
- 전역변수, 정적변수 저장
- 프로그램이 종료되면 사라지는 변수가 들어있는 정적인 특징을 갖는 영역
- BSS 영역과 Data 영역으로 나뉨
- BSS - 초기화되지 않은 변수가 0으로 저장
- Data - 0이 아닌 다른 값으로 할당된 변수 저장
코드 영역
- 프로그램에 내장된 소스 코드가 들어가는 영역
- 수정 불가능한 기계어로 저장되어 있음
- 정적인 특징 가짐
프로세스 - 자신만의 고유 공간과 자원 할당 받아 사용
스레드 - 다른 스레드와 공간, 자원 공유하며 사용, Stack만 따로 할당받음
PCB (Process Control Block)
- 프로세스에 대한 메타데이터를 저장한 데이터, 프로세스 제어 블록
- 프로세스가 생성되면 운영체제가 해당 PCB 생성
- 프로그램 실행 → 프로세스 생성 → 프로세스 주소 값들에 메모리 할당
→ 메타데이터들이 PCB에 저장되어 관리
- 프로세스의 중요한 정보를 포함, 일반 사용자가 접근하지 못하게 커널 스택의 가장 앞부분에서 관리
메타데이터
- 데이터에 관한 구조화된 데이터, 데이터를 설명하는 작은 데이터
- 대량의 정보 중 찾는 정보를 효율적으로 찾아내기 위해 일정 규칙에 따라 콘텐츠에 대해 부여되는 데이터
PCB의 구조
- 프로세스 스케줄링 상태: ‘준비’, ‘일시중단’ 프로세스가 CPU에 대한 소유권을 얻은 이후의 프로세스 상태
- 프로세스 ID: 프로세스 ID, 해당 프로세스의 자식 프로세스 ID
- 프로세스 권한: 컴퓨터 자원 또는 I/O 디바이스에 대한 권한 정보
- 프로그램 카운터: 프로세스에서 실행해야 할 다음 명령어의 주소 포인터
- CPU 레지스터: 프로세스를 실행하기 위해 저장해야 할 레지스터에 대한 정보
- CPU 스케줄링 정보: CPU 스케줄러에 의해 중단된 시간 등에 대한 정보
- 계정 정보: 프로세스 실행에 사용된 CPU 사용량, 실행한 유저의 정보
- I/O 상태 정보: 프로세스에 할당된 I/O 디바이스 목록
Context Switching
- PCB를 교환하는 과정
- 실행중인 프로세스가 대기 상태로 바뀌면서 프로세스 상태가 보관되고,
다음 순번의 프로세스가 실행되면서 보관된 프로세스 상태를 불러오는 과정
- 프로세스는 독립된 메모리 영역을 할당받아 사용
→ 캐시 메모리 초기화와 같은 무거운 작업 진행 시 오버헤드 발생하는 문제 존재