테마
기억장치 관리와 가상 기억장치
주기억장치는 크기가 한정되어 있어 여러 프로그램을 어디에, 어떤 단위로 올릴지 운영체제가 정해야 한다. 실기 시험에서는 빈 영역 표를 주고 최초 적합(first fit)·최적 적합(best fit)·최악 적합(worst fit)이 고르는 영역 번호를 묻는다. 또 페이징(paging)과 세그먼테이션(segmentation), 지역성(locality)·워킹 셋(working set)·스래싱(thrashing)의 정의도 단답형으로 묻는다.
배치 전략
배치 전략(placement strategy)은 새로 들어오는 프로그램을 주기억장치의 빈 영역 중 어디에 놓을지 정하는 규칙이다. 아무 데나 넣으면 작은 빈틈이 쌓여 큰 프로그램이 못 들어간다.
| 전략 | 고르는 영역 |
|---|---|
| 최초 적합(first fit) | 들어갈 수 있는 빈 영역 중 처음 만나는 곳 |
| 최적 적합(best fit) | 들어간 뒤 남는 공간이 가장 작은 곳 |
| 최악 적합(worst fit) | 들어간 뒤 남는 공간이 가장 큰 곳 |
예를 들어 주소가 낮은 쪽부터 빈 영역이 A 25K, B 8K, C 14K, D 40K 순서로 있고 12K 프로그램을 넣는다고 하자. 먼저 12K보다 작은 B를 후보에서 뺀다. 최초 적합은 처음 만나는 A, 최적 적합은 2K가 남는 C, 최악 적합은 28K가 남는 D를 고른다.
단편화
단편화(fragmentation)는 기억장치에 빈 공간이 있는데도 쓸 수 없게 낭비되는 현상이다. 어디에 낭비가 생기는지에 따라 두 가지로 나눈다.
- 내부 단편화(internal fragmentation): 할당한 영역보다 프로그램이 작아 영역 안쪽에 남는 공간이다. 4KB 페이지로 10KB 프로그램을 올리면 3페이지(12KB)가 필요하고 2KB가 남는다. 고정 크기로 나누는 페이징에서 생긴다.
- 외부 단편화(external fragmentation): 빈 영역들이 흩어져 있어 합하면 충분한데도 한 덩어리로는 부족해 못 쓰는 상태다. 가변 크기로 나누는 세그먼테이션에서 생긴다.
페이징과 세그먼테이션
가상 기억장치(virtual memory)는 보조기억장치를 주기억장치처럼 써서, 실제 메모리보다 큰 프로그램도 필요한 부분만 올려 실행하는 방식이다. 프로그램을 나누는 단위에 따라 두 기법이 있다.
| 구분 | 페이징(paging) | 세그먼테이션(segmentation) |
|---|---|---|
| 나누는 단위 | 같은 크기의 페이지 | 코드·데이터·스택 같은 논리 단위인 세그먼트 |
| 단편화 | 내부 단편화 | 외부 단편화 |
주기억장치를 페이지와 같은 크기로 나눈 칸을 페이지 프레임(page frame)이라 한다. 페이징에서 논리 주소는 페이지 번호 = 주소 ÷ 페이지 크기의 몫, 오프셋 = 나머지로 나뉜다. 페이지 크기가 1,024바이트이고 논리 주소가 3,000이면 페이지 번호 2, 오프셋 952다. CS 쪽 문서는 세그먼테이션을 '세그멘테이션'으로 적는다.
지역성·워킹 셋·스래싱
지역성(locality)은 프로세스가 실행되는 동안 일부 페이지만 집중적으로 참조하는 성질이다. 시험에서는 국부성·구역성이라고도 부른다. 가상 기억장치가 적은 메모리로도 잘 돌아가는 근거이고, 아래 워킹 셋 이론도 이 성질에서 나왔다.
- 시간 지역성(temporal locality), 시간 구역성: 방금 참조한 곳을 곧 다시 참조한다. 반복문이 예다.
- 공간 지역성(spatial locality), 공간 구역성: 참조한 곳의 근처를 이어서 참조한다. 배열 순회가 예다.
워킹 셋(working set)은 지금 시점에서 되돌아본 최근 일정 구간 동안 프로세스가 참조한 페이지들의 모임이다. 1968년 데닝(Denning)이 정의했다. 지역성 때문에 이 모임은 곧 쓸 페이지와 거의 겹치므로, 주기억장치에 붙잡아 두면 페이지 부재(page fault)가 줄어 실행이 안정된다. CS 쪽 문서는 이를 '작업 집합'이라 부른다.
스래싱(thrashing)은 페이지 부재가 꼬리를 물어 프로그램을 실행하는 시간보다 페이지를 디스크와 주고받는 시간이 더 길어지는 현상이다. 프로세스를 너무 많이 올려 각자 받는 프레임이 워킹 셋보다 작아지면 생기고, 이때 프로세스를 더 올리면 CPU 이용률이 오히려 떨어진다. 워킹 셋을 보장하거나 실행 중인 프로세스 수를 줄이면 막을 수 있다.
시험 포인트
- 배치 문제는 요청보다 작은 영역과 사용 중 영역을 먼저 지우고 남은 후보에서 고른다.
- 페이징 → 고정 크기 → 내부 단편화. 세그먼테이션 → 논리 단위·가변 크기 → 외부 단편화.
- "최근 일정 구간에 참조한 페이지 모임, 상주시키면 부재 감소" → 워킹 셋. "교체 시간 > 처리 시간" → 스래싱.
