CS 스터디 2회차가 돌아왔다.
오늘 분량은 CHAPTER 02 컴퓨터 구조의 1강 컴퓨터 구조의 큰 그림부터
2강 컴퓨터가 이해하는 정보까지.

02-1. 컴퓨터 구조의 큰 그림(1)

📘 컴퓨터가 이해하는 정보

\rarr 데이터와 명령어

  • 소스 코드는 내부적으로 컴퓨터가 이해할 수 있는 데이터와 명령어의 형태로 변환된 뒤에 실행

\rarr 명령어는 수행할 동작과 수행할 대상으로 구성

데이터는 수행할 대상으로서 명시되는 경우가 많다.
참고로 수행할 대상으로서 데이터만 명시되는 것은 아니다.
메모리의 주소, 레지스터의 이름도 수행할 대상으로서 지정될 수 있다.

컴퓨터 구조의 큰 그림(2)

\rarr 데이터

  • 숫자, 문자, 이미지, 동영상과 같은 정적인 정보
  • 컴퓨터와 주고 받는 정보나 컴퓨터에 저장된 정보 자체를 데이터라고 통칭
  • 0과 1만으로 다양한 숫자(정수, 실수)와 문자 데이터를 표현

\rarr 명령어

  • 데이터를 활용하는 정보 - 데이터는 명령어에 종속적인 정보이며, 명령의 대상이자 명령어의 재료
  • CPU는 명령어를 이해하고 실행하는 주체
  • 명령어 사이클 - CPU가 이러한 명령어를 처리하는 순서

\rarr 실질적으로 컴퓨터를 동작시키는 정보는 명령어에 조금 더 가깝다, 그리고 명령어를 실행해 주는 부품을 CPU라고 부른다. CPU가 이러한 중요한 명령어를 처리할 때는 어떤 정형화된 순서가 있다. 정형화된 흐름. 일정한 주기. 이 것을 명령어 사이클이라고 한다.

컴퓨터 구조의 큰 그림(3)

📘 컴퓨터의 핵심 부품

  1. CPU

\rarr CPU(Central Processing Unit) : 정보를 읽어 들이고, 해석하고, 실행하는 부품

\rarr CPU 구성

  • 산술논리연산장치(ALU, Arithmetic and Logic Unit)
    - 사칙 연산, 논리 연산과 같은 연산을 수행할 회로로 구성되어 있는 일종의 계산기
    - CPU가 처리할 명령어를 실질적으로 연산하는 요소
  • 제어장치(CU, Control Unit)
    - 명령어를 해석해 제어 신호라는 전기 신호를 내보내는 장치
  • 레지스터(register)
    - CPU 내부의 작은 임시 저장장치 - 데이터와 명령어를 처리하는 과정의 중간값을 저장
    - CPU 내에는 여러 개의 레지스터가 존재하며, 각기 다른 이름과 역할을 수행

\rarr 제어 신호(Control Signal) - 컴퓨터의 각각의 부품들을 동작시킬 수 있게끔 하는 특별한 전기 신호. 대표적인 제어신호에는 메모리 읽기, 메모리 쓰기, 입출력 장치 읽기(입력), 입출력 장치 쓰기(출력), 인터럽트 요청 신호 등이 있다.

컴퓨터 구조의 큰 그림(4)

📘 메모리와 캐시 메모리

\rarr 메인 메모리(main memory)

  • 일반적으로 '(메인)메모리'라는 용어는 RAM을 지칭하는 경우가 많음
  • 실행 중인 프로그램을 구성하는 데이터와 명령어를 저장하는 부품
  • 주소(address) : CPU가 원하는 정보로 접근하기 위해서는 주소가 필요
  • 휘발성(volatile) : 전원이 공급되지 않을 때 저장하고 있는 정보가 지워지는 특성

\rarr 메모리(RAM)는 휘발성 저장장치로, 메모리에 저장된 정보는 컴퓨터의 전원이 꺼지면 모두 삭제

\rarr 캐시 메모리(cache memory)

  • CPU가 조금이라도 더 빨리 메모리에 저장된 값에 접근하기 위해 사용하는 저장장치
  • 오늘날의 컴퓨터 환경에서 거의 무조건 활용되는 보조용 저장장치
  • CPU 내부에 있기도 하고 CPU 밖에 메모리 사이에 있기도 한다.

\rarr 프로그램은 실행되기 위해서 메모리에 적재 되어야 하는데, 메모리로서 사용되는 주요 하드웨어는 RAM이고 RAM은 휘발성 저장 특성이 있다. 휘발성 저장장치이기 때문에 전원이 꺼지면 모두 삭제되는 하드웨어 부품이기 때문에 실행중인 프로그램을 저장하지 않고, 갑자기 전원 공급이 끊겨 버리면 저장된 내역이 날아갈 수 있다.

