개발 지식 기록/북스터디

메모리

엉망진창좌충우돌 2024. 2. 8. 05:04

메모리 계층

 

 

1. 레지스터

  • 중앙처리장치(CPU) 내부에 존재하는 기억장치
  • 접근 시간이 중앙처리장치의 처리 속도와 비슷함
  • 휘발성, 속도 가장 빠름, 용량 작음

2. 캐시 메모리

  • 중앙처리장치가 주기억장치에 접근할 때 속도 차이를 줄이기 위해 사용
  • 실행 중인 프로그램의 명령어와 데이터를 저장
  • L1, L2 캐시를 지칭
  • 휘발성, 속도 빠름, 용량 작음

3. 주기억장치

  • 중앙처리장치가 직접 데이터를 읽고 쓸 수 있는 장치
  • 레지스터나 캐시 메모리보다 기억 용량이 크다
종류 설명
ROM
(Read Only Memory)
읽기만 가능한 읽기 전용 메모리
비휘발성 메모리
종류 : mask-ROM, PROM, EPROM, EEPROM
RAM
(Random Access Memory)
기억장소를 임의로 접근할 수 있는 메모리
읽고 쓰기가 가능한 휘발성 메모리
SRAM : 전원이 공급되는 중에 내용이 사라지지 않음(캐시 메모리로 사용)
DRAM : 일반적인 주기억장치로, 일정 시간이 지나면 내용이 사라지는 RAM

 

4. 보조기억장치

  • 주기억장치에 비해 접근 시간은 느리지만 기억 용량이 크다.
  • 종류 : HDD, SSD(Solid State Drive), CD, USB, 플로피 디스크 등

 

캐시

데이터를 미리 복사해 놓는 임시 저장소이자 빠른 장치와 느린 장치에서 속도 차이에 따른 병목현상을 줄이기 위한 메모리

이렇게 속도 차이를 해결하기 위해 계층과 계층 사이에 있는 계층을 캐싱 계층이라고 함

 

캐시히트와 캐시미스

캐시히트 : 캐시에서 원하는 데이터를 찾았을 때

캐시미스 : 캐시에서 원하는 데이터가 없어서 주메모리로 가서 데이터를 찾아오는 것

 

 

캐시히트의 경우 위치도 가깝고 CPU 내부 버스를 기반으로 작동하기 때문에 빠르다.

캐시미스의 경우 메모리에서 가져오는데 시스템 버스를 기반으로 작동하기 때문에 느리다.

 

캐시 매핑

캐시가 히트되기 위해 매핑하는 방법

 

1. 직접 매핑

메모리 주소와 캐시의 순서를 일치시키는 방법. 메모리가 1~100까지 있고 캐시가 1~10까지 있으면 1~10까지의 메모리는 캐시의 1에 위치하고, 11~20까지는 캐시의 2에 위치하는 식이다. 

구현이 단순하고 접근 속도가 빠르지만 매번 교체를 하기 때문에 동일 캐시 블록에 매핑되는 다른 메모리가 번갈아 실행되면 매우 낮은 적중률을 보여준다.

 

2. 연관 매핑

순서를 일치시키지 않고 관련 있는 캐시와 메모리를 매핑한다.(그냥 빈자리 찾아서 간다. 따라서 캐시 블록 번호와 메모리 블록 번호와 무관하다.) 직접 매핑보다 적중률이 높지만 속도가 느리다.

 

3. 집합 연관 매핑

직접 매핑과 연관 매핑의 절충

직접 매핑처럼 메모리 블록은 정해진 인덱스에만 들어갈 수 있지만, 블록이 여러 개의 집합으로 이루어져서 그 집합 내에 아무 자리만 들어가면 되는 방식

연관 매핑보다 적중률이 떨어지나 직접매핑보다 적중률은 높다.

 

웹 브라우저 캐시

쿠키

만료 기한이 있는 키-값 저장소

4KB까지 데이터를 저장할 수 있고 만료기한을 정할 수 있다.

쿠키를 설정할 때는 document.cookie로 쿠키를 볼 수 없게 httponly 옵션을 거는 것이 중요하며, 보통 서버에서 만료기한을 정한다.

 

로컬 스토리지

만료기한이 없는 키-값 저장소

5MB까지 저장할 수 있고 웹 브라우저를 닫아도 유지된다. HTML5를 지원하는 브라우저에서만 사용 가능하며 클라이언트에서만 수정 가능하다.

 

세션 스토리지

만료 기한이 없는 키-값 저장소

5MB까지 저장할 수 있고 탭 단위로 세션 스토리지를 생성하며, 탭을 닫을 때 해당 데이터가 삭제된다.

