[OS] 4. Process Management

상훈·2024년 7월 21일

OS study

목록 보기
4/6
post-thumbnail

프로세스 생성(Process Creation)

  • 부모 프로세스가 자식 프로세스 생성 (복제 생성)
    • 자식은 부모의 공간을 복사함
    • 자식은 그 공간에 새로운 프로그램을 올림
      • fork() : 시스템 콜이 새로운 프로세스를 생성(주소 공간 복사)
      • exec() : 시스템 콜을 통해 새로운 프로그램을 메모리에 올림
  • 프로세스의 트리(계층 구조) 형성
  • 프로세스는 자원을 필요로 함
    • 운영체제로부터 받음

프로세스 종료(Process Termination)

  1. 프로세스가 마지막 명령을 수행한 후 운영체제에게 이를 알려줌(exit)

    • 자식 프로세스가 종료될 때 부모에게 output data를 보냄
  2. 부모 프로세스가 자식의 수행을 종료시킴(abort)

    • 자식이 할당 자원의 한계치를 넘어선 경우

    • 자식에게 할당된 태스크가 더 이상 필요하지 않은 경우

    • 부모가 종료(exit)하는 경우

fork() 시스템 콜

  • parent

    int main()
    { int pid;
    	pid = fork();
    	if (pid == 0) /" this is child"
        printf("\n Hello, I am child!\n")
      else if (pid > 0) /" this is parent "
        printf("\n Hello, I am parent!\n");
    }
  • child

    int main()
    { int pid;
    	pid = fork();
    	if (pid == 0) /" this is child"
        printf("\n Hello, I am child!\n")
      else if (pid > 0) /" this is parent "
        printf("\n Hello, I am parent!\n");
    }
    1. parent에서 계속해서 코드를 한 줄씩 실행
    2. pid = fork()를 만나면 자식 프로세스를 생성
    3. 자식 프로세서는 부모 프로세서를 그대로 복사
    4. 자식 프로세서는 fork() 이후부터 실행(부모의 context도 그래도 복사하여 program counter도 부모와 같기 때문에)

exec()

int main()
{ int pid;
	pid = fork();
	if (pid == 0) /" this is child"
  { printf("\n Hello, I am child!\n Now I'll run date \n")
   	execlp("/bin/date", "bin/date", (char *)0); 
  }
  else if (pid > 0) /" this is parent "
    printf("\n Hello, I am parent!\n");
}
  • exec 이후에는 다시 되돌릴 수 없음

wait() 시스템 콜

자식 프로세스가 종료될 때까지 기다리는 함수

  1. 프로세스 A가 wait() 시스템 콜을 호출
  2. 커널은 child가 종료될 때까지 A를 sleep 시킴 (block 상태)
  3. Child process가 종료되면 커널은 프로세스 A를 깨움 (ready 상태)

exit() 시스템 콜

  • 프로그램을 종료
  • 프로그램에 명시적으로 적어주지 않아도 main 함수가 리턴되는 위치에 컴파일러가 넣어줌

프로세스 간 혁렵

독립적 프로세스 : 프로세스는 각자의 주소 공간을 가지고 수행되므로 원칙적으로 하나의 프로세스는 다른 프로세스의 수행에 영향을 미치지 못함

협력 프로세스 : 프로세스 협력 메커니즘을 통해 하나의 프로세스가 다른 프로세스의 수행에 영향을 미칠 수 있음

프로세스 간 협력 메커니즘(IPC: Interprocess Communication)

  • 메세지를 전달하는 방법
    • message passing : 커널을 통해 메시지 전달
      • Direct Communication : 통신하려는 프로세스의 이름을 명시적으로 표시
        • processA -> kernel -> processB
      • Indirect Communication : mailbox (또는 port)를 통해 메시지를 간접 전달
        • processA -> kernel -> mailbox -> processB
  • 주소 공간을 공유하는 방법
    • shared memory: 서로 다른 프로세스 간에도 일부 주소 공간을 공유하게 하는 메커니즘
profile
문송 개발자

0개의 댓글