본문 바로가기
Lecture/OS

단일 프로그래밍 환경의 메모리 할당

by YUNZEE 2023. 11. 8.
728x90
메모리 오버레이

실제 메모리보다 큰 프로그램을 작동하게 하려면 프로그램의 크기가 실제메모리(물리 메모리) 보다 클 때 전체 프로그램을 메모리에 가져오는 대신 적당한 크기로 잘라서 가져오는 기법을 메모리 오버레이(memory overlay) 라고 한다. overlay는 '겹겹이 쌓다', '중첩시키다'라는 뜻으로, 메모리 오버레이는 하나의 메모리에 여러 프로그램을 겹겹이 쌓아놓고 실행하는 것을 말한다.

다시 말해 한정된 메모리에서 메모리보다 큰 프로그램을 실행할 수 있다. 

그리고 프로그램 전체가 아니라 일부만 메모리에 올라와도 실행할 수 있다. 프로그램은 개념적으로 한 덩어리지만 일부분만으로도 실행할 수 있다.

스왑

메모리에 모듈B를 가져올 때 먼저 메모리에 올라온 모듈 A를 어딘가에 보관해야 한다. 쉽게 생각하면 모듈 A를 원래의 하드디스크 위치에 옮겨놓으면 되겠지만, 다시 사용할지도 모르고 아직 작업이 끝나지 않았기 때문에 저장장치의 별도 공간에 보관해야 한다. 이처럼 메모리가 모자라서 쫓겨난 프로세스를 저장장치의 특별한 공간에 모아두는데 이러한 영역을 스왑 영역(swap area) 이라고 한다.

메모리 분할 방식

메모리를 어떤 크기로 나눌 것인가는 메모리 배치 정책에 해당한다. 메모리에 여러 개의 프로세스를 배치하는 방법은 크게 가변 분할 방식(variable-size partitioning)고정 분할 방식(fixed-size partitioning)으로 나뉜다.

가변 분할 방식: 프로세스의 크기에 따라 메모리를 나눈다.

고정 분할 방식: 프로세스의 크기와 상관없이 메모리를 같은 크기로 나뉜다.

 

가변 분할 방식 구현

한 프로세스가 메모리의 연속된 공간에 배치되기 때문에 연속 메모리 할당(contiguous memory allocation)이라고 한다.

물리 메모리에서 하나의 프로세스에 해당하는 주소 공간이 연속적으로 이어지기 때문이다.

 

가변 분할 방식의 장단점

가변 분할 방식의 장점은 프로세스를 한 덩어리로 처리하여 하나의 프로세스를 연속된 공간에 배치할 수 있다는 점이다. 그러나 메모리 관리가 복잡하다는 단점이 있다.

 

고정 분할 방식의 장단점

고정 분할 방식은 메모리를 일정한 크기로 나누기 때문에 메모리 관리가 편하다는 장점이 있다. 고정 분할의 단점은 하나의 프로세스가 여러 곳에 나뉠 수 있다는 점이다. 하지만 고정 분할 방식이 가변 분할 방식보다 관리 측면에서 유리하다. 이러한 이유로 현대 운영체제에서 메모리 관리는 기본적으로 고정 분할 방식을 사용한다.

 

가변 분할 방식의 메모리 관리 

- 가변 분할 방식의 특징

가변 분할 방식은 프로세스의 크기에 맞춰 메모리를 할당하는 방법으로 세그먼테이션 메모리 관리 기법이라고 한다. 프로세스를 하나의 연속된 주소로 다룬다는 장점이 있다. 프로세스들이 메모리에 올라와 작업하다가 종료되면 빈 공간이 생긴다. 이렇게 발생한 작은 빈 공간을 단편화 라고 한다. 가변 분할 방식에서 발생하는 단편화는 조각이 프로세스의 바깥쪽에 위치하기 때문에 외부 단편화 external fragmentation라고 한다.  가변 분할 방식에서는 외부 단편화로 인한 문제를 해결하기 위해 메모리  배치 방식 memory placement strategy이나 조각 모음 defragmentation을 사용한다.

 

메모리 배치 방식

가변 분할 방식의 외부 단편화 문제를 해결하기 위한 대표적인 메모리 배치 방식으로 최초 배치first fit, 최적 배치 best fit, 최악 배치 worst fit가 있다. 

최초 배치: 단편화를 고려하지 않는 방식으로, 프로세스를 메모리의 빈 공간에 배치할 때 메모리에서 적재 가능한 공간을 순서대로 찾다가 첫 번째로 발견한 공간에 프로세스를 배치하는 방법이다.

최적 배치: 메모리의 빈 공간을 모두 확인한 후 크기가 가장 비슷한 곳에 프로세스를 배치하는 방법이다.

최악 배치: 빈 공간을 모두 확인한 후 가장 큰 공간에 프로세스를 배치하는 것으로 최적 배치와 정반대 되는 방법이다.

 

최초 배치 방식은 빈 공간을 찾아다닐 필요가 없다는 장점이 있다. 최적 배치 방식을 사용하면 텅 빈 공간을 모두 확인하는 부가적인 작업이 들어가지만 딱 맞는 공간을 찾을 경우 단편화가 일어나지 않는다. 그러나 딱 맞는 공간이 없을 때는 아주 작은 조각을 만들어낸다는 단점이 있다.  예를 들어 10MB의 프로세스를 12MB의 빈 공간에 배치하여 2MB가 남는다. 이러한 작은 공간은 버려질 가능성이 크다. 