HTML5를 지원하는 브라우저에서만 사용 가능하며 클라이언트에서만 수정 가능하다.

 

 

데이터베이스의 캐싱 계층

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

 

 

메모리 관리

가상메모리

"가상메모리는 메모리 관리 기법의 하나로 컴퓨터가 실제로 이용 가능한 메모리 자원을 추상화하여 이를 사용하는 사용자들에게 매우 큰 메모리로 보이게 만드는 것"

이라고 되어있으나 조금 더 구체적으로 말하자면

 

  • 보조기억장치(하드디스크)의 일부를 주기억장치처럼 사용하는 것
  • 용량이 작은 주기억 장치를 마치 큰 용량을 가진 것처럼 사용하는 기법
  • 프로그램을 여러 개의 작은 블록 단위로 나누어서 가상기억장치에 보관해 놓고, 프로그램 실행 시 요구되는 블록만 주기억장치에 불연속적으로 할당하여 처리
  • 주기억장치의 용량보다 큰 프로그램을 실행하기 위해 사용
  • 주기억장치의 이용률과 다중프로그래밍의 효율을 높일 수 있다.
  • 가상기억장치에 저장된 프로그램을 실행하려면 가상기억장치의 주소(가상주소, logical address)를 주기억장치의 주소(실제주소, physical address)로 바꾸는 주소 변환 작업이 필요(메모리 관리 장치(MMU)에 의해 변환)
  • 블록 단위로 나누어 사용하므로 연속 할당 방식에서 발생할 수 있는 단편화를 해결할 수 있다.

 

가상메모리는 가상 주소와 실제주소가 매핑되어 있고 프로세스의 주소 정보가 들어있는 페이지 테이블로 관리된다. 이때 속도향상을 위해 TLB를 사용한다.

더보기

TLB

- 메모리와 CPU 사이에 있는 주소 변환을 위한 캐시. 페이지 테이블에 있는 리스트를 보관하며 CPU가 페이지 테이블까지 가지 않도록 해 속도를 향상시킬 수 있는 캐시 계층

 

스왑

필요한 주소 공간 전체를 메모리에 올려 두는 것이 아니라 그때그때 필요한 것들만 메모리에 올리고, 필요 없어지면 하드디스크로 내보내는 동작

스왑 구현 방식

오버레이
(Overlay)
보조기억장치에 저장된 프로그램을 여러 개의 조각으로 분할한 후 필요한 조각을 차례로 주기억장치에 적재시켜 프로그램을 실행
주기억장치의 공간이 부족하면 불필요한 조각이 위치한 장소에 새로운 프로그램 조각을 중첩(Overlay)하여 적재
프로그램을 조각으로 분할하는 작업은 프로그래머가 수행하므로 시스템 구조나 프로그램 구조를 알아야 한다.
스와핑
(Swapping)
하나의 프로그램 전체를 주기억장치에 할당하여 사용하다 필요에 따라 다른 프로그램과 교체하는 기법
가상기억장치의 페이징 기법으로 발전

 

 

페이지 폴트

  • 프로세스 실행 시 참조할 페이지가 주기억장치에 없는 현상
  • 페이지 부재가 일어나는 횟수를 페이지 부재 빈도(PFF)라고 한다.
  • 운영체제는 프로세스 실행 초기에 임의의 페이지 프레임을 할당하고, 페이지 부재율을 지속적으로 감시하고 있다가 부재율이 상한선을 넘어가면 좀 더 많은 페이지 프레임을 할당하고, 부재율이 하한선을 넘어가면 페이지 프레임을 회수하는 방식을 사용

지역성

프로세스가 실행되는 동안 주기억장치를 참조할 때 일부 페이지만 집중적으로 참조하는 성질

스레싱을 방지하기 위한 워킹 셋 이론의 기반

지역성의 종류

시간 지역성 프로세스가 실행되면서 하나의 페이지를 일정 시간 동안 집중적으로 액세스하는 현상
한 번 참조한 페이지는 가까운 시간 내에 계속 참조할 가능성이 높음
Loop(반복), Stack(스택) 등
공간 지역성 프로세스 실행 시 일정 위치의 페이지를 집중적으로 액세스하는 현상
어느 하나의 페이지를 참조하면 그 근처의 페이지를 계속 참조할 가능성이 높음
배열순회, 순차적 코드 실행 등

 

워킹 셋(작업 세트)

프로세스가 일정 시간 동안 자주 참조하는 페이지들의 집합

자주 참조되는 워킹 셋을 주기억장치에 상주시킴으로 페이지 부재 및 페이지 교체 현상을 줄여 프로세스의 기억장치 사용이 안정되게 한다.

