[혼공] 혼공 컴퓨터구조 1주차

2023. 7. 10. 01:56카테고리 없음

ch01. 컴퓨터 구조 시작하기

요약 : 컴퓨터 구조를 배워야하는 이유, 컴퓨터 구조 책에서 배울 큰 개념(컴퓨터 핵심 부품, 컴퓨터 데이터)

소프트웨어 개발자는 알고리즘 실력도 중요하지만, 운영도 중요함.

컴퓨터 구조 이론에 빠삭한 상태라면, 운영에 필요한 성능, 용량, 비용 문제를 고려하여 개발할 수 있다.

  • 컴퓨터가 이해하는 정보
    • 데이터
      • 정적인 정보
    • 명령어
      • 컴퓨터가 행할 동작키워드
  • 컴퓨터의 핵심부품
    • CPU
      • 명령어를 읽어들이고, 해석하고, 실행하는 명령을 내리는 부품입니다.
      • 부품 : ALU, 레지스터, 제어장치
    • 주기억장치
      • RAM이라 지칭합니다.
      • 현재 실행되는 프로그램의 명령어와 데이터를 저장합니다.
      • 휘발성 : 전원 off 시 데이터가 날아갑니다.
    • 보조기억장치
      • 보통 현재 실행하지 않는 프로그램들이 저장되어있습니다.
      • 비휘발성 : 데이터가 영구적으로 남아있습니다.
    • 입출력장치
      • 컴퓨터에 연결되는 장치로, 컴퓨터 내부와 정보를 주고받습니다.
      • 종류 : 키보드, 마우스, 모니터
    • 시스템버스
      • 위의 4가지 부품들이 서로 정보를 주고받는 통로입니다.
      • 주소버스 : 주소를 주고받습니다.(명령어 해석시 메모리 주소 주고받기)
      • 데이터버스 : 명령어, 데이터가 오고갑니다
      • 제어버스 : CPU의 제어장치에서 각 부품들로 제어신호를 주고받습니다.

컴퓨터의 핵심부품들은 메인보드 내부에 있습니다.

ch 02.데이터

요약
컴퓨터는 0과 1로 데이터를 표현합니다.
인코딩, 디코딩 변환 작업을 통해 자연어, 기계어로 상호변환한다.

  1. 0과 1로 숫자를 표현하는 방법
    • 2진법
      0과 1로 이루어진 표기법.
      • 음수표기
        • 2의 보수 : 2진법 0과 1을 반대로 뒤집은 후, 1을 더한 값
    • 16진법
      16이 되는 순간 올림처리하는 기법
      • 16진수 -> 2진수 표기법
        16진수 1글자를 비트의 2진수로 변환
  2. 0과 1로 문자를 표현하는 방법
    • 문자집합
      컴퓨터가 인식하고 표현할 수 있는 문자의 집합.
      • 예시
        • 유니코드
        • 아스키코드
    • 인코딩, 디코딩
      사람의 문자, 컴퓨터가 이해하는 문자(0,1)로 서로 변환시켜주는 작업.
      • 인코딩 : 사람의 문자 -> 컴퓨터가 이해하는 문자
      • 디코딩 : 컴퓨터가 이해하는 문자 -> 사람의 문자

ch03. 명령어

요약
사람의 언어(고급언어) - 변환 -> 저급언어(기계어) 변환과정
저급언어의 종류인 컴파일어, 어셈블리어를 학습.

  1. 소스코드와 명령어
    • 고급언어와 저급언어
    • * 고급언어 : 사람의 언어 * 저급언어 : 기계의 언어 * 기계어 : 0,1의 명령어 비트로 이루어진 언어. * 어셈블리어 : 기계어를 사람이 읽기 편한 형태로 변환한 언어.
    • 컴파일 언어와 인터프리터 언어
      자연어를 기계가 이해할 수 없기 때문에, 고급언어 -> 저급언어 변환 과정이 필수입니다.
      • 방식
        • 컴파일 언어
          • 소스코드 전체 가 한꺼번에 변환됩니다.
          • 이 과정을 컴파일이라 칭하고, 사용하는 도구 이름은 컴파일러 입니다.
          • 성공한 변환과정 결과는 목적파일로 떨어집니다.
          • 대표적인 언어 : C, JAVA, C# 등
        • 어셈블리어
          • 인터프리터에 의해 소스코드 한 줄씩 실행됩니다.
          • 사용하는 도구 이름 : 인터프리터
          • 대표적인 언어 : python
  2. 명령어의 구조
    명렁어는 'A야, 거실 방 전등 꺼라'와 같이 무엇을 대상으로 어떤 작동을 수행하는 구조로 되어있습니다.
    각각 연산 코드, 오퍼랜드라고 지칭합니다.
    • 연산 코드와 오퍼랜드
      • 연산코드
        명령어가 수행할 연산(작동)
        • 유형
          1. 데이터 전송
          2. 산술/논리 연산
          3. 제어흐름변경
          4. 입출력 제어
      • 오퍼랜드
        • 연산에 사용할 데이터 위치
        • 직접적으로 데이터를 저장하지 않고, 데이터가 저장된 레지스터나 메모리의 주소를 담고 있는 경우가 대부분입니다.
        • 여러 개의 오퍼랜드를 가질 수 있습니다. 보통 3가지까지 사용합니다.
        • 명령어의 1줄당 n비트씩 제한되어있는 경우, n-주소 명령어에서 표현할 수 있는 데이터의 크기는 제한될 수 밖에 없습니다.
          따라서 표현할 데이터의 크기 제한을 막기 위해, 간접적으로 데이터를 명시하려 주소를 담습니다.
    • 주소지정방식
      연산에 사용할 데이터의 위치를 찾는 방법입니다.
      • 유효주소 : 연산 코드에 사용할 데이터가 저장된 위치
      • 방식
        • 즉시 주소 지정 방식
          오퍼랜드 필드에 데이터 자체를 직접 명히삽니다.
        • 직접 주소 지정 방식
          오퍼랜드 필드에 유효주소를 직접적으로 명시합니다.
        • 간접 주소 지정 방식
          유효주소의 주소를 오퍼랜드 필드에 명시합니다.
        • 레지스터 주소 지정 방식
          사용할 데이터를 저장한 레지스터를 오퍼랜드 필드에 직접 명시하는 방법

- 문제풀이

p. 51 : 주기억장치

p.65 : 0011

 

번외

  • 스택
    꼬치처럼, 1번째 들어간 자료는 가장 마지막에 나가는 구조입니다.

  • 1번째 들어간 자료는 가장 먼저 나갑니다.