공부

[혼공컴운] 1주차_컴퓨터 구조/데이터/명령어

무른2 2025. 1. 12. 20:06

 

컴퓨터 구조 시작하기

 

  • 컴퓨터 구조를 알아야 하는 이유
    컴퓨터 구조를 이해하고 있으면 문제해결 능력이 향상된다.
    컴퓨터 구조를 이해하면 컴퓨터 내 성능/용량/비용을 고려하여 개발하기 용이하다.
    즉. 컴퓨터 구조를 이해하면 우리는 컴퓨터를 미지의 대상에서 분석의 대상으로 인식하게 된다.

 

  • 컴퓨터의 구조
    컴퓨터가 이해하는 정보와 컴퓨터의 핵심 부품으로 분류할 수 있다.
    컴퓨터가 이해하는 정보에는 데이터와 명령어가 존재한다.
    데이터: 컴퓨터가 이해하는 숫자, 문자, 이미지 등과 같은 정적인 정보
    명령어: 데이터를 움직이고 컴퓨터를 작동시키는 정보

 

  • 컴퓨터의 핵심 부품
  • 메모리: 현재 실행되는 프로그램의 명령어와 데이터를 저장하는 부품이다.
                 메모리에는 저장된 값에 빠르고 효율적으로 접근하기 위해 주소 개념이 사용된다.
    • 프로그램이 실행되기 위해서는 반드시 메모리에 저장되어 있어야 한다.
    • 메모리는 현재 실행되는 프로그램의 명령어와 데이터를 저장한다.
    • 메모리에 저장된 값의 위치는 주소로 알 수 있다.

 

  • CPU: 메모리에 저장된 명령어를 읽어 들이고, 읽어 들인 명령어를 해석하고 실행하는 부품이다.
              CPU 내부 구성 요소 중 가장 중요한 3가지는 산술논리연산장치(ALU), 레지스터, 제어장치이다.

  • ALU: 컴퓨터 내부에서 수행되는 대부분의 계산 역할을 한다.
  • 레지스터: CPU 내부의 작은 임시 저장 장치로 CPU 내 여러 개의 레지스터 형태로 존재한다.
  • 제어장치: 제어 신호라는 전기 신호를 내보내고 명령어를 해석하는 장치이다.
    • CPU가 메모리에 저장된 값을 읽고 싶을 땐 메모리를 향해 메모리 읽기라는 제어 신호를 보낸다.
    • CPU가 메모리에 어떤 값을 저장하고 싶을 땐 메모리를 향해 메모리 쓰기라는 제어 신호를 보낸다.

 

  • 보조기억장치: 메모리와 같은 역할을 하지만 전원이 꺼져도 보관될 프로그램을 저장하는 부품이다.
    (메모리는 현재 '실행되는' 프로그램을 저장하는 반면, 보조기억장치는 '보관할' 프로그램을 저장한다.)

  • 입출력장치: 마이크, 스피커 등 컴퓨터 외부에 연결되어 컴퓨터 내부와 정보를 교환하는 장치를 의미한다.

 

  • 컴퓨터의 핵심 부품들(메모리/CPU/보조기억장치/입출력장치)들은 모두 메인보드에 연결된다.
  • 메인보드에 연결된 부품들은 '시스템 버스'라는 통로를 통해 서로 정보를 주고 받는다.
    • 시스템 버스 구성 요소
      • 주소 버스: 주소를 주고 받는 통로
      • 데이터 버스: 명령어와 데이터를 주고 받는 통로
      • 제어 버스: 제어 신호를 주고 받는 통로

 

 

데이터

 

1바이트(1byte) 8비트(8bit)
1킬로바이트(1KB) 1,000바이트(1,000byte)
1메가바이트(1MB) 1,000킬로바이트(1,000KB)
1기가바이트(1GB) 1,000메가바이트(1,000MB)
1테라바이트(1TB) 1,000기가바이트(1,000GB)

 

  • 비트: 컴퓨터가 이해하는 가장 작은 정보 단위
             프로그램의 크기는 비트, 바이트, 킬로바이트,메가바이트,기가바이트,테라바이트 등이 있다.

 

  • 이진법: 수학에서 0과 1만으로 모든 숫자를 표현하는 방법
    데이터를 표현할 때 이진법 이외에 수가 15를 넘어가는 시점에 자리 올림을 하는 십육진법을 사용하기도 한다.
  • 이진수를 음수로 표현하기 위해서는 2의 보수를 구해, 표현한다.
  • 이진수의 부호를 구분하기 위해 플래그를 사용한다.

 

  • 문자 집합: 컴퓨터가 인식하고 표현할 수 있는 문자의 모음
  • 문자 인코딩: 문자 집합을 컴퓨터가 이해할 수 있도록 변환하는 과정
  • 문자 디코딩: 0과 1로 이루어진 문자 코드를 사람이 이해할 수 있는 문자로 변환하는 과정
  • EUC-KR: 한글을 2바이트 크기로 인코딩할 수 있는 완성형 인코딩 방식
    • 완성형 인코딩 방식이란?
      한글의 초성, 중성, 종성의 조합으로 이루어진 완성된 하나의 글자에 고유한 코드를 부여하는 방식
    • 조합형 인코딩 방식이란?
      초성을 위한 비트열, 중성을 위한 비트열, 종성을 위한 비트열을 각각 할당하여 조합으로 하나의 글자 코드를 완성하는 인코딩 방식

 

  • 유니코드: 여러 나라의 문자들을 광범위하게 표현할 수 있는 통일된 문자 집합으로, UTF-8, UTF-16, UTF-32 등의 인코딩 방식으로 활용된다.
  • 아스키코드: 초창기 문자 집합 중 하나로, 영어 알파벳과 아라비아 숫자, 일부 특수 문자를 포함한다.
  • 코드 포인트: 문자 인코딩에서 글자에 부여된 고유한 값

 

 

