728x90
⬛ 사전 지식
◼ 커널 모드(Kernel Mode)와 사용자 모드(User Mode)
- 커널 모드 : 모든 자원(드라이버, 메모리, CPU)에 접근, 명령할 수 있다.
- 사용자 모드 : 프로그램의 자원에 함부로 접근하지 못하고 코드 작성, 프로세스 실행 등의 간단한 행동만 가능
◼ System call
- OS의 특정 기능을 쓸 수 있게 하는 인터페이스를 요청하는 함수
- 사용자 모드에서 System call함수를 이용하여 커널에 접근하고 커널 모드에서의 기능을 사용한다.
◼ PID
- 프로세스 식별 번호
⬛ 프로세스 생성과 관련된 System call
◼ 프로세스의 생성 과정
- 부모 프로세스가 자식 프로세스를 복제 생성하여 트리 구조를 이룬다.
- 부모 프로세스의 주소공간 내용을 그대로 자식 프로세스의 주소 공간으로 복제
- 부모 프로세스와 다른 자식 프로세스의 프로그램을 실행해야 할 경우 복제된 주소공간 위에 새로운 프로그램을 메모리에 적재하고 이를 실행
◼ fork()
- 부모 프로세스의 주소 공간 내용을 그대로 자식 프로세스의 주소 공간으로 복제 (Program Counter도 복제됨)
- 부모 프로세스의 PC도 복제되므로 자식 프로세스는 fork() 이후부터 실행된다.
- 부모 프로세스일 경우 자식의 PID를 반환하고, 자식 프로세스일 경우 0을 반환
int main(){
int pid;
pid = fork(); //자식 프로세스가 생성됨
if(pid == 0){
printf("Child (pid : %d)", (int)getpid());
} else if(pid > 0){
printf("Parent (pid : %d)", (int)getpid());
}
}
// Child (pid : 23534)
// Parent (pid :33234)
// Child와 Parent 출력 순서가 유동적임.
◼ exec()
- 복제된 주소공간 위에 새로운 프로그램을 메모리에 적재하고 이를 실행하여 부모 프로세스의 흐름에서 벗어나게 하는 시스템 호출
- 현재 프로세스가 새로운 프로그램을 처음(main)부터 실행하기 때문에 fork()와 달리 반환 값이 없다.
int main(){
int pid;
pid = fork(); //자식 프로세스가 생성됨
if(pid == 0){
printf("Child (pid : %d)", (int)getpid());
execlp("/bin/date", arg1, arg2, ..., (char *)0 );
//execlp("프로그램 이름", arg1, arg2, ..., (char *)0);
} else if(pid > 0){
printf("Parent (pid : %d)", (int)getpid());
}
}
//date 프로그램의 main부터 실행됨.
◼ wait()
- 자식 프로세스가 종료될때까지 부모 프로세스의 동작을 멈추게 한다. (block 상태)
- 자식 프로세스가 종료되면 부모 프로세스의 동작을 다시 시작한다. (ready 상태)
- 종료된 자식 프로세스의 PID를 반환
int main(){
int pid;
pid = fork(); //자식 프로세스가 생성됨
if(pid == 0){
printf("Child (pid : %d)", (int)getpid());
} else if(pid > 0){
int childPID = wait();
printf("Parent %d (pid : %d)", childPID, (int)getpid());
}
}
// Child (pid : 23534)
// Parent 23534 (pid : 33234)
// Child와 Parent 출력 순서가 고정.
참고자료. (90) [OS] Lecture 1. Computer System Overview / 운영체제 강의 - YouTube
728x90
'공부의 기록 > Operating System' 카테고리의 다른 글
[운영 체제] 페이징과 세그멘테이션 기법 (0) | 2022.04.02 |
---|---|
[운영 체제] Deadlock (0) | 2022.03.19 |
[운영 체제] 운영체제 개요 (0) | 2022.03.18 |
[운영 체제] 문맥 교환(Context Switching) (0) | 2022.03.17 |
[운영 체제] 프로세스와 프로세스의 상태 (0) | 2022.03.17 |