\rarr 메모리는 대형마트라고 할 수 있고, 캐시 메모리는 편의점이라고 할 수 있다.
내가 원하는 제품이 편의점에 있다면 굳이 대형 마트에 가지 않고 가까운 편의점에 가서 제품을 구매할 수 있는 것처럼.

컴퓨터 구조의 큰 그림(5)

📘 보조기억장치

\rarr 보조기억장치(secondary storage)

  • 전원이 꺼져도 저장된 정보가 사라지지 않는 비휘발성(non-volatile) 저장장치
  • CD-ROM 이나 DVD, 하드 디스크 드라이브, 플래시 메모리(SSD, USB 메모리) 등
  • 보조기억장치는 보관할 프로그램을 저장
  • RAID : 보조기억장치를 구성하는 기술

\rarr 보조기억장치의 주요 본분에는 크게 2가지가 있다. 하나는 전원이 꺼져도 저장된 내용을 안전하게 보관하는 것이고, 또 하나는 보조기억장치에 적재된 보관할 정보를 빠르게 RAM에 적재해 주는 것.

컴퓨터 구조의 큰 그림(6)

📘 입출력장치

\rarr 입출력장치(input/output device)

  • 컴퓨터 외부에 연결되어 컴퓨터 내부와 정보를 교환하는 장치
  • 입력장치 : 마우스, 키보드, 마이크 등
  • 출력장치 : 스피커, 모니터, 프린터 등
  • 보조기억장치는 메모리를 보조하는 임무를 수행하는 특별한 입출력장치
  • 주변장치(peripheral device) : 보조기억장치와 입출력장치를 통칭

\rarr 오늘날 각광 받고 있는 GPU 또한 입출력장치의 일종이라고 볼 수 있다.

컴퓨터 구조의 큰 그림(7)

📘 메인 보드와 버스
\rarr 메인 보드(main board) 혹은 마더 보드(mother board)

  • 컴퓨터의 핵심 부품을 비롯한 여러 부품들을 연결할 수 있는 슬롯과 연결 단자로 구성된 기판
  • 버스(bus) : 각 컴퓨터 부품들이 정보를 주고 받는 통로
  • 시스템 버스(system bus) : 핵심 부품들을 연결

\rarr 버스는 다양한 종류들이 있다. 시스템 버스, 입출력 버스, 로컬 버스 등등. 그 중 가장 중요한 것을 선택하라고 하면 시스템 버스. 시스템 버스는 사람으로 따지면 척추와도 같은 구성 요소라고 할 수 있다.

< 저장 장치의 계층 구조 >

  1. CPU와 가까운 저장장치는 빠르고, 멀리 있는 저장장치는 느림
  2. 속도가 빠른 저장장치는 용량이 작고, 가격이 비쌈
    \rarr 각각의 저장장치들을 CPU와 가까운 순으로 나열
    \rarr 레지스터 -> 캐시 메모리 -> 메모리 -> 보조기억장치
    \rarr 저장장치들은 CPU와 거리, 용량과 성능을 기준으로 계층적 구조를 가진다

\rarr 메모리 계층 구조라고 번역한 전공 서적이 많다. 이 메모리는 계층 구조의 메모리가 아닌 저장장치를 말하는 것.

02-2 데이터

\rarr CPU는 기본적으로 0과 1만을 이해
\rarr 비트(bit) - 0과 1을 나타내는 가장 작은 정보의 단위

  • 1비트는 0또는 1, 2개의 정보를 표현
  • 2비트는 4개, 3비트는 8개, N비트는 2N2^N 개의 정보를 표현

\rarr 바이트(byte) - 여덟 비트를 묶은 단위

  • 하나의 바이트로 표현할 수 있는 정보는 28=2562^8=256

\rarr 워드(word) - CPU가 한 번에 처리할 수 있는 데이터의 크기

  • CPU는 프로그램을 워드 단위로 읽어 들이고 처리
  • CPU가 한 번에 16비트를 처리할 수 있다면 1워드는 16비트
  • 한 번에 32비트를 처리할 수 있다면 32비트
  • 현대 컴퓨터 대부분의 워드 크기는 32비트, 혹은 64비트

\rarr CPU가 한 번에 처리할 수 있는 데이터의 크기를 하프 워드, 두배의 크기를 더블워드라고 부르기도 한다.

📘 [데이터 : 숫자]

\rarr 데이터 - 0과 1로 숫자 표현하기
\rarr CPU는 컴퓨터 내부에서 2진법(Binary)을 사용
\rarr 숫자 1을 넘어가는 시점에 자리올림해 0과 1,2개의 숫자만으로 모든 수를 표현
\rarr 2진수로 표현된 수는 숫자 뒤에 아래첨자로 (2)를 붙이거나 2진수 앞에 0b를 붙임

