프로세스란?
1. 프로세스(Process)란?
프로세스는 메인 메모리에 할당되어 실행중인 상태인 프로그램이다. 프로그램은 일반적으로 하드디스크(보조기억장치)에 저장되어 아무 일도 하지 않는 상태이다. 프로세스의 stack, data, text, register 등의 값이 프로세스 실행 중에 계속 변하며 한 컴퓨터 내에서 여러 프로세스가 돌아갈 수 있다. 프로세스는 job, task 등으로 불린다.
2. 프로세스의 메모리 구조
프로세스의 주소 공간은 code, data, stack, heap 영역으로 구성된다.
이러한 공간을 가상 메모리(또는 논리적 메모리: logic memory)라고 부른다.
2-1 code 영역
사용자가 작성한 프로그램 함수들의 코드가 CPU에서 수행할 수 있는 기계어 명령 형태로 변환되어 저장되는 공간이다.
컴파일(compile) 타임에 결정되고 중간에 코드를 바꿀 수 없게 Read-Only로 되어있다.
실행할 프로그램의 코드가 저장되며, CPU는 이 영역에서 명령어를 하나씩 가져와 처리한다.
2-2 data 영역
전역 변수 또는 static 변수 등 프로그램이 사용하는 데이터를 저장하는 공간이다.
전역 변수 또는 static 값을 참조한 코드는 컴파일이 완료되면 data 영역의 주소값을 가르키도록 변한다. 전역변수가 변경 될 수도 있어 Read-Write로 되어있다.
2-3 heap 영역
동적 데이터 영역으로 프로그래머가 필요할 때마다 사용하는 공간이다.
메모리 주소 값에 의해서만 참조되고 사용되기 때문에 프로그램 동작 시(런타임)에 크기가 결정된다.
2-4 stack 영역
호출된 함수의 수행을 마치고 복귀할 주소 및 데이터(지역변수, 매개변수, 리턴값 등)를 임시로 저장하는 공간이다. 함수 호출 시 할당되고 함수 반환 시 소명된다. 컴파일 시 stack 영역의 크기가 결정되기 때문에 무한정 할당 할 수 없다. 따라서 재귀함수가 반복해서 호출되거나 함수가 지역변수를 메모리를 초과할 정도로 많이 가지고 있다면 stack overflow가 발생한다.
3. 프로세스의 상태(Process State)
<프로세스 상태>
- Create: 프로세스가 생성되는 단계
- Readey: 프로세스가 생성되어 주 기억장치에 적재되고, 실행하는데 필요한 자원을 모두 얻은 상태이다. Running 상태가 되기위한 모든 준비가 끝난 상태로 대기큐에서 대기중인 상태
- Running: 프로세스가 CPU를 점유하여 실행중인 상태
- Terminated: 프로세스가 종료되는 상태
- Asleep: 주기억장치에 적재는 되었지만 필요한 자원을 얻지 못한 상태
- Suspended Ready: 필요한 자원은 모두 얻었지만 주기억장치에 적재되지 못한 상태
- Suspended Blocked: 필요한 자원도 없고 주기억장치에도 적재되지 못한 상태
<상태 전이>
- Dispatch: 프로세스 스케줄러에 의해 결정된 우선순위에 따라 프로세스가 CPU를 점유하게 되는 상태
- Time out: 프로세스가 실행중이다가 제한된 시간을 다 소비하여 CPU 점유를 빼앗기는 상태
- Block: 실행중이던 프로세스가 외부 요인에 의해서 자원을 빼앗기는 상태
- Wake up: 프로세스가 자원을 할당받는 상태
- Swap in : 프로세스가 주기억장치에 적재되는 상태
- Swap out: 프로세스가 주기억장치에서 해제되는 상태
4. 프로세스 제어 블록(PCB: Process Control Block)
운영체제가 프로세스를 제어하기 위해 정보를 저장해 놓은 곳으로, 프로세스의 상태 정보를 저장하는 자료구조이다. 운영체제에서 프로세스는 PCB로 표현된다. 프로세스가 생성될 때마다 고유의 PCB가 생성되고, 프로세스가 완료되면 PCB도 함께 제거된다. 운영체제에 따라 PCB에 포함되는 항목이 다를 수 있지만, 일반적으로 다음과 같은 정보가 포함되어 있다.
- Pointer: 프로세스의 현재 위치를 저장하는 포인터 정보이다.
- Process State: 프로세스의 각 상태(New, Ready, Running, Waiting, Terminated)를 저장한다.
- Process Number: 모든 프로세스에는 프로세스 식별자를 저장하는 프로세스 ID 또는 PID라는 고유 한 ID가 할당된다.
- Program Counter: 프로세스를 위해 실행될 다음 명령어의 주소를 포함하는 카운터를 정장한다.
- Registers: 누산기, 베이스, 레지스터 및 범용 레지스터를 포함하는 CPU 레지스터에 있는 정보이다.
- Memory Limits: 운영 체제에서 사용하는 메모리 관리 시스템에 대한 정보가 포함된다. 페이지 테이블, 세그먼트 테이블 등이 포함될 수 있다.
- Open File Lists: 프로세스를 위해 열린 파일 목록이 포함된다.
운영체제는 빠르게 PCB에 접근하기 위해 프로세스 테이블을 사용하여 각 프로세스의 PCB를 관리한다.
5. Queue
프로세스는 수행하면서 상태가 여러 번 변하는데 이에 따라 서비스를 받아야하는 곳이 다르다. 그리고 프로세스는 일반적으로 여러 개가 한 번에 수행되므로 그에 따른 순서가 필요하다. 이러한 순서를 대기하는 곳을 큐(queue)라고 부른다.
- Job Queue: 하드디스크에 있는 프로그램이 실행되기 위해 메인 메모리의 할당 순서를 기다리는 큐이다.
- Ready Queue: CPU 점유 순서를 기다리는 큐이다.
- Device Queue: I/O를 하기 위한 여러 장치가 있는데, 각 장치를 기다리는 큐가 각각 존재한다.
위와 같이 여러 큐가 존재하는데, 각 큐 내부에 저장된 실제 데이터는 각 프로세스의 PCB가 저장되어 있다. 그리고 이러한 순서를 기다리는 공간이 있다면 이 순서를 정해주는 알고리즘이 있어야 한다.
6. 프로세스 스케줄링(Process Scheduling)
CPU를 사용하려고 하는 프로세스들 사이의 우선 순위를 관리하는 일로 처리율과 CPU 이용률을 증가시키고, 오버헤드/응답시간/반환시간/대기시간을 최소화 시키기 위한 기법이다. 즉, CPU가 쉬지않고 계속 열심히 일할 수 있도록 효율적인 계획을 잡아주는 것이다.
장기(Long-term scheduling)
어떤 프로세스가 시스템의 자원을 차지할 수 있도록 할 것인가를 결정하여 Ready 상태 큐로 보내는 작업을 의미한다. 상위 스케줄링이라고도 하며, 작업 스케줄러에 의해 수행된다. 수행 빈도는 적고, 느리다.
중기(Middle-term scheduling)
어떤 프로세스들이 CPU를 할당 받을 것인지 결정하는 작업을 의미한다. CPU를 할당받으려는 프로세스가 많을 경우 프로세스를 일시 대기(Waiting)시킨 후 활성화해서 일시적으로 부하를 조절한다. swap in(메모리 남으면)/out(메모리 부족)을 결정한다.
단기(Short-term scheduling)
프로세스가 실행되기 위해 CPU를 할당받는 시기와 특정 프로세스를 지정하는 작업을 의미한다. 프로세서 스케줄링, 하위 스케줄링이라고도 한다. 프로세서 스케줄링 및 문맥 교환은 프로세서 스케줄러에 의해 수행한다. 자주 수행되고 빠르다.
참고링크
프로세스 스케줄링, 그리고 기법
도커에서 프로세스 스케줄링 하다가 이전에 정처기에서 학습했던 선점/비선점 스케줄링에 대한 이해도 떨어지는 것 같아 정리할 겸 글을 남긴다.
velog.io
[운영체제(OS)] 5. 프로세스 관리
1. 프로세스(Process) 프로세스는 메인 메모리에 할당되어 실행중인 상태인 프로그램을 말한다. 프로그램은 일반적으로 하드디스크(보조기억장치)에 저장되어 아무 일도 하지 않는 상태이다. 프로
velog.io
프로세스 제어 블록 (PCB: Process Control Block) 알아보기
프로세스 제어 블록 (PCB: Process Control Block) 알아보기 PCB(Process Control Bolock)는 운영체제가 프로세스를 제어하기 위해 정보를 저장해 놓는 곳으로, 프로세스의 상태 정보를 저장하는 자료구조입니
yoongrammer.tistory.com
[OS] 프로세스 메모리 구조 (코드, 데이터, 스텍, 힙)
프로세스 메모리 구조 (코드, 데이터, 스텍, 힙) 프로그램의 실행 프로그램의 실행은 두가지 중요한 의미를 가진다. 파일 시스템에 존재하던 실행파일이 메모리에 적재된다는 의미 프로그램이 CP
zangzangs.tistory.com
프로세스 상태 전이도 ( Process State Diagram )
프로세스 상태 전이도 ( Process State Diagram ) 프로세스(Process)란? 보조 기억장치에 있던 프로그램이 주기억장치에 적재되어 실행중일때 이를 프로세스라고 한다. 쉽게 말해서 실행중인 프로그램을
junsday.tistory.com