백엔드 개발자

프로세스 & 스레드 본문

CS/운영체제

프로세스 & 스레드

임잠탱 2024. 11. 28. 19:50

프로세스 (Process)

1. 간단한 정의

  • 프로세스는 프로그램을 실행해서 메모리에 올라와 CPU 할당을 받을 수 있는 상태라고 할 수 있다.
  • 프로그램을 실행하면 OS는 프로그램을 메모리에 적재하고, 이를 위한 프로세스 제어 블록(PCB)을 초기화한다. 그리고 Ready Queue에 추가되어 CPU 할당을 받을 수 있는 준비 상태가 된다.

2. 메모리 구조

2.1. 코드 영역
  • 실행할 프로그램의 명령어(코드)가 저장된 영역이다.
  • 예를 들어, 함수 정의, 루프, 조건문 등의 실제 기계어 코드가 여기에 포함된다.
  • 읽기 전용(Read-Only)으로 설정되어 보통 변경되지 않는다.
2.2. 데이터 영역
  • 전역 변수와 정적 변수 등이 저장된다.
  • 초기화된 변수는 초기화 데이터 세그먼트에 저장되며, 초기화되지 않은 변수는 BSS(Block Started by Symbol) 영역에 저장된다.
2.3. 힙 영역
  • 동적 메모리 할당을 위한 공간이다. malloc, new 같은 메모리 할당 함수가 사용하는 영역이다.
  • 힙은 런타임에 크기가 변동되며, 상향으로 확장된다.
2.4. 스택 영역
  • 함수 호출 시 생성되는 지역 변수, 매개변수, 리턴 주소 등이 저장된다.
  • 스택은 함수 호출과 함께 할당되었다가 함수가 종료되면 해제된다.
  • 하향으로 확장된다(메모리 주소가 감소).

3. 프로세스 제어 블록(Process Control Block)

프로세스 제어 블록은 프로세스의 정보를 관리한다. 컨텍스트 스위칭 시에 현재 프로세스 정보를 저장, 그리고 다음 프로세스의 정보를 불러올 때 사용된다. OS 메모리 영역은 크게 커널 공간, 사용자 공간으로 나뉘어 커널 공간에는 사용자 프로세스가 접근할 수 있는 보호되는 공간인데, PCB는 이곳에 저장된다.

 

  • PID (Process ID): 프로세스 고유 식별자.
  • 프로세스 상태: Ready, Running, Waiting 등.
  • CPU 레지스터: 컨텍스트 스위칭 시 레지스터 상태를 저장.
  • 메모리 관리 정보: 프로세스가 사용하는 메모리 영역의 시작 주소와 크기.
  • 파일 정보: 프로세스가 열고 있는 파일 디스크립터.
  • 스케줄링 정보: 우선순위(priority), CPU 점유 시간 등.

그리고 프로세스 제어 블록들은 운영체제가 프로세스 테이블로 관리한다.

4. 프로세스 상태

  • New (생성): 프로세스가 생성 중인 상태.
  • Ready (준비): 실행 준비가 되어 Ready Queue에 들어가 CPU 할당을 기다리는 상태.
  • Running (실행): 프로세스가 CPU할당을 받아 실행 중인 상태.
  • Waiting (대기): 입출력(I/O) 작업을 기다리는 등 실행이 일시적으로 중단된 상태.
  • Terminated (종료): 실행이 완료되어 더 이상 실행되지 않는 상태.

5. 프로세스 간 통신(IPC)

프로세스는 각각 고유한 독립된 메모리 영역을 가지고 있기 때문에 프로세스 간 통신을 위해 IPC 매커니즘이 필요하다.
모든 영역에 접근 가능한 것은 운영체제이기 때문에 프로세스 간 통신을 위해 기본적인 매커니즘을 제공한다.

 

  • 파이프 (Pipe)
    • 부모-자식 프로세스 간 단방향 통신.
    • 익명 파이프와 명명된 파이프(Named Pipe)로 구분됨.
    • 예: ls | grep.
  • 메시지 큐 (Message Queue)
    • 운영체제가 관리하는 메시지 대기열을 통해 데이터를 전달.
  • 공유 메모리 (Shared Memory)
    • 여러 프로세스가 동일한 메모리 영역을 공유.
    • 빠르지만 동기화 문제를 해결해야 함.
  • 소켓 (Socket)
    • 네트워크를 통해 통신하는 데 사용.
    • 로컬 및 원격 프로세스 간 통신 가능.
  • 시그널 (Signal)
    • 특정 이벤트를 알리기 위해 프로세스에 비동기적으로 전달되는 신호.
    응용 프로그램에서도 운영 체제가 제공하는 기본 매커니즘을 활용해 설계할 수 있다.
    예를 들어 크롬 탭 같은 경우 각각 프로세스로 이루어진다. 탭 간의 북마크 추가나 쿠키 정보는 공유해야 하기 때문에 공유 메모리와 메모리 전달 방식을 통해 처리한다.

스레드 (Thread)

1. 간단한 정의

  • 스레드는 프로세스 내의 실행 흐름, 단위라고 할 수 있다.
  • 프로세스는 하나 이상의 스레드로 이루어진다.
  • 메모리가 독립적인 프로세스와 달리, 프로세스 내의 메모리를 공유하면서 스레드의 고유한 스레드 ID, 프로그램 카운터, 레지스터 집합, 스택을 가진다.

2. 멀티스레드

  • 둘 이상의 스레드를 실행.
  • 여러 작업 흐름을 병렬로 실행하여 작업 효율을 높인다. (멀티코어인 경우가 아니면 동시성)
  • 메모리 영역을 공유하기 때문에 프로세스 간 통신보다 효율적, 컨텍스트 스위칭도 더 가벼움. 하지만 어떤 스레드에서 발생한 문제가 다른 스레드에도 영향을 끼칠 수 있다.

3. 스레드 안정성

  • 여러 스레드가 메모리 영역을 공유하기 때문에 같은 공유 자원에 동시에 접근할 때 일어나는 Race Condition 문제가 일어날 수 있다.
  • 이를 위한 동기화 작업이 필요하고, 또 발생 가능한 데드락 문제도 대비할 수 있어야 한다.

'CS > 운영체제' 카테고리의 다른 글

뮤텍스, 세마포어, 데드락  (1) 2024.12.12
가상메모리  (0) 2024.12.05
Comments