컴퓨터 이해하기

sith-call.dev·2023년 5월 27일
0

백엔드 지식 정리

목록 보기
1/1

서론

나의 모든 지식을 유기적으로 연결시켜보고자 하나씩 하나씩 정리하는 글을 적어보고자 한다. 그리하여 최종적으로 백엔드 입문자들을 위한 책 하나를 완성시키는 것이 목표이다.

컴퓨터란 도구

컴퓨터가 특별한 이유

컴퓨터를 사용해보기 전에 우린 컴퓨터가 무엇인지 알아야 한다. 컴퓨터는 일종의 도구이다. 망치, 드라이버, 숟가락과 같은 하나의 도구일 뿐이다. 그러나 그런 도구와 다르게 컴퓨터가 특별한 이유는 범용적인 도구이기 때문이다. 즉, 도구의 목적이 하나가 아닌 여러 가지이다.

범용성의 범위

컴퓨터가 여러 가지 일을 할 수 있다고 말했다. 그렇다면, 컴퓨터가 할 수 있는 그 여러 가지 일의 범위는 어떻게 될까? 결과부터 말하자면 인간급의 범용성을 지니고 있다고 말할 수 있다. 현재 시점에서 핫한 chat gpt와 같은 것들을 보면 바로 이해할 수 있으리라 생각한다. 그러나 보다 근본적인 이유를 따지자면 컴퓨터의 원형 모델은 튜링 머신이고, 튜링 머신은 인간을 본따 만들어졌기 때문이라고도 말할 수 있다. 자세한 것은 이 링크를 참고하라.

컴퓨터의 구조

초기의 컴퓨터

초기의 컴퓨터는 한번 명령어를 입력하면 그 명령어만 수행할 수 있었다. 다른 명령어를 수행시키기 위해선 명령어를 모두 지우고 다시 명령어를 써야만 했다. 그런데 이것이 말처럼 단순한 작업이 아니라 엄청나게 큰 전기판에 코드를 꼽아가며 전기적인 신호로서 명령어를 입력해야 했기 때문에 손이 많이 가는 작업이었다.

프로그램 내장식 컴퓨터

그래서 초기 모델의 문제점을 해결하기 위해 나온 것이 프로그램 내장식 컴퓨터이다. 이때부터의 컴퓨터가 우리가 알고 있는 형태와 비슷한 모습의 컴퓨터이다. 이 컴퓨터는 프로그램을 기억해두는 메모리란 것을 따로 두어서 그곳에서 간편하게 명령어를 지우고 쓰며 다양한 명령어를 실행시킬 수 있었다. (사실 이런 특성은 보편 만능 튜링 기계와 비슷하다.) 프로그램 내장식 컴퓨터의 대표적인 구조로는 폰 노이만 구조가 있다.

컴퓨터 구조

이러한 절차에 따라 진화된 컴퓨터 구조의 대표적인 모습은 아래와 같다.

여기서 구체적으로 언급할 만한 것은 CPU와 Main Memory이다. 사실 이 두 개가 핵심적인 역할을 하고, 나머지는 외부 기기로서 서브 목적을 수행한다. 메인 메모리에 코드로서 명령어와 데이터가 입력되고, cpu는 이를 불러와서 명령대로 데이터를 처리한 뒤에 다시 메모리에 적재하는 식이다. 그러나 이런 단순한 원리로만 컴퓨터는 존재할 수 없다. 서브 목적을 수행하는 다양한 모듈들이 필요하다.

실제 컴퓨터의 모습 - 메인보드

위의 추상적으로 제시된 설계가 구체적으로 실용적인 상품이 되기 위해선 위와 같은 모습을 띈다. 여기선 필요한 서브 모듈들이 전부 붙여진 상태이다. 그래서 컴퓨터를 하드웨어 관점에서 이해하기 위해선 위의 메인 보드를 모두 이해할 수 있어야 한다. 그러나 우린 필수적인 요소들만 짚고 넘어가도 상관 없다. 왜냐하면 하드웨어 엔지니어가 아닌 소프트웨어 엔지니어가 목표이기 때문이다.

