[OS]프로세스와 스레드

Legday_Dev·2024년 3월 2일

CS

목록 보기
8/13
post-thumbnail

프로세스(Process) : 메모리에 올라와 실행되고 있는 프로그램의 인스턴스이다. -> 독립적인 개체
스레드(Thread) : 프로세스 내에서 실행되는 여러 흐름의 단위이다. 프로세스와 다르게 동일한 자원을 공유하기 때문에 위험하지만 효율적이다 -> 경량 프로세스(Lightweight process)

프로세스(Process)


프로세스는 하나의 프로그램과도 같기 때문에 메모리 공간은 다른 프로세스와 완전히 분리되어 있다.

  • 프로세스는 독립적이기 때문에 Code , Data , Heap , Stack 이 각각 분리되어 있다.
    • Code : 코드 자체를 구성하는 메모리 영역
    • Data : 전역변수, 정적변수, 배열 등
      • 초기화 된 데이터Data 영역에 저장
      • 초기화 되지 않은 데이터BSS(Block Started by Symbol) 영역에 저장
      • BSS 영역이란 초기에 오직 제로 값으로 표시된 정적으로 할당된 변수가 포함된 데이터 세그먼트의 일부로 컴파일러나 링커에 의해 사용된다.
    • Heap : 동적 할당 시 사용( C 언어 기준 new() , malloc() Java 는 new )
    • Stack : 지역변수, 매개변수, 리턴 값(임시 메모리 영역)
  • 기본적으로 프로세스 1개가 실행될 때 1개의 스레드를 가진다.
  • 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간 통신(IPC, Inter-Process Commnuication)을 사용해야 한다.
    • 예시) 파이프, 파일, 소켓 등등

멀티 프로세스(Multi Process)

하나의 프로그램을 여러개의 프로세스로 구성하여 각 프로세스가 병렬적으로 작업을 수행하는 것을 말한다.

  • 장점 : 하나의 작업(Task)에서 여러 자식 프로세스 중 하나의 프로세스에 문제가 생겨도 다른 프로세스에 영향이 가지 않는다 -> 안정성
  • 단점 : 각각의 독립된 자원을 할당 받기 때문에 작업량이 많아질 수록 오버헤드 발생. Context Switching 으로 인한 성능 저하가 일어난다.

컨텍스트 스위칭(Context Switching)

  • CPU 에서 여러 프로세스를 돌아가면서 작업을 처리하는데 이 과정을 Context Switching 이라 한다.
  • 동작 중인 프로세스가 대기를 하면서 해당 프로세스의 상태(Context)를 보관하고, 대기하고 있던 다음 순서의 프로세스가 동작하면서 이전에 보관헀던 프로세스의 상태를 복구하는 작업을 말한다.
  • 프로세스는 각각의 독립된 메모리 영역을 할당받기 때문에 프로세스 간 공유하는 메모리가 없다.
  • 즉, Context Switching 발생 시 캐쉬에 있는 모든 데이터를 리셋하고 다시 캐쉬 정보를 불러와야 한다. 이 때 작업량이 많으면 캐시 메모리 초기화같은 무거운 작업 처리시 오버헤드가 발생할 수 있다.

스레드(Thread)


스레드는 프로세스 안에 존재하고 프로세스가 할당받은 자원을 이용하는 실행의 단위이다.

  • 스레드는 프로세스의 Stack 영역만 각각 할당을 받고 나머지 메모리영역은 공유를 한다.
  • 같은 프로세스 안에 있는 스레드들은 각각의 Heap 공간을 공유하여 효율성이 좋지만 공유하기 때문에 위험하다.
  • 예를 들어, 한 스레드가 프로세스 자원을 변경하면 다른 이웃 스레드(Sibling Thread)도 그 변경 결과를 즉시 볼 수 있다. -> 공유하기 때문.

멀티 스레드

하나의 응용 프로그램에서 여러 스레드를 구성해 각 스레드가 하나의 작업을 처리하는 것 -> 웹 서버가 대표적인 멀티 스레드 응용 프로그램이다.

  • 장점
    • 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리할 수 있다.
    • 스레드 사이의 작업량이 작아 Context Switching 이 빠르다.
    • 프로세스 내의 Stack 영역을 제외한 모든 메모리를 공유하기 때문에 통신(IPC)의 부담이 적다.
  • 단점
    • 주의 깊은 설계가 필요하다.
    • 디버깅이 까다롭다.
    • 멀티 스레드의 경우 자원 공유의 문제가 발생한다.(동기화문제)
    • 하나의 스레드에 문제가 발생하면 전체 프로세스가 영향을 받는다.

<참고자료>
Tech Interview
[OS] 프로세스와 스레드의 차이
[Linux] BBS란 무엇인가?

profile
백엔드개발자

0개의 댓글