본문 바로가기

공부/Micro Processor

Micro Processor_Preview & 1

728x90

원래 매일 전공 내용을 정리하려고 했지만, 졸업작품 때문에 계획이 좀 틀어졌다.

진로가 하드웨어 설계쪽이기 때문에 관련된 내용들은 이번 방학을 통해 쭉 정리를 하고 내가 했던 실습이나 텀프로젝트들을 정리를 해보려고 했고 오늘 했던 프로젝트들을 쭉 둘러보는데 cpu를 정리 안할수가 없을거같아서 새로 마프 카테고리를 만들었다. 컴퓨터구조 후수과목이긴한데 컴구내용부터 쭉 다시 하기에는 시간적으로 안될거같아서 필요하다면 중간중간 내용 정리를 이 카테고리안에 할 생각이다.

 

필자는 마이크로 프로세서라는 과목을 학교에서 배울때 cpu의 구조와 내부동작 원리를 배웠다. 따라서 이와 관련된 내용들을 앞으로 정리할 예정이다.

 

본론으로 들어와서,

마이크로 프로세서란 무엇일까?

CPU의 기능만을 chip에다 집적시킨것을 micro processor라고 한다.

CPU는 central processor unit으로 control unit, regiser, ALU로 이루어져있다. 

마프는 memory, i/o등을 chip에 거의 포함시키기지 않으므로 외부 component와 연결이 필수적이다.

비슷한 용어로 micro controller가 있는데 cpu core + RAM/ROM/ IO,+ Bus등 cpu기능에 주변 기능까지 단일 chip에 통합한 칩을 칭한다. 헷갈리지 않도록 하자.

 

MP가 작동을하는 방식으로는,

control unit이 명령을 내리면 register에서 data를 꺼내서 ALU에서 연산을 수행하고 다시 register에 저장을 하게 된다.

명령어를 읽고 해석하는 것이 필수적인데, 따라서 ISA라는것을 알아야한다.

 

Instruction set architecture인 isa는 한국어로는  명령어 집합구조라고 하는데, assembly, CICS, RISC등이 있다.

예를 들어, A = A+1이라는 것을 수행할때 assembly로 단계별로 확인하게되면, 접근할 메모리 주소를 줘야하고, 그 주소에 접근해서 값을 가져와야 하며, 그다음 +1이라는 연산을 수행하고 이 값을 저장하는 일련의 과정을 거친다.

중간고사전에 학교에서 수업을 들을때는 그런가보다~ 하고 넘어갔는데 중간고사 이후에 실습을 할 때 디버깅을 통해 바라보았을때 생각보다 하나의 연산을 처리할때 쓸모없는 과정을 많이 거치는 것을 직접 눈으로 확인했고, 최적화를 통해 속도를 향상시키는 경험을 해본적이 있는데 기회가 된다면 나중에 관련 내용 포스팅을 해보도록 하겠다.

ISA

우리가 사용하는 언어는 high level language로 compiler를 거쳐 assembly로 바뀌고 assembler를 거쳐 machine language로 변환이 된다. ISA는 명령어가 뭔지 정의해놓은 사전과 같은 역할을 하므로 assembly를 이해하려면 반드시 isa 내용을 알고 있어야한다. (메모리에 어떻게 접근하는지, 어떤 레지스터가 어떤 역할을 하는지 등등을 정리해놓은 것이기 때문)

 

assembly 언어를 처음부터 정리를 여기서 다 하는건 내 생각에 크게 의미가 없을 거 같아서 궁금하면 따로 찾아보기 바란다.

위와같은 C언어를 assembly로 확인하면 아래와 같은데 아래를 해석할 정도만 되면 된다.

 

micro architecture는 cpu가 특정 isa를 실제로 어떻게 구현하는지 정의하는 내부 설계로 어떤 pipeline, cache를 사용하늕 등등을 정의한다. 따라서 동일한 ISA를 사용해도 실제로 어떻게 설계하는지에 따라 성능이 다르게된다.

microarchitecture의 대표적인 기능으로

cache, pipeline, out-of-order execution, superscalar 정도를 예로 들 수 있다.

cache나 pipeline은 다른 포스팅에서 여러번 다룬 내용이므로 패스하고,

뒤에 2개정도의 내용을 정리해보자.

 

out of order execution은 기계어 명령어 순서와 관계없이 명령어들을 병렬로 최대한 빨리 실행해서 성능을 높이는 기술이다. 어떤 명령어가 실행중이라면 뒤에 오는 명령어도 전부 대기해야하는 in-order execution과 달리 노는 시간을 최대한 줄이기 때문에 성능 향상이 된다.

 

superscalar는 동일한 clk cycle내에서 여러개의 명령어를 동시에 병렬로 실행할 수 있는 설계 기법으로 한번에 여러 명령어를 수행하는만큼 빠르지만, 그만큼 필요한 실행 유닛들이 더 많이 깔아놔야한다.

 

 

 

 

728x90