Skip to content

Latest commit

 

History

History
82 lines (55 loc) · 3.79 KB

chapter4-horeng2.md

File metadata and controls

82 lines (55 loc) · 3.79 KB

프로세스 생성

부모 프로세스가 자식 프로세스를 생성한다.

  • 복제 생성
  • 여기서 복제는 프로세스의 문맥을 모두 복사하는 것(코드/데이터/스택을 그대로 복사)해서 자식을 만들고 PC레지스터도 그대로 복사

프로세스의 트리 형성

프로세스는 자원을 필요로 함

  • 운영체제로부터 받는다
  • 부모와 공유한다

자원의 공유

  • 부모와 자식이 모든 자원을 공유하는 모델
  • 일부를 공유하는 모델
  • 전혀 공유하지 않는 모델

→ 메모리를 복사하면 어떻게보면 메모리를 낭비하는 것. 똑같은 내용을 하면 낭비할 필요가 없기 때문에 일단 카피하지 않고 부모의 주소 공간을 공유하는 경우가 있다.(리눅스와 같이 보다 효율적으로 운영하는 경우)

Copy-in-write

  • 내용이 바뀌는 write가 발생해서 내용이 수정되면 그 때 카피를 한다. 잘게 쪼개진 부분 중에 변경이 발생되는 부분만 카피를 한다
  • 원칙은 독립적인 프로세스이기 때문에 독립적인 공간을 갖는다

fork시스템콜

  • 그대로 복사해서 주소공간을 할당
  • 실행을 하다가 fork가 호출되면 새로운 프로세스가 실행되고 다른곳에서 똑같은 코드블럭이 시작됨
  • 자식 프로세스의 코드블럭은 fork된 시점부터 다시 시작한다. 그대로 카피가 되기 때문에 복제본이 원본인척 하면 혼란스러워지는 상황이 일어날 수 있다
  • 흐름도 같을 수 있다

→ 이런 문제를 방지하기 위해 운체에서는 부모와 자식을 구분한다

부모와 자식은 fork의 결과값이 다르다. 부모는 음수 자식은 0

exec 시스템콜

  • 덮어쓰기를 한다.
  • 새로운프로그램으로 완전히 덮어씌움
  • 반드시 자식을 만들어서 해야하는 것이 아니기 때문에 부모프로세스에서 할 수도 있음
  • 함수호출시 프로그램 이름 두번 적어주고 덮어쓸 내용 적는 방식으로 코딩
  • 일단 복제생성을 한 다음에 필요할 경우에 덮어씌움

wait 시스템콜

  • 커널은 자식이 종료될 때까지 프로세스를 sleep시킨다(block)
  • 자식이 종료되면 커널은 프로세스 A를 꺠운다(ready)

프로세스 간 협력

  • 독립적인 프로세스
    • 프로세스는 각자의 주소공간을 가지고 수행되므로 원칙적으로 하나의 프로세스는 다른 프로세스 수행에 영향을 미치지 못함
  • 협력 프로세스
    • 프로세스 협력 메커니즘을 통해 다른 프로세스의 수행에 영향을 미칠 수 있음

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

  • message passing: 커널을 통해 메세지 전달
    • 프로세스 사이에 공유 변수를 일체 사용하지 않고 통신하는 시스템
    • 다이렉트 커뮤니케이션: 프로세스의 이름을 명시적으로 표시
    • 인다이렉트 커뮤티케이션: 메일박스 또는 포트를 통해 메시지를 간접 전달
  • shared memory: 서로 다른 프로세스 간에도 일부 주소 공간을 공유하게 하는 공유메모리 메커니즘이 있음

프로세스 종료

exit이라는 키워드 프로세스가 마지막 명령을 수행한 후 운영체제에세 이를 알려줌

  • 자식이 부모에게 outpou data를 보냄(via wait)
  • 프로세스의 각종 자원들이 운영체제에게 반납됨

부모 프로세스가 자식의 수행을 종료시킴(abort)

  • 강제종료
  • 자식이 할당 자원의 한계치를 넣어섬
  • 자식에게 할당된 테스크가 더이상 필요하지 않음
  • 부모가 종료(exit)하는 경우
    • 운영체제는 부모 프로세스가 종료하는 경우 자식이 더이상 수행되도록 두지 않는다
    • 단계적인 종료(자식의자식의자식부터...)