시간이 지남에 따라 자주 참조하는 페이지들의 집합이 변하기 때문에 워킹 셋은 시간에 따라 변함

 

스레싱

메모리의 페이지 폴트율이 높은 것(프로세스 처리 시간보다 페이지 교체에 소요되는 시간이 더 많아지는 현상)을 의미

전체의 시스템 성능이 저하된다.

스레싱 현상 방지 방법

- 다중 프로그래밍의 정도를 적정 수준으로 유지

- 페이지 부재 빈도를 조절하여 사용

- 워킹 셋을 유지

- 부족한 자원을 증설하고, 일부 프로세스 중단시킴

- CPU 성능에 대한 자료의 지속적인 관리 및 분석으로 임계치를 예상하여 운영

 

기억장치 관리 전략

1. 반입 전략

보조기억장치에 보관 중인 프로그램이나 데이터를 언제 주기억장치로 적재할 것인지를 결정하는 전략

요구 반입 실행 중인 프로그램이 특정 프로그램이나 데이터 등의 참조를 요구할 때 적재하는 방법
예상 반입 실행 중인 프로그램에 의해 참조될 프로그램이나 데이터를 미리 예상하여 적재하는 방법

2. 배치 전략

새로 반입되는 프로그램이나 데이터를 주기억장치의 어디에 위치시킬 것인지를 결정하는 전략

최초 적합
(First FIt)
프로그램이나 데이터가 들어갈 수 있는 크기의 빈 영역 중에서 첫 번째 분할 영역에 배치
최적 적합
(Best Fit)
프로그램이나 데이터가 들어갈 수 잇는 크기의 빈 영역 중에서 단편화가 가장 작은 분할 영역에 배치
최악 적합
(Worst Fit)
프로그램이나 데이터가 들어갈 수 잇는 크기의 빈 영역 중에서 단편화가 가장 큰 분할 영역에 배치

3. 교체 전략

주기억장치의 모든 영역이 이미 사용 중인 상태에서 새로운 프로그램이나 데이터를 주기억장치에 배치하려고 할 때, 이미 사용되고 있는 영역 중에서 어느 영역을 교체하여 사용할 것인지를 결정하는 전략

종류 :  FIFO, OPT, LRU, LFU, NUR, SCR 등

 

메모리 할당

연속 할당

메모리에 연속적으로 공간을 할당

- 고정분할방식 : 메모리를 미리 나누어 관리하는 방식, 내부단편화가 발생

- 가변분할방식 : 프로그램의 크기에 맞게 동적으로 메모리를 나눠 사용, 내부단편화 발생하지 않으나 외부단편화 발생할 수 있다.

 

더보기

단편화

- 내부 단편화 : 주기억장치 공간이 프로그램보다 커서 프로그램의 사용 공간을 할당 후 사용되지 않고 남아있는 공간

- 외부 단편화 : 주기억장치 공간보다 프로그램이 커서 프로그램이 할당될 수 없어 사용되지 않고 남아있는 공간

 

홀 : 할당할 수 있는 비어있는 메모리 공간

 

불연속 할당(블록 분할 기법)

 

페이징 기법

가상기억장치를 모두 같은 크기의 블록으로 편성하여 운용하는 기법

외부 단편화는 발생하지 않으나 내부 단편화는 발생

가상 메모리를 일정한 크기로 나눈 단위를 페이지(Page)라고 하고, 물리 메모리를 일정한 크기로 나눈 블록을 프레임(Frame)이라고 한다.

주소 변환을 위해서 페이지 맵 테이블이 필요하다.

페이지 크기 기억장소 효율 단편화 입출력 시간 맵 테이블
클수록 감소 증가 감소 감소
작을수록 증가 감소 증가 증가

 

세그멘테이션 기법

가상 메모리를 서로 크기가 다른 논리적인 단위인 세그먼트로 분할하고 메모리를 할당하는 기법

세그먼트 테이블을 참조하여 해당 세그먼트의 시작 주소가 더해져서 실제적인 물리적 위치로 변환

세그먼테이션 기법 사용 이유는 기억공간을 절약하기 위함

세그먼트가 주기억장치에 적재될 때 다른 세그먼트에게 할당된 영역을 침범할 수 없으며, 이를 위해 기억장치 보호키(Storage Protection Key)가 필요

내부 단편화는 발생하지 않으나 외부 단편화가 발생

주소변환을 위해서 세그먼트 맵 테이블이 필요

예시)

세그먼트 번호 크기 시작주소
0 1200 4000
1 800 5700
2 1000 2000
3 500 3200

 

해당 세그먼트 테이블에서 S=(2,100)의 실제 주소는 2100(2000+100) 임

 

