티스토리 뷰

2023.05.29 - [운영체제] - #27 메모리 - 메모리와 주소

 

#27 메모리 - 메모리와 주소

2023.02.12 - [운영체제] - #3 컴퓨터 하드웨어와 구조(feat 폰 노이만 구조) #3 컴퓨터 하드웨어와 구조(feat 폰 노이만 구조) ● 프로그램 내장방식 - 오늘도 나는 폰 공부를 한다. - 예전에는 ENIAC(애니

radderveloper.tistory.com

- 사실 위의 글 다음에 지금 글의 내용을 바로 이어서 작성했어야 했는데 쉬운거부터 듣자는 욕심으로 인해 순서가 꼬였다.


사진 여러장을 한 줄에 올릴 수 있다는 걸 처음 알았다.

 

● 도입

Q. 유니프로그래밍 방식(메모리에 오직 하나의 프로세스가 올라온 것)에서 메모리의 크기보다 더 큰 프로그램을 실행시키는 방법은 무엇이었을까?

A.

- 큰 프로그램을 메모리에 올릴 수 있도록 잘라서 당장 실행시켜야 할 부분만 메모리에 올리고 나머지는 용량이 큰 HDD에 저장하는 것이다.(정확히 HDD의 스왑영역에 저장)

- 이 기법을 메모리 오버레이(memory overlay)라고 한다.

ex) 9GB의 프로그램 중 1GB만 메모리에 올리고 나머지 8GB를 스왑영역에 저장하면 사용자는 마치 메모리의 크기가 9GB인 것처럼 느낄 것이다.

출처 - 인프런, 그림으로 쉽게 배우는 운영체제

- 그러나 스왑 과정이 있기 때문에 실제 메모리가 9GB인 컴퓨터 보다는 느리게 동작한다.

스왑 : HDD의 스왑 영역에 있는 데이터 일부를 메모리로 가져오고 메모리에 있는 데이터를 스왑 영역으로 옮기는 것

● 메모리 할당방식

- 오늘날과 같이 메모리에 여러 개의 프로세스가 올라오는 멀티프로그래밍 환경에서는 메모리 관리를 어떻게 할까?

- 관리 방식에는 2가지가 있다.

1. 가변 분할 방식 : 프로세스의 크기에 따라 메모리를 나누는 방식(프로세스가 크면 메모리도 크게 할당)
2. 고정 분할 방식 : 프로세스의 크기와 상관없이 메모리를 정해진 크기로 나누는 방식

ex) 크기가 각각 5MB, 2MB, 1MB인 프로세스 A, B, C가 있다고 해보자

1. 가변 분할 방식(연속 메모리 할당, 세그멘테이션)

- 프로세스의 크기에 따라 메모리의 크기가 결정되므로 메모리에 각각 프로세스 A, B, C를 위한 공간을 마련한다.

- 아래의 그림처럼 한 프로세스가 메모리의 연속된 공간에 할당되기 때문에 연속 메모리 할당이라고한다.

 

2. 고정 분할 방식(비연속 메모리 할당)

- 프로세스의 크기와 상관없이 메모리를 정해진 크기로 할당, 해당 예시에서는 크기가 2MB로 정해져 있다고 해보자

- 5MB인 프로세스 A는 2MB로 나눈 구역 3개에 나눠서 할당된다.(1MB는 빈 공간이 된다.)

- 프로세스 B는 2MB이기에 크기가 정확히 맞고 프로세스 C는 빈 공간 1MB가 남는다.

- 해당 방식은 하나의 프로세스가 메모리에 분산되어 할당되기에 비연속 메모리 할당이라고 한다.

출처 - 인프런, 그림으로 쉽게 배우는 운영체제


가변 분할 방식과 고정 분할 방식의 장단점

1. 가변 분할 방식(연속 메모리 할당)

- 장점 : 프로세스가 메모리의 연속된 공간에 할당되기 때문에 더 크게 할당돼서 낭비되는 공간인 내부 단편화가 없다.(메모리가 프로세스의 크기에 딱 맞게 할당된다.)

- 단점 : 외부 단편화(아래에 내용 있음)

 

2. 고정 분할 방식(비연속 메모리 할당)

- 장점 : 구현이 간단하고 오버헤드가 적다.(고정된 크기로 나누기 때문에 단순하다.)

- 단점 : 작은 프로세스도 큰 영역에 할당되어 공간이 낭비되는 내부 단편화가 발생한다.


외부 단편화와 내부 단편화

1. 외부 단편화 → 가변 분할 방식(연속 메모리 할당, 세그멘테이션)의 단점

