Adventure Time - Finn 3

새소식

운영체제

[운영체제] 프로세스(Process)와 스레드(Thread)

  • -

 

✔️ 프로세스란?

  • 프로세스는 운영 체제에서 실행 중인 프로그램을 나타내는 단위입니다.
  • 프로세스 내부에는 최소 하나의 스레드(thread)를 가지고 있는데, 실제로는 스레드(thread) 단위로 스케줄링을 한다.
  • 각 프로세스는 독립된 메모리 공간을 할당받아 실행되며, 운영 체제는 프로세스를 생성, 제어, 종료하고 여러 프로세스 간의 상호작용을 관리합니다.
  • 프로세스의 메모리 영역은 Code, Data, Heap, Stack 등을 가지고 있습니다.

 

 

 

✔️ 프로세스의 상태

  1. 실행(Running) : 현재 CPU에서 실행중인 상태입니다.
  2. 준비(Ready) : 실행 가능한 상태로, CPU를 할당받기 위해 대기 중인 상태입니다.
  3. 대기(Blocked, Waiting, Sleep)     
    - 특정 이벤트 발생을 기다리는 상태로, 예를 들어 입출력 완료를 기다리거나 락(lock)을 획득하기 위해 대기하는 상태입니다.
    - CPU를 주어도 당장 instruction 을 수행할 수 없는 상태입니다.
  4. 종료(Terminated) : 실행이 완료된 상태로, 운영 체제에 의해 자원이 해제되고 종료되는 상태입니다.

 

Process State

 

 

 

 

✔️ PCB(Process Control Block)

  • 운영체제가 프로세스를 제어하기 위해 정보를 저장해 놓는 곳으로, 프로세스의 상태 정보를 저장하는 구조체입니다.
  • 프로세스 상태 관리와 문맥 교환(Context Switching)을 위해 필요합니다.
  • PCB는 프로세스 생성 시 만들어지며 주기억장치에 유지된다.

 

 

✔️ PCB의 구조

  1. 프로세스 식별자(Process ID) : 각 프로세스가 갖는 고유한 식별자입니다.
  2. 프로세스 상태(Process State) : 프로세스는 실행 중, 대기 중, 준비 중 등의 여러 상태를 갖고 PCB는 현재 프로세스 상태를 추적합니다.
  3. 레지스터 상태(Register State) : 프로세스가 실행되는 동안 레지스터에 저장되는 값들은 프로세스 상태의 일부입니다. PCB는 프로그램 카운터 (Program Counter), 스택 포인터 (Stack Pointer), 누산기 (Accumulator) 등의 레지스터 상태를 유지합니다.
  4. 프로세스 우선순위(Process Priority) : 운영체제는 프로세스에 우선순위를 할당합니다. PCB는 프로세스의 우선순위를 포함하고 이를 기반으로 스케줄링을 수행합니다.

 

 

✔️ 문맥 교환(Context Switch)

  •  Context switch는 운영체제에서 실행 중인 프로세스 또는 스레드의 상태를 저장하고, 다른 프로세스 또는 스레드로 전환하는 과정을 말합니다. 또한, 멀티태스킹 환경에서 CPU 시간을 공유하고 여러 프로세스 또는 스레드가 동시에 실행될 수 있도록 합니다.
  • 현재 프로세스 A 가 CPU 를CPU를 사용하고 있는 상황에서 CPU 사용시간이 끝나, 다음 프로세스에게 CPU를 넘겨주어야 합니다. 스케줄링 알고리즘에 의해 다음 CPU 를 받을 프로세스 B 가 선택되었고, 타이머 인터럽트가 발생해 CPU 제어권이 운영체제 커널에 넘어가게 됩니다.
    • ex) 카카오톡을 켜놓고 유투브로 영상을 보면서 웹서핑을 하는 것은 사용자 입장에서 동시에 일어나는 일처럼 보이지만 실제로는 그렇지 않음.
    • 위와 같은 현상을 동시성이라고 부릅니다. 동시성(Concurreny)과 병렬성(Parallelism)의 차이는 아래 포스트 참고하시기 바랍니다.
  • https://yunchan97.tistory.com/61
 

[운영체제] 동시성(Concurrency)과 병렬성(Parallelism)