필요한 하드웨어 지식

CPU

CPU 소켓

CPU는 CPU 소켓에 넣어서 사용한다. 그런데 CPU 규격과 메인보드의 규격이 맞아야 CPU 소켓에 CPU를 넣을 수 있다.

CPU 구조 - CISC, RISC, ISA

CPU에도 설계도가 있다. 이때 그 설계는 크게 CISC와 RISC 방식으로 나눠져 있다. 그런데 이때 이러한 CPU의 설계에 따라서 하드웨어를 조작할 수 있는 명령어의 종류도 달라진다. 즉, CISC는 CISC만의 명령어들이 있어서 이를 이용해 하드웨어를 조작하고, RISC는 RISC만의 명령어들이 있어서 이를 이용하여 하드웨어를 조작한다. 그리고 각각의 명령어들을 따로 명령어 집합 체계(ISA, Instruction Set Architecture)라고 한다. 그래서 때때로 소프트웨어가 이러한 CPU 구조에 의존적일 때가 있다.

예를 들어 윈도우를 보면 "Program File(x86)"이란 폴더가 있다. 이는 x86 설계의 cpu에서 실행되어야 하는 프로그램을 말한다. 그래서 따로 관리하기 위해 위의 폴더를 만들어 둔 것이다. 일반 "Program File"은 IA-64라는 CPU 설계에서 실행되어야 할 파일들을 모아둔다. 이는 위의 예시뿐만 아니라 다양한 프로그램을 설치할 때 볼 수 있는 문구이다. 그래서 자신의 CPU의 맞는 프로그램을 설치하게 되면 실행되지 않는 경우가 생긴다.

RAM (Random Access Memory)

모두가 아는 메모리이다. 메모리와 관련되어서 특별히 알아봐야 할 것은 메모리 계층 구조와 가상 메모리이다. 이 또한 별도의 챕터로 서술해보겠다.

ROM (Read Only Memory)

부팅 과정 시에 사용된다. 부팅 챕터에서 설명하도록 하겠다.

Auxiliary Storage (보조기억장치)

HDD

하드 디스크 드라이브로 실제 원판 모양이다. 자기적인 성질을 이용하여 데이터를 저장한다. 성능이 떨어지나 값이 싸다. 그래서 백업용으로 사용하거나 자주 접근하진 않지만 많은 용량을 저장해야 할 때 사용한다.

SSD

플래시 메모리를 이용하여 전기적인 성질을 이용하여 데이터를 저장한다. 성능이 좋으나 값이 비싸다. 그래서 운영체제를 저장하는 장치로 사용한다.

장치 드라이버

외부 기기와 같은 하드웨어를 사용하려면 필요한 소프트웨어이다. 커널단에서 사용하는 프로그램이다. 만약 물리적으로 하드웨어를 컴퓨터에 연결하였는데 장치 드라이버가 컴퓨터에 깔려 있지 않다면 해당 하드웨어를 사용할 수 없게 된다.

3DP CHIP 드라이버 프로그램

칩셋 드라이버부터 깔아야 한다. 그 뒤에 그래픽 카드 드라이버, 운영체제 업데이트를 한 뒤에 다른 장치 드라이버를 설치한다. 이때 3dp chip이라는 하드웨어 드라이버를 찾아주는 프로그램을 통해서 메인 보드가 인식할 수 있는 모든 드라이버를 깔아준다.

이후에 다룰 것들

  • 부팅 과정
  • 운영체제의 역할
    • 자주 사용하는 시스템콜
    • 가상 메모리
  • 네트워크
  • 데이터베이스
  • 자료구조 / 알고리즘
profile
lim (time -> inf) life(time) = LOVE

0개의 댓글