프로세스 종료

sun202x·2023년 1월 18일
0

운영체제

목록 보기
11/23
post-thumbnail

해당 게시글은 kocw에서 제공하는 금오공과대학교 최태영 교수님의 무료 강의를 공부하고 정리하기 위해서 만들어졌습니다.

Process Termination

  • 프로세스가 종료되는 경우는 두 가지가 있다.
    1. 수행되는 프로세스가 스스로 종료되는 경우
    • exit 함수를 호출하여 종료하는 경우
    • exit 함수를 호출하지 않더라도 컴파일러가 알아서 종료 시켜주는 경우
    1. 부모 프로세스가 강제로 자식 프로세스를 종료시키는 경우
    • 자식 프로세스가 너무 과도하게 자원을 사용하고 있다고 판단하는 경우
      • 주로 부모 프로세스가 스스로 판단하는 경우는 잘 없다.
      • 보통은 사용자가 판단하여 종료하게 된다.
      • 이것이 왜 부모 프로세스가 종료하는 경우냐 하면
      • 보통 expolorer가 사용자에게 제공되는 부모 프로세스이고
      • 실행중인 프로세스를 보여주는 것이 자식 프로세스이기 때문이다.
    • 부모 프로세스가 자식 프로세스를 더 이상 필요없다고 판단했을 경우
      • 코드 상에서 더 이상 실행될 필요 없는 경우에 발생
    • 부모 프로세스가 그 위 부모 프로세스가 종료 명령을 내리는 경우
      • 경우에 따라 부모 프로세스만 죽이고 자식 프로세스를 맡게될 다른 프로세스를 찾는다.
        • 보통은 모든 프로세스의 부모인 init 프로세스가 된다.
        • init 프로세스에 접속되는 프로세스들을 orphan 프로세스라고 한다.(고아 프로세스)
      • 또 다른 경우는 부모 프로세스와 자식 프로세스 모두 종료하는 경우이다.
        • 부모 프로세스는 자식 프로세스가 각각 종료 되었다는 신호를 받고,
        • 모두 종료되면 자신도 종료하게 된다.
        • 이러한 모양이 폭포모양과 비슷하다 하여
          • cascading termination이라고 한다.
  • 리눅스 같은 경우 프로세스 kill 명령을 내리면
    • cacading termination, orphan process
    • 두 가지 경우 모두 사용하게 된다.
    • ssh(secure shell)를 사용하여 서버에 붙는 경우
      • 서버에서 bash를 통해 데몬이 실행되는데,
      • 이 때, ssh를 종료하면 bash, 데몬 역시 모두 종료된다.(cascading termination)
      • 강제로 이것을 종료하지 못하게 변경할 수 있는데,
      • 각 프로세스는 sid(session id)를 갖는다.
        • cascading termination이 되는 것도 모두 동일한 sid를 가져서인데,
        • 이것을 강제로 변경하면 cascading termination이 발생하지 않는다.
  • wait(system.call)을 통해 자식 프로세스의 종료를 응답받아 처리한다.
    • 프로세스가 exit 함수를 통해 넘긴 값을 받을 &status 변수를 받고
    • 반환 값으로 현재 종료된 PID를 반환한다.

Multiprocess Architecture - Chrome Browser

  • 기존 ie는 창을 여러 개 띄우더라도 프로세스가 하나만 존재
    • 최신 ie는 여러개 만든다고 한다.
  • 창을 띄울 때마다 프로세스를 여러 개 만들도록 대중화 시킨게 크롬 브라우저이다.
  • 뿐만 아니라 크롬 브라우저는 처음 실행 될 때, 3 개의 프로세스를 실행한다.
    • 브라우저 프로세스
    • 렌더러 프로세스: 화면 보여주기 용
      • 탭 마다 렌더러가 존재한다.
    • 플러그인 관리 프로세스
      • 플러그인 설치 할 때마다 그것을 관리하기 위한 프로세스
  • 크롬 브라우저 같은 경우 탭, 창으로 있는 상태를 구분하지 않는다.
  • 브라우저 프로세스는 하나이고 각 탭마다 렌더러 프로세스가 생성되는 형식이다.

