Process의 context switching
우리는 컴퓨터가 다양한 프로그램을 동시에 실행시켜주는 것처럼 느낀다.
엄밀히 따지면 동시 실행이 아니다.
CPU가 매우 빠른 속도로 프로세스들을 context switching을 시켜주는데 우리는 이 switching 순간을 절대로 느낄 수 없다.
Context란?
프로세스가 수행되기 위해서 필요한 정보들이라고 이해하면 된다.
Context는 주로 커널 내부에 존재하는 PCB(Process Control Block)에 저장되어 있다. (PCB는 linked list로 구성됨)
우리가 프로그램을 구동시키기 위해서는 프로세스를 생성해야 한다.
프로세스가 생성되면서 해당 프로세스만의 메모리 공간을 할당 받고
code, stack, heap, BSS 공간에 적절한 정보들이 저장된다.
저장된 정보들에 대한 특징을 '프로세스의 메타데이터'라고 하는데 이 메타데이터가
커널 내부에 있는 PCB에 저장된다.
CPU는 PCB에 있는 프로세스의 정보들을 읽어온 후 해당 프로세스를 실행한다.
프로세스가 실행되는 과정을 알아보았다.
프로세스가 종료될때는 linked list로 이어진 해당 PCB를 제거하면 된다.
그럼 실행중인 프로세스가 다른 프로세스로 교체(context switching)될때는 어떤 일이 발생하는가?
I/O 인터럽트가 발생하거나 CPU의 time slice를 모두 사용한 경우에 context switching이 발생한다.
만약 현재 프로세스가 CPU의 time slice를 모두 사용했다면 현재 프로세스의 정보들을 PCB에 저장해 놓고, 다음에 수행할 프로세스의 정보를 PCB에서 가져와서 수행한다.
context switching이 발생하면 현재 실행하는 프로세스의 정보를 모두 교체해야 하기 때문에 Overhead(과부하, 여기서는 추가적으로 소모되는 시간을 의미) 가 크게 발생한다.
따라서 다음에 사용될 프로세스의 순서를 효율적으로 정해서 context swiching을 남발하지 않기 위한 정책이 필요함을 생각해 볼 수 있다.
'CS > OS' 카테고리의 다른 글
[OS] Scheduling #1 (0) | 2021.07.09 |
---|---|
[OS] Thread #1 (0) | 2021.07.08 |
[OS] Process #2 (0) | 2021.07.06 |
[OS] Process #1 (0) | 2021.07.05 |
[운영체제] Semaphore (0) | 2021.06.13 |