반응형

 

🚀 프로세스의 개념

운영체제에서 프로세스는 일련의 작업 단위입니다. 프로그램은 파일이 저장장치에 저장되어 있지만 메모리에는 올라가 있지 않은 정적인 상태이며, 이러한 프로그램을 실행시켜 운영 체제로부터 CPU를 할당받고 실행되고 있는 상태를 바로 프로세스라고 합니다.

  • 메모리에 올라와 실행되고 있는 프로그램
  • 실행 중인 프로시저
  • 운영 체제로부터 시스템 자원을 할당받는 작업의 단위
  • 운영체제에 들어있는 프로세스 제어 블록

즉, 프로세스실행 중인 프로그램을 의미하며, 프로그램이 실행 중이라는 것은 디스크에 저장되어있던 프로그램을 메모리에 저장한 뒤 운영체제의 CPU 제어권을 받을 수 있는 상태가 된 것을 의미합니다.

 

 

🧱 프로세스 메모리 구조

프로세스는 아래와 같이 스택, 힙, BSS, 데이터, 코드로 구성되어 있습니다.

 

  • OS Kerner Space : 드라이버 설치
  • Stack : 지역변수, 매개변수, 후입 선출(LIFO) 방식, 높은 주소에서 낮은 주소의 방향으로 할당됨
  • Heap : 동적 메모리(new), 선입선출(FIFO) 방식, 낮은 주소에서 높은 주소의 방향으로 할당됨
  • BSS : Block Started by Symbol, 초기화되지 않은 변수를 위한 영역
  • Data : 전역 변수, 정적(static) 변수
  • Text : 상수, 실행할 프로그램의 코드가 저장되는 부분

오버플로우(Overflow)

오버플로우란 말 그대로 넘쳐흐른다는 의미입니다.

한정된 메모리 공간이 부족하여 데이터가 넘친다는 의미로, 힙의 경우에는 낮은 주소에서 높은 주소로 할당되고, 스택의 경우에는 높은 주소에서 낮은 주소로 할당되어 서로의 영역을 침범할 수 있습니다. 이때 힙이 스택 영역을 침범하는 경우를 힙 오버플로우, 스택이 힙 영역을 침범하는 경우를 스택 오버플로우라고 합니다.

 

 

👁‍🗨 프로세스의 상태

프로세스의 상태는 크게 실행(Running), 준비(Ready), 봉쇄(Blocked || Waiting || Sleep) 세 가지로 분류됩니다.

 

  • new : 프로세스 생성 상태
  • ready : 프로세스 할당 대기 상태
  • running : 프로세스의 명령어를 실행 중인 상태
  • waiting : 프로세스가 어떠한 이벤트가 일어나는 것을 기다리는 상태
  • terminated : 프로세스가 종료된 상태

 

Admitted [생성 -> 준비] : 준비 큐가 비어있을 때 작업 스케줄러에 의해 실행

Dispatch [준비 -> 실행] : 스케줄러에 의해 준비 큐 맨 앞에 있는 프로세스에게 CPU를 할당

Blocked [실행 -> 대기] : CPU를 할당받은 프로세스가 입출력 작업등으로 인해 명령을 실행할 수 없는 상태

Wake up [대기 -> 준비] : block상태의 프로세스가 입출력 작업이 끝나면 대기 상태에서 준비 상태가 됨

Interrupt [실행 -> 준비] : Timer run out, CPU를 점유 중인 프로세스가 할당된 시간을 모두 사용하여 타임 아웃되거나, CPU 스케줄링 정책에 따라 우선순위가 높은 프로세스로 CPU 디스 패치된 상태

Exit [실행 -> 종료] : 프로세스가 CPU를 할당받아 작업을 모두 수행한 상태

 

 

🔀 문맥 교환

문맥 교환(Context Switch)하나의 프로세스로부터 다른 프로세스로 CPU 제어권이 이양되는 과정을 뜻하는데, 이러한 과정을 CPU 디스패치(Dispatch)라고 합니다. 어떠한 프로세스가 CPU를 할당받고 실행되는 도중 인터럽트가 발생하면 CPU의 제어권은 운영체제로 넘어가게 되고 타이머 인터럽트 처리 루틴으로 가서 수행 중이던 프로세스의 문맥을 저장하고 새롭게 실행시킬 프로세스에게 CPU를 이양합니다. 하지만 프로세스 간 문맥 교환이 빈번하게 발생 시에는 오버헤드가 발생할 수 있습니다.

 

 

🕹️ 프로세스 제어블록

프로세스 제어블록(PCB, Process Control Block)이란 운영체제가 시스템 내의 프로세스들을 관리하기 위해 프로세스마다 유지하는 정보를 담는 커널 내의 자료구조를 뜻합니다. 프로세스의 상태 관리와 문맥 교환 때문에 필요합니다.

  • 프로세스 생성 시 PCB 생성
  • 프로세스 종료 시 PCB 제거

PCB 모듈

  • 프로세스 식별자 : PID
  • 프로세스 상태 : CPU 할당 가능 여부
  • 프로그램 카운터 : 다음에 수행할 명령의 위치
  • 레지스터 저장 영역 : 레지스터 관련 정보
  • 프로세서 스케줄링 정보 : 우선순위, 스케줄 큐에 대한 포인터, 다른 스케줄 매개변수 포함
  • 계정 정보 : CPU 사용시간, 계정 번호 등등
  • 입출력 상태 관련 정보 : 프로세스에 할당된 입출력 장치들과 열린 파일 목록 등등

 

 

 

 

반응형

+ Recent posts