마이크로프로세서 - 소개

디아·2022년 7월 29일
1

Microprocessor

목록 보기
1/1
post-thumbnail

현재 저는 부산소프트웨어마이스터고등학교 임베디드소프트웨어학과를 전공하면서, 여러가지 많은 전공 과목을 수강하고 있습니다. 그 과목들 중에서는 임베디드에 걸맞는 매우 기초인 마이크로프로세서라는 정규과목이 존재하는데, 워낙 그 과목을 좋아하기도 하고 내용이 전부 재밌어서 여렇게 끄적인 내용들이 있는데, 그 내용들을 좀 정리해볼까 합니다.

이 포스트의 내용들을 이해하려면 컴퓨터 구조, 운영체제, 전기전자의 매우매우 기초 상식이 필요하며, 어느정도 상세히 적긴 할거지만 이들을 모르는 경우 이해하기가 다소 난해해지실 수 있습니다.

마이크로프로세서란?

마이크로프로세서(Microprocessor, Microprocessing unit) 은 컴퓨터의 중앙처리장치의 핵심 기능을 통합한 집적 회로입니다. 이 칩은 여타 다른 칩들보다 크기가 작으며, 프로그램이 가능하고, 클록 구동 방식에 레지스터 기반이며, 바이너리 테이터를 입력으로 받아들이고 메모리에 저장된 지침에 따라 처리한 후 출력을 제공합니다. 여기서 각 용어들을 간략히 정리해드리자면,

  • 클록(Clock): 순차회로에 가해지는 전기적 진동 의 속도를 나타내는 단위이며, 이는 Hz로 표기합니다. 이 클럭의 경우는 칩들의 연산 및 전송 속도를 측정해주는 대표적인 정량 수치이죠.
    (더 자세한 내용은 여기를 참고해주세요!)
  • 프로그램이 가능한(programmable): 소프트웨어 공부하다 오신분들은 당연한거 아닌가..? 라고 생각하시겠지만 일반 컴퓨터 환경에서 올리는 프로그램과는 달리 하드웨어 보드에서는 프로그램이 올라갈 수 있는 보드도 있고 아닌 보드도 있습니다. 대표적으로 아두이노, 라즈베리파이 등이 있습니다.
  • 레지스터(Register): 레지스터는 CPU의 구성중 하나이며, 저장 장치 중에서 속도가 매우 빠르지만 사용 공간마다 증가하는 가격의 양이 상당합니다. Kb, Mb단위의 다른 저장장치와는 달리 레지스터는 비트 단위로 계산합니다.
    (더 자세한 내용은 여기를 참고해주세요!)
  • 메모리에 저장된 지침: 마이크로프로세서는 하드웨어 개발자가 짜준 레퍼런스에 맞춰서 개발을 진행합니다. 이 때 하드웨어 개발자는 레지스터에 비트 규격을 잡아놓고 레퍼런스에 상세하게 기록해놓는데, 소프트웨어 개발자는 그 레퍼런스에 따라 레지스터에 어떻게 저장해야 할지, 그리고 이를 어떻게 제어해야 하는질 알 수 있습니다. 다만 Flash Memory와 SRAM은 웬만하면 자동으로 저장됩니다. 이 지침은 칩마다 다 다릅니다!

특징

