카테고리 없음

프로세스 생성과 종료

kcj3054 2021. 10. 19. 17:18

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

  • wait()

  • fork()

  • exec()

프로세스 생성

  • 부모 프로세스가 자식 프로세스 생성

  • 프로세스는 자원을 필요로해서 os에게서 자원을 받는다

  • 부모와 자식은 자원을 공유할 수도 있고 자원을 두고 경쟁할 수도 있다

  • fork()를 이용해서 부모는 자식 프로세스를 만들 수 있는데 이때 만들어지는 자식은 '자신의 복제'라고 생각하면된다 현재 상태를 그대로 복제해서 자식을 만든다 (부모를 그대로 복사, 새로운 주소 공간 할당)

  • fork()와 exec()콜이 두개가 있다 처음에 포크는 이해가 갔었는데 exec()콜이 이해가 잘 가지 않았다 '덮어쓴다'의 의미를 이제는 이해를 할 수 있었다 프로그램을 실행하다가 exec()가 호출되면 완전히 새로운 것으로 덮어쓰여지기에 이전의 프로세스는 지워졌다고 생각하면 될 것같다

wait

  • 자식이 종료할때까지 부모를 sleep상태로 만드는 것이다.(block 상태)

  • 자식이 종료되면 커널은 부모를 깨운다 (ready상태)

  • 예를 들자면 리눅스에서 vi를 사용하는 것은 wait를 경험 할 수 있는 것이다

    • 왜냐 자식으로 보이는 vi가 vi를 실행하는 동안에는 다른 linux shell 명령어를 처리하지 못하도록 되어있으니..

exit

  • 프로세스의 종료

    • 프로그램에 명시적으로 exit을 적어주지 않아도 mian함수가 리턴되는 위치에 컴파일러가 스스로 넣어주워서 프로세스가 종료된다.
    • kill, break등을 친 경우는 비자발적으로 프로세스가 종료된다,

프로세스 간 협력

  • 프로세스는 독립적 프로세스나, 협력 프로세스가 있다 독립은 말 그대로 독립적으로 각자의 주소공간을 가지고 수행되는 것이다.

  • 프로세스 간 협력은 IPC (interprocess communication)

    • 메시지를 전달하는 방법 (메시지 패싱, 메시지 패싱은 두가지 방식이 있다 밑의 그림을 참고하자! )

    • 주소 공간을 공유하는 방법은 (shared memory -> 서로 다른 프로세스 간에도 일부 주소 공간을 공유하게 하는 메커니즘, 원칙적으로 프로세스끼리는 메모리를 공유할 수 없지만 os에게 서로 메모리를 공유할 것이라고 시스템콜을 하면 부분 공간만 공유하게 되는 것이다.

)

출처 :http://www.kocw.net/home/cview.do?cid=4b9cd4c7178db077