본문 바로가기

공부의 기록/Operating System

[운영 체제] 프로세스와 관련된 System Call

728x90

⬛ 사전 지식

커널 모드(Kernel Mode)와 사용자 모드(User Mode)

  • 커널 모드 : 모든 자원(드라이버, 메모리, CPU)에 접근, 명령할 수 있다.
  • 사용자 모드 : 프로그램의 자원에 함부로 접근하지 못하고 코드 작성, 프로세스 실행 등의 간단한 행동만 가능

◼ System call

  • OS의 특정 기능을 쓸 수 있게 하는 인터페이스를 요청하는 함수
  • 사용자 모드에서 System call함수를 이용하여 커널에 접근하고 커널 모드에서의 기능을 사용한다.

◼ PID

  • 프로세스 식별 번호

⬛ 프로세스 생성과 관련된 System call

◼ 프로세스의 생성 과정

  • 부모 프로세스가 자식 프로세스를 복제 생성하여 트리 구조를 이룬다.
  • 부모 프로세스의 주소공간 내용을 그대로 자식 프로세스의 주소 공간으로 복제
  • 부모 프로세스와 다른 자식 프로세스의 프로그램을 실행해야 할 경우 복제된 주소공간 위에 새로운 프로그램을 메모리에 적재하고 이를 실행

fork()

출처 : https://latter2005.tistory.com/105

  • 부모 프로세스의 주소 공간 내용을 그대로 자식 프로세스의 주소 공간으로 복제 (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()

출처 : https://latter2005.tistory.com/105

  • 복제된 주소공간 위에 새로운 프로그램을 메모리에 적재하고 이를 실행하여 부모 프로세스의 흐름에서 벗어나게 하는 시스템 호출
  • 현재 프로세스가 새로운 프로그램을 처음(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     

참고자료. https://latter2005.tistory.com/105

728x90