3-2 메모리 - 메모리 계층, 메모리 관리

2025. 11. 1. 00:23·CS 스터디

1. 메모리 계층

- 레지스터 : 휘발성, 속도 가장 빠름, 기억 용량 가장 적음

- 캐시 : 휘발성, 속도 빠름, 기억 용량 적음

- 주기억장치 : 휘발성, 속도 보통, 기억 용량 보통

- 보조기억장치 : 비휘발성, 속도 느림, 기억 용량 많음

 

1) 캐시 (cache)

캐시는 CPU가 자주 사용할 데이터를 미리 저장해 놓는 임시 저장소이자, 장치 간의 속도 차이에 따른 병목 현상을 줄이기 위한 메모리이다. 캐시는 CPU와 메인 메모리 사이에 위치하며, 속도 차이를 해결하기 위해 계층과 계층 사이에 있는 계층을 캐싱 계층이라고 한다. 캐시의 효율은 데이터 접근 패턴을 예측하는 지역성 원리에 기반한다.

* 지역성 원리 : CPU가 최근에 접근했던 데이터나 그 주변 데이터를 가까운 미래에 다시 접근할 확률이 높다는 성질

 

1.1 시간 지역성

최근에 사용한 데이터를 가까운 미래에 다시 접근하려는 특성이다. 이를 통해 해당 데이터를 캐시에 유지한다.

ex) 반복문, 함수 호출 스택

 

1.2 공간 지역성

최근 접근한 데이터를 이루고 있는 공간이나 그 주변 공간에 다시 접근하는 특성이다. 특정 주소의 데이터를 가져올 때, 데이터 뿐만 아니라 인접한 주소의 데이터 블록을 한꺼번에 캐시에 가져온다.

ex) 배열 순차 접근, 코드 순차 실행

 

 

2) 캐시히트와 캐시미스

캐시에서 원하는 데이터를 찾은 후 제어장치를 거쳐 가져오는 것을 캐시히트라고 하며, 원하는 데이터가 캐시에 존재하지 않아 메인 메모리에서 데이터를 찾아오는 것을 캐시미스라고 한다. 캐시히트는 CPU 내부 버스를 기반으로 작동하기 때문에 속도가 빠르며, 캐시미스는 시스템 버스를 기반으로 작동하기 때문에 속도가 느리다.

 

2.1 캐시매핑

캐시매핑이란 CPU의 레지스터와 메인 메모리 간 데이터 전달을 매핑하는 방법이다.

이름 원리 장단점
직접 매핑 메인 메모리의 특정 주소가 캐시의 정해진 한 위치에만 저장되도록 1:1 대응 시키는 방식 구현이 매우 간단하고 처리 속도가 빠르지만, 충돌이 자주 발생
연관 매핑 메인 메모리의 블록이 캐시의 어떤 위치든 자유롭게 저장될 수 있도록 허용하는 방식 충돌이 적어 캐시 히트율이 가장 높지만, 모든 블록을 탐색해야하므로 속도가 느림
집합 연관 매핑 직접 매핑 + 연관 매핑, 캐시를 여러 개의 집합으로 나누고 각 집합 내에서는 연관 매핑 방식 사용 충돌 발생 확률이 낮아 히트율이 높고, 탐색 범위가 좁아 구현이 단순함

 

 

2.2 웹 브라우저의 캐시

주로 사용자의 정보나 인증 모듈 관련 사항들을 웹 브라우저에 저장한 후, 서버에서 요청할 때 중복 요청 방지를 위해 쓰인다.

구분 쿠키 (Cookie) 로컬 스토리지 (Local Storage) 세션 스토리지 (Session Storage)
저장 주체 서버와 클라이언트 클라이언트 클라이언트
유효 기간 만료기한이 있는 키-값 저장소 만료기한이 없는 키-값 저장소 만료기한이 없는 키-값 저장소
용량 제한 4KB 내외 5MB 내외 (브라우저 닫아도 유지) 5MB 내외 (브라우저 닫으면 삭제)
서버 전송 HTTP 요청 시 자동 전송 자동 전송 안 됨 자동 전송 안 됨
주요 용도 로그인 상태 유지, 사용자 트래킹, 세션 관리 오프라인 데이터 저장, 사용자 설정, 캐싱 일회성 로그인 정보, 임시 데이터 (세션 내 유지)

 

 

 

 

2. 메모리 관리

1) 가상 메모리

가상 메모리는 실제 이용 가능한 메모리 자원을 훨씬 더 큰 메모리 공간으로 추상화하여 사용자 프로그램에게 제공하는 것이다. 이를 통해 실제 메모리 크기에 관계없이 큰 프로그램을 실행할 수 있으며, 한정된 메모리를 여러 프로세스가 효율적으로 공유할 수 있다. 가상 주소는 메모리 관리 장치(MMU)에 의해 실제 주소로 변환된다.

