안녕하세요? 허니입니다. 메모리 관리를 하게 되면 어떻게 하면 메모리를 분할할까라는 고민을 하게 됩니다. 때문에 메모리 분할 방법에 대해 포스팅 하여 여러분의 의문점에 도움을 드리고자 합니다. 학생이나 연구원분들에게 많은 도움이 될 것이라고 생각하며 언제든지 질문은 환영입니다.

 


오늘의 주제

 메모리의 분할 방법

고정분할(fixed partition)

가변분할(variable partition)

 


메모리의 분할 방법


 13강의에서 우리는 메모리상에 여러 프로그램들이 어떤 방식으로 자리매김하고 주소가 정해지는지에 대한 기본적 개념들을 공부해 보았다. 이제부터 역사적으로 메모리의 분할이 어떤 방식을 통해 이루어져 왔나를 살펴보겠다. 메모리 분할은 그것이 가능하였기에 멀티프로그래밍의 장이 열린 만큼 매우 중요한 요소이다. 메모리 분할이라는 개념이 처음 도입되었을 때는 고정 분할(fixed partition)이라는 방법이 쓰였다. 고정분할이라는 것은 메모리의 크기를 일정 단위로 분할하여 고정시켜 버리는 방법으로 프로그램은 자신의 크기에 알맞은 분할영역에 배치되고 그곳에서 수행되는 것이다. 고정분할을 통해 시스템 전체의 처리능력이 향상된 것은 사실이었으나 문제점 또한 만만치 않았다. 여러 영역으로 메모리를 분할하게 되면 그만큼 영역이 작아져 큰 프로그램을 실행될 수 없음을 염려한 시스템 설계자들은 대체적으로 분할영역을 넉넉히 마련하였기에 여분의 메모리가 남게 되었다.

그림 39 고정 분할

 
분할 영역의 고정이라는 것은 융통성의 부족으로 메모리의 낭비를 계속 초래하였다. 반면 장점은 관리가 쉽다는 것이다. 한번 영역이 고정되면 더 이상의 분할 메모리영역은 변화가 없기 때문이다. 고정분할에 한계를 느낀 시스템 설계자들은 보다 융통성 있는 방법을 고려하기 시작했다. 바로 분할에 변화를 줄 수 있도록 한 것이다. 변화분할(variable partition)은 고정단위(fixed unit), 버디시스템(buddy system), 가변단위(variable unit)의 3가지 방법으로 계속 발전하였다.
 

 고정단위(fixed unit)

이 방법은 메모리를 할당하기 위한 단위를 정해 놓고 사용하는 방법이다. 50Kbyte, 70Kbyte등으로 메모리의 단위를 정해 queues를 구성해 놓은 뒤 프로그램이 실행될 때마다 프로그램 크기에 알맞은 unit를 제공하는 것이다. 우리가 여행을 갔을 때 콘도에 묶게 되면 이용자의 수에 따라 다양한 크기의 방이 제공되는 것처럼 말이다.

그림 40 고정 단위 변화 분할

 

버디시스템(buddy system)

버디 시스템이란 고정단위(fixed unit)를 좀 더 다양하게 사용하는 방법으로 분할된 영역보다 작은 프로그램이 실행될 경우 영역을 나눌 수 있게 설계한 것이다. 메모리의 영역은 최초 메모리용량의 1/2 단위로 쪼개질 수 있다. 최소 고정단위가 40Kbyte일 때 만약 18Kbyte의 프로그램이 수행되려 한다면 고정단위를 반으로 나누어 20Kbyte의 영역이 할당되는 것이다. 보통의 한식식당들은 여러 개의 방으로 나누어 손님을 받게 되어 있다. 그러나 방 하나에 크기에 비해 적은 수의 손님을 받을 경우 칸막이나 커튼 등으로 방을 나누는 것이 바로 버디시스템(buddy system)과 같은 원리라 할 수 있다.

그림 41 버디 시스템

 
 가변단위(variable unit)
가변단위란 시스템 설계자들에 의해 임의로 구역이 나뉘어지는 것이 아니라 프로그램이 필요한 만큼 메모리를 분할해 쓰게 하는 것이다. 그렇다면 할당된 영역이 어떻게 관리되는 것일까. 각각의 프로그램은 프로그램의 시작번지(base)와 종료번지(limit)를 갖게 되는데 문맥 교환이 일어나면 이 두 가지의 번지가 함께 움직여 앞서 수행되었던 내용을 고스란히 저장할 수 있는 것이다.

 

 

그림 42 가변 단위

