기억장치 관리(Memory Management)
제 3 부 기억장치 관리(Memory Management)
8. 기억장치 관리(Memory Management)
▶ 기억장치 공유: 시스템의 효율을 위해 기억장치 속에 여러 개의 프로세스가 존재해야 함
8.1 배경(Background)
▶ 기억 장치: 각각 주소를 갖는 워드(word) 혹은 바이트(byte)의 대규모 배열
▶ 전형적인 명령어 실행:
- 기억장치에서 한 명령어를 가져옴
- 명령어를 해독하고 기억장치에서 피연산자를 가져옴
- 피연산자에 대해 명령어를 실행하고 결과를 기억장치에 저장함
8.1.1 주소 바인딩(Address Binding)
▶ 기억장치 관리 기법에 의해 프로세스는 실행중에 디스크와 기억장치 사이에서 이동함
→ 입력 큐(작업 큐)에서 대기
▶ 주소의 표현: [그림 8.1] 사용자 프로그램의 단계별 처리 과정
원시 프로그램 ............................. ‘심볼’ ex) COUNT
↓ 컴파일러/어셈블러(compiler/assembler)
목적 모듈 ............................. ‘재배치 가능 주소’ ex) 모듈의 처음부터 14바이트
↓ 연결 편집기(linkage editor)
적재 모듈 ................................. ‘절대 주소’(1안) ex) 74014
↓ 적재기(loader)
이진 메모리 이미지 ...................... ‘절대 주소’(2안) ex) 74014
▶ 바인딩(binding): 한 주소 공간(재배치 가능 주소)에서 다른 주소 공간(절대 주소)으로의 사상
- 컴파일 시간: 프로세스의 적재 위치를 컴파일 시간에 알 수 있는 경우 절대 코드 생성 가능
→ 시작 주소가 바뀌면 컴파일 필요
ex) MS_DOS.COM
- 적재 시간: 컴파일러에 의해 재배치 코드를 생성하고 최종 바인딩은 적재 시간에 수행
→ 시작 주소가 바뀌면 재적재만 하면 됨
- 실행 시간: 프로세스가 실행중에 기억장치 세그먼트를 이동하려면 바인딩은 실행 시간에 수행
→ 특별한 하드웨어 필요(8.2절 참조)
8.1.2 동적 적재(Dynamic Loading)
▶ 동적 적재: 효율적인 기억장치 공간 이용
- 모든 루틴은 재배치 가능한 적재 형태로 디스크상에 존재
- 어떤 루틴을 호출하면 그 루틴이 적재되어 있는지 조사하고,
- 적재되어 있지 않은 경우 재배치 가능 연결 적재기(executable linking loader)에 의해 적재되고 테이블을 갱신함
→ 장점: 사용되지 않는 루틴은 결코 적재되지 않음
ex) 오류처리 루틴: 간혹 사용되는 많은 양의 코드
8.1.3 동적 연결(Dynamic Linking)
▶ 시스템 라이브러리의 정적 연결(static linking)
- 시스템 라이브러리의 복사본을 가지고 다른 목적 모듈처럼 취급
▶ 시스템 라이브러리의 동적 연결(dynamic linking)
ex) 언어 서브루틴 라이브러리
- 적재가 아니라 연결이 실행 시간까지 지연됨
- 언어 라이브러리의 복사본을 두는 대신 ‘스터브(stub)’를 포함함
(기억장치 상주 라이브러리를 찾는 방법과
존재하지 않는 경우 그 라이브러리를 적재하는 방법에 관한 적은 양의 코드)
- 라이브러리 코드의 복사본을 수행
- 버전 정보를 이용하여 라이브러리의 호환성을 판단함: ‘공유 라이브러리’
8.1.4 중첩(Overlay)
▶ 중첩: 프로세스는 할당된 기억장치보다 클 수 있기 때문에, 주어진 시간에 필요한 명령어와 자료를 기억장치에 유지시키는 방법이 필요함
→ 동적 적재나 동적 연결 필요
▶ 2 패스 어셈블러의 예: [그림 8.2] 2-패스 어셈블러를 위한 중첩
(패스 1) 심볼 테이블 작성 → (패스 2) 기계어 코드 생성
1) 요소의 크기: 총 200K
- 패스 1: 70K
- 패스 2: 80K
- 심볼 테이블: 20K
- 공통 루틴: 30K
- 중첩 구동기: 10K
2) 중첩
- 중첩 A: 심볼 테이블, 공통 루틴, 패스 1, (중첩 구동기) - 130K
- 중첩 B: 심볼 테이블, 공통 루틴, 패스 2, (중첩 구동기) - 140K
▶ 단점: 프로그래머는 중첩 구조를 적절하게 설계하고 프로그램하기 위해, 프로그램 구조, 코드 또는 자료 구조를 완전하게 이해해야 함
8.2 논리적/물리적 주소 공간(Logical versus Physical Address Space)
▶ 논리적 주소 ↔ 물리적 주소
- 논리적 주소: 중앙처리장치가 생성하는 주소(논리 주소 공간) - “가상 주소(virtual address)”
- 물리적 주소: 기억장치가 나타내는 주소(물리 주소 공간)
▶ 바인딩 기법에 따라,
- 컴파일시간 및 적재시간의 주소 바인딩의 경우: 논리적 주소 = 물리적 주소
- 실행시간 주소 바인딩의 경우: 논리적 주소 ≠ 물리적 주소
▶ 기억장치 관리기(MMU: Memory Management Unit): 가상 주소에서 물리 주소로의 실행시간 사상을 하는 하드웨어 장치
[그림 8.3] 재배치 레지스터(relocation register; 기준 레지스터)를 이용한 동적 재배치
8.3 스와핑(Swapping)
▶ 프로세스는 기억장치에서 실행하다가 일시적으로 보조기억장치(디스크)로 이주할 수 있으며, 계속 실행하기 위해 다시 기억장치로 되돌아 갈 수 있음
[그림 8.4] 예비 기억장치로 디스크를 사용한 두 프로세스의 스와핑
ex) 라운드 로빈 스케줄링 알고리즘: 스왑인(swap-in), 스왑아웃(swap-out)
ex) 우선순위 스케줄링 알고리즘: 롤인(roll-in), 롤아웃(roll-out)
▶ 디스패처(dispatcher): 큐에 있는 다음 프로세스가 기억장치 속에 있는지 확인하고, 그 프로세스가 없고 빈 공간도 없으면 기존 프로세스를 내보내고 원하는 프로세스를 불러들여, 레지스터를 적재하고 제어권을 선택한 프로세스에게 넘김
▶ 문맥 교환 시간(context-switch time): 대부분이 전송 시간임
ex) 사용자 프로세스 = 100K, 보조기억장치의 전송률 = 1MB/초
→ [전송 시간: 100ms(100K/1000K) + 회전 지연 시간: 평균 8msec] * 2(제거/적재) = 216msec
▶ 스와핑의 제약: 완전한 휴지 상태에서만 가능
ex) 입출력 계류(pending; 진행중) 상태에서 P1에서 P2로의 스와핑은 엉뚱한 자료의 입출력을 초래할 수 있음
→ (해결책) 계류중인 입출력을 가진 프로세스를 스왑하지 말고, 입출력을 운영체제 버퍼에서만 실행함
8.4 연속 할당(Contiguous Allocation)
▶ 기억장치 분할: [그림 8.5] 기억장치 분할
- 운영체제: 하위 기억장치
- 사용자 프로세스: 상위 기억장치
8.4.1 단일 분할 할당(Single-Partition Allocation)
“하나의 사용자 프로세스만이 기억장치에 상주”
▶ 운영체제와 사용자 프로세스의 보호: 재배치 레지스터(기준 레지스터) + 한계 레지스터
[그림 8.6] 재배치 및 한계 레지스터를 위한 하드웨어 지원
→ 재배치 레지스터 기법은 운영체제의 동적인 크기 변화를 지원함
ex) 일시적인 운영체제 코드: 장치 구동기
8.4.2 다중 분할 할당(Multiple-Partition Allocation)
“여러 사용자 프로세스가 동시에 기억장치에 상주”
▶ 입력 큐에서 대기하는 프로세스들에게 가용 기억장치를 할당하는 문제
→ 항상, 이용 가능한 블록 크기 목록과 입력 큐를 유지함
1) MFT(multiprogramming with a fixed number of tasks):
기억장치를 여러 개의 고정 크기로 분할하고 각 프로세스를 하나의 분할에 할당하는 방법
2) MVT(multiprogramming with a variable number of tasks):
각 프로세스에 가변 크기의 분할을 할당하는 방법
ex) 선입선출 및 라운드 로빈(q=1) 중앙처리장치 스케줄링의 경우
[그림 8.7] 스케줄링 예 → [그림 8.8] 기억장치 할당 및 장기 스케줄링
▶ 가용 공간 집합에서 하나의 가용 공간을 선택하는 방법
- 최초 적합(first-fit): 충분히 큰 첫 번째 가용 공간에 할당
- 최상 적합(best-fit): 충분히 큰 가용 공간 중에서 가장 작은 가용 공간을 할당 → 가장 작은 가용 공간을 만들어 냄
- 최악 적합(worst-fit): 가장 큰 가용 공간에 할당 → 가장 큰 가용 공간을 만들어 냄
* 모의 실험 결과, 최초나 최상 적합이 시간과 기억장치 이용률 측면에서 최악 적합보다 우수함
8.4.3 외부 및 내부 단편화(External and Internal Fragmentation)
▶ 외부 단편화(external segmentation): 어떤 요구를 만족시킬 수 있는 충분한 전체 기억 공간은 남아 있지만 공간이 연속되지 않았을 때 발생
ex) 그림 8.8(c): 총 560K(= 300K + 260K)은 P5(500K)를 수행시키기에 충분함
▶ 내부 단편화(internal segmentation): 생성되는 가용 공간을 관리하기 위한 부담이 가용공간 자체보다 큰 경우, 그 작은 공간을 요구 공간에 포함시켜서 할당하는 경우 발생
[그림 8.9] 약간 많은 바이트를 할당하는 기억장치 할당
▶ 압축(compaction): 외부 단편화를 해결하기 위해 기억장치의 내용들을 적절히 이동시켜서 모든 가용 공간을 하나의 큰 블록으로 만드는 것
- 압축은 재배치가 동적인 경우에만 가능함: [그림 8.10] 압축
- 최적의 압축 정책을 선택하는 것은 매우 어려움: [그림 8.11] 기억장치를 압축시키는 방법의 비교
8.5 페이징(Paging)
▶ 개념: 외부 단편화 문제를 해결하기 위해 프로세스의 기억 장소가 불연속일 수 있도록 허용하는 한 방법
8.5.1 기본 방법(Basic Method)
▶ 프레임(frame)과 페이지(page)
“프레임” ← 동일 크기 → “페이지”
물리적 기억장치의 고정 크기 블록 논리적 기억장치의 고정 크기 블록
(기억장치나 보조기억장치)
▶ 논리 주소와 실제 주소
논리 주소 = 페이지 번호(p) + 변위(d)
↓
페이지 테이블
↓
실제 프레임의 기준 주소(f) + 변위(d) = 실제 주소
[그림 8.12] 페이징 하드웨어
[그림 8.13] 논리 및 물리 기억장치의 페이징 모델
▶ 프레임과 페이지의 크기는 하드웨어에 의해 정의됨: 2의 거듭제곱 사용
ex) 논리 주소공간의 크기 = 2m, 페이지의 크기 = 2n
→ 논리주소의 상위 m-n비트: 페이지 번호, 하위 n비트: 페이지 변위
페이지 번호
페이지 변위
p
d
m-n bits
n bits
ex) [그림 8.14] 4바이트 페이지를 가진 32바이트 기억장치의 페이징 예
→ 논리 주소: 0 3 4 13
페이지 번호와 변위 (0, 0) (0, 3) (1, 0) (3, 1)
실제 주소: 20(5*4+0) 23(5*4+3) 24(6*4+0) 9(2*4+1)
▶ 페이징 기법에서 외부 단편화는 없지만, 내부 단편화는 마지막 프레임에서 발생 가능
ex) 페이지 크기 = 2,048byte인 경우,
프로세스 크기 = 72,766byte → 35페이지 + 1086byte → 36페이지 할당(내부 단편화 = 962byte)
→ 페이지 크기가 작을수록 평균 내부 단편화는 줄어들지만 페이지 테이블의 용량이 증가함
▶ 프로세스의 크기(페이지 수)가 사용 가능 프레임 리스트의 크기(프레임 수)보다 작거나 같은 경우 할당을 시작하며, 할당되는 프레임들이 해당 프로세스의 페이지 테이블에 등록됨
ex) [그림 8.15] 가용 프레임
▶ 페이징 기법은 실제로는 산재되어 있는 물리적 기억공간을 사용자에게 하나의 연속된 기억공간으로 간주할 수 있게 함
→ 운영체제의 “프레임 테이블”관리: 각 프레임의 할당 여부와 어느 프로세스의 어느 페이지에 할당되어 있는지를 관리
8.5.2 페이지 테이블의 구조(Structure of the Page Table)
▶ 각 프로세스마다 하나씩의 페이지 테이블을 할당
8.5.2.1 하드웨어 지원(Hardware Support)
▶ 고속의 전용 레지스터 집합(register set)으로 구현하는 방법
- 분배기(dispatcher)에 의해 다른 프로그램 레지스터와 동일한 방식으로 재 적재하는 방식
- 신속한 메모리 접근이 가능
- 페이지 테이블이 작은 경우에 적합
▶ 페이지 테이블 기준 레지스터(PTBR; page-table base register)로 구현하는 방법
- 실제 페이지 테이블은 주기억장치에 유지하고, 그 주소를 저장하는 레지스터를 두는 방식
- 두 번의 기억장치 접근이 필요: 페이지 테이블 항목을 위해서 한 번, 워드를 위해서 한 번
→ 기억 장치가 두 배로 느려짐
- 페이지 테이블이 큰 경우에 적합
▶ 소용량 고속의 하드웨어 캐쉬(cache)로 구현하는 방법
- 연관 레지스터(associative register) 또는 TLBs(translation look-aside buffers)라고 불림
키(key) + 값(value)
↓ ↓
페이지 번호 프레임 번호
- 일부 몇 개의 페이지 테이블 항목만 저장하고, 연관 레지스터에 없는 경우는 메모리에 있는 페이지 테이블에 접근하고 해당 항목을 연관 레지스터에 적재하는 방식
ex) 페이지 번호가 연관 레지스터에서 발견되는 적중률(hit ratio) = 약 80%
① 연관 레지스터에 있는 경우
(연관 레지스터 탐색 시간) 20nsec + (기억 장치 접근 시간) 100nsec = 120nsec
② 연관 레지스터에 없는 경우
(연관 레지스터 탐색 시간) 20nsec + (페이지의 프레임 번호를 위한 기억장치 접근) 100nsec
+ (해당 워드를 위한 기억 장치 접근) 100nsec = 220nsec
→ 유효 기억 장치 접근 시간(effective memory access time) = 0.8*120 + 0.2*220 = 140nsec
8.5.2.2 보호(Protection)
▶ 페이징 기법에서의 기억 장치 보호: 각 페이지와 연관되어 있는 보호용 비트(bit)들에 의해 수행
→ 부당한 접근은 트랩 발생
- 읽기/쓰기(read/write) ↔ 읽기 전용(read-only)
- 읽기/쓰기(read/write) ↔ 읽기 전용(read-only) ↔ 실행 전용(execute-only)
- 유효(valid) 접근 ↔ 무효(invalid) 접근: 프로세스의 논리 주소 공간에 존재하는 페이지인지 구분
[그림 8.17] 페이지 테이블에서 유효(v) 또는 무효(i) 비트
→ 마지막 페이지의 내부 단편화에의 접근은 타당한 것으로 간주됨
→ 이와 달리, 페이지 테이블 길이 레지스터(PTLR; page table length table)를 사용하기도 함
8.5.3 다단계 페이징(Multilevel Paging)
▶ 현대의 매우 큰 논리 주소 공간(232-264) 시스템의 경우, 페이지 테이블도 상당히 큼
→ 페이지 테이블을 주기억장치에서 연속적으로 할당하지 않고 작은 조각으로 나눔
▶ 2단계 페이징 기법(two-level paging scheme): 페이지 테이블의 페이지화
[그림 8.18] 2단계 페이지 테이블 기법
ex) 32비트 논리 주소
페이지 번호
페이지 변위
p1
p2
d
10 bits
10 bits
12 bits
→ [그림 8.19] 2단계 32비트 페이징 구조에 대한 주소 변환
ex) VAX 구조(32비트)에서의 주소
영역
페이지
변위
s
p
d
2 bits
21 bits
9 bits
- s: 영역 번호
- p: 페이지 테이블에 대한 인덱스
- d: 페이지 내의 변위
ex) 64비트 논리 주소(2단계) → 바깥 페이지 테이블이 너무 크게 되므로 부적절
바깥 페이지
안쪽 페이지
변위
p1
p2
d
42 bits
10 bits
12 bits
▶ 3단계 페이징 기법(three-level paging scheme): 바깥 페이지 테이블의 페이지화
ex) 64비트 논리 주소(3단계)
두 번째 바깥 페이지
바깥 페이지
안쪽 페이지
변위
p1
p2
p3
d
32 bits
10 bits
10 bits
12 bits
ex) SPARC 구조(32비트)
▶ 4단계 페이징 기법(four-level paging scheme): 2번째 바깥 페이지 테이블의 페이지화
ex) Motorola 68030 구조(32비트)
8.5.4 역 페이지 테이블(Inverted Page Table)
▶ 페이지 테이블 기법의 결점: 각 프로세스마다 존재하는 페이지 테이블이 매우 방대한 항목들로 구성되어 많은 양의 물리적 메모리를 소비할 수 있음
→ 역 페이지 테이블에 의한 해결
▶ 역 페이지 테이블: 프레임 테이블
→ 메모리의 실제 프레임마다 하나의 ‘항목’을 가짐
1) 페이지를 소유한 프로세스(pid: 프로세스 번호)
2) 페이지의 가상 주소(p: 페이지 번호)
[그림 8.20] 역 페이지 테이블
ex) IBM System/38, IBM RISC System 6000, IBM RT, HP Spectrum 등에서 채택
ex) IBM RT의 가상 주소: <process-id, page-number, offset>
▶ 역 페이지 테이블 기법의 특성
- (장점) 프로세스마다 별도의 페이지 테이블을 저장하는데 필요한 메모리 총량 감소
- (단점) 페이지를 참조할 때 탐색 시간 증가
8.5.5 공유 페이지(Shared Pages)
▶ 개념: 공통된 코드를 동일한 페이지에 두고 공유 가능
↓
‘재진입 코드(reentrant code 또는 pure code)’: 스스로 수정하지 못하는 코드(읽기 전용)
→ 시분할 시스템에서 중요
ex) [그림 8.21] 페이징 환경 하에서의 코드 공유
ex) 150K의 코드와 50K의 자료공간으로 되어 있는 문장 편집기를 40명의 사용자가 이용하는 경우
- 전체 크기: (150K + 50K) * 40 = 8000K
- 축소 크기: 150K + (50K * 40) = 2150K
▶ 역 페이지 테이블을 사용하는 시스템은 공유 메모리를 구현하기 어려움
8.6 세그먼테이션(Segmentation)
8.6.1 기본 방법(Basic Method)
▶ 기억 장치에 대한 사용자 관점: [그림 8.22] 프로그램의 사용자 관점
“크기가 변할 수 있고 그들 사이에 순서도 필요 없는 세그먼트의 모임”
▶ 세그먼트의 종류
- 프로그램: 주프로그램, 서브루틴, 프로시저, 함수, 모듈의 집합
- 자료 구조: 테이블, 배열, 스택 변수 등
→ 위치에 관계없이 이름으로 참조하고 크기는 다양함
▶ 세그먼트의 요소: 세그먼트 시작부터의 변위로 구별함
ex) 프로그램의 첫 번째 명령문, 심볼 테이블의 17번째 항목, Sqrt 함수의 5번째 명령문 등
▶ 세그먼테이션: 기억 장치의 사용자 관점을 지원하는 기억 장치 경영 기법
- 논리 구조 공간: 세그먼트의 모임
- 세그먼트: 이름과 길이를 가짐
- 주소: 세그먼트 이름(번호) + 변위
▶ 구현
- 어셈블러 또는 컴파일러가 자동적으로 세그먼트를 생성하고,
- 적재기가 세그먼트에 번호를 지정함
ex) PASCAL의 세그먼트
① 전역 변수
② 프로시저 호출 스택: 파라미터와 복귀 주소의 저장
③ 각 프로시저나 함수의 코드 부분
④ 각 프로시저나 함수의 지역 변수
ex) FORTRAN의 세그먼트
→ 각 공통 블록에 대해 별도의 세그먼트 생성
8.6.2 하드웨어(Hardware)
▶ 세그먼트 테이블: 사용자가 정의한 2차원 주소를 1차원 실제 주소로 사상
→ 각 항목: 세그먼트의 기준(base) + 세그먼트의 한계(limit)
↓ ↓
시작 물리 주소 세그먼트의 길이
[그림 8.23] 세그먼테이션 하드웨어
[그림 8.24] 세그먼테이션의 예
8.6.3 세그먼트 테이블의 구현(Implementation of Segment Table)
▶ 고속 레지스터 집합
→ 시간 절약을 위해 기준 주소와의 덧셈과 임계값과의 비교가 동시에 이루어짐
▶ 기억 장치: 많은 수의 세그먼트로 구성되는 경우에 바람직
- 두 레지스터 사용
① STBR(Segment Table Base Register): 세그먼트 테이블의 주소 지정
② STLR(Segment Table Length Register): 세그먼트 테이블의 길이 = 세그먼트의 수
- 주소 접근 과정
① 논리 주소 (s, d)의 입력
② 세그먼트 번호 점검: s < STLR 점검
③ 세그먼트 주소 추출: STBR + s
④ 원하는 단어의 실제 주소: STBR + s + d
→ 논리 주소마다 두 번의 기억 장치 접근 필요: 속도가 절반으로 감소
▶ 연관 레지스터(associative register) 집합
→ 가장 최근에 사용된 일부 세그먼트들을 고속의 기억 장치에 저장: 속도 향상
8.6.4 보호(Protection)와 공유(Sharing)
▶ 보호: 세그먼트는 프로그램의 의미적으로 관계 있는 부분을 나타내기 때문에 한 세그먼트 내에 있는 모든 항목들은 같은 방법으로 사용됨
→ 세그먼트 테이블의 각 항목마다 보호 비트를 둠: 프로그램 오류가 하드웨어에 의해 발견됨
ex) - 명령어 세그먼트: read-only/execute-only
- 행렬 세그먼트: 자동 색인 검사
▶ 공유: 프로그램이나 데이터의 공유가 세그먼트 수준에서 제공됨
[그림 8.25] 세그먼트 메모리 시스템에서의 세그먼트 공유
8.6.5 단편화(Fragmentation)
▶ 세그먼테이션의 경우, ‘외부 단편화’ 발생
페이지 ↔ 세그먼트
(일정 크기) (가변 크기)
- 장기 스케줄러에 의한 동적 기억 장치의 할당 방법: 최상 적격(best-fit) 또는 최초 적격(first-fit)
- 외부 단편화 발생시: 대기 혹은 압축
→ 세그먼테이션은 동적 재배치 알고리즘이므로 원할 때마다 압축시킬 수 있음
8.7 페이지화된 세그먼테이션(Segmentation with Paging)
▶ 페이징과 세그먼테이션의 병합: 각 장점을 살림
8.7.1 MULTICS
▶ 세그먼트의 페이지화: 각 세그먼트에 대해 각각의 페이지 테이블이 존재
[그림 8.26] GE 645(Multics)에서의 페이지화된 세그먼테이션
▶ 세그먼트 테이블도 페이징을 한 경우의 논리 주소(34 비트)
세그먼트 번호
변위
s1
s2
d1
d2
8 bits
10 bits
6 bits
10 bits
- s1: 세그먼트 테이블을 가지고 있는 페이지 테이블의 인덱스
- s2: 세그먼트 테이블의 페이지 내에서의 변위
- d1: 원하는 세그먼트의 페이지 테이블에서의 변위
- d2: 접근하고자 하는 단어를 포함하고 있는 페이지 내에서의 변위
[그림 8.27] MULTICS에서의 주소 변환
8.7.2 OS/2 32 비트 버전(32-Bit Version)
▶ 개요
- 페이지화된 세그먼테이션 기법을 사용하는 Intel 386(486) 구조에서 수행
- 프로세스별 세그먼트의 최대 수 = 16K, 세그먼트의 최대 크기 = 4Gbyte, 페이지 크기 = 4Kbyte
- 프로세스의 주소 공간: 두 분할로 구성
① 각 프로세스의 독점 영역: 8K 세그먼트
→ 지역 디스크립터 테이블(LDT; local discriptor table)에서 정보 유지
② 프로세스 사이의 공유 영역: 8K 세그먼트
→ 광역 디스크립터 테이블(GDT; globall discriptor table)에서 정보 유지
- LDT와 GDT의 각 항목: 8바이트로 구성 → 세그먼트의 기준 위치와 길이 등의 상세 정보
- 논리 주소: (선택자, 변위)쌍으로 구성
1) 선택자(16비트)
s
g
p
13 bits
1 bits
2 bits
① s: 세그먼트 번호
② g: 세그먼트 종류(LDT ↔ GDT)
③ p: 세그먼트 보호
2) 변위(32비트): 세그먼트 내에서의 위치
- 기계는 6개의 세그먼트 레지스터 보유: 한 프로세스는 한 순간에 6개의 세그먼트 지정 가능
→ 6개의 8바이트 마이크로 프로그램 레지스터(캐시)에 LDT나 GDT의 디스크립터를 저장
- 2단계 페이징 기법을 위한 선형 주소(32비트)
페이지 번호
페이지 변위
p1
p2
d
10 bits
10 bits
12 bits
- 주소 변환 기법: [그림 8.28] Intel 80386 주소 변환
'시리즈 > OS' 카테고리의 다른 글
10. 파일 시스템 인터페이스(File System Interface) (0) | 2014.08.07 |
---|---|
가상 기억장치(Virtual Memory) (0) | 2014.07.27 |
운영체제 - 교착 상태(Deadlocks) (0) | 2014.07.24 |
중앙처리장치 스케줄링(CPU Scheduling) (0) | 2014.07.17 |
프로세스 관리(Process Management) (0) | 2014.06.23 |