본문 바로가기
공부, 취준/마이크로프로세서

(전자공학과 전공소개) 마이크로프로세서 (이전 컴퓨터구조)

by 린레몬 2020. 8. 22.

(전자공학과 전공소개) 포스트는 해당 과목을 수강하기 전, 이 과목이 대강 어떤 내용에 대해 배우는지를 알고자 하는 사람들을 위해 작성하고 있습니다.

때문에 해당 전공에 대한 세부적인 지식과 정보 등을 다루는 것과는 거리가 있으므로, 이 점 유의하여 읽어주시면 감사하겠습니다.세부전공의 커리큘럼, 선수과목 등의 내용은 현재 제가 다니고있는 학교를 기준으로 작성할 예정입니다.

 

안녕하세요 레몬입니다.

이번에 소개할 전자공학과 전공과목은 마이크로프로세서다. 휴학하기 전까지는 컴퓨터구조 라는 이름의 과목이었는데, 복학하니 마이크로프로세서로 바뀌어 있었다.

아무래도 컴퓨터의 CPU 부분에 대해 자세히 다루고 있기 때문에 이런 변경이 있었던 것으로 생각된다.

애초에 컴퓨터에 관심이 많았던 만큼 익숙한 용어도 많고, 조립 컴퓨터 살때나 찾아봐서 이름만 들어본 여러 지식들을 자세히 배울 수 있는 과목이었다.

 

어떤 내용을 배우는가

우선 나는 최근 주목받고있는 RISC-V를 중점으로 다룬 교재를 통해 공부를 했다.

이후 작성할 글도 모두 RISC-V 기준의 정보가 될 것이다.

 

1. Computer Abstraction & Technology

마이크로프로세서 과목을 통해 자세히 배우게 될 CPU에 대한 여러 정보, 역사, 개념들을 간략히 훑어보는 챕터다.

CPU의 발전에 대한 역사부터 공정 과정이나 흔히 클럭으로 불리는 CPU의 성능을 계산하는 법 등을 배운다.

또한 CPU의 발전에 있어 중요시되는 8개의 위대한 아이디어도 소개한다.

마이크로프로세서의 발전에 있어 가장 중요한 개념이니, 간략하게라도 적어보자면

1. 무어의 법칙 : 18~24개월마다 집적회로의 성능은 두 배로 발전한다.
2. 추상화 : 하위 level의 구체적인 설계를 상위 level에서 이해할 필요 없도록 추상화
3. Common Case Fast : 자주 발생하는 상황을 빠르게
4. Paralleism : 병렬적인 작업 수행
5. Pipelining : 작업 수행의 stage를 나누어 병렬적으로 연산
6. Prediction : 연산 결과를 예측하여 수행
7. Hierarchy : 메모리 계층 구조를 이용한 설계 -> 빠르고 큰 용량의 메모리처럼 사용
8. Dependability : 신뢰 가능하도록 설계

위 8가지 아이디어가 있다. 정말 간략하게 적은 것이니 자세한 내용은 직접 공부해보는 것이 좋다..

 

2. Instruction : Language of the Computer

프로그래머가 이해할 수 있는 고수준 언어에서 한 단계 낮은 수준인 어셈블리어에 대해 배운다.

i = a + b; 라고 쓰여진 C 코드가

add x5, x19, x20 의 어셈블리어로 번역되는 과정을 공부한다고 생각하면 된다.

프로그래밍 과목에서 배웠던 포인터, 이진법 체계 등의 이해가 잘 되어있다면 공부하기 수월하다.

C 코드에서 이루어지는 숫자, 변수간의 연산, 반복문, 조건문 등이 어셈블리어로 어떻게 번역되는지 배우게 된다.

프로그램 코드가 기계어로 번역되어 cpu로 전달되는 과정을 수행하는 컴파일러, 어셈블러, 링커, 로더의 역할을 잘 구분하자.

특히 여기서 배우게되는 RISC-V에서의 각종 Instruction의 타입을 잘 구분하고 구조를 이해해두면 이후 공부에 도움이 많이 될 것이다. (32비트 이진수를 보고 어떤 명령어인지 해석해야함)

 

3. Arithmetic for Computers

덧셈, 뺄셈, 곱셈, 나눗셈의 사칙연산이 컴퓨터 하드웨어 수준에서 어떻게 처리되는지 배운다.

실수를 이진수로 표현하는 IEEE 754 표현법을 공부하고, 이렇게 이진수로 표현된 실수의 연산 과정을 공부하게 된다.

십진법으로 표현된 실수 <-> 이진법으로 표현된 실수 간의 변환이 자유롭게 이뤄질 수 있도록 연습하자.

 

