간단한 하드웨어 지식

Duboo·2022년 1월 11일
0
post-thumbnail
post-custom-banner

프로그래밍 언어를 공부한다면 알아야하는 공통적인 내용을 최대한 간단하게 정리할 생각입니다.


프로그램(Program)

가장 기본적으로 프로그램이라는 의미부터 살펴볼 필요가 있습니다.

위의 뜻을 풀어보면 프로그램은 사전에 내가 수행할 절차를 기록한 것 혹은 수행 절차라고 생각할 수 있습니다.

프로그램이라는 단어만 놓고 보자면 컴퓨터와는 연관이 없다는 의미입니다. 앞에 어떤 단어가 들어가느냐에 따라 그 의미가 달라집니다.
교육 프로그램, 영화제 프로그램 등등...
따라서 컴퓨터 프로그램이란 컴퓨터를 이용해서 절차를 만들어 놓은 것이라고 생각할 수 있습니다.


컴퓨터(Computer)

컴퓨터는 계산을 목적으로 하는 기계장치입니다. 1943년~1946년에 포탄의 탄도학 계산을 위한 군사목적으로 개발된 최초의 컴퓨터는 전자식 숫자 적분 및 계산기(Electronic Numerical Integrator And Computer) 애니악이라고 알고 있습니다. 하지만 1943년 ~ 1945년 사이에 영국의 암호 해독가들이 로렌츠 암호를 해독하기 위한 콜러서스(Colossus)가 세계 최초 컴퓨터라고 할 수 있습니다. 전자식 컴퓨터로만 따지자면 아타나소프 - 베리 컴퓨터(Atanasoff–Berry Computer) 일명 ABC라고하는 컴퓨터가 세계 최초라고 하는 이야기도 있지만 크게 중요한건 아니기 때문에..

모든 범주에서 보자면 세계 최초 컴퓨터(아날로그)는 기원전 1세기 초(추정)에 그리스에서 천문의 위치를 계산하기 위해 만들어진 안티키티라 기계입니다.


물론 최초의 컴퓨터가 무엇인지, 어떤 원리로 작동되는지 정확하게 알고 있을 필요는 없습니다. 중요한 것은 보통 군사 목적으로 사용되었던 컴퓨터를 IBM이라는 회사가 컴퓨터의 사용범위를 비즈니스 영역으로 확장 시켰다는 것입니다.

회사명부터가 IBM(International Business Machine)의 약자입니다.

또 이러한 컴퓨터를 마이크로소프트(Microsoft)와 애플(Apple)은 개인이 사용할 수 있는 Personal Computer 즉, 우리가 현대에 사용하고 있는 PC로 발전 시켰고(IBM과 애플 그리고 마이크로소프트의 일화는 찾아보면 정말 재밌습니다. 꼭 한번 찾아보시길 바랍니다..) 이에 그치지 않고 작은 휴대용 컴퓨터라고 부르는 스마트폰(Smartphone)의 모바일(Mobile) 환경까지 확대시켰고 이제는 모든 기계장치에 컴퓨터가 내장되어 있는 형태가 되었습니다. 이를 우리는 임베디드(Embedded)라고 부릅니다.


노트북과 스마트폰 뿐만 아니라 태블릿, 게임기 등등 모두 일종의 컴퓨터라고 할 수 있는데, 이러한 기기의 형태는 모두 다르지만 하드웨어소프트웨어로 구분합니다.

  • 하드웨어(Hradware) : 기계적인 요소로 쉽게 만질 수 있는 물체라고 생각하면 됩니다.
  • 소프트웨어(Software) : 하드웨어에게 명령, 제어등을 위한 프로그래밍적인 것을 의미합니다.


    하드웨어와 소프트웨어는 서로 반대 의미라고 생각할 수 있지만 정확하게는 둘 다 컴퓨터의 시스템을 구성하는 구성요소로 상호보완적인 기능을 합니다. 하드웨어가 없는 소프트웨어는 존재할 수 없으며 소프트웨어가 없는 하드웨어는 고철에 불과합니다.


하드웨어(Hardware)

조립식 컴퓨터를 구매해서 직접 조립해보신 분들은 대부분 아실거라고 생각합니다.

컴퓨터의 구조

  • 입력 장치

    사용자가 원하는 데이터(문자 등) 혹은 명령을 컴퓨터 내부 메모리에 전달하는 장치입니다. 대표적으로 위의 기본 입력 장치인 마우스와 키보드가 있으며 그 외에 터치패드, 마이크 등등 많은 입력 장치가 있습니다.

  • 출력 장치

    입력 장치의 입력을 통해 얻어낸 결과를 사람에게 전달할 수 있는 빛(모니터), 소리(스피커) 혹은 인쇄(프린터)등의 형태로 출력해주는 장치입니다.




CPU

  • CPU(Central Processing Unit)