다음은 마이크로프로세서의 특징들입니다.(비교는 여러분이 알기 편하신 일반 PC로 비교하겠습니다.)

  • 저비용: 마이크로프로세서는 집적 회로 기술로 인해 저렴한 가격으로 구매할 수 있습니다.

  • 고속: 매우 빠른 속도를 가지고 있습니다.(다만 여기서 고속은 PC의 속도를 말하는 것이 아닌 임베디드 시스템의 개념으로 설명합니다)

  • 작은 사이즈

  • 매우 높은 활용도: 마이크로프로세서로 많은 일을 할 수 있으며, 칩이 동일할 경우 코드만 바꿔서 사용할 수 있습니다.(이 점이 의아해하신 분들도 있을텐데, 후에 설명해드리겠습니다.)

  • 저전력 소비: 일반적으로 산화 금속 반도체 기술을 사용하여, 전력 소비량이 매우 낮습니다.(어느정도냐면 18650 충전지 꽉 채운걸로 5일 간다고 합니다)

  • 낮은 발열량: 다른 CPU들에 비해 발열량이 비교적 낮습니다.

  • 신뢰성: 매우 높은 신뢰성을 자랑합니다. 즉 고장률이 극히 낮습니다.

    마이크로프로세서는 RISC체제이며, 여러분이 사용하시는 체제는 CISC입니다. 참고로 RISC 체제를 따르는 칩 종류는 ARM, RISC-V, Apple M1 칩 등이 있습니다.

    아까 의아해하실 만한 부분을 설명드리자면, 마이크로프로세서는 칩 마다 지침이 전부 다릅니다! 일부 공통된 사항은 있지만, GPIO 위치 등의 세부적인 기능들 및 배열은 전부 다릅니다. 그렇기에 칩마다 딸려 나오는 프로그래밍 기본 매뉴얼이 다르며, datasheet도 다른 것이죠(칩의 구성도 및 기본 레퍼런스입니다. 후에 나올 포스트에 자세히 설명드리겠습니다.) 즉 하나의 칩 위에서 개발하기 위해선 그 칩의 datasheet를 어느정도 읽을 줄 알아야 하며, 칩 마다 들어가는 코드가 다 다를 수 밖에 없습니다. 이부분이 응용 소프트웨어 개발과 매우 큰 차이점이라고 볼 수 있습니다. 그래서 나중에 주 업무를 맡게되면 이 레퍼런스를 읽는게 매우 큰 과정 중 하나이자 힘든 부분중 하나가 될 수 있습니다.

    다만 너무 걱정은 안하셔도 되는게, 기본적인 기능을 숙지하시고, 이 레퍼런스를 읽을줄 아는 요령만 생기면 여러분들도 금방금방 레퍼런스를 읽고 프로그래밍을 시작하실 수 있습니다. 그러니 가지마세요...ㅠ

핵심전력

마이크로프로세스는 임베디드 시스템의 가히 핵심 전력이라고 부를 수 있습니다. 이 칩은 위에서 말하였듯 초소형이며, 저전력으로 운영될 수 있습니다. 이런 프로세서는 가히 임베디드 시스템에서 매우 안성맞춤이죠. 마이크로프로세서는 임베디드 시스템에서 가히 root라고 부를 수 있는 존재입니다. 이 칩으로 만든 보드는 마이크로컨트롤러가 되어 매우 다양한 곳에 쓰이고 있고, 칩 위에다 소프트웨어 혹은 OS를 넣어 매우 다양한 방면으로 사용되고 있습니다. 그리고 이런 마이크로컨트롤러들 중 여러분이 잘 아시는 아두이노랑 라즈베리파이도 포함되어 있습니다. 생각보다 멀리있진 않았죠.

임베디드 시스템에 입문하려면, 리눅스도 어느정도 중요하지만 저는 마이크로프로세서를 잘 운용할 수 있는 능력을 함양하는게 기본 1순위라고 생각합니다. 임베디드 프로그래밍을 이해해야하고, 시스템을 파악하게 된다면, 다른 임베디드 시스템 관련 프로그래밍을 해도 잘 이끌어나갈 수 있겠죠! 그래서 저는 임베디드 시작하시는 분들께 이 분야를 추천합니다.

다양한 활용 분야

