1. 컴퓨터가 이해하는 정보 - 데이터 / 명령어

2025. 6. 14. 18:04·CS/컴퓨터 구조 + 운영체제
반응형

 

혼자 공부하는 컴퓨터 구조 + 운영체제 책

 

 


 

혼자 공부하는 컴퓨터 구조 + 운영체제

 

🔴 컴퓨터 구조를 알아야 하는 이유

많은 유저가 사용하는 프로그램은 필히 성능, 용량, 비용 문제가 발생한다.

이러한 문제를 해결하기 위해서는 단순 프로그래밍 언어의 문법말고, 컴퓨터 구조를 이해하여야만 성능, 용량, 비용을 고려하여 개발할 수 있다.

 

🔴 컴퓨터 구조의 큰 그림

컴퓨터 구조는 크게 컴퓨터가 이해하는 정보와 4가지 핵심 부품으로 나눌 수 있다.

컴퓨터가 이해하는 정보는 1.데이터 2.명령어 두 가지가 있고,

네 가지 핵심 부품은 :

  1. 중앙처리장치 = CPU (Central Processing Unit) 
    : 메모리에 저장된 명령어를 읽어 들이고, 해석하고, 실행
  2. 주기억장치 = (main) Memory 
    : 현재 실행되는 프로그램의 명령어와 데이터를 저장
  3. 보조기억장치 = RAM(Randoem Access Memory) + ROM(Read Only Memory) 
    : 전원이 꺼져도 보관할 프로그램을 저장
  4. 입출력장치 = I/O device(input/output)
    : 외부에 연결되어 컴퓨터 내부와 정보를 교환
컴퓨터 구조
├── 컴퓨터가 이해하는 정보
│   ├── 데이터
│   └── 명령어
└── 컴퓨터의 네 가지 핵심 부품
    ├── CPU (중앙처리장치)
    ├── 메모리 (주기억장치)
    ├── 보조기억장치
    └── 입출력장치

 

 

 

 

 


 

 

 

🟥  데이터

 

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

비트와 바이트, 진법 체계

  • 비트(bit): 0과 1로 표현할 수 있는 가장 작은 정보 단위
  • 바이트(byte): 8비트 묶음.
  • 컴퓨터 내부는 이진수 체계를 사용하며, 1바이트는 2⁸(256)개의 표현 가능.
1byte 8bit
1kB 1,000byte
1MB 1,000kB
1GB 1,000MB
1TB 1,000GB

 

 

 

진법 변환 및 연산

  • 이진법으로 모든 숫자를 표현하기에는 숫자의 길이가 너무 길어지기 때문에
    비교적 짧아지고 이진수로 변환하기 쉬운 십육진법이 자주 사용된다.
  • 16진법 : 사용하는 숫자: 0 ~ 9, A ~ F (총 16개)
    • A = 10, B = 11, …, F = 15
  • 16진법 사용하는 이유
    ✅ 간결함 2진수는 너무 길어짐 → 2진수의 4비트 = 16진수 1자리로 표현 가능
    ✅ 메모리 표현 주소, 색상, 명령어 등의 바이트 단위를 효율적으로 표현
    ✅ 디버깅 low-level 작업 시 CPU와 메모리 상태 확인이 쉬움

    0x = 16진수 , 0b = 2진수
    0x1A 16진수 1A (10진수 26)
    0b1101 2진수 1101 (10진수 13)
    0xFF 10진수 255, 2진수 1111 1111

 


 

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

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

 

ASCII 아스키 : 초창기 문자 집합 중 하나, 아스키 문자(7bit) = 128개의 문자를 표현 (한글표현X)

EUC-KR : 한글 표현 가능한 완성형 인코딩 방식, 한글을 2byte 크기로 인코딩(16bit)

완성형 인코딩 : 하나의 글자에(초성+중성+종성) 고유한 코드 부여
조합형 인코딩 : 초성, 중성, 종성에 해당하는 코드를 합하여 하나의 글자코드를 만드는 방식

