목차
1. 컴퓨터 내부는 어떻게 이루어져 있을까?
2. CPU 뜯어보기
3. 데이터의 흐름
✔ 컴퓨터 아키텍쳐는 기본적으로 폰 노이만 구조를 따름
CPU - Memory(RAM) - Disk
→ 강의의 흐름이 끊기면 안 됨
→ 강의자료를 빨리 전달하면 됨
→ ❓ 어떻게 강의자료를 더 효율적으로 전달할 수 있을까?
point1
사실 교수님은 CPU라기보다는 ALU에 가깝습니다...
point2
왜 버스타고 갈까요? 지하철 타고 가면 안될까요?
point3
조교 = Register? 레지스터는 뭘까요?
✔ Central Processing Unit : 중앙 처리 장치
✔ 자동차의 엔진
✔ CPU는 무엇을 하는 부분일까?
✔ 그렇다면, CPU가 일을 처리한다는 게 무슨 의미일까?
ALU, 제어장치, 레지스터
ALU(Arithmetic Logic Unit) : 산술연산장치
point1
교수님 → 저장된 데이터(강의 자료)를 이용하여 산술 연산(수업)을 수행하는 부분
제어장치 : 시그널을 통해서 데이터의 흐름을 통제하는 부분. CPU 자신 및 주변 기기를 통제.
레지스터(register) : CPU 내부의 메모리
point3
레지스터 != 캐시
메모리라고 설명은 했지만 실제로는 저장소의 개념은 아니다. 처리를 위해 잠깐 데이터를 들고 있는 개념.
조교 → 강의자료를 잠깐 들고 있으면서 필요할 때 교수님한테 전달했다가 수업이 끝나면 다시 담당 대학원생에게 반납한다.
✔ CPU의 성능이란?
→ 얼마나 빠르게 메모리로부터 명령이나 데이터를 가져오느냐
→ CPU의 속도가 성능과 직결된다.
✔ 그럼 CPU의 성능은 무엇에 의해 결정될까? → 클럭 / 코어 / 캐시 메모리
CPU가 하나의 명령어를 처리한 후 다음 명령어를 처리하도록 하는 장치
CPU에 일정한 주기로 공급되는 전기 신호
CPU는 이 신호를 받고 데이터를 주거나 받고 처리하게 되는데, 이 신호 한 번에 의해서 CPU에서 한 개의 명령이 처리된다.
메모리의 데이터는 캐시에 저장되어 있다가 다 쓰여지면 지워지고 다음 데이터가 들어온다. CPU는 이 캐시의 데이터를 가져다가 쓰는 것이다.
이때 캐시의 데이터는 전기 신호에 의해 다음 데이터가 들어올 수 있게끔 하는데, 이 처리를 하는 게 클럭이다. 클럭이 치면 다음 명령어로 넘어가는 것이다.
이때 캐시에서 CPU로 데이터가 이동하는 빠르기를 CPU의 속도라고 한다.
CPU의 속도
초당 몇 번 연산을 수행할 수 있는지
단위 : 헤르츠(Herz)
ex) 2.4기가헤르츠 → 2.4 x 1024 x 1024 x1024 만큼의 연산을 수행한다.
비트(bit) → 한 번 연산을 할 때 계산에 들어갈 수 있는 0과 1의 개수
ex) 2.4GHerz의 64bit 컴퓨터의 CPU가 한 번 연산을 할 때 → 64 x 2.4 x1024 x 1024 x 1024를 1초에 연산한다. (병목현상을 고려하지 않았을 때 이론상으로)
ref
병목현상(bottleneck)이란 데이터의 전송이 어떤 이유로 막혀있는 상태를 의미한다.
ref
킬로 → 1024 / 메가 → 1024x킬로 / 기가 → 1024x메가 / 테라 → 1024x기가
여기에 멀티 코어가 붙으면 코어 수만큼 더 곱해짐
데이터의 전달은 다음의 순서를 거친다.
디스크 → 메모리 → 캐시 → (레지스터 →) CPU
✔ 디스크
디스크에 저장된 실행파일(.exe)은 코드 부분과 리소스 부분으로 구성되어 있다.
이 실행파일을 실행하려고 할 때, 코드 부분의 일부와 리소스 부분의 일부는 메모리에 올라가게 된다.
이 때 이렇게 메모리에 올라간 일을 프로세스라고 부르고, 이 프로세스를 처리하는 CPU를 프로세서라고 부른다.
디스크 관리 : 디스크의 데이터에 얼마나 빠른 속도로 접근할지 관리하는 작업
✔ 메모리
반도체 : 전류가 흘렀다 안흘렀다 하는 성질을 이용해 임시로 내용을 기억하게 한다.
메모리의 데이터 → 전류가 흐르지 않으면 데이터가 사라진다. → 휘발성을 가진다.
메모리에 저장된 데이터의 주소 → 행렬 구조를 가진다.
프로세서가 메모리에 있는 데이터를 읽거나 메모리에 데이터를 기록할 때는 먼저 메모리의 행에 신호를 보내고 나서 열에 신호를 보내어 주소를 확인하는데, 이때 행 부분을 읽는 신호를 RAS(Row Address Strobe)이라고 하고, 열 부분을 읽는 신호를 CAS(Column Address Strobe)라고 한다.
CPU의 데이터 요청 시 메모리의 동작 과정은 다음과 같다.
한 줄 요약 : CPU로부터 요청 → RAS로 행 주소 탐색 → CAS로 열 주소 탐색 → 데이터를 읽어서 CPU에 전달
✔ 캐시 메모리
메인 메모리와 CPU간의 데이터 속도 향상을 위한 중간 전달자 역할을 하는 메모리
CPU와 메모리 간 데이터 교환을 위해 메모리로부터 미리 데이터를 받아서 잠시 가지고 있다가 CPU에게 제공한다.
CPU와 메인 메모리 사이에 존재한다고 말할 수 있는데, CPU 안에 존재할 수도 있고 역할이나 성능에 따라서는 CPU 밖에 존재할 수도 있다.
<캐시 메모리의 성능>
CPU에서 필요로 하는 데이터가 캐시 메모리에 있느냐 없느냐가 캐시 메모리의 성능을 좌우한다.
CPU가 메모리에 데이터를 요청하면 먼저 원하는 데이터가 캐시에 있는지부터 확인한다. 이 때 CPU가 필요한 데이터가 캐시에 들어와 있으면 캐시 히트(Cache Hit)라 하고 접근하고자 하는 데이터가 없을 경우를 캐시 미스(Cache Miss)라 한다.
이때 원하는 데이터가 캐시에 있을 확률을 히트율(Hit Ratio)라 한다.
따라서 캐시의 성능→ 히트율을 높이는 게 관건
이 히트를 위해서 언제 어떤 방식으로 어떤 데이터를 캐시에 적재해둘 것인지가 히트율을 좌우하는데, 여기에는 Write Through와 Write Back 방식이 있다.
<메모리 관리>
빈 공간이 없을 때 어떤 데이터를 빼버리고 어떤 데이터를 가져올 것인지 또는 어떤 프로세스에 어떤 데이터를 적재시킬지 결정해야 하는 저장공간에 대한 관리가 핵심이 된다.
이 때의 메모리 관리는 교체 알고리즘에 의해 수행된다.
대표적인 교체 알고리즘으로는 FIFO(First In First Out), LRU (Least Recently Used), LFU (Least Frequently Used) 등이 있다. 지역성을 고려해보면 최근에 가장 많이 사용하지 않았던 데이터를 빼버리는 LRU가 효율적이라고 할 수 있다.
ref
메모리의 지역성이란? 특정 부분을 집중적으로 참고하는 것으로, 시간적 지역성과 공간적 지역성이 있을 수 있다. 시간적 지역성이란 최근에 참조한 메모리에 또 접근할 가능성이 높은 특성이고, 공간적 지역성이란 한 번 참조한 메모리 인근을 접근할 가능성이 높은 특성을 말한다.
프로세스는 엄청나게 많이 존재하는데, CPU는 한 번에 하나의 일밖에 처리하지 못하므로 여러 개의 프로세스들 중에 먼저 처리할 것과 나중에 처리할 것을 나눠야 한다.
이를 시분할이라고 하고, 시분할을 어떻게 할 것인지 결정하는 작업을 스케쥴링이라고 한다.
대표적인 스케쥴링 방식은 선점형 방식(preemptive)으로, 우선순위가 높은 프로세스부터 처리하는 방식이다. 그 외에 비선점형 방식으로는 FCFS(First Come First Served)라고 해서 먼저 들어온 프로세스부터 처리하는 스케쥴링 방식이 있다.
ref
선점형과 비선점형 참고
point2
버스(Bus) : 서버 내부의 컴포넌트들을 서로 연결시키는 회선 → 데이터는 물리적으로는 버스를 통해 전송된다.
further
이러한 CPU의 스케쥴링과 메모리 관리, 디스크 관리를 하는 것이 운영체제이다.
한 줄 요약
Q. "컴퓨터 안에서 데이터는 어떻게 처리될까?" 라기 보다는 "CPU는 어떻게 데이터를 가져와서 처리할까?"
A. 디스크에 저장된 데이터 → CPU가 요청하면 디스크에서 바로 꺼내가는 게 아님. 디스크의 데이터를 메모리에 옮겨놓고 메모리 데이터를 캐시 메모리로 옮겨놓음. 데이터는 가장 먼저 캐시 메모리를 살펴보고 데이터가 있으면 꺼내 씀.
더 알아보고 싶은 내용
참고한 자료
In the game geometry dash lite which transforms geometric shapes into an amazing journey, you can challenge your friends and demonstrate that you are the supreme geometry master.