본문 바로가기

신입 개발자 면접 기초

OS - Context Switch(컨텍스트 스위치)가 무엇인가?

반응형

Context Switching이 무엇인가?

멀티프로세스 환경에서 CPU가 어떤 하나의 프로세스를 실행하고 있는 상태에서 인터럽트 요청에 의해 다음 우선 순위의 프로세스가 실행되어야 할 때 기존의 프로세스의 상태 또는 레지스터 값(Context)을 저장하고 CPU가 다음 프로세스를 수행하도록 새로운 프로세스의 상태 또는 레지스터 값(Context)를 교체하는 작업을 Context Switch(Context Switching)라고 한다.


질문에 대한 답변은 이정도로 하고 좀 더 명확하게 이해해본다.

* Context Switching을 문맥 교환으로 번역하지 말자.

Context는 무엇인가?

사용자와 다른 사용자, 사용자와 시스템 또는 디바이스간의 상호작용에 영향을 미치는 사람, 장소, 개체등의 현재 상황(상태)을 규정하는 정보들을 말한다.

android나 servlet등에서도 context가 있지만 OS에서 Context는 CPU가 해당 프로세스를 실행하기 위한 해당 프로세스의 정보들이다.

Context는 프로세스의 PCB(Process Control Block)에 저장된다.

그래서 Context Switching 때 PCB의 정보를 읽어(적재) CPU가 전에 프로세스가 일을 하던거에 이어서 수행이 가능한 것이다.

PCB의 저장정보

- 프로세스 상태 : 생성, 준비, 수행, 대기, 중지

- 프로그램 카운터 : 프로세스가 다음에 실행할 명령어 주소

- 레지스터 : 누산기, 스택, 색인 레지스터

- 프로세스 번호

* 참고로 Context Switching 때 해당 CPU는 아무런 일을 하지 못한다. 따라서 컨텍스트 스위칭이 잦아지면 오히려 오버헤드가 발생해 효율(성능)이 떨어진다.


Context가 뭔지 알았고 멀티프로세싱하기 위해 CPU를 나눠서 사용하기 위해 Context를 교체하는 것이 Context Switching임을 알았다. 그리고 PCB에 Context가 저장됨도 알았다.

남은 것은 인터럽트 요청이 뭐고 어떤 종류가 있는지 + 서브로 우선 순위에 대한 이야기다.

Context Switching - 인터럽트(Interrupt)

인터럽트는 CPU가 프로그램을 실행하고 있을 때 실행중인 프로그램 밖에서 예외 상황이 발생하여 처리가 필요한 경우 CPU에게 알려 예외 상황을 처리할 수 있도록 하는 것을 말한다.

어떤 인터럽트 요청이 와야 Context Switching이 일어날까?

1. I/O request (입출력 요청할 때)

2. time slice expired (CPU 사용시간이 만료 되었을 때)

3. fork a child (자식 프로세스를 만들 때)

4. wait for an interrupt (인터럽트 처리를 기다릴 때)

+ 더 있겠지만 자세한 것은 생략.


* 우선 순위는 해당 OS의 스케줄러가 우선 순위 알고리즘에 의해 정해지고 수행하게 되어있다.

라운드로빈 스케줄링(Round Robin Scheduling)은 시분할 시스템을 위해 설계된 선점형 스케줄링의 하나다.

쉽게 설명하면 순서대로 시간단위(Time Quantum)을 CPU에 할당하는 방식이다.

꽤 효율적인 스케줄링 알고리즘이지만 이 시간단위를 작게 설정하면 CPU가 조금 일하고 Context Switching을 반복하므로 아까 말했듯이 효율이 떨어진다.

* Context Switch를 하는 주체 = OS 스케줄러

