PCB 와 Context Switching

HEETAE HEO·2022년 6월 30일
0
post-thumbnail

Process Metadata

프로세스는 컴퓨터에서 연속적으로 실행되고 있는 동적인 상태의 컴퓨터 프로그램, 즉 하나의 작업 단위이다. 프로세스는 여러 가지 특징을 가지고 있는데, 이러한 특징을 Process Metadata라고 합니다.

proces Metadata

  • process-id : 새로운 프로세스에 시스템이 할당해주는 고유 id
  • 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(Process Control Block)

프로세스 메타데이터들을 저장해 놓는 곳입니다. 하나의 PCB안에는 하나의 프로세스의 정보가 담겨있습니다.

프로그램 실행 -> 프로세스 생성 -> 프로세스 주소 공간에(코드, 데이터, 스택) 생성 -> 이 프로세스의 메타 데이터들이 PCB에 저장

  • Process State : 프로세스의 상태(Create,Ready,Running,Block,terminated)
  • Process Counter : 다음 실행할 명령어의 주소값
  • CPU Register : accumulator, index register, stack pointer, general purpose registers

PCB의 필요성과 관리

프로세스가 여러 개 생성될 때, 즉 여러 개의 프로그램이 실행되고 있을 때, CPU는 프로세스의 상태에 따라 교체 작업을 수행합니다.

교체 작업: Interrupt 발생 -> 할당 받은 프로세스 Waiting 상태로 변경 -> 다른 프로세스를 Running 상태로 변경

따라서, 수행 대기 중인 프로세스에 관한 저장 값을 PCB에 저장해 두어야합니다.
PCB는 LinkedList 방식으로 관리되어 삽입과 삭제가 용이합니다. 따라서 프로세스가 생성될 때 PCB List Head에 PCB가 삽입되고 프로세스가 완료되면 PCB가 삭제되는 식으로 관리됩니다.

Context Switchig

수행 중인 Task(Process/Thread)가 변경될 때 CPU의 레지스터 정보가 변경되는 것을 뜻한다. 즉 이전 프로세스의 상태를 PCB에 보관하고, 다른 프로세스의 정보를 PCB에서 읽아와 CPU 레지스터에 적재하는 과정입니다.

다양한 사람들이 동시에 사용하는 것처럼 하기 위해서 Context Switching이 필요하게 되었습니다.

  • 컴퓨터 멀티태스킹을 통해 빠른 반응속도로 응답가능합니다.
  • 빠르게 Task를 바꾸면서 실행하기에 사람은 실시간처리가 되는 것처럼 보입니다.
  • CPU가 Task를 바꿔가며 실행하기 위해 Context Switching이 필요하게 되었습니다.

Context Switching은 언제 발생하는가?

실행되고 있는 프로세스가 빠지고 새로운 프로세스가 CPU를 받을 때 발생합니다. CPU 스케줄링에 의해 할당된 작업 시간에 끝나 TimeOut이 발생하거나, 프로세스의 작업이 끝났거나, 실행 중이던 프로세스가 입출력 요청을 하는 등의 이유로 interrupt가 발생했을 때 Context Switching이 이루어진다.

Context Switching이 왜 필요한가?

CPU는 한 번에 하나의 프로세스만 수행할 수 있지만 실생활에서 우리는 여러 개의 프로세스를 동시에 수행하는 것처럼 보이게 하기 위해서 Context Switching을 사용합니다.

Context Switching Cost

Context Switching이 발생하게 되며 다음과 같은 Cost가 소용됩니다.

  1. Cache 초기화ㅣ

  2. Memory Mapping 초기화

  3. 메모리의 접근을 위해서 Kernel은 항상 실행되어야 합니다.

Context Swiching과 시간 할당량

프로세스들의 시간 할당량은 시스템 성능의 중요한 역할을 합니다. 시간 할당량이 적을 수록 사용자 입장에서는 여러 개는 프로세스가 거의 동시에 수행되는 느낌을 갖지만 인터럽트의 수와 문맥 교환의 수가 늘어납니다. 프로세스의 실행을 위한 부가적인 활동을 오버헤드(간접 부담 비용)이라고 하는데, 이 또한 문맥 교환 수와 같이 늘어나게 됩니다.

  • 시간 할당량이 적어지면 : 문맥 교환 수, 인터럽트 횟수, 오버헤드가 증가하지만 여러 개의 프로세스가 동시에 수행되는 느낌을 갖습니다.

  • 시간 할당량이 커지면 : 문맥 교환 수, 인터 럽트 횟수, 오버헤드가 감소하지만 여러 개의 프로세스가 동시에 수행되는 느낌을 갖지 못합니다.

Process vs Thread

Process가 Context Switching이 쓰이는 비용이 Thread보다 많이 듭니다. Thread는 Stack 영역을 제외한 모든 메모리를 공유하기에 Context Switching 발생 시 Stack 부분만 동작하면 되기 때문입니다.

profile
Android 개발 잘하고 싶어요!!!

0개의 댓글