프로세스란?

Deagwon Bu·2021년 12월 4일
0

System Programing

목록 보기
1/4
post-thumbnail

리눅스의 ps -ef이라는 명령어는 현재 실행중인 프로세스의 목록과 상태를 보여준다. 이 명령어를 통해서 지금 컴퓨터가 CPU자원을 어디에 쓰고 있는지 확인할 수 있다. 그렇다면 이 프로세스라는 것은 무엇일까?

0. 프로그램이란?

먼저 프로그램에 대해서 정의하자.

Computer Program은 소스코드의 인간이 이해할 수 있는 형태이다.
wikipedia

Program은 특정 함수를 수행하기위해 컴퓨터가 사용하는 명령들의 집합이다.
webopedia

여러 글들을 읽어보면 결국 프로그램은 컴퓨터가 특정 동작을 수행하기위해 작성된 실행가능한 코드을 의미한다.

1. 프로세스란?

Process란 하나 혹은 그 이상의 Thread로 실행되는 컴퓨터 프로그램의 instance이다. Process는 Program code와 그 activity를 포함한다.
wikipedia

프로세스는 가상 메모리 공간, 코드, 데이터, 시스템 자원의 집합이다.
microsoft

프로세스는 운영체제가 프로그램을 실행하기 위해 필요한 가장 작은 단위의 쓰레드, 메모리, 소스코드들의 집합이며 프로그램 동작 그 자체를 의미한다. 운영체제는 "프로세스"를 작업의 단위로 보고 자원들을 작업(프로세스)들에 적절하게 분배한다.

2. Process의 상태 (Process States)

  • New
    - 프로세스가 생성되는 도중의 상태이다.
  • Ready
    - 프로세스(process)가 생성된 후, 프로세서(processor)에 할당되기를 기다리는 상태이다.
  • Runing
    - instruction이 실행되는 상태이다.
    • 프로세서(processor)에 할당되어 있다.
  • Wait
    - process가 특정 이벤트(I/O완료, 특정 신호 수신)을 기다리는 상태이다.
    • 프로세서(processor)에 할당되어 있지만 프로세서의 클락을 낮추거나 일시적으로 멈춤으로써 에너지 소비를 줄일 수 있는 상태이다.
  • Terminated
    process 종료된 상태

3. 프로세스의 구성

프로세스 메모리(Process Memeory)

운영체제는 프로세스 마다 고유의 가상 메모리공간을 제공한다. 이러한 메모리 공간은 다시 data section, text section, stack/heap section등 으로 세분화된다.

  • Stack
    • 매개변수, 지역변수, return 주소 등과 같은 데이터를 저장하는 영역이다.
    • 컴파일러에 의해 Run Time 도중 크기가 결정되며, 함수가 호출&종료 되는 시점에 생성&제거된다.
  • Heap
    • new, delete, malloc, free 등을 호출하여 데이터를 저장&관리하는 영역
    • Run time에 크기가 결정
  • Data Section
    • 사전에 선언된 데이터가 저장되는 영역 (global static variables, etc)
    • Compile time에 크기가 결정된다.
    • 내부에서 DATA & BBS 영역으로 구분된다.
    • initialized data section : 초기화된 전역 변수가 저장되는 영역(DATA)
    • uninitialized data section : 초기화되지 않은 전역 변수가 저장되는 영역(BBS)
  • Instruction(Text Section)
    • 컴파일된 기계어가 저장되는 영역
    • Compile time에 크기가 결정된다.

Process Control Block (PCB)

Process 마다 현재 상태를 하나의 데이터 구조에 저장하여 관리하는데, 이를 Process Control Block(PCB)라고 부른다. 이러한 PCB는 다른 프로세스들이 쉽게 접근할 수 없고, Kernel영역에 저장된다.

이화여자대학교 반효경교수님의 "운영체제와 정보기술의 원리"를 인용하면,

... 운영체제도 하나의 프로그램이므로 운영체제 커널 역시 코드, 데이터, 스택의 주소 공간 구성을 가진다. ... 커널의 데이터 영역에는 각종 자원을 관리하기 위한 자료구조가 저장된다. ... 커널의 데이터 영역 내에는 각 프로세스의 상태, CPU 사용 정보, 메모리 사용정보 등을 유지하기 위한 자료구조인 PCB를 두고 있다. ...(중략)

Process Control Block은 커널의 데이터 영역 내에 존재한다.

이러한 PCB에는 구체적으로 다음과 같은 정보들이 저장되어 있다.

  • 현재 Process State
    New, Ready, Wait, Running, Terminated

  • Process ID, Parent Process ID

  • CPU registers
    프로세스의 레지스터 상태를 저장하는 공간

  • Program Counter
    프로세스에서 실행되야할 다음 instruction의 주소

  • CPU Scheduling 정보
    CPU Scheduling에 필요한 우선순위 및 scheduling queues의 pointer

  • Memory 관리 정보
    프로세스 내부에서 사용되는 메모리주소를 실제 물리적 메모리 주소로 변환하는데 필요한 테이블 데이터
    ex)

    • 페이지 테이블
      페이징 프로세스의 메모리 주소를 관리할 때 프로세스의 페이지 정보({페이지 번호: 페이지에 해당하는 데이터의 실제 물리 주소})를 저장하고 있는 테이블이다.
    • 세그멘트 테이블
      프로세스를 논리적내용으로 잘라 메모리에 배치하는 방식을 세그멘테이션이라고 한다. 세그멘트 테이블은 이 세그멘트들의 실제 물리적 메모리 주소 정보를 담고 있다.((base: , limit)쌍으로 이루워졌다.)
  • Accounting 정보
    process 를 실행한 user의 정보.

  • I/O 상태 정보
    process에 할당된 물리적 장치 및 프로세스가 읽고 있는 파일에 관한 정보.

    PCB는 현재 프로세스가 instruction의 어떤 곳 까지 실행하였는지, register에는 어떤 값들이 저장되어 있는지 등 현재 시점의 모든 상태를 가지고 있다.
    따라서 운영체제의 scheduler가 현재 프로세스를 정지하고 다른 프로세스를 Dispatch하기 전에 현재 프로세스의 상태를 PCB에 저장한다면,
    다시 원래 프로세스의 실행 순서가 돌아 왔을 때, 이전에 하던 작업을 PCB를 통해 그대로 복원할 수 있다.

    Reference

0개의 댓글