본문에 오류가 있을 수 있음을 감안하고 봐주시길 바랍니다.
# 문제 풀이 중 오답노트 하면서 나온 내용을 정리한 것
기억장치 관리 전략: 보조기억장치의 프로그램이나 데이터를 주기억장치에 적재시키는 시기·적재 위치 등을 지정하여 한정된 주기억장치의 공간을 효율적으로 사용하는 것
- 반입(Fetch) 전략: 보조기억장치에 보관중인 프로그램이나 데이터를 언제 주기억장치로 적재할 것인지를 결정하는 전략
| 기법 | 내용 |
| 요구 반입(Demand Fetch) | 실행중인 프로그램이 특정 프로그램이나 데이터 등의 참조를 요구할 때 적재하는 기법 |
| 예상 반입(Anticipatory Fetch) | 실행중인 프로그램에 의해 참조될 프로그램이나 데이터를 미리 예상하고 적재하는 방법 |
- 배치(Placement) 전략: 새로 반입되는 프로그램이나 데이터를 주기억장치의 어디에 위치시킬 것인지를 결정하는 전략
| 기법 | 내용 |
| 최초 적합(First Fit) | 프로그램이나 데이터가 들어갈 수 있는 크기의 빈 영역 중에서 첫 번째 분할 영역에 배치시키는 방법 |
| 최적 적합(Best Fit) | 프로그램이나 데이터가 들어갈 수 있는 크기의 빈 영역 중에서 단편화를 가장 작게 남기는 분할 영역에 배치시키는 방법 |
| 최악 적합(Worst Fit) | 프로그램이나 데이터가 들어갈 수 있는 크기의 빈 영역 중에서 단편화를 가장 많이 남기는 분할 영역에 배치시키는 방법 |
- 교체(Replacement) 전략: 주기억장치의 모든 영역이 이미 사용중인 상태에서 새로운 프로그램이나 데이터를 주기억장치에 배치하려고 할 때 이미 사용되고 있는 영역중에서 어느 영역을 교체하여 사용할 것인지를 결정하는 전략(종류: FIFO, OPT, LRU, NUR, SCR 등)
내부 단편화: 프로그램 할당 후 내부에 남는 저장공간
외부 단편화: 분할된 저장장치에서 프로그램 크기보다 작아 사용할 수 없는 것
가상기억장치(Virtual Memory): 보조기억장치의 일부를 주기억장치처럼 사용하는 것으로 용량이 작은 주기억장치를 마치 큰 용량을 가진 것처럼 사용하는 기법이다. 프로그램을 여러 개의 작은 블록 단위로 나누어서 가상기억장치에 보관해 놓고 프로그램 실행 시 요구되는 블록만 주기억장치에 불연속적으로 할당하여 처리한다. 주기억장치의 이용률과 다중 프로그래밍의 효율을 높일 수 있고 블록 단위로 나누어 사용하므로 연속 할당 방식에서 발생할 수 있는 단편화를 해결할 수 있다.
- 페이징(Paging) 기법: 가상기억장치에 보관되어 는 프로그램과 주기억장치의 영역을 동일한 크기로 나눈 후 나눠진 프로그램을 동일하게 나눠진 주기억장치의 영역에 적재시켜 실행하는 기법이다. 외부 단편화는 발생하지 않으나 내부 단편화가 발생할 수 있고 주소 변환을 위해서 페이지의 위치 정보를 가지고 있는 페이지 맵 테이블이 필요하다. 페이지 맵 테이블 사용으로 비용이 증가하고 처리 속도가 감소한다.
- 페이지(Page): 프로그램을 일정한 크기로 나눈 단위(1~4KByte 단위로 구성됨)
- 페이지 프레임(Page Frame): 페이지 크기로 일정하게 나눠진 주기억장치(실제 RAM)의 단위
- 세그먼테이션(Segmentation) 기법: 가상기억장치에 보관되어 있는 프로그램을 다양한 크기의 논리적인 단위로 나눈 후 주기억장치에 적재시켜 실행시키는 기법이다. 기억공간을 절약하기 위해 사용되며 주소 변환을 위해서 세그먼트가 존재하는 위치 정보를 가지고 있는 세그먼트 맵 테이블이 필요하다. 내부 단편화 발생하지 않으나 외부 단편화는 발생할 수 있다.
- 세그먼트(Segment): 프로그램을 배열이나 함수 등과 같은 논리적인 크기로 나눈 단위이며 각 세그먼트는 고유한 이름과 크기를 갖는다.
페이지 교체 알고리즘: 페이지 부재(Page Fault, CPU가 액세스한 가상 페이지가 주기억장치에 없는 경우)가 발생하면 가상기억장치에서 필요한 페이지를 찾아 주기억장치에 적재해야 하는데 이때 주기억장치의 모든 페이지 프레임이 사용중이면 어떤 페이지 프레임을 선택하여 교체할 것인지를 결정하는 기법이다.
- OPT(OPTimal replacement, 최적 교체): 앞으로 가장 오랫동안 사용하지 않을 페이지를 교체하는 기법이다. 벨레이디(Belady)가 제안했으며 페이지 부재 횟수가 가장 적게 발생하는 가장 효율적인 알고리즘이다.

- FIFO(First In First Out): 각 페이지가 주기억장치에 적재될 때마다 그때의 시간을 기억시켜 가장 먼저 들어와서 가장 오래 있었던 페이지를 교체하는 기법이다. 이해하기 쉽고 프로그래밍 및 설계가 간단하다.

