[따배씨] 0. 컴퓨터의 작동원리

devheyrin·2022년 2월 9일
0

clang

목록 보기
1/2

컴퓨터의 구성 요소들

컴퓨터는 크게 하드웨어와 소프트웨어로 나뉜다.

하드웨어 : 손으로 만질 수 있는 것

소프트웨어 : 순수한 '정보'

인간으로 치면 육체(하드웨어)와 정신(소프트웨어) 로 비유할 수 있다.

사용자(사람)이 입력장치를 사용해 컴퓨터에게 정보를 제공하면,

컴퓨터는 정보를 처리해 결과를 출력장치를 통해 내보낸다.

다양한 입/출력장치가 계속 발전하고 있다.

최근에는 입력을 제공하는 것이 사람이 아닌 다른 컴퓨터가 될 수도,

출력을 사람이 아닌 다른 컴퓨터를 거치도록 할 수 있다.

컴퓨터 본체

메인보드(마더보드)

중앙처리장치(CPU) - 메인보드 중앙에 위치, 크기는 작다. 쿨러가 훠얼씬 크다

주기억장치 - CPU 옆자리에 꽂는다. 물리적으로도 가깝고, 회선으로 연결되어 서로 정보를 주고받는다.

보조기억장치 - 주기억장치만으로는 모든 정보를 저장할 수 없으므로, 보조기억장치가 필수. 회선으로 연결되어 다른 위치에 꽂힌다.

입출력장치 - 요즘은 거의 USB를 사용해서 연결

디스플레이, 그래픽카드 - 일반적으로는 그래픽카드에 연결되어 화면을 보는 것이 일반적이었지만, 최근에는 메인보드 칩셋에 그래픽카드 기능이 함께 들어있는 경우도 있다.

중앙처리장치

Central Proccessing Unit(CPU)

주기억장치 - 메모리

Primary Storage - Computer Memory

전원을 끄면 데이터가 사라짐

Random Access Memory(RAM)

임의접근이 가능한 메모리 ←→ 순차 접근 메모리

따라서 보조기억장치가 꼭 필요하다.

메모리를 사용하는 이유는 속도가 빠르기 때문!

그래픽스 카드

Graphics Card

초기 그래픽카드는 메모리만큼 얇았기 때문에 Card라고 부를만했음

기술이 발전하면서 두꺼운 형태의 그래픽카드가 되었음

자체적으로 Fan을 가지고 있음 - 그래픽카드 안에 CPU가 들어가있다는 것(=GPU)

그래픽카드 안에 그래픽 처리 용도의 CPU와 메모리가 들어가 있고, 이것의 성능에 따라 가격이 천차만별

딥러닝처럼 연산이 많은 작업을 수행해야 하는 경우 그래픽카드를 여러 개 꽂아서 사용하는 것이 일반적이다.

보조기억장치

Secondary Storage

컴퓨터를 꺼도 정보가 유지된다.

단점은? 주기억장치(메모리)보다 훨씬 느리다.

  • HDD(Hard Disk Drive) - 물리적으로 움직이는 부품이 존재. 속도에 한계가 있다. 플로피 디스크보다 딱딱한(hard) Drive
  • SDD(Solid-State Drive) - USB에 사용되는 플래시 메모리가 발전한 형태, 속도가 빨라 HDD가 SDD로 교체되는 경향에 있다. 빅데이터를 다룬다면 보조기억장치도 프로그래밍시 고려해야할 수 있음.
  • FDD(Floppy Disk Drive) - Drive라는 단어의 어원이 여기에서 왔다. 케이스 안에 동그란 디스크가 들어있어서, 이것을 빙글빙글 돌리면서 데이터를 읽어오기 때문에 Drive라고 불렀다. 하드디스크와 플로피디스크의 원리는 동일!
    • C드라이브라는 말은 어디에서 온 걸까? A드라이브와 B드라이브는 플로피디스크 드라이브였기 때문에, 지금은 플로피 디스크를 사용하지 않아 A, B드라이브는 빠지고 C드라이브가 남게되었다.
  • 자기 테이프(Magnetic Tape) - 윈터솔져에 나옴. 카세트테이프에 들어있는 그것

컴퓨터를 켤 때 일어나는 일들