명령어

 

  • 고급 언어: 컴퓨터는 이해 못하는 사람이 이해하고 작성하기 쉽게 만들어진 언어
  • 저급 언어: 컴퓨터가 직접 이해하고 실행할 수 있는 언어
    • 저급 언어의 종류
      기계어: 0과 1의 명령어 비트로 이루어진 언어
      어셈블리어: 0과 1로 표현된 명령어를 읽기 편한 형태로 번역한 언어
      예시: push rbp, pop rbp, ret 

즉, 고급 언어로 작성된 소스 코드가 실행되려면 반드시 저급 언어, 명령어로 변환되는 과정이 필요하다.

 

  • 고급 언어가 저급 언어로 변환되는 방식
    • 컴파일 방식
      컴파일러에 의해 소스 코드 전체가 저급 언어로 변환되어 실행되는 고급 언어를 컴파일 언어라고 한다.
      컴파일 언어로 작성된 소스 코드는 컴파일러에 의해 저급 언어로 변환되고(이 과정을 컴파일이라 칭함) 컴파일 결과로 저급 언어인 목적 코드(컴파일러를 통해 저급 언어로 변환된 코드)가 생성된다.

    • 인터프리트 방식
      인터프리터에 의해 소스 코드가 한 줄씩 실행되는 고급 언어를 인터프리터 언어라고 한다.

  • 목적 파일: 목적 코드로 이루어진 파일
  • 링킹: 목적 코드가 실행 파일이 되기 위해 거쳐야 하는 작업 

 

  • 명령어의 구조
    • 연산 코드: 명령어가 수행할 연산
      • 연산 코드의 유형
        1. 데이터 전송
        2. 산술/논리 연산
        3. 제어 흐름 변경
        4. 입출력 제어
    • 오퍼랜드: 연산에 사용할 데이터가 저장된 위치

연산 코드가 담기는 영역을 연산 코드 필드, 오퍼랜드가 담기는 영역을 오퍼랜드 필드라고 한다.

 

 

  • 주소 지정 방식: 오퍼랜드 필드에 데이터가 저장된 위치를 명시할 때 연산에 사용할 데이터 위치를 찾는 방법
    • 즉시 주소 지정 방식: 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시하는 방식
    • 직접 주소 지정 방식: 오퍼랜드 필드에 유효 주소를 직접적으로 명시하는 방식
    • 간접 주소 지정 방식: 유효 주소의 주소를 오퍼랜드 필드에 명시하는 방식
    • 레지스터 주소 지정 방식: 직접 주소 지정 방식과 비슷하게 연산에 사용할 데이터를 저장한 레지스터를 오퍼랜드 필드에 직접 명시하는 방식
    • 레지스터 간접 주소 지정 방식: 연산에 사용할 데이터를 메모리에 저장하고 해당 유효 주소를 저장한 레지스터를 오퍼랜드 필드에 명시하는 방법

 

 

숙제

 

 

스택 과 큐

 

스택: 구조와 크기가 같은 자료를 정해진 방향으로만 쌓을 수 있는 구조로, LIFO(후입선출) 방식으로 데이터를 관리한다.

스택에서 원소를 삽입하는 연산을 PUSH라 하고, 원소를 삭제하는 연산을 POP이라 한다.

스택의 LIFO 구조를 응용하면 삽입 순서와 삭제 순서의 역순 또는 요청 순서와 처리 순서의 역순 관계를 관리할 수 있다.

스택은 후위 표기법 계산, 함수 호출 등의 상황에서 활용할 수 있다.

 

: 스택과 달리 양쪽이 뚫려 있는 통과 같은 저장 공간을 가지며, FIFO(선입선출) 방식으로 데이터를 관리한다.]

큐에서 원소를 삽입하는 연산을 enqueue라 하고, 원소를 삭제하는 연산을 dequeue라 한다.

큐의 FIFO 구조를 응용하면 작업 버퍼 큐, 프로세스 스케줄링, 대기 행렬을 모델링하는 시뮬레이션 등에서 활용할 수 있다.

 

데크: 큐의 양쪽 끝에서 삽입과 삭제가 모두 가능하도록 큐를 확장한 자료구조로 스택의 성질과 큐의 성질을 모두 갖는다.