프로세스

2023. 9. 16. 03:55전공/운영체제

프로세스

프로세스란?

  • 프로그램에 대한 실행 인스턴스(running instance)
  • 실행 가능 파일(executable file)이 메모리에 적재(load)될 때 프로그램은 프로세스가 됨

멀티 프로세싱

  • 제한된 컴퓨팅 자원 하에 다수의 프로세스가 실행
  • CPU utilization(CPU이용률), User interaction(렉이 없는 즉각적인 서비스), Processing speed(처리 속도)

프로세스 적재

프로세스의 메모리 할당

  • 텍스트(text) : 프로세스 인스트럭션 코드
    • 프로세스를 처리할 수 있도록 하는 명령어들이 저장된 영역
  • 데이터(data) : 프로세스 데이터, 정적/전역 변수들
    • 프로그래밍이 프로세스로 시작될 때 할당되고 프로그램이 종료되면 할당 해제됨
  • 힙(heap) : 동적 메모리 할당(예: malloc())
    • 프로그램이 컴파일 된 후 런타임 시점에 값에 대한 저장이 이뤄짐
    • 메모리 주소의 낮은값에서 높은 값 방향으로 할당됨
  • 스택(stack) : 지역 변수, 함수 파라미터
    • 메모리 주소의 높은값에서 낮은 값 방향으로 할당됨

프로세스 상태

프로세스 5가지 상태

  • New : 프로세스가 생성되고 있음
    • storatge에 저장된 프로그램이 메모리에 적재되면서 프로세스로 운용되기 시작한 시점 또는 상태
  • Running : 프로세스의 인스트럭션이 실행되고 있음
    • Ready 상태에서 scheduler dispatch가 처리되면 프로세스가 Running상태가 된다.
    • CPU 자원을 할당 받아 프로세스가 처리되고 있는 상태
    • Running 상태에서 인터럽트가 발생하면 다시 Ready상태가 됨
  • Waiting : 프로세스는 특정 이벤트가 발생되기를 기다리고 있음
    • Running상태에서 입출력이나 별도의 이벤트가 발생했을 때 Waiting상태가 됨
    • 입출력이나 이벤트 처리가 완료되면 다시 CPU자원을 할당받아야 하므로 Ready상태가 되었다가 scheduler dispatch 처리에 의해 Running상태가 됨
  • Ready : 프로세스는 CPU에게 할당되기를 기다리고 있음
    • New 상태가 끝나고 프로세스가 대기 열에 삽입되면 → queue에 입력되면 Ready상태
  • Terminated : 프로세스는 실행 종료됨
    • 프로세스가 모든 작업을 끝내면 Terminated상태가 되며 메모리로부터 할당이 해제됨

프로세스 생성 및 종료

프로세스 생성(Process creation)

  • 부모 프로세스(parent process)
    • 프로세스를 생성하는 프로세스
  • 자식 프로세스(child process)
    • 부모 프로세스에 의해 생성되는 프로세스
  • systemd: 부팅시, 처음으로 생성되는 루트 프로세스
  • pid (process identifier) : 프로세스 구별용 변수

프로세스 종료(process termination)

  • 프로세스 종료 시 운영체제는 해당 프로세스에게 할당된 모든 자원을 해재함

프로세스 명령어

fork()

  • 부모 프로세스를 복제하여 자식 프로세스를 생성하기 위한 시스템 콜(system call)

exec()

  • 자식 프로세스의 메모리 공간을 새로운 프로그램으로 교체

wait()

  • 자식 프로세스가 종료(terminate)될 때까지 부모 프로세스를 대기

exit()

  • 프로세스 소스로 종료하기 위한 시스템 콜
  • 프로세스에 할당된 CPU자원이 운영체제에 의해 해제됨

abort()

  • 부모 프로세스에 의해 자식 프로세스를 종료하는 시스템 콜
  • 자식 프로세스가 CPU자원을 지나치게 사용하는 경우
  • 부모프로세스 자신이 종료(exit())되는 경우

프로세스 명령어 사용 예제

  • pid_t : 프로세스를 식별하기 위한 별도의 정수 타입(부모, 자식 식별)
  • (pid = fork()) < 0이라면 프로세스 생성 중 에러 발생
  • (pid = fork()) == 0 이라면 자식 프로세스
  • (pid = fork()) >0 이라면 부모 프로세스

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

CPU 스케쥴링  (0) 2023.09.16
저수준에서의 프로세스 관리  (0) 2023.09.16
리눅스  (0) 2023.09.16
컴퓨터 시스템과 운영체제  (0) 2023.09.16
운영체제의 개요 및 종류  (0) 2023.09.16