운영체제 (OS) - 프로세스/쓰레드, 멀티 프로세스/멀티 쓰레드

박영준·2023년 1월 11일
0

OS (운영체제)

목록 보기
1/6

프로세스 vs 쓰레드 는 개발자 면접에서 자주 나오는 질문 중의 하나!

1. OS 구성

  • OS 는 Process 마다 독립된 메모리 영역을 Code/Data/Heap/Stack 의 형식으로 할당

  • Thread 는 그 개수에 따라, Single thread(스레드 1개)/Multi thread(스레드 2개 이상) 로 구분

  • Process 내부에는 최소 하나의 Thread 를 가지고 있는데, 실제로는 Thread 단위로 스케줄링을 한다.

1) 프로세스 (Process)

프로세스
참고: 프로세스 (Process)

멀티 프로세스
참고: 멀티 프로세스

2) 쓰레드 (Thread)

쓰레드
참고: 쓰레드 (Thread)

멀티 쓰레드
참고: 멀티 쓰레드

2. Process & Thread 동시 실행 원리

음악을 들으면서, 웹서핑을 하고, 메신저의 메시지를 확인할 수 있는 이유는 컴퓨터 내부적으로 프로세스와 스레드를 동시에 처리하는 멀티 태스킹(multi tasking)Visit Website 기술 때문이다.

1) '멀티 태스킹' 정의

  • 멀티 태스킹 원리

    • Process 는 한 번 CPU 를 사용할 때, 아주 짧은 시간(quantum)만 실행되도록 하여
      각 프로그램의 작업을 아주 작은 단위로 번갈아 가며 처리하면서 작업 응답 시간을 최소화시키는 방법을 사용

    • 이때, 잘게 나뉘어진 Process 끼리 작업이 Switching 되는 것을 문맥 교환(Context Switching) 이라고 한다.

2) 장점

(1) 빠른 반응성 제공

여러 작업을 동시에 처리하는 것처럼 보이게 만들어, 사용자에게 더 빠른 반응성을 제공한다.
사용자는 동시에 프로그램이 실행되는 것처럼 느껴 차이를 못 느끼게 된다.

(2) 문제 해결 용이성

작업을 나누었기 때문에 예기치 않은 문제가 발생했을 때, 해당 작업만 중지할 수 있게 된다.
따라서, 전체 시스템이 멈추는 것을 방지할 수도 있다.

(3) 멀티 프로세서의 효율적인 활용

멀티 프로세싱 또는 멀티 코어를 사용하는 시스템에서 여러 개의 프로세서(CPU)가 동시에 작업을 효율적으로 처리할 수 있다.

(4) 프로세스 우선순위 조절

프로세스 간의 우선순위를 조절이 수월해진다.
우선순위가 높은 작업은 더 자주 실행되어, 더 빠른 처리를 할 수도 있는 것이다.

3) 주의점

응답성을 향상하기 위해서 그렇다고 Context Switching 이 자주 일어나게 될 경우, 오히려 성능 이슈가 발생할 수 있다.
왜냐하면 Process 끼리 Switching 하는 작업은 상당히 무거운 작업에 해당하기 때문이다.

3. Process Context Switching vs Thread Context Switching

두 Switching 모두 멀티태스킹 환경에서 여러 Process 또는 Thread를 동시에 실행하기 위한 기술

1) TCB 가 PCB 보다 가볍다

Thread Context Switching 이 Process Context Switching 보다 더 빠르다.

  • Process 내의 Thread들은 text, data, heap 영역 메모리를 공유하기 때문에
    TCB 에는 stack 및 간단한 register 포인터 정보만을 저장한다.
    따라서, PCB보다 TCB가 가벼워서 더 빨리 읽고 쓸 수 있다.

2) 캐시 메모리 초기화 여부

  • CPU 캐쉬 메모리?

    • CPU와 메인 메모리 사이에 위치
    • CPU에서 한 번 이상 읽어들인 메모리의 데이터를 저장하고 있다가,
      CPU가 다시 그 메모리에 저장된 데이터를 요구할 때, 메인 메모리를 통하지 않고 곧바로 데이터를 전달해 주는 용도
  • Process Context Switching 의 경우

    • 다른 Process의 실행으로 인해 CPU가 새로운 명령어와 데이터를 로드해야 하기 때문에 CPU 캐시 메모리를 초기화 하여야 한다.
      • 프로세스 컨텍스트 스위칭에 부담이 되는 요소!
  • Thread Context Switching 의 경우

    • Process 내 Thread 간에 스택과 레지스터 값 등 일부 컨텍스트 정보만 변경되므로 CPU 캐시 메모리는 초기화되지 않는다.
      • 단, Thread가 다른 CPU 코어에서 실행될 때는 해당 코어의 캐시 메모리에 스레드 컨텍스트 정보가 로드되어야 하므로 초기화될 수 있다.

3) 자원 동기화 문제

  • 언제 발생?

    • Thread Context Switching이 발생해 다른 Thread가 heap 영역의 공유 데이터에 접근할 때,
      이전 Thread가 이미 공유 자원을 사용하고 있는 경우
  • 스레드 간에 경쟁 조건 (race condition)

    • 예시

      • 두 개의 Thread가 동시에 하나의 변수를 수정하려고 할 때
        Thread Context Switching이 발생하면, 변수의 값을 잘못된 값으로 업데이트 할 수 있다.
    • Process는 기본적으로 독립된 공간이지만, 공유 자원을 사용하는 경우에 똑같이 경쟁 조건이 발생 할 수가 있다.

      • 여러 개의 Process 가 동시에 파일 시스템에 접근하여 파일을 수정하려고 할 때,
        Context Switching이 발생하면, 다른 Process가 그 파일에 접근할 수 있기 때문에 파일 내용이 손상될 수 있다.

    따라서 자원 동기화 문제을 해결하기 위해선 각 상황에 적절한 공유 자원에 대한 동기화 메커니즘이 필요해진다.


참고: [운영체제] 프로세스와 스레드
참고: JAVA 쓰레드란(Thread) ? - JAVA에서 멀티쓰레드 사용하기
참고: [Java] 멀티 스레드
참고: [Java] 멀티 스레드환경의 동시성 이슈 그리고 해결방법
참고: [Java] Multi Thread환경에서 동시성 제어를 하는 방법
참고: ThreadLocal 이란 ?
참고: 메모리의 구조
참고: 시스템 메모리 구조 코드/데이터/스택/힙 영역 정리
참고: 힙 영역 vs 스택 영역
참고: 메모리영역 ( 코드 영역 , 데이터 영역 , 힙 영역 , 스택 영역)
참고: 완전히 정복하는 프로세스 vs 스레드 개념
참고: 멀티 태스킹 & 멀티 프로세싱 개념 한방 정리

profile
개발자로 거듭나기!

0개의 댓글