* 가상 주소 : 가상 메모리를 통해 가상으로 주어진 주소

* 실제 주소 : 실제 메모리 상에 있는 주소

 

1.1 스와핑

프로세스 전체 또는 일부를 메인 메모리와 보조 기억장치 사이에 옮기는 메모리 관리 기법이다.

 

- 스와핑 아웃 : 메모리 공간이 부족할 때, 덜 사용되는 프로세스를 강제로 메모리에서 디스크의 스와핑 공간으로 내보내는 작업

- 스와핑 인 : 디스크에 있던 프로세스가 다시 필요하거나 메모리가 확보되어 공간이 생기면, 해당 프로세스를 디스크에서 메모리로 다시 불러들이는 작업

 

 

1.2 페이지 폴트

프로그램이 프로세스의 주소 공간에 있는 데이터를 요청했지만, 해당 데이터가 현재 메인 메모리에 없는 경우 발생하는 트랩이다. 페이지 폴트는 디스크 I/O가 수반되므로 일반적인 명령어 실행보다 매우 긴 시간 지연(Latency)을 유발한다.

 

- 발생 과정

1 CPU가 유효한 논리적 주소를 사용하여 데이터를 요청
2 MMU가 페이지 테이블을 참조하여 해당 페이지가 메모리에 있는지 확인
3 페이지 테이블에 해당 페이지가 '디스크에 있음'으로 표시되어 있으면 페이지 폴트 인터럽트 발생
4 CPU 제어권이 운영체제에게 넘어감
5 운영체제는 디스크의 스와핑 공간에서 요청된 페이지를 찾음
6 페이지를 저장할 빈 프레임이 메모리에 있는지 확인, 없다면 다른 페이지 하나를 희생자로 선정하여 디스크로 내보냄 (페이지 교체, 스와핑 아웃)
7 요청된 페이지를 디스크에서 찾은 빈 프레임으로 로드
8 페이지 테이블을 갱신시킨 후, 요청을 했던 원래 명령어부터 다시 실행

* 페이지 : 가상 메모리를 사용하는 최소 크기 단위

* 프레임 : 실제 메모리를 사용하는 최소 크기 단위

 

 

2) 스레싱

스레싱은 메모리의 페이지 폴트율이 높은 것을 의미하며, 운영체제가 너무 많은 프로세스를 동시에 실행 시키려고 하여 각 프로세스에게 필요한 최소한의 프레임을 할당하지 못했을 때 발생한다. 이 때문에 CPU 이용률이 급격히 떨어지며, 운영체제는 CPU의 가용성을 높이기 위해 더 많은 프로세스를 추가하여 악순환이 반복된다.

 

2.1 작업 세트

스레싱 문제를 해결하기 위해 도입된 개념으로, 프로세스가 특정 시간 동안 원활하게 실행되기 위해 필수적으로 필요한 페이지들의 집합이다. 운영체제는 지역성의 원리에 기반하여 작업 세트 크기를 계산하고, 해당 페이지 집합을 메모리에 미리 로드한다. 이를 통해 탐색 비용과 스와핑을 줄일 수 있다.

 

 

2.2 PFF (Page Fault Frequency)

PFF는 페이지 폴트 빈도를 상한선과 하한선으로 설정하여 작업 세트를 통적으로 관리하는 기법이다. 페이지 폴트 빈도가 상한선에 도달한다면 추가적인 프레임을 할당하고, 하한선에 도달한다면 프레임을 회수한다. 이를 통해 스레싱을 방지하고 메모리 자원 이용률을 최적화한다.

 

 

3) 메모리 할당

3.1 연속 할당

프로세스가 메모리에 적재될 때 물리적으로 연속된 하나의 영역에 할당되어야 하는 방식이다.

 

- 고정 분할 방식 : 메모리를 미리 고정된 크기로 나누어 관리하는 방식이며, 내부 단편화가 발생하고 최대 크기가 제한된다.

- 가변 분할 방식 : 프로세스가 메모리에 적재될 때마다 필요한 크기만큼 동적으로 할당되는 방식이며, 외부 단편화가 발생한다.

최초적합 위쪽이나 아래쪽부터 시작해서 홀을 찾으면 바로 할당
최적적합 프로세스의 크기 이상인 공간 중 가장 작은 홀부터 할당
최악적합 프로세스의 크기와 가장 많이 차이나는 홀에 할당

 

* 내부 단편화 : 메모리를 나눈 크기보다 프로그램이 작아서 들어가지 못하는 공간이 많이 발생하는 현상

* 외부 단편화 : 메모리를 나눈 크기보다 프로그램이 커서 들어가지 못하는 공간이 많이 발생하는 현상

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

 

 

3.2 불연속 할당

프로세스가 메모리에 적재될 때 물리적으로 연속되지 않은 여러 개의 영역에 분산되어 할당될 수 있도록 허용하는 방식이다.

 