사람으로 따지면 두뇌에 해당하는 부분입니다. 두뇌라는 말에 걸맞게 컴퓨터의 구성 단위 중 기억, 해석, 연산, 제어라는 중요한 4대 기능을 종합하는 중앙 처리 장치입니다.

CPU를 개발자의 입장에서 간략하게 보자면 0과 1(2진법)으로 밖에 대화할 수 없는 컴퓨터와 사람이 대화하기는 매우 어렵습니다. 그런 컴퓨터와 대화하기 위해 나온 것이 프로그래밍 언어라는 건 모두 알고 있습니다.

물론 절대적인것은 없습니다. 아래의 기계어를 보고 한번에 이해할 수 있고 기계어를 이용해서 프로그래밍을 하는 대단한(변태) 사람도 있을 겁니다.

0101 0001 0000 0000 0000 0111
0101 0001 0000 0000 0000 1000
0000 0000
0100 1000
0110 1001

개발자가 프로그래밍 언어(고급 언어 : 사람이 이해할 수 있는 언어)를 작성한다면 컴파일을 통해 기계어(2진법 : 컴퓨터가 이해할 수 있는 언어)로 변환됩니다. 그리고 프로그램을 메모리에 복사하고 CPU가 프로그램의 내용을 해석하고 실행하기 때문에 CPU의 성능은 개발자에게도 중요합니다.

조금만 더 깊게 가자면 CPU의 성능은 코어, 클럭, 스레드 등으로 결정이 되는데 여기서 코어의 역할은 이진수 연산이며 코어 1개는 관리자 1명이라고 생각하면 됩니다.

컴퓨터 혹은 노트북의 광고에 흔히들 나오는 코어 자랑이 이 부분입니다.

코어의 개수명칭
1싱글 코어
2듀얼 코어
3트리플 코어
4쿼드 코어
6, 8...등헥사, 옥타..등 몰라도 됩니다...

이러한 코어(관리자)가 처리하는 작업을 분할하여 빠르게 처리하는 작업 단위를 쓰레드라고 하는데 이러한 쓰레드는 직원이라고 생각할 수 있습니다.

A와 B의 작업이 있다고 가정합니다.


1코어 1쓰레드는 코어1(관리자)가 1쓰레드(직원)에게 A 업무를 지시하고 끝나면 B업무를 지시합니다. 1코어 2쓰레드는 코어1(관리자) 2쓰레드(직원)에게 넌 A하고 넌 B해 라고 생각할 수 있습니다.

당연히 후자가 속도면에서 유리합니다. 물론 활용하지 못하면 싱클코어와 차이가 없습니다.

마지막으로 클럭은 CPU가 1초에 처리할 수 있는 작업의 속도라고 생각하면 됩니다. 단위는 GHz(기가 헤르츠)를 사용하며 3.6GHz는 1초당 36억 번의 명령어를 처리할 수 있다는 의미입니다. 앞서 말한 직원의 일처리 속도라고 생각해도 됩니다.




  • RAM(Random Access Memory)

PC의 핵심 부품으로 CPU가 두뇌라면 램은 두뇌의 기억을 담당한다고 생각하면 됩니다.
기억장치/메모리 라고도 말하는 이러한 램의 역할을 살펴보면 컴퓨터로 어떠한 작업을 한다고 가정하고 이때 사용자가 원하는 작업을 처리하기 위해 CPU가 연산을 하게 되고 이러한 연산과정에서 처리되는 모든 데이터들은 일시적으로 램에 저장이 됩니다.

사용자가 실행하는 모든 프로그램에 대한 데이터는 보조기억장치(HDD/SSD)에 저장되어 있는데 왜 에 올려져 실행될까 생각해보면 이유는 매우 단순합니다.
CPU가 요구하는 속도를 보조기억장치가 감당할 수 없을 정도로 느리기 때문에 병목현상(렉걸린다)이 발생되는데 이러한 병목현상을 완화시키기 위해서 속도가 느린 보조기억장치를 배제시키고 속도가 빠른 주기억장치(물론 CPU보다는 느리다.) 와 CPU가 데이터를 교환하는 방식으로 작업을 하게됩니다.


추가로 램 용량이 크면 클수록 좋다.라는 말이 나오는 이유도 생각해보면 단순합니다.
느린 보조기억장치 대신 보다 빠른 주기억장치인 램에 많은 프로그램들을 가져와서 작업을 하는게 더 빠르기 때문입니다. 흔히 넓은 책상에 많은 책과 필기구를 올려놓을 수 있다고 말합니다.

램은 전원이 차단되자마자 즉시 데이터가 지워지는 휘발성 기억 장치이지만 대부분이 그렇다는거지 모두 그런것은 아닙니다.



  • 캐시 메모리(CPU Cache Memory)

CPU에는 여러 개의 캐시가 있고 각각의 역할이 다르지만 일단 캐시 메모리가 대략 이런거다 라고만 알아두면 좋을 것 같습니다.

