안녕하세요. 회사와 함께 성장하고 싶은 KOSE입니다.

 

이번 포스팅은 운영체제의 메모리 관리에 대한 글을 작성하고자 합니다. 먼저 가상 메모리의 경우 분량이 방대하기 때문에 다음 포스팅에 작성하고, 기본적인 메모리 방식을 위주로 정리하도록 하겠습니다.

 

멀티프로그래밍 시스템에서 효과적인 메모리 관리는 필수적입니다. 적은 수의 프로세스만이 주기억장치에 있을 때, 대부분의 시간 동안 입출력 작업 종료를 기다리게 되고 처리기는 아무 일도 하지 않게 됩니다. 따라서,  메모리는 사용 가능한 처리기 시간을 소비하기에 충분한 수의 프로세스들이 준비 상태에 있도록 할당되어야 합니다.

 

1. 메모리 관리 요구조건

  • 재배치 - 프로세스가 디스크로 스왑아웃이 되면, 스왑인이 될 때, 다른 공간으로 프로세스를 재배치해야 합니다. 이 과정에서 메모리 참조 부분을 실제 물리주소로 변환할 수 있어야 합니다.
  • 보호 - 다른 프로세스에 속한 프로그램들은 허가 없이 읽기나 쓰기를 위해 임의의 프로세스의 메모리를 참조하면 안 됩니다.
  • 공유 - 필수적인 보호 기능을 침해하지 않는 범위에서 제한된 접근을 통하여 메모리의 일부분을 공유할 수 있도록 허용해야 합니다.

 

 

2. 메모리 관리 기법

 

메모리 관리의 주된 작업은 처리기에 의해 실행될 프로세스를 주기억 장치로 가져오는 것입니다. 주로 '세그먼테이션'과 '페이징'을 활용하는 가상 메모리가 사용되고 있습니다. 

 

기술 설명 장점 단점
고정 분할 시스템 생성 시에 주기억장치가 고정된 파티션들로 분할

프로세스는 균등 사이즈의 파티션 또는 그보다 큰 파티션으로 적재
구현 간단
(운영체제 오버헤드 거의 X)
내부 단편화 발생
최대 활성 프로세스 수 고정
동적 분할 파티션들이 동적으로 생성
각 프로세스는 자신의 크기와 일치하는 크기의 파티션에 적재
내부단편화 X 외부 단편화 발생
메모리 집약으로 인한 효율 하락
단순 페이징 주기억장치는 균등 사이즈 프레임으로 나뉨

프로세스는 프레임들과 같은 길이를 가진 균등페이지들로 나뉨

프로세스의 모든 페이지가 적재되어야 하고 이 페이지를 저장하는 프레임은 비연속 가능
외부 단편화 X 적은 양의 내부 단편화 발생
단순 세그먼테이션 각 프로세스는 여러 세그먼트들로 분할
프로세스의 모든 세그먼트 적재
세그먼트를 저장하는 동적 파티션들은 비연속 가능
내부 단편화 X
동적 분할에 비해 오버해드 적음
외부 단편화 발생
가상 메모리 페이징 프로세스 페이지를  한 번에 전부 로드 X
필요한 페이지가 있으면 후에 호출
외부 단편화 X
멀티 프로그래밍 정도 높음
가상 주소 공간 큼
복잡한 메모리 관리와
오버헤드
가상 메모리 세그먼테이션 필요하지 않은  세그먼트들 로드 X
필요하면 후에 호출
내부 단편화 X
멀티 프로그래밍 정도 높음
큰 가상 주소 공간
복잡한 메모리 관리와
오버헤드

 

 

3. 고정 분할

 

주기억장치를 관리하는 가장 단순한 기법은 고정된 경계를 가지는 메모리 영역으로 구분합니다.

  • 분할크기: 각 분할이 고정된 경계를 가지는 메모리 영역으로 구분되며 균등 분할과 비균등 분할로 나뉩니다.
  • 프로그램이 파티션보다 클 수 있다는 단점이 있습니다 또한, 매우 적은 메모리를 필요로 하더라도 고정된 파티션의 일부에 적재되어야 하기 때문에 내부 공간의 낭비가 발생하는 내부 단편화가 발생합니다.
  • 배치 알고리즘은 균등 분할의 경우 모두 동일한 크기의 파티션으로 균등 분할 되어 있으므로 적재 가능한 파티션이 하나라도 존재하면 프로세스는 배치가 가능합니다.
  • 비균등 분할의 경우 각 프로세스의 용량에 맞는 가장 작은 파티션을 할당하기 위해 스왑아웃된 프로세스들을 유지하는 스케줄링 큐가 필요합니다. 

 

 

4. 동적 분할

 

고정 분할의 기법에서 발생하는 몇 가지 문제점을 해결하기 위해 동적 분할 기법이 개발되었지만 이 기술 역시 현재는 잘 쓰이지 않습니다.

  • 동적 분할에서 파티션의 크기와 개수는 가변적입니다. 한 프로세스가 주기억장치로 적재될 때, 정확히 요구된 크기만큼의 메모리만 할당받습니다.
  • 서로 다룬 프로세스가 스왑인 스왑아웃 하는 과정에서 주기억장치에 사용할 수 없는 단편화된 구멍이 생기게 되는데, 이러한 조각화된 메모리를 외부 단편화라 부릅니다. 이는 메모리 효율성을 저하시킵니다.
  • 메모리 집약을 사용할 경우 파티션을 연속적이게 인접하도록 만들 수 있지만 불필요한 재배치 시간이 소모됩니다.