- 페이징 : 프로세스의 주소 공간을 고정된 페이지 크기로 나누고, 페이지 테이블을 이용하여 메모리에 할당한다. 외부 단편화가 발생하지 않지만, 주소 변환이 복잡해지며 내부 단편화가 발생할 수 있다.

- 세그멘테이션 : 프로세스의 주소 공간을 의미 단위인 세그먼트로 나누고, 세그먼트 테이블을 이용하여 메모리에 할당한다. 사용자에게 친숙하고 보호 및 공유가 용이하지만, 세그먼트 크기가 가변적이어서 외부 단편화가 발생할 수 있다.

- 페이지드 세그멘테이션 : 먼저 세그먼트로 나누고, 각 세그먼트가 고정된 페이지 크기로 나누어져 메모리에 할당한다. 외부 단편화가 발생하지 않으며 효율적인 메모리 관리를 할 수 있지만, 가장 복잡하고 오버헤드가 클 수 있다.

 

 

4) 페이지 교체 알고리즘

4.1 오프라인 알고리즘

현실적으로 구현은 불가능하지만, 페이지 교체 알고리즘의 성능을 평가하는 가장 이상적인 기준이다. 가장 먼 미래에 사용될 페이지를 희생자로 선택하여 내보내는 알고리즘이다. 페이지 폴트 빈도 수가 가장 적다.

 

4.2 FIFO

가장 먼저 온 페이지를 가장 먼저 내보내는 알고리즘이다. 즉, 메모리에 들어온 시간을 기준으로 가장 오래된 페이지를 교체한다. 구현이 가장 간단하고 오버헤드가 적지만, 가장 오래된 페이지가 자주 사용되는 페이지라면 비효율적일 수 있다.

 

4.3 LRU

가장 오랫동안 사용되지 않은 페이지를 내보내는 알고리즘이다. 즉, 가장 최근에 사용된 시점을 기준으로 가장 오래 전에 사용된 페이지를 교체한다. OPT 다음으로 가장 효율적인 알고리즘으로 평가되며 캐시 히트율이 높지만, 페이지가 사용될 때마다 계수기, 스택을 변경해야 하므로 오버헤드를 발생 시킨다.

 

- NUR : clock 알고리즘이라고도 하며, NRU에서 발전한 알고리즘이다. 0과 1을 가진 비트를 사용하며, 1은 최근에 참조된 것, 0은 참조되지 않은 것을 의미한다. 시계 방향으로 돌면서 0을 찾고 해당 프로세스를 교체한 후, 1로 바꾸는 알고리즘이다.

 

4.4 LFU

가장 사용 횟수가 적은 페이지를 내보내는 알고리즘이다. 즉, 메모리에 있는 동안 총 사용 횟수를 기준으로 가장 적게 사용된 페이지를 교체한다. 장기적으로 많이 사용되는 페이지를 보존할 수 있지만, 사용 횟수를 카운트해야 하므로 오버헤드가 크고 페이지가 불합리하게 교체될 수 있는 문제가 있다.

'CS 스터디' 카테고리의 다른 글

3-3. 프로세스와 스레드 [02] - 스레드와 멀티스레딩, 공유 자원과 임계 영역, 교착 상태  (0) 2025.11.08
3-3. 프로세스와 스레드 [01] - 프로세스와 컴파일 과정, 상태, 메모리 구조, PCB, 멀티프로세싱  (0) 2025.11.08
3-1. 운영체제와 컴퓨터 - 운영체제의 역할과 구조, 컴퓨터의 요소  (0) 2025.10.31
2-5. HTTP - HTTP/1.0, HTTP/1.1, HTTP/2, HTTPS, HTTP/3  (1) 2025.10.26
2-4. IP주소 - ARP, 홉바이홉 통신, IP 주소 체계  (0) 2025.10.19
'CS 스터디' 카테고리의 다른 글
  • 3-3. 프로세스와 스레드 [02] - 스레드와 멀티스레딩, 공유 자원과 임계 영역, 교착 상태
  • 3-3. 프로세스와 스레드 [01] - 프로세스와 컴파일 과정, 상태, 메모리 구조, PCB, 멀티프로세싱
  • 3-1. 운영체제와 컴퓨터 - 운영체제의 역할과 구조, 컴퓨터의 요소
  • 2-5. HTTP - HTTP/1.0, HTTP/1.1, HTTP/2, HTTPS, HTTP/3
leastzero
leastzero
  • leastzero
    빵이
    leastzero
  • 전체
    오늘
    어제
    • 모든 글 (31) N
      • CS 스터디 (25)
      • 활동 (2)
      • IT 기술 (4) N
  • hELLO· Designed By정상우.v4.10.4
leastzero
3-2 메모리 - 메모리 계층, 메모리 관리
상단으로

티스토리툴바