본문 바로가기
운영체제

02. Processes

by kwon5346 2024. 4. 3.
반응형

What is a Process?

  • 프로세스란 실행 중인 프로그램을 말한다.
  • 한 프로그램이 여러 processes가 될 수 있다.
  • 각각의 프로세스는 고유한 process ID(PID)가 있다.


From Program to Process

각각의 process는 고유한 address space를 가진다.

프로세스의 메모리 배치는 일반적으로 다음과 같은 section으로 구분된다. 각 섹션에는 다음이 포함된다.

  • Text section : 실행 코드
    • Program Counter($PC)라는 레지스터는 현재 실행 중인 명령어를 가리킵니다.
  • Data section : 전역 변수
  • Heap section : 프로그램 실행 중(run time)에 동적으로 할당되는 메모리
  • Stack section : 함수를 호출할 때 임시 데이터 저장장소(예: 함수 매개변수, 복귀 주소 및 로컬 변수)
    • Stack Pointer($SP)라는 레지스터는 함수의 변수와 리턴 주소를 저장하는 stack을 관리한다.



States of Process

프로세스는 실행되면서 그 상태가 변한다. 프로세스의 상태는 부분적으로 그 프로세스의 현재 활동에 따라서 정의된다. 프로세스는 다음 상태 중 하나에 있게 된다.

  • new : 프로세스가 생성 중이다.
  • ready : 프로세스가 processor에 할당되기를 기다린다.
  • running : 명령어들이 실행되고 있다.
  • blocked : 프로세스가 어떤 event(입출력 완료 등)가 일어나기를 기다린다.
  • exited : 프로세스의 실행이 종료되었다.



Process Hierarchy

  • 실행되는 동안 프로세스는 여러 개의 새로운 프로세스들을 생성할 수 있다.
  • 새로운 프로세스들은 각각 다시 다른 프로세스들을 생성할 수 있으며, 그 결과 tree를 형성한다.
  • 같은 parent process를 가지는 children을 Siblings라고 한다.



Process Creation

현대 운영체제들은 유일한 pid(프로세스 식별자)를 사용하여 프로세스를 구분하는데, 이 pid는 보통 정수이다.
pid는 시스템의 각 프로세스에 고유한 값을 가지도록 할당된다. 이 pid를 통하여 kernal이 유지하고 있는 프로세스의 다양한 attribute에 접근하기 위한 index로 사용된다.
새로운 process는 fork() system call로 생성된다.

  • fork()
    • 새로운 process는 원래 프로세스의 address space의 복사본으로 구성된다.
    • fork() 함수의 return value
      • fork() 실패시 부모 프로세스는 -1을 return 받는다.
      • 부모 프로세스는 자식 프로세스의 식별자를 return받는다.
      • 자식 프로세스는 '0'을 return 받는다.

Replace Process Image

fork() system call 다음에 두 프로세스(부모와 자식)중 한 프로세스가 exec() system call을 사용하여 자신의 메모리 공간을 새로운 프로그램으로 교체한다. exec() system call은 이진파일을 메모리로 load하고(이때 exec() system call을 포함하는 원래의 프로그램의 메모리 image를 파괴한다)그 프로그램을 실행한다.

  • exec() 계열 함수들을 통해 replace
  • exec()을 하고나면 기존 address space는 모두 버려지고 새롭게 다시 시작.


Process Termination

  • 프로세스가 exit() system call을 사용하여 운영체제에 자신의 삭제를 요청하면 종료한다.

    • 이 때, 프로세스는 wait() system call을 통해 자신을 기다리고 있는 부모 프로세스에게 status data를 return할 수 있다.
    • 프로세스의 모든 자원이 할당 해제되고 운영체제로 반납된다.
  • parent process에서 wait() 함수는 child process의 return 값을 받기 전까지 계속 blocked 상태에 있다.

  • child가 죽었지만 부모 프로세스가 wait()로 return 값을 회수하지 않으면 Zombie process가 된다.

  • parent가 wait()를 호출하지 않고 child보다 먼저 죽는 경우, tree구조에서 parent가 먼저 죽었으므로 연결이 끊기게 된다. 이때 남겨진 child process들을 Orphan process라고 부른다.



Implementing Processes

각 프로세스는 운영체제에서 PCB(Process control block 또는 task control block)에 의해 표현된다.
OS는 PCB를 활용해 process를 스케쥴링하거나 관리한다.
PCB는 특정 프로세스와 연관된 여러 정보를 수록하며, 다음과 같은 것들을 포함한다.

  • process state : new, running, ready ..etc
  • process number : PID, PPID ..
  • program counter : $PC는다음에 실행할 명령어의 주소를 가리킨다.
  • CPU registers
  • CPU scheduling information
  • Memory-management information
  • Accounting information
  • I/O status information


반응형

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

06. Process Scheduling(2)  (0) 2024.04.24
05. Process Scheduling  (0) 2024.04.24
04. Inter-Process Communication  (0) 2024.04.18
03. System Call  (10) 2024.04.03
01. Introduction to Operating Systems  (0) 2024.04.02