반응형
  • 컴공3학년 2019.04.19 15:44

    잘 보고 갑니다 이해가 잘되네요 다른 게시물들도 공부할때 많이 참고하겠습니다.

  • 취준 2019.11.14 13:35

    ㅜㅜ 면접에서 나왔는데 답을 못했어요..
    슬프지만 이번기회에 올려주신 글 보면서 다시 공부하고가요ㅎㅎ
    설명 깔끔하게 잘해두셔서 이해 잘되네요
    감사해요!!

    • Favicon of https://jeong-pro.tistory.com BlogIcon JEONG_AMATEUR 2019.11.15 21:39 신고

      ㅠㅠ 면접에서 떨어진 답을 찾으러 제 블로그까지 오셨다니 노력이 대단하십니다
      더 좋은 곳에서 합격소식이 있으실거에요!

  • ㅇㅇ 2019.12.13 05:28

    이 context switching 이 중요한 이유를 알 수 있을까요? 보고서를 작성하는데 이 부분이 너무 막혀서 진도가 나가질 못하고 있어요 흑흑..

    • Favicon of https://jeong-pro.tistory.com BlogIcon JEONG_AMATEUR 2019.12.13 10:58 신고

      개인적으로 단순하게 생각하면,
      이 기술이 있으니까 동시에 여러 프로세스가 실행되는 것처럼 느껴지는 것이고요.
      본문에서 볼 수 있 듯 Context switching이 너무 빈번하게 일어나면 cpu가 본래의 수행하는 작업 시간은 오히려 줄고 context switching하는 시간이 늘어서 온전한 성능을 내기 어려우니 관리가 중요하다고 봅니다.
      그리고 운영체제의 핵심이라고 볼 수 있는 CPU 스케줄링 알고리즘에서 중요한 고려대상이란 점(?)이 있어서 context switching이 중요하다는 것 아닐까요?!

  • Favicon of https://hl2mlb59.tistory.com BlogIcon 부르르59 2020.03.05 00:33 신고

    딱 봐서 상시가동해도 무방하다 싶은 프로세스 중에서 스위칭이 잦은 건 아예 런에서 삭제합니다 그 게 편하더라구요

  • Favicon of https://xxxxxxxxxxxxxxxxx.tistory.com BlogIcon xeskinn 2020.04.06 21:25 신고

    레지스터가 많다면 context switch는 포인터만 바꿔주면 되겠지만, 인터럽트가 들어올 때 레지스터 수가 적다면 어떻게 되는지 알 수 있을까요?

    • Favicon of https://jeong-pro.tistory.com BlogIcon JEONG_AMATEUR 2020.04.06 23:20 신고

      질문을 제대로 이해하지 못했습니다...

      추측으로만 말씀드리면, interrupt stack overflow를 막아주는 기능이 있지 않을까 싶습니다. (결과적으로 인터럽트가 무시되는....?)

      나름대로 열심히 찾아봤는데 제 실력에서는 역부족인 것 같습니다..ㅠㅠ 죄송합니다.

  • Favicon of https://xxxxxxxxxxxxxxxxx.tistory.com BlogIcon xeskinn 2020.04.09 22:35 신고

    예를 들어서 레지스터셋이 하나인 경우에는 context switch를 하려면 프로세스1에 대한 pcb1을 cpu에서 램에 복사한 뒤에 프로세스2에 대한 pcb2를 cpu의 레지스터에 가져와서 실행해야 한다는 이야기였습니다..

    저기서 pcb1에 대한 정보를 램에 복사하지 않고, pcb2를 그대로 레지스터셋에 덮어씌우면 괜찮지 않나라는 생각을 했는데, 저때 복사해주는 건 cpu에서는 연산이 진행중이기 때문에 cpu에 있는 pcb1과 램에 있는 pcb1이 다르기 때문이라네요~!

    정리가 되어 댓글답니다 ㅎㅎ 답글을 달 수 없도록 되어있네요 ^^..

    • Favicon of https://jeong-pro.tistory.com BlogIcon JEONG_AMATEUR 2020.04.10 09:42 신고

      아이고.. 정리까지 정말 감사합니다.

      댓글은 조금 이상하지만 최초 댓글에 답글을 작성하면 됩니다...
      (대댓글의 깊이 또는 레벨이 1밖에 안되는...)

  • Favicon of https://1-7171771.tistory.com BlogIcon KKKK_HHHH 2020.12.07 16:09 신고

    정말 쉽게 이해됐습니다 감사합니다!

  • 컴공3학년2학기 2021.04.23 15:13

    너무 이해하기 쉽게 잘 쓰신거 같습니다. 자주 들어와서 참고 하고 가겠습니다 감사합니당

  • 윤정도 2022.04.22 01:41

    좋은 글 감사합니다~!