1:operating-system.md
### 운영체제

#### 프로세스와 스레드

> 프로세스라는 실행 단위 내에 스레드라는 실행 맥락이 존재하는 구조

- 프로세스: 프로그램 인스턴스
  - code, data, heap, stack 등 프로그램 구성에 필요한 자원 관리 단위
- 스레드: 프로그램 실행 맥락
  - stack 영역의 맥락 정보를 기준으로 동작을 처리하는 연산 수행 단위

#### 프로그램 메모리 구조

> code, data, heap 영역은 프로세스 단위로 공유, stack 영역은 스레드 단위로 독립적

- code: 컴파일된 읽기 전용 명령 코드
- data: 전역/정적 변수 등 고정 공유 자원 영역
- heap: 인스턴스, 포인터 참조 등 동적 공유 자원 영역
- stack: 변수, 명령 주소 등 실행 맥락 정보

#### 시분할 체계와 병렬 체계

- 시분할 체계: 연산 장치가 여러 실행 맥락을 번갈아 처리하는 방식
- 병렬 체계: 연산 장치가 여러 실행 맥락을 동시에 처리하는 방식

#### 동시성 문제

> 동시성: 여러 작업이 같은 시간 범위에서 겹쳐 진행되는 성질

- 경쟁 상태: 동시성 환경에서 공유 자원의 값이 실행 순서에 의존하는 상태
  - 임계 구역: 경쟁 상태를 방지하기 위해 배타적 접근을 보장하는 코드 영역
- 교착 상태: 여러 자원의 점유, 대기 상태가 서로 얽혀서 진행이 멈춘 상태
- 라이브 락: 여러 자원의 점유, 반환 상태가 서로 얽혀서 진행이 멈춘 상태
- 기아 상태: 스케줄링 정책 문제 때문에 한동안 자원이 할당되지 않는 상태