Context Switch ( 문맥교환 )

Choooose·2023년 2월 6일
0

운영체제

목록 보기
3/8

Context Switch


문맥교환이라고도 한다.

CPU를 사용하는 프로세스가 변경될 때 발생하는 CPU 교환 작업이라고 생각하면 될 것 같다.

schedule()

Context Switch가 발생할때 수행되는 커널의 함수

SystemCall 과는 다르게 외부에서 호출할 수 없으며 커널 내에서만 호출이 가능하다.
이때 schedule() 을 호출하게 되는 SystemCall이 read(), wait(), exit() 등등 이 있다.
System Call이 외부에서 호출된 후에 커널로 이동하여 커널 내에서 schedule() 함수를 호출하고 이로 인해 Context Switch가 발생한다고 생각하면 될 것 같다.
(System Call은 외부 ( 커널 밖 ) 에서 호출이 가능하다.)

Context Switch 과정

용어 설명

Program Counter (PC) : 다음 시작할 명령어의 메모리 주소를 저장하는 레지스터
Stack Pointer (SP) : 스택의 마지막 프로그램 요청 주소를 저장하는 레지스터

이러한 구조가 있다고 가정했을 때

이때 Process 1이 현재 CPU를 가지고 돌아가고 있다고 하자,
Process 1에서 Process 2로의 Context Switch 과정은 다음과 같다.

  1. wait()로 Process1 이 CPU를 반납하고 Sleep ( wait ) 되고 Process1 PCB에 CPU에서 돌아가고 있던 Process1의 상태를 저장한다.
  2. 커널은 다음 실행할 Proces2를 선택한다.
  3. 커널이 Process2의 PCB를 찾고 Process2의 PCB가 CPU로 올라온다.
    (이때 PCB 안에 있던 PC, SP 와 기타 레지스터들이 CPU에 올라오는 것이다)
  4. CPU로 올라온 PCB안의 ProgramCounter가 가리키는 Process2를 실행한다.

앞서 나왔던 Child를 생성하는 과정에서 Context Switch가 발생되는 시기는

  1. Parent 의 wait() 후에 Child로 CPU를 넘겨줄 때
  2. Child가 exec()를 수행하고 난 후에 exit() 에서 작업을 종료하고 다시 Parent에게 CPU를 넘겨줄때

발생한다.

참고 자료


[운영체제] 프로세스와 레지스터(PC, SP)
https://velog.io/@wejaan/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-stack-pointer-and-program-counter

운영체제 - YES24

고건 교수님 강의
https://olc.kr/course/course_online_view.jsp?id=35&cid=51

0개의 댓글