[운영체제]프로세스와 스레드의 Context Switch

이재민·2024년 1월 3일

운영체제

목록 보기
2/3

프로세스 컨텍스트 스위칭

프로세스 스케줄링

프로세스 스케줄링 은 운영체제에서 프로세스에게 CPU를 선택, 할당하는 작업을 말합니다.

프로세스 스케줄링은 프로세스의 우선순위, 작업량을 고려하여 배치하기에 스케줄링은 멀티 태스킹 작업의 핵심적인 부분입니다.
스케줄링은 CPU의 선점, 비선점 기법에 따라 다양한 알고리즘 방식으로 동작하고 대표적으로 FCFS(First-Come, First-Served), SJF(Shortest-Job-First), Priority, RR(Round-Robin), Multilevel Queue 등이 있습니다.

프로세스 상태

프로세스 상태란 프로세스가 실행되는 동안 변경되는 상태를 의미합니다. 프로세스는 생성부터 종료까지 여러 상태가 있으며 일반적으로는 5가지 상태를 가집니다.

  • 생성(new)
    프로세스가 생성되고 준비 전 상태
  • 준비(ready)
    프로세스가 실행을 기다리는 상태
    CPU를 할당 받을 수 있는 상태
  • 실행(running)
    CPU를 할당받아 실행되는 상태
  • 대기(waiting)
    이벤트(입출력)가 발생하여 대기하는 상태
    CPU 할당받지 못하여 다시 READY 상태로 전환될때까지 대기
  • 종료(terminated)
    프로세스 실행 완료 후 종료된 상태
    메모리에서 제거

프로세스 상태 전이

프로세스 상태 전이란 프로세스가 실행되는 동안 OS에 의해 프로세스 상태가 변경되는 것을 말합니다.

운영체제는 프로세스의 상태를 감시하고 상태를 기반으로 프로세스 스케줄링(프로세스 관리, 제어)을 합니다.

출처:https://wansook0316.github.io/

  • addmitted(new -> ready)
    프로세스 생성을 승인 받음
  • dispatch(ready -> running)
    준비 상태에 있는 여러 프로세스들 중 하나가 스케줄러에 의해 실행된 상태
  • interrupt(running -> ready)
    프로세스 Timeout 또는 이벤트가 발생하여 현재 프로세스를 준비 상태로 전환하 후 해당 작업 먼저 처리
  • I/O or event wait(running -> waiting)
    실행 중인 프로세스가 입출력 혹은 이벤트를 처리해야 하는 경우
    입출력 혹은 이벤트가 끝날때까지 대기 상태로 전환
  • I/O or event Completion(waiting -> ready)
    입출력이나 이벤트가 모두 끝난 프로세스를 다시 준비 상태로 만들어 스케줄러에 의해 선택될 수 있는 상태로 전환

프로세스 컨텍스트 스위칭 과정

대략적인 스위칭 과정은 아래와 같습니다.
1. CPU가 프로세스P1을 실행합니다.
2. interrupt 또는 System call 발생시 P1의 상태를 PCB1에 저장합니다.
3. 실행할 P2를 선택합니다(CPU 스케줄링)
4. P2의 상태를 PCB2에서 불러와 실행합니다.
5. 일정시간이 지나 interrupt 또는 System call 발생시 P2의 현재 상태를 PCB2에 저장합니다.
6. 다시 P1 실행 할 차례가 온다면 PCB1에서 불러옵니다.
7. CPU는 P1의 저장한 작업 내역부터 수행합니다.

컨텍스트 스위칭 오버헤드

출처:https://mycareerwise.com/content/context-switch-and-dispatcher/content/exam/nta-net/computer-science

위에서 설명한 컨텍스트 스위칭은 빠른 응답, 동시성을 제공하지만 프로세스 스위칭되는 과정에서 프로세스의 상태, 레지스터 값 등이 저장되고 불러오는 작업이 이뤄지기에 시스템에 많은 부담을 주게 됩니다.
위 사진의 task 사이를 확인해보면 프로세스가 바로 실행되지 않고 cpu idle 상태가 이뤄지는데(보라색 박스) 이 간극을 컨텍스트 스위칭 오버헤드(overhead)입니다.

이러한 오버헤드는 아래와 같은 이유에서 주로 발생합니다.
1. PCB 저장, 복원 비용
2. CPU 캐시 메모리 무효화 비용
3. 프로세스 스케줄링 비용

PCB 저장 및 복원 비용은 본 글에서 충분히 설명했기에 생략하겠습니다.
CPU 캐시 메모리 무효화는 프로세스 자체가 스위칭되기에 CPU 캐시 메모리에 저장된 데이터가 무효화가 됩니다. 이 과정에서 메모리 접근 시간이 늘어나고 성능 저하가 발생합니다.

