본문 바로가기

CS(ComputerScience)/OSTEP

프로세스 API

728x90

프로세스 API

프로세스를 생성하고 제어하는 방법


📌  배운 것

UNIX 시스템

 

fork(), exec() 시스템 콜 : 프로세스 생성하기 위해

wait() 시스템 콜 : 프로세스가 자신이 생성한 프로세스가 종료되기를 기다리기 원할 때 사용

 

PID

process identifier 프로세스 식별자

실행과 중단과 같은 특정 프로세스를 대상으로 작업해야하는 경우 프로세스를 지칭하기 위해 사용.


주요 시스템 콜

 

fork() 

생성된 프로세스(자식 프로세스 : 0 반환)는 호출한 프로세스(부모 프로세스 : 자식 프로세스의 PID 반환)의 본사본

하지만, 자식 프로세스는 부모 프로세스와 완전히 동일하지는 않다. 자식 프로세스는 자신의 주소공간, 레지스터, PC 값을 가진다.

 

wait()

부모 프로세스가 자식 프로세스의 종료 시점까지 자신의 실행을 잠시 중시시킴.

자식 프로세스가 종료되면 wait()는 리턴

부모 프로세스가 먼저 실행되면 곧바로 wait()를 호출하므로 항상 자식 프로세스가 먼저 수행된다.

 

exec()

자기 자신이 아닌 다른 프로그램을 실행해야 할 때 사용.왜냐하면 fork() 시스템 콜은 자신의 본사본을 생성하여 실행한다. 자신의 본사본이 아닌 다른 프로그램을 실행해야 할 경우 exec() 시스템 콜이 그 일을 한다.

 

실행 파일의 이름과 약간의 인자(p3.c)가 주어지면 해당 실행 파일의 코드와 정적 데이터를 읽어 들여 현재 실행중인 프로세스의 코드 세그먼트와 정적 데이터 부분을 덮어 쓴다. 해당 현재 실행 중인 프로그램을 다른 실행 중인 프로그램으로 대체한다.

 

즉, fork()를 호출해 새로운 자식 프로세스를 만듦 -> exec() 호출해 현재 실행 프로그램 종료 -> wait() 호출해 명령어가 끝나기를 기다린다.

 


여타 API, 시스템 콜

 

kill()

프로세스를 중단시키고(block), 삭제하는 등의 작업에 사용

 


📌 회고

UNIX 시스템이 뭔지 아직도 생소하다.

UNIX 설계자 들이 왜 이런 방식으로 프로세스를 설계했을까?

이부분에 집중해서 공부해야 하는 것 같다.

 

📌 개선 방향

대면 스터디 후, 해결되지 않은 의문들.

1. 멀티 프로세스 원리 & 코어 1개 일때와 코어 여러 개 일때의 멀티 프로세스 동작 비교

2. 파일 시스템 원리

 

공부하면서 의구심이 생기는 부분에 대한 정리 또한 필요하다.

CS를 공부할때, 장단점을 생각할 때, 내가 이걸 구현 한다면 어떤식으로 할지? 생각해보는 시간을 많이 가지는 방향으로 스터디를 진행하면 좋을 듯 하다.

 

📌 참고 문서

운영체제 : 아주 쉬운 세 가지 이야기

'CS(ComputerScience) > OSTEP' 카테고리의 다른 글

스케줄링: 멀티 레벨 피드백 큐  (0) 2023.08.22
스케줄링: 개요  (0) 2023.08.22
제한적 직접 실행 원리  (0) 2023.08.08
가상화, 프로세스의 개념  (0) 2023.07.25
운영체제 개요  (0) 2023.07.18