메모리
메모리
메모리
Prerequisite
- 메모리는 多 바이트로 구성되고, 각각의 바이트에는 고유한 주소가 할당된다.
- 하나의 process가 실행될 때, CPU는 PC(Program Counter)에 할당된 주소로 가서 명령어를 추출
- 명령어를 decode 한 다음, operands를 레지스터나 메모리에서 추출
- 실행 이후, 결과 값을 레지스터나 메모리에 load
- 현대 컴퓨터 구조인, 폰 노이만 구조에서는 CPU가 특정 명령어를 수행할 때 아래의 과정을 필수적으로 거침
가상 메모리?
- 다수의 프로세스가 메모리에 할당될 수 있으므로, 메모리 관리의 어려움 발생 ➡️ 멀티 태스킹
- 각각의 프로세스가 사용할 수 있는
논리적
인 메모리 영역으로 구분- 이 후, MMU(Memory Management Unit) 가 실제 물리 메모리에서 할당 가능한 영역에 할당해주는 방식
- 가상 메모리는 64bit architecture에서는 \(0 \sim 2^{64} -1\) 의 주소값을 가질 수 있음
- \[\textrm{물리 메모리 크기} \leq \textrm{가상 메모리 크기}\]
- 그렇다면 과할당 상태는 어떻게 극복?
- secondary storage에 swap in, out하는 기법을 사용
- swapping을 위해서 정형화된 형식으로 secondary storage에 저장할 필요성이 생김
- Paging 기법의 등장
MMU?
- \(\textrm{가상 메모리 주소} \rightarrow \textrm{물리 메모리 주소}\) 변환의 필요성 대두
- 특정 프로세스가 다른 프로세스의 메모리 영역에 접근할 수 없도록 할 필요성
- user mode에서 발생하는 memory address는 모두 logical address
- MMU는 정책에 따라서, 최대한 효율적으로 연속적인 메모리를 할당
- 프로세스가 가지는 실제 주소 공간의 크기만큼 연속적인 메모리에 할당됨
- 이 때, 무작정 연속된 영역에 메모리를 할당하는 것은
external fragmentation
을 만들어낸다.- 위 그림의 마지막 단계에서, 실제 할당 가능한 메모리 영역은 충분하지만, 연속된 메모리 영역이 아니여서 메모리 할당이 불가능한 영역을 뜻함
- 이를 최소화하기 위한 3가지 방법이 존재
first fit
,best fit
,worst fit
- 3가지 방법 중에 무엇이 더 우월하다는 것은 없음
- 그럼에도 불구하고 External Fragmentation을 완전하게 해결할 수 있는 방법은 없다.
Paging?
- External Fragmentation을 완전하게 피해갈 수 있는 방법
- 핵심은 프로세스의 주소공간을 연속된 메모리 영역에 할당하지 않는 것
- logical address space를 고정 크기의 Page로 분할
- physical address space를 고정 크기의 Frame으로 분할
- 일반적으로 1개의 page 크기와 Frame 크기는 동일하다
- hardware + Operating system 가 결합되어 페이징 기법을 구현함
- CPU가 만들어내는 모든 address는
{page number, page offset}
의 정보를 가진다. paging hardware에서
page number
값을 참조하여 page table에서 실제 프레임과 매핑시킨다음, 모든 과정에서 불변 값인page offset
값을 통해서 실제 물리 메모리 영역을 참조한다.- 고정 크기의 page와 frame이라는 단위를 사용하기 때문에, 할당 받은 메모리의 크기가 실제 메모리 영역보다 큰
internal fragmentation
이 발생한다.- 이것을 방지하기 위해서, page table의 크기를 적절하게 조절한다.
- e.g.) linux: \(2^{12} = 4096\textrm{바이트}\)
This post is licensed under CC BY 4.0 by the author.