보통 체감을 잘 못하시는 분들이 많은데, 마이크로프로세서는 사실 엄청나게 많은 분야에서 사용되고 있습니다.

  • 스마트폰
    현재 가장 많이 사용하는 전자기기를 꼽으라고 하면 단연 스마트폰 일 것입니다. 스마트폰은 작고, 다양한 것을 할 수 있으며, 전력을 많이 먹지 않은 일종의 초소형 컴퓨터지요... 어라 이건 임베디드 시스템과 좀 많이 닮지 않았나요? 사실 이 스마트폰도 임베디드의 일종입니다! 즉 이 마이크로프로세서가 스마트폰에 내장되어 있고, 그 칩 위에 안드로이드 및 iOS 등의 리눅스 기반 OS를 얹어 여러분들이 사용하고 있는 것이죠. 따란~

  • 스마트 전자제품
    스마트 냉장고, 전기밥솥, 그리고 세탁기... 요즘 나오는 가정제품들은 마이크로프로세서가 내장된 상태로 들어간다는거 아시나요? 요즘 가전제품은 통신, 다양한 기능들을 내포하면서 마이크로프로세서의 역할이 매우 중요해지고 있습니다. 사용자의 입력을 받아서 다양한 기능을 수행하고, 사용자의 기기와 연결하여 무선으로 작동 및 안내를 해주는 등 다양한 스마트 기능들을 수행해줍니다. 그리고 최근엔 이 스마트 가전제품끼리 통신하여 가정일을 돕는 경우도 있는데, 사실 그게 IoT이죠.

  • 항공, 선박 제어시스템
    대형 선박은 그 규모가 매우 크기 때문에, 여러 장비들이 설치가 되는 동시에 이 장비들을 효과적으로 모니터링 해주고, 제어해줘야 합니다. 물론 이 장치들을 전체적으로 지시하는 역할은 PC에서 해주지만, 실제로 센서값을 입력받아 전달해주고, 제어받은데로 실행해 주는 것은 전부 마이크로프로세서가 이행해줍니다. 그래서 선박같은 경우 많은 마이크로프로세서가 내장되어 있습니다. 이 점은 항공에서도 동일하게 작용됩니다.

  • 자율주행 자동차
    자율주행자동차도 마이크로프로세서가 내장되어 있습니다! 자율주행 같은 경우 다양한 센서값을 입력 받아야 하고, 또 인공지능이 실시간으로 분석 후 파악하여 운전을 제어해야 합니다. 이 경우 AI 내장, 센서값 인지, 자동차 제어들의 역할을 모두 수십개의 마이크로프로세서가 분할되어 역할을 담당하고 있습니다!

그 외의 의료장비, 공장 자동화, 다양한 전자제품 등등 실생활 및 산업군에서 임베디드가 빠진 산업은 극히 드물정도로 많이 베포되어 있습니다. 즉 활용 규모가 엄청 납니다..ㄷㄷ

현황

마이크로프로세서 시장은 반도체 시장에 속함으로써, 매우 활발한 시장 형태를 띄고 있습니다. 그리고 지금도 그 시장이 점점 커지고 있죠. 특히 4차산업혁명으로 인해 점점 스마트한 기기로 변환이 되어가면서, 그 구매 시장은 매우 커지고 있습니다. 위에서 소개드렸듯 마이크로프로세서는 임베디드 산업군에서 매우 큰 비중을 자랑하기에, 반도체 시장에서 큰 비중을 차지하고 있습니다.

다만 국내에선 마이크로프로세서에 관한 프로그래밍을 담당하는 인적시장은 점점 줄고 있습니다. 분야 자체가 진입장벽이 높기도 하고, 기본 학력 석사 정도는 되어야 이 분야에 대해 완벽히 다룰줄 안다고 할 수 있기에 국내 마이크로프로세서 개발자 비중은 점점 낮아지고 있습니다. 스마트 관련 임베디드 산업군은 점점 발전하고 있는 와중에, 이런 감소세는 큰 타격을 받을 수 밖에 없겠죠.

더군다나 관련 커뮤니티는 작은데다가 자료들도 지극히 한정적이니... 사람들이 쉽게 접근하려면 더 많은 노력이 필요한 분야이긴 합니다. 하지만 많은 사람들이 사용함에도 대중적이지 않은 IT 기술은, 언젠가 꼭 팡 뜨고 말 것입니다. 아직 미개척된 분야도 많이 있으며, 이 칩에 대한 성장세는 절대로 줄어들지 않기 때문이죠.

이 분야의 개발자가 되려면?

기본 로드맵입니다.

출처: https://github.com/vazeri/Embedded-Engineering-RoadMap-2018

