시스템 프로그래밍

11-1. 프로세스와 쓰레드

CalebHong 2022. 5. 31. 14:30

- 멀티 프로세스는 둘 이상의 프로그램을 실행시키기 위해 필요

- 하나의 프로그램은 하나의 흐름을 가지고 실행

  ex) 테트리스에서 멀티 플레이로 2명이 동시에 진행(흐름이 2개)

  ㄴ 하나의 프로그램 내에서 둘 이상의 실행 흐름을 가짐

  ㄴ 하나의 흐름 안에 Context Switching으로 인해 여러 프로세스의 실행으로 보이게 됨

  ㄴ 시작은 부모 프로세스로 시작하지만 자식 프로세스가 생성되어 여러 흐름으로 프로그램이 실행됨

 

 - 프로세스A와 프로세스B가 Code영역을 공유하여 사용해도 무방하지만 각 프로세스가 사용하는 함수를 동일한 Stack영역을 사용하게 되면 성능에 문제가 발생 : A와 B가 동시에 사용하게 되면 스택에 쌓이는 순서와 호출 순서가 뒤섞이게 됨

- 이러한 문제를 해결하기 위해 만들어진 것이 쓰레드

- 쓰레드 A와 쓰레드 B는 프로세스의 Code 영역, Data 영역, Heap 영역의 공간을 공유

  ㄴ 쓰레드는 프로세스의 공유하는 영역에 접근 가능(프로세스 간 통신 기법(IPC) 없이 접근 가능)

- 쓰레드 A, B가 사용하는 Stack 영역은 별도로 마련하여 사용

- 쓰레드와 프로세스는 서로 담당하는 영역이 다른 것이지 대체 가능한 것이 아님