Process
- 정의
An entity that executes a given piece of code
정의를 간단히 보면 지정된 코드를 실행하는 엔티티라고 정의되어있다.
간단히 말해서 컴퓨터 프로그램을 텍스트 파일로 정의한 뒤 이 프로그램을 실행을 시키면 프로그램에서 언급한 모든 작업을 해주는것이 프로세스이다.
- Process
- 프로세스는 고유의 excution stack을 가지고 있다.
- 프로세스는 고유의 memory pages을 가지고 있다.
- 프로세스는 고유의 descriptors table을 가지고 있다.
- unique process ID (PID)
Fork()
- 정의
- 새 프로세스를 만드는 시스템 호출입니다. 새로 만들어진 프로세스는 몇 가지를 제외하고 부모 프로세스와 동일합니다.
- process creation
- fork() 시스템을 이용하여 자신이랑 동일한 child process를 생성한다
- 원래의 process는 parent process가 된다.
- child process는 독립된 id값을 가진다.
- 호출이 반환 될 때
- 부모 프로세스의 반환값은 자식프로세스의 PID(Process Id)값을 반환한다.
- 자식 프로세스는 ‘0’을 반환한다.
- 자식 프로세스의 호출에 실패하면 ‘-1’을 반환한다 (Memory 부족, Too many process 등)
Process Management
- Zombie process
- 프로세스가 종료가 될 때 자식 프로세스에서 부모 프로세스에게 SIGCHLD라는 신호를 보내면 부모 프로세스가 자식 프로세스의 자원 (data collection)을 삭제해준다.
- 하지만 예기치 못하게 자식 프로세스가 죽어버리면 데이터를 반환하지 못하고 자식 프로세스는 죽어버렸기 때문에 시스템에서는 이를 재사용할 수 없다. 이와 같은 현상을 Zombie process라고 한다.
- Orphan Process
- 영어를 그대로 해석을 해보면 고아 프로세스이다. 이 뜻 그대로 만약 자식 프로세스가 죽기 전에 부모 프로세스가 먼저 죽어버리면 자식 프로세스가 SIGCHLD라는 신호를 보내도 부모 프로세스가 없기 때문에 clean up을 할 수가 없어 Zombie process 가 될 수가 있다.
- 해결책은 자식 프로세스를 다른 부모 프로세스에게 입양을 시키면 된다.
- 보통 프로세스가 시작하는 init process에 자식 프로세스를 추가를 하여 해결한다.
wait() System Call
- 만약 자식 프로세스가 SIGCHLD 신호를 보낼때 부모 프로세스 에서는 Wait 시스템 콜을 사용하여 clean up 을 한다.
Process State
- Process States
- New
- Ready
- Running
- Waiting
- Terminated
- New : 부모 프로세스가 자식 프로세스를 생성한다.
- Admitted : Os kernel에서 process management에 새로 생긴 process를 등록한다.
- Ready : 실행이 가능한 프로세스 (cpu에 할당되어서 실행이 되고 있는 상태는 아니다)
- Scheduler dispatch : os에서 어떤 조건에 의하여 running 될 process를 고른다.
- Running : 실행이 되고 있는 프로세스 (CPU를 사용 중)
- Interrupt : Run중인 프로세스를 ready state로 보내는 것
- Waiting : 외부에 있는 I/O에 작업을 한다면 cpu의 작업 속도에 비하여 엄청나게 느리기 때문에 cpu의 자원이 낭비되게 된다 그렇기 때문에 I/O 작업 중인 프로세스를 Waiting state로 보내고 다른 프로세스가 Run state로 들어오게 되고 Waiting state에 있는 I/O 작업이 끝나면 Ready state로 돌아와 다시 차례를 기다린다.
- Terminated : Running state에서 작업이 완료된 프로세스를 종료한다.
Process Control Block
프로세스가 여러 개가 존재하면 Os kernel 부분에서 process management에서 관리를 하기 위하여 Process를 생성할 때 정보가 담긴 PCB를 생성한다.
- Process ID : 해당 프로세스 ID
- Parent PID : 해당 프로세스 부모 ID
- Next process block : PCB블록들은 LinkedList의 구조처럼 다음 PCB의 주소 값의 정보를 가지고 있다.
- Process state : 프로세스의 현재 상태
- TCBs : 각 스레드의 control block
- CPU information : 레지스터 값, 메모리 값 저장
- CPU register contents
- Program counter
- Memory-management information
- Additional information
- I/O status
Context Switcing
Context Switcing 이란 CPU 가 하나인데 여러 개의 프로세스를 실행하는 것처럼 하고 싶을 때 CPU를 하나를 공유를 하며 여러 개의 프로세스가 시간으로 나누어 순서대로 바꾸어 가면서 프로세스가 연속으로 동작하는 것처럼 보이게 하는 기술 (소프트웨어적)이다.
os kernel에서 관리를 한다.
Process 와 Threads
- Process (protection)
- 각각의 프로세스는 독립된 메모리 공간과 활동영역을 보장을 받는다 (공유 X)
- Threads (concurrency)
- 하나의 코드
- 프로세스의 내부에 존재하며 프로세스보다 작은 개념이라고 생각하면 된다.
- 하나의 프로세스에 한 개의 스레드가 존재할 수도 있고 여러 개의 스레드가 존재할 수 있다.
- 하나의 프로세스 안의 스레드들은 address space와 resource를 공유한다.
- Hyper-threads
- 하드웨어로 context switching을 도와주는 것
- OverHead를 줄일 수 있다
- Single and multi - threads process의 비교
- 멀티 스레드 간의 context switching이 되어야 한다 그렇기 때문에 thread 마다 register와 stack의 정보가 필요하다.
Examples of Multi-Threaded Program
- Embedded systems
- Server with multi-core processor
- Network Servers
참고한 사이트
http://www.kocw.net/home/search/kemView.dokemId=1223639&ar=relateCourse
https://www.geeksforgeeks.org/difference-between-process-and-thread/