\rarr 2진수로 실수를 나타내는 방법

  • 컴퓨터의 소수 표현을 학습할 때 가장 중요한 핵심
  • 표현하고자 하는 소수와 실제로 저장된 소수 간에 오차가 존재할 수 있음 (정밀도의 한계가 존재)

\rarr 파이썬 코드가 아니더라도 어떠한 똑같은 코드를 작성해도 똑같은 오차가 나온다. 컴퓨터 내부의 문제.

a, b, c 에 각각의 숫자를 대입하고 참이면 Equal, 거짓이면 Not Equal 을 출력한다.
당연히 Equal로 나온다고 생각하겠지만
코드를 실행시켜보면

Not Equal 이 나온다.

그럼 직접 a와 b에 숫자를 대입시켜 보자.

오차가 있는 것이 보인다.

📘 [ 부동 소수점(floating point) 방식 ]

\rarr 소수점이 고정되어 있지 않은 소수 표현 방식
\rarr 필요에 따라 소수점의 위치가 이동할 수 있고, 유동적(floating)

📘 IEEE 754

\rarr 오늘날 대부분의 컴퓨터는 2진수 지수와 가수를 다음과 같은 형식으로 저장

\rarr 부호 (sign) 비트가 0이면 양수를 의미하고, 1이면 음수를 의미

📘 [데이터 - 0과 1로 문자 표현하기]

\rarr 문자 집합(character set)

  • 컴퓨터가 이해할 수 있는 문자들의 집합

\rarr 문자 인코딩(character encoding)

  • 문자 집합에 속한 문자를 컴퓨터가 이해하는 0 과 1로 이루어진 문자 코드로 변환하는 과정

\rarr 문자 디코딩(character decoding)

  • 0 과 1로 표현된 문자를 사람이 이해하는 문자로 변환하는 과정

-📘 아스키(ASCII, American Standard Code for Information Interchange)

\rarr 초창기 컴퓨터에서 사용하던 문자 집합 중 하나로, 영어의 알파벳과 아라비아 숫자, 일부 특수문자를 포함

\rarr 하나의 아스키 문자를 표현하기 위해서는 8비트(1바이트)를 사용

  • 8비트 중 1비트는 패리티비트(parity bit) - 오류 검출을 위해 사용되는 비트
  • 실질적으로 문자 표현을 위해 사용되는 비트는 7비트
  • 7비트로 표현할 수 있는 정보의 가짓수는 272^7 개이므로 총 128개의 문자를 표현

\rarr 아스키 코드

  • 아스키 문자들은 0부터 127까지의 숫자 중 하나의 고유한 수에 대응
  • 아스키 코드의 인코딩 방식 - 2진수로 표현함으로써 아스키 문자를 0과 1로 대응

\rarr 코드 포인트(code point) - 문자 인코딩에서 '글자에 부여된 고유한 값'
\rarr 예) 아스키 문자 'A'의 코드 포인트는 65

- 📘 EUC-KR

\rarr 아스키 코드는 한글을 표기할 수 없어서 등장한 한글 인코딩 방식 중 하나

\rarr EUC-KR은 KS X0001, KS X 1003 이라는 문자 집합 기반의 인코딩 방식

  • 아스키 문자를 표현할 때는 1바이트, 하나의 한글 글자를 표현할 때는 2바이트 크기의 코드를 부여
  • 2바이트(16비트)는 네 자리 16진수로 표현할 수 있으므로 EUC-KR로 인코딩 된 한글 글자 하나는 네자리 16진수로 나타낼 수 있음

\rarr 예) EUC-KR로 인코딩된 글자 '한글'

  • '한'의 경우 0xc7d0 행의 두 번째 열, 즉 0xc7d1
  • '글'의 경우 0xb1d0 행의 열두 번째 열, 즉 0xb1db로 인코딩

📘 [유니코드(Unicode)]

\rarr 유니코드는 한글을 포함해 EUC-KR에 비해 훨씬 많은 언어, 특수문자, 화살표, 이모티콘까지 코드로 표현할 수 있는 통일된 문자 집합

\rarr 유니코드가 대부분의 언어를 지원 - 국가별로 다른 문자 집합과 인코딩 벙식을 준비할 필요가 없음

\rarr 유니코드는 현대 가장 많이 사용되는 표준 문자 집합

\rarr 아스키 코드나 EUC-KR처럼 유니코드 문자 집합에 속한 문자에는 고유한 값이 부여

  • 예) 유니코드 문자 집합 상에서 '한','글' 이라는 글자에 부여된 값은 각각 0xD55C, 0xAE00