최악 배치 방식에서는 최적 배치와 반대로 접근한다. 최적 배치 방식에서는 프로세스를 배치하고 남은 공간이 작아 이 공간이 쓸모없지만 최악 배치 방식에서는 프로세스를 배치하고 남은 공간이 크기 때문에 이 공간이 쓸모가 있다. 예를 들어 10MB의 프로세스를 26MB의 빈 공간에 배치하면 16MB가 남는데 이는 충분히 사용 가능한 크기다. 

 

조각 모음

가변 분할 방식에서는 메모리에 올라오는 프로세스가 차례대로 배치되기 때문에 공간 사용에 큰 문제가 없다. 그러나 작은 프로세스가 작업을 마치고 메모리에서 나가면 그 공간이 조각으로 남아 쓸모없어질 가능성이 크다. 이렇게 단편화가 발생하면 이미 배치된 프로세스를 옆으로 옮겨 빈 공간들을 하나의 큰 덩어리로 만들어야 하는데 이 작업이 바로 조각 모음defragmentation이다.

 

고정 분할 방식의 메모리 관리

고정 분할 방식을 사용하여 물리 메모리를 나누는 방식을페이징 paging 메모리 관리 기법이라고 한다.

고정 분할 방식도 단점이 있다. 일정하게 나뉜 메모리의 크기보다 작은 프로세스가 배치될 경우 낭비되는 공간이 생긴다는 점이다.  일정한 크기로 나뉜 파티션 안쪽으로 작은 조각이 발생한다. 이처럼 각 메모리 조각에 프로세스를 배치하고 공간이 남는 것을 내부 단편화 internal fragmentation라고 한다. 같은 크기로 나뉜 공간의 내부에서 조각이 발생하기 때문에 이런 이름이 붙었다.

 

가변 분할 방식과 고정 분할 방식의 비교

구분 가변 분할 방식 고정 분할 방식
메모리 관리 기법 세그멘테이션 페이징
특징 연속 메모리 할당 비연속 메모리 할당
장점 프로세스를 한 덩어리로 관리 가능 메모리 관리가 편리함
단점 빈 공간의 관리가 어려움 프로세스가 분할되어 처리됨
단편화 외부 단편화 내부 단편화

 

 

퀴즈

1. 실제 메모리보다 큰 프로그램을 작동하게 하려면 프로그램의 크기가 실제메모리(물리 메모리) 보다 클 때 전체 프로그램을 메모리에 가져오는 대신 적당한 크기로 잘라서 가져오는 기법을 무엇이라 하는가?

2. 메모리가 모자라서 쫓겨난 프로세스를 저장장치의 특별한 공간에 모아두는데 이러한 영역 무엇이라 하는가?

3. 프로세스의 크기에 따라 메모리를 나누는 것을 어떤 방식이라 하는가?

4. 프로세스의 크기와 상관없이 메모리를 같은 크기로 나뉘는 것을 무엇이라 하는가?

5. 한 프로세스가 메모리의 연속된 공간에 배치되는 것을 무엇이라 하는가?

6. 프로세스 한 덩어리로 처리하여 하나의 프로세스를 연속된 공간에 배치할 수 있는 장점과 그만큼 메모리 관리가 복잡하다는 단점을 갖고 있는 방식은 무엇인가?

7. 메모리를 일정한 크기로 나누기 때문에 메모리 관리가 편하다는 장점과 하나의 프로세스가 여러 곳에 나뉠 수 있다는 단점을 갖고 있는 방식은 무엇인가?

8. 현대 운영체제에서 메모리 관리는 어떤 방식을 사용하는가?

9. 가변 분할 방식은 프로세스의 크기에 맞춰 메모리를 할당하는 방법을 무엇이라 하는가?

10. 메모리에 올라와 작업하다가 종료되면 빈 공간이 생긴다. 이렇게 발생한 작은 빈 공간을 무엇이라 하는가?

11.  단편화를 고려하지 않는 방식으로, 프로세스를 메모리의 빈 공간에 배치할 때 메모리에서 적재 가능한 공간을 순서대로 찾다가 첫 번째로 발견한 공간에 프로세스를 배치하는 방법을 무엇이라 하는가?

12. 메모리의 빈 공간을 모두 확인한 후 크기가 가장 비슷한 곳에 프로세스를 배치하는 방식을 무엇이라 하는가?

13.  빈 공간을 모두 확인한 후 가장 큰 공간에 프로세스를 배치하는 것으로 최적 배치와 정반대 되는 방법은 무엇인가?

14. 단편화가 발생하면 이미 배치된 프로세스를 옆으로 옮겨 빈 공간들을 하나의 큰 덩어리로 만들어야 하는데 이 작업을 무엇이라 하는가?

15.  딱 맞는 공간이 없을 때는 아주 작은 조각을 만들어낸다는 단점을 갖고 있는 방식은 무엇인가?

16. 고정 분할 방식을 사용하여 물리 메모리를 나누는 방식을 무엇이라 하는가?

17. 각 메모리 조각에 프로세스를 배치하고 공간이 남는 것을 무엇이라 하는가?

 

728x90

'Lecture > OS' 카테고리의 다른 글

페이징 기법  (0) 2023.11.14
가상 메모리  (2) 2023.11.09
메모리 관리의 개요  (0) 2023.11.07
교착 상태 해결 방법  (0) 2023.11.06
교착 상태의 개요  (2) 2023.10.31