프로세스 생성 API
- UNIX는 프로세스를 생성하기 위하여 fork() 와 exec() 시스템 콜을 사용함 wait() 은 프로세스가 자신이 생성한 프로세스가 종료되기를 기다리기 원할 때 사용함
프로세스를 생성하고 제어하려면 운영체제가 어떤 인터페이스를 제공해야하는가?
유용성, 편리성, 성능을 위해서는 어떻게 인터페이스를 설계해야 하는가?
fork() 시스템 콜
- 시스템 콜 중에서 가장 이해하기 힘든 시스템 콜
- fork() 시스템 콜의 반환 값은 자식, 부모가 서로 다름
- 자식 == 0
- 부모 > 0
- 실패 < 0
- 부모와 자식 프로세스간의 실행 순서는 보장하지 못함
- CPU 스케줄러는 실행할 프로세스를 선택함, 스케줄러의 동작은 일반적으로 상당히 복잡하고 상황에 따라 다른 선택이 이루어지기 때문에 어느 프로세스가 먼저 실행된다라고 단정하는 것은 매우 어려움
wait() 시스템 콜
- 부모 프로세스가 자식 프로세스의 종료를 대기해야 하는 경우
- 부모 프로세스가 자식 프로세스보다 먼저 실행되면 wait() 을 호출함
- 자식 프로세스가 종료 될 때 까지 리턴하지 않음
exec() 시스템 콜
- 자신이 아닌 다른 프로그램을 실행 할 때 사용함
- 실행 파일의 이름과 약간의 인자가 주어지면 해당 실행 파일의 코드와 정적 데이터를 읽어 들여 현재 실행 중인 프로세스의 코드 세그멘트와 정적 데이터 부분을 덮어 씀
- 새로운 프로세스를 생성하지 않고 현재 실행 중인 프로그램을 다른 프로그램으로 대체하는 것이다.
- exec() 시스템 콜이 성공하게 되면 p3.c는 절대로 리턴하지 않음
왜, 이런 API를?
- UNIX의 쉘을 구현하기 위해서는 fork() 와 exec() 을 분리해야 함
- 쉘이 fork()를 호출하고 exec()을 호출하기 전에 코드를 실행 할 수 있음??
- 쉘은 단순한 사용자 프로그램임, 프롬프트를 표시하고 사용자가 입력하기를 기다림
- fork(): 실행 파일의 위치를 찾고 명령어를 실행
- exec(): 다른 거 실행
- wait(): 실행된 것 끝날때까지 기다림
예제
prompt > wc p3.c > newfile.txt
- wc 프로그램의 출력이 newfile.txt 라는 출력 파일로 재지정됨
- 자식이 생성되고 exec() 이 호출되기 전에 표준 출력 파일을 닫고 newfile.txt 파일을 염
- UNIX 시스템은 0번 부터 차례로 사용 가능 파일 디스크립터를 찾음
프로세스 제어와 사용자
- UNIX 시스템에는 많은 프로세스 관련 인터페이스가 존재함
- kill() 시스템 콜은 시그널을 보내는 데 사용됨
- UNIX 쉘을 현재 실행 중인 프로세스에 특정 시그널을 보내는 단축키가 설정되어 있음.
- control-c 는 프로세스에게 SIGINT 시그널을 보내어 종료시키는 단축키
- control-z는 SIGSTP(멈춤) 시그널로 실행 도중에 프로세스를 잠시 멈추는 단축키
'운영체제' 카테고리의 다른 글
[OSTEP-9] Lottery Scheduling (0) | 2023.12.26 |
---|---|
[OSTEP-8] Multi Level Feedback Queue (1) | 2023.12.26 |
[OSTEP-7] 스케줄링 (0) | 2023.12.26 |
[OSTEP-6] Limited Direct Execution (1) | 2023.12.23 |
[OSETP-2] Abstract of Operating System (0) | 2023.12.23 |