운영체제11 - 프로세스와 스레드 그리고 병행성

운영체제를 공부하기 위해 운영체제 아주 쉬운 세 가지 이야기 라는 책을 읽고 공부한 내용을 정리합니다.
잘못되거나 부족한 부분이 있으면 언제든 댓글로 가르침 부탁드립니다.

목차

  1. 스레드
  2. 주요 병행성 관련 용어

1. 스레드

1.1 스레드란?

스레드는 프로세스의 작업 단위를 뜻한다. 한 프로세스가 한번에 한 작업만 한다면 싱글스레드, 한번에 여러 작업을 동시에 한다면 멀티스레드이다. 여기서 싱글스레드를 여러 개 운영하는 것이 아닌, 멀티스레드를 이용하는 이유는 메모리 공유로 인한 효율성 증가 이점을 얻음과 동시에 잦은 컨텍스트 스위칭으로 인한 성능 저하 문제를 해결하기 위함이다.

1.2 스레드와 프로세스의 차이

이 둘의 가장 큰 차이점은 공유 메모리 영역이다. 프로세스는 코드, 데이터, 힙, 스택 4가지 데이터 영역을 프로세스마다 각각 따로 가지고 있다. 하지만 스레드는 스택을 제외한 나머지 3가지 데이터 영역을 동일 프로세스 내에 있는 다른 스레드들과 공유한다.

1.3 병행성 문제 발생

스레드는 스택 외의 나머지 메모리를 공유하다보니, 여러 스레드가 하나의 데이터에 접근했을 때 문제가 발생한다. 따라서 실행 순서에 따라 결과가 달라지는 상황이 발생하게 된다. 이는 상호 배제(Mutual Exclusion)을 통해 해결할 것이다.(이후)

2. 주요 병행성 관련 용어

  • 임계영역(critical section) : 같은 공유 자원을 접근하는 코드
  • 경쟁조건(race condition) : 명령어의 실행 순서에 따라 결과가 달라지는 상황
  • 비결정적(indeterminate) : 일반적으로 발생하는 결정적 결과와 달리, 결과를 예측할 수 없거나 실행마다 다른 결과가 나오는 경우
Published 25 Sep 2019


jaegoon on github