이론/기초

OS - 프로세스

tsyang 2023. 7. 30. 22:14

프로세스


프로세스란?

프로세스는 실행 중인 프로그램을 의미한다.

프로그램을 실행하는 순간, 메모리 할당이 이뤄지고 이 공간으로 바이너리 코드가 올라간다. 이 순간부터 프로그램은 프로세스라고 불린다.

 

.

 

프로세스의 구성 요소

메모리

프로세스의 메모리는 4가지 영역으로 구성된다.

  1. Data영역 : 전역변수나 static변수의 할당을 위해 존재
  2. Stack영역 : 지역변수 할당과 함수 호출시 전달되는 인자들이 저장되는 영역.
  3. Heap영역 : 동적 할당을 위해 존재
  4. Code 영역 : 실행파일을 구성하는 명령어들이 올라가는 영역.

.

 

레지스터 셋(register set)

프로그램을 실행하면 CPU의 레지스터들이 해당 프로그램을 위한 데이터로 채워질탠데 이런 데이터 상태 또한 프로세스의 일부로 볼 수 있다.

 

 

.

 

 

프로세스의 상태

프로세스의 상태는 (OS마다 다르겠지만) 기본적으로 Ready / Running / Blocked 세 가지 상태가 존재한다고 볼 수 있다. 

 

프로세스가 생성되면 Ready 상태로 존재한다. 여기서 프로세스는 CPU에 의해 실행되기를 기다린다. 

 

스케줄러는 Ready상태에 있는 프로세스를 실행시킬 수 있다. 프로세스가 실행되면 Running상태로 전환된다.

 

Running상태인 프로세스가 다른 프로세스에게 우선순위가 밀리면 다시 Ready상태로 갈 수 있다.

 

Running상태에 있는 프로세스는 I/O등의 이유로 Blocked 상태로 전환될 수 있다. Blocked 상태에 빠진 프로세스가 다시 실행이 가능해지면 Ready상태로 전환된다. 만약 종료된다면 Blocked상태로 전환된 뒤 Exit상태로 바뀐다.

 

.

 

컨텍스트 스위칭

 

실행중인 프로세스의 전환은 시스템에 많은 부하를 주는데, 레지스터 셋을 교체하는데 많은 비용이 들기 때문이다. 이런 작업을 컨텍스트 스위칭이라 부른다.

 

.

 

커널 오브젝트

OS는 기본적으로 돌아가는 기능 이외에도 그림판 계산기 등등 프로그램이 포함되어 있다. 이런 걸 제외하고 컴퓨터를 운영하는데 필요한 OS의 핵심 부분을 커널이라고 부름.

 

커널은 프로세스 스레드 혹은 파일과 같은 리소스들을 관리하기 위해 필요한 정보를 저장한다. 이때 데이터를 저장하는 메모리 블록 커널 오브젝트라 한다.

 

 

 

.

 

 

프로세스 스케줄링


CPU가 1개여도 프로그램은 여러 개를 실행할 수 있다. 이게 가능한 이유는 CPU가 프로세스를 번갈아가며 실행하기 때문.이 때 프로세스의 CPU 할당 순서 및 방법을 결정짓는 일을 스케줄링이라고 한다.

 

스케줄링에 쓰이는 알고리즘을 스케줄링 알고리즘이라고 하고, 이런 스케줄링 알고리즘을 적용해서 프로세스를 관리하는 OS모듈을 가리켜 스케줄러라 한다.

 

.

선점형 OS와 비선점형 OS

비 선점형 OS의 경우 지금 실행중이 프로세스보다 높은 우선순위의 프로세스가 등장해도 실행 대상을 변경하지는 않는다. 다른 프로세스가 실행되기 위해서는, 현재 실행 중인 프로세스가 명시적으로 CPU를 양보하거나, I/O 작업 등으로 블로킹 상태에 놓일 때 까지 기다려야 한다. 이런 방식은 프로그래머에게 매우 의존적(알아서 잘 관리해주길 기대해야함)

 

선점형의 경우에는 현재 실행 중인 프로세스보다 높은 우선순위의 프로세스가 등장하면, 스케줄러가 실행 순서를 조정한다. 최근의 OS는 대부분 선점형이다.

 

 

.

 

스케줄링 알고리즘 예시

많은 OS에서 쓰는 방식 중 하나는 우선순위에 따라 프로세스를 실행시키는 것. 우선순위가 낮다면 기아상태에 빠짐. 그래도 실행 중인 프로세스들의 I/O작업이 많다면 낮은 우선순위의 프로세스도 잘 실행된다. 

 

우선순위가 같은 프로세스끼리는 라운드 로빈 방식을 쓸 수 있음. 이 방식은 정해진 시간만큼만 CPU를 쓰고 다른 프로세스한테 넘기는 방식. 이 때의 시간 간격을 퀀텀 혹은 타임 슬라이스라고 함. 이 간격이 너무 짧으면 컨텍스트 스위칭이 자주 발생해서 성능이 안 좋아지고, 너무 길면 응답성이 떨어진다.

 

윈도우나 리눅스가 우선순위 + 라운드로빈 방식을 씀.

 

.

스케줄러의 동작 시점

매 타임 슬라이스마다 / 프로세스가 생성 및 소멸될 때 / 현재 실행 중인 프로세스가 블로킹 상태에 놓일 때, 스케줄러가 동작한다.

 

 

.

 

우선순위 역전 (priority inversion)

A,B,C라는 프로세스가 있고 우선순위가 A>B>C라고 해보자. 그리고 A프로세스는 C프로세스의 작업을 대기해야 하고, 이를 위해 A프로세스는 Blocked상태에 놓인다. 그런데 C보다 높은 B 프로세스가 있기 때문에 C프로세스는 실행되지 못하고, A도 계속 기다리는 상황이 있을 수 있음. 결과적으로 보면 우선순위가 더 높은 A가 B때문에 실행이 되지 못하는 현상이 생긴다. 이런 현상을 해결하기 위해서는 A프로세스가 Blocked상태에 빠지기 전에 C의 우선순위를 높혀주는 방식을 써야 한다.

 

'이론 > 기초' 카테고리의 다른 글

OS - 메모리 관리 기초  (0) 2023.08.13
OS - 쓰레드  (0) 2023.08.06
아스키코드 & 유니코드  (0) 2023.07.23
컴퓨터 구조 기초 - 4  (0) 2023.07.16
컴퓨터 구조 기초 - 3  (0) 2023.07.09