실행 중인 프로그램을 프로세스라고 하며
프로그램은 실행되기 전까지는 보조기억장치에 있는 데이터 덩어리일 뿐이다.
1. 프로세스 직접 확인하기
- 포그라운드 프로세스 foreground process : 사용자가 볼 수 있는 공간에서 실행되는 프로세스
메모장, 웹 브라우저 등 - 백그라운드 프로세스 background process
1) 사용자와 직접 상호작용이 가능한 백그라운드 프로세스
2) 사용자와 상호작용하지 않고 정해진 일만 수행하는 프로세스
데몬, 서비스
2. 프로세스 제어 블록
모든 프로세스는 실행을 위해 CPU가 필요하다 하지만 CPU 자원은 한정되어 있다.
그래서 프로세스들은 돌아가며 한정된 시간만큼만 CPU를 이용한다. 이때 타이머 인터럽트가 발생하여 차례가 넘어간다.
빠르게 번갈아 가는 프로세스들을 관리해야 하기 때문에 프로세스 제어 블록 이하 PCB라고 부르는 자료구조를 사용한다.
- 프로세스 관련 정보를 저장하는 자료구조이다
- 상품에 달린 태그와 유사한 특성을 가진다.
- 프로세스 생성 시 커널 영역에 생성되며 종료 시 폐기된다.
PCB에 담기는 대표적인 정보는 아래와 같다.
- 프로세스 ID = PID : 특정 프로세스를 식별하기 위해 부여한다.
- 레지스터 값 : 프로세스는 자신의 실행 차례가 오면 이전까지 사용한 레지스터 중간 값을 모두 복원하고 실행을 재개한다.
- 프로세스 상태 : 입출력 장치 사용 대기, CPU 사용 대기, CPU 이용 중인 상태 등
- CPU 스케줄링 정보 : 프로세스가 언제 어떤 순서로 CPU를 할당받을지에 대한 정보
- 메모리 정보 : 프로세스가 어느 주소에 저장되어 있는지에 대한 정보, 페이지 테이블 정보
- 사용한 파일과 입출력장치 정보 : 할당된 입출력장치, 사용 중인 파일 정보
3. 문맥 교환 Context switch
한 프로세스 A에서 다른 프로세스 B로 실행 순서가 넘어가면?
1) 기존에 실행되던 프로세스 A는 지금까지의 중간 정보를 백업한다.
- 프로그램 카운터 등 각종 레지스터 값, 메모리 정보, 열었던 파일, 사용한 입출력장치 등 프로세스의 다음 차례가 왔을 때 실행을 재개하기 위한 정보
- 이러한 중간 정보를 문맥 Context라고 한다.
- 실행 문맥을 백업해 두면 언제든 해당 프로세스의 실행을 재개할 수 있다.
2) 뒤이어 실행할 프로세스 B의 문맥을 복구한다.
4. 프로세스의 메모리 영역
크게 코드 영역, 데이터 영역, 힙 영역, 스택 영역으로 나뉜다.
코드 영역과 데이터 영역을 하나로 묶어 정적 할당이라고 한다.
- 코드 영역 = 텍스트 영역
- 실행할 수 있는 코드, 기계어로 이루어진 명령어 저장
- 데이터가 아닌 CPU가 실행할 명령어가 담기기에 쓰기가 금지 된 영역 read only - 데이터 영역
- 잠깐 썼다가 없앨 데이터가 아닌 프로그램이 실행되는 동안 유지할 데이터 저장
- 전역 변수 : 프로그램이 실행되는 동안 유지되는 변수, 프로그램 전체에서 접근할 수 있는 변수
힙 영역과 스택 영역은 가변적이기 때문에 동적 할당이라고 한다.
- 힙 영역 : 프로그램을 만드는 사용자, 즉 프로그래머가 직접 할당할 수 있는 저장공간
- 스택 영역
- 데이터가 일시적으로 저장되는 공간
- 잠깐 사용하는 값들이 저장되는 공간
- 매개 변수, 지역 변수
힙 영역과 스택 영역의 크기는 가변적이다. 힙 영역은 낮은 주소에서 높은 주소로 할당하고 스택 영역은 높은 주소에서 낮은 주소로 할당한다.
'컴퓨터공학' 카테고리의 다른 글
23. 스레드 (0) | 2024.10.25 |
---|---|
22. 프로세스 상태와 계층 구조 (0) | 2024.10.24 |
20. 운영체제의 큰 그림 (0) | 2024.10.22 |
19. 운영체제를 알아야 하는 이유 (1) | 2024.10.18 |
18. 다양한 입출력방법 (0) | 2024.10.17 |