Nick Dev

[운영체제] 02. Processes 본문

CS

[운영체제] 02. Processes

Nick99 2023. 6. 30. 16:13
반응형

해당 내용은 아주대학교 '김상훈' 교수님의

'운영체제' 수업을 바탕으로 작성되었습니다.


[목차]

  1. Process란?
  2. Program → Process
  3. 프로세스의 5가지 상태
  4. Process Hierarchy
  5. Process Creation - fork() 
  6. Replace Process Image - exec()
  7. Process Termination
  8. Process 구현

1. Process란?

  • 실행 프로그램의 instance
  • 각 프로세스는 고유한 ID가 있다 (PID)

2. Program → Process 

  • disk에 저장된 Program의 code와 data는 main memory로 가져와야 실행할 수 있다
  • PC(Program Counter) : 프로그램에서 어느 명령어가 실행 중인지 가리키는 register
  • SP(Stack Pointer) : 함수의 변수와 리턴 주소를 저장하는 스택을 관리하는 register
  • 각 프로세스는 고유한 address space가 주어진다
  • 프로세스는 이 address space의 주소만 접근할 수 있다.

address space


3. 프로세스의 5가지 상태

  • new : process가 새로 생긴 상태
  • ready : processor에게 할당되기를 기다리는 상태
  • running : instruction이 실행되고 있는 상태
  • blocked : 특정 event가 일어나기를 기다리는 상태
  • exited : 실행이 끝난 상태

state of process


4. Process Hierarchy

  • 한 프로세스가 또다른 프로세스를 생성할 수 있다.
  • parent와 child의 관계가 형성되어 결국 프로세스 간의 관계를 tree 구조처럼 나타낼 수 있다

5. Process Creation - fork() 

  • 새로운 프로세스를 만들 때 현재 프로세스를 cloning해서 만든다
  • 결국 child process는 parent의 address space를 duplicate 한다
  • (사실 내용을 전부 복사하지 않고 memory를 share하는 방식으로 mapping만 복사한다)
  • fork() 함수를 통해 현재 프로세스에서 새로운 프로세스를 만들 수 있다
  • 다음은 fork() 함수의 리턴 값이다.
    • parent process는 새로 생성된 child process의 PID를 return 받는다
    • 새로 생긴 child process는 0을 return 받는다
    • fork() 실패시 parent process에게 -1 을 return
parent child's PID
child  0
fail -1

6. Replace Process Image - exec()

  • 현재 프로세스의 image를 새로운 process image로 Replace
  • exec() 계열 함수들을 통해 replace
  • exec() 하고나면 기존 address space는 모두 사라지고 새롭게 다시 시작

7. Process Termination

  • process가 죽으면 PID와 status information을 return한다
  • 이 return 값을 parent가 wait() 함수를 통해 받아줘야 된다
  • parent process에서 wait() 함수는 child process의 return 값을 받기 전까지 계속 blocked 상태에 있다
    • 만약 child process가 죽었지만 아무도 wait() 함수로 return 값을 회수하지 않으면 이 process는 'Zombie' process가 된다
    • 만약 parent가 wait() 함수를 호출하지 않고 child 보다 먼저 죽는 경우, tree 구조이기에 parent process가 먼저 죽으면 tree 연결이 끊기게 된다. 이렇게 남겨진 child process들을 'Orphan' process라고 한다.
  • Orphan process 해결 방법 2가지
    • Cascading termination : parent가 죽으면 딸려 있는 children 모두 terminate ( network에서 주로 사용 )
    • Reparenting : orphan process들을 모두 Init process로 입양 보낸다.
      • Init process로 입양 보내는 이유 : Init process는 초기 process로, 주기적으로 wait() 함수를 호출해주기 때문이다.

8. Process 구현

  • PCB(Process Control Block)
    • process와 관련된 정보를 저장하는 자료구조
    • OS는 PCB를 활용해 process를 스케줄링하거나 관리한다
    • 대략적인 PCB에 포함된 내용과 구조 


반응형