그림1

  • 배치 알고리즘으로 최적적합, 최초적합, 순환적합 종류가 있으며 최초적합은 가장 간단하며 대부분 가장 최적입니다. 순환 적합은 메모리 마지막 부분에 있는 사용 가능한 블록에서 자주 일어나고, 최적적합은 이름과 다르게 가장 성능이 나쁜 방법으로 가장 작은 블록을 찾아 배정하므로 가장 작은 외부 단편화를 생성합니다.

 

 

 

5. 버디 시스템

 

 

그림2

버디 시스템은 2^k로 블록 단위로 할당 가능한 메모리에 따라 블록을 나눌 수 있습니다. 그림과 같이 만약 56K의 메모리가 필요할 경우 256K -> [128K, 128K] -> [128K, [64K, 64K]]로 나누며 가장 작은 단위에 프로세스를 적재하는 방식입니다.

 

 

 

 

6. 재배치

 

프로세스가 스왑인 스왑아웃되는 과정에서 데이터 위치가 변경될 수 있습니다. 이 문제를 해결하기 위해 주소 유형을 정의하여 적절한 조치 및 변환이 이루어져야 합니다.

  • 논리주소: 현재 데이터가 적재된 메모리와는 독립적인 메모리 위치에 대한 참조입니다. 반드시 물리주소로 변환되어야 합니다.
  • 상대주소: 어떤 알려진 시점, 주로 처리기의 한 레지스터 값으로부터 상대적인 위치를 의미합니다.
  • 물리주소: 절대주소란 주기억장치 안에서의 실제 위치를 의미합니다.

재배치를 지원하는 하드웨어의 경우 프로세스가 실행 상태가 될 때, '베이스 레지스터'에 프로세스의 주기억장치의 시작주소가 적재됩니다. 프로세스를 실행하는 동안은 상대주소가 사용되며, 베이스 레지스터로 상대주소에 베이스 레지스터에 적재된 값이 더해져 절대주소로 변환되어 사용됩니다. 

 

 

 

7. 페이징

 

주기억장치를 비교적 작은 고정 사이즈 파티션으로 나누고(프레임) 각 프로세스 또한 같은 크기의 고정 조각(페이지)으로 나눌 수 있습니다. 따라서, 외부 단편화에 대한 낭비를 없애고, 내부 단편화의 경우 마지막 페이지에서만 발생하도록 처리할 수 있습니다. 

이 경우, 만약 각 프로세스들이 스왑인 스왑아웃 되는 과정에서 비연속적인 공간이 발생할 수 있습니다.  하지만 논리주소와 '페이지 테이블'을 통해  프로세스의 각 페이지들에 해당하는 프레임의 위치를 관리하여 비연속적인 공간에 단편화된 프레임을 점유하도록 함으로써 내부 단편화를 없앨 수 있습니다.

  • 페이지 테이블은 프로세스의 각 페이지들에 해당하는 프레임의 위치를 관리합니다.
  • 각 논리주소는 페이지 번호와 페이지 내의 오프셋으로 구성됩니다.
  • 논리주소(페이지 번호, 오프셋)가 주어지면 처리기는 페이지 테이블을 이용하여 물리주소(프레임 숫자, 오프셋)를 생성합니다.

페이징과 오프셋은 시스템 아키텍처와 메모리 관리 전략에 따라 다를 수 있습니다.

만약 가상 주소 공간이 32비트이고 페이지당 4KB라면,  페이지 번호와 오프셋으로 나뉘게 됩니다.

  • 20비트: 페이지 번호 (1024byte * 4 = 4096KB)
  • 12비트: 오프셋 (2^12 = 4096) 
  • 총 오프셋 개수 : 2^20 * 2^12 = 2^32

 

 

8. 세그먼테이션

 

세그먼테이션은 페이지 번호와 오프셋을 사용하는 것은 동일하지만, 페이징과 달리, 메모리 관리가 가변적입니다. 세그멘테이션은 논리적인 메모리 구조를 지원하므로 프로그램의 모듈화가 용이하지만, 외부 단편화 문제가 발생할 수 있습니다.

>> 외부 단편화가 발생하는 이유는 메모리 공간이 가변적이기 때문에 스왑아웃되어 다른 프로세스가 메모리 공간을 점유하려고 할 때 그 공간이 메모리 요구조건을 만족시키지 않을 가능성이 높기 때문입니다.

 

 

이상으로 메모리 관리에 대한 글을 마치도록 하겠습니다.

감사합니다.!

 

자료 출처(그림 1) : https://m.blog.naver.com/PostView.naverisHttpsRedirect=true&blogId=qkreorb0321&logNo=110178025041 

자료 출처 (그림 2): https://www.crocus.co.kr/1376

출처: 운영체제 8판 내부구조 및 설계원리

'OS' 카테고리의 다른 글

[OS] 단일처리기 스케줄링  (0) 2023.04.25
[OS] 가상메모리(상)  (0) 2023.04.25
[OS] 상호 배제를 위한 모니터  (0) 2023.04.19
[OS] 세마포어(Semaphores)  (0) 2023.04.18

+ Recent posts