프로그래머는 컴퓨터의 특성을 잘 아는 것과 모르는 것은 차이가 크다고 한다.
그래서 오늘은 컴퓨터 특성.. 그 중 CPU에 대해 배우게 되었다.
이 중 가장 중요한 것이 CPU이다.
일단 CPU 는 여러개의 Register 로 이루어져 있다고 한다.
그리고 우리가 흔히 말하는 코어가 이 Register 세트를 말한다고 한다.
결국 Register 세트(코어)는 빅맥 세트고, CPU는 맥도날드라고 생각하면 될 듯 하다.
요즘은 듀얼코어, 쿼드코어, 심지어는 헥사/옥타코어도 있는 것으로 보인다.
그렇다면 왜? 코어가 싱글 에서 멀티 로 바뀔 수 밖에 없었을까?
그건 바로 발열 때문이라고 한다.
물론 싱글코어에서 극한으로 성능을 올릴 수 있지만 무어의 법칙으로 인해 멀티코어로 진화할 수 밖에 없었다고 한다.
무어의 법칙??
-> 적어도 18개월마다 프로세스의 성능(트랜지스터 숫자)이 두 배씩 증가한다는 법칙
(기술 발전속도를 바탕으로 예상한 듯 하다)
아무튼 코어의 성능 향상에는 본질적인 한계가 있었다!
-> 이 때문에 "그럼.. 코어를 여러개 사용해버리자!" 라는 천재적인 인간들의 발상으로 인해 오늘날의 CPU는 싱글코어에서 멀티코어로 진화해버렸다.
그리고 이 멀티코어 CPU는 여러개의 State를 가질 수 있다! (State = Register들)
ALU (Arithmetic Logic Uni / 산술논리연산) : 연산처리 원툴
CU (Control Unit / 제어창치) : 이게 진짜 뇌
Register (저장장치) : 범옹 레지스터, 특수 레지스터 2가지가 있음
범용 레지스터
특수 레지스터
Cache
CPU작업을 처리하기 위해서 메인 메모리에 접근하는데 공간적으로 거리가 멀기 때문에 시간적 소요가 크다.
그래서 CPU- Cache - Memory와 같은 구조로 자주 쓰거나 최근에 썼던 데이터를 캐시 메모리에 저장해 놓는다.
그러면 CPU가 데이터에 접근할 때 걸리는 시간 소요를 줄일 수 있다.
그러나 캐시의 일관성 문제에 대해 해결해야 한다.
CPU는 binary 언어만 사용 할 수 있다. (이진수 / 01011001 과 같은..)
그렇다면 프로그래머는 CPU와 어떻게 통신할 수 있을까?
일단 프로그래머가 직접 어셈블리어로 짤 수 있다.
어셈블리어?
CPU가 읽을 수 있는 Binary 언어로 이루어진 명령어 조합
하지만 어셈블리어로 코드를 짜기에는 너무나도 어렵다.
그래서! C, C++, Java 등의 컴파일러라는 녀석들을 통해 기계어로 번역을 시킨다!!
ISA ( Instruction Set Architecture / 명령어 집합 구조 )
- CISC ( Complex Instruction Set Computer / 복잡 명령어 집합 컴퓨터 )
- RISC ( Reduced Instruction Set Computer / 축소 명령어 집합 컴퓨터 )
요즘 쓰는 ISA, 간단해서 명령어 개수도 적고 조금 더 효율적으로 명령할 수 있게 한다. 요즘 대세라고 한다.
오늘은 이렇게 CS에 대해 알아보았는데.. 솔직하게 말하자면 잘 모르겠다...
점점 알아야 할 것 들이 많아져서 힘들어 ..