부팅 절차

  • 전원 공급
  • 전원공급장치가 메인보드에 전기 공급
  • 메인보드 안쪽 부품들에 전기 공급
  • 팬이 돌아가고 불빛이 들어온다
  • 소리가 나면서, 메인보드 제조사 로고 등장
  • BIOS - Basic input output System
  • 가장 처음 작동하는 것은 ROM BIOS - 부팅 프로그램 실행
    • Read Only Memory - 메인보드가 시작될 때 어떤 것을 시작할지 내용을 담고있는 메모리 (부팅 프로그램)
  • 하드웨어 검사
  • 운영체제 로드
    • 보조기억장치에 운영체제가 저장되어있다. 보통 제조사에서 탑재하여 보내줌
    • 보조기억장치에는 응용프로그램, 데이터 등이 존재(사용자가 작성한 프로그램 등)
  • 운영체제 실행
    • 운영체제가 기능하려면 CPU가 운영체제를 가져와서 실행해야 한다.
    • CPU는 보조기억장치와는 직접소통할 수 없다. 주기억장치하고만 소통
    • 따라서 보조기억장치에 있는 운영체제 프로그램을 주기억장치에 복사해온다. 그것을 가지고 CPU가 일하게 된다!

운영체제가 해주는 일들

운영체제에는 Unix, Linux, Windows, MacOS, iOS, Android가 있다.

핵심기능은 대부분 비슷하다

사용자 관점에서

사용자는 시스템 프로그램 또는 응용 프로그램을 사용하려고 한다.

사용자는 하드웨어를 통해 입력하고 결과를 받을 수 있다.

옛날 개발자들은 하드웨어 조작 프로그램을 전부 따로 만들었다 - 응용프로그램 만들기가 힘들었음!

그래서 공통적으로 개발해야할 부분을 묶어서 같이 사용하자 했던것이 운영체제의 시작!

특히 하드웨어를 어떻게 사용할것인가는 정말 중요한 문제였음. 운영체제를 만드는 사람들이 미리 만들어서 다른 개발자들에게 제공해주었음.

그 중에서도 커널(Kernel)이라는 것이 하드웨어를 담당한다.

요즘에는 프로그램을 딱 하나만 실행하지 않고, 여러개의 프로그램을 사용한다. 누가 먼저 CPU와 메모리를 사용할 것인지 경쟁하게 된다

이 때 컴퓨터의 자원들(CPU, 메모리)를 관리해주는 것이 운영체제의 중요한 역할 중 하나!

컴퓨터는 왜 2진수를 사용할까?

컴퓨터는 다양한 형태의 정보를 숫자로 바꾸어 처리한다. (아주 중요한 성질!)

이때 사용하는 숫자가 바로 2진수!

왜 2진수를 사용하는지는 에디슨으로 거슬러올라가고...

필라멘트에 열을 가하면 전자를 방출하는데, 양으로 된 극을 가져다놓으면 전자가 빨려들어가면서 전자가이동하면서 전류가 흐른다(에디슨효과, 열전자방출)

이 효과를 이용해서 진공관이라는 것을 만들었는데, 진공관의 기능은 전자가 흘렀다가 흐르지 못했다가 할 수 있도록! 즉 전자 흐름을 제어하는 것이었다.

껐다 켰다 - 이것이 0과 1로 대응되고, 컴퓨터가 2진수를 사용하는 근본적인 이유가 되었다.

진공관의 구조를 보면 다음과 같다!

음극을 뜨겁게 달구면 전자가 나오고, 이것이 가운데의 control grid 사이로 지나갈 수 있다.

이때 control grid에 약한 전류를 넣었다 뺐다 하면 전자가 위로 올라갈 수 있거나 /없게 된다.

control grid 에 음전압을 걸어주면 전자도 음이므로 통과할 수 없게 되고,

양의 전압을 걸어주면 전자가 통과할 수 있게 된다.

최초의 컴퓨터 에니악을 보면 엄청나게 많은 진공관이 달려있다.

그러나 여러가지 불편함이 있었다.

트랜지스터의 등장

벨 연구소에서 트랜지스터 효과를 발견했다!

이때부터 정보기술이 현저하게 빨라지게 되어었다.

트랜지스터는 반도체를 사용해서 만든다. 대표적인 반도체는 실리콘!

진공관과 비슷한 기능을 수행하지만, 안정적으로 작동할 수 있어서 이것으로 CPU, 메모리를 만들 수 있게 되었다.

다리 세개가 달려있고, collector, emmiter, base로 되어있다. b에 들어오는 전압을 조절해서 전기 흐름을 조절할 수 있다.

