Search
Duplicate
⚙️

메모리 관리 (Memory Management)

생성일
2023/04/13 00:40
태그
OS

메모리 관리 (Memory Management)

 메인 메모리 (Main Memory)

메인 메모리는 CPU가 직접 접근할 수 있는 기억 장치
프로세스가 정상적으로 실행되려면 프로그램이 메모리에 올라와야 한다.
주소가 할당된 일련의 바이트들로 구성되어 있다.
CPU는 레지스터가 지시하는대로 메모리에 접근하여 다음에 수행할 명령어를 가져온다. 만약 명령어 수행시 메모리에 필요한 데이터가 없으면 해당 데이터를 우선 가져와야 한다.
이 역할을 하는 것이 MMU 이다.

 Address Binding

 프로세스 주소 체계

프로세스의 주소는 논리 주소 물리 주소 로 나뉜다.

 논리 주소

CPU가 생성하는 주소
프로세스마다 독립적으로 가지는 주소 공간이기 때문에 프로세스 내부에서 사용한다.

 물리 주소

프로세스가 실행되기 위해 실제로 메모리(RAM)에 올라가는 위치이다.
Address Binding 은 어떤 프로그램이 메모리의 어느 위치에, 즉 어떤 물리적 주소에 load 될지 결정하는 과정이다.
Binding 하는 시점에 따라 분류

1. Compile Time

프로세스의 물리적 주소가 컴파일 시 정해진다.
프로세스가 메모리의 어느 위치에 들어갈지 미리 알고 있다면, 컴파일러가 고정된 주소를 생성한다.
따라서 프로세스 내부에서 사용하는 논리적 주소와 물리적 주소가 동일하다.

2. Load Time

프로세스가 메모리의 어느 위치에 들어갈지 모른다면 컴파일러는 Relocatable Code 를 생성해야 한다.
Relocatable Code 는 메모리의 어느 위치에서나 수행될 수 있는 기계 언어 코드이다.
Loader 가 프로세스를 메모리에 load하는 시점에 물리적 주소를 결정한다.
따라서 논리 주소와 물리 주소가 다르다.

3. Execution Time

프로세스 수행이 시작된 이후에 실행될 때, 메모리 주소를 바꾸는 방법이다.
즉, 런타임 시 물리적 주소가 결정된다.
런타임 주소 할당은 MMU 라는 장치를 사용해서 논리 주소를 물리 주소로 바꾼다.

 MMU (Memory Management Unit, 메모리 관리 장치)

논리 주소를 물리 주소로 변환해준다.
프로세스가 CPU에서 수행되면서 생성하는 모든 주소에 대해 base register 를 더해주어 물리 주소로 변환한다.
메모리 보호나 캐시 관리 등 CPU가 메모리에 접근하는 것을 총 관리해주는 하드웨어이다.
*base register : 접근할 수 있는 물리적 주소의 최솟값
*Limit register : 논리적 주소의 범위
*두가지를 활용하여 메모리를 보호한다

 Swapping

메모리는 크기가 크지 않기 때문에, 프로세스를 디스크에 임시로 보냈다가 다시 로드하는 경우가 발생한다.
이떄, 디스크로 보내는 것을 swap out , 메모리로 다시 로드하는 것을 swap in 이라고 한다.
보통 스케쥴러를 통해 어떤 프로세스를 swap in/out 할 지 결정한다.
Compile Time BindingLoad Time Bindingswap in 할 때, 같은 메모리 위치로 가져와야 한다. Execution Binding 의 경우는 반환 되기 떄문에 빈 메모리 영역 아무 곳에 올릴 수 있다.

 메모리 할당

메모리는 일반적으로 커널 영역 사용자 프로세스 영역 으로 나누어서 사용한다.
이 중 사용자 프로세스 영역 에 할당하는 방법으로 두 가지 방법이 있다.
Contiguous Allocation (연속적 할당) 은 프로세스들이 연속적인 메모리 공간을 차지하게 되는 것이다.
Noncontiguous Allocation (비연속적 할당) 은 프로세스들이 고정 크기의 블록으로 나뉘어 메모리에 순서 상관 없이 저장된다 ⇒ 페이징 기법

 메모리 과할당 (Over Allocating)

실제 메모리의 사이즈보다 더 큰 사이즈의 메모리를 프로세스에 할당한 상황이다.
그래서 페이징 기법과 같은 메모리 관리는 사용자가 눈치 못채도록 하는 눈속임이라 할 수 있다.
하지만 page fault가 발생하여 메모리에 페이지를 올려야 하는 경우에는 빈 프레임을 확보해야만 한다.
이때 쓰이는 방법이 페이지 교체 알고리즘 swapping 이다.

 TLB (Translation Look-aside Buffer)

TLB는 메모리 주소 변환을 위한 별도의 캐시 메모리로, page table에서 빈번히 참조되는 일부 엔트리를 캐싱한다.
TLB는 key-value 쌍으로 데이터를 관리하며, key에는 page number, value에는 frame number가 대응된다.
따라서 CPU는 TLB를 page table보다 먼저 참조하여, 원하는 페이지가 있다면 바로 frame number를 얻을 수 있다.

 ref)