[OS] Context Switching

hyng·2022년 4월 1일
0

os

목록 보기
4/5

Context Switching이란?

멀티 프로세싱 환경에서 현재 실행 중인 프로세스가 실행이 중지되고 CPU가 다른 프로세스에게 넘어갈 때 이전에 실행 중이었던 프로세스의 컨텍스트 정보를 레지스터에서 PCB로 백업하고 새로 실행될 프로세스의 컨텍스트 정보를 PCB에서 레지스터로 로딩하는 것이다.

PCB(Process Control Block)

PCB는 운영체제에서 관리하는 프로세스 정보를 저장하고 있는 구조체이다.

출처

PCB는 대략 아래의 정보들을 가지고 있다.

  • Pointer: 부모 프로세스에 대한 포인터
  • Process ID: 프로세스의 아이디
  • Process State: 프로세스의 상태 값(ready, running, exit..)
  • Process Priority: 프로세스의 우선순위
  • Program Counter: 다음으로 실행할 명렁어 주소
  • Accounting Information: CPU 사용량, 시간제한, 프로세스 번호 등등
  • CPU Registers: CPU 레지스터
  • I/O Information: 프로세스에 할당된 열려 있는 파일 및 I/O 디바이스의 배열
  • ...

Process Switch

CPU가 프로세스 A를 실행하고 있을 때 여러 이유로 프로세스 A의 실행을 멈추고 프로세스 B가 실행되는 것을 Process Switch라고 한다. 그럼 Process Switch는 언제 발생하는 것일까?

  1. Clock(time) interrupt
    Time sharing system에서 할당된 시간을 다 사용한 경우 또는 sleep(2);에서 2초가 지난 경우

  2. I/O interrupt(키보드, 디스크, USB, 네트워크 장치)
    해당 장치에서 기다리던 데이터가 도착 한 경우

  3. I/O 함수 호출
    실행되던 프로세스가 API 함수(scanf(키보드), fread(파일), recv(네트워크), sleep(timer)를 호출했는데, 해당 장치에 데이터가 없을 경우 함수를 호출한 프로세스는 blocked 상태가 되고 스케줄러를 호출한다.

  4. Trap interrupt(에러 발생 시 해당 장치가 발생시킴)
    1) Segment fault(메모리 장치에서 발생시킴)

    세그먼트 오류: 프로그램이 허용되지 않는 메모리 영역에 접근을 시도하거나 허용되지 않는 방법으로 메모리 영역에 접근을 시도할 경우 발생한다.
    출처

    2) Illegal instructions(명령어가 깨졌을 때, CPU가 발생시킴)

    => Exit state로 전환하고 현 프로그램 종료시킴

  5. Memory fault interrupt(메모리 장치에서 발생시킴)

  • 가상기억장치에선 프로그램의 일부만 메모리에 로드시켜 프로그램을 실행할 수 있다.
  • 만약 실행 중인 프로그램의 다음에 실행할 명령어 또는 변수가 현재 메모리에 없을 때 memory fault가 발생한다.
  • 디스크에서 다음 명령어가 포함된 블록을 읽도록 지시한 후 현 프로세스는 Blocked 상태로 대기시키고 스케줄러를 호출한다.
  • 나중에 디스크가 읽어주면 디스크 interrupt가 발생하고 디스크 interrupt의 마지막에 스케줄러를 호출하여 프로그램을 재실행한다.

    가상 메모리 또는 가상 기억 장치(문화어: 가상기억기, virtual memory, virtual storage)는 메모리 관리 기법의 하나로, 기계에 실제로 이용 가능한 기억 자원을 이상적으로 추상화하여[1] 사용자들에게 매우 큰 (주) 메모리로 보이게 만드는 것을 말한다.[2] 각 프로그램에 실제 메모리 주소가 아닌 가상의 메모리 주소를 주는 방식이다. 이러한 방식은 멀티태스킹 운영 체제에서 흔히 사용되며, 실제 주기억장치보다 큰 메모리 영역을 제공하는 방법으로도 사용된다.
    출처

참고

Operating System — Process Management
[os] PCB
컴퓨터의 메모리 구조 - 하드디스크, 메인메모리, 캐시의 차이
가상메모리 위키백과
세그먼트 오류 위키백과

profile
공부하고 알게 된 내용을 기록하는 블로그

0개의 댓글