[운영체제] 프로세스 1 : 프로세스 개념, 프로세스 상태, 프로세스 상태도, PCB, 컨텍스트 스위칭, 프로세스 스케쥴링 큐, 스케쥴러

드림보이즈·2023년 8월 14일
0

프로세스 개념

"프로세스는 실행중인 프로그램이다."

프로세스의 문맥 (Context)

  • CPU의 수행 상태를 나타내는 하드웨어 문맥
    - Program Counter
    -각종 register
  • 프로세스의 주소 공간
    - Code, Data, Stack
  • 프로세스 관련 커널 자료 구조
    - PCB
    -Kernel stack

프로그램이 생성되어서 종료되기 까지 어떠한 특정 시점을 '문맥'이라 한다.
'문맥'이라 하믄 지금 상태에 대한 정보를 알아야 할 것이다.
프로세스 문맥은

  • CPU의 Program Counter,register
  • 프로세스 주소 공간의 stack,data,code
  • 커널 자료 구조의 프로세스 관련 PCB, 커널 스택

으로 파악할 수 있다.

프로세스 상태 (state)

프로세스는 상태가 변경되며 수행된다.

  • Running : CPU 잡고 실행 중인 상태
  • Ready : CPU 기다리는 상태 (다른 조건 만족해놓고)
  • Blocked(wait,sleep) : CPU를 줘도 당장 실행 못하는 상태, 프로세스 자신이 요청한 event가 즉시 만족되지 않아 기다리는 상태 (ex. 디스크에서 파일 읽어와야 하는 경우)
  • New : 프로세스 생성 중
  • Terminated: 수행 끝난 상태

프로세스 상태도

프로그램을 실행하면 곧바로 메모리를 할당받고 ready 상태가 된다.
CPU를 잡고 작업을 하면 running 상태이며,
Timer 인터럽트가 걸리면 ready 상태로 돌아가 자기 차례를 기다린다.
혹은 I/O나 이벤트 처리가 즉시 안 끝나는 경우 wait(block)ing 상태가 되었다가, 작업을 마치면 ready로 바뀐다.

프로세스 상태

시스템 자원은 한정적이고, 사용하고 싶은 프로세스들은 많다.
따라서 각 자원마다 queue를 두고 순서에 따라 자원을 사용해야만 한다.
각 I/O device 마다 queue가 있고,
공유 자원도 동시에 같은 자원을 건드리면 동기화 문제가 생기기 때문에 queue가 필요하며,
CPU 또한 사용 대기열, ready queue가 존재한다.
(CPU는 사실 선착순이 아닌 우선 순위에 따라 차례를 배정받는다.)

PCB(Process Control Block)

운영체제가 각 프로세스를 관리하기 위해 프로세스 당 유지하는 정보
다음과 같은 구성 요소들을 지닌다.

  1. OS가 관리상 사용하는 정보
  • Process state, Process ID
  • Scheduling information, priority
  1. CPU 수행 관련 하드웨어 값
  • Program counter, registers
  1. 메모리 관련
  • Code, stack, data 위치 정보
  1. 파일 관련
  • Open file descriptors

1번 영역은 OS가 관리하기 위해 필요한 정보다.
CPU 스케쥴링 과정에서, 다음 프로세스를 선정할 때 우선순위가 높고, ready인 상태의 프로세스를 우선 순위에 둘 것 아닌가, 그럴 때 필요한 정보들이 담긴 것이다.

2번 영역은 이 프로세스가 CPU를 통해 어디까지 실행되고 있었는지를 기억하기 위한 정보들이다.
CPU를 타이머, 시스템 콜 등으로 뺏길 때 어디까지 실행되고 있었는지를 저장해야 다음에 이어서 실행할 거 아닌가?

Context Switching(문맥 교환)

CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정

CPU가 다른 프로세스에게 넘어갈 때 운영체제가 다음을 수행

  • CPU 내주는 프로세스의 상태를 PCB에 저장
  • CPU 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴

너무나 당연한 과정 아닌가? 넘겨주는 놈이 어디까지 실행했는지 저장해놓고,
다음 CPU 얻을 놈이 어디부터 실행해야 되는지 정보를 불러와야 할 거 아닌가?

