설명 순서는 다음과 같습니다.

1. 기본적인 용어 정리
2. 컴퓨터 시스템의 변천사
3. 스레드의 등장배경
4. 스레드의 특징

1. 기본적인 용어 정리

   - 프로그램 : 컴퓨터가 실행할 수 있는 명령어들의 집합(ex. .exe파일)

   - 프로세스 : 컴퓨터에서 실행중인 프로그램. 이 때 프로세스는 독립적인 메모리 공간을 할당받고 이 공간에 명령어들과 데이터를 가짐

   - CPU : 작업(프로세스, 쓰레드)를 처리하는 연산장치


2. 컴퓨터 시스템의 변천사

   - 처음에는 단일 프로세스 시스템부터 시작

   - 단일 프로세스 시스템이란 한번에 하나의 프로세스만 동작할 수 있음. 풀어서, 현재 실행하는 프로세스를 먼저 끝내고 종료시킨 후 다음 프로세스를 진행하는 방식임

   - 이 방식은 프로세스가 실행도중 Input/Output 작업을 만나서 CPU를 사용하지 않게되면, CPU는 계속 쉬고 있는 단점이 발생함

   - 따라서, CPU의 사용률을 높이기 위해 '여러 개의 프로세스를 메모리에 올려놓고, 현재 진행중인 프로세스가 CPU를 사용하지 않을때, 대기중인 프로세스가 CPU를 사용할 수 있게 하자'는 방식이 등장 -> 멀티 프로그래밍 방식(아마도 멀티프로그래밍 방식의 등장으로 CPU 스케쥴링이 등장한 것이라고 생각)

   - 하지만, 이렇게 프로세스를 여러개 올려놓는 방식도 문제가 있음

   - 한 프로세스가 CPU를 오래 사용하는 작업이라면 뒤에 짧게 사용하는 프로세스는 모두 대기해야함(이러한 단점도 CPU스케쥴링에서 비선점형 방식의 단점이라고 생각). 프로세스의 응답시간이 낮음

   - 그래서, '프로세스는 한번 CPU를 사용할 때 아주 짧은 시간동안만 사용하도록 해서 응답률을 높이자'는 방식이 등장 -> 멀티 태스킹 방식(마치 여러개의 작업을 동시에 처리하는 것처럼 보이게 함. 실제는 프로세스를 빠르게 번갈아가며 실행시키는 방식임)

   - 실행되는 프로세스가 바뀔 때, 그 프로세스가 사용하는 데이터를 불러오는 Context-Switching이라는 비용이 발생하더라도 응답률을 높이기 위해 trade-off


3. 스레드의 등장배경

   - CPU의 성능을 계속 발전시키에는 발열등의 이슈로 한계에 봉착

   - 그래서, CPU안에 코어를 여러개 둠으로써 성능을 향상시키는 방법을 사용

   - 그러면 이제 중요한 이슈는 '어떻게 여러개의 코어를 잘 사용할까'임

   - 이를 해결하기 위해 '프로세스를 여러 개의 프로세스로 나누고 이 작업들을 각자의 코어에서 돌리자'는 방식이 등장 -> 멀티 프로세스 방식

   - 그런데 여기서 더 개선하고 싶은 여지가 있음

      ① 프로세스는 독립된 메모리 공간을 사용해서, 서로 데이터를 공유하기가 어려움

      ② 프로세스 간 Context-Switching 비용을 줄이고 싶음

   - 그래서, 한 프로세스 내부에서 '서로 데이터를 공유하기 쉽고', 'Context-Switching 비용이 적은' 작업 단위인 스레드가 등장


4. 스레드의 특징

   - 이제 한 프로세스를 여러 개의 작업으로 나눌 수 있고, 한 프로세스 내부에서 서로 데이터를 공유하기 쉽고 Context-Switching 비용이 적은 하나의 작업 단위인 스레드를 사용할 수 있음

   - 그리고 이 스레드는 코어가 실행되는 '작업의 단위'가 됨

   - 정리해보면

      ① 한 프로세스는 여러개의 스레드를 가질 수 있음

      ② 스레드는 코어에서 실행되는 작업의 단위임

      ③ 같은 프로세스의 스레드들끼리는 프로세스의 메모리를 공유 -> 그래서 데이터 공유가 쉬움. 스레드들이 독립적으로 사용하는 stack 영역이 있고, code, data, heap영역은 다른 스레드와 공유함

      ④ 위 ③으로 인해, 프로세스에 비해 Context-Switching 비용이 적음

         * 메모리를 공유하기 때문에, PCB에 비해서 TCB는 간단한 정보만 들어있기 때문

         * 프로세스 내 스레드 간 Context-Switching인 경우, 캐시 메모리를 초기화하지 않음(그 스레드 또한 같은 데이터를 사용하기 때문)

       ⑤ 하지만, 서로 다른 스레드가 데이터를 공유하다보니, 이런 자원들의 동기화를 해결해야하는 문제가 있음


프로세스와 스레드에 대해 알아볼 수 있었습니다. 

'운영체제' 카테고리의 다른 글

페이지 교체 알고리즘  (0) 2023.08.10
Deadlock  (0) 2023.08.08
Context Switching  (0) 2023.08.06
캐시(Cache)  (0) 2023.07.31
CPU 스케줄링  (0) 2023.07.31

+ Recent posts