[운영체제] Chapter4. Process Management (1)

2022. 12. 15. 18:26CS/운영체제

728x90

//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎

 

 

프로세스 생성(Process Creation), 프로세스 종료(Process Termination)

 

1. 프로세스 생성 (Process Creation)

  • 부모 프로세스(Parent process)가 자식 프로세스(children process) 생성 : 복제 생성
    • 부모 프로세스 1개가 → n개의 자식 프로세스를 생성할 수 있기 때문에 프로세스의 트리(계층 구조) 형성
  • 프로세스는 자원을 필요로 함
    • 운영 체제로부터 받는다.
    • 부모와 공유한다.
      • 전혀 공유하지 않는 모델
        • 부모 프로세스가 자식 프로세스를 낳는 시점부터 별도의 프로세스이기 때문에 서로 경쟁하는 사이
          ~ 원칙적으로 자원을 공유하지는 않는다.
      • 부모와 자식이 모든 자원을 공유하는 모델
      • 일부를 공유하는 모델
        • COW(Copy-On-Write): write이 발생했을 때 copy 하겠다.
          • 메모리에 동일한 두 copy가 올라가면 메모리 낭비이기 때문에 일단 copy 하지 않고 주소 공간을 공유하고 PC 레지스터만 copy 해서 똑같은 위치를 가리키게 한다.
          • code, data, stack은 통째로 메모리에 올라가 있는 것이 아니라 잘게 쪼개져서 필요한 부분만 메모리에 올라가 있는데, 잘게 쪼개진 부분에 대해 write가 발생하면 그 부분만 copy해서 부모와 공유하지 않고 관리한다.
  • 수행(Execution)
    • 원칙) 부모와 자식이 공존하며 수행되는 모델 - 독립적
    • 자식이 종료(terminate)될 때까지 부모가 기다리는(wait) 모델 - (blocked 상태에서 자식이 끝나면 ready 상태)
  • 주소 공간(Address) - 프로세스의 생성
    • 프로세스가 만들어지면 프로세스만의 독자적인 주소 공간(코드, 데이터, 스택)이 만들어짐
    • 자식의 주소 공간은 어떻게 만들어질까?
    • 1단계) 자식은 부모의 공간(PCB와 같은 OS에 있는 데이터 = 프로세스 문맥)을 복사
      • 부모 프로세스가 자식 프로세스를 생성하게 되면 자식 프로세는 별도의 주소 공간을 가지지만, 처음 주소 공간을 생성할 때에는 부모 프로세스의 주소 공간 내용을 그대로 복사해서 생성
      • 부모의 주소 공간을 fork() 해서 그대로 복사를 하면 코드도 복사가 되지만 데이터, 스택도 복사가 된다.
        • 전역 변수, 현재 어디를 수행하고 있는지에 대한 정보도 복사하기 때문에
        • 자식은 처음부터 시작하는 것이 아니라, 부모의 PC 위치부터 실행한다.
    • 2단계) 자식은 그 주소 공간 위에 새로운 프로그램을 덮어 씌워 실행
    • 1단계와 2단계는 독립적이기 때문에
      • 1단계만 실행 → 프로세스를 복제만 해두고 덮어 씌우지 않음
      • 2단계만 실행 → 자식 프로세스를 만들지 않고 그냥 exec()하여 새로운 프로세스로 바뀜
  • 유닉스의 예
    • fork() - 시스템 콜이 새로운 프로세스를 생성(복제 생성)
      • 부모를 그대로 복사
      • 주소 공간 할당
    • exec() - fork() 다음에 이어지는 시스템 콜, 새로운 프로그램을 메모리에 올림(새로운 프로그램을 덮어 씌우는)
    • fork()와 exec()는 시스템 콜: 사용자 프로세스가 직접 다른 프로세스를 생성할 수 없고 운영체제를 통해서만 가능하다.

 

2. 프로세스 종료 (Process Termination)

  • 프로세스가 마지막 명령을 수행한 후 운영체제에게 이를 알려줌: exit() - 자발적 종료
    • 자식 프로세스가 부모 프로세스보다 먼저 종료되어야 하고, 이에 대한 처리는 부모 프로세스가 담당
    • 종료될 때 자식이 부모에게 output data를 wait 시스템 콜을 통해 전달
    • 프로세스의 각종 자원들이 운영체제에게 반납됨
  • 부모 프로세스가 자식의 수행을 종료시킴: abort() - 비자발적 종료
    • 자식이 할당된 자원의 한계치를 넘어선 경우
    • 자식에게 할당된 태스크가 더 이상 필요하지 않은 경우
    • 부모가 종료(exit)하는 경우
      • 운영체제는 부모 프로세스가 종료하는 경우 자식이 더 이상 수행되도록 두지 않는다.
      • 프로세스가 생성했던 모든 후손 프로세스들을 연쇄적으로 먼저 종료시킨 후에야 본인이 종료될 수 있음: 단계적 종료

 

[복습]

    1. 프로세스의 생성: 부모 프로세스가 자식 프로세스를 복제 생성하는 것
      • 트리(계층 구조) 형성
    2. 프로세스는 자원을 필요로 함
      • 운영체제로부터 자원을 받기
      • 부모와 공유(모든 자원 공유, 일부 공유, 공유하지 않는 모델)
    3. 프로세스의 수행
      • 부모와 자식이 공존하며 수행
      • 자식이 종료될 때까지 부모가 기다리는 모델
    4. 프로세스의 생성: 자식은 부모의 공간을 복사 -> 그 주소 공간 위에 새로운 프로그램을 덮어 씌움
      • fork(): 부모를 복사하고 주소 공간을 할당하며 프로세스를 생성
      • exec(): 새로운 프로그램을 메모리에 올림
    5. 프로세스 종료: 
      • 자발적 종료 exit(): 프로세스가 마지막 명령을 수행한 후 운영체제에게 이를 알려줌 
      • 비자발적 종료: abort(): 부모 프로세스가 자식의 수행을 종료시킴, 단계적 종료

 

 

 

 


이화여자대학교 반효경 교수님의 [2014년 1학기 운영체제], [2017년 1학기 운영체제]강의 정리입니다.

 반효경 교수님의 [운영체제와 정보기술의 원리] 교재를 참고하였습니다. 감사합니다.

https://core.ewha.ac.kr/publicview/C0101020140321144554159683?vmode=f 

 

반효경 [운영체제] 8. Process Management 1

설명이 없습니다.

core.ewha.ac.kr

 

728x90