[Computer Science] 프로세스와 스레드

허북이_·2022년 10월 13일
0

Computer Science

목록 보기
4/4
post-thumbnail

💻 프로세스와 스레드

1. 1 프로세스 (Process)

프로세스는 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 말한다. 종종 스케줄링의 대상이 되는 작업(task)이라는 용어와 거의 같은 의미로 쓰인다. -Wikipedia

여러 개의 프로세서를 사용하는 것을 멀티프로세싱이라고 하며 동시에 여러 개의 프로그램을 띄우는 시분할 방식을 멀티태스킹이라고 합니다.

1. 1. 1 🤔 그럼 프로세스와 프로그램은 같은 것인가요?

아닙니다. 프로그램은 일반적으로 메모리에 저장되어있는 소스코드 자체를 의미하며, 프로세스는 해당 프로그램을 실행하여 메모리 상에서 실행되는 작업 단위를 말합니다.

예를 들어 구글 Chrome을 여러 번 켰을 때, 우리는 하나의 프로그램을 실행한 것이지만 여러 개의 프로세스가 나타나는 것을 확인 할 수 있습니다.

1. 1. 2 프로세스의 상태

프로세스의 상태는 커널이라는 OS의 핵심이 되는 프로그램으로 준비 큐, 대기 큐, 실행 큐 등의 자료 구조를 이용하여 관리합니다.

  • 생성(create) : 프로세스가 생성되는 상태입니다.

  • 실행(running) : 프로세스가 CPU를 차지하여 명령어들이 실행되고 있는 상태입니다.

  • 준비(ready) : 프로세스가 CPU를 사용하고 있진 않지만 언제든지 사용할 수 있는 상태며, CPU가 할당되기를 기다리고 있습니다.

  • 대기(wating) : 보류(block)라고 불리기도 하며, 프로세스가 입출력 완료되고 신호 수신 등 어떤 사건을 기다리고 있는 상태입니다.

  • 종료(terminated) : 프로세스의 실행이 종료된 상태입니다.

1.1.3 프로세스의 상태전이

하나의 프로그램이 실행되면, 그 프로그램에 대응되는 프로세스가 생성되어 준비 리스트의 끝에 들어가게 됩니다.

이때 우선순위를 부여하여 가장 높은 우선순위를 가진 프로세스가 다음 순서에 CPU 할당을 받게 됩니다.

  • 디스패치(dispatch)
    가장 높은 우선순위를 가진 프로세스가 CPU 할당을 받아 점유하게 되는 것. 준비 상태에서 실행 상태로 바뀌는 것을 의미합니다.

  • 보류(block)
    실행중인 프로세스에서 입출력 동작을 요구할 경우 CPU는 입출력 관리자에게 작업을 맡기고 프로세스를 대기 상태로 만듭니다. 이때 해당 프로세스는 CPU 점유를 반납하게 됩니다.

  • 깨움(wakeup)
    입출력 작업 종료같은 보류의 원인이 끝났을 때, 대기 상태에서 다시 준비 상태로 넘어가는 것을 의미합니다.

  • 시간제한(timeout)
    OS는 효율적인 자원 관리를 위해 프로세스가 계속해서 독점 사용하는 것을 막기 위해 clock interrupt를 두어서 일정 시간동안만 프로세서를 점유할 수 있게 합니다.

1. 2 스레드(Thread)

스레드(thread)는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다. - Wikipedia

일반적으로 한 프로그램은 한 개의 스레드를 가지고 있지만, 프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있습니다. 이러한 실행 방식을 멀티스레드라고 합니다.
또한 각각의 스레드는 독립작인 작업을 수행하기 위해 고유한 ID, 프로그램 카운터, 레지스터, 집합, 스택 등을 가지고 있습니다.

1. 2. 1 🤔 프로그램? 프로세스? 스레드?

정리하자면 프로그램을 실행한 작업의 단위를 프로세스라고 부르며, 프로세스 내에서 실행되는 여러 흐름의 단위를 스레드라고 합니다.

스레드는 프로세스에 종속되어 있다고 말할 수 있습니다.

1. 2. 2 싱글 스레드와 멀티 스레드

싱글 스레드

싱글 스레드는 하나의 프로세스에서 오직 하나의 스레드로만 실행되는 방식입니다. 따라서 하나의 레지스터와 스택으로 표현이 가능합니다.

👍 싱글 스레드의 장점

  1. 문맥(작업) 교환 작업을 요구하지 않습니다.
    문맥 교환은 여러 개의 프로세스가 하나의 프로세서를 공유할 때 발생하는 작업으로 많은 비용을 필요로 합니다.

  2. 자원 접근에 대한 동기화에 자유롭습니다
    멀티 스레드의 경우 프로세스의 자원을 공유하기 때문에 각 스레드가 원하는 결과를 얻기 위해서 자원에 대한 접근을 제어해야합니다.

    예를 들어 두 개 이상의 스레드가 동시에 같은 자원에 접근하려고 한다면 에러가 발생하거나 원치않는 결과를 초래할 수 있습니다. 따라서, 이런 현상이 방지하지 않도록 제어해주어야만 합니다.

👎 싱글 스레드의 단점

  1. 여러 개의 CPU를 활용하지 못합니다.

  2. 연산량이 많은 작업의 경우 딜레이가 발생할 수 있습니다.
    오래 걸리는 작업을 수행하는 경우 해당 작업이 완료되어야만 다음 작업을 수행할 수 있게 됩니다. 이 현상이 누적되면 딜레이되는 시간은 계속해서 길어지게 됩니다.

멀티 스레드

멀티스레드는 문맥 교환(Context Switching)을 통해 이루어집니다. 여기서 문맥 교환은 CPU에서 여러 프로세스를 돌아가며 작업을 처리하는 과정을 말합니다. 위에서 말한 보류와 깨움으로 이루어진 일련의 작업입니다.

👍 멀티 스레드의 장점

  • 시스템 자원의 소모가 감소합니다.
    프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원 관리에 효율적입니다.
  • 시스템 처리 비용 감소
    프로세스 내 각 스레드 간의 자원 공유가 간단해지며 스레드 간의 작업량도 줄어듭니다.

👎 멀티 스레드의 단점

  • 주의 깊은 설계가 필요합니다.
    멀티 스레드 모델은 싱글 스레드 모델에 비교해 설계하기 굉장히 까다롭습니다.
  • 사용하는 스레드의 수만큼 자원을 많이 사용합니다.
  • 스레드 스케줄링이 필요합니다.
    공유 자원에 동시에 접근하는 경우 다른 스레드에서 사용 중인 엉뚱한 값에 사이드 이펙트를 초래할 수 있습니다. 따라서 스레드 스케줄링을 통해 동시에 접근하는 경우를 막아야합니다.

Reference.
위키피디아 - 스레드
위키피디아 - 프로세스
싱글스레드 vs 멀티스레드
프로세스와 스레드의 차이

profile
인간 거북이 허북이

0개의 댓글