Process, Thread, Context Switching

jhj603·2025년 9월 5일
0
  1. 프로세스(Process) : 실행 중인 프로그램
    • 디스크에 저장된 프로그램을 실행시켜 가상 메모리에 적재됐을 때, 프로세스라고 한다.
    • 운영체제에서 실행되고 있는 프로그램의 인스턴스
  2. 프로세스의 구성
    1. 코드(Code) : 프로그램의 실행 가능한 명령어들
    2. 데이터(Data) : 프로그램이 종료될 때까지 유지되어야 하는 변수, 상수 등의 데이터들
    3. 힙(Heap) : 동적인 시간에 할당되는 메모리 영역
    4. 스택(Stack) : 함수 호출, 지역 변수 등을 저장하는 메모리 영역
    5. 프로세스 제어 블록(PCB) : 운영체제가 프로세스를 관리하기 위해 필요한 정보들을 담고 있는 자료구조 → 프로세스 ID(PID), 상태, CPU 레지스터 정보, 메모리 관리 정보 등이 포함

프로세스는 운영체제에 의해 생성되고 관리되며, CPU 시간을 할당받아 실행된다.


  1. 동시성(Concurrency) : 여러 프로세스가 동시에 실행되는 것처럼 보이게 하는 것.

    • 단일 CPU 코어에서 시분할(time-slicing)을 통해 여러 작업을 빠르게 전환하며 실행하는 것으로 달성됨.
    • 한 번에 한 프로세스만 집중하지만, 모든 프로세스가 조금씩 진행됨.
  2. 병렬성(Parallelism) : 여러 프로세스가 실제로 동시에 실행되는 것.

    • 멀티코어 CPU나 여러 대의 컴퓨터를 사용해 각기 다른 프로세스를 동시에 처리하는 것으로 달성됨.
    • 프로세스 처리 속도를 직접적으로 향상시킴.

프로세스의 상태

  • 실행(Running) : 프로세서에서 실행 중인 상태. 명령어를 실행시키고 있는 상태.
  • 준비(Ready) : 실행할 준비가 되어 있지만 운영체제가 다른 프로세스를 실행하고 있는 등의 이유로 대기 중인 상태
  • 대기(Blocked) : 프로세스가 다른 사건을 기다리는 동안 프로세스 수행이 중단된 상태. 입출력 등의 요청을 했을 때, 그 동작이 완료될 때까지 대기 상태가 되고 다른 프로세스가 실행 상태가 될 수 있다.

동시성 프로그래밍의 중요성

  1. 응답성 향상
    • 웹 서버와 같이 여러 사용자 요청을 동시에 처리해야 하는 프로세스에 동시성은 필수
    • 한 요청이 처리되는 동안 다른 요청이 차단되지 않고 계속해서 응답할 수 있음
  2. 자원 활용
    • 단일 CPU 코어에서 유휴 시간(입출력 대기 시간 등)을 다른 프로세스에 활용해 시스템 자원을 더 효율적으로 사용 가능
  3. 복잡성 증가
    • 여러 프로세스가 공유 자원(메모리 변수 등)에 접근할 때 경쟁 조건, 교착 상태 등의 문제가 발생 가능.
    • 이를 해결하기 위해 뮤텍스, 세마포어와 같은 동기화 메커니즘이 필요

동시성의 구현 방식 : 프로세스와 스레드(그리고 코루틴)

  • 프로세스 : 독립적인 메모리 공간을 가지는 실행 단위. 프로세스 간 통신(IPC)은 비용이 많이 들지만, 서로 영향을 주지 않아 안정적.
  • 스레드 : 하나의 프로세스 내에서 실행되는 여러 실행 흐름. 메모리 공간을 공유하기 때문에 통신이 빠르지만, 공유 자원에 대한 접근 제어에 주의해야 함.
  • 코루틴 : 사용자 수준에서 구현되는 가벼운 스레드. 스레드보다 컨텍스트 스위칭 비용이 훨씬 저렴해 높은 동시성을 달성하는 데 효율적.

TCB : 실행 관리를 위한 정보 저장

실행 상태 정보(실행, 준비, 대기, 종료), 스케줄링 정보, 식별 정보가 저장

컨텍스트 스위칭 :

스레드 간 컨텍스트 스위칭 단계

  1. 인터럽터 발생

    인터럽트의 종류에 따라 스위칭이 발생할 수도 있고 아닐 수도 있어 중요한 레지스터의 데이터를 저장시키지만 아닌 레지스터의 데이터는 임시로만 저장한다. → TCB에 저장

  2. 현재 스레드 상태 저장

  3. 스케줄링

  4. 새로운 스레드 종료. 상태 복원

    메모리 컨텍스트 확인?

    같은 프로세스, 다른 프로세스

    모드 확인(유저인지 커널인지)

  5. 현재 스레드 실행 재개

왜 컨텍스트 스위칭을 해야 하는가 : 멀티태스킹 구현, 공정한 CPU 분배, 시스템 응답성 향상, 효율적 자원 활용

profile
자라나라 실력 실력

0개의 댓글