[컴퓨터구조] 컴퓨터구조 기초

누디·2023년 3월 3일
0

Computer Architecture

목록 보기
4/5
post-thumbnail

Untitled

Untitled

1. 데이터

1) 0과 1로 숫자를 표현하는 방법

  • 컴퓨터가 표현하는 정보 단위와 0과 1만으로 숫자를 표현하는 법

a. 정보단위

Untitled

  • 0과 1을 나타내는 가장 작은 정보 단위 = 비트(bit)

Untitled

  • N개의 전구가 있다고 할 때, 표현할 수 있는 정보의 수 = 2N2^N
  • 전구 = 비트
  • 8 비트(bit) → 1 바이트(byte) = 282^8 → 256 개의 정보 표현 가능
  • 1000 바이트(byte) → 1 킬로바이트(KB) = 전구 8개짜리가 1000개 → 280002^{8000} 개의 정보 표현 가능
  • 1000 KB → 1 MB = 전구 8개짜리가 1,000,000 개
  • 1000 MB → 1 GB
  • 1000 GB → 1 TB

+) 워드

  • CPU가 한 번에 처리할 수 있는 데이터 크기

b. 이진법

Untitled

  • 0과 1만으로 모든 숫자를 표현하는 방법
  • 2의 보수로 음수
    • 어떤 수를 그보다 큰 2n2^n에서 뺀 값
    • 11(2)11_{(2)}의 2의 보수는 11(2)11_{(2)}보다 큰 2n2^n, 즉 100(2)100_{(2)}에서 11(2)11_{(2)}을 뺀 01(2)01_{(2)}
    • 쉽게 계산하자면, 모든 0과 1을 뒤집고 거기에 1을 더한 값
  • 컴퓨터가 이진수의 음 / 양을 구분하는 방법 → 플래그 사용

c. 십육진법

Untitled

  • 이진법으로 표현하면 숫자가 너무 길어진다는 단점
  • 사용하는 이유는 이진수와 십육진수 상호 변환 편리함

2) 0과 1로 문자를 표현하는 방법

  • 컴퓨터에 문자를 입력했을 때, 어떻게 이해하고 모니터에 출력할까?

a. 문자 집합과 인코딩 / 디코딩

Untitled

  • 문자 집합 : 컴퓨터가 인식하고 표현할 수 있는 문자의 모음
  • 문자 인코딩 : 문자 집합에 속한 문자를 0과 1로 변환하여 컴퓨터가 이해할 수 있도록
  • 문자 디코딩 : 0과 1로 이루어진 문자 코드를 사람이 이해할 수 있는 문자로 변환

b. 아스키코드

Untitled

  • 초창기 문자 집합 중 하나로, 영어 알파벳과 아라비아 숫자, 그리고 일부 특수 문자 포함
  • 아스키 문자 집합에 속한 문자 하나는 7비트로 표현 → 전구 7개 → 128개의 정보 표현 가능
  • 단점을 한글, 특수문자 등 표현 불가능 하다는 것

c. EUC-KR

Untitled

  • 따라서 한글 인코딩 방식 필요
  • 완성형 인코딩
    • 초성, 중성, 종성의 조합으로 이루어진 완성된 하나의 글자에 고유한 코드를 부여
  • 조합형 인코딩
    • 초성을 위한 비트열, 중성을 위한 비트열, 종성을 위한 비트열을 할당 → 조합으로 완성
  • EUC-KR은 완성형 인코딩 방식
  • 한글 한 글자에 2바이트 코드 부여
  • 근데 한글 조합은 무궁무진하다..

d. 유니코드와 UTF-8

  • 모든 한글 표현할 수 없다는 한계
  • 언어별로 인코딩하면 나라마다 인코딩 방식 알아야 함
  • 따라서 모든 나라 언어의 문자 집합과 인코딩 방식 통일되어 있다면 편리함
  • 현대 문자를 표현할 때 가장 많이 사용되는 표준 문자 집합
  • 문자 집합 = 유니코드
  • 인코딩 방식 = UTF8
    • 1바이트부터 4바이트까지의 인코딩 결과를 만들어냄 Untitled
    • 인코딩한 결과가 몇 바이트가 될지는 유니코드 문자에 부여된 값의 범위에 따라 결정됨

2. 명령어

1) 소스 코드와 명령어

Untitled

  • 명령어는 컴퓨터를 실질적으로 작동시키는 매우 중요한 정보
  • 소스코드는 컴퓨터 내부에서 명령어로 변환됨

a. 고급 언어와 저급 언어

Untitled

  • 프로그래밍 언어는 사람이 이해하고 작성하기 쉽게 만들어진 언어
  • 사람을 위한 언어 = 고급 언어
    • C, C++, Java, Python
  • 컴퓨터가 직접 이해하고 실행할 수 있는 언어 = 저급 언어 Untitled
    • 기계어 : 0과 1의 명령어 비트로 이루어진 언어
    • 어셈블리어 : 0과 1로 표현된 명령어(기계어)를 읽기 편한 형태로 변역한 언어
      • 하드웨어와 밀접하게 맞닿아 있는 프로그램을 개발할 때 자주 사용
      • 관찰의 대상이 되기도 함 : 어떤 절차로 작동하는지 볼 수 있음

b. 컴파일 언어와 인터프리터 언어

  • 고급 언어가 변환되는 두 가지 방식

Untitled

