[KOCW] 운영체제, 3. 프로세스 관리(5)

임창묵·2022년 6월 15일
0

Computer science

목록 보기
10/11
post-thumbnail

KOCW > 이화여자대학교 반효경 교수님 > 운영체제 > 3. 프로세스 관리(5)

3. 프로세스 관리(5)

프로세스 생성(Process Creation)

  • 부모 프로세스가 자식 프로세스를 fork() 시스템 콜을 통해 생성
    • 프로세스의 트리(계층 구조) 형성
    • 자식은 부모의 공간을 복사(binary and OS data) 후, 그 공간에 새로운 프로그램을 올림
    • UNIX의 예
      • fork() 시스템 콜이 새로운 프로세스를 생성 후,
        • 그 다음 이어지는 exec() 시스템 콜을 통해 새로운 프로그램을 메모리에 올림
  • 프로세스는 자원을 필요로 함
    • 운영체제로부터 받는다
    • 혹은 부모와 공유하기도 함
  • 자원의 공유 방식의 종류
    • 부모와 자식이 모든 자원을 공유하는 모델
    • 일부를 공유하는 모델
    • 전혀 공유하지 않는 모델

프로세스 종료(Process Termination)

  1. exit(): 프로세스가 마지막 명령을 수행한 후, 운영체제에게 이를 알려줌
    • 자식이 부모에게 output data를 보냄
    • 프로세스의 각종 자원이 운영체제에게 반납됨
  1. abort(): 부모 프로세스가 자식의 수행을 종료시킴
    • 자식이 할당 자원의 한계치를 넘어섬
    • 자식에게 할당된 태스크가 더 이상 필요하지 않음
    • 부모가 먼저 종료(exit)하는 경우는?
      • 가장 말단의 자식부터 먼저 단계적으로 종료 후, 부모를 종료

fork() 시스템 콜

  • 부모와 자식을 구별하는 방식은 pid(프로세스 식별자, Process ID)를 이용
    • fork의 반환값으로 확인
int main()
{
    int pid;
    pid = fork();
    if (pid == 0)
        printf("\n Hello, I am child!\n")
    else if (pid > 0)
        printf("\n Hello, I am parent!\n")
}

exec() 시스템 콜

  • 새로운 프로그램으로 덮어 씌우는 시스템 콜
int main()
{
    int pid;
    pid = fork();
    if (pid == 0)
        printf("\n Hello, I am child! Now I'll run date \n")
        execlp("/bin/date", "/bin/date", (char *)0); // 새로운 프로그램을 덮어 씌움
    else if (pid > 0)
        printf("\n Hello, I am parent!\n")
}

0개의 댓글