💡 동시성(Concurrency)이란? 동시성은 여러 작업이 동시에 실행되는 것 처럼 보이지만 실제로는 하나의 프로세스에서 여러 작업이 번갈아가면서 실행됩니다. 작업은 짧은 시간 동안 실행되고 중

yunchan97.tistory.com

 

문맥 교환 X

 

문맥 교환 O

 

 

  • 프로세스가 실행 상태일 때, 시스템 콜이나 인터럽트가 발생하면 CPU의 제어권이 운영체제에게로 넘어와, 원래 실행 중이던 프로세스의 업무를 잠시 멈추고 운영체제의 코드가 실행된다.
  • 위의 첫 번째 이미지의 경우는 원래 실행중이던 프로세스와 다시 실행된 프로세스가 같기 때문에 문맥교환이 아닌 경우입니다.
  • 위의 두 번째 이미지의 경우는 원래 실행중이던 프로세스와 다른 프로세스로 변경되었기 때문에 문맥교환이라고 할 수 있습니다.

 

 


 

 

✔️ 스레드란?

  • 스레드는 프로세스 내에서 실행되는 단위입니다.
  • 스레드는 프로세스의 일부로서 독립적인 실행 경로를 가지며, 프로세스의 자원을 공유하여 병렬적 또는 동시에 실행될 수 있습니다.
  • 스레드는 프로세스의 주소 공간, 파일 핸들, 열린 파일 등과 같은 자원을 공유하기 때문에, 스레드 간의 통신과 데이터 공유가 비교적 쉽습니다.
  • 스레드 간의 전환 (Context Switch) 시에는 프로세스 전환보다 비용이 적게 듭니다.
  • 스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유합니다.

Thread

 

 

✔️ 스레드의 장점

1. 응답성 향상: 여러 스레드가 동시에 작업을 수행할 수 있으므로, 사용자 인터페이스와 같은 대화형 응용 프로그램에서 응답성이 향상될 수 있습니다. 한 스레드가 블로킹되어도 다른 스레드는 계속 작업할 수 있기 때문입니다.

 

2. 자원 공유: 스레드는 같은 프로세스 내에서 실행되므로, 프로세스의 자원을 공유할 수 있습니다. 이를 통해 데이터 공유와 효율적인 통신이 가능해지며, 동기화를 통해 공유 자원에 대한 충돌을 방지할 수 있습니다.

 

3. 경제성: 스레드 간의 전환은 프로세스 간의 전환보다 훨씬 경제적입니다. 스레드 간의 전환은 레지스터 상태와 스택 상태만 변경하면 되기 때문에, 프로세스 간의 전환보다 시간과 자원을 절약할 수 있습니다.

 

 

 


✔️ 멀티 프로세스(Multi Process)와 멀티 스레드(Multi Thread)

  • 멀티 프로세스란 : 하나의 응용프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것이다.

  • 멀티 스레드란 : 하나의 프로세스가 여러 작업을 여러 스레드를 사용해 동시에 처리하는 것을 의미한다.

 

 

 

✔️ 멀티 프로세스 vs 멀티 스레드

  • 멀티 스레드는 멀티 프로세스보다 적은 메모리 공간을 차지하고 Context Switching이 빠른 장점이 있지만, 동기화 문제와 하나의 스레드 장애로 전체 스레드가 종료 될 위험을 갖고 있다.
  • 멀티 프로세스는 하나의 프로세스가 죽더라도 다른 프로세스에 영향을 주지 않아 안정성이 높지만, 멀티 스레드보다 많은 메모리공간과 CPU 시간을 차지하는 단점이 있다.
  • 두 방법은 동시에 여러 작업을 수행하는 점에서 동일하지만, 각각의 장단이 있으므로 적용하는 시스템에 따라 적합한 동작 방식을 선택하고 적용해야 한다.

 

 

✔️ 멀티 스레드의 장점

  • 자원의 효율성 증가.
    • 멀티 프로세스로 실행되는 작업을 멀티 스레드로 실행할 경우, 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리할 수 있다.
  • 처리 비용 감소 및 응답 시간 단축
    • 스레드는 자원을 공유하기 때문에 Context Switching시 비용이 적고 스레드 간의 통신이기때문에 시간이 단축된다.
  • 멀티 스레드를 사용할 때 동기화를 주의해야한다. 동기화에 관련된 내용은 아래 포스트를 참고하세요.

 

 

 

 

 

#Reference

(이미지 출처: https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html )

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.