카테고리 없음

[Computer Science] CPU와 메모리 심화 2

김민커 2023. 8. 22. 21:57

캐시란

  • 캐시는 데이터를 미리 복사해 놓는 임시 저장소

 📌 우리가 보는 화면에 출력되는 데이터는 결국 메인 메모리에 저장된 데이터 입니다.

  1. 프로그램이 실행되면 디스크를 읽어서 메인 메모리에 복사해두고
  2. CPU(MMU)가 메인 메모리에서 데이터를 읽어오며 작업을 처리합니다.
  3. 이때 캐시가 중간에서 한번더 메인메모리의 데이터를 복사해두는 거라고 보시면 됩니다. 
  • 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리
  • 데이터 접근에 오래 걸리는 경우를 해결하고 다시 계산하는 시간을 절약
  • 즉, 캐시는 계층과 계층 사이에서 속도차이를 해결하기 위한 임시 저장소입니다.
    • ex1) 레지스터 : 메모리와 CPU 사이의 속도 차이를 해결하기 위한 캐시
    • ex2) 주기억장치 : 캐시 메모리와 보조기억장치 사이의 속도 차이를 해결하기 위한 캐시

 ❓ 그럼 SRAM(L1~3캐시)만 왜 캐시라고 불러요?

  • 레지스터는 CPU의 연산을 위한 저장소이고
  • 메인 메모리는 실제 프로그램 실행을 위한 저장소인데
  • 그 사이에서 정말 임시 저장소 역할만 하는 것이 SRAM 이기 때문에 그렇습니다.

SRAM(L1~3캐시) 은 정적 메모리로써 용량은 작지만 속도는 매우 빨라서 캐시 전용 메모리로 많이 쓰입니다.

지역성의 원리

 📌 지역성 이란?

자주 사용되는 데이터의 특성을 의미합니다.

캐시를 직접 설정할때는 자주 사용되는 데이터를 기반으로 설정해야 하며 이러한 특성을 지역성이라고 합니다.

 

시간 지역성

  • 최근 사용한 데이터에 다시 접근하려는 특성

ex) for문 안에 선언된 i는 반복문 안에서 계속해서 접근이 이루어지는 변수이다.최근에 사용했기 때문에 계속 접근해서 +1 이 이루어지는 것이다. (i 변수에 대한 시간 지역성)

for(let i=0; i<5; i++){
	console.log(i) // 0 1 2 3 4
}

공간 지역성

  • 최근 접근한 데이터를 이루고 있는 공간이나 그 가까운 공간에 접근하는 특성

ex) 배열 arr이라는 공간에 i가 연속적으로 할당되어 접근하는 방식 (arr 배열 원소에 대한 공간 지역성)

let arr = [];

for(let i=0; i<5; i++){
	arr.push(i)
}
// arr = [0,1,2,3,4]

캐시히트

캐시에 원하는 데이터를 찾은 것

  • 위치도 가깝고 CPU 내부버스를 기반으로 작동하여 빠르다
  • 👉 캐시히트를 하게 되면 해당 데이터를 제어장치를 거쳐 가져오게 된다.

캐시미스

해당 데이터가 캐시에 없다면 주메모리로 가서 데이터를 찾아오는 것

  • 메모리를 가져올때 시스템 버스를 기반으로 작동하기 때문에 느리다

캐시 매핑

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

  • CPU의 레지스터 와 주 메모리(RAM) 간에 데이터를 주고 받을 때를 기반
  • 주 메모리에 비해 굉장히 작은 레즈시터가 캐시 계층으로써 역할 -> 매핑이 중요

직접 매핑

  • 메모리가 1~100이 있고 캐시가 1~10이 있다면 1:1~10, 2:1~20... 와 같이 매핑
  • 처리가 빠르지만 충돌 발생이 잦다

연관 매핑

  • 순서를 일치하지 않고 관련 있는 캐시와 메모리를 매핑
  • 충돌이 적지만 모든 블록을 탐색하여 속도가 느리다

집한 연관 매핑

  • 직접 매핑과 연관 매핑을 합쳐 놓은 것

2-3. 메모리 할당

메모리에 프로그램을 할당할 때는 시작 메모리 위치, 메모리의 할당 크기를 기반으로 할당합니다.
 
연속 할당과 불연속 할당으로 나뉩니다.
 