위의 세가지 방법 중 메모리의 낭비를 가장 적게 가져오는 것은 바로 variable unit이다. 그러나 이러한 방법은 또 별도의 관리가 필요한 것이다. 메모리를 효율적으로 이용하기 위해 다양한 방법으로 메모리 영역을 나누는 방법을 계속해 개발해 나갔지만 단편화의 문제는 여전히 존재하고 있었다. 다양한 프로그램마다 다양한 크기를 갖고 있기에 메모리를 분할한다 하더라도 아래 그림과 같이 조각이 남기 마련이다.

 

그림 43 단편화

 
이렇게 단편화된 조각들을 이용하기 위해 여러 방법들을 고려해 보았었다. 조각들을 모아 사용하기 위해서는 모든 프로그램들이 동작을 멈춘 상태에서 조각 메모리 뒤에 프로그램을 앞으로 당겨 프로그램의 재배치를 다시 해야 된다. 그러나 메모리의 조각을 모으기 위해 프로그램을 멈춘다는 것은 사용자만이 아니라 시스템 설계자로서도 용납할 수 없는 상황일 것이다. 멈추고, 조각을 모으고, 다시 시작하고, 또 그 동안 프로그램을 사용할 수 없는 등의 추가 작업은 처음 재배치할 때 모두 해결한다면 불필요한 작업이기 때문이다. 


요점정리

 

 고정 분할(fixed partition)

고정분할이라는 것은 메모리의 크기를 일정 단위로 분할하여 고정시켜 버리는 방법으로 프로그램은 자신의 크기에 알맞은 분할영역에 배치되는 것이다.

 

 가변분할(variable partition)은 고정단위(fixed unit), 버디시스템(buddy system), 가변단위  (variable unit)의 3가지 방법

1) 고정단위(fixed unit) 방법은 메모리를 할당하기 위한 단위를 정해 놓고 사용하는 방법이다. 50Kbyte, 70Kbyte등으로 메모리의 단위를 정해 queue를 구성해 놓은 뒤 프로그램이 실행될 때마다 프로그램 크기에 알맞은 unit를 제공하는 것이다.
2) 버디시스템(buddy system)이란 고정단위(fixed unit)를 좀 더 다양하게 사용하는 방법으로 분할된 영역보다 작은 프로그램이 실행될 경우 영역을 나눌 수 있게 설계한 것이다.
3) 가변단위(variable unit)란 시스템 설계자들에 의해 임의로 구역이 나뉘어지는 것이 아니라 프로그램이 필요한 만큼 메모리를 분할해 쓰게 하는 것이다.

 

목 차

 운영체제를 시작하는 분들을 위해

 운영체제의 역사와 구체적으로 어떤 일들을 수행하나요?

 운영체제의 목표와 역할이 미래에도 계속 증대될까요?

 운영체제를 이해하기 위해 필요한 기본 개념들은 무엇인가요?

 운영체제 프로세스 생애주기(Process Lifecycle)는 무엇인가요?

 운영체제 프로세스 관리(Process Management)는 어떻게 하나요?

 운영체제 프로세스(Process)의 처리 속도는 어떻게 높일까?

 운영체제 스레드(Thread)는 무엇인가요?

 운영체제 스케줄링 (Scheduling)은 어떻게 하나요?

 운영체제 스케줄링 알고리즘의 비교 기준이 있나요?

 운영체제 프로세스 동기화가 무엇인가요?

 운영체제에서 세마포어(Semaphore)란?

 운영체제 메모리 관리(Memory Management)는 어떻게 하나요?

 운영체제 메모리 분할 방법은 어떻게 하나요?

 운영체제 가상메모리(Virtual Memory)는 무엇인가요?

 운영체제 Page in/out, Swapping 등이 Page Table Entry와 어떤 관계인가요?

 운영체제 메모리 관련해서 알아야 할 개념은 어떤것이 있나요? (TLB, Locality, Working Set, Overlay)

 운영체제 Page replacement (페이지 대체) 알고리즘이란?

 운영체제 파일시스템(File System)은 어떻게 운영되나요?

 운영체제 파일시스템 내부구조는 어떻게 되나요?

 운영체제 디스크 공간 할당(Disk Space Allocation) 알고리즘과 효과적 알고리즘의 판단 기준은?

 운영체제 파일시스템에서 접근 시간, 디스크 스케줄링을 위한 알고리즘, I/O 시스템이란?

 리눅스 인터럽트 (Interrupt)에 대해 자세히 설명해 주세요.

 인텔 구조에서 운영체제 가상 메모리 (Virtual Memory)는?

 운영체제 아키텍처의 종류는 얼마나 있나요?

 

+ Recent posts