Skip to content

학습 기록 | w1 정민

jeongmin edited this page Feb 4, 2025 · 4 revisions

1. 컴퓨터 구조 시작하기

01-2. 컴퓨터 구조의 큰 그림

graph TD;
    A[컴퓨터 구조] --> B[컴퓨터가 이해하는 정보]
    B --> B1[데이터]
    B --> B2[명령어]

    A --> C[컴퓨터의 네 가지 핵심 부품]
    C --> C1[CPU]
    C --> C2[메모리]
    C --> C3[보조기억장치]
    C --> C4[입출력장치]
Loading

컴퓨터: 명령어를 처리하는 기계 컴퓨터 프로그램: 명령어들의 모음

[ 컴퓨터가 이해하는 정보 ]

  • 데이터
    • 명령어를 위해 존재하는 일종의 재료
  • 명령어
    • 데이터를 움직이고 작동시키는 정보

[ 컴퓨터의 네 가지 핵심 부품 ]

  • CPU (= 중앙처리장치, Central Processing Unit)
    • 컴퓨터의 두뇌 / 메모리에 저장된 명령어를 읽어 들이고, 읽어 들인 명령어 해석, 실행하는 부품
    • ALU: 계산기
    • 레지스터: CPU 내부 작은 임시 저장 장치
    • 제어장치: 제어 신호라는 전기 신호를 내보내고 명령어를 해석하는 장치
  • 메모리 (= 주기억장치, main memory)
    • 종류: RAM(Random Access Memory), ROM(Read Only Memory)
    • 현재 실행되는 프로그램의 명령어와 데이터를 저장하는 부품
      • 프로그램이 실행되기 위해서는 반드시 메모리에 저장되어 있어야 함
    • 메모리에 저장된 값의 위치는 주소로 알 수 있음
      • 값에 빠르게 효율적으로 접근하기 위함
  • 보조기억장치 (secondary storage)
    • 전원이 꺼져도 보관될 프로그램을 저장하는 부품
    • 종류: 하드 디스크, SSD,
  • 입출력장치 (input/output device)
    • 컴퓨터 외부에 연결되어 컴퓨터 내부와 정보를 교환할 수 있는 부품
스크린샷 2025-02-05 오전 12 37 38
  • 시스템 버스
    • 컴퓨터의 네 가지 핵심 부품들이 서로 정보를 주고받는 통로
    • 주소 버스, 데이터 버스, 제어 버스

2. 데이터

02-1. 0과 1로 숫자를 표현하는 방법

  • 비트
    • 0과 1을 나타내는 가장 작은 정보 단위
    • n개의 bit: 2**n가지 정보 표현 가능
  • 워드
    • CPU가 한번에 처리할 수 있는 데이터 크기
  • 이진수의 음수 표현
    • 2의 보수
      • 어떤 수를 그보다 큰 2**n에서 뺀 값
      • -(-A) = A 를 만족
      • 부가 정보인 flag를 사용하여 양수 / 음수를 표시
      • n bit로는 -2n과 2n을 동시에 표현할 수 없음
  • 16진수는 2진수로 변환하기 쉬움

02-1. 0과 1로 문자를 표현하는 방법

[ 문자 집합 ]

  • 컴퓨터가 인식하고 표현할 수 있는 문자의 모음
  • 문자 인코딩: 문자를 0과 1로 변환
  • 문자 디코딩: 인코딩의 반대과정, 즉 0과 1로 이루어진 문자 코드를 사람이 이해할 수 있는 문자로 변환

[ 아스키 코드 ]

  • 0 ~ 127(2**7)까지의 수가 할당되어 인코딩
  • 추후 1비트를 추가한 확장 아스키가 등장하였으나 문자의 수가 턱없이 부족

[ 한글 인코딩 ]

  • 완성형 인코딩: 초성, 중성, 종성의 조합으로 이루어진 완성된 하나의 글자에 고유한 코드 부여
    • EUC-KR: 대표적인 완성형 인코딩
    • CP949: EUC-KR의 확장된 버전
  • 조합형 인코딩: 초성, 중성, 종성에 해당하는 코드를 합하여 하나의 글자 코드를 만드는 방식

[ 유니코드 ]

  • 여러 나라의 문자를 광범위하게 표현할 수 있는 통일된 문자 집합
  • UTF-8, UTF-16, UTF-32

3. 명령어

03-1. 소스 코드와 명령어

  • 모든 소스 코드는 컴퓨터 내부에서 명령어로 변환됨
  • 컴퓨터는 프로그래밍 언어를 이해하지 못한다.

고급 언어

: 사람이 이해하고 작성하기 쉽게 만들어진 언어

  • 컴파일 언어 : 컴파일러에 의해 소스 코드 전체가 저급 언어로 변환되어 실행되는 언어
  • 인터프리터 언어 : 인터프리터에 의해 소스 코드가 한 줄씩 저급 언어로 변환되어 실행되는 언어

저급 언어

: 컴퓨터가 직접 이해하고 실행할 수 있는 언어

  • 기계어 : 0과 1로 이루어진 명령어 비트
  • 어셈블리어 : 기계어를 사람이 읽기 편한 형태로 번역

컴파일 언어 —- 컴파일 ——> 저급언어 인터프리터 언어 —- 인터프리트 ——> 저급 언어

03-2. 명령어의 구조

명령어 : 무엇을 대상으로 어떤 작동을 수행하라는 의미를 담게 됨

  • 연산 코드 (연산자) : 명령어가 수행할 연산
    • 데이터 전송
    • 산술 / 논리 연산
    • 제어 흐름 변경
    • 입출력 제어
  • 오퍼랜드 (피연산자 / 주소 필드) : 연산에 사용할 데이터 또는 연산에 사용할 데이터가 저장된 위치를 의미
    • 명령어 내부에 하나도 없을 수도 잇고 여러 개가 있을 수도 있음
    • 데이터, 메모리 주소나 레지스터 이름이 담김

💡 오퍼랜드 필드 안에 메모리 주소가 담긴다면 표현할 수 있는 데이터의 크기는 하나의 메모리 주소에 저장할 수 있는 공간만큼 커진다.


주소 지정 방식 : 연산에 사용할 데이터 위치를 찾는 방법

  1. 즉시 주소 지정 방식 : 연산에 사용될 데이터
  2. 직접 주소 지정 방식 : 유효 주소(메모리 주소)
  3. 간접 주소 지정 방식 : 유효 주소의 주소
  4. 레지스터 주소 지정 방식 : 유효 주소(레지스터의 이름)
  5. 레지스터 간접 주소 지정 방식 : 유효 주소를 저장한 레지스터

Clone this wiki locally