컴퓨터 구조를 알아보자! 📚

Bor·2021년 10월 8일
0

컴퓨터구조

목록 보기
1/15

왜 공부할까?

수업을 들으면서 우리가 작성하는 HLL이 컴퓨터 내부에서 어떻게 작동하는지 알아가는 중이다.👏👏 최근에 어떤 음식을 먹는가와 인간의 심리, 지능까지 과학적으로 연결시키는 책을 본 적이 있다. 매우 설득력이 있었고 매번 먹는 식사가 조금 달라보였고 신경이 쓰여서 결국 불규칙한 식습관도 개선할 수 있었다. 컴퓨터의 구조도 그렇지 않을까? low-level까지 내려가서 어떻게 작동을 하는지 안다면, 조금 더 메모리와 효율을 신경쓰면서 프로그램을 만들어나갈 수 있을 것이다! 👏👏


컴퓨터의 분야

컴퓨터에도 분야가 있다!

🖥️ 컴퓨터에도 다양한 분야가 있다. 이후에 깊숙하게 내려가기 전에 우리 주변에서 직간접적으로 사용하는 컴퓨터의 분야를 알아보자.

  • 개인용 컴퓨터 💻 : PC라고 부르는 개인적인 이용을 위해 설계된 컴퓨터. 보통 그래픽 디스플레이, 키보드, 마우스 등을 가지고 있는 것이 보통이다. 중요한 것? 외우기보다는 우리가 구매할 때 진짜 중요하게 생각하는 것을 떠올려보자! 바로 가성비! 그렇기에 낮은 가격으로 단일 사용자에게 좋은 성능을 제공하는 것을 중요시하며, 제3자 소프트웨어를 실행하기 위해 주로 사용된다.

  • 서버(server) : 매번 수강신청을 할 때마다 이슈가 되는 서버! 자연스럽게 뒤에 '다운되었어요...'😣가 나오기도 하는데. 서버는 과거 대형 컴퓨터로 불리던 것의 현대적 형태. 보통은 네트워크를 통해서만 접근한다. PC보다 대형 작업 수행에 이용된다. 과학이나 공학 분야의 복잡한 응용프로그램 한 개, 혹은 여러개로 구성. 위처럼 다운되거나 고장이 나면 PC와는 💸손해 규모가 비교할 수 없이 커지므로💸 신용도(dependability)를 매우 강조한다. 그렇기 때문에 서버는 또한 가격과 성능의 폭이 매우 넓다. 서버라 생각하면 거대하다는 느김이 들지만 저사양 서버는 PC와 크게 다를 바가 없기도 하다.

  • 슈퍼컴퓨터 : 그와 반대에 슈퍼컴퓨터가 있다. 수만 개의 프로세서와 수 테라바이트(Terabyte)의 메모리를 가지고 있다. 일기예보, 석유 탐사 등의 대형 과학 공학 계산에 주로 사용된다. 그러나 의외였던 포인트는 양적으로는 서버의 서버의 작은 부분을 차지할 뿐이며 컴퓨터 시장 전체 판매 금액 중에서도 얼마 되지 않는다.

  • 임베디드 컴퓨터⚙: 다른 장치에 포함되어 있어서 미리 정해진 한 가지 일이나 몇 가지 소프트웨어만 실행하는 컴퓨터다. (맞다! 얘도 컴퓨터였지같은 느낌) TV, ✈️비행기, 🚢화물선을 제어하는 프로세서 네트워크 등 다른 하드웨어와 한 덩어리로 묶인 단일 시스템으로 공급되기 때문에 우리 주위에 있어도 사용자는 인식하기 어렵다. 또한 사용처에 따라서 최소한의 성능만 유지하면서 가격과 소모 전력은 엄격히 제한해야 하는 요구사항을 갖는 경우가 많다.


포스트 PC 시대

(1) 개인용 휴대기기(PMD)

PC도 여전히 많이 사용되고 있지만 점차 개인 📲 휴대용 기기(PMD)로 대치되고 있기도 하다. PMD란 무선으로 인터넷에 연결되는 소형 기기로 배터리🔋로 작동하며 앱을 다운로드 해서 소프트 웨어를 설치한다. 스마트폰과 태블릿이 가장 익숙한 예이다.

(2) 클라우드 컴퓨팅