Q. 시스템 콜, 인터럽트 발생 시 반드시 context switching이 일어나는가?

컨텍스트 스위칭의 정의가 뭐라고?
CPU를 '한 프로세스'에서 '다른 프로세스'로 넘겨주는 과정
이다.
커널 모드로 바뀌는 거? 커널 모드에서 다시 내 프로세스로 돌아오는 거? 당연히 "아니다".

1번 경우에도 context 일부를 PCB에 저장해야 하지만,
2번의 경우 부담이 훨씬 크다.
메인 메모리와 CPU 사이의 cache memory를 2번의 경우 완전히 비워주는 과정이 추가되기 때문이다.

프로세스를 스케쥴링 하기 위한 큐

Job Queue

  • 현재 시스템 내 모든 프로세스 집합

Ready Queue

  • 현재 메모리 내 있으면서 CPU 잡아 실행되길 기다리는 프로세스 집합

Device Queues

  • I/O Device 처리 기다리는 프로세스 집합

프로세스들은 각 큐들을 오가며 수행된다.

위에서 일반 Queue 구조로 보였던 ready queue, device queue는 실제로

이렇게 생겼다. PCB에 pointer가 있지 않은가? 그것을 통해 서로를 연결해 queue를 형성한다.

프로세스 스케쥴링 큐

ready queue에서 대기하다가, 실행하다가,
I/O 작업, Timer interrupt 걸리면 다시 ready로 돌아가고,
자식 프로세스를 포크할 경우에도 ready로 돌아가고(멀티 프로세스, 추후에 설명),

맨 밑의 그림은 사실 잘못 표현된 것이라 한다.
만약 인터럽트가 발생해 커널 모드로 운영체제가 CPU를 잡고 ISR을 수행하고 있을 때,
이 프로세스는 Ready 상태가 아니라 Running 상태라고 한다.
대신 '커널 모드로 Running 중이다' 라고 한다고 한다.


스케쥴러

Long term 스케쥴러( Job scheduler, 장기 스케쥴러)

  • 시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정
  • 프로세스에 memory 주는 문제
  • degree of Multiprogramming 제어
  • time sharing system에는 장기 스케쥴러 없음(무조건 ready로 감)

Short term 스케쥴러(CPU scheduler, 단기 스케쥴러)

  • 어떤 프로세스를 다음 running 시킬지 결정
  • CPU를 프로세스에 주는 문제
  • ㅈㄴ 빨라야 함

Medium term 스케쥴러(Swapper, 중기 스케쥴러)

  • 여유 공간을 위해 프로세스를 통째로 메모리에서 디스크로 몰아냄
  • 프로세스에게서 memory를 뺏는 문제
  • degree of Multiprogramming 제어

장기 스케쥴러는 요즘 시스템에 없으니 읽고 넘어가면 된다. 중기 스케쥴러만 있어도 장기 스케쥴러가 필요없어진다.

스케쥴러라는 말이 말 그대로 스케쥴을 짜고 관리하는 것 아니겠는가.
CPU, Memory 관리를 위한 스케쥴러들로 나눌 수 있겠다.
이를 시간적으로
CPU 스케쥴러 - ㅈㄴ 빠름 - 단기 스케쥴러
Memory 스케쥴러 - 적당한 - 중기 스케쥴러
로 부르는 것이다.

프로세스 상태 : Suspended(stopped)

위의 상태에서 하나를 빼먹었는데, 그것이 Suspended(stopped)다.

  • 외부적인 이유로 프로세스 수행이 정지된 상태
  • 프로세스 통째로 디스크로 swap out 됨

blocked와 헷갈릴 수 있는데,
외부에서 resume 해줘야 active : suspended
자신이 요청한 event가 만족되면 ready : blocked

프로세스 상태도


monitor mode(kernel mode)로 실행중이어도 프로세스는 running 상태라고 했다.
위 그림에서 Suspended 상태를 추가한다면

profile
10년 후 세계 최고 블록체인 개발자

0개의 댓글

관련 채용 정보