운영체제

[운영체제] 프로세스(프로세스 메모리, PCB)

prefer2 2021. 8. 24. 18:01

프로세스 vs 프로그램


프로그램 자체는 생명이 없습니다. 프로그램은 보조 기억장치(하드디스크, SSD)에 존재하며 실행되기를 기다리는 명령어(코드)와 정적인 데이터의 묶음입니다. 이 프로그램의 명령어와 정적 데이터가 메모리에 적제되면 생명이 있는 프로세스가 됩니다.

즉, 프로세스란 실행중인 프로그램을 말합니다.

프로그램

컴파일한 코드와 초기화 전역변수, 문자열과 문자열 상수 등 정적 데이터를 포함하는 정적인 개체.

프로세스

프로그램 카운터나 레지스터처럼 현재 어떤 자원을 사용하는지 관련 정보가 들어있는 동적인 개체.

 

프로세스 메모리 구조


stack

지연변수, 매개변수, 리턴값 등 잠시 사용되었다가 사라지는 데이터를 저장하는 영역입니다. 함수 호출 시 할당되고 함수 반환 시 소멸됩니다. 로드 시(컴파일 타임) 크기가 결정됩니다.

heap

동적 데이터 영역입니다. 메모리 주소 값에 의해서만 참조되고 사용되는 영역입니다. 따라서, 프로그램 동작 시(런타임)에 크기가 결정됩니다.

예를 들어, stack에서 pointer 변수를 할당하면 pointer가 가리키는 heap 영역의 임의의 공간부터 원하는 크기만큼 할당해 사용하게 됩니다.

data

전역변수와 정적변수가 저장됩니다. 이 변수들은 프로그램이 시작될 때 할당되어 프로그램 종료 시 소멸됩니다.

 

+) 더 자세히 들어가면 BSS(Block Stated Symbol) 영역이 있습니다. 이 영역에는 초기화 되지 않은 전역변수(static 변수)가 저장됩니다. 초기화 된 전역변수는 Data 영역에 저장되어 비휘발성 메모리인 ROM에 저장되는데 이 부분은 비용이 많이 들어 RAM에 저장될 것과 ROM에 저장될 것을 구분하기 위해 영역을 구분해 사용합니다.

text

실행할 프로그램의 코드가 저장됩니다. CPU는 이 영역에서 명령어를 하나씩 가져와 처리하게 됩니다.

 

PCB(프로세스 제어 블록)


운영체제가 프로세스를 제어하기 위해 정보를 저장해 놓는 곳으로, 프로세스의 상태 정보를 저장하는 구조체.

프로세스 상태 관리와 문맥교환(Context Switching)을 위해 필요.

PCB는 프로세스 생성 시 만들어지며 주기억장치에 유지.

운영체제마다 다를 수 있지만 대체로 아래 그림과 같은 정보들이 저장됩니다.

  • 포인터: 프로세스의 현재 위치를 저장하는 포인터 정보입니다.
  • 프로세스 상태: 프로세스의 각 상태 (생성(New), 준비(Ready), 실행(Running), 대기(Waiting), 종료(Terminated))를 저장합니다.
  • 프로세스 번호(PID): 모든 프로세스에는 프로세스 식별자를 저장하는 프로세스 ID 또는 PID라는 고유 한 ID가 할당됩니다.
  • 프로그램 카운터: 프로세스를 위해 실행될 다음 명령어의 주소를 포함하는 카운터를 저장합니다.
  • 레지스터: 누산기, 베이스, 레지스터 및 범용 레지스터를 포함하는 CPU 레지스터에 있는 정보입니다.
  • 메모리 제한: 이 필드에는 운영 체제에서 사용하는 메모리 관리 시스템에 대한 정보가 포함됩니다. 여기에는 페이지 테이블, 세그먼트 테이블 등이 포함될 수 있습니다.
  • 열린 파일 목록: 이 정보에는 프로세스를 위해 열린 파일 목록 이 포함됩니다.

참조

프로세스 메모리 구조

프로세스 제어 블록 (PCB: Process Control Block) 알아보기

반응형