4. The Processor

드디어 프로세서에서 위에서 배운 하나 하나의 명령어(Instruction)들이 어떻게 처리되는지 배우게 된다.

정말 중요한 부분이고, 들을 때는 쉽고 당연한 소리같은데 공부하거나 과제를 하려면 정말 난감하다..

위 그림에서 보이는 ALU, MUX, Control 등 프로세서를 이루는 소자들의 역할을 배우고, 굉장히 중요한 개념인 Pipelining에 대해 배우게 된다.

명령을 처리할 때 위 그림에 나와있는 IF-ID-EX-MEM-WB 다섯 단계를 분리하여 최대한 효율적으로 연산할 수 있도록 하는 것이다. (여러 사람이 연탄나르기를 하는 모습을 상상하면 된다.)

이 Pipelining이 야기하는 각종 Hazard와 이를 극복하는 법도 배우고, 역시나 중요한 부분이다.

프로세서의 연산 처리 과정을 다루다보니, 내용도 굉장히 많고 시험에서도 비중이 큰 챕터이다. 챕터2에서 Instruction에 대한 개념이 잘 잡혀있다면 공부하는 데 도움이 된다.

 

5. Exploiting Memory Hierarchy

이번에도 정말 중요한 Memory Hierarchy의 개념과 이를 활용하는 설계에 대해 배운다.

흔히 듣던 CPU의 캐시, 메모리(램), SSD, HDD 등 익숙한 메모리들이 왜 각자 역할이 다른 것인지, 속도와 용량 차이가 왜 나는 것인지를 구체적으로 이해할 수 있을 것이다.

메모리에 관한 부분이다보니 포인터에 대한 이해가 잘 되어있으면 도움이 되고, CPU에 대해 공부하는 과목인 만큼 캐시를 가장 중점적으로 다루게 된다.

캐시에 대한 개념, 메모리 계층화를 통한 이점 및 이로인해 발생하는 문제 등을 잘 이해하는 것이 중요하다.

 

사용한 교재

Computer Organization and Design RISC-V edition

저자 : David A. Patterson, John L. Hennessy

위 교재를 사용해 학습했다. 원서 교재의 pdf 파일과 솔루션 pdf 파일은 구글링을 조금만 해보면 구할 수 있다.

강의를 맡으신 교수님이 굉장히 좋으셔서 수업도 잘 이해가 되고 내용도 재밌게 배울 수 있었는데, 과제를 풀려고 하면 수업때와 괴리감이 엄청나서 고생을 했다..

솔루션이 없었으면 정말 힘들었을 것 같다. 솔루션에 오류가 있는지 내가 많이 틀리는건지 내 생각과 다른 답들이 상당히 있으니, 웬만하면 솔루션 그대로 베끼진 말고 열심히 고민해보자.

 

선수과목

각종 프로그래밍 기초 과목을 수강하고 포인터의 개념을 잘 이해하면 큰 도움이 된다.

디지털 논리회로 : 이진법 연산의 기초 과목이라고 생각한다. 프로세서를 이루는 수많은 Gate에 대한 이해가 필요하니 꼭 들어둬야 하는 과목이라고 생각된다.

디지털시스템설계 : 디논회 -> 디시설 -> 마프 커리큘럼을 따를 생각이라면 수강하자. 듣지 않는다고 공부에 차질이 생기진 않지만, 디논회/마프 들어놓고 디시설은 빼먹는건 좀 이상하다.


처음으로 작성한 통신이론 과목에는 연계분야에 대해서도 짤막히 언급했는데, 아무래도 학부생인 내 수준에서 충고할만한 부분이 아닌 것 같아 제외했다..

사실 이 전자공학과 전공소개 글은 저번달 이맘때 쯤 6개 과목 전부다 작성을 완료했어야 하는데, 이게 막상 쓰려고 하니까 너무 과제하는 느낌이 들어서 자꾸 미루다 한달이 넘어가버렸다..

그렇게 안쓰다보니 귀찮아져서 다른 글들도 안쓰고, 결국 40일만에 포스팅을 하게 됐다. 그냥 별 부담 없이 포스팅을 진행하기 위해 과목 소개 글은 최대한 간략하게! 정말 얕은 지식만 소개하는 정도로 넘어가려 한다..

애초에 취지도 그런 식이었으니, 자세하고 정확한 정보만을 다루려 하기 보다 꼭 필요한 내용만 언급하는 쪽으로 글을 작성할 생각이다. 그러니 꼭!! 이 전공소개 글은 공부할 때가 아닌 수강신청 전에 어떤 과목인지 눈치볼때만 읽어보았으면 좋겠다..

댓글