- 아래 그림과 같이 메모리에 서로 다른 크기를 가지고 있는 여러 개의 프로세스가 올라왔다고 해보자

- 프로세스 A, D가 작업을 마치고 메모리에서 내려갔다. 그러면 당연히 프로세스 A, D가 있던 공간은 빈 공간이 된다.

출처 - 인프런, 그림으로 쉽게 배우는 운영체제

- 이때 크기가 60MB인 새로운 프로세스가 메모리를 필요로 한다고 해보자

- 프로세스 A, D가 있던 공간을 합치면 60MB이므로 단순히 숫자상으로는 60MB 프로세스를 올릴 수 있다.

- 그러나 가변 분할 방식은 메모리의 연속된 공간에 프로세스를 할당하는 기법이므로 결국 60MB 프로세스에게 메모리를 할당할 수 없는 상황이 발생한다. 이것을 외부 단편화라고 한다.

 

Q. 이런 상황은 어떻게 해결할 수 있을까?

A. 

- 외부 단편화가 발생한 공간을 합쳐주는 조각모음을 하면 된다.

- 그러나 조각모음을 하려면 현재 메모리에서 실행되고 있는 프로세스들의 작업을 일시 중지해야하고 메모리 공간을 이동시키는 작업도 진행해야 하기에 오버헤드가 발생한다.

 

2. 내부 단편화 → 고정 분할 방식(비연속 메모리 할당)의 단점

- 가상 메모리 시스템에서 고정 분할 방식을 페이징이라고 한다.

- 20MB 크기로 메모리를 고정 분할한다고 했을 때 아래 그림과 같이 메모리에 서로 다른 크기를 가지고 있는 여러 개의 프로세스들이 필요한 공간만큼 쪼개져서 할당돼 있다고 해보자

- 현재 메모리의 용량이 부족하기에 크기가 50MB인 프로세스 A의 나머지 10MB는 HDD의 스왑 영역에 할당돼 있는 상태

- 프로세스 C, D는 20MB 보다 작기에 낭비되는 공간이 발생했다.

출처 - 인프런, 그림으로 쉽게 배우는 운영체제

Q. 이런 상황(공간 낭비 발생)은 어떻게 해결할 수 있을까?

A. 내부 단편화를 해결하는 방법은 없고 대신에 분할 되는 고정 크기를 조절해 내부 단편화를 최소화하는 차선책이있다.


● 버디 시스템

- 오늘날의 운영체제는 가변 분할 방식과 고정 분할 방식을 혼합하여 단점을 줄였는데 이를 버디 시스템이라고 한다.

- 버디 시스템은 2의 제곱으로 메모리를 분할해 메모리를 할당하는 방식이다.

 

ex)

- 메모리의 크기가 2^11인 2048 byte라고 했을 때 크기가 500 byte인 프로세스가 메모리 할당을 필요로 하고 있다고 해보자 (계산의 편의를 위해 작은 값으로 설정)

- 그러면 2의 제곱을 기준으로 500 byte 보다 작은 값이 나올때까지 메모리의 크기를 2로 나눈다.(2의 제곱이니까 2로 나눈다.)

- 2048 byte를 2로 3번 나누면 256 byte가 되는데 이러면 500 byte 프로세스를 올릴 수 없으므로 256 byte 보다 더 큰 구역인 512 byte에 500 byte 프로세스를 할당한다.

출처 - 인프런, 그림으로 쉽게 배우는 운영체제

- 여기서도 내부 단편화가 발생하지만 12 byte 밖에 발생하지 않는다.

- 또한 500 byte 프로세스가 사용을 마치고 메모리에서 나가도 근접한 메모리 공간을 합치기 쉽다.

- why?  2의 제곱으로 동일하게 나눴기에 반대로 조립만하면 큰 공간이 만들어지기 때문에 외부 단편화의 조각 모음보다 훨씬 단순하다.

[버디 시스템 정리]
- 가변 분할 방식처럼 프로세스의 크기에 따라 할당되는 메모리의 크기가 달라지며 외부 단편화를 방지하기 위한 메모리 공간 확보가 간단하다.
- 고정 분할 방식처럼 내부 단편화가 발생하기는 하지만 비교적 많은 공간의 낭비가 발생하지는 않는다.

'CS > 운영체제' 카테고리의 다른 글

#36 파일과 디스크  (0) 2023.07.10
#35 가상메모리 - 세그멘테이션(배치정책)  (0) 2023.07.09
#33 가상메모리  (0) 2023.07.06
#32 파일과 파일시스템, 파일 구조  (0) 2023.06.29
#31 디렉토리  (0) 2023.06.18
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함