연속할당

 
메모리에 '연속적으로' 공간을 할당하는 것을 말합니다.
 
고정 분할 방식과 가변 분할 방식으로 나뉩니다.
 

고정 분할 방식

 
메모리를 미리 나누어 관리하는 방식 입니다.
 
한계
 
내부 단편화 발생
 

가변 분할 방식

 
매 시점 프로그램의 크기에 맞게 동적으로 메모리를 나눠 사용하는 방식 입니다.
 
종류
 
최초적합: 위에서부터 바로 보이는 공간에 바로 할당
 
최적적합: 가장 크기에 맞는 공간부터 채우고 나머지를 할당
 
최악적합: 가장 크기가 큰 공간에 부터 채우고 나머지 할당
 
한계
 
내부 단편화 발생
 
외부 단편화 발생
 
WHY?
내부단편화 & 외부단편화
내부 단편화
 
메모리를 나눈 크기보다 프로그램이 작아서 들어가지 못하는 공간이 많이 발생하는 현상
 
즉, 들어갈 수 있는 공간보다 프로그램이 작아서 공간이 남아버리는 것
ex) 나눈 크기는 10씩. 10이라는 메모리공간에 8크기의 프로그램이 할당 -> 2라는 메모리 공간이 남는다.
외부 단편화
 
메모리를 나눈 크기보다 프로그램이 커서 들어가지 못하는 공간이 많이 발생하는 현상
 
즉, 들어갈 공간보다 들어갈 것이 더 커서 들어가지 못하고 남아버리는 것
 

불연속 할당

운영체제에서는 여러개의 작업을 효율적으로 수행해야하기 때문에 불연속 할당방법을 사용합니다.

❓ 불연속 할당 방식의 단점

  • 메모리 공간 할당과 해제 시의 오버헤드가 발생할 수 있습니다. (불필요 할당)
  • 메모리 공간이 분산되어 있기 때문에, 프로세스가 불연속 공간에 할당될 경우 프로세스의 페이지 교체와 같은 작업이 더 복잡해질 수 있습니다. (교체 알고리즘 최적화 필요)
  • 운영체제에서 불연속 할당을 사용하는 3가지 방법
    1. 링크드 리스트(Linked List) : 불연속 공간에 프로세스를 할당할 때, 할당된 공간의 주소를 연결리스트에 저장하는 방식입니다. 이 방식은 메모리 할당과 해제가 빠르지만, 공간 낭비가 발생할 수 있습니다.
    2. 비트맵(Bitmap) : 메모리 공간의 각 블록을 0 또는 1로 표시하여 사용 가능한 블록과 사용 중인 블록을 구분하는 방식입니다. 이 방식은 링크드 리스트보다 효율적인 공간 관리를 제공하지만, 메모리 크기가 큰 경우 비트맵이 매우 커지는 단점이 있습니다.
    3. 페이지 테이블(Page Table) : 가상 메모리 시스템에서 사용되는 방식으로, 물리적인 주소 공간을 페이지라는 작은 블록으로 나누어 사용합니다. 각 프로세스는 자신의 페이지 테이블을 가지며, 페이지 테이블은 물리적인 주소와 가상 주소를 매핑하는 역할을 합니다. 이 방식은 링크드 리스트와 비트맵보다 효율적이며, 가상 메모리를 구현하는 데 필요한 기술입니다.
  • 메모리를 동일한 크기의 페이지로 나누고 프로그램마다 페이지 테이블을 두어 이를 통해 메모리에 프로그램을 할당
    1. 페이징, 2) 세그멘테이션, 3)페이지드 세그멘테이션 기법 존재

1) 페이징

 
동일한 크기의 페이지 단위 나누어 메모리의 서로 다른 위치에 프로세스를 할당
 
빈데이터(홀)의 크기가 균일하지 않은 문제가 없어지지만 주소 변환이 복잡

2) 세그멘테이션

 
의미 단위인 세그먼트로 나누는 방식
 
코드와 데이터 등을 기반으로 나눌 수 있으며, 함수 단위로 나눌 수도 있음을 의미합니다.
 
공유와 보안 측면에서 좋습니다.
 
빈데이터(홀) 크기가 균일하지 않는 문제 발생

3) 페이지드 세그멘테이션

 
공유나 보안은 세그먼트로 나누고
 
물리적 메모리는 페이지로 나누는 방식