프로세스 ( Process )
바이너리 형태의 실행가능 목적파일(실행 파일)로 메모리에 적재되어 실행 중인 프로그램을 프로세스라고 한다. 응용 프로그램은 하나 이상의 프로세스로 이루어져있다. 하나의 응용 프로그램이 여러 프로세스들과 상호작용하면서 실행될 수도 있기 때문이다.
⁕ 엄밀히 말하면 프로그램은 코드와 데이터가 합쳐진 것으로 디스크 상에 목적파일로 혹은 주소공간에서 세그먼트로 존재한다. 그리고 프로세스는 실행 중에 있는 프로그램의 특정 상태이다. fork 함수의 작동 방식을 보면 차이가 명확해진다. fork 함수는 부모 프로세스를 복제하여 새로운 자식 프로세스를 만들어내는데 자식 프로세스는 부모와 동일한 프로그램을 실행한다(교과서 724p).
배치 처리 시스템 ( Batch Processing )
-
자동으로 다음 응용프로그램이 이어서 실행될 수 있도록 하는 시스템. 프로그램을 순차적으로 실행시킨다. 하나 끝나고 다음! 하나 끝나고 다음! FIFO와 유사한 방식으로 동작하기 때문에 Queue를 활용하여 구현하면 좋다
-
But, 여러 사용자가 동시에 하나의 컴퓨터를 사용하는 경우 대응할 수 없다. 즉, 다중 사용자는 지원이 불가능하다. 예를 들어 키보드를 눌렀는데 다른 프로그램(프로세스)이 끝날 때까지 기다려야 하기 때문에 1시간이 지나서 반응하는 등 응답시간이 길어질 수 있다
-
한 번에 하나의 일만 할 수 있기 때문에 동시성 문제가 발생한다
시분할 시스템
프로세스를 일정한 시간 단위로 분할하여 CPU에 스케줄링한다. 컴퓨터 응답시간을 최소화하여 이전의 다중 사용자 지원문제를 해결한다.
멀티 태스킹 ( Multi Tasking )
단일 CPU(코어가 1개)에서 여러 응용 프로그램들이 동시에 실행되는 것처럼 보이도록 하는 시스템이다(동시적). OS 스케줄링에 의해서 프로세스가 다른 프로세스들과 교대로 수행된다. 그 결과 동시적으로 여러 응용 프로그램을 실행할 수 있게 되었다.
멀티 프로세싱 ( Multi Processing )
여러 CPU에서 하나의 프로그램을 병렬로 실행하는 시스템이다(병렬적).
멀티 프로그래밍 ( Multi Programming )
최대한 CPU를 많이 활용하는 시스템이다. 현재 task의 입출력 작업 등으로 CPU가 중간에 쉬게되면 OS(커널)는 그 사이 다른 task를 스케줄링하여 프로세서의 자원낭비를 최소화한다.
프로세스 스케줄링
-
프로세스 : 실행 중인 응용 프로그램
-
스케줄링 : 여러 응용 프로그램을 시간 순으로 CPU에 배치하는 방법
스케줄링 알고리즘
1. FIFO Scheduler
가장 간단한 스케줄러로 배치 처리 시스템과 유사하다. FCFS(First Come First Served), CPU에 가장 먼저 올려진 프로세스가 가장 먼저 처리가 된다.
2. SJF Scheduler
가장 프로세스 실행 시간이 짧은 프로세스부터 실행이 된다. SJF(Shortest Job First)
3. Priority-Based Scheduler
우선순위를 기반으로 하는 스케줄러이다. 정적 우선순위 방식은 프로세스 마다 우선순위를 미리 지정하고, 동적 우선순위 방식에서는 스케줄러가 상황에 따라 동적으로 우선순위를 변경한다. 보통은 동적 우선순위 정책을 많이 사용한다.
4. Round Robin Scheduler
프로세스 완료 여부에 상관없이 큐에서 순서대로 프로세스를 빼와서 실행한 뒤 일정 시간이 지나도 완료되지 않는 경우에는 큐에 다시 넣어주는 방식이다. 시분할 시스템을 기반으로 한다.
프로세스 상태
new → ready ↔ running → exit
↑ ↙
blocked(waiting)
new
프로세스가 생성 중인 상태
running
현재 CPU에서 실행 상태
ready
CPU에서 실행 가능한 상태(실행 대기 상태), CPU에 올리면 바로 실행 가능한 상태
block 혹은 waiting
특정 이벤트 발생 대기 상태. 예를 들어, 프로세스가 저장 매체에서 입출력 작업을 요청하게되면 그때부터 block(waiting) 상태가 되고 해당 작업이 완료되면 다시 ready 상태로 전환된다.
선점형 · 비선점형 스케줄러
선점형 스케줄러 ( Preemptive Scheduling )
하나의 프로세스가 다른 프로세스 대신에 프로세서(CPU)를 차지할 수 있다. 일정 시간동안만 동작해야하는스케줄링 알고리즘의 경우에는 프로세스가 blocking 혹은 exit 상태가 아니더라도 다른 프로세스가 CPU를 선점할 수 있도록 해야하므로 선점형 스케줄러로 구현하는 것이 적절하다.
-
Round Robin
비선점형 스케줄러 ( Non-Preemptive Scheduling )
하나의 프로세스가 자발적으로 특정 이벤트에 의해 blocking(waiting) 상태가 되거나 실행이 끝난(exit) 상태가 될 경우에만 다른 프로세스가 CPU를 선점할 수 있다.
-
FIFO(FCFS), SJF, Priority-based
'컴퓨터 시스템' 카테고리의 다른 글
[컴퓨터 시스템] 뮤텍스와 세마포어 (0) | 2020.10.15 |
---|---|
[컴퓨터 시스템] 스레드 (0) | 2020.10.14 |
[컴퓨터 구조] 예외 상황 (0) | 2020.10.11 |
[컴퓨터 시스템] 가상 메모리 (0) | 2020.10.07 |
[컴퓨터 시스템] 컴퓨터 시스템 개괄 (0) | 2020.10.06 |