Backend 취업준비/운영체제

프로세스, 쓰레드

aammddkkzxc 2024. 2. 21. 23:44
  • 프로그램은 실행되기 전까지는 그저 보조기억장치에 있는 데이터 덩어리 뿐이지만, 프로그램을 메모리에 적재하고 실행하는 순간 그 프로그램은 프로세스가 된다 ⇒ 프로세스를 생성한다
  • 사용자가 보는 앞에서 실행되는 프로세스 : 포그라운드 프로세스
  • 사용자가 보지 못하는 뒤에서 실행되는 프로세스 : 백그라운드 프로세스

프로세스 제어 블록

  • 운영체제는 빠르게 번갈아 수행되는 프로세스의 실행순서를 관리하고, 프로세스에 CPU를 비롯한 자원을 배분한다. 이를 위해 프로세스 제어 블록(PCB)을 이용한다.
  • 프로세스와 관련된 정보를 저장하는 자료구조. 마치 상품의 태그
  • 커널 영역에 생성된다(운영체제가 적재되는 영역)
  • 프로세스 생성 시에 만들어지고 실행이 끝나면 폐기된다.

프로세스의 메모리 영역

  • 코드 영역(텍스트 영역)
    • 실행할 수 있는 코드, 즉 기계어로 이루어진 명령어가 저장
    • 데이터가 아닌 CPU가 실행할 명령어가 담겨 있기 때문에 쓰기가 금지되어 있다(읽기 전용)
  • 데이터 영역
    • 잠깐 썼다가 없앨 데이터가 아닌 프로그램이 실행되는 동안 유지할 데이터 저장
    • 예로 전역 변수(프로그램이 실행되는 동안 유지되며, 프로그램 전체에서 접근하는 변수)

위 두 개의 영역은 정적 할당 영역 밑의 두 개 영역은 동적 할당 영역

  • 힙 영역
    • 프로그램을 만드는 사용자가 직접 할당할 수 있는 저장 공간
    • 힙 영역에 메모리 공간을 할당했다면 언젠 가는 해당 공간을 반환해야 한다.
    • 메모리 공간을 반환하지 않는다면 낭비되어 메모리 누수
  • 스택 영역
    • 데이터를 일시적으로 저장하는 공간
    • 매개 변수, 지역 변수

일반적으로 힙 영역은 메모리의 낮은 주소에서 높은 주소로 할당되고, 스택 영역은 높은 주소에서 낮은 주소로 할당된다.

 

스레드

  • 프로세스를 구성하는 실행의 흐름 단위
  • 하나의 프로세스는 여러 개의 스레드를 가질 수 있다.
  • 스레드를 이용하면 하나의 프로세스에서 여러 부분을 동시에 실행할 수 있다.

단일 스레드 프로세스

프로세스가 하나의 실행 흐름을 가지고 한 번에 하나의 부분만 실행됨

 

멀티 스레드 프로세스

  • 프로세스의 스레드들은 실행에 필요한 최소한의 정보(프로그램 카운터를 포함한 레지스터, 스택) 만을 유지한 채 프로세스 자원을 공유하며 실행된다
  • 프로세스의 자원을 공유한다는 것이 스레드의 핵심
  • 스레드 1만의 코드/데이터/힙 역이 있고, 스레드 2만의 코드/데이터/힙 영역이 있는 게 아니다
  • 대부분의 운영체제는 CPU에 처리할 작업을 전달할 때 프로세스가 아닌 스레드 단위로 전달한다.

멀티 프로세스와 멀티 스레드

  • 프로세스끼리는 기본적으로 자원을 공유하지 않지만, 스레드끼리는 같은 프로세스 내의 자원을 공유한다. ⇒ 하나의 프로세스에 문제가 생겨도 다른 프로세스에는 지장이 적거나 없지만, 멀티스레드 환경에서 하나의 스레드에 문제가 생기면 프로세스 전체에 문제가 생길 수 있다.
  • 프로세스 간 통신(IPC) ⇒ 공유 메모리, 소켓, 파이프 등
  • 멀티 프로세스
    • 여러 프로세스를 동시에 실행 하는 것
    • 각 프로세스는 독립적
    • IPC를 통한 통신
    • 자원 소모적, 개별 메모리 차지
    • Context Switching 비용이 큼
    • 동기화 작업이 필요하지 않음
  • 멀티 스레드
    • 여러 스레드로 프로세스를 동시에 실행 하는 것
    • 공유된 자원으로 통신 비용 절감
    • 메모리가 효율적임
    • Context Switching 비용이 적음
    • 공유 자원 관리를 해야 함