[ 메모리 관리 ]
각각의 프로세스는 독립된 메모리 공간을 갖고, 운영체제 혹은 다른 프로세스의 메모리 공간에 접근할 수 없는 제한이 걸려있음. 단지, 운영체제 만이 운영체제 메모리 영역과 사용자 메모리 영역의 접근에 제약을 받지 않기 때문에 운영체제에서 메모리를 관함. 또한, 멀티프로그래밍 환경으로 변화하면서 한정된 메모리를 효율적으로 사용해야 했고, 운영체제가 이를 어떻게 관리하는지에 대한 관리방법이 중요해짐
즉, 어떤 프로그램이든 프로세스가 되어 프로세서에 적재되기 위해서는 메모리에 적재되어야 실행이 가능함
따라서 메모리는 중요한 작업 공간이고 한정된 메모리를 다중 프로그래밍 환경에서 이용하기 위해서는 여러 프로세스가 함께 메모리를 사용하므로 효율적인 관리를 해야함
이러한 메모리 관리를 위해 메모리 관리자가 존재하고, 메모리 관리 장치(MMU, Memory Management Unit)와 OS 관리 모듈과 함께 진행함
메모리 관리 정책
- 적재 청책(Fetch Policy)
- 디스크에서 메모리로 프로세스를 언제 가져와야 할지를 정함
- 배치 정책(Placement Policy)
- 디스크에서 메모리로 가져온 프로세스를 어느 위치에 저장할 것인지 정함
- 교체 정책(Replacement Policy)
- 메모리가 충분하지 않을 때 현재 메모리에 적재된 프로세스 중 제거할 프로세스를 결정하는 방법
▶ Swapping
메모리의 관리를 위해 사용되는 기법 메모리에 적재되어 있으나 현재 사용되지 않고 있는 프로세스를 관리하는 역할
표준 Swapping 방식으로는 round-robin과 같은 스케줄링의 다중 프로그래밍 환경에서 CPU 할당 시간이 끝난 프로세스의 메모리를 backing store(보조기억장치 , e.g 하드디스크)로 내보내고 다른 프로세스의 메모리를 불러 들일 수 있음
swap
주 기억장치(RAM)로 불러오는 과정을 swap-in, 보조 기억장치로 내보내는 과정을 swap-out 이라고 함
swap에는 큰 디스크 전송시간이 필요하기 때문에 현재에는 메모리 공간이 부족할 때 Swapping이 시작됨
▶ 단편화 현상
메모리의 공간이 작은 조각으로 나뉘어 사용 가능한 메모리가 충분히 존재하지만 할당(사용)이 불가능한 상태
내부단편화, 외부단편화
- 내부 단편화
- 프로세스가 사용하는 메모리 공간에 포함된 남는 부분
- ex) 메모리 분할 자유 공간이 10,000B 있고 Process A 가 9,998B 사용하게 되면 2B라는 차이 가 존재하고, 이 현상을 내부 단편화라 칭한다
- 외부 단편화
- 메모리 공간 중 사용하지 못하게 되는 일부분
- 물리 메모리(RAM)에서 사이사이 남는 공간들을 모두 합치면 충분한 공간이 되는 부분들이 분산되어 있을때 발생
- ※ 압축
- 외부 단편화를 해소하기 위해 프로세스가 사용하는 공간들을 한쪽으로 몰아, 자유공간을 확보하는 방법론
- 작업효율이 좋지 않음
▶ 메모리 관리 방법
단편화 현상을 줄이고, 적절한 swap을 통해 효율적으로 메모리를 관리하기 위한 방법
연속 메모리 할당
프로세스를 메모리에 연속적으로 할당하는 기법
할당과 제거를 반복하다보면 Scattered Holes가 생겨나고 이로 인한 외부 단편화가 발생
< 연속 메모리 할당에서 외부 단편화를 줄이기 위한 할당 방식 >
- 최초 적합(First fit)
- 가장 처음 만나는 빈 메모리 공간에 프로세스를 할당
- 빠름
- 최적 적합(Best fit)
- 메모리 공간의 크기와 프로세스의 크기 차이가 가장 적은 곳에 프로세스를 할당
- 최악 적합(Worst fit)
- 빈 메모리 공간의 크기와 프로세스의 크기 차이가 가장 큰 곳에 프로세스를 할당
- 이렇게 생긴 빈 메모리 공간에 또 다른 프로세스를 할당할 수 있을 거라는 가정에 기인
페이징(Paging) - 가상메모리사용, 외부 단편화 해결, 내부 단편화 존재
하나의 프로세스가 사용하는 메모리 공간이 연속적이어야 한다는 제약을 없애는 메모리 관리 방법
물리 메모리는 Frame이라는 고정 크기로 분리되어 있고, 논리 메모리(프로세스가 점유하는)는 페이지라 불리는 고정 크기의 블록으로 분리됨
페이징 기법을 사용함으로써 논리 메모리는 물리 메모리에 저장될 때, 연속되어 저장될 필요가 없고 물리 메모리의 남는 프레임에 적절히 배치됨으로 외부 단편화를 해결할 수 있는 큰 장점이 있음
하나의 프로세스가 사용하는 공간은 여러 개의 페이지로 나뉘어서 관리되고(논리 메모리에서), 개별 페이지는 순서에 상관없이 물리 메모리에 있는 프레임에 mapping 되어 저장된다고 볼 수 있음
하지만 단점으로는 내부 단편화 문제의 비중이 늘어나게 됨
ex) 페이지 크기가 1,024B이고 프로세스 A 가 3,172B 의 메모리를 요구한다면 3 개의 페이지 프레임(1,024 * 3 = 3,072) 하고도 100B 가 남기 때문에 총 4 개의 페이지 프레임이 필요한 것 결론적으로 4 번째 페이지 프레임에는 924B(1,024 - 100)의 여유 공간이 남게 되는 내부 단편화 문제가 발생
세그먼테이션(Segmentation) - 가상메모리사용, 내부 단편화 해결, 외부 단편화 존재
페이징에서처럼 논리 메모리와 물리 메모리를 같은 크기의 블록이 아닌, 서로 다른 크기의 논리적 단위인 세그먼트(Segment)로 분할
사용자가 두 개의 주소로 지정(세그먼트 번호 + 변위) 세그먼트 테이블에는 각 세그먼트의 기준(세그먼트의 시작 물리 주소)과 한계(세그먼트의 길이)를 저장
단점으로는 서로 다른 크기의 세그먼트들이 메모리에 적재되고 제거되는 일이 반복되다 보면, 자유 공간들이 많은 수의 작은 조각들로 나누어져 못 쓰게 될 수도 있음(외부 단편화)
메모리 풀(Memory Pool)
필요한 메모리 공간을 필요한 크기, 개수 만큼 사용자가 직접 지정하여 미리 할당받아 놓고 필요할 때마다 사용하고 반납하는 기법
- 메모리의 할당, 해제가 잦은 경우에 메모리 풀을 쓰면 효과적
- 미리 할당해놓고 사용하지 않는 순간에도 계속 할당해놓으므로 메모리 누수가 있는 방식
장점으로는 메모리 풀 없이 동적할당과 해제를 반복하면 메모리의 랜덤 한(실제로는 알고리즘에 의한) 위치에 할당과 해제가 반복되면서 단편화를 일으킬 수 있겠지만 미리 공간을 할당해놓고 가져다 쓰고 반납하기 때문에 할당과 해제로 인한 외부 단편화가 발생하지 않음 또한 필요한 크기만큼 할당을 해놓기 때문에 내부 단편화 또한 생기지 않음
단점으로는 메모리 단편화로 인한 메모리 낭비량보다 메모리 풀을 만들었지만 쓰지 않았을 때 메모리 양이 커질 경우 사용하지 않아야 함
'CS > 컴퓨터 구조' 카테고리의 다른 글
메모리 (0) | 2024.03.02 |
---|---|
메모리와 캐시 메모리 (0) | 2024.03.02 |
CPU의 작동 원리 (1) | 2024.03.02 |
CPU, 메모리 개념 (0) | 2024.03.02 |