728x90

[컴퓨터구조] CPU와 파이프라인


여러분이 만든 C소스를 컴파일을 하고 나면 하나의 바이너리가 만들어지겠죠. 이 바이너리를 실행하는 CPU는 8비트씩 바이너리를 읽어와서 실행을 한답니다.


그럼 32비트라면 어떻게 될까요? 아무래도 비트수가 많을 수록 '처리하는 속도'가 빨라지겠죠.  


마이크로 프로세서 과목에서 반드시 이해하셔야 될 것은 LED ON/OFF 랍니다.


C프로그램으로 LED ON/OFF 프로그램을 만들 수 있다면 임베디드 시스템에서 하드웨어를 제어할 수 있다는 의미죠.


왜냐하면 LED ON/OFF를 하려면 먼저 '회로도'를 보셔야 해요. CPU 어느 핀에 LED를 연결했는지 확인을 한 후 해당 핀에 어떻게 신호를 넣으면 될지 프로그램을 해야 하는데, 그러려면 CPU데이터 시트를 보면서 프로그램을 해야 하거든요.


그래서 마이크로 프로세서에는 CPU가 어떻게 동작되는지를 이해하는 과목이랍니다. 이 과목이 이해가 되면 현업에서 가장 많이 사용되는 ARM프로세서를 이해하는데 많은 도움이 된답니다.


여기서 제일 중요한 것이 바로 CPU 또는 코어동작방식에 대해 깊이 살펴보는데 주로 "파이프라인"에 대해 자세히 다루죠.


하지만 수업시간에 배운 것처럼 모든 CPU나 코어가 똑같진 않아요. 다만 전체 흐름은 같다고 보시면 되요. 가령 ARM코어 같은 경우에는 코어 시리즈에 따라 다른데 ARM7은 패치(Petch), 디코드(Decode), 익스큐트(Execute) 3단계가 있는 반면, ARM9은 패치(Petch), 디코드(Decode), 익스큐트(Execute), 메모리(Memory), 라이트(Write) 5단계가 있어요.


ARM11은 8단계가 있지요. 밉스(MIPS)의 경우에는 패치(Petch), 디코드(Decode), 익스큐트(Execute) 4단계가 있어요. 이처럼 코어 또는 CPU에 따라 파이프 라인 단계가 다르지만 실제 동작하는 개념은 같다고 보시면 되죠.


프로그래밍의 근본적인 이해는 결국 OS와 CPU에 대한 이해입니다. OS와 CPU에 대해 가장 쉽게 이해할 수 있는 방법은 C (가능 하면 어셈블리) + OS API  프로그래밍.


자바를 알면 C#을 쉽게 배울 수 있고, 파이선을 알면 루비를 쉽게 배울 수 있을 테고, Haskel 같은 언어를 알면 Scala를 좀 더 쉽게 배울 수 있기는 합니다.


그리고 언어를 사용할 줄 아는 것과 제대로 쓰는 건 상당히 차이가 있습니다. 어떤 블로그에서 읽고 인상깊었던 표현인데, 개발 언어도 자연 언어와 같은 '액센트'가 존재한다는 이야기가 있습니다.


즉, 어떤 언어를 장기간 사용하다 보면 해당 언어 고유의 접근 방식이 몸에 베어  다른 언어를 사용할 때도, 마치 외국인의 한국어 발음 처럼 이질적인 습관으로 드러나는 경우가 있다는 뜻입니다



파이프라이닝.HTTP/1.0에서도 있음
파이프라이닝을 추가하여, 첫번째 요청에 대한 응답이 완전히 전송되기 이전에 두번째 요청 전송을 가능케 하여, 커뮤니케이션 레이턴시를 낮췄습니다.

이처럼 구조/운영체제/설계에서 잡아놓은 곳에서 비슷한것들이 반복되구나

+ Recent posts