앞서 CPU와 HDD/SSD의 병목현상을 완화시키기 위해서 RAM을 사용한다고 했는데 아이러니 하게도 CPU와 RAM 사이에서도 이러한 병목현상은 발생합니다. CPU와 RAM이 데이터를 주고 받으며 빠르게 작업을 처리한다고는 하지만 CPU에 비교하자면 RAM도 느린건 어쩔 수 없기 때문인데요. 그래서 CPU 내부의 절반 이상은 캐시 메모리로 채워져있는데 CPU가 처리할 데이터를 미리 RAM에서 가져와 CPU 내부에 있는 캐시 메모리에 임시로 저장해 더 빠른 속도로 사용하는 것입니다.

캐시 메모리에 저장되는 데이터들은 규칙이 존재하는데 생각해보면 매우 단순하게 생각할 수 있습니다.
1. 최근에 접근된 데이터여야 합니다. (Temporal Locality - 시간적 지역성)
당연히 최근 접근되었고 자주 사용되는 데이터가 우선 순위입니다.
2. 최근에 접근된 데이터의 주변 데이터여야 합니다. (Spatial Locality - 공간적 지역성)



CPU가 캐시 메모리에 접근해서 원하는 데이터를 성공적으로 가져올 경우를 Cache hit이라고 하며 반대의 경우에는 Cache miss라고 합니다. 당연히 Cache hit가 높으면 속도면에서 유리하며 반대의 경우에는 다시한번 RAM에 접근해 데이터를 가져와야하기 때문에 전자보다 느려집니다.



  • 보조기억장치(HDD/SDD)

앞서 이야기한 램은 휘발성으로 데이터를 임시로만 저장하기 때문에 영구적으로 저장을 하기 위해서는 다른 저장장치가 있어야 하는데 그 역할을 하는 하드웨어가 비휘발성 저장 장치인 HDD(Hard disk drive)와 SSD(Solid State Drive)입니다.

이 둘은 동작하는 방식에 차이가 있는데 먼저 HDD는 플래터(Platter)라고 하는 자기 디스크를 물리적으로 회전시키며 데이터를 읽거나 저장을 하는 반면 SSD는 플래시 메모리를 이용하여 정보를 읽고 저장합니다. 아무래도 물리적인 속도로는 전기적인 속도를 따라올 수 없기 때문에 속도면에서는 SSD가 더 높은 성능을 보여줍니다.


추가로 설명을 더하자면 당연히 물리적인 힘으로 작동하는 HDD는 소음이 발생하고 전력을 더 많이 소모해야 하는 단점이 있지만 용량에 비해 가격이 매우 저렴하다는 장점이 있고 그에 반해 SSD는 소음도 없고 전력도 더 적게 사용한다는 장점에 반해 용량에 비해 HDD보다 가격이 조금 더 비싸다는 단점이 있습니다.

보통의 경우 SSD에는 개발툴 및 OS를 설치를 하고 HDD는 백업용으로 많이 사용합니다.
저는 HDD 사용하지 않고 SSD 용량을 키워서 사용합니다.😎



  • 메인보드(Main Board)

해당 부품은 앞서 설명한 모든 하드웨어 부품들 외에도 수많은 부속 부품들을 하나로 연결해주는 회로 역할과 입출력을 가능하게 해주는 포트가 설치되어 있습니다. 그렇기 때문에 모든 것을 품고 있는 엄마와도 같다고 마더보드(Mother board)라고 부르기도 하며 인체로 따지면 혈관이라고 비유하기도 합니다.

다른 하드웨어에 비해 중요도가 떨어진다고 생각하지만 호환 그리고 전압의 흐름과 제어 기능을 하고 있기 때문에 너무 저렴한 메인보드는 지양하는것이 좋습니다.



  • GPU(Graphical Processing Unit)

CPU와 마찬가지로 GPU역시 데이터를 읽어들여 연산처리하는 역할을 수행합니다. 하지만 중요한 것은 CPU와 GPU의 작동 방식의 차이인데 CPU는 명령어가 입력된 순서대로 데이터를 처리하는 직렬처리 방식(순차적)에 특화되어 있는 반면 GPU는 병렬처리 방식이라는 점입니다.

쉽게 설명하자면 CPU는 매우 똑똑하기 때문에 중요하고 어려운일을 계산하는 일에 적합하고 GPU는 중요도는 떨어지지만 해야할 일이 매우 많고 동시에 처리해야 하는일에 적합하다는 말입니다. 따라서 어렵진 않지만 동시에 처리해야 하는 일이 많은 그래픽 처리를 전문적으로 다룰뿐 아니라 머신러닝이나 인공지능, 빅데이터 개발에 매우 적합하다고 할 수 있습니다.

사실 일반적인 개발이고 그래픽 작업이 많지 않은 작업은 내장 그래픽 만으로 문제 없이 작업할 수 있습니다. 고사양 게임(그래픽) 혹은 앞서 얘기한 계산(동시 계산)이 매우 많이 필요한 작업에만 외장 그래픽카드를 사용합니다.

profile
둡둡
post-custom-banner

0개의 댓글