- LRU(Least Recently Used): 최근에 가장 오랫동안 사용하지 않은 페이지를 교체하는 기법이다. 각 페이지마다 계수기(Counter)나 스택(Stack)을 두어 현시점에서 가장 오랫동안 사용하지 않은 페이지를 교체한다.

- LFU(Least Frequently Used): 사용 빈도가 가장 적은 페이지를 교체하는 기법이다. 활발하게 사용되는 페이지 사용 횟수가 많아 교체되지 않고 사용한다.

- NUR(Not Used Recently)/NRU: LRU와 비슷한 알고리즘으로 최근에 사용하지 않은 페이지를 교체하는 기법이다. 최근에 사용 여부를 확인하기 위해 각 페이지마다 두 개의 비트, 즉 참조 비트(Reference Bit)와 변형 비트(Modified Bit)가 사용된다.
| 참조 비트 | 0 | 0 | 1 | 1 | → 페이지가 호출되면 1, 아니면 0 |
| 변형 비트 | 0 | 1 | 0 | 1 | → 페이지가 변경되면 1, 아니면 0 |
| 교체 순서 | 1 | 2 | 3 | 4 | Read는 참조 1 변형 0, Write는 참조 1 변형 1 |

- SCR(Second Chance Replacement, 2차 기회 교체): 가장 오랫동안 주기억장치에 있던 페이지 중 자주 사용되는 페이지의 교체를 방지하기 위한 기법이다. FIFO 기법의 단점을 보완하는데 사용된다.
페이지 크기: 페이지의 크기에 따라 시스템에 미치는 영향이 다르다.
| 페이지 크기가 작을 경우 | · 페이지 단편화가 감소되고 한 개의 페이지를 주기억장치로 이동시키는 시간이 줄어듦 · 불필요한 내용이 주기억장치에 적재될 확률이 적어 효율적인 워킹 셋을 유지할 수 있음 · 페이지 정보를 갖는 페이지 맵 테이블의 크기가 커지고 매핑 속도가 늦어짐 · 디스크 접근 횟수가 많아져서 전체적인 입·출력 시간은 늘어남 |
| 페이지 크기가 클 경우 | · 페이지 정보를 갖는 페이지 맵 테이블의 크기가 작아지고 매핑 속도가 빨라짐 · 디스크 접근 횟수가 줄어들어 전체적인 입 ·출력의 효율성이 증가됨 · 페이지 단편화가 증가되고 한 개의 페이지를 주기억장치로 이동시키는 시간이 늘어남 |
Locality(구역성): 프로세스가 실행되는 동안 주기억장치를 참조할 때 일부 페이지만 집중적으로 참조하는 성질이 있다는 이론이다. 스레싱을 방지하기 위한 워킹셋 이론의 기반이 되었다. 가상기억장치 관리와 캐시 메모리 시스템의 이론적인 근거이다.
| 시간 구역성(Temporal Locality) | · 프로세스가 실행되면서 하나의 페이지를 일정 시간 동안 집중적으로 액세스하는 현상 · Loop(반복, 순환), 스택(Stack), 부 프로그램(Sub Routine), Counting(1씩 증감), 집계 변수 |
| 공간 구역성(Spatial Locality) | · 프로세스 실행 시 일정 위치의 페이지를 집중적으로 액세스하는 현상 · 배열 순회 |
워킹 셋(Working Set): 프로세스가 일정 시간 동안 자주 참조하는 페이지들의 집합이다. 데닝(Denning)이 제안한 프로그램의 움직임에 대한 모델로 프로그램의 Locality 특징을 이용한다. 자주 참조되는 워킹 셋을 주기억장치에 상주시킴으로써 페이지 부재 및 페이지 교체 현상을 줄여 프로세스의 기억장치 사용이 안정화되는 것이다.
스래싱(Thrashing): 프로세스의 처리 시간보다 페이지 교체에 소요되는 시간이 더 많아지는 현상이다. 하나의 프로세스 수행 과정 중에 자주 페이지 부재가 발생함으로써 나타나며 전체 시스템의 성능이 저하된다.(= 페이지 부재율이 크면 스래싱이 많이 일어난다.) 다중 프로그래밍 정도가 높아짐에 따라 CPU의 이용률은 어느 특정 시점까지는 높아지지만 다중 프로그래밍의 정도가 더욱 커지면 스래싱이 나타나고 CPU의 이용률은 급격하게 감소한다.

파일 디스크립터(File Descriptor): 리눅스 또는 유닉스에서 프로세스가 파일에 접근하는 데 사용하는 일종의 키로 파일 핸들(File Handle) 또는 파일 제어 블록(File Control Block)이라고도 불리는 자료 구조이다. 보조기억장치에 저장되어 있다가 파일이 개방되면 주기억장치로 이동하며 사용자는 정보를 확인할 수 있으나 직접 참조하는 것은 불가능한 특징이 있다.
'정보처리기사' 카테고리의 다른 글
| [정보처리기사 요약 11-4] 윈도우 & 유닉스/리눅스 환경 변수와 기본 명령어 총정리 (0) | 2026.03.03 |
|---|---|
| [정보처리기사 요약 11-3] FCFS부터 SRT, RR 알고리즘까지 핵심 요약 (0) | 2026.03.03 |
| [정보처리기사 요약 11-1] 운영체제(OS)의 개념과 종류 요약(Windows부터 iOS까지) (0) | 2026.03.02 |
| [정보처리기사 요약 10-2] Java 클래스 상속과 예외 처리, Python 문법 정리 (0) | 2026.03.02 |
| [정보처리기사 요약 10-1] C언어와 Java 입출력, 제어문, 포인터, 구조체 가이드 (0) | 2026.03.02 |