ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 운영체제 5: 컨텍스트 스위칭 (Context Switching)
    CS기초/OS,HW 2021. 12. 28. 01:21
    728x90
    반응형

    컨텍스트 스위칭이란

     여러개의 프로세스가 실행되고 있을 때 기존에 실행되던 프로세스를 중단하고 다른 프로세스를 실행하는 것. 즉, CPU에 실행할 프로세스를 교체하는 기술이다.

     

    PCB

     컨텍스트 스위칭은 PCB(Process Context/Control Block)이라고 하는 메모리의 별도 공간에 process 상태값들을 저장하고, 해당 값들을 찾는 방법으로 구현된다. PCB는 프로세스가 실행중인 상태를 스냅샷 찍어 저장하는 공간이라고 생각하면 된다. PCB에 저장되는 내용은 다음과 같다.

    •  Process ID (PID)
    •  레지스터 값 (PC, SP 등)
    •  Scheduling info (프로세스 상태)
    •  Meomory info (메모리 사이즈 linit) - 전체 프로세스 사이즈 등
    •  기타

     리눅스의 PCB는 C 구조를 따르는데, 이는 리눅스가 C언어로 작성되었기 때문이다.

     가장 위의 ID부분은 process의 id를 저장하고, 그 밑단에는 각 processor들의 정보를 저장한다 (e.g. CPU State - 해당 process가 running상태인지, block상태인지..). Priority는 스케줄러가 우선순위를 사용할 경우 해당 프로세스의 우선순위가 저장된다.

    (PCB 위키피디아 문서)


    컨텍스트 스위칭 작동 순서

     A라는 프로세스가 running 상태이고 B라는 프로세스가 ready 상태라고 할 때,

    1. 스케줄러가 A 프로세스의 실행을 중단하고 B 프로세스를 실행할 것을 요청함
    2. A프로세스에서 Stack의 데이터 위치를 가리키고 있는 SP(Stack pointer)의 값과 다음 실행해야하는 코드의 주소값을 가지고 있는  PC(Program Counter)의 값을 PCB에 저장함 (운영체제에서 관리)
      * SP와 PC는 모두 중앙처리장치 안의 레지스터이다.
    3. A프로세스는 ready 또는 block 상태로 바뀌고, CPU에서 B 프로세스를 실행함. 이 과정을 통해 B 프로세스의 상태가 ready에서 running으로 바뀌는데, 이 작업을 디스패치(dispatch)라고 한다.
    4. 반대로 다시 B프로세스에서 A프로세스로 컨텍스트 스위칭을 할 경우, B프로세스의 SP값과 PC값을 PCB에 저장하고(이 때 PCB는 A프로세스의 위치값을 저장하는 PCB와는 별도로 생성되는 메모리 공간임) A프로세스의 PCB에서 SP값과 CP값을 찾아 SP와 PC에 덮어씌움.

     컨텍스트 스위칭은 ms의 짧은 시간 단위로 일어나지만 과도하게 많이 일어날 경우 오버헤드가 발생하게 된다. 그래서 컨텍스트 스위칭 코드는 어셈블리어로 작성되어있는 경우가 많다. 사실 초기 컴퓨터 프로그램들은 모두 어셈블리어로 작성되었는데 서로 다른 CPU 아키텍처가 등장할 때마다 매번 똑같은 프로그램을 새로 작성해야하고, 작성 속도가 떨어지는 단점이 있어(이식성이 낮음) C와 같은 언어로 코드를 작성하고 컴파일러를 이용해 어셈블리어로 변환하는 과정을 거치는 방법을 많이 채택했다. 어셈블리어보다 속도가 떨어진다는 단점이 있었으나 이 역시 컴파일러의 발전으로 많이 극복되었다고 한다.

     

    728x90
    반응형

    댓글