Keep going

프로세스 연산 본문

School/운영 체제

프로세스 연산

코딩천재홍 2021. 4. 14. 00:44

프로세스 연산

  • 프로세스 생성
  • 프로세스 종료
  • 프로세스 정보 가져오거나 프로세스에 대한 정보를 값으로 지정하거나......

 

프로세스 생성

  • 프로세스가 다른 프로세스 만든다.
  • 프로세스들은 부모 - 자식 관계인 tree 구조다.
  • 시스템 내부에서 각 프로세스는 고유한 번호 (pid) 부여 받는다. → 운영체제는 pid로 구별한다.

 

한 프로세스가 다른 프로세스를 만들 때 고려할 상황(resource)

  • p1이 어떤 자원사용하고 있는데 p2를 만들려면 p1이 쓰고 있는 자원 어떻게 될까?
    • p1이 사용하고 있는 모든 자원을 p2와 공유해서 같이 사용
    • p1이 사용하고 있는 자원에 일부만 가지고 p2가 사용
    • p1는 자기 것 사용하고 p2는 자원 따로 할당 받아서 사용
  • 실행
    • p1이 p2 만들었을 때 p1 중지되고 p2 실행
    • 둘이 같이 실행되게 만들수도 있음
  • p1이 p2 만들 때 p2는 main memory 구조가 어떻게 되느냐
    • 부모 main memory 모양을 그대로 복사하는 방법
    • 자식이 실행할 명령어 주게 되면 자식이 그 명령어 가져와서 main memory를 새로 만든다.
      • 부모가 p2를 만들 때 a라는 명령어 주게되면 a라는 명령어 읽어와서 새로 main memory 구조를 만들 수 있음

 

Unix

  • unix에서 시스템 켜지면, 운영체제가 실행되기 시작하고 운영체제가 실행이 되면서부터 프로세스 만들기 시작함
  • init 하는 process (pid =1)
  • 시스템 부팅 터미널마다 login이라는 process 만듬
  • 사용자 id, pwd 치게 되면 login process가 사용자 shell process 줌 (born another shell)
  • shell에서 명령어 치면 프로세스 만듬
  • sshd - remote으로 login 할 때 service shell 돌리기 위해서 만들어진 process

 

  • fork()
    • 부모와 똑같이 생긴 process 만듬 (main memory 구조, text, data 등 ...)
    • 같은 program 2개 (부모와 똑같은 process copy)
  • exec() 
    • 자식을 생성한 후 자식이 부모와 똑같은 프로그램하면 별 의미 없으므로 자식의 메모리 구조를 다른 프로그램으로 덮어씀 
    • 자식은 부모와 다른 program 실행

 

  • fork로 부모와 똑같은 program copy
  • exec 실행하면서 자기 자신의 이미지를 다른 걸로 바꾸고 실행
  • 실행하다가 부모가 자식 기다리고 있었다면 exit 하면서 부모에게 notify → 기다리고 있는 부모 깨어나서 재개

 


프로세스 종료

  • 프로세스가 스스로 나가는 상황 (exit)
    • 자식이 exit 이라는 system call 사용하게 되면 일반적으로 부모한테 자신의 process 상태를 전달하게 된다.
    • 운영체제는 process가 갖고있던 모든 자원 (file, memory) 회수
  • 외부에서 다른 프로세스가 종료시키는 경우 (abort)
    • abort 시키는 이유
      • 자식의 일이 더 이상 필요 없을 때 자식을 중단
      • 자식이 뭘 잘못해서 너무 많은 자원을 사용할 때 
      • 자식이 실행되고 있는데 부모가 끝나버려서 (부모없는 process는 실행 안되는 system에서) 운영체제가 강제 종료
    • 어떤 프로세스가 다른 프로세스를 함부로 abort 시킬 수 있다면 문제다.
      • 문제 방지하기 위해서 process는 abort 시킬 수 있는 것은 자기 자신이나 부모 process 만 종료시킬수 있는 제약 보통 존재
  • 부모 종료 → 부모 없는 process가 생기면 운영체제에서 2가지 방법
    • 다른 process한테 양자를 입양시키는 방법
      • unix init한테 부모없는 process들을 입양 시킴
    • 부모 없는 process 실행 하지 않는 방법
      • 운영체제가 다 중단 시키기 → 중첩 종료 일어난다. cascading termination
  • 자식이 종료되었을 때 
    • 부모가 wait 하고 있었다면 아무 문제 없다.
    • 만약 부모가 wait 하고 있지 않았다면 부모가 다른일 (자기 일) → 자식은 좀비 process
      • process 끝날 때 상태 정보(pcb의 종료코드만) 남아 있음 → pcb 상태 정보를 부모가 가지고 가면 없앨 수 있지만 부모가 가지고 가지 않으면 없앨 수 없음
    • 가지고 가지도 않고 부모가 끝나버린 상황 - 가지고 갈 부모가 없다. → orphan process
      • 운영체제가 주기적으로 정리하든지, pcb 해제하든지 , init 한테 입양시켜서 wait 하게 만들어주기

'School > 운영 체제' 카테고리의 다른 글

스레드  (0) 2021.04.14
프로세스 간 통신 (Interprocess communication)  (0) 2021.04.14
프로세스 스케줄링  (0) 2021.04.13
프로세스  (0) 2021.04.12
운영체제 디버깅  (0) 2021.04.12
Comments