💡 요약

  • 멀티 프로세스
    • 정의 : 하나의 프로그램을 여러개의 프로세스로 구성하여 각 프로세스가 병렬적으로 작업을 수행하는 것
    • 장점 : 메모리 침범 문제를 OS 차원에서 해결하여 안전성 유리
    • 단점 : 작업량 많을 수록 오버헤드 발생. Context Switching으로 인한 성능 저하
  • 멀티 스레드
    • 정의 : 하나의 응용 프로그램에서 여러 스레드를 구성해 각 스레드가 하나의 작업을 처리하는 것
    • 장점 : 공유 메모리만큼의 시간, 자원 손실 감소. 전역 변수와 정적 변수에 대한 자원 공유
    • 단점 : 공유 메모리로 인한 안전성 문제 (-> Critical Section 기법으로 대비)


1. 멀티 프로세스와 멀티 스레드란?

프로그래밍에서 함께 처리하기 위해 사용하는 기술 프로그램의 둘 이상의 부분을 동시에 실행하여 CPU를 최대한 활용


멀티 프로세스, 멀티 스레드를 왜 사용할까?


  • 컴퓨터 환경의 발전 과정

    단계 설명
    단일 프로세스 시스템 - 한 번에 하나의 프로그램만 실행
    - 단점 : CPU 사용률이 좋지 않음
     
    멀티 프로그래밍 - 여러 개의 프로그램을 메모리에 올려놓고 동시에 실행시킴
    - 단점 : 하나의 프로세스의 CPU 사용 시간이 길어지면 다른 프로세스는 계속 대기
     
    멀티 태스킹 - 멀티 프로그래밍 + 시간을 아주 짧은 시간으로 쪼개서 프로세스들을 번갈아 가면서 실행 (→ 동시에 여러 프로그램이 실행되는 것처럼 느낌)
    - 한계
    - 하나의 프로세스가 동시에 여러 작업 수행 X → 여러 프로세스 만들어야 함
    - 프로세스의 컨텍스트 스위칭은 무거운 작업
    - 프로세스까지 데이터 공유 까다로움
    - 듀얼 코어 등장
     
    멀티 프로세스, 멀티 스레딩  



멀티 프로세스


  • 하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 병렬적으로 작업을 수행하는 것
    • fork를 통해 프로세스를 다수 개로 늘려 여러 개의 프로그램들을 병렬로 처리
    • 다수의 프로세스가 서로 협력적으로 일을 처리
    • 둘 이상의 코어가 프로세스를 병렬로 분담해서 병행하여 실행

      💡 병렬 처리 vs. 병행 처리

      • 병렬 처리(Parallel) : 여러 작업을 동시에 실행
      • 병행 처리(Concurrent) : 하나의 코어가 여러 프로세스를 돌아가면서 조금씩 처리
  • 장점
    • 안전성 : 메모리 침범 문제를 OS 차원에서 해결
  • 단점
    • 각각 독립된 메모리 영역을 갖고 있어, 작업량 많을 수록 오버헤드 발생
    • Context Switching으로 인한 성능 저하

      💡 Context Switching (문맥교환)

      • CPU가 프로세스가 여러개일 때, CPU 스케줄링을 통해 관리하는 것
      • 프로세스의 상태 정보를 저장하고 복원하는 일련의 과정
      • CPU가 이전의 프로세스 상태를 PCB에 보관하고, 또 다른 프로세스의 정보를 PCB에 읽어 레지스터에 적재하는 과정
      • 즉, 동작 중인 프로세스가 대기하면서 해당 프로세스의 상태를 보관하고, 대기하고 있던 다음 순번의 프로세스가 동작하면서 이전에 보관했던 프로세스 상태를 복구하는 과정
      • 보통 인터럽트가 발생하거나, 실행 중인 CPU 사용 허가시간을 모두 소모하거나, 입출력을 위해 대기해야 하는 경우에 발생
      • 즉, 프로세스가 Ready -> Running, Running -> Ready, Running -> Waiting처럼 상태 변경 시 발생
        → 프로세스는 각 독립된 메모리 영역을 할당받아 사용되므로, 캐시 메모리 초기화와 같은 무거운 작업이 진행되었을 때 오버헤드가 발생할 문제가 존재

      💡 PCB (Process Control Block)

      • 프로세스 메타데이터들을 저장해 놓는 곳
      • Process Metadata : Process ID, Process State, Process Priority, CPU Registers, Owner, CPU Usage, Memeory Usage



멀티 스레드


  • 하나의 프로세스 안에서 작업을 여러 스레드를 사용하여 동시에 처리
    • 각 스레드가 하나의 작업을 처리
    • 하나의 프로그램 안에서 병렬 처리
      • 스레드들이 공유 메모리를 통해 다수의 작업을 동시에 처리하도록 해줌

    ex. 채팅 앱 : 사용자가 메시지 입력하는 도중에도 상대방이 새로운 메시지를 보냈는지 확인

  • 장점
    • 독립적인 프로세스에 비해 공유 메모리만큼의 시간, 자원 손실이 감소
    • 전역 변수와 정적 변수 공유 가능
  • 단점
    • 안전성 : 하나의 스레드가 데이터 공간을 망가뜨리면, 모든 스레드가 작동 불능 상태 (공유 메모리를 갖기 때문)
      • Critical Section 기법을 통해 대비

        💡 Critical Section(임계 구역) 기법

        • 병렬프로그래밍에서 둘 이상의 스레드 (멀티스레드)가 동시에 접근해서는 안되는 공유 자원(파일, 입출력, 공유 데이터 등)에 접근하는 명령문 또는 코드의 일부 영역
        • 하나의 스레드가 공유 데이터 값을 변경하는 시점에 다른 스레드가 그 값을 읽으려할 때 발생하는 문제를 해결하기 위한 동기화 과정
        • Critical Section 문제 해결을 위한 3가지 조건
          • 상호 배제(mutual exclusion) : 하나의 프로세스가 임계 구역에서 실행되고 있다면, 다른 프로세스들은 임계 구역에서 실행될 수 없음
          • 진행(progress) : 임계 구역에 실행되고 있는 프로세스가 없을 경우, 들어갈 프로세스를 적절히 선택해줘야함
          • 한정된 대기(bounded waiting) : 프로세스의 기아를 방지하기 위해, 한번 임계 구역에서 실행된 프로세스는 다음 실행에 대한 제한을 둠



2. 멀티 프로세스, 멀티 스레드의 활용


  멀티 프로세스 멀티 스레드
장점 하나의 프로세스에 문제가 생겨도 다른 프로세스에 문제가 생기지 않음 컨텍스트 스위칭할 때 공유하고 있는 메모리 만큼의 메모리 자원을 아낌
자원의 효율성 증가, 응답 속도 빨라짐
단점 컨텍스트 스위칭이 무거움 자원을 공유 → 스레드 하나가 프로세스 내 자원을 망치면 모든 프로세스가 종료됨, 동기화 문제
예시 크롬 : 하나의 프로세스에 멀티 스레드를 사용하는 인터넷 익스플로러와 달리 여러 개의 프로세스를 사용 워드 프로세서 : 문서를 편집하면서 틀린 글자를 찾는 작업을 독립적인 스레드로 구현


다음에는 CPU 스케줄링에 대해서 알아보자.



참고 자료



Leave a comment