프로세스
프로그램은 실행되기 전까지는 그저 보조기억장치에 있는 데이터 덩어리일 뿐이지만, 보조 기억 장치에 저장된 프로그램을 메모리에 적재하고 실행하는 순간 그 프로그램은 프로세스가 된다.
1. 프로세스의 위치
하나의 프로세스는 메모리의 사용자 영역에 크게 코드 영역, 데이터 영역, 힙 영역, 스택 영역으로 나뉘어 저장된다.
1.1 코드 영역 (텍스트 영역): CPU가 실행할 코드, 즉 기계어로 이루어진 명령어가 저장되는 공간
- 읽기 전용 공간
- 크기가 고정된 영역(정적 할당 영역)
1.2 데이터 영역: 프로그램이 실행되는 동안 유지할 데이터(전역 변수 등)가 저장되는 공간
- 크기가 고정된 영역(정적 할당 영역)
1.3 힙 영역: 프로그래머가 직접 할당할 수 있는 저장 공간
- 프로그래밍 과정에서 힙 영역에 메모리 공간을 할당했다면 언젠가는 해당 공간을 반환해야 한다.
- 메모리 공간을 반환하지 않는다면 할당한 공간은 메모리 내에 계속 남아 메모리 낭비(메모리 누수)를 초래한다.
- 메모리의 낮은 주소에서 높은 주소로 할당된다.
- 크기가 변할 수 있는 영역(동적 할당 영역)
1.4 스택 영역: 데이터(매개 변수, 지역 변수 등)를 일시적으로 저장하는 공간
- 메모리의 높은 주소에서 낮은 주소로 할당된다.
- 크기가 변할 수 있는 영역(동적 할당 영역)
2. 프로세스 제어 블록 (PCB): 프로세스와 관련된 정보를 저장하는 자료구조
2.1 생성 배경
- CPU 자원은 한정되어 있어 자신의 차례가 되면 정해진 시간만큼 CPU를 이용하고, 시간이 끝났음을 알리는 인터럽트(타이머 인터럽트)가 발생하면 자신의 차례를 양보하고 다음 차례가 올 때까지 기다린다.
- 운영체제는 빠르게 번갈아 수행되는 프로세스의 실행 순서를 관리하고, 프로세스에 CPU를 비롯한 자원을 배분하기 위해 PCB를 이용한다.
2.2 하는 일
- 프로세스 제어 블록에는 해당 프로세스를 식별하기 위해 꼭 필요한 정보들이 저장된다.
- 커널 영역에 생성되며 프로세스 생성 시에 만들어지고 실행이 끝나면 폐기된다.
2.3 저장되는 정보
- 프로세스 ID (PID)
- 레지스터 값
- 프로세스 상태
- CPU 스케줄링 정보
- 메모리 관리 정보
- 사용한 파일과 입출력장치 목록
3. 프로세스 상태
컴퓨터를 사용할 때 여러 프로세스들이 빠르게 번갈아 가면서 실행된다. 그 과정에서 하나의 프로세스는 여러 상태를 거치며 실행되고 운영체제는 프로세스의 상태를 PCB를 통해 인식하고 관리한다.
3.1 생성 상태: 프로세스를 생성 중인 상태
이제 막 메모리에 적재되어 PCB를 할당받은 상태이며 생성 상태를 거쳐 실행할 준비가 완료된 프로세스는 곧바로 실행되지 않고 준비 상태가 되어 CPU의 할당을 기다린다.
3.2 준비 상태: 당장이라도 CPU를 할당받아 실행할 수 있지만, 아직 자신의 차례가 아니기에 기다리고 있는 상태
3.3 실행 상태: CPU를 할당받아 일정 시간 동안 실행 중인 상태
프로세스가 할당된 시간을 모두 사용한다면(타이머 인터럽트가 발생하면) 다시 준비 상태가 되고, 실행 도중 입출력장치를 사용하여 입출력 장치의 작업이 끝날 때까지 기다려야 한다면 대기 상태가 된다.
3.4 대기 상태: 입출력장치의 작업을 기다리는 상태
3.5 종료 상태: 프로세스가 종료된 상태
4. 프로세스 계층 구조
프로세스는 실행 도중 시스템 호출을 통해 다른 프로세스를 생성할 수 있다.
최초의 프로세스가 자식 프로세스들을 생성하고, 생성된 자식 프로세스들이 새로운 프로세스들을 낳는 형식으로 여러 프로세스가 동시에 실행되어 하나의 계층 구조를 이룬다.
4.1 프로세스 종류
- 부모 프로세스: 새 프로세스를 생성한 프로세스
- 자식 프로세스: 부모 프로세스에 의해 생성된 프로세스
- 자식 프로세스는 부모 프로세스의 복사본이기 때문에 부모 프로세스의 자원들, 이를테면 메모리 내의 내용, 열린 파일의 목록 등이 자식 프로세스에 상속
- 부모 프로세스와 자식 프로세스는 엄연히 다른 프로세스이기에 각기 다른 PID 값과 메모리 위치를 가진다.
4.2 프로세스 생성 방법
- 부모가 자식 프로세스를 실행하며 프로세스 계층구조를 이루는 과정은 fork과 exec가 반복되는 과정이다.
- fork: 부모 프로세스가 자기 자신의 복사본을 자식 프로세스로 생성하는 시스템 호출
- exec: 만들어진 복사본(자식 프로세스)이 자신의 메모리 공간을 새로운 프로그램으로 덮어쓰는 시스템 호출
- exec를 호출하면 코드 영역과 데이터 영역의 내용이 실행할 프로그램의 내용으로 바뀌고, 나머지 영역은 초기화
'CS > 운영체제' 카테고리의 다른 글
[운영체제] CPU 스케줄링에 대하여...더보기 (0) | 2024.11.30 |
---|---|
[운영체제] 교착 상태 발생 조건과 해결 방법 (0) | 2024.11.29 |
[운영체제] 운영체제란 무엇일까? (0) | 2024.11.27 |