SEC 161) 예외 처리(C)
* 예외처리(Exception Handling)
- 예외 처리는 예외가 발생했을 때 프로그래머가 해당 문제에 대비해 작성해 놓은 처리 루틴이 수행되도록 하는 것
- 예외가 발생했을 때 일반적인 처리 루틴은 프로그램을 종료시키거나 로그를 남기는 것
- C++, Ada, Java, 자바스크립트와 같은 언어에는 예외 처리 기능이 내장되어 있음
- 필요한 경우 조건문을 이용해 예외 처리 루틴을 작성함.
>> Java의 예외 처리
- JAVA는 예외를 객체로 취급하며, 예외와 관련된 클래스를 java,lang 패키지에서 제공
- JAVA에서는 try~catch 문을 이용해 예외를 처리함
- try 블록 코드를 수행하다 예외가 발생하면 예외를 처리하는 catch블록으로 이동해 예외 처리 코드를 수행하므로 예외가 발생한 이후의 코드는 실행되지 않음.
- catch 블록에서 선언한 변수는 해당 catch 블록에서만 유효
- try ~ catch 문 안에 또 다른 try ~ catch 문을 포함할 수 있다.
- try ~ catch 문 안에서는 실행 코드가 한 줄이라도 중괄호({ })를 생략할 수 없음
* JAVA의 주요 예외 객체
예외 객체 | 발생 원인 |
ClassNotFoundException | 클래스를 찾지 못한 경우 |
NoSuchMethodException | 메소드를 찾지 못한 경우 |
FileNotFoundException | 파일을 찾지 못한 경우 |
InterruptedIOException | 입.출력 처리가 중단된 경우 |
ArithmeticException | 0으로 나누는 등의 산술 연산에 대한 예외가 발생한 경우 |
IIIegalArgumentException | 잘못된 인자를 전달한 경우 |
NumberFormatException | 숫자 형식으로 변환할 수 없는 문자열을 숫자형식으로 변환한 경우 |
ArrayIndexOutOfBoundsException | 배열의 범위를 벗어난 접근을 시도한 경우 |
NegativeArraySizeException | 0보다 작은 값으로 배열의 크기를 지정한 경우 |
NullPointerException | 존재하지 않는 객체를 참조한 경우 |
SEC 162) 운영체제의 개념(B)
필기 20.8
* 운영체제(OS; Operating System)
- 운영체제는 컴픁 시스템의 자원들을 효율적으로 관리하며, 사용자가 컴퓨터를 편리하고 효과적으로 사용할 수 있도록 환경을 제공하는 여러 프로그램의 모임
- 컴퓨터 사용자와 컴퓨터 하드웨어 간의 인터페이스로 동작하는 시스템 소프트웨어의 일종
- 다른 응용 프로그램이 유용한 작업을 할 수 있도록 환경을 제공해줌
- 운영체제는 프로세스, 기억장치, 주변장치, 파일 등을 관리하는 기능을 수행함
- 운영체제의 종류: Windows, UNIX, LINUX, MacOS, MS-DOS 등
* 운영체제의 목적
- 운영체제의 목적에는 처리 능력 향상, 사용 가능도 향상, 신뢰도 향상, 반환 시간 단축 등이 있음
처리 능력(Throughput) | 일정 시간 내에 시스템이 처리하는 일의 양 |
반환시간(Turn Around Time) | 시스템에 작업을 의뢰한 시간부터 처리가 완료될 때까지 걸린 시간 |
사용 가능도(Availability) | 시스템을 사용할 필요가 있을 때 즉시 사용 가능한 정도 |
신뢰도(Reliability) | 시스템이 주어진 문제를 정확하게 해결하는 정도 |
필기 20.8
* 운영체제의 기능
- 프로세서(처리기, Processor), 기억장치(주기억장치, 보조기억장치), 입.출력장치, 파일 및 정보 등의 자원을 관리함
- 자원을 효율적으로 관리하기 위해 자원의 스케줄링 기능을 제공
- 사용자와 시스템 간의 편리한 인터페이스를 제공함
- 시스템의 각종 하드웨어와 네트워크를 관리.제어함
- 데이터를 관리하고, 데이터 및 자원의 공유 기능을 제공
SEC 163) 운영체제의 종류(A)
* Windows
- Windows는 1990년대 마이크로소프트(Microsoft) 사가 개발한 운영체제임
>> Windows 주요특징
특징 | 설명 |
그래픽 사용자 인터페이스 (GUI; Graphic User Interface) |
키보드로 명령어를 직접 입력하지 않고, 마우스로 아이콘이나 메뉴를 선택해 모든 작업을 수행하는 방식 |
선점형 멀티태스킹 (Preemptive Multi-Tasking) |
동시에 여러 개의 프로그램을 실행하는 멀티태스킹을 하면서 운영체제가 각 작업의 CPU 이용 시간을 제어하여 응용 프로그램 실행중 문제가 발생하면 해당 프로그램을 강제 종료시키고 모든 시스템 자원을 반환하는 방식 |
PnP(Plug and Play, 자동 감지 기능) | 컴퓨터 시스템에 프린터나 사운드 카드 등의 하드웨어를 설치했을 때, 해당 하드웨어를 사용하는 데 필요한 시스템 환경을 운영체제가 자동으로 구성해 주는 기능 |
OLE(Object Linking and Embedding) | 다른 여러 응용 프로그램에서 작성된 문자나 그림 등의 개체(Object)를 현재 작성 중인 문서에 자유롭게 연결(Linking)하거나 삽입(Embedding)하여 편집할 수 있게 하는 기능 |
255자의 긴 파일명 | \ / * ? “ < > |를 제외한 모든 문자 및 공백을 사용하여 최대 255자까지 파일 이름을 지정할 수 있음 |
Single-User 시스템 | 컴퓨터 한 대를 한 사람만이 독점해서 사용함 |
20.11
* UNIX
- UNIX는 1960년대 AT&T 벨(Bell) 연구소, MIT, General Electric이 공동 개발한 운영체제
- 시분할 시스템(Time Sharing System)을 위해 설계된 대화식 운영체제임
- 소스가 공개된 개방형 시스템(Open System)
- 대부분 C언어로 작성되어 있어 이식성이 높으며 장치, 프로세스 간의 호환성이 높음
- 다중 사용자(Multi-User), 다중 작업(Multi-Tasking)을 지원함
- 트리(Tree)구조의 파일 시스템을 갖음
필기 20.9, 20.6
* UNIX 시스템의 구성
구성 요소 | 설명 |
필기 20.9 커널(Kernel) |
하드웨어를 보호하고, 프로그램과 하드웨어 간의 인터페이스 역할을 담당 UNIX의 가장 핵심적인 부분임 프로세스(CPU 스케줄링) 관리, 기억장치 관리, 파일관리, 입.출력 관리, 프로세스간 통신, 데이터 전송 및 변환 등 여러 가지 기능을 수행함 |
필기 20.6 쉘(Shell) |
사용자의 명령어를 인식하여 프로그램을 호출하고 명령을 수행하는 명령어 해석기임 시스템과 사용자 간의 인터페이스를 담당함 종류: Bourne Shell, C Shell, Korn Shell |
유틸리티 프로그램 (Utility Program) |
일반 사용자가 작성한 응용 프로그램을 처리하는 데 사용함 DOS에서의 외부 명령어에 해당됨 종류: 에디터, 컴파일러, 인터프리터, 디버거 등 |
* LINUX
- LINUX는 1991년 리누스 토발즈(Linus Torvalds)가 UNIX를 기반으로 개발한 운영체제
- 프로그램 소스코드가 무료로 공개되어 있기 때문에 프로그래머가 원하는 기능을 추가할 수 있음
- 다양한 플랫폼에 설치하여 사용이 가능하며, 재배포가 가능함
- UNIX와 완변하게 호환됨
- 대부분의 특징이 UNIX와 동일
* MacOS
- MacOS는 1980년대 애플(Apple)사가 UNIX를 기반으로 개발한 운영체제
- 아이맥(iMac)과 맥북(MacBook) 등 애플 사에서 생산하는 제품에서만 사용이 가능
- 드라이버 설치 및 install과 uninstall의 과정이 단순함
20.7
* Android
- Android는 구글(Google)사에서 개발한 리눅스 커널 기반의 개방형 모바일 운영체제임
- 모든 코드가 공개된 개방형 소프트웨어
- 자바와 코들린으로 애플리케이션을 작성함
- 스마트폰 등의 휴대용 장치에서 주로 사용됨
* iOS
- iOS는 애플(Apple)사에서 개발한 유닉스 기반의 모바일 운영체제
- 아이폰, 아이팟 터치, 아이패드 등에 내장됨
- 애플사 고유의 모바일 운영체제로 타사 제품은 iOS를 탑재할 수 없음
SEC 164) 기억장치 관리(A)
* 기억장치의 관리 전략: 보조기억장치의 프로그램이나 데이터를 주기억장치에 적재시키는 시기, 위치 등을 지정해 한정된 주기억장치의 공간을 효율적 사용을 위한 것
>> 종류: 반입(Fetch)전략, 배치(Placement)전략, 교체(Replacement)전략
* 반입(Fetch) 전략 : 보조기억장치에 보관중인 프로그램이나 데이터를 주기억장치로 적재할 시기를 결정하는 전략
기법 | 내용 |
요구 반입 (Demand Fetch) |
실행중인 프로그램이 특정 프로그램이나 데이터 등의 참조를 요구할 때 적재하는 방법 |
예상 반입 (Anticipatory Fetch) |
실행중인 프로그램에 의해 참조될 프로그램이나 데이터를 미리 예상하여 적재하는 방법 |
필기 20.8
* 배치(Placement) 전략 : 새로 반입되는 프로그램이나 데이터를 주기억장치의 어디에 위치 시킬 것인지를 결정하는 전략
기법 | 내용 |
최초 적합 (First Fit) |
프로그램이나 데이터가 들어갈 수 있는 크기의 빈 영역 중에서 첫 번째 분할 영역에 배치시키는 방법 |
최적 적합 (Best Fit) |
프로그램이나 데이터가 들어갈 수 있는 크기의 빈 영역 중에서 단편화를 가장 작게 남기는 분할 영역에 배치시키는 방법 |
필기 20.8 최악 적합 (Worst Fit) |
프로그램이나 데이터가 들어갈 수 있는 크기의 빈 영역중에서 단편화를 가장 많이 남기는 분할 영역에 배치시키는 방법 |
* 교체(Replacement) 전략
- 교체 전략은 주기억장치의 모든 영역이 이미 사용중인 상태에서 새로운 프로그램이나 데이터를 주기억장치에 배치하려고 할 때, 이미 사용되고 있는 영역 중에서 어느 영역을 교체하여 사용할 것인지를 결정하는 전략
>> 종류: FIFO, OPT, LRU, LFU, NUR, SCR 등
SEC 165) 주기억장치 할당 기법(C)
* 주기억장치 할당
- 주기억장치 할당 기법은 프로그램이나 데이터를 실행시키기 위해 주기억장치에 어떻게 할당할 것인지에 대한 내용
>> 주기억장치 할당 기법의 분류
연속 할당 기법 | 프로그램을 주기억장치에 연속으로 할당하는 기법 종류: 단일 분할 할당 기법, 다중 분할 할당 기법 |
분산 할당 기법 | 프로그램을 특정 단위의 조각으로 나누어 주기억장치 내에 분산하여 할당하는 기법 종류: 페이징 기법, 세그먼테이션 기법 |
* 단일 분할 할당 기법
- 단일 분할 할당 기법은 주기억장치를 운영체제 영역과 사용자 영역으로 나우어 한순간에는 오직 한 명의 사용자만이 주기억장치의 사용자 영역을 사용하는 기법
- 가장 단순한 기법으로 초기의 운영체제에서 많이 사용하던 기법
- 운영체제를 보호하고, 프로그램이 사용자 영역만을 사용하기 위해 운영체제영역과 사용자 영역을 구분하는 경계 레지스터(Boundary Register)가 사용도미
- 프로그램의 크기가 작을 경우 사용자 영역이 낭비될 수 있음
>> 종류
오버레이(Overlay) | 주기억장치보다 큰 사용자 프로그램을 실행하기 위한 기법 |
스와핑(Swapping) | 하나의 프로그램 전체를 주기억장치에 할당하여 사용하다 필요에 따라 다른 프로그램과 교체하는 기법 |
* 다중 분할 할당 기법
고정 분할 할당 기법 = 정적 할당 기법 |
프로그램을 할당하기 전에 운영체제가 주기억장치의 사용자 영역을 여러 개의 고정된 크기로 분할하고 준비상태 큐에서 준비 중인 프로그램을 각 영역에 할당하여 수행하는 기법 |
가변 분할 할당 기법 = 동적 할당 기법 |
주기억장치를 미리 분할해 놓지 않고 프로그램을 주기억장치에 적재하면서 필요한 만큼의 크기로 영역을 분할하는 기법 고정 분할 할당 기법의 단편화를 줄이기 위해 사용됨 |
SEC 166) 가상기억장치 구현 기법(A)
* 가상기억장치(Virtual Memory)
- 가상기억장치는 보조기억장치의 일부를 주기억장치처럼 사용하는 것으로, 용량이 작은 주기억장치를 마치 큰 용량을 가진 것처럼 사용하는 기법
- 프로그램을 여러 개의 작은 블록 단위로 나누어서 가상기억장치에 보관해 놓고, 프로그램 실행 시 요구되는 블록만 주기억장치에 불연속적으로 할당하여 처리
- 주기억장치의 이용률과 다중 프로그래밍의 효율을 높일 수 있다.
- 블록 단위로 나누어 사용하므로 연속 할당 방식에서 발생할 수 있는 단편화를 해결할 수 있다.
- 가상기억장치의 일반적인 구현 방법: 페이징 기법, 세그먼테이션 기법
* 페이징(Paging) 기법
- 페이징 기법은 가상기억장치에 보관되어 있는 프로그램과 주기억장치의 영역을 동일한 크기로 나눈 후 나눠진 프로그램을 동일하게 나눠진 주기억장치의 영역에 적재시켜 실행하는 기법
- 프로그램을 일정한 크기로 나눈 단위를 페이지(Page)라고 하고, 페이지 크기로 일정하게 나누어진 주기억장치의 단위를 페이지 프레임(Page Frame)이라고 한다.
- 외부 단편화는 발생하지 않으나 내부 단편화는 발생할 수 있다.
- 주소 변환을 위해서 페이지의 위치 정보를 가지고 있는 페이지 맵 테이블(Page Map Table)이 필요하다.
- 페이지 맵 테이블 사용으로 비용이 증가하고, 처리 속도가 감소된다.
* 세그먼테이션(Segmentation) 기법
- 세그먼테이션 기법은 가상기억장치에 보관되어 있는 프로그램을 다양한 크기의 논리적인 단위로 나눈 후 주기억장치에 적재시켜 실행시키는 기법
- 프로그램을 배열이나 함수 등과 같은 논리적인 크기로 나눈 단위를 세그먼트(Segment)라고 하며, 각 세그먼트는 고유한 이름과 크기를 가짐.
- 세그먼테이션 기법을 이용하는 궁극적인 이유는 기억공간을 절약하기 위해서이다.
- 주소 변환을 위해서 세그먼트가 존재하는 위치 정보를 가지고 있는 세그먼트 맵 테이블(Segment Map Table)이 필요
- 내부 단편화는 발생하지 않으나 외부 단편화는 발생할 수 있음
SEC 167) 페이지 교체 알고리즘(A)
* 페이지 교체 알고리즘
- 페이지 부재(Page Fault)가 발생하면 가상기억장치에서 필요한 페이지를 찾아 주기억장치에 적재해야 하는데, 이때 주기억장치의 모든 페이지 프레임이 사용중이면 어떤 페이지 프레임을 선택해 교체할 것인지를 결정하는 기법이 페이지 교체 알고리즘
- 종류: OPT, FIFO, LRU, LFU, NUR, SCR 등
* OPT(OPTimal replacement, 최적 교체)
- OPT는 앞으로 가장 오랫동안 사용하지 않을 페이지를 교체하는 기법
- 벨레이디(Belady)가 제안한 것이다.
- 페이지 부재 횟수가 가장 적게 발생하는 가장 효율적인 알고리즘
* FIFO(First In First Out)
- FIFO는 각 페이지가 주기억장치에 적재될 때마다 그때의 시간을 기억시켜 가장 먼저들어와서 가장 오래있었던 페이지를 교체하는 기법
- 이해하기 쉽고, 프로그래밍 및 설계가 간단
* LRU(Least Recently Used)
- LRU는 최근에 가장 오랫동안 사용하지 않은 페이지를 교체하는 기법
- 각 페이지마다 계수기(Counter)나 스택(Stack)을 두어 현시점에서 가장 오랫동안 사용하지 않은, 즉 가장 오래전에 사용된 페이지를 교체한다.
* LFU(Least Frequently Used)
- LFU는 사용 빈도가 가장 적은 페이지를 교체하는 기법
- 활발하게 사용되는 페이지는 사용 횟수가 많아 교체되는 않고 사용됨
* NUR(Not Used Recently)
- NUR은 LRU와 비슷한 알고리즘으로, 최근에 사용하지 않은 페이지를 교체하는 기법
- 최근에 사용되지 않은 페이지는 향후에도 사용되지 않을 가능성이 높다는 것을 전제로 LRU에서 나타나는 시간적ㅇ니 오버헤드를 줄일 수 있음.
- 최근의 사용 여부를 확인하기위해서 각 페이지마다 두 개의 비트, 즉 참조비트(Reference Bit)와 변형비트(Modified Bit, Dirty Bit)가 사용됨.
- 다음과 같이 참조 비트와 변형 비트의 값에 따라 교체될 페이지의 순서가 결정됨
참조 비트 | 0 | 0 | 1 | 1 |
변형 비트 | 0 | 1 | 0 | 1 |
교체 순서 | 1 | 2 | 3 | 4 |
* SCR(Second Chance Replacement, 2차 기회 교체)
- SCR은 가장 오랫동안 주기억장치에 있던 페이지 중 자주 사용되는 페이지의 교체를 방지하기 위한 기법
- FIFO 기법의 단점을 보완하는데 사용됨.
SEC 168) 가상기억장치 기타 관리 사항(B)
* 페이지 크기
- 페이징 기법을 사용하면 프로그램을 페이지 단위로 나누게 되는데, 페이지의 크기에 따라 시스템에 미치는 영향이 다름.
페이지 크기가 작을 경우 | 페이지 단편화가 감소되고, 한 개의 페이지를 주기억장치로 이동시키는 시간이 줄어듦 불필요한 내용이 주기억장치에 적재될 확률이 적으므로 효율적인 워킹 셋을 유지할 수 있음 페이지 정보를 갖는 페이지 맵 테이블의 크기가 커지고, 매핑 속도가 늦어짐 디스크 접근 횟수가 많아져서 전체적인 입.출력 시간은 늘어남 |
페이지 크기가 클 경우 | 페이지 정보를 갖는 페이지 맵 테이블의 크기가 작아지고, 매핑속도가 빨라짐 디스크 접근 횟수가 줄어들어 전체적인 입.출력의 효율성이 증가됨 페이지 단편화가 증가되고, 한 개의 페이지를 주기억장치로 이동시키는 시간이 늘어 남 |
* Locality
- Locality(국부성, 지역성, 구역성, 국소성)는 프로세스가 실행되는 동안 주기억장치를 참조할 때 일부 페이지만 집중적으로 참조되는 성질이 있다는 이론
- 스래싱을 방지하기 위한 워킹 셋 이론의 기반이 됨
- 가상기억장치 관리와 캐시 메모리 시스템의 이론적인 근거
- 데닝(Denning) 교수에 의해 Locality의 개념이 증명되었다.
>> Locality의 종류
시간 구역성 (Temporal Locality) |
프로세스가 실행되면서 하나의 페이지를 일정시간동안 집중적으로 액세스하는 현상 |
공간 구역성 (Spatial Locality) |
프로세스 실행 시 일정 위치의 페이지를 집중적으로 액세스 하는 현상 |
* 워킹 셋(Working Set)
- 워킹 셋은 프로세스가 일정 시간 동안 자주 참조하는 페이지들의 집합
- 데닝(Denning)이 제안한 프로그램의 움직임에 대한 모델로, 프로그램의 Locality 특징을 이용함
- 자주 참조되는 워킹 셋을 주기억장치에 상주시킴으로써 페이지 부재 및 페이지 교체 현상이 줄어들어 프로세스의 기억장치 사용이 안정됨
* 스래싱(Thrashing)
- 스래싱은 프로세스의 처리 시간보다 페이지 교체에 소요되는 시간이 더 많아지는 현상
- 다중 프로그래밍 시스템이나 가상기억장치를 사용하는 시스템에서 하나의 프로세스 수행 과정 중에 자주 페이지 부재(Page Fault)가 발생함으로써 나타나며, 전체 시스템의 성능이 저하됨
- 다중 프로그래밍의 정도가 높아짐에 따라 CPU의 이용률은 어느 특정 시점까지는 높아지지만, 다중 프로그래밍의 정도가 더욱 커지면 스래싱이 나타나고, CPU의 이용률은 급격히 감소하게 됨.
SEC 169) 프로세스의 개요(A)
* 프로세스(Process)
- 프로세스는 일반적으로 프로세서에 의해 처리되는 사용자 프로그램, 시스템 프로그램, 즉 실행중인 프로그램을 의미
>> 프로세스의 정의들
- PCB를 가진 프로그램
- 실기억장치에 저장된 프로그램
- 프로세서가 할당되는 실체로서, 디스패치가 가능한 단위
- 프로시저가 활동중인 것
- 비동기적 행위를 일으키는 주체
- 지정된 결과를 얻기 위한 일련의 계통적 동작
- 목적 또는 결과에 따라 발생되는 사건들의 과정
- 운영체제가 관리하는 실행 단위
* PCB(Process Control Block, 프로세스 제어 블록)
- PCB는 운영체제가 프로세스에 대한 중요한 정보를 저장해 놓은 곳
- 각 프로세스가 생성될 때마다 고유의 PCB가 생성되고, 프로세스가 완료되면 PCB는 제거된다
>> PCB에 저장되어 있는 정보
- 프로세스의 현재 상태
- 포인터
- 프로세스 고유 식별자
- 스케줄링 및 프로세스의 우선순위
- CPU 레지스터 정보
- 주기억장치 관리 정보
- 입.출력 상태정보
- 계정 정보
* 프로세스 상태 전이
- 프로세스 상태 전이는 프로세스가 시스템 내에 존재하는 동안 프로세스의 상태가 변하는 것을 의미
- 프로세스의 상태는 다음과 같이 상태 전이도로 표시할 수 있음
상태 | 내용 |
제출(Submit) | 작업을 처리하기 위해 사용자가 작업을 시스템에 제출한 상태 |
접수(Hold) | 제출된 작업이 스풀 공간인 디스크의 할당 위치에 저장된 상태 |
준비(Ready) | 프로세스가 프로세서를 할당받기 위해 기다리고 있는 상태 |
실행(Run) | 준비상태 큐에 있는 프로세스가 프로세서를 할당받아 실행되는 상태 |
대기(Wait), 블록(Block) |
프로세스에 입.출력 처리가 필요하면 현재 실행 중인 프로세스가 중단되고, 입.출력 처리가 완료될 때까지 대기하고 있는 상태 |
종료(Terminated, Exit) | 프로세스의 실행이 끝나고 프로세스 할당이 해제된 상대 |
* 프로세스 상태 전이 관련 용어
용어 | 내용 |
Dispatch | 준비 상태에서 대기하고 있는 프로세스 중 하나가 프로세서를 할당받아 실행 상태로 전이되는 과정 |
Wake Up | 입.출력 작업이 완료되어 프로세스가 대기 상태에서 준비 상태로 전이 되는 과정 |
Spooling | 입.출력장치의 공유 및 상대적으로 느린 입.출력장치의 처리 속도를 보완하고 다중 프로그래밍 시스템의 성능을 향상시키기위해 입.출력할 데이터를 직접 입.출력장치에 보내지 않고 나중에 한꺼번에 입.출력하기 위해 디스크에 저장하는 과정 |
교통량 제어기 (Traffic Controller) |
프로세스의 상태에 대한 조사와 통보 담당 |
* 스레드(Thread)
- 스레드는 시스템의 여러 자원을 할당받아 실행하는 프로그램의 단위 또는 프로세스 내에서의 작업 단위로 사용
- 하나의 프로세스에 하나의 스레드가 존재하는 경우에는 단일 스레드, 하나이상의 스레드가 존재하는 경우에는 다중 스레드라고 함
- 프로세스의 일부 특성을 갖고 있기 때문에 경량(Light Weight) 프로세스라고 함
- 스레드 기반 시스템에서 스레드는 독립적인 스케줄링의 최소단위로서 프로세스의 역할을 담당
SEC 170) 스케줄링(B)
* 스케줄링(Scheduling)
- 스케줄링은 프로세스가 생성되어 실행될 때 필요한 시스템의 여러 자원을 해당 프로세스에게 할당하는 작업을 의미
- 프로세스가 생성되어 완료될 때까지 프로세스는 여러 종류의 스케줄링 과정을 거치게 됨
>> 스케줄링의 종류
장기 스케줄링 | 어떤 프로세스가 시스템의 자원을 차지할 수 있도록 할 것인가를 결정해 준비상태 큐로 보내는 작업 |
중기 스케줄링 | 어떤 프로세스들이 CPU를 할당받을 것인지 결정하는 작업 |
단기 스케줄링 | 프로세스가 실행되기 위해 CPU를 할당받는 시기와 특정 프로세스를 지정하는 작업 |
* 스케줄링의 목적
목적 | 내용 |
공정성 | 모든 프로세스에 공정하게 할당함 |
처리율 증가 | 단위 시간당 프로세스를 처리하는 비율을 증가시킴 |
CPU 이용률 증가 | CPU가 순수하게 프로세스를 실행하는 데 사용되는 시간 비율을 증가시킴 |
우선순위 제도 | 우선순위가 높은 프로세스를 먼저 실행함 |
오버헤드 최소화 | 오버헤드를 최소화함 |
응답시간 최소화 | 작업을 지시하고, 반응하기 시작하는 시간을 최소화함 |
반환시간 최소화 | 프로세스를 제출한 시간부터 실행이 완료될 때까지 걸리는 시간을 최소화함 |
대기 시간 최소화 | 프로세스가 준비상태 큐에서 대기하는 시간을 최소화함 |
균형 있는 자원의 사용 | 메모리, 입.출력장치 등의 자원을 균형있게 사용함 |
무한 연기 회피 | 자원을 사용하기 위해 무한정 연기되는 상태를 회피함 |
* 비선점(Non-Preemptive) 스케줄링
- 비선점 스케줄링은 이미 할당된 CPU를 다른 프로세스가 강제로 빼앗아 사용할 수 없는 스케줄링 기법
- 프로세스가 CPU를 할당받으면 해당 프로세스가 완료될 때까지 CPU를 사용
- 프로세스 응답시간의 예측이 용이함
- 일괄 처리 방식에 적합함
- 종류: FCFS, SJF, 우선순위, HRN, 기한부 등
* 선점(Preemptive) 스케줄링
- 선점 스케줄링은 하나의 프로세스가 CPU를 할당받아 실행하고 있을 때 우선순위가 높은 다른 프로세스가 CPU를 강제로 빼앗아 사용할 수 있는 스케줄링 기법
- 우선순위가 높은 프로세스를 빠르게 처리할 수 있음
- 주로 빠른 응답 시간을 요구하는 대화식 시분할 시스템에 사용됨
- 많은 오버헤드(Overhead)를 초래함
- 종류: Round Robin, SRT, 선점 우선순위, 다단계 큐, 다단계 피드백 큐 등