CS/운영체제

[운영체제] 메모리 계층 구조

ummchicken 2023. 2. 4. 17:17

✔️ 메모리 계층 구조(Memory Hierachy)란?

메모리 계층은 레지스터, 캐시(L1, L2), 메모리(주기억장치), 하드디스크(보조기억장치)로 구성되어 있다.

 

메모리 계층

 

명칭 위치 접근 속도
레지스터 CPU 내부 빠름 (휘발)
캐시(L1, L2 캐시) CPU 내부 빠름 (휘발)
메모리(RAM) CPU 외부 레지스터와 캐시보다 느림 (휘발)
하드디스크(HDD, SDD) CPU 직접 접근 불가 데이터를 메모리로 이동시켜 접근 가능 (비휘발)

 

  • 은 하드디스크로부터 일정량의 데이터를 복사해서 임시 저장하고, 이를 필요 시마다 CPU에 빠르게 전달한다.
  • 이러한 계층이 있는 이유는, 경제성과 캐시 때문이다.

 

 


 

✔️ 캐시(Cache) 메모리

주기억장치에 저장된 내용의 일부를 임시로 저장해두는 기억 장치이다.

CPU와 주기억장치의 큰 속도 차이로 인한 성능 저하를 방지하기 위한 방법이다.

 

  • 데이터나 값을 미리 복사해 놓는 임시 장소이다.
  • 시스템의 효율성을 위해 사용한다.
    • 캐시의 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우
    • 값을 다시 계산하는 시간을 절약하고 싶은 경우
  • 속도가 빠른 장치와 느린 장치에서 속도차에 따른 병목 현상을 완화하기 위한 범용 메모리이다.

 

※ 캐싱이란?

더보기
속도 차이를 해결하기 위해 계층과 계층 사이에 있는 계층을 캐싱 계층이라고 한다.
혹은, 좀 더 빠른 메모리 영역으로 데이터를 가져와서 접근하는 방식을 말한다.

예를 들어, 캐시 메모리와 보조기억장치 사이에 있는 주기억장치를 
보조기억장치의 캐싱 계층이라고 할 수 있다.

또 다른 예로, 속도가 느린 하드디스크의 데이터를 메모리로 가지고 와서 
메모리 상에서 읽기 쓰기를 수행하는 것을 
'데이터를 메모리에 캐싱한다'라고 한다.

 

 

 

✔️ 캐시의 종류 - CPU 캐시

대용량의 메인 메모리 접근을 빠르게 하기 위해 CPU 칩 내부나 바로 옆에 탑재하는 작은 메모리이다.

하드웨어를 통해 관리한다.

 

종류 설명 CPU 성능에직접적인 영향
L1 캐시 일반적으로 CPU 칩안에 내장되어 데이터 사용 및
참조에 가장 먼저 사용되는 캐시 메모리
- 각 코어마다 가지고 있음
O
L2 캐시 - L1 캐시 메모리와 용도와 역할이 비슷
- 속도 : L1 캐시 > L2 캐시 > 일반메모리(RAM)
- 각 코어마다 가지고 있음
O
L3 캐시 - L1 캐시, L2 캐시와 동일한 원리로 작동
- 대부분 CPU가 아닌 메인보드에 내장
- 모든 코어가 공유함
X

 

 

 

💡 지역성의 원리

그렇다면, 캐시 계층을 두는 것 말고 캐시를 직접 설정할 때는 어떻게 해야 할까?

캐시가 효율적으로 동작하기 위해서는 캐시가 저장할 데이터가 지역성을 가져야 한다.

 

이는 자주 사용하는 데이터를 기반으로 설정해야 한다.

 

그렇다면 자주 사용하는 데이터에 대한 근거가 되는 것은 무엇일까?

→ 바로 지역성이다.

 

지역성은 시간 지역성(temporal locality)공간 지역성(spatial locality)으로 나뉜다.

 

 

 

✔️ 시간 지역성과 공간 지역성

종류 설명
시간 지역성 특정 데이터가 한 번 접근되었을 경우,
가까운 미래에 또 한 번 데이터에 접근할 가능성이 높음
공간 지역성 액세스 된 기억장소와 인접한 기억장소가 액세스 될 가능성이 높음

※ 시간 지역성 예제

더보기
for 반복문으로 이루어진 코드 안의 변수 i에 계속해서 접근이 이루어진다.
여기서 데이터는 변수 i이고, 최근에 사용했기 때문에 
계속 접근해서 +1을 연이어 한다.

 

※ 공간 지역성 예제

더보기
공간을 나타내는 배열 arr의 각 요소들에 i가 할당되며, 
해당 배열에 연속적으로 접근한다.

 

 

 

✔️ 캐시히트(Hit)와 캐시미스(Miss)

캐시히트와 캐시미스

 

  • 캐시히트 : 캐시에서 원하는 데이터를 찾음
  • 캐시미스 : 해당 데이터가 캐시에 없다면, 주 메모리로 가서 데이터를 찾아오는 것

 

 

 

✔️ 캐싱 라인 (Caching line)