제어에 사용하는 전기는 아주 작은 신호이다.

트랜지스터를 아주 소형화해서 엄청나게 많이 집어넣은것을 집적회로(Integrated Circuits)라고 한다. i7의 경우 11억6천만개의 트랜지스터가 아주 작은 영역에 들어가있다. 이런 식으로 CPU가 복잡한 기능을 처리할 수 있게 된 것!

현대적 컴퓨터의 기본 구조

지금 사용하는 컴퓨터의 구조를 직접적으로 제시한 것은 폰 노이만이다.

폰 노이만은 맨하탄 프로젝트에 참여해서 핵폭탄을 만들기 위해 필요한 수많은 연산을 처리하기 위해 컴퓨터를 개발했다.

현대적 컴퓨터의 구조를 폰 노이만 구조라고도 한다.

기능적인 측면에서는 내장형 프로그램 방식의 컴퓨터(Stored-program computer)라고도 한다.

메모리와 CPU가 있고, 프로그램이 메모리 안에 들어가 있는 형태

메모리에 있는 프로그램을 읽어서 CPU가 기능을 수행하게 된다.

폰 노이만 구조가 발전하여 다음과 같은 형태가 되었다.

컴퓨터 메모리의 기본 구조

CPU에서 연산을, 메모리에서 정보 저장을 한다.

중간에는 캐쉬 메모리라는 것이 있다. 메모리에서 정보를 CPU로 보내는데, 자주 보내는 프로그램/데이터를 캐쉬 메모리에 남겨 두는 것이다. 자주 사용하는 프로그램/데이터를 더 빨리 사용할 수 있게 된다.

순차 접근과 임의 접근

순차접근 : 자기 테이프에서 쓰이는 방식. 각각의 칸 안에는 데이터가 들어 있다. 어떤 데이터를 찾기 위해 처음부터 끝까지 하나하나 살펴보는 방식

임의접근 : 현대 컴퓨터에서 사용하는 방식. RAM은 임의접근을 위해 만들어진 장치이다. 데이터의 주소를 알면 바로 찾을 수 있기 때문에 데이터가 어디에 있든 동일한 시간으로 접근할 수 있는 방법. 매우 효율적이다!

트랜지스터 하나와 커페스터 하나가 정보를 저장하는 하나의 단위(셀)이 되고, 여기에는 1bit(2진수 숫자 하나)가 저장된다. 그것을 여러 개 저장한다. 엄청나게 많은 셀 중에서 데이터가 어디 있는지 찾아야 하는데! 순차접근으로는 엄청나게 많은 시간이 걸리겠지만, 임의 접근으로는 빠르게 찾을 수 있다.

CPU와 메모리는 어떻게 연결되어 있는가?

임의 접근을 해야 하기 때문에, 주소가 이동하는 통로와 데이터가 이동하는 통로가 분리되어 있다.

주소는 CPU → 메모리 일방향으로만 이동한다.

메모리의 기능은 두가지가 있다.

  1. CPU가 요청(주소를 전달한다)한 데이터를 보내주는 것
  2. CPU가 보낸 데이터를 어떠한 주소에 저장하는 것

address bus 때문에 C언어의 포인터가 존재한다. (주소를 직접 주고받아야 한다는 점 때문에)

최근에 나온 다른 언어들, 파이썬이나 자바 등을 보면 포인터가 없는 경우도 있다.

포인터로 직접접근하는것의 장점 : 훨씬 세세하게 하드웨어를 다룰 수 있고, 속도가 훨씬 빠르다.

CPU의 기본 구조

컴퓨터의 구조, 작동원리에 관심을 갖는 것은 더 좋은 프로그램을 만들기 위해서! 하드웨어 작동 원리에 맞추어 훨씬 더 잘 작동하는 프로그램을 만들기 위한 것.

우리가 만든 프로그램은 보조기억장치에 먼저 저장된다. 저장되어있는 프로그램을 실행시키고싶다면 운영체제에게 부탁을 해야 한다. 운영체제가 신호(사용자의 입력)를 받으면, 보조기억장치에 있는 프로그램을 주기억장치(메모리)로 복사해 온다. 그러면 CPU가 메모리에 올라와 있는 프로그램을 읽어 실행하게 된다.

CPU의 언어

결과적으로 컴퓨터가 이해할 수 있는 것은 기계어

