ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • OS - Context Switching 이론 공부
    운영체제 2022. 3. 17. 16:37

    Context Switching이란?

    CPU는 한번에 하나의 프로세스만 처리할 수 있다. CPU 자원을 공유해서 여러 프로세스가 쓰기 위해서는 context swtiching 과정이 필요하다.  

    여러 프로세스를 처리해야 하는 상황에서 현재 진행중인 Task(프로세스, 스레드)의 상태를 PCB(Process Control Block)에 저장하고 다음에 진행할 Task의 상태값을 읽어 적용하는 과정을 context switching이라고 한다. 다른 프로세스에게 CPU 자원을 할당해 작업을 수행하는 과정을 말한다.

     

    PCB(Process Control Block)란?

    프로세스 제어 블록이란 특정한 프로세스에 대해  관리할 필요가 있는 정보를 포함하고 있는 운영체제 커널의 자료구조이다. kernal space에 유지가 된다.

    운영체제에서 프로세스 스케줄링 하기 위해 프로세스에 대한 정보를 가지고 있는 블럭이다.

    즉 운영체제가 프로세스를 표현한 것이라고 할 수 있다.

     

    각 프로세스가 생성될 때마다 고유의 PCB가 생성되고, 프로세스가 완료되면 PCB는 제거된다.

    프로세스가 context switching이 일어나 CPU의 자원을 다른 프로세스에게 넘겨주어야 할 때, 진행하던 작업을 저장하지 않으면 다음에 다시 CPU를 할당 받았을 때, 어디서부터 작업을 해야할지 모르게 된다. 이때 PCB에 저장해두면 정보를 읽어 계속 작업을 할 수 있게 되는 것이다. 

    PCB의 구조

    Notes

    PCB 정보는 각 운영체제마다 다르다.

    PCB 접근 속도는 전반적인 system performance에 중요하다.

     

    PCB의 정보들

    • PID(Process ID)
    • Process State(프로세스 상태) : 생성(create), 준비(ready), 실행 (running), 대기(waiting), 완료(terminated) 상태
    • Program counter : 프로세스가 다음에 실행할 명형어의 주소를 가리킴
    • CPU registers : contents of all process-centric registers
    • Scheduling information : 프로세스 우선순위, 스케줄링 매개변수 등.
      • 페이지 테이블: 프로세스의 페이지 정보를 저장하고 있는 테이블
      • 세그먼트 테이블:
        • 세그먼트: 프로그램과 그와 관련된 데이터들이 나누어지는 단위
        • 세그먼트 테이블은 이 세그먼트들의 번호, 시작 주소, 크기를 담는다.
    • Memory management information : Base/limit registers, page tables, segment tables, etc.
    • Accounting information(프로세스 계정 정보) : CPU used, clock time elapsed since start, time limits, 소유자, 부모 등
    • I/O status information : 프로세스에 할당된 I/O devices 정보, 열린 파일 목록 etc
    • Context save area : 프로세스의 register context를 저장하는 장소
    • Pointer : 부모 프로세스에 대한 포인터, 자식 프로세스에 대한 포인터, 프로세스가 위치한 메모리 주소에 대한 포인터, 할당된 자원에 대한 포인터 정보 등



    Context Switching은 언제 일어날까?

    크게 3 케이스로 나뉜다

     

    멀티태스킹(Multi-Tasking)

    여러 프로세스들이 운영체제의 스케줄러의 방식에 따라 번갈아 수행된다.

    이때 번갈아 프로세스가 CPU를 할당 받는데, 이를 Context Switching이라고 한다.

    하지만 이 속도가 무척 빠르기 때문에 사용자는 여러 프로세스가 동시에 처리되는것처럼 느껴진다.

     

    인터럽트 핸들링(interrupt handling)

    인터럽트는 시스템에 예외 상황이 발생했을때 CPU에게 알려 처리할 스 있도록 하는 것을 말한다.

    이 인터럽트가 발생하면 Context Switching이 일어난다.

     

    인터럽트(interrupt) 종류

    • I/O request : 입출력 요청
    • Time Slice Expired : CPU 사용시간이 만료
    • fork a child : 자식 프로세스 생성
    • Wait for an interrupt : 인터럽트 처리 대기

    사용자와 커널 모드 전환(User and Kernal mode switching)

    운영체제에는 크게 user mode와 kernal 모드가 있다. 

    • user mode : 사용자가 응용프로그램들을 사용하기 위해 접근하는 영역이다. 또한 사용자가 프로그램 내부에 자원들에 접근할 수 없도록 하는 모드이다.
    • kernal mode : system memory롸 모든 명령어들에 접근이 가능한 실행모드이다. CPU 스케줄링, 메모리 관리, I/O 관리, 파일 시스템 관리 등의 일을 맡고 있다.

    user mode와 kernal mode간의 전환에서 context swtiching은 필수가 아니지만 운영체제에 따라 발생할 수 있다.

     

     

    Context Switching 과정

    1. 요청 발생 : 인터럽트 또는 트랩에 의한 요청이 발생.
    2. PCB에 저장 : 운영체제가 현재 실행중인 프로세스의 정보를 PCB에 저장. Task의 대부분 정보는 Register에 저장되고 PCB로 관리된다.
    3. CPU 할당 : 운영체제가 다음에 실행된 프로세스의 정보를 PCB에서 가져와 register에 적재하고 CPU 자원을 할당, 이전에 했던 작업을 이어서 진행

    Context Switching Cost

    Context Switching이 발생하게 되면 다음 프로세스를 위해 초기화 하는 등 여러 작업 때문에 큰 cost가 발생한다.

    • cache 초기화
    • Memory Mapping 초기화
    • Kernel은 메모리 접근을 위해서 항상 실행되어야 함

    context switching 때, 해당 CPU는 아무 작업을 하지 못하기 때문에  context switching 이 자주 일어나면 오버헤드가 많이 발생해서 오히려 효율과 성능이 떨어질 수 있다.

    Process vs Thread

    thread는 stack을 제외한 모든 메모리를 공유하기 때문에 context switching이 발생하면 stack 영역만 변경해주면 된다.

    따라서 thread의 context switching 비용이 덜 든다.

     

    '운영체제' 카테고리의 다른 글

    OS - File System(파일시스템)  (2) 2022.03.27
JackCokebb dev blog