유니코드 Unicode : 여러 나라의 문자들을 광범위하게 표현할 수 있는 통일된 문자 집합
                UTF-8, UTF-16, UTF-32는 유니코드 문자의 인코딩 방식 (Unicode Transformation Foramt)

 

 

 

 

 


 

 

 

 

 

🟦  명령어

 


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

명령어(Instruction) :  CPU가 수행할 수 있는 기본적인 작업 단위 
고급 언어 (high-level programming language) : 사람이 이해하는 언어 (대부분의 프로그래밍 언어)

저급 언어 (low-level programming language) : 컴퓨터가 이해하고 실행할 수 있는 언어

  • 기계어 : CPU가 실행가능한 2진수 코드 (0과 1의 조합)
  • 어셈블리어 : 기계어를 사람이 이해하기 쉬운 형태로 바꾼 것 (ex. ADD, MOV)

 

고급언어의 변환방식

  • Compile 컴파일
    소스 코드 전체가 저급 언어로 변환되는 과정
    컴파일 언어로 작성된 코드가 컴파일러에 의해 저급언어로 변환되어 저급 언어인 목적 코드가 생성
    오류가 하나라도 발견되면 컴파일에 실패
    대표적 컴파일 언어 C

  • Interpreter 인터프리터
    인터프리터에 의해 소스 코드가 한 줄씩 저급 언어로 변환되어 실행
    N번째 줄에 문법 오류가 있더라도 N-1번째 줄까지는 수행
    일반적으로 인터프리터 언어는 컴파일 언어보다 느림
    대표적 인터프리터 언어 Python

 


 

 

3-1. 명령어의 구조

명령어는 연산코드와 오퍼랜드로 구성된다.

┌────────────┬────────────┐
│  연산 코드   │    오퍼랜드  │
└────────────┴────────────┘
  1. 연산 코드 (Operation code)
    • 명령어가 수행할 연산을 의미
      ex. 더하라, 저장하라, 이동하라
    • 가장 기본적인 연산 코드 유형은 크게 4가지
      • 데이터 전송 (MOVE, PUSH, POP)
      • 산술/논리 연산 (ADD, AND, OR)
      • 제어 흐름 변경 (JUMP, CALL)
      • 입출력 제어 (READ, WRITE)
  2. 오퍼랜드 = 피연산자 (Operand)
    • 연산에 사용할 데이터 or 연산에 사용할 데이터가 저장된 위치
      대부분 데이터를 직접 명시하기보다는, 데이터가 저장된 위치, 즉 메모리 주소나 레지스터 이름이 담김
      ex. 특정 레지스터, 메모리 주소, 즉시값
    • 오퍼랜드가 담긴 영역을 오퍼랜드 필드 또는 주소 필드라고 부름
    • 오퍼랜드는 여러개가 있을 수 있음
      ex. 오퍼랜드가 없는 경우 : 0-주소 명령어 , 3개인 경우 : 3-주소 명령어
예시)
LOAD R1, 100     ; 메모리 주소 100의 값을 R1에 로드
ADD R1, R2       ; R1과 R2의 값을 더하여 R1에 저장
STORE R1, 200    ; R1의 값을 메모리 주소 200에 저장

 

 

 

 

오퍼랜드 필드에 직접 연산코드, 연산코드에 사용될 데이터를 담지 않는 이유는 명령어 길이 때문이다.

명령어 (Nbit) = 연산코드(Mbit) + 오퍼랜드((N-M)bit)

 

데이터를 바로 담게되면 담을 수 있는 오퍼랜드의 크기는 명령어의 크기에서 연산코드를 뺀 나머지의 크기이지만

메모리 주소를 담게된다면 데이터의 크기는 하나의 메모리 주소에 저장할 수 있는 공간만큼 커진다.

 

 

주소 지정 방식 5가지

