[운영체제] 프로세스 관리 Process Management

장현수·2023년 6월 12일
0

운영체제

목록 보기
6/11

프로세스 생성 Process Creation

  • 부모 프로세스가 자식 프로세스를 생성(여러 자식 복제)
  • 프로세스의 트리(계층구조) 생성
  • 프로세스의 실행을 위해 필요한 자원
    - 운영체제로부터 받는다
    • 부모 프로세스와 공유한다

복제 = 문맥을 복제한다

주소공간

  • 자식은 부모의 공간을 복사함
  • 자식은 그 공간에 새로운 프로그램을 올림
  • fork() : 복제 생성 시스템 콜
  • exec() : 복제 생성 후 다른 프로그램으로 덮어씌우는 시스템 콜

Copy-On-Write (COW)

  • write가 발생하기 전에는 복제하지 않음
  • write 발생 = 내용이 바뀌는 것
  • write가 발생하면 부모와 공유하지 않는다

fork() 시스템 콜

  • 복제된 자식 프로세스는 fork() 함수 이후부터 실행
  • 부모 프로세스의 문맥을 복제 -> program counter도 복제, 부모 프로세스에서 가리키고 있던 pc가 fork() 이후이기 때문에 자식프로세스는 거기부터 실행한다.

부모 프로세스와 자식 프로세스의 구분

  • 부모 프로세스의 fork() return값 : 양수 (>0)
  • 자식 프로세스의 fork() return값 : 0
  • error 값 : -1 (음수)

따라서 서로 다른 일을 하게 할 수 있다.

exec() 시스템 콜

  • 어떤 프로그램을 완전히 새로운 프로세스로 태어나게 함
  • exec()시스템 콜을 만나면 기존 함수를 잊고 시스템콜 안에 있는 함수를 실행
  • 다시 기존 코드로 돌아올 수 없음 -> exec()이후의 코드는 영원히 실행되지 않는다
  • 반드시 자식을 만들고 exec()해야하는 것은 아님(fork()하지 않고 exec()할 수 있음)

프로세스 수행 Process Execution

wait() 시스템 콜

  • 자식이 종료될때까지(terminate) 부모가 기다리는(wait = blocked) 모델

    부모 프로세스가 wait() 시스템 콜을 호출하면
    커널은 자식 프로세스가 종료될 때까지 부모 프로세스를 sleep시킨다

  • 부모 프로세스는 자식 프로세스가 종료될 때까지 block상태
  • 자식 프로세스가 종료되면 커널은 부모 프로세스를 깨운다
  • 부모 프로세스가 blocked상태에서 ready상태로 바뀌면서 CPU를 얻을 수 있게 됨

프로세스 종료 Process Termination

exit() 시스템 콜

자발적 프로세스 종료

  • 마지막 statement 수행 후 exit()시스템 콜을 통해 프로세스 종료
  • 프로그램에 명시적으로 적어주지 않아도 main 함수가 리턴되는 위치에 컴파일러가 넣어줌
  • 자식이 부모에게 output data를 보냄
  • 프로세스의 각종 자원들이 운영체제에게 반납됨

비자발적 프로세스 종료

  • abort() : 부모 프로세스가 자식의 수행을 종료시키는 시스템 콜
  • 자식이 할당 자원의 한계치를 넘어서는 경우
  • 자식에게 할당된 태스크가 더 이상 필요하지 않은 경우
  • 키보드로 kill, break 등을 친 경우
  • 부모가 종료(exit)하는 경우
  • 운영체제는 부모 프로세스가 종료하는 경우 자식이 더 이상 수행되도록 두지 않는다
  • 단계적인 종료 : 부모 프로세스가 종료하기 전에 자식들이 먼저 종료됨

프로세스 간 협력

독립적 프로세스 Independent process

  • 기본적으로 프로세스는 각자의 주소공간을 가지고 수행되므로 원칙적으로 하나의 프로세스는 다른 프로세스의 수행에 영향을 미치지 못함

협력 프로세스 Cooperating process

  • 경우에 따라 프로세스 협력 메커니즘을 통해 프로세스가 다른 프로세스의 수행에 영향을 미칠 수 있음

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

message passing

  • 메시지를 전달하는 방법
  • 커널을 통해 메시지 전달; 프로세스는 독립적이기 때문에 서로 직접 메시지 전달 불가

Message System

  • 프로세스 사이에 공유변수(shared variable)를 일체 사용하지 않고 통신하는 시스템

Direct Communication

  • 통신하려는 프로세스의 이름을 명시적으로 표시

Indirect Communication

  • mailbox(또는 port)를 통해 메시지를 간접 전달

shared memory

  • 주소 공간을 공유하는 방법
  • 서로 다른 프로세스 간에도 일부 주소공간을 공유하게 하는 메커니즘
  • 역시 프로세스간 직접 주소공간 공유는 불가. 커널에 시스템콜을 통해 구현

thread

  • 스레드는 사실상 하나의 프로세스이므로 프로세스간 협력으로 보기는 어려움
  • 하지만 동일한 프로세스를 구성하는 스레드들 간에는 주소 공간을 공유하므로 협력이 가능
profile
개같이 발전하자 개발

0개의 댓글