캐시 메모리 및 메모리 계층성에 대해 설명해 주세요.
컴퓨터의 메모리는 속도별로 레지스터,캐시, 주기억장치, 보조기억장치가 있다. 이 중 캐시메모리란 CPU와 메모리 사이의 병목현상을 줄이기 위한 아주 빠른 메모리를 말한다. L1,L2,L3메모리가있다.
캐시 메모리는 어디에 위치해 있나요?
캐시 메모리는 L1은 CPU 내부 L2는 CPU 회로판에 별도의 칩으로 L3는 보통 메인보드에 존재한다.
현대에는 CPU내부에 있기도 한다.
L1, L2 캐시에 대해 설명해 주세요.
L1 캐시
- CPU 내부에 있는 캐시
- 가장 먼저 참조에 이용되는 캐시
- 가장 빠른 캐시이다
- 8~64KB정도
L2 캐시
- 용도와 역할은 L1 캐시와 비슷하나 속도는 그보다 느리다.
- CPU 회로판에 별도의 칩으로 내장되어 있다.
- 256KB~8MB정도이다.
캐시에 올라오는 데이터는 어떻게 관리되나요?
- key/value 형태로 저장된다.
- 주소가 키로 주어지면 해당 공간에 즉시 접근 가능(해시 테이블과 유사하다)
- 캐시를 저장할 때 캐시가 만료되는 시간을 명시한다.
- 데이터베이스의 원본 데이터 변경시 캐시도 변경되야 되기 때문이다.
캐시간의 동기화는 어떻게 이루어지나요?
소프트웨어적 해결
- 코드 분석을 통해 안정하게 공유변수를 사용할 수 있도록 주기 설정
- 아예 공유 변수 데이터를 캐시에 저장하지 않도록 함
- 캐시 이용률 측면에서 다소 비효율적이다.
하드웨어적 해결
- 스누피 프로토콜
- 각 CPU 캐시는 공유되는 캐시 데이터를 파악하고 있음
- 공유되는 캐시 데이터가 갱신되었을 때 이를 기반으로 갱신되지 않은 나머지 데이터 무효화
- 디렉토리 프로토콜
- 주기억장치의 중앙 제어기가 캐시 일관성 관리
- 주기억장치의 중앙제어기는 각각 CPU 캐시데이터를 가지고 모든 지역 캐시 제어기의 동작을 제어하고 보고 받아 캐시 일관성 관리
캐시 메모리의 Mapping 방식에 대해 설명해 주세요.
Direct Mapping
- 메인 메모리를 일정한 크기의 블록으로 나눠 각각의 블록을 캐시의 정해진 위치에 매핑한다.
- Conflic cash가 잦다
Full Associative Mapping
- 캐시 메모리에 빈공간에 마음대로 저장
- 복잡하고 비용이 비싸다.
- 찾을 때 데이터를 찾기 힘들다.
Set Associative Mapping
- 둘의 장점을 결합한 방식으로 미리 정해둔 특정 행에 있는 빈공간에 마음대로 저장하는 방식이다.
- Direct에 비해 검색이 느리지만 저장이 빠르다.
- Full에 비해 저장이 느리지만 검색이 빠르다.
캐시의 지역성에 대해 설명해 주세요.
시간 지역성
- 최근에 사용된 데이터는 재참조될 가능성이 높다
- 반복문
공간 지역성
- 최근에 사용한던 데이터와 인접한 데이터가 참조될 가능성이 높다.
- 배열
캐시의 지역성을 기반으로, 이차원 배열을 가로/세로로 탐색했을 때의 성능 차이에 대해 설명해 주세요.
이차원 배열을 가로로 조회했을 경우 공간 지역성의 이점을 활용할 수 있기 때문에 세로로 탐색하는 것에 비해 성능이 높다.
메모리의 연속할당 방식 세 가지를 설명해주세요. (first-fit, best-fit, worst-fit)
first-fit
- 가장 처음으로 요구하는 메모리에 맞는 공간에 할당하는 방식
- internal fragmentation이 크게 발생
best-fit
- 남은 공간 중에 가장 internel fragmentation이 적은 메모리 공간에 할당하는 방식
- 가장 적합한 공간이 어디인지 찾아야되는 시간 필요
worst-fit
- 가용 공간 중에 가장 큰 공간에 할당하는 방식
worst-fit 은 언제 사용할 수 있을까요?
- 큰 공간을 남겨놓기 떄문에 나중에 프로그램이 들어올 때 유용하다.
성능이 가장 좋은 알고리즘은 무엇일까요?
- 속도: first-fit
- 사용률: best-fit
Thrashing 이란 무엇인가요?
- 프로세스가 원활히 동작하기 위해서는 일정 수준 이상의 페이지 프레임을 할당받아야 하지만 이를 받지 못하여 성능 문제가 발생한 것을 말한다.
- 프로세스가 사용하는 페이지들이 메모리에 한꺼번에 적재되지 못하여 페이지 부재율이 많이 발생하고 CPU 이용률이 떨어지는 현상
Thrashing 발생 시, 어떻게 완화할 수 있을까요?
- 프로세스들이 가질 수 있는 페이지 수를 늘린다.
- 다중 프로그래밍 정도를 낮춘다.
워킹셋 알고리즘
- 워킹셋 : 한꺼번에 메모리에 올라가야하는 페이지들의 집합
- 프로세스의 워킹셋을 구성하는 페이지들이 올라갈 수 있는 메모리 공간이 있을 때만 동작
17. 가상 메모리란 무엇인가요?
가상 메모리란 RAM의 용량보다 큰 프로세스를 실행했을 때 디스크를 RAM의 보조기억장치 처럼 작동하게 해서 실행하는 기법으로 프로세스가 실행될 때 전체가 메모리에 올라가지 않아도 실행이 가능하다는 점을 활용한다.
가상 메모리가 가능한 이유가 무엇일까요?
프로세스가 실행될 때 전체가 메모리에 올라가지 않아도 실행이 가능하다는 점을 활용한다.
Page Fault가 발생했을 때, 어떻게 처리하는지 설명해 주세요.
- 페이지 폴트 발생시 메모리에 비어있는 프레임이 있다면 해당 페이지를 메모리에 적재한다.
- 비어있는 프레임이 없다면 희생 프레임을 골라 스왑아웃하고 메모리에 적재한다.
페이지 크기에 대한 Trade-Off를 설명해 주세요.
큰 경우
작은경우
- 페이지 테이블 크기 커짐
- 프레임 내부 단편화 감소
페이지 크기가 커지면, 페이지 폴트가 더 많이 발생한다고 할 수 있나요?
페이지 크기가 커질수록 각 페이지는 쓰이지 않는 코드를 더 많이 포함하게 되므로 페이지 폴트가 증가하게 된다. 하지만 페이지 사이즈가 어느지점에 도달하면 페이지 하나에 필요한 프로세스 내용이 다 들어가기 때문에 점차 줄어든다.
세그멘테이션과 페이징의 차이점은 무엇인가요?
Segmentation
- 가상메모리를 서로 크기가 다른 논리적 단위인 세그먼트로 분할해서 메모리에 적재한다.
- 내부 단편화 문제를 해소하며 보호와 공유기능을 수행할 수 있다.
- 크기가 고정적이지 않기 때문에 외부 단편화가 발생할 수 있다.
Paging
- 프로세스를 일정한 크기의 페이지로 분할하여 메모리에 적재한다.
- 연속적인 공간에 할당될 필요가 없기 때문에 외부단편화가 발생하지 않는다.
- 내부 단편화가 발생할 수 있다.
페이지와 프레임의 차이에 대해 설명해 주세요.
페이지란 프로세스를 일정한 크기로 분할한 것이고 프레임은 메모리를 페이지 크기와 같은 공간으로 분할한 것을 말한다.
내부 단편화와, 외부 단편화에 대해 설명해 주세요.
내부단편화
프레임의 크기보다 작은 페이지가 할당되어 내부에 사용할 수 없는 영역이 발생하는 것을 말한다.
외부 단편화
메모리의 총 공간은 크지만 연속적인 영역이 아니라 메모리 공간이 낭비되는 것을 의미한다.
페이지에서 실제 주소를 어떻게 가져올 수 있는지 설명해 주세요.
- 페이지 번호와 페이지 오프셋이 존재한다.
- 페이지 번호를 통해 페이지 테이블에서 프레임의 베이스 주소를 알아낸다.
- 프레임의 베이스 주소와 오프셋을 더해 실제 주소를 가져온다.
어떤 주소공간이 있을 때, 이 공간이 수정 가능한지 확인할 수 있는 방법이 있나요?
페이지 테이블을 생성할 떄 메모리 보호를 위해 추가적인 비트를 부여한다.
- Read-Write/Read-only 비트
- Valid-invalid 비트
32비트에서, 페이지의 크기가 1kb 이라면 페이지 테이블의 최대 크기는 몇 개일까요?
메모리 최대 크기 2^32 / 페이지 크기 2^10 = 2^20 개
참고자료