1. 프로세스는 프로세스에 의해서 만들어진다
- 부모 프로세스 (Parent Process) : 다른 프로세스를 생성한 프로세스
- 자식 프로세스 (Child Process) : 다른 프로세스에 의해 생성된 프로세스
- 형제 프로세스 (Sibling Process) : 부모가 동일한 프로세스들간의 관계
- 프로세스 트리 (Process Tree) : 부모 - 자식 관계를 트리형태로 나타낼 수 있음
2. 프로세스의 생성 순서
- OS : 부팅 후 OS가 메모리에 올라오고 Init(UNIX 기준 이름)이라는 최초의 프로세스를 생성함
- Init : Init이 생성된 이후에 스스로 다양한 프로세스를 생성한다.
- 그 이후 : Init의 자식 프로세스들이 또 자신들의 자식프로세스를 생성한다.
3. PID (Process Identifier)
- 프로세스의 주민등록번호와 같음 (Process ID)
- 주로 Unsigned Integer으로 가지며 생성된 순서대로 0부터 n까지의 번호를 가짐
- 자연스럽게 최초의 프로세스인 Init은 0번 프로세스가 됨.
- 42억개를 넘을일은 없지만 만약 넘어가면 종료된 프로세스로 인해 빈 번호를 받음
- 프로세스 아이디는 절대 중복되어서는 안됨 (한 프로세스가 종료되었다고해서 당겨지지 않음)
- 주민등록번호를 생각하면 쉬움. 앞사람이 죽었다고 내 주민등록번호가 당겨지지는 않음
- cf. PPID : Parent Process ID의 약자로 부모의 PID를 의미한다
4. Creation System Call (fork, exec)
- fork() : 새로운 프로세스를 만들어내는 System Call임 (포크처럼 생겨서 fork임)
- exec() : 만들어진 프로세스에 디스크에 있는 실행파일을 복사함
- 이외에도 많은 시스템 콜이 있지만 유닉스 시스템 프로그래밍 과목에서 더 배울 것임
5. 작업관리자를 켜보자
- 작업관리자를 보면 지금 우리의 컴퓨터에 어떤 프로세스들이 있는지 볼수 있다
- System Idle Process (시스템 유휴 프로세스)가 Windows에서는 Init 프로세스에 해당한다 (PID = 0)
- 이름, PID, Status(프로세스 상태, New, Ready, Running, Waiting, Terminated 등)을 확인 할 수 있고
- User name은 프로세스 주인 (시스템/유저), CPU는 사용한 CPU시간, Memory는 할당된 메모리등을 나태냄
- 위 그림은 리눅스 우분투 운영체제에서 ps (Process Status)를 호출했을 때 나타나는 화면이다.
- UID는 유저아이디 (0 : System, 1000 : User), PID는 프로세스 아이디, PPID는 부모 아이디 등을 나타냄
- PRI는 우선순위 (Priority)를 나타내고, Time은 사용한 CPU time을 나타내는 등 모습이 보인다.
6. Termination System Call
- exit() : 해당 프로세스가 종료되고, 가졌던 모든 자원(메모리, 파일, IO등)을 OS에게 반환함
- 모든 자원이 OS에게 반환되었기 때문에 프로세스가 종료되고 나서 OS가 다시 메모리 공간을
- 다른 프로세스에게 할당해줄 수 있고, 정당한 요청인 경우 파일도 다른 프로세스에게 할당해줌
7. Reference
'운영체제' 카테고리의 다른 글
쓰레드란 무엇인가? (0) | 2020.05.05 |
---|---|
CPU 스케줄링 (5) - 다중 큐 스케줄링 (0) | 2020.05.05 |
CPU 스케줄링 (4) - 라운드 로빈 스케줄링 (0) | 2020.03.06 |
CPU 스케줄링 (3) - 우선순위 스케줄링 (0) | 2020.03.05 |
CPU Scheduling (2) - SJF (Shortest Job First) (0) | 2020.03.05 |
CPU Scheduling (1) - FCFS (First Come, First Served) (0) | 2020.02.04 |
CPU Scheduling Criteria & Kinds (0) | 2020.02.04 |