물론 이 과정을 시작하시기전에 아래 기초 능력들을 어느정도 함양해야합니다.

  • 높은 수준의 C, C++ 개발 능력
    C는 마이크로프로세서의 핵심 기술이라고 할 수 있습니다. 현재 Rust가 떠오르는 언어이긴 하지만, 제 생각에는 C만큼 마이크로프로세서 언어의 근본이자 가장 핵심이 되는 언어는 세상에 없다고 생각합니다. 그렇기에 C언어 개발 능력이 높아야 하며, Linux C API, Network socket C API 등 다양한 C 개발 경험이 필요합니다.
  • 기본적인 전기전자 지식
    임베디드 소프트웨어를 개발하는 사람들은 하드웨어 개발자가 전달해주는 레퍼런스를 참고하여 프로그래밍을 해야하기에, 회로드를 읽을 줄 알고, 기본적인 전기전자 회로및 지식을 함양하고 있어야 개발이 가능합니다. 그래서 이 관련 공부도 중요한 요소중의 하나입니다.
  • CS 지식
    마이크로프로세서는 초소형 칩으로써, 컴퓨터의 기능을 대체합니다. 그렇기에 컴퓨터 관련 지식을 잘 알아야 하며, 컴퓨터 구조, 운영체제, 네트워크 같은 지식들의 기본적인 지식은 필수로 알아야 하며, 알면 알수록 활용할 수 있는 방향이 매우 커집니다!
  • 영어
    대부분 모든 datasheet와 레퍼런스는 전부 영어로 써져 있습니다. 그렇기에 이를 읽을 수 있는 능력을 함양해야합니다.
  • 아두이노, 라즈베리파이, Nucleo 보드 개발 경험
    보드위에 소프트웨어를 올린다는 것은 제한된 환경에서 소프트웨어를 실는다는 것과 같습니다. 그렇기에 이런 보드들 위에서 소프트웨어를 실어 프로젝트를 만들어가면서 다양한 개발 경험을 쌓는 것이 중요합니다. 그리고 Nucleo 보드 관련 개발은 앞으로 나올 포스트에 포함될 것입니다.
  • 매우매우 높은 오픈마인드와 열정
    이 산업군도 여타 다른 IT 직종과 같이 기술이 변화되는 속도가 매우 빠릅니다. 그렇기에 '아 나는 그냥 하라는 대로 해야지' 혹은 '이거 몇년동안 쓰면 될텐데, 또 바꾸라고? 아 싫어 안해' 라는 마인드를 가지고 계시면 큰일납니다... 그렇기에 항상 다양한 것들을 공부하고 받아들이실 준비를 하고 계셔야 합니다. 임베디드는 진짜 다양한 것을 할 수 있거든요...
  • 끈기 + 강한 멘탈
    진짜 중요합니다. 다른 것들도 마찬가지지만 이 분야는 특히 더 중요합니다. 위에 나오는 내용들만 해도 장난이 아닙니다... 이걸 어떻게 다 공부해요. 그리고 아두이노나 라즈베리파이 관련 공부를 해보신 분들은 알겁니다. 진짜 빡세다는걸. 내가 원하는 소프트웨어 아키텍처를 짜도 하드웨어가 난리 부르스를 떨 수도 있고, 정말 다 완성해서 따로 만든 모형에 설치되었는데 안되는 경우도 있고... 그럴때마다 진짜진짜진짜 빡칩니다 ㅋㅋ 소프트웨어 + 하드웨어니 진짜 힘들어요... 그럴때마다 항상 버티고 나아갈 수 있어야 합니다. 그래야 성장하고, 이 일을 진정으로 즐기며 하실 수 있어요.

뭐.. 사실 저도 그렇게 많이 안해봤어요

저도 사실 다른 분들의 이야기를 많이 듣고 인터넷 등에 많이 찾아보고 제 얼마 안되는 경험으로 이 포스트를 작성하였습니다. 그래서 조금은 틀린 부분도 있을거고, 실제 산업과는 조금 다른 내용도 있을거에요. 하지만 포스트를 찾아보면서 얼마 없는 자료에 저희 학교에서도 이 마이크로프로세서를 버리는 친구들이 많아 다소 안타까웠습니다. 그래서 배운거 정리할겸 이 분야에 대해서 제대로 소개를 해 드리고자 이 글을 작성하게 되었습니다. 긴글 읽어주셔서 감사합니다. 다음 포스트는 개발 환경 구축에 대해 들고올게요.

틀린 부분이나 피드백해주실 분들이 계신다면 언제든 댓글에 남겨주세요!

참고한 사이트: https://itrainbowm.tistory.com/54

profile
생각이 깊은 주니어 개발자

1개의 댓글

comment-user-thumbnail
2023년 11월 30일

자료가 별로 없어 아쉬웠는데 좋은 내용 쉽게 설명해주셔서 재미있게 잘 읽었습니다. 감사합니다!

답글 달기