Untitled

  • 컴파일 언어 Untitled
    • 컴파일러에 의해 소스 코드 전체가 저급 언어로 변환되어 실행되는 고급 언어
    • C
    • 컴파일은 코드 전체가 저급 언어로 변환되는 과정을 말한다. → 컴파일러가 수행
    • 컴파일러를 통해 저급 언어로 변환된 코드 → 목적 코드(object code)
  • 인터프리트
    • 인터프리터에 의해 소스 코드가 한 줄씩 실행되는 고급 언어
    • Python
    • 소스 코드가 한 줄씩 차례로 실행되어 저급 언어로 변환 → 인터프리터가 수행
    • 컴파일 언어보다 느림

2) 명령어의 구조

  • 하나의 명령어를 자세히 들여다보며 연산 코드, 오퍼랜드, 주소 지정 방식 학습

a. 연산 코드와 오퍼랜드

  • 컴퓨터 속 명령어는 ‘무엇을 대상으로, 어떤 작동을 수행하라’ 구조로 되어 있음

Untitled

Untitled

  • 연산 코드 = 연산자
    • 명령어가 수행할 연산
    • 분홍색 필드
    • 기본적인 연산 코드 유형
      1. 데이터 전송
        • MOVE
        • STORE
        • LOAD(FETCH) : 메모리에서 CPU로 데이터를 가져와라
        • PUSH : 스택에 데이터를 저장하라
        • POP : 스택의 최상단 데이터를 가져와라
      2. 산술 / 논리 연산
        • AND / SUBSTRACT / MULTYPLY / DIVIDE
        • INCREMENT / DECREMENT
        • AND / OR / NOT
        • COMPARE
      3. 제어 흐름 변경
        • JUMP
        • CONDITIONAL JUMP
        • HALT
        • CALL
        • RETURN
      4. 입출력 제어
        • READ
        • WRITE
        • START IO
        • TEST IO
  • 오퍼랜드 = 피연산자
    • 연산에 사용할 데이터가 저장된 위치

    • 흰색 필드

    • 숫자와 문자 등을 나타내는 데이터 또는 메모리나 레지스터 주소가 올 수 있다

    • 주소필드라고 부르기도 함

      Untitled

b. 주소 지정 방식

  • 메모리나 레지스터의 주소를 담는 경우를 많은데, 이는 명령어의 길이 때문

Untitled

Untitled

  • 한 주소에 16비트를 저장할 수 있는 메모리가 있다 가정
    • 메모리에 데이터를 저장하고, 오퍼랜드 필드 안에는 메모리 주소를 명시하면
    • 표현할 수 있는 정보의 가짓수가 2162^{16}으로 확 커진다
  • 레지스터도 마찬가지
  • 연산의 대상이 되는 데이터가 저장된 위치를 유효주소 라고 한다.
  • 따라서 주소 지정 방식은 오퍼랜드 필드에 데이터가 저장된 위치를 명시할 때, 연산에 사용할 데이터 위치를 찾는 방법
  • 즉, 유효 주소를 찾는 방법

(1) 즉시 주소 지정 방식

Untitled

  • 연산에 사용할 데이터를 오퍼랜드 필더에 직접 명시
  • 빠르다는 장점

(2) 직접 주소 지정 방식

Untitled

  • 오퍼랜드 필드에 유효 주소를 직접적으로 명시하는 방식
    • 무슨 메모리 몇번째에 있다
  • 유효주소에 제한이 생길수도(연산 코드 만큼 짧아지니까)

(3) 간접 주소 지정 방식

Untitled

  • 유효 주소의 주소를 오퍼랜드 필드에 명시
    • 무슨 메모리 몇번째에 진짜 주소가 있다
  • 직접 주소 지정 방식보다 표현할 수 있는 유효 주소의 범위가 넓어짐
  • 두 번의 메모리 접근 → 느리다

(4) 레지스터 주소 지정 방식

Untitled

  • 직접 주소 지정 방식과 비슷하게 연산에 사용할 데이터를 저장한 레지서터를 오퍼랜드 필드에 명시
  • 레지스터는 CPU 내부에 있기 때문에 레지스터에 접근하는 것이 더 빠름
  • 하지만 표현할 수 있는 레지스터 크기에 제한 생길수 있음

(5) 레지스터 간접 주소 지정 방식

Untitled

  • 연산에 사용할 데이터를 메모리에 저장하고, 그 주소(유효 주소)를 저장한 레지스터를 오퍼랜드 필드에 명시
  • 메모리 접근 횟수 한번으로 줄어든다 → 간접 주소 지정 방식과 차이이자 장점

3. 기계어와 명령어를 해석하기

Untitled

MPU

  • CPU를 기능에 따라 나눈 종류 중 하나

Cache

  • 자주 사용하는 데이터의 값을 미리 복사해놓는 임시 장소, 메모리 접근 지역성 이용
  • 캐시를 통해 메모리 한계 극복 가능
  • 시간 단축

Untitled

MMU

  • CPU가 메모리에 접근하는 것을 관리하는 장치
  • 물리 주소(Physical Memory)와 가상 주소(Virtual Memory)를 변환하는 역할

TLB (Translate Look-Aside Buffer)

  • 고속의 보조기억장치
  • MPU가 MMU에게 Virtual Memory를 전송하면
  • MMU는 TLB를 참조하여
  • 찾은 물리 주소로 물리 메모리의 데이터를 가져온다.

0개의 댓글