전통적인 서버도 창고 규모의 컴퓨팅(Warehouse-scale computing)🏗으로 알려진 거대 규모의 데이터 센터를 이용하는 클라우드 컴퓨팅으로 전환되고 있다. AWS, 구글 클라우드 등 아마존과 구글은 100,000개 이상의 서버를 가진 WSC를 구축하고 회사들로 하여금 서버들을 임대하도록 한다. 그러면 회사들은 자체적으로 WSC를 구축하지 않아도 PMD에 필요한 서비스를 제공할 수 있다. (프론트로 토이 프로젝트들을 만든 뒤에 배포를 할 때 사용하는 AWS, Firebase, google cloud 등)

서비스로서의 소프트웨어 (Saas)

(한국어 번역을 보니 왜 SaaS라고 적는지 단박에 이해가 되는군요!) 소프트웨어와 데이털르 서비스의 일환으로 인터넷을 통해서 제공한다. 설치과정이 필요하고 모든 실행이 설치한 기기에서 이뤄지는 이진 코드 대신에, 브라우저처럼 로컬 클라이언트 기기에서 실행되는 가벼운 프로그램을 사용한다.


컴퓨터 구조 분야의 8가지 위대한 아이디어

특히나 클론코딩을 하다보면, 강사님이 왜 저렇게 하지? 하지만 깊이 설명은 안 해주시는 부분들의 원리를 여기서 학습할 수 있었다. 아직 일대일로 매칭은 되지 않지만 성능을 개선하거나 우리가 컴포넌트를 따로 만들거나, 클래스를 사용하거나 심지어 변수를 선언하는 규칙도 아래의 8가지를 대입해서 생각해보면 무척 흥미로웠다.

(1) 무어의 법칙을 고려한 설계

컴퓨터 설계자에게 변하지 않는 상수가 있다면 바로 무어의 법칙을 따르는 빠른 변화 속도. 18-24개월마다 칩에 집적되는 소자의 수가 2배가 된다는 무어의 법칙은 인텔 창립자 중 한 명인 Gordeon Moore의 1965년 예측에서 유래한다.

(2) 설계를 단순화 하는 추상화

하드웨어와 소프트웨어의 생산성을 높이는 핵심 기술 중 하나는 여러 수준에서 설계를 명시하는 추상화(abstraction)를 사용하는 것이다. 이후에 추상화는 더 자세히 알아볼 예정이당.

(3) 병렬성을 통한 성능 개선

컴퓨터가 발명된 이래로 설계자들은 작업을 병렬적으로 수행해 성능을 높이는 설계를 해왔다.

(4) 파이프라이닝을 통한 성능 개선

컴퓨터 구조에서 가장 많이 볼 수 있는 병렬성의 특별한 형태이다. 제 고향인 제주도에서 귤을 딸 때 상하차를 하며 가장 많이 보는 형태이다. 사람들이 하나의 체인처럼 주우우욱 길게 늘어서 서서 서로 이어받으면 왔다 갔다 하는 것보다 훨씬 빨라진다.

(5) 예측을 통한 성능 개선

예측을 해서 미리 일을 수행하는 것이 평균적으로 종종 빠른 경우가 있다.

(6)메모리 계층구조🏗

우리는 모두 빠르지만 값싼 메모리를 원한다. 왜냐하면 메모리의 크기가 풀 수 있는 문제의 크기를 제한하기 때문이다. 그래서 설계자들은 이러한 문제를 메모리 계층 구조로 해결하고 있다. 최상위 계층에는 비싸지만 작고 빠른 메모리. 최하층에는 느리지만 크고 비트당 가격이 가장 싼 메모리를 사용한다

(7)자주 생기는 일은 빠르게

자주 생기는 혹은 사용하는 것은 드물게 사용하는 것을 최적화하는 것보다 성능 개선에 도움이 된다. 아이러니 하게도 자주 생기는 일은 드물게 생기는 일보다 성능을 개선하기 쉬운 경우가 많다.

(8) 여유분을 이용한 신용도 개선

컴퓨터는 속도도 중요하지만 신용도 역시 중요하다. 모든 물리 소자는 장애가 발생할 수 있으므로 장애를 감지하고 그 소자를 대치할 수 있도록 여유분을 준비하면 컴퓨터의 신용도를 개선할 수 있다.

설명이 부족하고 부실하지만 앞으로 이를 적용한 구조를 계속해서 배워나갈 것이니 조급해 하지 말자!


추상화

추상화란 사실 그대로 묘사하는 것이 아니라 비정형의 형식과 형체로 작가 주관의 느낌을 그려내는 것이다. 이런 추상이 컴퓨터와 무슨 연관이 있을까?

