[운영체제] 문맥 교환(Context Switching)

최지수·2022년 2월 18일
0

운영체제

목록 보기
8/13
post-thumbnail

문맥 교환(Context Switching)

CPU에서 작업 중인 프로세스를 Waiting 상태로 돌려 멈추게 하고 다른 프로세스를 Running 상태로 만들어 수행시키는 작업이에요. 즉, CPU에 실행할 프로세스 정보를 교체하는 기술이에요. 이 작업은 캐시 초기화 등 큰 작업이 있어서 자주 발생하면 오버헤드Overhead가 발생해요.

전개 방식

실행 중인 프로세스가 여럿있다고 가정하면 실행할 프로세스의 PCB에서 프로그램 계수기PC와 스택 포인터SPCPU 레지스터에 등록해서 프로세스를 실행해요. 그리고 인터럽트로 인해 문맥 교환이 발생하면 해당 프로세스의 PCSPPCB에 저장하고 Waiting 상태로 들어가죠. 그 다음에 수행할 프로세스의 PCSPCPU 레지스터에 적재시켜서 다음 프로세스를 수행해요.

PCSP에 대한 개념은 프로세스 구조에 설명되고 있으니 참고해주세요.

무튼, 이를 정리하면 아래와 같아요.

  1. 실행 중지할 프로세스 정보를 해당 프로세스의 PCB에 업데이트
  2. 다음 실행할 프로세스 정보를 메인 메모리에 있는 해당 PCB 정보를 CPU 레지스터에 넣고 실행 \to Dispatch : Ready 상태를 Running 상태로 바꾸는 것

기냥 끝내기 아쉬워 몇가지 사실을 끄적여봐요

  • 문맥 교환Context Switching도 일종의 코드에요.
  • 대략 10 ms의 수행 시간을 가져요. 그만큼 작업이 많을 수록 오버헤드Overhead가 잦아져요.
  • 어떠한 언어로 작성하냐에 따라 상충 관계Trade-off가 발생해요.
    • C 언어 등 컴파일러가 있는 언어로 작성하면 어셈블리어로 작성하는 것보단 느려요. 그 대신 CPU 아키텍처에 따라 컴파일러만 만들면 되서 '이식'하기 용이해요.
    • 어셈블리어로 짜면 엄청 빨라요. 대신 어셈블리어는 각 CPU 아키텍처(ARM vs. Intel)마다 상이하기 때문에 새로운 CPU 아키텍처가 나타날 때마다 만들어줘야 해요.
  • Linux는 각 CPU에 대응하는 문맥 교환 코드가 존재해요(!)

문맥 교환에 대한 정리는 여기까지에요.

profile
#행복 #도전 #지속성

0개의 댓글