Computer/CS

프로세스 & 스레드

에린_1 2024. 6. 28. 16:23
728x90

프로세스 & 스레드

  • 프로세스 : 프로그램을 메모리 상에서 실행중인 작업
  • 스레드 : 프로세스 안에서 실행되는 여러 흐름의 단위
  • 기본적으로 프로세스마다 최소 1개의 스레드를 소유하고 있다.(메인 스레드 포함)

주소 공간

  • 프로세스는 각각 별도의 주소공간을 할당한다.(독립적)
    • Code : 코드 자체를 구성하는 메모리 영역(프로그램 명령)
    • Data : 전역변수, 정적변수, 배열 등
      • 초기화 된 데이터는 data 영역에 저장된다.
      • 초기화 되지 않은 데이터는 bss 영역에 저장된다.
    • Heap : 동적 할당 시 사용한다.(new(), malloc() 등)
    • Stack : 지역변수, 매개변수, 리턴 값(임시 메모리 영역)
  • 스레드는 Stack만 따로 할당 받고 나머지 영역은 서로 공유한다.
  • 하나의 프로세스가 생성될 떄, 기본적으로 하나의 스레드가 같이 생성된다.
  • 프로세스는 자신만의 고유 공간과 자원을 할당받아 사용하는데 반해, 스레드는 다른 스레드와 공간, 자원을 공유하면서 사용하는 차이가 존재한다.

멀티 프로세스

  • 하나의 프로그램을 여러개의 프로세스로 구성하여 각 프로세스가 병렬적으로 작업을 수행하는 것이다.
  • 장점
    • 안정성(메모리 침범 문제를 OS 차원에서 해결해준다.)
  • 단점
    • 각각 독립된 메모리 영역을 갖고 있어, 작업량이 많을 수록 오버헤드가 많이 발생한다. Context Switching으로 인한 성능 저하가 있다.

문맥교환(Context Switching)

  • 프로세스의 상태 정보를 저장하고 복원하는 일련의 과정을 뜻한다.
  • 동작 중인 프로세스가 대기하면서 해당 프로세스의 상태를 보관하고, 대기하고 있던 다음 순번의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 과정을 말한다.
  • 프로세스는 각 독립된 메모리 영역을 할당받아 사용하므로, 캐시 메모리 초기화와 같은 무거운 작업이 진행되었을 때 오버헤드가 발생할 문제가 존재한다.

멀티 스레드

  • 하나의 응용 프로그램에서 여러 스레드를 구성해 각 스레드가 하나의 작업을 처리하는 것을 말한다.
  • 스레드들이 공유 메모리를 통해 다수의 작업을 동시에 처리하도록 해준다.
  • 장점
    • 독립적인 프로세스에 비해 공유 메모리만큼의 시간, 자원 손실이 감소한다.
    • 전역변수와 정적변수에 대한 자료 공유가 가능하다.
  • 단점
    • 안정성 문제가 있다. 하나의 스레드가 데이터 공간을 망가뜨리면, 모든 스레드가 작동 불가 상태가 된다.(공유 메모리를 갖기 때문이다.)
  • 멀티 스레드의 안전성에 대한 단점은 Critical Section 기법을 통해 대비한다.
    • 하나의 스레드가 공유 데이터 값을 변경하는 시점에 다른 스레드가 그 값을 읽으려고 할 때 발생하는 문제를 해결하기 위한 동기화 과정

프로세스의 주소 공간

  • 프로그램이 CPU에 의해 실행된다. = 프로세스가 생성되고 메모리에 프로세스 주소 공간이 할당된다.
  • 프로세스 주소 공간에는 코드, 데이터, 스택으로 이루어져 있다.
    • 코드 Segment : 프로그램 소스 코드 저장
    • 데이터 Segment : 전역 변수 저장
    • 스택 Segment : 함수, 지역 변수 저장
    • 최대한 데이터를 공유하여 메모리 사용량을 줄어야 한다.
    • Code는 같은 프로그램 자체에서는 모두 같은 내용이기 때문에 따로 관리하여 공유한다.
    • Stack과 Data를 나눈 이유는, 스택 구조의 특성과 전역 변수의 활용성을 위한 것이다.
  • 프로그램의 함수와 지역 변수는, LIFO(가장 나중에 들어간게 먼저 나온다.) 특성을 가진 스택에서 실행된다.
728x90

'Computer > CS' 카테고리의 다른 글

IPC(Inter Process Communication)  (1) 2024.07.03
PCB & Context Switching  (0) 2024.07.03
운영체제(OS, Operationg System)  (0) 2024.06.28
ARM 프로세서  (0) 2024.06.27
패리티 비트 & 해밍 코드  (1) 2024.06.27