-
[OS] Process Management와 System CallComputer Science/Operating System 2021. 6. 13. 02:57
모든 프로세스는 부모-자식 관계를 지닌다.
프로세스의 생성에는 처음부터 새로 생성하는 방식과, 부모 프로세스를 복제해서 생성하는 방식이 있다.
프로세스를 처음 생성할 때 에는 프로그램 코드와 데이터를 메모리에 적재하고, 새로운 PCB를 생성하여 초기화하고, 프로세스를 Ready Queue에 enqueue한다.
프로세스를 복제할 때 에는 기존 프로세스를 부모(Parent) 프로세스, 새로운 프로세스를 자식(Child) 프로세스의 관계를 가진다.- 복제와 동시에 현재 실행중이던 프로세스를 중단하고 상태를 저장
- 부모 프로세스의 PCB를 복사해서 새로운 PCB를 생성한 뒤 Ready Queue에 추가
- Linux) fork() 함수 사용
부모 프로세스는 여러 자식 프로세스를 가질 수 있기 때문에 그림과 같은 트리 형태로 표현할 수 있다.
프로세스는 고유한 PID(Process Identification Number)를 가진다. 위의 그림을 보면 자식 프로세스의 PID는 부모 프로세스의 PID보다 큰 것을 알 수 있다.
부모-자식 프로세스의 관계는 두 가지 기준으로 분류할 수 있다.- Resource Sharing:
- 부모-자식 간에 모든 자원을 공유하는 모델
- 자식 프로세스가 부모 프로세스의 일부 자원을 공유하는 모델
- 서로 별개의 자원을 공유하는 모델
- Execution:
- 부모와 자식 프로세스가 병행 실행
- 부모 프로세스가 자식 프로세스의 terminate까지 wait하는 모델
부모 프로세스가 복제될 경우, 자식 프로세스는 부모 프로세스의 주소공간을 복사하고 새로운 프로그램을 올린다.
시스템콜 이란?
운영체제의 특성 상 커널 / 응용 프로그램이 CPU에 대해 갖게 되는 권한 및 접근 능력이 다르다. 시스템콜은 응용 프로그램이 운영체제의 커널이 제공하는 서비스에 접근하기 위해 사용하는 인터페이스이다. 직접 시스템을 호출할 수 없기 때문에 고급 API를 통해 시스템 호출에 접근하게 하는 방법이다.
시스템콜의 기능
- 사용자 모드에 있는 응용 프로그램이 커널의 기능을 사용할 수 있다.
- 시스템콜을 호출하면 사용자 모드에서 커널 모드로 바뀐다.
- 커널에서 시스템콜을 처리한 뒤에는 커널 모드에서 다시 사용자 모드로 전환되어 작업을 지속할 수 있다.
Unix에서 프로세스의 제어에 사용되는 시스템콜
- fork() : 새로운 프로세스를 복제하여 생성
- exec() : 복제된 영역에 새로운 프로그램을 복사
- exit() : 프로세스가 마지막 명령을 수행한 후 운영체제에게 알림 - 자발적
- 자식 프로세스가 부모 프로세스에게 output data를 보낸다(via wait)
- 명시적으로 적지 않아도 main 함수가 return되는 위치에 컴파일러가 삽입한다
- 프로세스의 자원들이 OS에게 반납된다
- abort() : 부모 프로세스가 자식 프로세스의 수행을 종료시킨다 - 비자발적
- 자식 프로세스의 자원 할당 한계치를 초과했거나 task가 불필요할 때
- 부모 프로세스가 종료(exit)되는 경우(root process부터 계층적으로 내려가며 leaf부터 종료)
- 키보드로 kill, break 등을 입력한 경우
+ copy-on-write : write가 발생하기 전에는 부모 프로세스의 자원을 그대로 공유하고 있다가 이후에는 copy해서 독자적으로 소유하는 리소스 관리 기법fork() system call example
wait() system call example
- 커널은 child가 종료될 때 까지 process A를 sleep(block)상태로 전환한다
- child가 종료되면 커널은 process A를 깨운다(ready 상태로 전환)
프로세스 간 협력
기본적으로 프로세스들은 고유한 주소공간을 가지며, 원칙적으로는 다른 프로세스의 수행에 영향을 미치지 못한다
하지만 프로세스 협력 메커니즘이 존재하여 간접적으로 영향을 미칠 수 있는 방법이 존재한다.IPC(Inter Process Communication)
- 메시지를 전달하는 방법
- message passing - 커널을 통해 메시지를 전달
- 공유 변수 X
- Direct/Indirect
- message passing - 커널을 통해 메시지를 전달
- 주소 공간을 공유하는 방법
- shared memory - 서로 다른 프로세스 간에도 일부 주소 공간 공유
- thread - 하나의 프로세스라서 IPC라고 볼 수는 없지만 thread간에는 주소 공간을 공유하므로 협력 관계로 볼 수 있다
'Computer Science > Operating System' 카테고리의 다른 글
[OS] 공유 자원의 접근을 제한하는 Process Synchronization (0) 2021.08.06 [OS] CPU Scheduling - 어떤 Job이 CPU를 선점할까 (0) 2021.08.02 [OS] Process and Thread - 프로세스와 쓰레드 개념과 차이점 (0) 2021.02.07 [OS] 운영체제(Operating System)의 개요 및 역할 (0) 2021.01.25 [OS] Interrupt 인터럽트란 ? (0) 2021.01.22