프로세스와 스레드

이상민·2021년 6월 27일
0
post-thumbnail

용어

  • 프로그램 : 어떤 작업을 위해 실행할 수 있는 파일, 즉 코드
  • 프로세스 : 메모리에 적재된 프로그램의 인스턴스
  • 스레드 : 프로세스 내에서 실행되는 흐름의 단위
  • 동시성 : 짧은 전환으로 여러가지 일을 동시에 처리하는 것처럼 보이는 것

1. Program과 Process

  • 프로세스 = 프로그램을 실행하기 위한 작업 단위

  • 각 프로세스는 독립된 메모리 영역을 할당 받기 때문에 다른 프로세스 자원에 접근하려면 IPC를 사용해야한다

  • 프로세스를 만들기 위해서는 자원을 할당받고, PCB를 생성해야한다

    • 운영체제에게 할당 받는 자원 : CPU 시간, 메모리 영역(code, data, heap, stack으로 구분) 등

    • PCB(Process Control Block) : 프로세스를 제어하기 위해 포인터, 프로세스 상태, PID, 프로그램 카운터 등을 포함하는 블럭


2. Process와 Thread

  • 스레드란 프로세스 내 실행되는 흐름의 단위로, 프로세스가 할당 받은 자원을 이용하는 실행의 단위이다
  • 동일 프로세스 내 스레드들은 레지스터와 stack 영역 메모리만 할당 받고 나머지 영역은 공유한다
  • 프로세스는 최소 1개의 스레드를 가지고 있고, 스레드가 1개만 있는 프로세스를 단일 스레드 프로세스라 한다
  • 자원을 공유하기 때문에 문맥 교환 시 캐싱 적중률이 높아 비용이 적다


3. 문맥 교환

하나의 프로세스를 실행하다 다른 프로세스를 사용하기 위해 이전 프로세스 상태를 보관하고 새로운 프로세스를 적재하는 작업

  • 운영체제가 시스템 내 프로세스들을 관리하기 위해 프로세스마다 유지하는 정보를 담은 자료구조인 PCB는 커널 주소 공간의 data 영역에 존재한다

  • PCB의 다양한 정보는 문맥 교환을 위해 필요하다. 실행 프로세스의 전환을 위해서는 상태 관리가 필요하기 때문

  • 문맥 교환은 한 작업이 끝날 때까지 기다리는 것이 아니라 여러 작업을 번갈아가며 실행해서 동시에 처리될 수 있도록 하는 방법
  • 인터럽트가 발생하면 현재 프로세스의 상태를 PCB에 저장하고 새로운 프로세스의 상태를 레지스터에 저장하는 방식으로 동작
  • 이 때, CPU는 아무런 일을 하지 않으므로 잦은 컨텍스트 스위칭은 성능저하를 일으킬 수 있다.
  • 스레드는 캐시메모리나 PCB에 저장해야하는 내용이 적고, 비워야 하는 내용도 적기때문에 상대적으로 더 빠른 컨텍스트 스위칭이 일어날 수 있다.
  • 이러한 시분할 시스템에서의 문맥 교환을 통해 마치 여러 작업이 동시에 실행되는 것처럼 보이는 동시성을 얻을 수 있다.

4. Multi-process와 Multi-thread

동시성을 구현하기 위한 소프트웨어적 어플리케이션 처리 방식들

  • multi-process : 동시성을 위해 부모 프로세스를 포크한 자식 프로세스로 작업
    • 각 프로세스는 독립적
    • IPC로 상호 자원 접근
    • 자원 소모가 비교적 큼
    • 문맥 교환 비용이 비교적 큼
    • 동기화 작업이 필요하지 않음

  • multi-thread : 동시성을 위해 프로세스 내에 다수의 스레드로 흐름을 구분해 작업
    • 스레드끼리는 길밀히 연결되어 있음
    • 자원의 공유로 통신 비용 절감
    • 문맥 교환 비용이 비교적 적음
    • 공유 자원 관리를 추가적으로 해야함

예) 인터넷 익스플로러는 각 탭을 스레드로 실행해, 하나의 탭 문제 시 전체 프로그램이 종료. 크롬은 각 탭을 프로세스로 실행해 비용은 더 크나 하나의 탭 문제가 다른 탭에 영향을 주지 않음


5. Multi-core

병렬 처리를 구현하기 위한 하드웨어적 구성

  • 동시성이 시분할을 통해 얻는 다면 멀티코어 프로세서는 병렬 처리를 통해 실제 물리적으로 하나 이상의 작업을 한번에 처리할 수 있다.

profile
편하게 읽기 좋은 단위의 포스트를 추구하는 개발자입니다

0개의 댓글