위에서 언급했듯이 캐시는 프로세서 가까이에 위치하면서 빈번하게 사용되는 데이터를 놔두는 장소이다.

 

하지만 빈번하게 사용되는 데이터들을 캐시에 저장했더라도,

찾고자 하는 데이터를 캐시에서 찾을 때 모든 데이터를 순회하는 것은 시간 낭비다.

 

즉, 캐시에 목적 데이터가 저장되어있을 때 바로 접근하여 출력할 수 있어야 캐시 활용이 의미있어진다.

따라서 캐시에 데이터를 저장할 시, 자료구조를 활용해 묶어서 저장하는데 이를 캐싱 라인이라고 부른다.

 

즉, 캐시에 저장하는 데이터에, 데이터의 메모리 주소를 함께 저장하면서 

빠르게 원하는 정보를 찾을 수 있다. (set이나 map 등을 활용)

 

 

 

✔️ 캐시매핑

캐시매핑이란 캐시가 히트되기 위해 매핑하는 방법이다.

 

CPU의 레지스터와 주 메모리(RAM) 간에 데이터를 주고받을 때를 기반으로 설명한다.

 

다음 표는 캐시매핑 분류이다.

이름 설명
직접 매핑
(directed mapping)
메모리가 1~100이 있고 캐시가 1~10이 있다면 
1:1~10, 2:1~10... 이런 식으로 매핑하는 것을 말한다.
- 처리가 빠르지만 충돌 발생이 잦다.
연관 매핑
(associative mapping)
순서를 일치시키지 않고 관련있는 캐시와 메모리를 매핑한다.
- 충돌이 적지만 모든 블록을 탐색해야 해서 속도가 느리다.
집합 연관 매핑
(set associative mapping)
직접 매핑과 연관 매핑을 합쳐 놓은 것이다.
순서는 일치시키지만, 집합을 둬서 저장하며 
블록화되어 있기 때문에 검색은 좀 더 효율적이다.

예를 들어, 메모리가 1~100, 캐시가 1~10이 있다면, 
캐시 1~5에는 1~50의 데이터를 무작위로 저장시키는 것이다.

 

 

 

✔️ 웹 브라우저의 캐시

소프트웨어적인 대표적인 캐시로는 웹 브라우저의 작은 저장소 쿠키, 로컬 스토리지, 세션 스토리지가 있다.

 

이러한 것들은 보통 사용자의 커스텀한 정보나 인증 모듈 관련 사항들을 웹 브라우저에 저장해서 

추후 서버에 요청할 때 자신을 나타내는 아이덴티티나 중복 요청 방지를 위해 쓰인다.

 

 

  • 쿠키 : 만료기한이 있는 키-값 저장소
    • 일시적으로 필요한 가벼운 데이터 저장이 필요할 때 사용한다.
    • same site 옵션을 strict로 설정하지 않았을 경우 다른 도메인에서 요청했을 때 자동 전송된다.
    • 4KB까지 데이터를 저장할 수 있고, 만료기한을 정할 수 있다.
    • 쿠키를 설정할 때는 document.cookie로 쿠키를 볼 수 없게 httponly 옵션을 거는 것이 중요하다.
    • 클라이언트 또는 서버에서 만료기한 등을 정할 수 있는데, 보통 서버에서 만료기한을 정한다.
    • Ex) 다시 보지 않음 쿠키 팝업창, 로그인 자동 완성

 

 

  • 로컬 스토리지 : 만료기한이 없는 키-값 저장소
    • 지속적으로 필요한 데이터 저장이 필요할 때 사용한다.
    • 10MB까지 저장할 수 있으며, 웹 브라우저를 닫아도 유지되고 도메인 단위로 저장/생성된다.
    • HTML5를 지원하지 않는 웹 브라우저에서는 사용할 수 없다.
    • 클라이언트에서만 수정이 가능하다.
    • Ex) 자동 로그인

 

 

  • 세션 스토리지 : 만료기한이 없는 키-값 저장소
    • 일시적으로 필요한 데이터 저장이 필요할 때 사용한다.
    • 탭 단위로 스토리지를 생성하며, 탭을 닫을 때 해당 데이터가 삭제된다.
    • 5MB까지 저장이 가능하다.
    • HTML5를 지원하지 않는 웹 브라우저에서는 사용할 수 없다.
    • 클라이언트에서만 수정이 가능하다.
    • Ex) 일회성 로그인, 입력 폼 저장, 비로그인 장바구니

 

 

 

💡 로컬 스토리지와 세션 스토리지의 차이점

  1. 로컬 스토리지는 데이터 영구 저장이 가능, 세션 스토리지는 브라우저 탭/윈도우가 닫히면 스토리지 초기화
  2. 로컬 스토리지는 window.localStorage, 세션 스토리지는 window.sessionStorage 객체 사용

 

 

 

✔️ 데이터베이스의 캐싱 계층

데이터베이스 시스템을 구축할 때도

메인 데이터베이스 위에 레디스(redis) 데이터베이스 계층을 '캐싱 계층'으로 둬서 성능을 향상시키기도 한다.

 

레디스 캐싱 계층 아키텍처

 

 

 

 

 


출처