공부해보잠
기억장치 관리 본문
기억장치의 관리 전략
정의 : 기억장치 관리 전략은 보조 기억장치(하드디스크, SSD)에 있는 프로그램이나 데이터를 주기억장치(메인 메모리)에 적재하는 시기와 위치를 결정하고, 주기억장치의 공간을 효율적으로 관리하기 위한 방법입니다.
종류 :
반입(Fetch)전략
보조기억장치에 있는 데이터를 주기억장치로 가져오는 시기를 결정하는 전략
요구반입 (Demand Fetch) :
데이터가 필요할 때만 주기억장치로 가져옴
불필요한 데이터를 가져오지 않아 메모리 낭비를 줄임
예제문제
상황 :
보조 기억장치(HDD/SSD)에 파일 A,B,C가 저장되어 있습니다.
주기억장치(RAM)는 비어 있으며, 한 번에 하나의 파일만 저장할 수 있습니다.
프로그램 실행 중에 특정 파일이 필요하면 보조 기억장치에서 주기억장치로 가져옵니다.
파일요청 :
사용자가 프로그램을 시행하며 순서대로 파일 A,B,C를 요청합니다.
파일이 요청될 때만 주기억 장치로 가져옵니다.
처리과정 :
1단계 : 파일 A가요청됨 → 주기억장치에 파일A를 적재
2단계 : 파일 A의 처리가 끝나면 주기억장치에서 제거
3단계 : 파일 B가 요청됨 → 주기억장치에 파일 B를 적재
4단계 : 파일 B의 처리가 끝나면 주기억장치에서 제거
5단계 : 파일 C가 요청됨 → 주기억장치에 파일 C를 적재
결과 :
파일이 요청될 때만 가져오기 때문에 주기억장치의 공간 낭비가 없습니다.
필요하지 않은 파일은 절대 주기억장치로 가져오지 않습니다.
요청 | 주기억장치 상태 | 처리 결과 |
A | A | 파일 A 처리 완료 |
B | B | 파일 B 처리 완료 |
C | C | 파일 C 처리 완료 |
※쉽게 설명하면 필요한 재료를 즉석에서 창고에서 가져오는 것을 의미합니다. 필요한 재료만을 사용하여 낭비는 최소화 할 수 있는 장점이 있지만 매번 창고에 다녀오느라 시간이 더 걸릴 수 있다는 단점이 존재합니다.
예측반입(Anticipatory Fetch, Pre-fetch)
프로그램의 실행 흐름을 예측하여 데이터를 미리 주기억장치로 가져옴.
처리속도를 높일 수 있으나, 잘못된 예측 시 메모리 낭비 가능
예제문제
상황 :
보조 기억장치(HDD/SSD)에 파일 A,B,C,D,E가 저장되어 있습니다.
주기억장치(RAM)에는 2개의 데이터 블록만 저장할 수 있습니다.
프로그램 실행 중에 특정 파일이 필요하면 보조 기억장치에서 주기억장치로 가져옵니다.
프로그램이 데이터를 요청하기 전에 예측반입을 사용하여 데이터를 주기억장치에 미리 적재할 경우 다음 질문에 답하세요
A가 요청되었을 때 주기억장치의 상태는?[A,B]
A가 요청됨 →보조 기억장치에서 A를 주기억장치로 가져옴.
예측 반입으로 B를 주기억장치에 함께 적재
B를 요청하기 전 예측반입을 사용하면 어떤 데이터가 미리 적재되는가?[B,C]
B는 이미 주기억 장치에 있으므로 요청시 빠르게 처리가능
프로그램이 데이터를 순차적으로 요청한다고 예측 →C를 미리 적재
D를 요청한 후 주기억 장치의상태는?[D,E]
D요청 시, 주기억장치의 공간이 부족하면 가장오래된 데이터를 교체(FIFO기준)
A와 B중 A가 먼저 들어왔으므로 A를 제거하고 D를 적재.
예측반입으로 E를 주기억장치에 미리 적재
요청데이터 | 주기억장치 상태(예측 반입 후) |
A | [A,B] |
B | [B,C] |
D | [D,E] |
*쉽게 설명하면 책을 읽는다고 예상할 때 다음에 읽을 책을 예상하고 미리 가져오는 방식입니다. 예상대로 읽으면 유리하지만, 예상이 틀리면 불필요한 책이 자리를 차지할 수 있습니다
배치(Placement)전략
데이터를 주기억장치의 어느 위치에 배치할지 결정하는 전략
최초적합(First Fit) :
첫번째로 발견한 충분한 크기의 공간에 데이터를 배치
검색 시간이 짧음.
예제
주기억장치의 가용 블록 크기 :
블록 1 : 10KB, 블록 2 : 20KB, 블록 3 : 15KB, 블록 4 : 30KB
프로세스 크기 : 12KB, 8KB, 25KB(순서대로 P1 ,P2, P3)
P1(12KB) :
블록 1(10KB) :크기 부족 →건너뜀
블록 2(20KB) : 크기가 충분 →블록 2에 배치(남은 크기 :8KB)
P2(8KB):
블록1(10KB) : 크기가 충분 → 블록 1에 배치(남은 크기 : 2KB)
P3(25KB)
블록 1 (2KB), 블록2(8KB), 블록3(15KB) 크기가 부족 → 건너뜀
블록4(30KB) : 크기가 충분 → 블록 4에 배치(남은 크기 : 5KB)
프로세스 | 크기 | 배치블록 | 남은 크기 |
P1 | 12KB | 블록2 | 8KB |
P2 | 8KB | 블록1 | 2KB |
P3 | 25KB | 블록4 | 5KB |
최적적합(Best Fit) :
가장 작은충분한 크기의 공간에 데이터를 배치
외부 단편화를 줄일 수 있으나, 검색 시간이 길어질 수 있음.
예제
주기억장치의 가용 블록 크기 :
블록 1 : 10KB, 블록 2 : 20KB, 블록 3 : 15KB, 블록 4 : 30KB
프로세스 크기 : 12KB, 8KB, 25KB(순서대로 P1 ,P2, P3)
P1(12KB) :
가장 작은 충분한 크기 → 블록3(15KB)에 배치(남은 크기:3KB)
P2(8KB) :
가장 작은 충분한 크기 → 블록1(10KB)에 배치(남은 크기:2KB)
P3(25KB) :
가장 작은 충분한 크기 → 블록4(30KB)에 배치(남은크기 : 5KB)
프로세스 | 크기 | 배치블록 | 남은 크기 |
P1 | 12KB | 블록3 | 3KB |
P2 | 8KB | 블록1 | 2KB |
P3 | 25KB | 블록4 | 5KB |
최악적합(Worst Fit) :
가장 큰 공간에 데이터를 배치
큰공간을 유지하며 외부 단편화를 줄이는 데 유리
예제
주기억장치의 가용 블록 크기 :
블록 1 : 10KB, 블록 2 : 20KB, 블록 3 : 15KB, 블록 4 : 30KB
프로세스 크기 : 12KB, 8KB, 25KB(순서대로 P1 ,P2, P3)
P1(12KB) : 가장 큰 공간 → 블록4(30KB)에 배치(남은 크기 : 18KB)
P2(8KB) : 가장 큰 공간 → 블록2(20KB)에 배치(남은 크기 :12KB)
P3(25KB) : 가장 큰 공간 → 블록3(15KB), 블록4(18KB) 블록4에 배치(남은 크기 : 5KB)
프로세스 | 크기 | 배치블록 | 남은 크기 |
P1 | 12KB | 블록4 | 18KB |
P2 | 8KB | 블록2 | 12KB |
P3 | 25KB | 블록4 | 5KB |
가장 큰 공간
교체(Replaccement)전략 :
주기억장치가 가득 찬 경우, 어떤 데이터를 제거할지 결정하는 전략
데이터를 제거 해주는 역할을 페이지 교체 알고리즘이라고 합니다.
최소 최근 사용(LRU, Least Recently Used) :
가장 오랫동안 사용되지 않은 데이터를 제거
예제
프레임 수 :3개
페이지 요청 순서 : A,B,C,A,D,B,E,C,D
요청 :A →[A](A적재)
요청 :B →[A,B](B적재)
요청 :C →[A,B,C](C적재)
요청 :A→[A,B,C](A는 이미 있음)
요청 :D→[B,C,D](LRU = A제거, D적재)
요청 :B →[B,C,D](B는 이미 있음)
요청 :E →[C,D,E](LRU=B제거, E적재)
요청 :C→[C,D,E](C는 이미 있음)
요청 :D →[C,D,E](D는 이미 있음)
최적 교체(Optimal Replacement) :
앞으로 가장 오랫동안 사용되지 않을 데이터를 제거
이론적으로 최적이지만, 실제 구현은 어렵습니다.
예제
프레임 수 :3개
페이지 요청 순서 : A,B,C,A,D,B,E,C,D
요청 :A →[A]
요청 :B →[A,B]
요청 :C →[A,B,C]
요청 :A→[A,B,C]
요청 :D→[A,D,C](B는 이후 가장 늦게 사용됨)
요청 :B →[B,D,C](가장 늦게 사용 될 A제거)
요청 :E →[B,E,C](가장늦게 사용될 D를 제거)
요청 :C→[B,E,C]
요청 :D →[D,E,C](가장늦게 사용될 B제거)
첫 번째로 들어온 데이터 제거(FIFO, First In First Out):
가장 먼저 들어온 데이터를 제거
구현이 간단하나, 항상 효율적이지는 않음.
벨레이디의 모순 현상이 발생합니다.(페이지 프레임 수가 많으면 페이지 부재의 수가 줄어드는것이 일반적이지만, 페이지 프레임 수를 증가 시켰는데도 불구하페이지 부재가 더 많이 일어나는 현상을 의미
예제
프레임 수 :3개
페이지 요청 순서 : A,B,C,A,D,B,E,C,D
요청 :A →[A]
요청 :B →[A,B]
요청 :C →[A,B,C]
요청 :A→[A,B,C]
요청 :D→[B,C,D](가장 먼저들어온 A제거)
요청 :B →[B,C,D]
요청 :E →[C,D,E](가장 먼저 들어온 B제거)
요청 :C→[C,D,E]
요청 :D →[C,D,E]
*스케줄링의 FIFO와의 차이
구분 | FIFO 스케줄링 | FIFO 교체 전략 |
적용 영역 | 프로세스 스케줄링 | 기억장치 관리 (페이지 교체) |
기준 | 프로세스의 도착 시간 | 페이지의 적재 순서 |
목적 | CPU 사용 순서 관리 | 메모리 공간 효율적 관리 |
예 | FCFS (First Come First Serve) | 페이지 교체에서 FIFO 사용 |
가상기억장치(Virtual Memory)
정의 : 가상 기억장치는 물리적 주기억장치의 크기와 관계없이 큰 메모리 공간을 사용하는 것처럼 보이게 하는 기술입니다.
실제 물리적 메모리(주기억장치)의 용량을 초과한 데이터를 보조기억장치(디스크)에 임시로 저장하여 프로그램 실행 시 필요한 데이터만 물리적 메모리에 올립니다.
특징 :
효율적인 메모리 사용: 모든 프로그램을 메모리에 동시에 적재하지 않아도 실행 가능.
프로그램 실행 가능성 확대: 물리적 메모리가 부족해도 큰 프로그램 실행 가능.
논리 주소와 물리 주소 분리:CPU는 논리 주소(Logical Address)를 사용하고, 운영체제가 이를 물리 주소(Physical Address)로 변환.
구현방식
페이지 기반 가상 기억장치 (Paging):
메모리를 고정 크기 블록(페이지)로 나누어 관리.
페이지와 물리적 프레임을 매핑하여 사용.
페이지 부재(Page Fault) 발생 시 필요한 페이지를 디스크에서 메모리로 가져옴.
세그먼트 기반 가상 기억장치 (Segmentation):
메모리를 가변 크기 블록(세그먼트)으로 나누어 관리.
코드, 데이터, 스택 등을 논리적으로 분리하여 효율적.
페이지드 세그먼테이션 (Paged Segmentation):
페이지와 세그먼트를 결합한 방식.
세그먼트를 더 작은 페이지로 나누어 관리.
장점 및 단점
장점 :
효율적인 메모리 사용:자주 사용하지 않는 데이터는 디스크에 저장, 메모리 공간 절약.
프로세스 격리:각 프로세스가 독립된 주소 공간을 가지므로, 다른 프로세스에 의한 침범 방지.
크기 제약 완화:프로그램 크기가 물리적 메모리보다 커도 실행 가능.
단점:
속도 저하:페이지 부재 발생 시 디스크 접근으로 속도가 느려질 수 있음.
오버헤드:페이지 테이블 등 관리 구조로 인해 추가적인 메모리 사용.
복잡성 증가:운영체제에서 주소 변환, 페이지 교체 등 추가적인 작업 필요.
예시
페이지 기반 예시:
프로그램이 16KB 크기이고, 메모리가 4KB 크기의 프레임으로 나뉘어 있다고 가정.
프로그램의 첫 번째 4KB는 프레임 1에, 두 번째 4KB는 프레임 5에 저장.
페이지 부재(Page Fault):
CPU가 요청한 페이지가 메모리에 없을 때 발생.
디스크에서 해당 페이지를 가져와 메모리에 적재.
운영체제에서의 동작 과정
프로그램이 가상 주소를 생성.
운영체제가 페이지 테이블을 참조하여 물리 주소로 변환.
페이지가 메모리에 없으면 페이지 부재 처리.
출처 및 참조:
정보처리 산업기사 필기 시나공(기본서)