프로세스 (Process)

yeoro·2021년 5월 31일
0

운영체제

목록 보기
1/2
post-thumbnail

프로그램 (Program)

프로그램은 작업을 수행하기 위해 컴퓨터에 제공되는 일련의 명령어들의 모음이다.

프로그램은 보조기억장치(디스크)에 저장되어 있고 엑셀, 메모장 같은 실행파일일 수 있으며 컴파일된 결과물뿐만 아니라, 프로그래머가 작성한 소스코드까지도 포함한다.

void main() {
	System.out.println("Hello World");
}

위의 소스코드는 자바로 작성된 간단한 프로그램이다.


프로세서 (Processor)

프로세스가 동작할 수 있도록 하는 하드웨어(CPU)이다.

동작

1. 사용자가 단축 아이콘 혹은 콘솔에서 프로그램을 실행한다.
2. 파일로 저장된 프로그램은 메모리에 로더(Loader)에 의해 적재(Load)되고 처음으로 실행해야 할 기계어 코드가 저장된 메모리의 주소를 CPU의 명령주소 레지스터(IP, Instruction Register, 프로그램 카운터)에 저장한다.
3. 프로세서는 IP 레지스터가 가리키는 메모리의 주소에서 실행할 명령어를 인출하여 명령 레지스터(IR, Instruction Register)에 저장한다.
4. IR에 저장된 명령을 실행하고 IP에 다음번에 실행할 명령어가 있는 주소를 저장한다.
5. 3~4번 과정을 프로그램이 끝날 때까지 반복한다.


프로세스 (Process)

정의

디스크로부터 메모리에 적재(Load)되어 시스템 자원을 할당받아 실행되고 있는 프로그램의 인스턴스(독립적인 개체)이다.

즉, 실행 중인 프로그램을 의미하며, 작업(Job) 또는 태스크(Task)라고도 한다.

구조

프로세스는 CPU로부터 독립된 메모리 영역을 할당받는다.
메모리 영역의 구조는 스택, 힙, 데이터, 코드(텍스트)로 이루어져있다.

1. Stack

지역변수, 매개변수, 리턴값 등 잠시 사용되었다가 사라지는 임시 데이터를 저장하는 곳이다.
따라서 함수 호출 시 할당되고 함수 반환 시 소멸된다.

정수, 실수, 논리형의 변수 등 크기가 정해져있는 타입을 저장한다. 따라서 메모리 할당 시(컴파일)에 크기가 결정된다. 영역을 초과하면 Stack Overflow 에러가 발생한다.

  • 장점
    정적 할당된 메모리는 실행 도중에 해제되지 않고, 프로그램이 종료할 때 알아서 운영체제가 회수한다.

  • 단점
    메모리의 크기가 하드 코딩되어 있어 나중에 조절할 수 없다. 동적 할당에 비해 받을 수 있는 최대 메모리에 제약이 있다.

2. Heap

동적으로 할당되는 데이터가 저장되는 곳이다. 메모리 주소 값에 의해서만 참조되고 사용되는 영역이다.

배열, 클래스, 인터페이스 등 크기가 정해져있지 않은 참조 타입을 주소형식으로 저장한다. 따라서, 프로그램 동작 시(런타임)에 크기가 결정된다.

  • 장점
    상황에 따라 원하는 크기 만큼의 메모리가 할당되어 경제적이고, 이미 할당된 메모리라도 크기 조절이 자유롭다.

  • 단점
    더 이상 사용하지 않을 때 명시적으로 메모리를 해제해야 한다. 자바의 경우는 GC를 통해 이 단점을 보완하였다.

3. Data

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

  • Uninitialized data (BSS, Block Stated Symbol) : 초기화되지 않은 변수가 저장된다.
  • Initialized data : 초기화 된 변수가 저장된다.

초기화 된 변수는 비휘발성 메모리인 ROM에 저장되는데, 이 부분은 비용이 많이 들어 RAM에 저장될 것과 ROM에 저장될 것을 구분하기 위해 영역을 나누어 사용한다.

4. Code(Text)

실행할 프로그램의 코드가 저장되는 곳이다. CPU는 이 영역에 저장된 명령어를 하나씩 가져와 처리한다. 코드를 바꿀 수 없게 Read-Only로 지정되어 있다.

특징

  • 프로세스는 기본적으로 메인 스레드를 포함하여 최소 1개의 스레드를 가진다.
  • 각 프로세스는 별도의 주소 공간에서 실행되며, 독립된 메모리 영역을 할당받는다.
  • 한 프로세스가 다른 프로세스의 변수 및 자료구조에 접근하기 위해서는 프로세스 간의 통신(IPC, Inter-Process Communication)이 필요하다.

상태

프로세스들은 실행되면서 5가지 상태 변화를 겪는다.

1. New

프로세스를 생성하기 위해 프로그램이 보조기억장치에 있는 상태이다.

2. Ready

프로그램이 메인 메모리에 적재되어 프로세스가 된 상태이다. CPU에 의해 실행되기를 기다리고 있는 상태이며 Ready 상태인 프로세스들은 큐에서 대기하고 있다.

3. Running

CPU가 해당 프로세스를 실행한 상태이다.

4. Wating (Block)

프로세스가 입출력완료, 시그널 수신 등 어떤 사건(Event)을 기다리고 있는 상태이다.

5. Terminated

프로세스가 완전히 종료된 상태이다.

상태 전이

1. Dispatch (Ready → Running)

여러 프로세스들 중 한 프로세스를 선정하여 CPU에 할당하는 과정이다.

2. Interrupt (Running → Ready)

할당된 CPU 시간이 지나면 Timeout Interrupt가 발생하며 CPU를 다른 프로세스에게 양보하고 자신은 Ready 상태로 전이되는 과정이다.

3. Block (Running → Waiting)

I/O 등의 자원 요청 후 즉시 할당받을 수 없는 경우, 할당받을 때까지 기다리기 위해 상태가 전이되는 과정이다.

4. Wakeup (Waiting → Ready)

필요한 자원이 할당되어 Waiting에서 Ready 상태로 전이되는 과정이다.


[참고]

0개의 댓글