메모리는 일반적으로 2 개의 부분으로 나누어진다.
하나는 운영체제를 위한 부분, 다른 하나는 사용자 프로세스를 위한 부분
**일반적으로 OS는 낮은 주소를 User Program은 높은 주소를 사용한다.
일반적으로 여러 사용자 프로세스가 동시에 메모리에 있기를 원하는데
그래서 메모리에 적재되기를 기다리는 프로세스에 사용 가능한 메모리를 할당하는 방법을 고려해야 한다.
연속적인 메모리 할당에서 각 프로세스는 다음 프로세스가 적재된 영역과 인접한 하나의 메모리 영역에 적재된다.
그러나 이 메모리 할당 기법에 대해 더 논의하기 전에 메모리 보호 문제를 해결해야 한다.
**메모리 보호는 이전에 Relocation 레지스터와 limit 레지스터에 의해 보호된다고 언급했다.
[컴퓨터(Computer Science)/운영체제(Operation System)] - Memory Management, 메모리 관리 기본 개념 [운영체제]
결국 메모리에 할당하는 기법은 연속 할당과 불연속 할당이 있다.
딱 보면 연속적으로 할당하는 것이 좋아보이긴 하는데
어떻게 맨날 메모리가 연속적으로 들어갈 수 있게 유지하겠느냐? 라는 생각을 해보면
아 그렇구나... 우리 컴퓨터도 불연속이겠지? 라는 생각이 들게 된다.
프로세스가 시스템에 들어오면, 운영체제는 각 프로세스가 메모리를 얼마나 요구하며, 또 사용 가능한 메모리 공간이 어디에 얼마나 있는지를 고려하여 공간을 할당한다.
**프로세스가 공간을 할당받으면 그제서야 CPU를 할당받기 위해 경쟁한다.
//프로세스가 끝나면 메모리를 반납하고, 운영체제는 다른 프로세스에 이 공간을 할당한다.
각 방식에도 세부 방법이 나누어지는데
연속에는 고정 분할 방식과 가변 분할 방식이 있다.
고정 분할 방식을 보면
프로그램 A는 1번 파티션에 들어갈 수 있는 크기라 들어갔다.
프로그램 B는 1번 파티션은 차있고 2번에 들어가려하지만 고정 크기라서 2번보다 큰 B는 들어갈 수 없다.
그래서 3번 파티션에 들어갔지만 파티션 자체보다는 작아서 조각(Fragmentation)이 생긴다.
**조각은 메모리 낭비를 의미한다.
외부와 내부의 차이는 프로그램 크기 때문에 나타나는 것으로
파티션이 프로그램보다 작아버리면 할당이 되지 않는 빈 파티션이 생기는 것을 외부 조각이라고 한다.
파티션이 프로그램보다 커서 파티션 내부에 사용하지 않는 메모리 공간이 생기는 것을 내부 조각이라고 한다.
가변 분할방식을 보면
프로그램이 처음 할당될 땐 파티션과 프로그램의 크기가 맞아서 잘되는 것처럼 보이지만
프로그램이 실행되고 다시 내려가고 반복하다보면 낭비되는 외부조각이 생긴다.
그것을 여기서 Hole이라고 한다.
OS는 때문에 할당공간과 Hole에 대한 정보를 같이 유지해야만 했다.
프로세스가 끝나면 해당 메모리 공간을 근접 Hole에 합치거나 가용메모리 공간이라는 것으로 인지해야
다른 프로세스가 올 때 할당할 수 있기 때문이다.
그렇다면 프로세스가 들어갈 Hole이 많다면 어떤 Hole에 들어가야하는 문제가 생겼는데
그것이 바로 아래 문제다.
때문에 어떻게 Hole에 할당하느냐를 결정하는 것이다.
결과적으로 First fit과 Best fit이 그나마 효과적이라고 알려졌다.
first는 시간적으로 유리하고
best는 공간적으로 유리했다.
위에서는 근접 hole이 있으면 합치는 작업을 했지만
Compaction은 근접하지 않아도 가지고 있는 hole들을 한 곳에 밀어모아서 만드는 방법이다.
생각보다 비용이 많이들고 조건이 까다롭다.
뒤의 불연속 할당 방법은 대표적으로 page인데 따로 떼어내어 알아보는 것이 좋아서 분리시켜서 알아보자
'컴퓨터(Computer Science) > 운영체제(Operation System)' 카테고리의 다른 글
Virtual Memory, 가상메모리 [운영체제] (0) | 2020.06.08 |
---|---|
Paging, 페이징, 불연속 메모리 할당 [운영체제] (0) | 2020.06.08 |
동기화를 위한 하드웨어 지원, Hardware Support for Synchronization (0) | 2020.06.04 |
Segmentation, 세그먼트, 불연속 메모리 할당 [운영체제] (0) | 2020.06.03 |
Memory Management, 메모리 관리 기본 개념 [운영체제] (0) | 2020.06.03 |