프로그램은 실행되기 전까지는 보조기억장치에 있는 "데이터 덩어리"일 뿐이지만 보조기억장치에 저장된 프로그램을 실행하기 위해 더블클릭 등 행동을 해서 메모리에 적재하고 실행하는 순간부터 그 프로그램은 "프로세스"가 된다.
= "프로세스 생성" 과정
프로세스 종류
1) 포그라운드 프로세스(foreground process)
: 사용자가 볼 수 있는 공간에서 실행되는 프로세스
ex) 게임, 메모장
2) 백그라운드 프로세스(background process)
: 사용자가 볼 수 없는 공간에서 실행되는 프로세스
2-1) 사용자와 직접 상호작용이 가능한 백그라운드 프로세스
2-2) 사용자와 상호작용하지 않고 그저 정해진 일만 수행하는 프로세스 ex) daemon, service
모든 프로세스는 실행을 위해 cpu가 필요하다. 그러나 cpu자원은 한정되어있다.
타이머 인터럽트: 클럭 신호를 발생시키는 장치에 의해서 주기적으로 발생하는 하드웨어 인터럽트의 한 종류
* 프로세스ID (=PID)
: 특정 프로세스를 식별하기위해 부여하는 고유한 번호 (학교의 학번, 회사의 사번)
* 레지스터 값
: 프로세스는 자신의 실행 차례가 오면 이전까지 사용한 레지스터 중간 값을 모두 복원 -> 실행 재게
ex) 프로그램 카운터, 스택 포인터 등
* 프로세스 상태
: 입출력 장치를 사용하기 위해 기다리는 상태,
CPU를 사용하기 위해 기다리는 상태, CPU 이용중인 상태 등
* CPU 스케줄링 정보
: 프로세스가 언제, 어떤 순서로 CPU를 할당받을지에 대한 정보
* 메모리 정보
: 프로세스가 어느 주소에 저장되어 있는지에 대한 정보, 페이지 테이블 정보
* 사용한 파일과 입출력장치 정보
: 할당된 입출력장치, 사용중인(열린) 파일 정보
Q) 한 프로세스(e.g. 프로세스A)에서 다른 프로세스 (e.g. 프로세스B) 로 실행 순서가 넘어가면?
* 문맥 교환 (context switch)
: 기존의 실행 중인 프로세스 문맥을 백업하고 새로운 프로세스 실행을 위해 문맥을 복구하는 과정, 여러 프로세스가 끊임없이 빠르게 번갈아 가며 실행되는 원리
* 문맥: 다음 차례가 왔을 때 실행을 재개하기 위한 정보 <-- 백업해둠.
* 코드 영역(= 텍스트 영역)
- 실행할 수 있는 코드, 기계어로 이루어진 명령어 저장
- 데이터가 아닌 CPU가 실행할 명령어가 담기기에 쓰기가 금지된 영역 (read-only)
* 데이터 영역
- 잠깐 썼다가 없앨 데이터가 아닌 프로그램이 실행되는 동안 유지할 데이터 저장
e.g. 전역 변수
정적 할당 영역 = 코드 + 데이터
* 힙 영역
: 프로그램을 만드는 사용자, 즉 프로그래머가 직접 할당할 수 있는 저장공간
-> 프로그래밍 과정에서 힙 영역에 할당한 메모리는 언젠가는 메모리 공간을 반환해야함.
요즘에는 가비지 컬렉션(garbage collection)을 통해 자동으로 반환함.
힙 영역에 할당한 메모리 공간을 반환하지않으면 메모리 낭비를 초래함. (= 메모리 누수 memory leak)
* 스택 영역
- 데이터가 일시적으로 저장되는 공간
- (데이터 영역에 담기는 값과는 달리) 잠깐 쓰다가 말 값들이 저장되는 공간
e.g. 매개 변수, 지역 변수
동적 할당 영역 = 힙 + 스택
'CONCEPT > OS' 카테고리의 다른 글
[OS] 멀티 프로세스, 멀티 스레드 (0) | 2025.03.14 |
---|---|
[OS] 프로세스 상태와 계층 구조, 프로세스 생성 기법 (0) | 2025.03.14 |
[OS] 커널, 이중 모드, 시스템 콜 (0) | 2025.02.22 |
[OS] 운영체제를 알아야 하는 이유 (0) | 2025.02.21 |
[OS] 운영체제 정의, 목적, 분류 (0) | 2021.05.17 |
댓글