캐시(cache)란 무엇인가?
메모리의 구조는 어떻게 구성되어 있는가? (데이터, 스택 등의 단어를 사용하시오)

캐시는 프로세서가 단기간에 필요로 할 가능성이 높은 정보를 임시로 저장할 목적으로 사용한다. 시스템이 정보를 한 곳에서 다른 곳으로 이동시키는 일에 많은 시간을 보내기 때문에 여러개의 복사과정들을 가능한 한 빠르게 동작하도록 하기 위해서 만들어졌다.

일반적으로 캐시는 보다 크고 느린 디바이스에 저장된 데이터 객체를 위한 준비영역으로 사용하는 작고 빠른 저장장치다. 메모리 계층구조?

일반적으로 계층구조에서 낮은 곳에 위치한 디바이스들은 더 긴 접근시간을 가지며, 따라서 이러한 긴 접근시간을 줄이기 위해서 더 큰 블록을 사용하는 추세다. 

캐시의 장점은 다음 두가지이다.

시간지역성 활용하기. 동일한 데이터 객체는 시간 지역성 때문에 여러 번 재사용될 가능성이 있다. 일단 어떤 데이터 객체에 첫 미스가 발생했을 때 캐시로 복사되고 난 후에는 이 객체로 연속적인 다수의 적중을 기대할 수 있다. 캐시가 다음 아래단계에 있는 저장장치보다 더 빠르기 때문에 이와같은 차후의 적중이 처음의 미스보다 더 빨리 서비스될 수 있다.

공간 지역성 활용하기 블록들은 대개 여러개의 데이터 객체들을 포함한다. 공간지역성으로 인해 미스가 발생한 후에 하나의 블록을 복사하는 비용은 차후에 이 블록 내의 다른 객체들을 참조하기 때문에 줄어들게 된다.

메모리의 구조는 다음과 같다.

프로그램 코드와 데이터. 코드는 모든 프로세스들이 같은 고정 주소에서 시작하며, 다음에 C 전역변수에 대응되는 데이터 위치들이 따라온다. 코드와 데이터 영역은 실행가능 목적파일로부터 직접 초기화된다.

힙. 코드와 데이터 영역 다음으로는 런타임 힙이 따라온다. 크기가 고정되어있는 코드, 데이터 영역과 달리 힙은 프로세스가 실행되면서 C 표준함수인 malloc이나 free를 호출하면서 런타임에 동적으로 그 크기가 늘었다 줄었다 한다. 

공유 라이브러리. 주소공간의 중간 부근에 C 표준 라이브러리나 수학 라이브러리와 같은 공유 라이브러리의 코드와 데이터를 저장하는 영역이 있다. 공유 라이브러리 개념은 강력하지만 다소 어려운 개념이다. 

스택. 사용자 가상메모리 공간의 맨 위에 컴파일러가 함수 호출을 구현하기 위해 사용하는 사용자 스택이 위치한다. 힙과 마찬가지로 사용자 스택은 프로그램이 실행되는 동안에 동적으로 늘어났다 줄어들었다 한다. 특히 함수를 호출할 때마다 스택이 커지며, 함수에서 리턴될 때는 줄어든다.

커널 가상메모리. 주소공간의 맨 윗부분은 커널을 위해 예약되어 있다. 응용프로그램들은 이 영역의 내용을 읽거나 쓰는 것이 금지되어 있으며, 마찬가지로 커널 코드 내에 정의된 함수를 직접 호출하는 것도 금지되어 있다. 대신, 이런 작업을 수행하기 위해서는 커널을 호출해야한다.

 

CS:APP 3rd Edition, Randal E. Bryant, Pearson

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

CS 스터디 03회차, ~ 6월 30일(목)  (0) 2022.06.30
CS스터디 02회차, ~06월 09일(목)  (0) 2022.06.09
2/3(수) 과제  (0) 2021.02.03
1/6일 스터디 과제  (0) 2021.01.06
이번 스터디 과제,,  (0) 2020.12.31

+ Recent posts