본문 바로가기
휴지통/CS

[OS] Process Management

by 신재권 2023. 9. 3.

프로세스 생성(Process Creation)

Copy-On-Write(COW) 기법 - Write가 발생했을 때 Copy한다.ㄹ

부모 프로세스(Parent Process)가 자식 프로세스(Children Process) 생성

  • 프로세스의 트리(계층 구조) 형성
  • 프로세스는 자원을 필요로 한다.
    • 운영체제로부터 받는다.
    • 부모와 공유한다.
  • 자원의 공유
    • 부모와 자식이 모든 자원을 공유하는 모델
    • 일부를 공유하는 모델
    • 전혀 공유하지 않는 모델
  • 수행(Execution)
    • 부모와 자식은 공존하며 수행되는 모델
    • 자식이 종료(terminate)될 때 까지 부모가 기다리는(wait) 모델
  • 주소 공간(Address Space)
    • 자식은 부모의 공간을 복사함(binary and OS data)
    • 자식은 그 공간에 새로운 프로그램을 올린다.
  • UNIX 예시
    • fork() 시스템 콜이 새로운 프로세스를 생성
      • 부모를 그대로 복사(OS Data Except PID + binary)
      • 주소 공간 할당
    • fork 다음에 이어지는 exec() 시스템 콜을 통해 새로운 프로그램을 메모리에 올린다.

프로세스 종료(Process Termination)

  • 프로세스가 마지막 명령을 수행한 후 운영체제에게 이를 알려준다(exit)
    • 자식이 부모한테 output data를 보낸다.(via wait)
    • 프로세스의 각종 자원들이 운영체제에게 반납된다.
  • 부모 프로세스가 자식의 수행을 종료시킨다.(abort)
    • 자식이 할당 자원의 한계치를 넘어설때
    • 자식에게 할당된 태스크가 더이상 필요하지 않을 때
    • 부모가 종료(exit)되는 경우
      • 운영체제는 부모 프로세스가 종료되는 경우 자식 프로세스가 더 이상 수행되지 않도록 한다.
      • 단계적인 종료가 발생한다.

fork() 시스템 콜

int main(){
	int pid;
	pid = fork();
	
	if(pid == 0)
		prinf("\\n Hello. I am Child!\\n");
	else if(pid > 0)
		prinf("\\n Hello. I am Parent!\\n");
}

자식 프로세스는 부모 프로세스와 context를 공유한다.

context 에는 PC도 포함되어 있다.

위 코드에서 fork() 시스템 콜을 호출하면, 부모 프로세스의 PC는 fork() 이후의 코드를 가리키고 있기 때문에, 자식 프로세스도 같은 PC를 가지게 되어, fork() 이후 부분이 수행된다.

자식 프로세스와 부모 프로세스를 구분하기 위해 자식 프로세스의 fork의 결과값은 0이고, 부모 프로세스의 fork의 결과값은 양수이다.

fork()는 부모 프로세스에 작성된 코드를 자식 프로세스가 실행하게 된다.

exec() 시스템 콜

exec() 시스템 콜은 부모 프로세스가 다른 프로그램인 자식 프로세스를 실행할 수 있다.

즉, 설정된 프로그램을 실행하는 자식 프로세스가 생긴다.

부모 프로세스와 자식 프로세스가 수행하는 코드를 다르게 설정할 수 있다.

int main(){
	int pid;
	pid = fork();
	
	if(pid == 0){
		prinf("\\n Hello, I am Child! Now I'll run date \\n");
		execlp("/bin/date", "/bin/date", (char *) 0);
	}
	else if(pid > 0)
		prinf("\\n Hello. I am Parent!\\n");
}

반드시 fork()를 통해 자식 프로세스를 생성하고, exec() 를 사용할 수 있는건 아니다.

fork()를 사용하지 않고 exec()를 사용하면 해당 프로세스는 지정된 프로그램을 실행하는 프로세스가 된다.

만약 fork()를 호출하지 않고, exec() 만 사용할 경우, exec() 아래에 있는 문장은 수행될 수 없다.