\rarr 유니코드의 특징

  • 아스키 코드나 EUC-KR은 글자에 부여된 값을 그대로 인코딩 값으로 대응
  • 유니코드는 글자에 부여된 값 자체를 인코딩된 값으로 삼지 않고, 이 값을 다양한 방법으로 인코딩
  • UTF-8, UTF-16, UTF-32는 유니코드 문자에 부여된 값을 인코딩하는 방식

📘 [base 64]

\rarr base64는 문자뿐만 아니라, 이진 데이터까지 변환할 수 있는 인코딩 방식

\rarr 문자보다는 이진 데이터를 인코딩하는 데에 더 많이 사용

\rarr base64 인코딩은 이미지 등 단순 문자 이외의 데이터까지 모두 아스키 문자 형태로 표현 가능

\rarr base64는 64진법을 의미

  • 하나의 base64 인코딩 값을 표현하기 위해 64개의 문자가 사용
  • 64진수 하나를 표현하기 위해서는 262^6의 지수인 6비트가 필요
  • 따라서 변환할 데이터를 6비트씩 나누어 다음 표에 있는 하나의 문자로 변환
  • 기본적으로 4개씩(24비트씩) 한 번에 변환

\rarr 예) 'abc' 라는 문자열이 있다고 가정

  • 'a, b, c' 는 각각 8비트의 아스키 코드 97, 98, 99 로 인코딩
  • 각각의 아스키 코드는 8비트 크기의 2진수인 0110001, 01100010, 01100011로 표현
  • 즉, 문자열 'abc'는 총 24비트의 코드로 인코딩
  • 이를 base64 대응표에 따라 6비트씩 끊어서 변환하면 다음과 같이 'YWJj'
  • 6비트씩 나누어 떨어지지 않는 경우
    - 예) 문자열 'ab'의 총 16비트이므로 4개의 6비트로 나누어 떨어지지 않음
    - 나누어 떨어지지 않는 자리가 다음과 같이 0으로 채워지는 패딩(padding)이 되고, 이는 '='으로 인코딩
    - 'ab'는 총 16비트로 표현되기 때문에 4개의 6비트로 변환되기에는 비트 수가 부족
    - 따라서 부족한 비트는 0으로 간주되어 '='로 인코딩

📘 [명령어]

\rarr 명령어는 수행할 동작과 수행할 대상으로 구성

  • 수행할 대상 : 수행할 동작에 사용될 데이터 자체 or 동작에 사용될 데이터가 저장된 위치

\rarr 하나의 명령어는 연산 코드와 0개 이상의 오퍼랜드로 구성

  • 연산 코드(opcode) : '명령어가 수행할 동작'
  • 오퍼랜드(operand) : '동작에 사용될 데이터' 혹은 '동작에 사용될 데이터가 저장된 위치'

\rarr 명령어에 사용된 오퍼랜드에 메모리 주소가 명시될 경우

  • 추가 메모리 접근 필요
    - 예) 명령어 '더해라, 100번지 값에, 10을'

📘 [스택]

\rarr PUSH, POP 명령어는 스택에 대한 연산
\rarr 스택(stack) - 한 쪽 끝이 막혀 있는 통과 같은 형태로 데이터를 관리하는 자료구조
\rarr 스택은 한 쪽 끝이 막혀 있기 때문에 데이터를 저장할 때는 막혀 있지 않은 쪽으로 차곡차곡 저장하고, 저장한 자료를 빼낼 때는 마지막으로 저장한 데이터부터 빼내서 관리
\rarr LIFO(Last In First Out) 자료구조

  • '나중에 저장한 데이터를 가장 먼저 빼내는 데이터 관리 방식(후입선출)'
  • 예) 스택 안에 '1-2-3-4-5'의 순으로 데이터를 저장(PUSH)하면 데이터를 빼낼 때는 '5-4-3-2-1'의 순으로 빼낼(POP) 수 있음

나머지는 자료구조에서 좀 더 알아보도록 하자.

📘 [기계어와 어셈블리어]

\rarr 기계어(machine code) - CPU가 이해할 수 있도록 0과 1로 표현된 정보를 있는 그대로 표현한 언어
\rarr 어셈블리어(assembly language) - 0과 1로 표현된 기계어를 읽기 편한 형태로 단순 번역한 언어
\rarr CPU가 다르면 기계어와 어셈블리어도 달라질 수 있음

📘 [명령어 사이클]

\rarr 명령어 사이클(instruction cycle)

  • CPU가 명령어를 처리하는 과정에서 프로그램 속 각각의 명렁어들은 일정한 주기를 반복하며 실행

\rarr 인출 사이클(fetch cycle) - 메모리에 있는 명령어를 CPU로 가지고 오는 단계

\rarr 실행 사이클(execution cycle) - CPU로 인출한 명령어를 실행하는 단계

0개의 댓글

관련 채용 정보