프로그램은 실행되기 전까지는 단순히 보조기억장치에 저장되어있는 데이터 덩어리일 뿐이지만
이 보조기억장치에 저장된 프로그램을 실행하여 메모리에 적재하는 순간 프로세스가 된다.
큰 종류 2가지
1. Foreground process
- 사용자가 볼 수 있는 공간에서 실행되는 프로세스
- 일반적인 웹브라우저, 메모장, 워드프로세스, 게임 등
2. Background process
- 사용자가 볼 수 없는 공간에서 실행되는 프로세스
- 직접 상호작용은 가능한 백그라운드 프로세스 (데몬, 서비스)
- 상호작용은 하지 않고 그저 정해진 일만 수행하는 프로세스
프로세스 제어 블록
1) 모든 프로세스는 실행을 위해 CPU가 필요하다. 그러나 CPU자원은 한정 되어있다.
2) 따라서 프로세스들은 돌아가며 한정된 시간 만큼만 CPU를 사용한다.
- 자신의 차례에 정해진 시간만큼 CPU 사용
- 타이머 인터럽트가 발생하면 차례를 양보
(타임 아웃 인터럽트라고도 부르며, 클럭신호를 발생시키는 장치에서 주기적으로 발생하는 하드웨어 인터럽트의 한 종류이다.)
3) 빠르게 번갈아 수행되는 프로세스들을 관리하니 위한 자료구조가 PCB 프로세스 제어블록이다.
ㄱ) 프로세스 관련 정보를 저장하는 자료 구조
ㄴ) 마치 상품에 달린 태그와 같은 정보 (이 프로세스와 관련된 온갖정보를 저장하고 있는 자료구조)
ㄷ) PCB에 담기는 대표적인 정보
- 프로세스 ID (PID) : 특정 프로세스를 식별하기 위해 부여하는 고유한 번호이다.
- 레지스터 값 : 프로세스는 자신의 실행 차례가 오면 이전까지 사용한 레지스터 중간값을 모두 복원
(타이머 인터럽트가 발생하면 차례를 양보해야하기 때문에 레지스터 중간값을 모르면 처음부터 다시 해야하므로 기억해야한다.)
(프로그램 카운터, 스택포인터, 범용 레지스터 등등)
- 프로세스 상태 : 입출력 장치를 사용하기 위해 기다리는 상태, CPU를 사용하기 위해 기다리는 상태 등등
- CPU 스케쥴링 정보 : 프로세스마다 CPU는 보통 돌아가며 사용하는데, 언제 어떤 순서로 CPU를 할당 받아서 사용할지에 대한 정보도 담긴다.
- 메모리 정보 : 프로세스가 어느 주소에 저장되어 있는지에 대한 정보
(베이스레지스터, 한계레지스터 등 주소지정을 위한 레지스터값들이 메모리 정보로써 저장된다.)
(페이지 테이블 정보 -> 메모리 주소를 알 수 있는 정보, 이것이 중요하다.)
- 사용한 파일과 입출력장치 정보 : 할당된 입출력장치, 사용중인(열린) 파일 정보
** 운영체제는 커널영역에 적재된 PCB를 보고 프로세스를 관리한다.
문맥(context) 교환 : 실질적으로 프로세스는 어떻게 CPU를 돌아가며 사용하는가?
1) 타이머 인터럽트가 발생하여 A에서 B로 프로세스가 넘어간다면
2) 기존에 실행되던 프로세스 A는 지금까지의 중간 정보를 백업한다.
- 프로그램 카운터 등 각종 레지스터 값, 메모리 정보, 열었던 파일, 사용한 입출력장치 등
- 이러한 중간 정보를 문맥(context)라고 한며 다음 차례가 왔을때 실행을 재개하기 위한 정보이다.
3) 뒤이어 실행할 프로세스 B의 문맥을 복구한다.
이러한 과정을 Context Switching 문맥교환이라고 한다.
PCB는 커널영역에서 특정 프로세서에 달려있는 꼬리표라면
사용자 영역에서는 프로세스는 특정 영역을 나누어서 저장된다.
크게 4가지로 나뉜다.
코드영역(텍스트영역), 데이터 영역, 힙 영역, 스택 영역
코드영역
- 실행할 수 있는 코드, 기계어로 이루어진 명령어 저장
- 데이터가 아닌 CPU가 실행할 명령어가 담기기에 쓰기가 금지된 영역이다. (read - only)
데이터 영역
- 잠깐 썻다가 없앨 데이터가 아닌 프로그램이 실행되는 동안 유지할 데이터 저장
** 코드영역과 데이터 영역은 크기가 변하지 않는다. 정적 할당 영역이라고 부른다.
힙 영역
- 프로그램을 만드는 사용자, 즉 프로그래머가 직접 할당할 수 있는 저장공간이다.
- 직접 할당을 했다면 해제를 해주어야 한다. (언어에 따라 직접 해제할 수도 있고 자동으로 해제 하는경우도 있다.)
- 일반적으로 낮은주소 -> 높은주소로 할당한다.
스택 영역
- 데이터가 일시적으로 저장되는 공간
- 매개변수, 지역 변수
- 일반적으로 높은주소 -> 낮은주소로 할당한다.
** 힙, 스택 영역은 동적으로 크기가 변할 수 있다. 동적 할당 영역이라고 부른다.
'프로그래밍 > 컴퓨터구조 및 운영체제' 카테고리의 다른 글
스레드 알아보기 (1) | 2023.11.15 |
---|---|
프로세스 상태, 계층 구조, 생성 기법 (0) | 2023.11.14 |
운영체제 핵심 서비스 3가지(프로세스관리, 자원접근할당, 파일시스템) (0) | 2023.11.12 |
운영체제 큰 그림 (0) | 2023.11.12 |
운영체제를 알아야 하는 이유 (1) | 2023.11.09 |