티스토리 뷰
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
- SpringBoot
- 빅데이터
- Stream
- 자료구조
- 알고리즘
- java
- Phaser3
- git
- 운영체제
- 빅데이터 분석기사
- Phaser
- DART
- 메모리
- SQL
- MySQL
- spring
- 프로그래머스
- Spring Boot
- MongoDB
- OS
- 프로세스
- Java8
- node.js
- 코테
- jpa
- 코딩테스트
- Advanced Stream
- API
- db
- nosql
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |