선 요약
프로세스 = 독립적인 실행공간, 쓰레드 = 스택만 독립적이고 나머지는 공유
프로세스 = "프로그램"의 인스턴스 (= HDD에서 메모리로 올라온 프로그램을 의미)
- 독립적인 실행 환경(자신만의 주소 공간)을 할당받는다.
- 여기서 말하는 환경은 Code, Data, Stack, Heap을 의미한다. 즉, 각 프로세스별로 이 4개를 독립적으로 가짐.
- 프로세스간 메모리 독립적이라서 서로 영향을 주지 않아 다른 프로세스의 변수에 접근 불가능.
- 만약 프로세스간의 통신을 해야한다면 IPC(Inter Process Communication)를 이용해야한다.
쓰레드 = 프로세스 내에서 실행하는 작은 실행단위 (= 프로세스 내의 물줄기들)
- 가장 큰 차이는, 리소스 공유 여부이다. 프로세스는 리소스를 공유하지 않고 만약 공유해야한다면 IPC를 사용한다.
- 그러나 쓰레드는 프로세스의 리소스를 공유한다. 왜냐하면 쓰레드는 Stack만 독립적으로 가지고 있고, Code, Data, Heap은 공유하기 때문이다.
- 이런 구조는 Context Switching이 빠르고 효율적이지만, 공유 데이터 관련 동기화 문제가 있다. → 동기화 문제는 Mutex, Semaphore, CS등으로 관리할 수 있다. 그러나 이 해결법은 데이터는 안전하게 공유하지만, 성능 저하의 문제가 될 수 있고, 데드락이나 일관성문제(race condition) 등이 생길 수 있다.
- 예를 들어, 웹 서버는 하나의 프로세스로 실행되고 여러 스레드를 사용함으로써 동시에 여러 클라이언트의 요청을 처리할 수 있다.
- 각 스레드는 동일한 메모리 공간(웹 페이지, 사용자 데이터 등)에 접근할 수 있지만, 사용자별 세션 정보 같은 특정 데이터는 각각의 스레드에 의해 독립적으로 관리된다.
반응형
'CS 개념 (~24년 7월) > 운영체제' 카테고리의 다른 글
I/O 시나리오, Interrupt (1) | 2024.04.03 |
---|---|
Scheduler, I/O 시나리오 개요 (0) | 2024.03.28 |
RAM, ROM, Booting (0) | 2024.03.28 |
CPU Instruction Cycle, Interrupt 개요 (1) | 2024.03.25 |
CPU 레지스터 (2) | 2024.03.22 |