PCB(Process Control Block)

PCB(프로세스 제어 블록)이란 프로세스에 대한 모든 정보가 모여있는 자료구조를 말합니다.

CPU는 프로세스 컨텍스트 스위칭할때 기존 프로세스의 상태를 저장하고 기존 프로세스의 작업 정보를 가져오는 곳인 PCB가 필요합니다.

출처:https://prepinsta.com/operating-systems/process-control-block/

PCB 아키텍처는 OS마다 다릅니다.
  • pointer
    상위 프로세스에 대한 포인터 위치
  • stage
    준비, 대기, 종료 등과 같이 모든 프로세스가 현재 있는 상태
  • process ID
    모든 실행 단계에서 각 프로세스에 대한 고유한 ID
  • Privileges
    프로세스가 가지고 있는 메모리 또는 장치에 대한 다양한 리소스에 대한 특별한 액세스
  • Program counter
    프로세스 라인의 다음 명령어 주소
  • Registers
    프로그램을 실행하기 전에 프로세스를 저장해야 하는 CPU를 등록

스레드 컨텍스트 스위칭

스레드 스케줄링

스레드 스케줄링(Thread Scheduling)은 프로세스 스케줄링과 마찬가지로 운영체제에서 다중 스레드를 관리하며 CPU를 사용할 수 있는 스레드를 선택하고 CPU를 할당하는 작업을 말합니다.

출처:https://javagoal.com/thread-scheduler-in-java/

스레드 스케줄링은 프로세스 스케줄링과 다르게 하나의 프로세스 내에서 다수의 스레드가 동작하고 프로세스 공유 자원을 공유한다는 특징 때문에 스레드 간의 상호작용과 동기화 문제를 고려해야 합니다.

스레드 상태

  • new
    스레드가 생성되고 아직 호출되지 않은 상태
  • runable
    스레드가 실행되기 위해 기다리는 상태
    CPU 할당 받을 준비가 되어있고, 실행될 준비가 되어 있는 상태
  • blocked
    스레드가 특정 이벤트가 발생하여 대기하는 상태
    CPU를 할당 받지 못하며 runnable 상태로 전환되기 전까지 대기
  • terminated
    스레드가 실행을 완료하고 종료된 상태
    메모리에서 제거

스레드 컨텍스트 스위칭

출처:https://velog.io/@curiosity806

TCB(Thread Control Block)

TCB는 PCB처럼 각 스에드마다 운영 체제에서 유지하는 스레드에 대한 정보를 담고 있습니다.
프로세스가 생성되면 PCB가 메모리에 함께 생성되는 것처럼, TCB도 스레드가 생성될 때 운영체제에 의해 생성됩니다.

출처:https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=jhc9639&logNo=221707378026

Process Context Switch vs Thread Context Switch

프로세스 컨텍스트 스위칭, 스레드 컨텍스트 스위칭 두 가지 방법에는 차이점이 존재합니다.
이미 앞선 PCB, TCB 설명때 설명했던 내용들과 동일합니다.

  1. PCB보다 TCB가 가볍다
    TCB는 프로세스 내의 code, data, heap 영역 메모리를 공유하기 때문에 TCB에서는 stack, register 포인터 정보만 저장하기 때문에 PCB보다는 가볍고 빠르게 읽고 저장할 수 있기 때문입니다.
  2. 캐시 메모리 초기화 여부
    Process Switching되면서 캐시 메모리에 저장되어 있던 기존 Process 정보들에서 새로운 Process 정보들로 교체되면서 캐시 메모리 초기화가 되면서 TCB가 가볍다고 표현할 수 있습니다.
    또한, CPU가 사용하려는 정보들은 결국 저장장치인 메인메모리나 디스크에 저장이 되는데 CPU가 데이터를 요구할 때 메인 메모리를 통하지 않고 캐시 메모리에서 전달 받기 때문에 저장장치에 저장된 데이터를 복사하는데 프로세스 스위칭되면서 이러한 작업들이 발생하는 차이점이 존재합니다.
  3. 자원 동기화 문제
    스레드 컨텍스트 스위칭이 발생해 공유 데이터 영역에 접근하는 과정에서 동기화 문제가 발생할 수 있습니다.
    두 개 이상의 스레드가 동시에 하나의 데이터를 수정하려고 할 때 잘못된 값으로 변경할 수 있는데 이를 스레드 간에 경쟁조건이라고 합니다.
    따라서 자원 동기화 문제를 해결하기 위해서는 적절한 동기화 매커니즘이 필요합니다.
profile
문제 해결과 개선 과제를 수행하며 성장을 추구하는 것을 좋아합니다.

0개의 댓글