Process간 통신

  • 독립적으로 실행되는 프로세스는 independent process라고 한다.
  • 외부와의 통신이 있는 프로세스는 cooperating process라고 한다.
  • 외부와의 통신을 하는 이유는
    • Information sharing: 정보 공유를 함으로써 작업을 쉽게 할 수 있기 때문
    • Computation speedup: 작업을 나눠서 처리하면 전체적인 성능 향상을 기대할 수 있다.
    • Modularity: 역할을 나눔으로써 유지보수가 쉬워진다.
    • Convenience: 이를 통해 편의성을 얻을 수 있다.
  • cooperation을 하기 위해 프로세스간 통신을 해야 한다.
    • Interprocess Communication(IPC): 프로세스간 통신을 뜻한다.
  • IPC는 두가지 개념적 모델을 가진다.
    1. Shared memory
    • 통신을 하려는 두 프로세스 중 하나의 프로세스가 shared memory라는 메모리 영역을 할당 받는 방식이다.
    • 그렇게 한 후 할당 받은 메모리 주소를 다른 프로세스에게 알려준다.
    1. Message passing
    • 커널이 메세지를 전달하는 역할을 도맡아 하는 방식이다.
    • 바로 시스템 콜을 부르는 것
    • 이 시스템 콜을 통해 전달된 메세지는 커널의 큐에 차곡차곡 쌓이게 된다.
    • 그리고 사용하는 프로세스 측에서는 이 큐에서 메세지를 꺼내서 쓰게 된다.
  • 각 방법은 장, 단점을 가진다.
    • Message passing은
      • 시스템 콜이 굉장히 간단하다.
      • 대신 시스템 콜을 부르기 때문에 context swiching overhead가 발생하게 된다.
    • Shared memory는
      • 메모리를 확보받고 서로가 그 포인터를 공유하기까지 커널의 도움을 받아 시스템 콜을 부르지만,
      • 대신 메세지를 읽고 쓰고 하는데에 더 이상 커널의 도움이 필요하지 않다.
      • 그렇기 때문에 초기 작업만 끝나면 굉장히 빠르다.
      • 대신 한가지 문제가 있는데, 프로세스A가 메세지를 쓰기도 전에 프로세스B가 메세지를 읽어가 버리면
      • 불안정한 데이터를 읽어갈 수 있다는 문제가 있다.

Producer-Consumer Problem

  • Shared memory 방식에서 메세지를 쓰는 쪽을 Producer, 메세지를 읽어 오는 쪽이 Consumer라고 한다.
  • 이러한 생산과 소비의 문제를 해결하는 것을 Producer-Consumer Problem을 푼다고 할 수 있다.
  • 이 문제를 해결하기 위해서는 중간의 메모리를 잘 관리해야 하며, 이 메모리를 buffer라고 한다.
  • 이 buffer의 크기에 따라 두가지로 나뉜다.
    • bounded buffer: buffer의 크기가 정해져 있음
      • 일반적인 경우 모두 여기에 해당된다.
    • unbounded buffer: buffer의 크기가 무한대
  • bounded-buffer를 구현하기 위해 Circular queue를 사용한다.
  • Producer 입장에서는 buffer가 찰 때 더 이상 데이터를 넣으면 안된다.
  • Consumer 입장에서는 buffer가 비어 있을 때는 더 이상 읽어오면 안된다.
    • circular queue의 in, out 포인터를 가지고 비교하면서, 비어있는지 찼는지 확인할 수 있다.
      • in + 1이 out과 같으면 가득 찼다는 뜻
      • in과 out이 같다면 비어 있다는 뜻
    • while 문을 사용하여 위 내용을 처리할 수 있다.
    • 문제는 메모리의 낭비가 생긴다는 것이고, while문이 계속 돌기 때문에, cpu를 점유한다는 것이다.
profile
긍정적으로 살고 싶은 개발자

0개의 댓글