[운영체제] 프로세스 구조 - (2)

Yeongsan Son·2021년 6월 28일
0
post-custom-banner

컨텍스트 스위칭에 대해서 알아보자.

먼저, PC(Program Counter)와 SP(Stack Pointer)을 다시 알아보자.

프로그램 카운터는 CPU의 레지스터 중 하나를 지칭하는데, 메모리로부터 다음 실행할 명령의 주소를 저장하는 역할을 한다.

스택 포인터 또한 레지스터 중 하나이며, 스택에서 가장 최근 요청의 명령 주소를 저장하는 역할을 한다.


Process A 와 Process B가 있다고 가정하자.

먼저, Process A를 실행하면 스케쥴러에 A가 담기고 스케쥴러는 A의 상태를 running 상태로 변경하고 runnig 상태인 A를 CPU에서 실행을 한다.

A를 실행하다가 어느 시점이되면, 스케쥴러가 다음 실행할 프로세스인 B로 바꿔주는 작업을 컨텍스트 스위칭이라고 부른다.
(컨텍스트 스위칭은 실행이 많은 동작이기 때문에 컨텍스트 스위칭 코드는 어셈블리어로 작성되어 있다.)

A를 B로 전환하기 전에, 메모리에 PCB라고 하는 저장 공간을 만들어 A에 해당하는 Context(PC값과 SP값)값을 저장해둔다.

프로세스의 흐름이 B로 전환이 되면, 프로그램 B의 첫 실행 코드의 주소가 PC에 저장되고 stack의 가장 최상단의 저장 공간 주소를 SP에 저장한다.
(PC와 SP의 값은 프로그램 실행이 진행됨에 따라 동적으로 변한다.)


장황하하게 설명했지만 큰 흐름을 살펴보면

CPU context => PCB context => 전환 => CPU context => PCB context => 전환 => PCB context => CPU context 업데이트

이 흐름의 반복이다.

PCB

  • Process Control Block(Process Context Blcok)
    • Process ID
    • Register 값 (PC, SP) => 실제 실행 시에 CPU 레지스터에 업데이트
    • Scheduling Info(Process State): ready, block, running
    • Memory Info(메모리 사이즈 limit): 전체 프로스세의 사이즈...
      • 프로세스가 실행중인 상태를 기억하고 구조화해서 저장
      • 프로세스의 상태 정보를 저장하는 데이터 구조로 운영체제가 관리

profile
매몰되지 않는 개발자가 되자
post-custom-banner

0개의 댓글