Paging
비균등 고정 분할 기법과 가변크기 분할 기법은 메모리를 효율적으로 이용하지 못한다.
전자는 internal fragmentation(내부 단편화)를 초래하고 후자는 external fragementation(외부 단편화)를 일으킨다.
주기억장치를 비교적 작은 고정 조각으로 나눈다고 하자.
페이지라 불리는 이 프로세스 조각은 프레임이라 불리는 빈 메모리의 조각에 저장될 수 있다.
운영체제는 각 프로세스마다 하나의 페이지 테이블을 유지한다.
이 페이지 테이블은 프로세스의 각 페이지들에 해당하는 프레임의 위치를 관리한다.
프로그램 안에서 각 논리주소는 페이지 번호와 페이지 내의 오프셋으로 구성된다.
아래 그림은 페이지와 프레임의 사용 예이다.
(a)는 15개의 빈 프레임들을 의미한다.
(b)는 4개의 빈 프레임을 찾아서 그 프레임에 프로세스 A의 4페이지를 적재한다.
(c)는 3개의 페이지로 이루어진 프로세스 B가 적재된다.
(d)는 4개의 페이지로 구성된 프로세스 C가 차례로 적재된다.
(e),(f)는 5개의 페이지로 구성된 새로운 프로세스 D를 적재하려 할때 공간이 부족하므로 B를 swap-out하고 D를 적재한다.
단순 페이징은 고정 분할 방법과 유사하다.
페이징이 다른 점은 파티션의 크기가 보다 작고 한 프로그램이 하나 이상의 파티션을 차지할 수 있으며, 이 파티션들이 반드시 연속일 필요는 없다는 점이다.
Address
위 사진에서 주소는 16비트이고
페이지의 크기는 1K 즉 1024바이트이다.
상대주소 1502는 이진수로 0000 0101 1101 1110이된다.
페이지의 크기가 1K이므로 10개 비트가 offset으로 사용되고, 나머지 6비트가 페이지 번호가 된다.
그러므로 프로그램은 최대 2^6 = 64개의 1K 페이지로 구성될 수 있다.
주소의 왼쪽 n 비트는 페이지 번호이고, 오른쪽 m 비트는 offset인 n+m 비트인 주소를 생각해 보자.
위 그림에서 n = 6이고, m = 10이 된다.
주소 변환을 위해서는 다음의 과정을 거친다.
1. 논리 주소의 왼쪽 n 비트를 페이지 번호로 이용하기 위하여 추출한다.
2. 이 페이지 번호를 프로세스 페이지 테이블의 인덱스로 이용하여 프레임 번호 k를 찾는다.
3. 찾아진 프레임은 물리 주소 k * 2^m에서 시작되고, 참조하려는 바이트의 물리적 주소는 이 값에 오프셋을 더한 것이다.
Segmentation
사용자 프로그램은 세그먼테이션 기법을 이용하여 나누어질 수 있는 데 프로그램과 그와 관련된 데이터들이 여러 세그먼트로 나누어 진다.
- 세그먼트의 최대 길이에는 제한이 있더라도 프로그램의 모든 세그먼트가 같은 크기일 필요가 없다.
- 페이징 기법과 같이 논리 주소도 세그먼테이션 번호와 오프셋 두 개의 영역으로 구성된다.
- 비균등 크기의 세그먼트를 사용하기 때문에 동적 분할과 유사하다.
- 내부 단편화를 발생시키지 않지만 외부 단편화를 초래한다.
Paging(페이징)은 프로그래머에게 투명한 것에 비해 Segmentation(세그먼테이션) 은 보통 프로그래머가 각 세그먼트를 지정할 수 있으며 프로그램과 데이터를 편의대로 나누기 위한 수단으로 제공된다.
그렇기 때문에 프로그래머는 세그먼트의 최대크기를 알아야 한다.
가장 왼쪽의 n 비트는 세그먼트 번호이고 가장 오른쪽의 m 비트는 offset인 n + m 비트들로 이루어진 주소를 살펴보자.
n = 4, m = 12 이다. 그러므로 세그먼트의 최대 크기는 2^12= 4K이다.
주소변환은 다음과 같은 과정을 거친다.
1. 논리 주소의 왼쪽 n 비트를 세그먼트 번호로 추출한다.
2. 이 세그먼트 번호를 프로세스 세그먼트 테이블의 인덱스로 사용하여 세그먼트의 시작물리주소를 찾는다.
3. 오른쪽 m 비트로 표현된 offset을 세그먼트의 길이와 비교한다. 만약 offset이 그 길이보다 크거나 같다면 그 주소는 유효하지 않다.
4. 접근하고자 하는 물리주소는 세그먼트의 시작 물리주소와 offset의 합이다.
'🖥️ Computer Science > Operating System' 카테고리의 다른 글
[운영체제] Memory Management - 1 (0) | 2024.05.24 |
---|---|
[운영체제] Multiprocessor Scheduling (0) | 2024.05.21 |
[운영체제] Uniprocessor Scheduling (0) | 2024.05.18 |
[운영체제] Deadlock and Starvation (0) | 2024.05.12 |
[운영체제] Concurrency: Mutual Exclusion and Synchronization - 3 (2) | 2024.04.27 |