[TIL]OS : 프로세스와 스레드

은경·2022년 2월 16일

[Operating System] OS

목록 보기
1/1

프로세스 : 프로그램을 메모리 상에서 실행중인 작업
스레드 : 프로세스 안에서 실행되는 여러 흐름단위

1. 프로세스 (Process)


📌 의미

컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 의미

프로그램이란, 파일이 저장 장치에 저장되어 있지만 메모리에는 올라가 있지 않은 정적인 상태이며 파일 그 자체를 가리키는 말.

이 프로그램 파일을 실행하는 순간 메모리에 올라가며 동적인 상태가 되는데 이 상태의 프로그램을 프로세스라고 한다.

📌 구조

  • 코드 영역(code area) : 개발자가 작성한 프로그램이 코드 영역에 작성됨.
  • 데이터 영역(data area) : 코드가 실행되면서 사용한 변수나 파일들의 각종 데이터들이 모여있는 곳. 전역 변수, 정적 변수, 배열
  • 스택 영역(stack area) : 호출한 함수가 종료되면 되돌아올 메모리의 주소를 스택에 저장하거나 변수 사용 범위에 영향을 미치는 영역을 구현 할때 사용.
  • 힙 영역(heap area) : 동적으로 할당되는 데이터들을 위해 존재하는 공간.지역 변수, 매개 변수, 리턴 값

정적 영역 : 코드 영역, 데이터 영역 / 선언 시 크기가 결정됨
동적 영역 : 스택 영역, 힙 영역 / 프로세스가 실행되는 동안 가변적인 크기를 가짐

프로그램 실행시 운영체제는 프로그램을 메모리에 가져와 코드영역에 넣고 프로세스 제어 블록 (PCB)을 생성, 메모리에 스택 영역과 힙 영역을 확보 후 프로세스 실행.
PCB : 특정한 프로세스를 관리할 필요가 있는 정보를 포함하는 운영 체제 커널의 자료 구조

📌 특징

  • 각각 독립된 메모리 영역 (위의 code, data, stack, heap 구조)을 할당받음
  • 프로세스당 최소 1개의 스레드를 가짐.
  • 각 프로세스는 별도의 주소공간에서 실행, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없음.
  • 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신(IPC)을 사용 해야함 파이프, 파일, 소켓

2. 스레드 (Thread)


📌 의미

프로세스의 코드에 정의된 절차에 따라 CPU에 작업 요청을 하는 실행 단위, 프로세스의 특정한 수행 경로

프로세스의 낭비 요소를 제거하고 프로세스 작업의 유연성을 얻기 위해 멀티 스레드 형식 사용.

📌 구조

  • 하나의 프로세스는 여러 개의 스레드를 가질 수 있음 (멀티 스레드)
  • 스레드는 프로세스 내에서 Stack 만 따로 할당 받고 나머지 영역은 서로 공유함

코어 -> 하드웨어, 물리적 구성 단위
스레드 -> 소프트웨어, 논리적 작업 처리 단위

📌 특징

  • 한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드(sibling thread)도 그 변경 결과를 즉시 볼 수 있음.
  • 각각의 스레드는 별도의 레지스터와 스택을 갖고 있지만, 힙 메모리는 서로 읽고 쓸 수 있음.

3. 멀티 프로세스와 멀티 스레드의 차이


📌 Multi Process 란

1대의 컴퓨터에 여러 개의 CPU 장착
하나의 응용 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것.

  • 장점
    • 여러 개의 자식 프로세스 중 하나에 문제 발생시 그 자식 프로세스만 죽음 -> 다른 프로세스로 영향이 확산 되지 않음
    • 따라서 안정성이 높다
  • 단점
    • 프로세스 사이의 어렵고 복잡한 통신 기법 (IPC)
    • 각각 독립된 메모리 영역을 가지고 있으므로, 작업량이 많을 수록 오버헤드 발생 가능
    • Context Switching 과정에서 캐쉬 메모리 초기화 등 무거운 작업이 진행 되었을 때 오버 헤드로 인한 성능 저하
      CPU에서 여러 프로세스를 돌아가면서 작업을 처리하는 데 이 과정을 Context Switching라 한다.
      동작 중인 프로세스가 대기를 하면서 해당 프로세스의 상태(Context)를 보관하고, 대기하고 있던 
      다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업을 말한다.
      프로세스는 각각의 독립된 메모리 영역을 할당받았기 때문에 프로세스 사이에서 공유하는 메모리가 없어
      Context Switching가 발생하면 캐쉬에 있는 모든 데이터를 모두 리셋하고 다시 캐쉬 정보를 
      불러와야 한다.

📌 Multi Thread 란

하나의 응용 프로그램을 여러 개의 스레드로 구성하고 각 스레드가 하나의 작업을 처리하도록 하는 것.
스레드들이 공유 메모리를 통해 다수의 작업을 동시에 처리하도록 해줌
많은 OS들이 멀티 스레딩을 기본으로 하고 있다.

  • 장점
    • 시스템 자원 소모 감소, 효율성은 증대
    • 시스템 처리량 증가로 인한 처리 비용 감소
      • 독립적인 프로세스에 비해 스레드간 데이터 통신이 간단하고 따라서 자원 소모도 줄어듬
      • 스레드간 작업량이 작아 Context Switching이 빠름
    • 간단한 통신 방법으로 인한 프로그램 응답시간 단축
      • 스레드는 프로세스 내의 Stack 영역을 제외한 모든 메모리를 공유 하기 때문에 통신의 부담이 적음.
    • 전역 변수와 정적 변수에 대한 자료 공유 가능
  • 단점
    • 설계에 주의 해야하며 디버깅이 까다롭다.
    • 다른 프로세스에서 스레드를 제어할 수 없다.
    • 단일 프로세스 시스템의 경우 효과가 적다.
    • 자원 공유의 문제가 발생 할수 있다. (동기화 문제)
      • 스레드 간의 자원 공유는 전역 변수를 이용하므로 함께 상용할 때 충돌이 발생 할 수 있음.
    • 하나의 스레드가 데이터 공간을 망가뜨리면 모든 스레드도 작동 되지 않음
      • 공유 메모리 때문 -> 따라서 안정성이 떨어짐.

참고 자료 (Reference)


https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html
https://kyun2da.dev/CS/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C/
https://gyoogle.dev/blog/computer-science/operating-system/Process%20vs%20Thread.html
https://velog.io/@raejoonee/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4
https://brunch.co.kr/@babosamo/100

profile
Python 서버 개발자

0개의 댓글