사람이 이해할 수 있는 단어로 대체한 것이 어셈블리 언어. 지시어 뒤에는 주소가 온다.

컴퓨터에서 더하기를 수행하는 방식

  1. A라는 메모리 공간을 잡고, 그 공간에 3이라는 숫자를 넣는다
  2. B라는 메모리 공간을 잡고, 4라는 숫자를 넣는다
  3. A공간에 들어간 숫자와 B공간에 들어간 숫자를 더한 결과를 C라는 메모리 공간에 넣는다

| 고수준 프로그래밍 언어 | a = 3
b = 4
c = a + b |
| --- | --- |
| 어셈블리 언어 | 니모닉(Mnemonic)
LOAD [10]
ADD [11]
STORE [12] |
| 기계어(CPU의 언어) | 10110 (2진수) |

CPU 명령어 집합

CPU명령어는 단순한 것들로 이루어져 있다. 단순한 명령들의 집합으로 복잡한 기능을 수행한다.

CPU의 구성 요소들

  • 제어 장치
  • 산술논리장치
  • 여러 가지 레지스터들
    • 레지스터란? 워크스테이션, 책상, 작업공간 등으로 생각하면 된다.
    • 주소 레지스터 : 읽거나 쓸 메모리 주소 저장
    • 프로그램 카운터 : 다음 명령어의 메모리 주소 저장
    • 데이터 레지스터 : 메모리에서 읽어온 데이터 저장
    • 명령어 레지스터 : 메모리에서 읽어온 명령어 저장
    • 어큐뮬레이터 : 연산에 사용되는 데이터 저장

CPU가 일하는 방법

프로그램이 시작되는 과정 - 두 개의 숫자를 더하는 프로그램

  1. 프로그램을 실행시킨다.
  2. 데이터와 프로그램이 메모리에 올라간다.
  3. 프로그램 카운터(PC)에 프로그램의 시작 부분 명령어의 메모리주소를 저장한다.
  4. 주소 레지스터프로그램 카운터에 저장된 주소를 저장한다
    1. 프로그램 카운터는 다음 주소를 저장한다.
  5. 주소 레지스터에 저장된 주소에 있는 데이터를 데이터 레지스터에 저장한다.
  6. 데이터 레지스터에 저장된 데이터가 명령어 레지스터에 저장된다.
  7. 명령어 레지스터에 있는 명령어가 제어 장치로 이동한다. 제어 장치는 명령어를 해독한다.
    1. 10번지에 있는 데이터를 LOAD하라는 명령이구나!
  8. 데이터를 어큐뮬레이터에 저장
  9. 프로그램 카운터에 저장된 대로, 다음 주소로 간다

정보의 단위

Data vs 정보

현실에서 측정이나 관찰을 통해 얻는 값들을 데이터,

데이터를 처리해 유용한 형태로 바꾸면 정보가 된다.

Bit

  • 0 또는 1
  • 정보의 기본 단위

Bite

  • 1Bite = 8 Bit
  • 메모리 주소의 기본 단위
  • 컴퓨터 발전 과정에서 관습적으로 굳어짐

16Bit Word / 32Bit Word

  • word란 CPU가 데이터를 다루는 기본 단위 = 레지스터의 크기
  • 컴퓨터에 따라, CPU에 따라 달라진다

2진수

부호가 있는 8비트 정수(음수 표현하기)

  • 2의 보수 표현법 사용 → 0과 -0은 같다
  • 첫 비트가 1이면 음수, 0이면 양수이다
  • 10진수를 부호가 있는(음수) 8비트 정수로 바꾸기
    1. 10진수를 2진수로 변환
    2. 보수 취하기
    3. 더하기 1
  • 음수를 10진수로 변환
    1. 8비트 정수에 보수 취하기
    2. 더하기 1
    3. 2진수를 10진수로 변환하고, 원래 8비트 정수의 첫 비트에 따라 마이너스 부호 붙이기
  • 같은 2진수라도, 부호가 있는 정수 표현법인지/부호가 없는 정수 표현법인지에 따라 결과가 달라짐!

8비트 정수의 범위

  • 부호가 있는 정수
    • 10진수 : -128 ~ 127
    • 2진수 : 10000000 ~ 01111111
  • 부호가 없는 정수
    • 10진수 : 0 ~ 255
    • 2진수 : 00000000 ~ 11111111
profile
개발자 헤이린 🔜 프로덕트 매니저로 나아가는 중!

0개의 댓글