Basic CS(4)

WorldWannyWeb.·2021년 6월 22일
0

CS

목록 보기
4/7
post-thumbnail

2021-06-20

저번 포스팅 Interrupt에 이어서 Context Switching에 대해서 알아보자. 저번 포스팅에서 했던 Interrupt는 프로그램이 작동중에 예기치 않은 문제가 발생했을 때, 이 문제를 해결하고 원래 수행하던 프로그램을 다시 수행하도록 만드는 메커니즘이고, 그 과정에 대해서 알아보았다. 이번 포스팅은 Interrrupt와 짝지처럼 있었던 Context Switching에 대해 알아보자.

1. Context Switching

Context Switching 한글로 직역을 해보면 문맥변환 이라고 해석되는데 직역을 하면 안될 것같은 느낌이 온다. 그렇다면, Constext Switching이 왜 언급이 되었던 것일까? 우선, Context Switching의 정의에 대해서 먼저 알아보자.

Context Switch란 하나의 프로세스가 CPU를 사용 중인 상태에서 다른 프로세스가 CPU를 사용하도록 하기 위해, 이전의 프로세스의 상태를 보관하고 새로운 프로세스의 상태를 적재하는 작업을 말한다. 한 프로세스의 문맥은 그 프로세스의 프로세스 제어 블록에 기록되어 있다. (출처 : 위키백과)

보아하니 프로세스와 CPU와 관련이 있는 것 같다. Context Switching에 대해서 먼저 알아보기 전에 Context가 여기 의미하는 바를 알아야할 것 같다.

1-1. Context?

Context란 무엇일까? 단순히 한글로 문맥이라고 번역하기엔 너무 와닿지 않은 것 같다. stackoverflow에서 Context에 대해 조금 더 쉽게 이해할 수 있는 답변을 가져왔다.

내가 은행을 간다고 가정해보자
은행에서 십만원을 인출하려고 한다. 창구 직원은 돈을 주기 전에 신원을 확인해야하므로 민증이나 운전면허증을 보여 주거나 PIN 번호를 입력해야한다. 어느 쪽이든 이런 정보를 제공하는 것context 라고 한다. 은행원은 정보를 사용하여 거래를 진행한다. 그런 다음 인출 할 계좌를 물어보았을때, 신한은행계좌를 알려준다면, context를 더 알려주는 것이다.

즉, Context는 사용자와 다른 사용자, 사용자와 시스템 또는 디바이스간의 상호작용에 영향을 미치는 사람, 장소, 개체등의 현재 상황(상태)을 규정하는 정보들을 말한다. 운영체제에서의 Context는 CPU가 해당 프로세스를 실행하기 위한 해당 프로세스의 정보들이다. 이 Context는 프로세스의 PCB(Process Control Block)에 저장된다. 프로세스가 실행되는 것은 CPU가 PCB에서 Context를 읽어 레지스터값을 변경해주는 것이다.

1-2. Context Switching

Context Switching에 대해서 설명하기 위해서는 CPU가 프로세스를 어떻게 관리하는지에 대해 먼저 알아보자.

먼저, CPU 스케줄링에 대해서 먼저 알아보고 들어가보자. CPU는 여러개의 프로세스를 번갈아가면서 실행하는데 매우 고속이기 때문에 우리 눈에는 동시에 실행되는 것처럼 보인다. 이러한 멀티프로세스 운영체제에서 프로세스의 CPU 할당 순서 및 방법을 결정짓는 것을 '스케줄링'이라 한다.

CPU가 프로세스가 여러 개일 때, CPU 스케줄링을 통해 관리하는데, CPU는 각 프로세스들이 누군지 알아야 관리가 가능하다. 이러한 프로세스들의 특징을 갖고 있는 것이 바로 Process Metadata 라고 한다.

Process Metadata에는 다음과 같은 정보들이 들어있다.

  • Process ID 또는 PID(Process Identification Number): 프로세스 고유 식별 번호
  • Process State(프로세스 상태) : 프로세스의 현재 상태(준비, 실행, 대기 상태)를 기억.
  • Process Priority(스케줄링 정보) : 프로세스 우선순위 등과 같은 스케줄링 관련 정보를 기억.
  • CPU Registers : 프로세스의 레지스터 상태를 저장하는 공간 등. CPU 내 범용 레지스터(AX, BX, CX, DX), 데이터 레지스터(SP, BP, SI, DI), 세그먼트 레지스터(CS, DS, ES, SS) 등이 갖고 있는 값을 기억.
  • Owner(계정 정보) : CPU 사용시간의 정보(Quantum), 각종 스케줄러에 필요한 정보를 기억.
  • 기억장치 관리 정보 : 프로그램이 적재될 기억 장치의 상한치, 하한치, 페이지 테이블 등의 정보를 기억.
  • 입출력 정보 : 프로세스 수행 시 필요한 주변 장치, 파일들의 정보를 기억.
  • 프로그램 카운터(계수기): 다음에 실행되는 명령어의 주소를 기억.

이러한 정보들이 담긴 메타데이터는 프로세스가 생성되면 PCB(Process Control Block)에 저장된다.

PCB는 프로세스 메타데이터들을 저장하며, 하나의 PCB 안에는 하나의 프로세스의 정보가 담겨있다. PCB에 정보가 저장되는 순서를 보자면, 프로그램이 실행되면, 프로세스가 생성되고, 프로세스 주소 공간에 (코드, 데이터, 스택) 생성된다. 이 프로세스의 메타데이터들이 PCB에 저장된다.

PCB가 필요한 이유는 CPU에서는 인터럽트가 발생해서 할당받은 프로세스가 Block 상태가 되고 다른 프로세스를 running으로 바꿀 때 교체 작업이 이루어지는데 이 때, 앞으로 다시 수행할 Block 상태의 프로세스의 상태값을 PCB에 저장해둔다.

PCB는 Linked List 방식으로 관리하는데, PCB List Head에 PCB들이 생성될 때마다 붙게 된다. 프로세스가 생성되면 해당 PCB가 생성되고 프로세스 완료 시 제거된다. 이렇게 수행 중인 프로세스를 변경할 때, CPU의 레지스터 정보가 변경되는 것을 Context Switching이라고 한다.

요약하자면, Context Switching은 멀티프로세싱하기 위해 CPU를 나눠서 사용하기 위해 Context를 교체하는 것을 말하며, PCB에 Context가 저장된다.

하지만, Context Switching이 잦으면, Context Switching을 하는동안 CPU는 아무런 일도 할 수 없기 때문에 오버헤드가 발생한다.

profile
와니완의 월드와이드와니웹🐥

0개의 댓글