execlp(”전달할 프로그램 이름”, “전달할 프로그램 이름(동일)”, 전달할 인자…, (char *)0);

마지막 인수는 NULL 포인터이다.

wait() 시스템 콜

  • 프로세스 A가 wait() 시스템 콜을 호출하면
    • 커널은 child가 종료될 때 까지 프로세스 A를 sleep 시킨다.(Block 상태)
    • Child Process가 종료되면 커널은 프로세스 A를 깨운다.(Ready 상태)
int main() {
	int childPid;
	childPid = fork();
	
	if(childPid == 0){
		자식 프로세스가 수행할 코드
	}
	else {
		wait();
	}
	...
}

부모 프로세스가 fork()를 호출하면, 자식 프로세스가 생긴다.

자식 프로세스는 부모 프로세스의 컨텍스트를 복사해 개별적인 코드영역이 생기게 되고, 결국 두 개의 프로세스는 독립적으로 실행된다.

부모는 wait() 시스템 콜을 통해, 자식 프로세스의 종료를 기다리게 되고, 자식 프로세스가 종료되면 부모 프로세스의 다음 작업이 수행된다.

exit() 시스템 콜

  • 프로세스의 종료
    • 자발적 종료
      • 마지막 statement 수행 후 exit() 시스템 콜을 통해 프로그램에 명시적으로 적어주지 않아도 main 함수가 리턴되는 위치에 컴파일러가 넣어준다.
    • 비자발적 종료
      • 부모 프로세스가 자식 프로세스를 강제로 종료시킨다.
        • 자식 프로세스가 한계치를 넘어서는 자원 요청
        • 자식에게 할당된 태스크가 더 이상 필요하지 않다.
      • 키보드로 kill, break 등을 친 경우
      • 부모 프로세스가 종료되는 경우
        • 부모 프로세스가 종료되기 전에 자식 프로세스들이 먼저 종료 된다.

프로세스와 관련된 시스템 콜 정리

  • fork() : 자식 프로세스를 생성한다.(복제)
  • exec() : 새로운 프로그램을 실행하는 자식 프로세스를 생성한다.(덮어 씌운다)
  • wait() : 자식 프로세스가 종료될 때 까지 부모 프로세스는 대기한다.(Block 상태)
  • exit() : 자원 할당을 해제하고, 부모 프로세스에게 죽는다고 알린다.

프로세스 간 협력

  • 독립적 프로세스(Independent Process)
    • 프로세스는 각자의 주소 공간을 가지고 수행되므로 원칙적으로 하나의 프로세스는 다른 프로세스의 수행에 영향을 미치지 못한다.
  • 협력 프로세스(Cooperating Process)
    • 프로세스 협력 메커니즘을 통해 하나의 프로세스가 다른 프로세스의 수행에 영향을 미칠 수 있음
  • 프로세스 간 협력 메커니즘(IPC : InterProcess Communication)
    • 메시지를 전달하는 방법
      • message passing : 커널을 통해 메시지 전달
    • 주소 공간을 공유하는 방법
      • shared memory : 서로 다른 프로세스 간에도 일부 주소 공간을 공유하게 하는 shared memory 메커니즘
      • thread : thread는 사실상 하나의 프로세스이므로 프로세스 간 협력으로 보기는 어렵지만 동일한 process를 구성하는 thread들간에는 주소 공간을 공유하므로 협력 가능

Message Passing

  • Message System
    • 프로세스 사이에 공유 변수(shared variable)를 일체 사용하지 않고 통신하는 시스템
  • Direct Communication
    • 통신하려는 프로세스의 이름을 명시적으로 표시
  • Indirect Communication
    • mailbox(또는 port)를 통해 메시지를 간접 전달

 

http://www.kocw.net/home/search/kemView.do?kemId=1046323

'휴지통 > CS' 카테고리의 다른 글

[OS] CPU Scheduling  (0) 2023.09.04
[OS] Process  (0) 2023.09.01
[OS] System Structure & Program Execution  (0) 2023.08.31
[OS] Introduction to Operating Systems  (0) 2023.08.30
TCP/IP  (0) 2023.08.23