Over View
메모리 연속 할당 기법
프로세스를 메모리에 올릴 때 주소 공간을 메모리의 한 곳에 연속적으로 적재하는 방식이다.
연속 할당 방식은 물리적 메모리를 다수의 분할로 나눠 하나의 분할에 하나의 프로세스가 적재되게 한다.
연속 할당은 크게 고정분할과 가변분할로 나뉜다.
고정분할 방식
물리적 메모리를 정해진 개수만큼의 영구적인 분할로 나눠 각 분할에 하나의 프로세스를 적재하는 방식.
분할의 크기는 모두 동일하거나 다를 수 있다.
고정분할 방식은 동시에 메모리에 올리 수 있는 프로그램의 수가 고정되어 있고
수행 가능한 프로그램의 최대 크기 또한 제한된다는 점에서 가변분할 방식에 비해 융통성이 떨어진다.
또한 고정분할 방식은 외부조각과 내부조각 문제가 발생할 수 있다.
내부 단편화 : 분할 크기보다 작은 프로그램 적재 시 남는 영역
외부 단편화 : 프로그램에 할당 되진 않았지만 크기가 작아서 프로그램을 올릴 수 없는 영역
가변분할 방식
메모리에 적재되는 프로그램의 크기에 따라 분할의 크기, 개수가 동적으로 변하는 방식이다.
따라서 가변분할 방식은 프로그램의 크기를 고려해서 메모리를 할당하고 이를 관리할 수 있는 기법이 필요하다.
가변분할 방식은 프로세스에 딱 맞게 메모리 공간을 사용하기에 내부조각 문제는 발생하지 않는다.
하지만 사용중인 프로세스가 종료되어 메모리에 새로운 프로세스를 올릴 메모리 공간이 충분하지 않을 경우 외부 조각 문제가 발생한다.
외부조각 문제를 해결하기 위한 방법으로 Compaction(압축)방법이 있다.
물리적 메모리 중에서 사용중인 메모리 공간을 한쪽으로 몰고 가용 공간을 확보하는 방법이다.
메모리를 효율적으로 사용할 수 있는 측면에서는 좋은 선택이지만 수행중인 프로세스의 메모리 주소 공간을 이동시켜야 하므로 비용이 매우 많이 든다.
페이징
이렇게 외내부 단편화로 인해 메모리 낭비가 심하다는 것을 알게 되었다.
또한 Compaction을 사용하면 외부 단편화를 해결할 수 있다는 것도 알게 되었다.
하지만 그로 인해 발생하는 오버헤드와 비효율적인 성능으로 사용하기는 힘들다.
그래서 나온 것이 페이징이다.
페이징은 외부 단편화의 해결 방법으로, 주소를 불연속적으로 할당하는 메모리 관리 구조이다.
불연속할당
메모리를 연속적으로 할당하지 않는 방으로,
프로그램에 필요한 메모리를 쪼개어 서로 다른 위치에 있는 메모리 공간에 할당한다.
외부 단편화의 발생 원인은 연속 할당이었기 때문에 불연속적으로 할당하면 외부 단편화는 발생하지 않는다.
고정 분할 방식을 이용하고, 물리 주소 공간을 같은 크기로 나눠 사용한다.
가상 주소는 프로세스 입장에서 바라본 메모리 공간으로 항상 0번지 부터 시작한다.
가상 주소의 분할된 각 영역을 페이지라고 하며 번호를 매겨 관리한다.
물리 메모리의 각 영역은 가상 주소의 페이지와 구분하기 위해 프레임이라고 부르고,
프레임도 페이지와 마찬가지로 번호를 매겨 관리한다.
그림의 화살표는 가상 주소의 각 페이지가 물리 메모리의 어디에 위치한지 나타낸 것이다.
크기가 같기 때문에 페이지는 어떤 프레임에도 배치될 수 있다.
모든 페이지의 위치 정보, 즉 페이지가 어떤 프레임에 매핑 되었는지 정보는 페이지 테이블에 담겨있다.
모든 페이지 테이블에는 숫자만 있는 것이 아니다.
물리 메모리가 할당되지 않은 영역에는 invalid로 표시된다.
페이지 주소 변환 과정
VA<P, D> -> PA<F, D> : 페이지 테이블을 사용하여 P를 F로 바꾸고 D는 변경 없이 그대로 사용한다.
EX1 ) 프로세스가 30번지의 내용을 읽으려고 할 때 (페이지의 크기 10B라고 가정)
- 가상 주소 30번지가 어느 페이지에 있는지 찾는다 : 30번지는 페이지 3의 0번째 위치이므로 VA=<3, 0>
- 페이지 테이블의 페이지 3으로 가서 해당 페이지의 프레임을 찾는다 : 예시에서는 1이므로 프레임 1
- 최종적으로 물리 메모리의 프레임 1의 0번째 위치에 접근해서 내용을 읽어온다. PA=<1, 0>3
EX2 ) 프로세스가 가상 주소 18번지에 값을 저장하려고 할 때
- 가상 주소 18번지가 어느 페이지에 있는지 찾는다: 18번지는 페이지 1의 8번째 위치이므로 VA=<1, 8>
- 페이지 테이블의 페이지 1로 가서 해당 페이지의 프레임을 찾는다: 예시에서는 3이므로 프레임 3
- 최종적으로 프로세스가 저장하려는 값을 프레임 3의 8번 위치에 저장한다. PA=<3, 8>
세그먼테이션
가변 분할 방식을 이용한 가상 메모리 관리 기법으로, 물리 메모리를 프로세스 크기에 따라 가변적으로 나누어 사용하는 방식.
세그먼테이션 테이블
물리 메모리를 프로세스의 크기에 따라 가변적으로 나누어 사용한다.
세그먼트의 크기를 나타내는 limit과 물리 메모리상의 시작 주소를 나타내는 address가 있다.
페이징에선 메모리를 같은 크기의 페이지 단위로 분할하기 때문에 크기 정보를 유지할 필요가 없었지만,
세그먼테이션에선 프로세스 크기에 따라 메모리를 분할하기 때문에 크기 정보를 포함한다.
각 세그먼트가 자신에게 주어진 메모리 영역을 넘어가면 안되기 때문에 세그먼트의 크기 정보에는 크기를 뜻하는 size 대신에 제한을 뜻하는 limit을 사용한다.
세그먼테이션 기법에서도 페이징 기법과 동일하게 물리 메모리가 부족할 때는 스왑 영역을 사용한다.
(테이블에 invalid라고 표시되어 있으면 해당 프로세스가 스왑 영역에 있다는 뜻)
세그먼테이션 기법은 가변 분할 방식이 기본으로 사용되기 때문에 가변 분할 방식의 장단점을 모두 가진다.
장점
메모리를 프로세스 단위로 관리하기 때문에 세그먼테이션 테이블이 작고 단순하다.
단점
물리 메모리의 외부 단편화로 인해 관리가 복잡하다.
세그먼테이션 주소 변환 과정
- 가상 주소를 구한다. VA=<S, D>
- 세그먼테이션 테이블에서 원하는 세그먼트의 address를 알아낸 후 시작 주소에 D(거리)를 더해 물리 주소를 구한다.
이때 메모리 관리자는 거리가 세그먼트의 크기보다 큰지 점검하고
만약 크다면 메모리 오류(=트랩)을 출력하고 해당 프로세스를 강제 종료한다. - 구한 물리 주소로 접근하여 원하는 데이터를 읽거나 쓴다.
EX) 프로세스 A의 32번지에 접근할 때 주소 변환 과정
- 가상 주소를 구한다 -> 가상 주소 VA=<0, 32>
- 시작 주소를 알아내고 물리 주소를 구한다 -> 시작 주소 120 + 거리 32 = 물리주소 152
- 물리 주소 152번지로 접근하여 원하는 데이터를 읽거나 쓴다.
CS 지식의 정석 - 큰돌
쉽게 배우는 운영체제 - 조성호
'CS > 운영체제' 카테고리의 다른 글
TLB (0) | 2024.06.27 |
---|---|
요구 페이징과 페이지 교체 알고리즘 (0) | 2024.06.23 |
가상 메모리와 주소 공간 (0) | 2024.06.18 |
PCB와 Context Switching (0) | 2024.06.18 |
인터럽트 (0) | 2024.06.17 |