초안 : 2023.05.10
보조기억장치에 데이터 형대로 저장되어 있는 프로그램은 실행되어 메인 메모리에 적재되는 순간 '프로세스'가 된다.
프로세스는 사용자가 보는 곳에서 실행되는 것도 있고 보이지 않는 곳에서 실행되는 것도 있는데
전자를 포그라운드 프로세스 후자를 백그라운드 프로세스 라고 한다.
백그라운드 프로세스 중에서도 사용자와 전혀 상호작용하지 않고 맡은 일만 수행하는 프로세스가 있는데 이를 UNIX 운영체제 에서는 '데몬(daemon)' 이라고 하고 윈도우 운영체제 에서는 '서비스(Service)'라고 한다.
수많은 프로세스들이 동시에 실행되지만, CPU 자원은 한정되어 있다. 따라서 프로세스들은 차례대로 돌아가면서 정해진 시간동안 CPU를 사용하고, 시간이 끝나면(타이머 인터럽트가 발생하면) 차례를 양보하고 다음 차례까지 기다린다.
이때 운영체제는 PCB(Process Control Block)라는 자료구조를 이용하여, 번갈아 실행되는 프로세스의 실행 순서를 관리하고 프로세스에 cpu를 비롯한 리소스를 배분한다.
PCB 는 프로세스 생성시에 메모리의 커널 영역에 생성되고 실행이 끝나면 폐기된다.
도대체 PCB 내에는 어떠한 정보들이 들어있을까?
PCB (Process Control Block)
PCB 에 담기는 대표적인 정보를 서술하면 아래와 같다.
- Process ID(PID) : 프로세스를 식별하기위해 부여하는 고유한 번호
- 레지스터 값 : 프로세스는 자신의 실행차례가 돌아오면, 이전까지 진행했던 작업을 이어서 실행하기 위해 사용했던 레지스터 값들을 모두 복원해야 한다. 즉, PCB 에는 PC(Program Counter)를 비롯한 레지스터 값들이 저장된다.
- 프로세스 상태 : 현재 프로세스가 어떤 상태인지 저장된다. 예를들어, 입출력 장치를 사용하기 위해 기다리고 있는 상태인지, cpu를 이용하고 있는 상태인지, cpu 를 이용하기 위해 기다리고 있는 상태인지가 해당한다.
- CPU 스케줄링 정보 : 프로세스가 어떤 순서로 CPU 를 할당 받을지에 대한 정보
- 메모리 관리 정보 : 프로세스마다 메모리에 저장된 위치가 다 다르므로 프로그램이 메모리의 어느 주소에 적재되어있는지에 대한 정보도 PCB 에 저장이 되어있다. (예를 들어 base register, limit register) 또한 '페이지 테이블' 에 대한 정보도 PCB 에 저장된다.
- 사용한 파일과 입출력장치 목록 : 프로세스가 실행과정에서 특정 입출력 장치나 파일을 사용하면 PCB 에 해당 내용이 명시된다.
위와 같은 PCB 정보를 이용하여 여러 프로세스들이 교대로 CPU를 이용할 때 이뤄지는 PCB 백업과정을 Context Switching(문맥 교환) 이라고 한다.
Context Switching (문맥교환)
CPU 할당 시간이 다 되어 A 프로세스에서 B 프로세스로 실행 순서가 넘어간다면, A 프로세스는 각종 레지스터값, 메모리 정보, 실행을 위해 열었던 파일 또는 입출력 장치 등과 같은 프로그램 실행과 관련된 모든 정보를 백업해야 한다. 그래야 다음 순서에 다시 작업을 재개할 수 있을테니 말이다.
이러한 중간 정보를 'Context(문맥)' 이라고 한다. 그리고 이러한 문맥은 해당 프로세스의 PCB 에 저장되어 있다.
CPU 스케줄링 뿐만아니라 인터럽트가 발생할때도 OS 는 해당 프로세스의 PCB 에 context 를 백업한다.
결론적으로 기존 프로세스의 context를 PCB 에 백업하고, 다음 프로세스를 실행하기 위해 context 를 PCB 로 부터 복구하여 실행하는 것을 context switching 이라고 한다.
Reference
- 혼자 공부하는 컴퓨터 구조 + 운영체제, 한빛미디어, 강민철
'SW > Linux (Kernel)' 카테고리의 다른 글
Linux From Scratch 개발 노트 3 - 계정 생성 (0) | 2024.08.28 |
---|---|
Linux From Scratch 개발 노트 2 - Host System (0) | 2024.08.27 |
Linux From Scratch 개발 노트 1 - Introduction (0) | 2024.08.26 |
메모리구조 (0) | 2023.05.19 |
운영체제와 커널(Kernel) - Dual Mode 란? (0) | 2023.04.15 |
댓글