반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- boj
- kubernetes
- NGINX
- 부스트코스
- 데브옵스
- centOS
- linux
- AWS
- docker
- os
- 도커 명령어
- devops
- Python
- 쿠버네티스
- 도커 컨테이너
- k8s
- 인프라
- Swift
- 컨테이너
- 네트워크
- C++
- swift 클로저
- 도커 이미지
- centOS7
- ios
- 도커
- 프로세스
- 운영체제
- 리눅스
- 클라우드
Archives
- Today
- Total
귀염둥이의 메모
[OS] Process Management 본문
반응형
프로세스 생성 (Process Creation)
부모 프로세스(Parent process)가 자식 프로세스(children process) 생성
프로세스의 트리(계층 구조) 형성
프로세스는 자원을 필요로 함
- 운영체제로부터 받는다
- 부모와 공유한다
자원의 공유
- 부모와 자식이 모든 자원을 공유하는 모델
- 일부를 공유하는 모델
- 전혀 공유하지 않는 모델
수행(Excution)
- 부모와 자식은 공존하며 수행되는 모델
- 자식이 종료(terminate)될 때까지 부모가 기다리는(wait) 모델
주소 공간(Address space)
- 자식은 부모의 공간을 복사함 (binary and OS data)
- 자식은 그 공간에 새로운 프로그램을 올림
UNIX의 예시
- fork 시스템 콜이 새로운 프로세스를 생성
- 부모를 그대로 복사 (OS data except PID + binary)
- 주소 공간 할당
- fork 다음에 이어지는 exec 시스템 콜을 통해 새로운 프로그램을 메모리에 올림
- 자식 프로세스를 만들지 않고 exec을 하면 완전히 새로운 프로세스로 바뀔 수 있다.
- 프로세스가 다른 프로세스를 직접 생성하지 않고 운영체제를 통해서만 생성가능하다
프로세스 종료(Process Termination)
프로세스가 마지막 명령을 수행한 후 운영체제에게 이를 알려줌(exit)
- 자식이 부모에게 output data를 보냄 (via wait)
- 프로세스의 각종 자원들이 운영체제에게 반납됨
부모 프로세스가 자식의 수행을 종료시킴(abort)
- 자식이 할당 자원의 한계치를 넘어섬
- 자식에게 할당된 task가 더 이상 필요하지 않음
- 부모가 종료(exit)되는 경우
- 운영체제는 부모 프로세스가 종료되는 경우 자식이 더 이상 수행되도록 두지 않는다.
- 단계적인 종료
fork() 시스템 콜
A process is created by the fork() system call
: create a new address space that is a duplicate of the counter
fork를 통한 복제 생성은 부모 프로세스의 문맥(context)를 그대로 복사한다. 부모 프로세스 입장에서는 program counter가 fork가 끝난 시점의 문맥에 이르렀기 때문에 자식 프로세스도 부모 프로세스와 같은 시점에서 시작을 하게 된다.
fork를 통해 프로세스를 생성 했을 때 생길 수 있는 문제점
- 같은 부분부터 실행하기 때문에 자식 프로세스가 부모 프로세스를 복제본 취급할 수 있음
- 부모와 똑같이 만들어지기 때문에 세상에 있는 프로그램들은 모두 똑같은 제어 흐름을 따라야 할 수 있음
이를 해결하기 위해 부모와 자식 프로세스의 결과 값(return value)을 다르게 한다
부모 프로세스는 fork의 결과 값 (pid = 자식 프로세스의 번호)을 '양수'로 얻음
자식 프로세스는 fork 결과 값으로 0을 얻는다. 이를 통해서 부모, 자식 구분이 가능하고 결과 값(pid)를 통해서 부모와 자식간에 다른 task를 시킬 수 있음
exec() 시스템 콜
A process can execute a different program by the exec() system call
: replaces the memory image of the caller with a new program
wait() 시스템 콜
프로세스 A가 wait() 시스템 콜을 호출하면 커널은 child가 종료될 때까지 프로세스 A를 sleep 시킨다 (block 상태)
child process가 종료되면 커널은 프로세스 A를 깨준다 (ready 상태)
예시)
Linux terminal 에서 명령 입력 후 엔터를 누르면 명령이 실행(자식 프로세스 형태로 실행)되고 그 명령이 끝날 때까지 terminal에 커서가 없다가 명령이 긑나면 커서가 다음줄에 깜빡이고 있음
exit() 시스템 콜
프로세스의 종료
- 자발적 종료
- 마지막 statement 수행 후 exit() 시스템 콜을 통해 종료
- 프로그램에 명시적으로 적어주지 않아도 main 함수가 return 되는 위치에 컴파일러가 자동으로 넣어줌
- 비자발적 종료 (부모 프로세스가 자식 프로세스를 강제 종료시킴)
- 자식 프로세스가 한계치를 넘어서는 자원을 요청할 때
- 자식에게 할당된 task가 더 이상 필요하지 않을 때
프로세스 간 협력
- 독립적 프로세스(Independent process)
- 프로세스는 각자의 주소 공간을 가지고 수행됨, 원칙적으로 하나의 프로세스는 다른 프로세스의 수행에 영향을 미치지 못함
- 협력 프로세스(Cooperating process)
- 프로세스 협력 메커니즘을 통해 하나의 프로세스가 다른 프로세스의 수행에 영향을 미칠 수 있음
- 프로세스 간 협력 메커니즘(IPC: Interprocess Communication)
- 메시지를 전달하는 방법 : Message Passing (커널을 통해 메시지 전달)
- 주소 공간을 공유하는 방법 : Shared Memory (서로 다른 프로세스 간에 일부 주소 공간을 공유하는 메커니즘)
*thread : thread는 사실상 하나의 프로세스이므로 프로세스 간 협력으로 보기는 어렵지만 동일한 process를 구성하는 thread들 간에는 주소 공간을 공유하므로 협력이 가능함
Message Passing
- Message System : 프로세스 사이에 공유 변수(shared variable)를 일체 사용하지 않고 통신하는 시스템
- Direct Communication : 통신하려는 프로세스의 이름을 명시적으로 표시 (커널을 통해 전달됨)
- Indirect Communication : Mailbox(또는 port)를 통해 메시지를 간접 전달 (커널을 통해 전달됨)
Shared Memory
Process A와 B 모두 본인만의 주소공간이 따로 있는데
물리적인 메모리에 mapping 할 때 공유되도록 mapping 한 것
프로세스끼리 직접 메모리 공간을 공유하는 것이 아니라 커널에게 시스템 콜을 통해서 mapping을 한다.
반응형
'CS > 운영체제' 카테고리의 다른 글
[OS] Process Synchronization (0) | 2021.07.14 |
---|---|
[OS] CPU Scheduling (0) | 2021.07.11 |
[OS] Process (0) | 2021.07.07 |
[OS] System Structure & Program Execution (2) | 2021.06.28 |
[OS] Introduction to Operating Systems (0) | 2021.06.27 |
Comments