프로세스의 종류
포그라운드 프로세스 (foreground process)
사용자가 볼 수 있는 공간에서 실행되는 프로세스
백그라운드 프로세스 (background process)
사용자가 볼 수 없는 공간에서 실행되는 프로세스
1. 사용자와 직접 상호작용이 가능한 백그라운드 프로세스
2. 사용자와 상호작용하지 않고 그저 정해진 일만 수행하는 프로세스: 데몬(daemon), 서비스(service)
프로세스 제어 블록 (PCB)
프로세스들은 돌아가며 한정된 시간만큼만 CPU를 이용
자신의 차례에 정해진 시간만큼 CPU 이용
타이머 인터럽트(클럭 신호를 발생시키는 장치에 의해 주기적으로 발생하는 인터럽트)가
발생하면 차례를 양보한다
빠르게 번갈아 수행되는 프로세스들을 관리하는데
사용하는 자료구조가 프로세스 제어 블록(PCB)
마치 상품에 달린 태그와 같은 정보로
프로세스 생성 시 커널 영역에 PCB가 생성되고
프로세스가 완전히 종료되면 폐기한다
PCB에 담기는 대표적인 정보
프로세스 ID(PID)
레지스터 값
프로세스 상태
CPU 스케줄링 정보
메모리 정보
사용한 파일과 입출력장치 정보
이처럼 운영체제는 커널 영역에 적재된 PCB를 보고 프로세스를 관리한다
- 프로세스 ID(PID)
특정 프로세스를 식별하기 위해 부여하는 고유번호
- 레지스터 값
프로세스는 자신의 실행 차례가 오면 이전까지 사용한 레지스터 중간 값을 모두 복원 후 실행 재개
ex. 프로그램 카운터, 스택 포인터...
- 프로세스 상태
다음 편에서 다룰 예정
입출력 장치를 사용하기 위해 기다리는 상태, CPU를 사용하기 위해 기다리는 상태,
CPU 이용 중인 상태...
- CPU 스케줄링 정보
프로세스가 언제, 어떤 순서로 CPU를 할당받을지에 대한 정보
- 메모리 정보
프로세스가 어느 주소에 저장되어 있는지에 대한 정보
페이지 테이블 정보 (지금으로서는 '메모리 주소를 알 수 있는 정보가 담기는구나' 정도로)
- 사용한 파일과 입출력장치 정보
할당된 입출력장치, 사용 중인(열린) 파일 정보
문맥 교환 (context switch)
CPU는 한정되어있고 프로세스들은 모두 CPU를 원한다
그렇기에 CPU를 돌아가면서 사용하게 되는 부분이 실질적으로 어떻게 이루어지는 지에 대한 내용
A 프로세스에서 B 프로세스로 실행 순서가 넘어간다면?
기존에 실행되던 프로세스 A는 지금까지의 중간 정보를 백업
프로그램 카운터 등 각종 레지스터 값, 메모리 정보, 열었던 파일, 사용한 입출력장치 등
이러한 중간 정보를 문맥(context)라고 부르고
다음 차례가 왔을 때 실행을 재개하기 위한 정보를 의미한다
따라서, 실행 문맥을 백업해두면 언제든 해당 프로세스의 실행을 재개할 수 있다
이처럼 기존에 실행되던 프로세스 A는 지금까지의 context를 백업하고
뒤이어 실행할 프로세스 B의 context를 복구하는 이러한 과정을 문맥 교환(context switch)이라고 한다
다시 정리해서,
문맥 교환은 기존의 실행 중인 프로세스 문맥을 백업하고
새로운 프로세스 실행을 위해 문맥을 복구하는 과정을 문맥 교환(context switch)이라고 한다
여러 프로세스가 끊임없이 빠르게 번갈아 가며 실행되는 원리
프로세스의 메모리 영역
커널 영역에서는 PCB를 통해 프로세스를 관리하는데
사용자 영역에서는?

코드 영역 (= 텍스트 영역)
실행할 수 있는 코드, 기계어로 이루어진 명령어 저장
데이터가 아닌 CPU가 실행할 명령어가 담기기에 쓰기가 금지된 영역 (read-only)
데이터 영역
잠깐 썼다가 없앨 데이터가 아닌 프로그램이 실행되는 동안 유지할 데이터 저장
e.g. 전역 변수
+ 코드 영역과 데이터 영역을 합쳐 정적 할당 영역이라고 지칭
힙 영역
프로그램을 만드는 사용자, 즉 프로그래머가 직접 할당할 수 있는 저장공간
스택 영역
데이터가 일시적으로 저장되는 공간
(데이터 영역에 담기는 값과는 달리) 잠깐 쓰다가 말 값들이 저장되는 공간
e.g. 매개 변수, 지역 변수
+ 힙 영역과 스택 영역을 합쳐 동적 할당 영역이라고 지칭
힙 영역과 스택 영역
힙 영역과 스택 영역의 크기는 가변적이다
일반적으로 힙 영역은 낮은 주소 > 높은 주소로 할당
일반적으로 스택 영역은 높은 주소 > 낮은 주소로 할당

'CS > [혼자 공부하는] 운영체제' 카테고리의 다른 글
3-1] CPU 스케줄링: CPU 스케줄링 개요 (0) | 2023.06.05 |
---|---|
2-3] 프로세스와 스레드: 스레드 (0) | 2023.06.05 |
2-2] 프로세스와 스레드: 프로세스 상태와 계층 구조 (0) | 2023.06.04 |
1-2] 운영체제 기초: 운영체제의 큰 그림 (0) | 2023.06.03 |
1-1] 운영체제 기초: 운영체제를 알아야 하는 이유 (0) | 2023.06.03 |