[공부 주제]
오늘 공부해 볼 내용은 컴퓨터의 전반적인 부품이다.
위 내용들에 대해 모두 다룰 것이지만 내가 사용하는 캐시처리에 대해서 조금 더 집중적으로 알아 보려고 한다.
Redis를 사용하는 방법이 왜 Inmemory인지 그리고 왜 그게 RDB보다 더 빠른지 이번 기회에 확실하게 개념을 다잡고자 한다.
[주제1] CPU
명령어를 이해하고 처리하는 동작을 수행하는 CPU는 아래 기능을 수행한다.
명칭 | 약어/fullName | 역할 |
산술논리연산장치 | ALU / Arithmetic and Logic Unit | 사칙 연산, 논리 연산과 같은 우리 뇌에서 처리하는 역할이다. 실질적인 연산은 여기서 수행된다. |
제어장치 | CU / Control Unit | 명령어를 해석해서 제어 신호(전기 신호)로 내보낸다. CPU가 메모리를 향해 제어 신호를 보내면 메모리를 작동시킬 수 있고, I/O로 신호를 보내면 입출력장치를 작동시킬 수 있다. |
레지스터 | Register | 가장 중요한 요소이다. CPU 내부의 작은 임시장치로, 중간값을 저장한다. CPU내 여러개가 존재하며 각각 다른 이름과 역할을 갖고 있다. CPU가 처리하는 명령어는 반드시 레지스터에 저장되기 때문에 이 값을 잘 관찰해도 프로그램이 어떻게 실행되는지 확인 가능하다. |
[주제2] 메모리와 캐시 메모리
CPU는 데이터와 명령어를 수행했다면 이번엔 저장하는 역할이다.
프로그램이 실행되려면 그에 필요한 명령과 데이터가 이곳에 저장되어 있는 것이다.
RAM의 주요 개념은 주소, 주요 특징은 휘발성이다.
우리가 책을 찾을때 책 마다 고유 번호를 지정하고 그 장소에 가서 찾듯이, RAM도 주소를 갖고 있고 그곳에 명령어와 데이터가 저장되어있다.
이러한 메모리는 전원이 공급되지 않으면 정보가 지워지는 특성을 갖고있다. 이 특성이 휘발성이다.
캐시메모리는 CPU가 조금이라도 더 빨리 메모리에 접근하기 위해 사용하는 장치이다. CPU와 메모리사이에 위치한 SRAM기반 저장장치인 것이다. 캐시메모리는 빈번하게 사용되는 데이터를 매번 메모리에 왔다갔다 하는 시간이 오래 걸리므로 메모리에서 CPU가 사용할 일부 데이터를 미리 캐시 메모리로 가져와 저장해두는 것이다. 접근이 메모리보다 빠르기때문에 효율적으로 사용할 수 있다.
캐시 메모리는 CPU내부에 있기도 하며, 밖에 위치하기도 하는 다양한 종류가 있다.
캐시 메모리에는 L1 ~ L3 메모리가 있으며, CPU 내부에는 L1, L2가 있고 외부에 L3가 위치한다.
외부 캐시메모리L3가 가장 용량이 크고 , L1이 속도가 제일 빠르다.
이러한 캐시 메모리 쓰기에는 정책과 일관성이 필요하다.
예를 들어보자, 메모리 100번에 값이 300이 있다. 이 값을 불러와야 한다면 당연히 캐시를 통해 가져오는 것이 빠르다.
하지만 값이 300에서 400으로 변경된다면 어떻게 해야 할까?
바로 100번 메모리의 값을 400으로 변경하는 방법이 머리에 떠오르겠지만 좋은 방법이 아니다. 일관성이 깨지기 때문이다. 캐시 메모리와 메모리 두 곳을 모두 변경해줘야 일관성이 정립된다. 그래서 읽기 전략/ 쓰기 전략이 필요하다.
이러한 방식은 실제 Redis를 사용할때에도 고려해야 하는 전략이다.
이 부분은 별도로 글을 정리하려고 한다.
[주제3] 보조 기억장치
위에서 사용하는 메모리의 휘발성은 전원이 꺼지면 저장된 정보가 모두 날아가기 때문에 전원이 꺼져도 사라지지 않는 비휘발성 저장장치가 필요했다. 그것이 보조 기억장치이다.
DVD, 하드 디스크, USB, SD카드등이 대표적인 예이다.
여기서 중요한 점은 보조기억장치에 있는 정보는 바로 프로그램을 위해 가져와 실행할 수 없다는 점이다.
보저기억장치에 있는 메모리를 메모리(RAM)으로 가져오는 과정이 필요하다.
[주제4] 입출력장치
우리가 흔히 아는 입력을 받는 장치들이다.
입력장치로는 마우스, 키보드 등이 있으며 출력장치로는 스피커, 모니터, 프린터등이 있다.
[주제5] 그렇다면 왜 캐시처리를 하면 더 빠를까?
아래 그림은 위쪽이 CPU와 가장 가까운 순서이다. 레지스터 -> 캐시 메모리 -> 메모리 -> 보조메모리 순이다.
우리가 Redis를 사용하면 메모리에 접근을 해야 하지만 DB를 사용하면 캐시 메모리가 아닌 저장장치까지 접근을 해야 하기 때문에 그 속도가 차이가 날 수 밖에 없다.
[주제 6] 쓰레드의 병렬성과 동시성
동시성과 병렬성은 의미가 비슷하면서도 내용이 달랐다. 항상 그 개념이 헷갈려서 여기서 정리해보려고 한다.
동시성은 동시에 작업을 처리하는 것처럼 보이는 성질이다. 빠르게 CPU가 작업을 번갈아 가며 처리하는 속도가 매우 빠르깅, 사용자입장에서는 동시에 여러 작업이 처리되는것 처럼 보인다. 스레드가 2개인 CPU가 4개의 명령어를 처리할때 2개의 작업만 처리할 수 있다고 생각하지만 4개의 명령어르 빠르게 번갈아가며 처리한다.
병렬성은 동시성과 다르게 정말로 동시에 여러 작업을 동시에 처리하는 것이다. 스레드가 4개인 CPU가 4개의 명령어를 동시에 처리하는 것이다.
위 내용은 아래 책을 기반으로 정리한 내용입니다.
'면접 준비' 카테고리의 다른 글
면접 준비시 반드시 피해야 할 것들! (2) | 2024.11.12 |
---|---|
백엔드 자바 CS 면접 빈출 질문 대비하기 - 데이터 베이스 개념 정리 1 (0) | 2024.08.22 |
백엔드 자바 CS 면접 빈출 질문 대비하기 - 스프링 (1) | 2024.08.14 |
백엔드 자바 CS 면접 빈출 질문 대비하기 - 자바 초급+중급 (0) | 2024.08.13 |
백엔드 자바 CS 면접 빈출 질문 대비하기 - Security (0) | 2024.08.01 |