페이지 교체 알고리즘

오프라인 알고리즘(Offline Algorithm, 최적 교체(OPT, Optimal replacement라고도 한다.))

먼 미래에 참조되는 페이지와 현재 할당하는 페이지를 바꾸는 알고리즘. 가장 좋은 알고리즘이나 미래에 참조되는 프로세스를 알 수 없기 때문에 사용 불가능한 알고리즘. 다른 알고리즘과의 성능 비교에 대한 상한 기준을 제공

 

FIFO(First In First Out)

가장 먼저 메모리에 적재된 페이지를 먼저 교체하는 기법

프레임 개수를 늘리면 부재 발생이 감소해야 하나, 오히려 더 늘어나는 Belady's Anomaly 이상 현상 발생

페이지 프레임이 3개일 때, 페이지 결함 예

참조 페이지 1 2 3 1 2 4 1 2 5
페이지 프레임 1 1 1 1 1 4 4 4 5
  2 2 2 2 2 1 1 1
    3 3 3 3 3 2 2
페이지 부재 O O O X X O O O O

 

LRU(Least Recently Used)

최근에 가장 오랫동안 사용되지 않은 페이지를 교체

페이지 프레임이 3개일 때, 페이지 결함 예

참조 페이지 1 2 1 0 4 1 3
페이지 프레임 1 1 1 1 1 1 1
  2 2 2 4 4 4
      0 0 0 3
페이지 부재 O O X O O X O

 

LFU(Least Frequently Used)

사용 빈도가 가장 적은 페이지를 교체

페이지 프레임이 3개일 때, 페이지 결함 예

참조 페이지 1 2 3 1 2 4 1 2 5
페이지 프레임 1 1 1 1 1 1 1 1 1
  2 2 2 2 2 2 2 2
    3 3 3 4 4 4 5
페이지 부재 O O O X X O X X O

 

NUR(Not Used Recently)

최근의 사용여부를 확인하기 위해 각 페이지마다 두 개의 비트 사용

참조비트와 변형비트를 이용해서 페이지 교체

번호 1 2 3 4
참조비트(R) 0 0 1 1
변형비트(M) 0 1 0 1

 

(R, M)이 (0,0), (0,1), (1,0), (1,1) 순으로 페이지 교체

더보기

숫자가 더 큰 것을 더 오래 놔둔다. 몇 번을 참조했는가는 의미 없음

 

3. referenced, modified

2. referenced, not modified

1. not referenced, modified

0. not referenced, not modified

출처: https://storyofsol.tistory.com/99 [Story of Sol:티스토리]

 

SCR(Second Chance Replacement)

가장 오랫동안 주기억장치에 있던 페이지 중 자주 사용되는 페이지의 교체를 방지하기 위한 것으로 FIFO 기법의 단점을 보완하는 기법

 

 

 

출처

 

https://velog.io/@youngcheon/%EC%8A%A4%ED%84%B0%EB%94%94-%EC%A0%95%EB%A6%AC

 

velog

 

velog.io

https://gguljaem.tistory.com/entry/%EC%BA%90%EC%8B%9C%EB%A9%94%EB%AA%A8%EB%A6%AC%EC%9D%98-%EA%B0%9C%EB%85%90%EA%B3%BC-%EB%A7%A4%ED%95%91%EA%B8%B0%EB%B2%95%EC%97%90-%EB%8C%80%ED%95%9C-%EC%84%A4%EB%AA%85

 

캐시메모리의 개념과 매핑기법에 대한 설명

Cache Memory는 메인 메모리와 CPU간의 데이터 속도 향상을 위한 중간 버퍼 역할을 하는 CPU내 또는 외에 존재하는 메모리이다. 전체 시스템의 성능의 개선을 시킬 수 있는 메모리이다. 이번 포스팅에

gguljaem.tistory.com

https://hyeo-noo.tistory.com/101

 

[운영체제] Swapping (가상 메모리)

메모리 Swapping에 대해서 알아보자 Swap : 필요한 주소 공간 전체를 메모리에 올려 두는 것이 아니라 그때그때 필요한 것들만 메모리에 올리고, 필요 없어지면 하드디스크로 내보내는 동작 Swap을

hyeo-noo.tistory.com

https://resilient-923.tistory.com/397

 

[운영체제(OS)] 스와핑(swapping), 가상메모리(virtual memory) 란?

저번 시간에는 페이징과 세그멘테이션 방법에 대해서 살펴봤습니다. 모두 메모리를 어떻게 효율적으로 쓸 것이냐에 대한 고민을 바탕으로 나온 방법들이었는데요. 그렇다면 페이징 + 세그멘테

resilient-923.tistory.com