1. 프로세스 (Process)
ㅇ 실행중인 프로그램
- 메모리에 올려져, 실행중인 프로그램
ㅇ 운영체제 커널이 정의하는 추상적인 존재
- 실행중인 프로그램 다수가 동시 운용될 때,
- 이들 간을 개념적으로 분리 취급할 수 있게 하고,
- 그 각각에 컴퓨팅 자원을 할당코자 정의되는 추상적인 존재
2. 프로세스, 프로그램 차이
ㅇ 프로그램 : 저장장치 내 파일로 존재하는 정적,수동적 개체
- 실행시 프로세스에 관한 광범위한 정보를 갖으며, 디스크에 저장된 수동적인 파일
ㅇ 프로세스 : 동작중인 능동적인 개체
- 프로그램 카운터 같은 관련 자원의 조합을 갖는 능동적인 존재
- 운영체제로부터 추가적인 자원 할당을 받을 수 있음
3. 프로세스의 특징
ㅇ 시분할 작업의 단위
- 시분할 시스템에서 볼 때, 분할 시간 마다 그 처리 대상이 되는 작업 단위
ㅇ 자신의 일을 수행키 위해, 자원을 필요로 함
- CPU 시간, 메모리, 입출력 장치 등
- 프로세스 종료시, 운영체제는 재사용 가능 자원을 회수하게 됨
ㅇ 프로세스별로 메모리 공간이 격리됨
- 각 프로세스가 독립된 메모리 공간을 가지도록 보장되야 함
. 즉, 프로세스는 타 프로세스,커널로부터 격리되어, 이들 메모리에 읽기/쓰기가 제한됨
- 통상, 2개 레지스터(base,limit)를 사용
ㅇ 하나의 프로그램이 여러 프로세스를 만들 수 있고, 제어권 전달 등이 있게됨
- 단일 프로그램이 여러 프로세스를 생성 가능 ☞ fork 시스템호출 참조
. 즉, 여러 프로세스들이 동일 프로그램으로 실행 가능
ㅇ 병행 실행이 가능 ☞ 병행 프로세스 참조
- 이때, 프로세스 간 통신 필요 ☞ IPC 참조
ㅇ 프로세스 내 스레드
- 현대 운영체제는, 단일 프로세스가 다수 실행 스레드들을 갖도록 허용
4. 프로세스의 구성 및 표현
ㅇ 프로세스의 구성
- 저마다 분리된 메모리 공간으로 구성됨
. 크게, 사용자 메모리 공간과 커널 메모리 공간으로 구분됨
- 사용자 메모리 공간
. 프로그램의 실행 코드,변수,상수 등의 데이터를 담고있는 과,
- 커널 메모리 공간
. 프로세스 상태 정보의 관리
ㅇ 프로세스의 표현 : 프로세스 제어 블록 (Process Control Block)
- 프로세스 상태 : new, ready, running, waiting, halting 등
- 프로그램 카운터 : 다음 실행할 명령어 주소
- 레지스터들
- 스케줄링 정보
- 메모리 관리 정보 등
5. 프로세스의 스케줄링
ㅇ 운영체제는,
- 한 프로세스를 실행 가능할 때까지 실행하고,
- I/O 작업 처럼 CPU 자원을 필요로 하지 않을 때는, 다른 프로세스를 실행케 하여,
- CPU 사용 효율을 높이게 함 ☞ 다중 프로세스 환경 참조
ㅇ 어느 한 순간에, 다수의 프로세스들이 메모리 내에 유지되면서 병행 실행됨
6. 개별 프로세스의 특징
ㅇ 부모 프로세스가 있게됨
- 자식 프로세스가 종료되면, 그 사실이 부모 프로세스에게 알려지게됨
- 한편, 커널은, 스스로가 자신의 부모 프로세스임
ㅇ 소유자가 있음
- 특정 사용자 권한으로 실행되고,
- 취급 파일에 대한 퍼미션(접근권한)에 따라 읽기,쓰기 등 권한을 달리함
ㅇ 통상, 프로세스별 식별을 위해 16 비트 PID를 사용 ☞ 아래 7.항 참조
ㅇ 커널에 의해 관리됨
7. 개별 프로세스의 관리를 위한 정보들
ㅇ 프로세스 연관 각종 ID들
ㅇ 가상 메모리 테이블
ㅇ 열린 파일 디스크립터 테이블
ㅇ 시그널 전달/처리 정보
ㅇ 프로세스 자원 사용량 및 한도
ㅇ 현재 작업 디렉토리 등
8. 개별 프로세스의 메모리 구성
※ ☞ 프로세스 메모리 참조
- 텍스트 영역, 데이터 영역, 힙 영역, 스택 영역 등
9. [Unix/Linux] 개별 프로세스의 식별 및 복제
ㅇ (식별) ☞ 프로세스 식별 ID 참조
- (Process ID, PID), (Parent Process ID, PPID)
ㅇ (복제) 개별 프로세스의 복제 (시스템콜에 의함)
- fork, exec, spawn