프로세스: 컴퓨터에서 실행 중인 하나의 프로그램을 의미
- 프로그램은 특정 작업을 수행하기 위한 명령어의 집합
- os는 프로그램을 실행하면서 디스크에 저장된 데이터를 메모리로 로드
- 프로세스는 os로부터 독립된 메모리 영역(코드, 데이터, 스택, 힙)을 할당받으며, 다른 프로세스의 메모리 영역에 접근할 수 없다


메모리 영역
- 스택(stack)
- 지역 변수, 함수의 매개변수, 반환되는 주소 값 등이 저장되는 영역
- 높은 주소 값에서 낮은 주소 값으로 메모리가 할당되며, 영역 크기는 컴파일 때 결정 됨
- 힙(heap)
- 사용자에 의해 동적 메모리 할당이 일어나는 영역
- C언어에서 malloc()으로 할당되는 영역
- 낮은 주소 값에서 높은 주소 값으로 메모리가 할당
- 영역 크기는 런타임 때 결정
- 데이터
- 전역 변수, 정적 변수, 배열, 구조체 등이 저장되는 영역
- 데이터 영역은 세부적으로 BSS(Block Stated Symbol) 영역과 데이터 영역으로 다시 나뉨
- BSS 영역은 초기화하지 않는 변수를, 데이터 영역은 초기화한 변수를 저장한다
- 코드
- 실행할 코드가 기계어로 컴파일 되어 저장되는 영역
- 텍스트 영역이라고도 함
- 스택 영역과 힙 영역은 동적으로 메모리 할당이 가능해 두 영역 사이에 빈 메모리 공간이 존재
- 스택은 LIFO(후입선출)방식으로, 높은 주소 값에서 낮은 주소 값 순서로 사용
- 힙 영역은 FIFO(선입선출)방식으로, 낮은 주소 값에서 높은 주소 값 순서로 사용
- 그러나 메모리 영역을 공유하기 때문에 서로의 영역을 침범하는 문제가 생길 수 있음
- 스택 오버플로(stack overflow): 스택 영역이 힙 영역을 침법하는 경우
- 힙 오버플로(heap overflow): 힙 영역이 스택 영역을 침법하는 경우
** 오버플로(overflow): 메모리 공간에서 할당할 수 있는 최대 범위를 넘어가는 것
** 언더플로(underflow): 메모리 공간에서 할당할 수 있는 최소 범위보다 작은 것
스레드: 프로세스에서 실제로 실행되는 흐름의 단위
- 프로세스는 하나 이상의 스레드를 가진다
- 스레드는 프로세스 안에 존재하므로 프로세스의 메모리 공간을 이용
- 지역 변수를 저장하는 스택 영역을 할당받는다
- 전역 변수를 저장하는 힙 영역은 다른 스레드와 공유한다

사용자 레벨 스레드와 커널 레벨 스레드

- 커널에서 관리하는 자원을 보호하기 위해 내부적으로 사용자 모드와 커널 모드를 구분한다
- 이와 마찬가지로 스레드도 스레드를 관리하는 주체에 따라 구분된다
- 사용자 레벨 스레드는 사용자가 라이브러리를 이용해 생성 및 관리한다
- 커널 레벨 스레드는 커널이 스레드를 생성 및 관리한다
- 멀티 스레드 환경에서 사용자 레벨 스레드와 커널 레벨 스레드는 3가지 관계를 맺을 수 있다

1. 다대일 모델
- 사용자 레벨 스레드 n개에 커널 레벨 스레드 1개가 매핑되어 사용자 레벨에서 스레드를 관리
- 하나의 사용자 레벨 스레드에서 시스템 콜을 호출하면 나머지 사용자 레벨 스레드는 커널 레벨에 접근할 수 없으므로 멀티 코어의 병렬성을 이용할 수 없다

2. 일대일 모델
- 사용자 레벨 스레드 1개에 커널 레벨 스레드 1개가 매핑된다
- 하나의 사용자 레벨 스레드에서 시스템 콜을 호출하면 다른 사용자 레벨 스레드가 모두 실행되지 않는 다대일 모델의 단점 해결
- 그러나 사용자 레벨 스레드 수만큼 커널 레벨 스레드가 생성되므로 성능 저하가 일어날 수 있음

3. 다대다 모델
- 사용자 레벨 스레드 n개에 커널 레벨 스레드 m개가 매핑된다
- 이때 커널 레벨 스레드의 수(m)는 사용자 레벨 스레드의 수(n) 이하다
- 이 방식은 다대일 모델과 일대일 모델의 장점을 포함하지만 구현이 어렵다는 단점이 있다
'CS' 카테고리의 다른 글
7. 운영체제 - 프로세스의 생성 (0) | 2024.03.05 |
---|---|
6. 운영체제 - PCB(Process Control block) (0) | 2024.03.05 |
4. 운영체제 - 커널과 시스템 콜 (1) | 2024.03.04 |
3. 운영체제 - CPU와 메모리 구조 (0) | 2024.03.04 |
2. 운영체제 - 운영체제의 목적 (0) | 2024.03.04 |