: 연산에 사용할 데이터 위치를 찾는 방법

 (유효 주소 : 연산 코드에 사용할 데이터가 저장된 위치)

  1. 즉시 주소 지정 방식 (immediate addressing mode)
    연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시 
    가장 간단하고 메모리로부터 찾는과정이 없어서 빠르지만, 표현할 수 있는 데이터의 크기가 작아짐

  2. 직접 주소 지정 방식 (direct addressing mode)
    유효 주소를 직접적으로 명시
    즉시 주소 지정 방식보다는 데이터의 크기가 크지만, 유효 주소 표현 범위가 연산 코드의 비트 수만큼 줄어듬

  3. 간접 주소 지정 방식 (indirect addressing mode)
    유효 주소의 주소를 명시
    직접 주소보다 표현할 수 있는 유효 주소의 범위가 넓지만, 두 번의 메모리 접근이 필요해서 느림
┌────────────┬────────────────────┐
│  연산 코드   │      유효 주소의 주소  │────────────────────┐
└────────────┴────────────────────┘                    │
                                                       ▼
                                               ┌──────────────┐
                                               │   유효 주소    │──────┐
                                               ├──────────────┤      │
                                               │   연산에 사용할  │     │
                                               │     데이터     │◀─────┘
                                               └──────────────┘
                                                     메모리

 

 

 4. 레지스터 주소 지정 방식 (register addressing mode)
        직접 주소 지정 방식과 비슷하게 연산에 사용할 데이터를 저장한 레지스터 이름을 오퍼랜드 필드에 직접 명시
        일반적으로 CPU 외부에 있는 메모리에 접근하는 것보다 CPU 내부에 있는 register에 접근하는 것이 더 빠름
        직접 주소 지정 방식과 비슷하게 표현할 수 있는 register 크기에 제한 생길 수 있음

명령어: ADD R1, R2

┌────────────┬────────────┐
│  연산 코드   │   오퍼랜드    │
│   ADD      │  R1, R2    │
└────────────┴────────────┘

CPU 내부:
┌──────────────┐
│  R1:   5     │
│  R2:   3     │
└──────────────┘

결과:
R1 ← 5 + 3 → R1 = 8

 

 

 5. 레지스터 간접 주소 지정 방식 (register indirect addressing mode)
     연산에 사용할 데이터를 메모리에 저장하고, 그 유효주소를 저장한 레지스터를 오퍼랜드 필드에 명시

┌────────────┬────────────────────────────┐
│  연산 코드   │ 유효 주소를 저장한 레지스터       │
└────────────┴────────────────────────────┘            
                                  │                   
          ┌────────────┐          │          ┌────────────────────┐
          │    CPU     │          │          │      메모리          │
          │────────────│          │          │────────────────────│
          │ 레지스터 1   │          │          │                    │
          │────────────│          │          │                    │
          │            │◀─────────┘          │────────────────────│ 
          │ 레지스터 2   │──── 유효 주소 ────────▶│  연산에 사용할 데이터   │
          │────────────│                     │────────────────────│         
          │ 레지스터 3   │                     │                    │
          │     ...    │                     └────────────────────┘
          └────────────┘

 

반응형

'CS > 컴퓨터 구조 + 운영체제' 카테고리의 다른 글

2. CPU의 작동 원리 / 성능 향상 기법  (0) 2025.06.14
'CS/컴퓨터 구조 + 운영체제' 카테고리의 다른 글
  • 2. CPU의 작동 원리 / 성능 향상 기법
manon_e
manon_e
  • manon_e
    개발 블로그
    manon_e
  • 전체
    오늘
    어제
    • 💻 (103)
      • Frontend (10)
        • React | Next.js (6)
        • Memo (4)
      • CS (2)
        • 네트워크 (0)
        • 자료구조 + 알고리즘 (0)
        • 컴퓨터 구조 + 운영체제 (2)
      • Cloud & Infra (0)
      • Project (4)
      • Archive (87)
  • 인기 글

  • 태그

    Component
    State
    typeScript
    정규표현식
    getstaticprops
    pre-rendering
    git
    비동기
    node.js
    티스토리챌린지
    오블완
    Node
    ES6
    Prisma
    useEffect
    Next.js
    vscode
    JavaScript
    axios
    REACT
  • hELLO· Designed By정상우.v4.10.3
manon_e
1. 컴퓨터가 이해하는 정보 - 데이터 / 명령어
상단으로

티스토리툴바