컴퓨터에서의 추상이란 lower-level 시스템의 자세한 사항들을 숨김으로 복잡한 시스템 설계를 용이하게 하는 것이다. 우리가 사용하는 어플리케이션 소프트웨어는 자바와, C, C++ 등의 상위 수준 언어(high-level language)로 작성되어 있다.
그러나 그 안쪽으로 들어가보면 시스템 소프트웨어가 존재한다. 시스템 소프트 웨어는 공통적으로 필요한 서비스를 제공하는 소프트웨어이며, 운영체제, 컴파일러, 로더, 어셈블러가 이에 속한다. 컴파일러는 어셈블리 코드를 사용해서 우선 상위 수준의 언어를 기계어로 번역한다. 또한 운영체제는 프로그램을 위해서 컴퓨터 내의 자원을 감독하며, 기본 입출력 작업을 처리하고, 보조기억장치와 메모리 함량을 관리하며, 컴퓨터 사용 응용프로그램을 스케줄링하고 공유을 조정한다. 여기서 더 깊숙하게 가면 하드웨어가 있다.


프로그램 코드의 층위

(1) High-level language

  • C와 같은 언어로,문제 영역에 더 가까운 표현방식이다.
  • 프로그래에게 생산성과 이식성을 제공한다

(2) 어셈블리어

  • 기계 명령어를 기호 형태로 표현한 것이다

(3) 하드웨어 표현

  • 이진 자리수로 비트, 0과 1로만으로 구성되어 있다
  • 명령어를 컴퓨터가 이해할 수 있는 언어로 인코딩된다.

컴퓨터 시스템 내부

컴퓨터의 고전적인 구성요소는 다섯가지로는 입력, 출력, 메모리, 데이터패스, 제어가 있으며 뒤에 있는 두 개(데이터패스, 메모리)를 합쳐서 프로세서로라고 부른다.

입출력 장치

컴퓨터와 사용자 사이의 정보를 교환할 수 있는 장치.

  • 유저 인터페이스 장치 (디스플레이, 키보드, 마우스)
  • 저장장치 : HDD, ODD, Flash
  • 네트워크 어뎁터: 다른 컴퓨터와 소통을 도와준다.

다른건 들어봤지만 ...Professor .. 프로세서?

잘 모르겠지만 중요해보이는 개념.. 우선 위에서 뭐랑 뭐 합친 거라고 했다. 바로 데이터패스와 메모리!

  • 데이터패스 : 산술연산을 수행하는 프로세서 구성요소로(ALU, register, internal buses)
  • 제어: 명령어에 따라 데이터패스, 메모리, 입출력장치에 지시를 하는 프로세서 구성요소다.

성능

결국에 컴퓨터 구조를 공부하는 아주 직접적인 동기(?) 중 하나도 더 빠르고 좋은 성능의 프로그램을 만들기 위해서다. 보통 두 컴퓨터에서 프로그램을 실행시킬 때 먼저 끝나는 쪽이 더 빠른 컴퓨터라고 한다. 그런데 이 빠르다라는 단어를 조금만 더 살펴보자

  • 서버나 대규모 데이터 센터의 입장: 하루 동안 더 많은 작업을 처리하는 컴퓨터가 더 빠른 컴퓨터로 처치량 혹은 대역폭이 중요하다. (일정한 시간 동안 처리하는 작업의 양)

  • 컴퓨터 사용자 개인의 입장: 얼마나 많은 작업을 처리하는 가보다는 프로그램의 시작! 시간부터 종료시간까지 실행시간(응답시간)이 중요하다.

위와 같이 좋은 성능을 구현하기 위해서는 다음과 같은 요소를 고려해야 한다.

  • 알고리즘: 연산의 실행 횟수를 결정한다
  • 프로그래밍 언어, 컴파일러, 구조 : 각각의 연산을 이루는 명령어의 수를 결정한다
  • 프로세서와 메모리 시스템: 얼마나 따르게 명령어들이 실행될 것인가를 결정한다
  • 입출력 시스템(운영체제 포함) : 얼마나 빠르게 입출력 명령들이 실행될 지를 결정한다

읽어주셔서 감사합니다. 저도 배우는 중이라 혹시 틀린 부분이 있다면 댓글로 남겨주시면 배우는 데 큰 도움이 될 것 같습니다! ❤️

0개의 댓글