What is a Process?
- 프로세스란 실행 중인 프로그램을 말한다.
- 한 프로그램이 여러 processes가 될 수 있다.
- 각각의 프로세스는 고유한 process ID(PID)가 있다.
From Program to Process
각각의 process는 고유한 address space를 가진다.
프로세스의 메모리 배치는 일반적으로 다음과 같은 section으로 구분된다. 각 섹션에는 다음이 포함된다.
- Text section : 실행 코드
- Program Counter($PC)라는 레지스터는 현재 실행 중인 명령어를 가리킵니다.
- Data section : 전역 변수
- Heap section : 프로그램 실행 중(run time)에 동적으로 할당되는 메모리
- Stack section : 함수를 호출할 때 임시 데이터 저장장소(예: 함수 매개변수, 복귀 주소 및 로컬 변수)
- Stack Pointer($SP)라는 레지스터는 함수의 변수와 리턴 주소를 저장하는 stack을 관리한다.
States of Process
프로세스는 실행되면서 그 상태가 변한다. 프로세스의 상태는 부분적으로 그 프로세스의 현재 활동에 따라서 정의된다. 프로세스는 다음 상태 중 하나에 있게 된다.
- new : 프로세스가 생성 중이다.
- ready : 프로세스가 processor에 할당되기를 기다린다.
- running : 명령어들이 실행되고 있다.
- blocked : 프로세스가 어떤 event(입출력 완료 등)가 일어나기를 기다린다.
- exited : 프로세스의 실행이 종료되었다.
Process Hierarchy
- 실행되는 동안 프로세스는 여러 개의 새로운 프로세스들을 생성할 수 있다.
- 새로운 프로세스들은 각각 다시 다른 프로세스들을 생성할 수 있으며, 그 결과 tree를 형성한다.
- 같은 parent process를 가지는 children을 Siblings라고 한다.
Process Creation
현대 운영체제들은 유일한 pid(프로세스 식별자)를 사용하여 프로세스를 구분하는데, 이 pid는 보통 정수이다.
pid는 시스템의 각 프로세스에 고유한 값을 가지도록 할당된다. 이 pid를 통하여 kernal이 유지하고 있는 프로세스의 다양한 attribute에 접근하기 위한 index로 사용된다.
새로운 process는 fork() system call로 생성된다.
- fork()
- 새로운 process는 원래 프로세스의 address space의 복사본으로 구성된다.
- fork() 함수의 return value
- fork() 실패시 부모 프로세스는 -1을 return 받는다.
- 부모 프로세스는 자식 프로세스의 식별자를 return받는다.
- 자식 프로세스는 '0'을 return 받는다.
Replace Process Image
fork() system call 다음에 두 프로세스(부모와 자식)중 한 프로세스가 exec() system call을 사용하여 자신의 메모리 공간을 새로운 프로그램으로 교체한다. exec() system call은 이진파일을 메모리로 load하고(이때 exec() system call을 포함하는 원래의 프로그램의 메모리 image를 파괴한다)그 프로그램을 실행한다.
- exec() 계열 함수들을 통해 replace
- exec()을 하고나면 기존 address space는 모두 버려지고 새롭게 다시 시작.
Process Termination
프로세스가 exit() system call을 사용하여 운영체제에 자신의 삭제를 요청하면 종료한다.
- 이 때, 프로세스는 wait() system call을 통해 자신을 기다리고 있는 부모 프로세스에게 status data를 return할 수 있다.
- 프로세스의 모든 자원이 할당 해제되고 운영체제로 반납된다.
parent process에서 wait() 함수는 child process의 return 값을 받기 전까지 계속 blocked 상태에 있다.
child가 죽었지만 부모 프로세스가 wait()로 return 값을 회수하지 않으면 Zombie process가 된다.
parent가 wait()를 호출하지 않고 child보다 먼저 죽는 경우, tree구조에서 parent가 먼저 죽었으므로 연결이 끊기게 된다. 이때 남겨진 child process들을 Orphan process라고 부른다.
Implementing Processes
각 프로세스는 운영체제에서 PCB(Process control block 또는 task control block)에 의해 표현된다.
OS는 PCB를 활용해 process를 스케쥴링하거나 관리한다.
PCB는 특정 프로세스와 연관된 여러 정보를 수록하며, 다음과 같은 것들을 포함한다.
- process state : new, running, ready ..etc
- process number : PID, PPID ..
- program counter : $PC는다음에 실행할 명령어의 주소를 가리킨다.
- CPU registers
- CPU scheduling information
- Memory-management information
- Accounting information
- I/O status information
'운영체제' 카테고리의 다른 글
06. Process Scheduling(2) (0) | 2024.04.24 |
---|---|
05. Process Scheduling (0) | 2024.04.24 |
04. Inter-Process Communication (0) | 2024.04.18 |
03. System Call (10) | 2024.04.03 |
01. Introduction to Operating Systems (0) | 2024.04.02 |