Post

메모리

메모리

메모리

Prerequisite

  • 메모리는 多 바이트로 구성되고, 각각의 바이트에는 고유한 주소가 할당된다.
  • 하나의 process가 실행될 때, CPU는 PC(Program Counter)에 할당된 주소로 가서 명령어를 추출
    • 명령어를 decode 한 다음, operands를 레지스터나 메모리에서 추출
    • 실행 이후, 결과 값을 레지스터나 메모리에 load
  • 현대 컴퓨터 구조인, 폰 노이만 구조에서는 CPU가 특정 명령어를 수행할 때 아래의 과정을 필수적으로 거침
    • download

가상 메모리?

  • 다수의 프로세스가 메모리에 할당될 수 있으므로, 메모리 관리의 어려움 발생 ➡️ 멀티 태스킹
  • 각각의 프로세스가 사용할 수 있는 논리적인 메모리 영역으로 구분
    • 이 후, 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{물리 메모리 주소}\) 변환의 필요성 대두
  • 특정 프로세스가 다른 프로세스의 메모리 영역에 접근할 수 없도록 할 필요성
    • Screenshot 2024-08-12 at 12.53.57 AM
    • hardware적인 도움을 받아서 이를 구현
  • user mode에서 발생하는 memory address는 모두 logical address
    • MMU에서 이를 실제 메모리에 할당시켜야하는데, 가장 간단하게는 아래와 같이 relocation register 를 활용하여 런타임 매핑
    • Screenshot 2024-08-12 at 1.01.31 AM
  • MMU는 정책에 따라서, 최대한 효율적으로 연속적인 메모리를 할당
    • 프로세스가 가지는 실제 주소 공간의 크기만큼 연속적인 메모리에 할당됨
    • Screenshot 2024-08-12 at 4.08.59 AM
    • 이 때, 무작정 연속된 영역에 메모리를 할당하는 것은 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 가 결합되어 페이징 기법을 구현함

Screenshot 2024-08-12 at 4.23.44 AM

Screenshot 2024-08-12 at 4.23.37 AM

  • 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.