본문 바로가기
혼공12기 컴퓨터구조와 운영체제

[혼공컴운] 1주차-1~3쳅터(컴퓨터 구조 시작하기, 데이터, 명령어)

by Luden59 2024. 7. 3.

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

1) 문제해결

  • 컴퓨터 구조르 이해하고 있다면 문제 상황을 빠르게 진단하여, 문제 해결의 실마리를 다양하게 찾을 수 있다.
    • 컴퓨터란 미지의 대상이 아닌 분석의 대상이기 때문!!

2) 성능 용량 비용

  • 컴퓨터 구조는 성능, 용량, 비용의 문제와 직결된다.
  • 컴퓨터 구조를 알게 되면, 이를 고려하는 개발자가 될 수 있다.

3) 확인문제

  1. 2번
  2. 컴퓨터 구조를 이해하면 우리는 컴퓨터를 [미지의 대상]에서 [분석의 대상]으로 인식하게 됩니다.

1-2 컴퓨터구조의 큰 그림

0) 서론

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

1) 컴퓨터가 이해하는 정보

  • 이는 데이터와 명령어로 나뉠 수 있다.
    • 데이터: 컴퓨터가 이해하는 숫자, 문자, 이미지 동영상과 같이 정적인 정보
      • 명령어를 위해 존재하는 일종의 재료
      • ex) 1, 2
    • 명령어: 데이터를 움직이고 컴퓨터를 작동시키는 정보
      • 컴퓨터를 작동시키는 정보
      • ex) 더하라, 1과 2를

2) 컴퓨터의 4가지 핵심부품

2-0) 서론

  1. 메인보드
  2. 시스템 버스
  3. CPU(ALU:산술논리연산장치, 제어장치, 레지스터), 시스템 버스와 연결되어 있음
  4. 메모리, 시스템 버스와 연결되어 있음
  5. 보조기억장치, 시스템버스와 연결되어 있음
  6. 입출력장치(모니터, 키보드, 마우스), 시스템 버스와 연결되어 있음

2-1) 중앙처리장치(CPU)

  • 컴퓨터의 두뇌
  • 저장된 메모리를 읽고, 읽은 명령어를 해석, 실행하는 부품
  • 중요 구성 요소
    • [산술논리연산장치(ALU)]
      • 계산만을 위해 존재하는 부품
    • [레지스터]
      • CPU 내부의 작은 임시 저장 장치
      • 여러 개의 레지스터가 존재
    • [제어장치]
      • 제어 신호를 통해 명령어를 해석하는 장치
      • CPU가 메모리에 저장된 값을 읽고 싶을 때는 [메모리 읽기]라는 제어신호 사용
      • CPU가 메모리에 어떤 값을 저장하고 싶을 땐 [메모리 쓰기]라는 제어신호 사용

2-2) 주기억장치(메모리, RAM)

  • Ram과 Rom이 있음
  • 현재 실행되는 프로그램의 명령어와 데이터를 저장하는 부품
    • 프로그램이 실행되기 위해서 반드시 메모리에 저장되어 있어야함
  • 메모리에 저장된 값에 빠르고 효율적으로 접근하기 위해 [주소]라는 개념이 있음

2-3) 보조기억장치

  • 메모리 크기가 크고 전원이 꺼져도 저장된 내용을 잃지 않는 메모리
  • 하드 디스크, SSD, USB, DVD, CD-ROM 등등..
  • 메모리는 [실행되는] 프로그램을 저장
  • 보조기억장치는 [보관할] 프로그램을 저장

2-4) 입출력 장치

  • 컴퓨터 외부에 연결되어 컴퓨터 내부와 정보를 교환하는 장치
  • USB, DVD 등과 함께 주변장치라고도 불림
    • 단, USB와 DVD는 메모리를 보조하는 특별한 입출력 장치

2-5) 메인보드와 시스템 버스

  • 메인보드
    • 마더보드라고 부름
    • 여러 컴퓨터 부품을 부착할 수 있는 슬롯과 단자가 있음
  • 시스템 버스
    • 버스: 여러 장치가 서로 정보를 주고받는 통로
    • 시스템 버스: 컴퓨터의 네 가지 핵심 부품을 연결하는 가장 중요한 버스
  • 시스템 버스의 구성
    • 주소 버스: 주소를 주고 받는 통로
    • 데이터 버스: 명령어와 데이터를 주고 받는 통로
    • 제어 버스: 제어 신호를 주고 받는 통로

3) 확인 문제

  1. 컴퓨터가 이해하는 정보에는 데이터와 명령어가 있습니다.
  2. 3번
  3. [기본 숙제1] 프로그램이 실행되려면 반드시 메모리에 저장되어 있어야 한다.
  4. 1) ㄴ, 2) ㄱ
  5. 1번

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

1) 정보 단위

1-1) 비트

  • 컴퓨터가 이해하는 가장 작은 정보 단위
  • 0 또는 1 두 가지 정보를 표현할 수 있음
  • n개의 비트로 표현할 수 있는 상태는 2의 n제곱

1-2) 비트를 묶는 단위

  • 바이트(byte): 8 개의 비트를 묶는 단위
  • 킬로바이트(kB): 1000 개의 바이트를 묶는 단위
  • 메가바이트(MB): 1000 개의 킬로바이트를 묶는 단위
  • 기가바이트(GB): 1000 개의 메가바이트를 묶는 단위
  • 테라바이트(TB): 1000 개의 기가바이트를 묶는 단위

1-3) 워드

  • CPU가 한 번에 처리할 수 있는 데이터의 크기
  • 하프워드: 0.5 워드
  • 풀 워드: 1 워드
  • 더블 워드: 2 워드

2) 이진법

  • 이진법: 0과 1로만 모든 숫자를 표현하는 방법
    • 숫자가 1을 넘어가는 시점에서 자리 올림을 하는 방법으로 표현
    • 이진수: 이진법으로 표현한 수
    • ex) 1000(2) or 0b1000 >> 8표기
  • 십진법: 일상적으로 사용되는 숫자를 표현하는 방법
    • 숫자가 9를 넘어가는 시점에서 자리 올림을 하는 방법
    • 십진수: 십진법으로 표현한 수

2-1) 음수를 표현하는 방법

  • 2의 보수 표현법
    • 2의 보수: 어떤 수를 그보다 큰 2의 n제곱에서 뺀 값
    • ex) 11(2)의 2의 보수 >> 100(2) - 11(2) = 01(2)
  • 모든 0과 1을 뒤집고 1을 더하면 2의 보수를 취할 수 있다.
    • ex) 1011(2) >> 0100(2) >> 0101(2) | 0101(2) >>1010(2) >> 1011(2)
  • 플래그: 해당 수가 양수인지 음수인지 구분하기 위해 컴퓨터 내부적으로 사용되는 것

2-2) 2의 보수 표현의 한계

  • n 비트로 -2의 n제곱과 2의 n제곱을 동시에 표현할 수 없다.

3) 십육진법

3-1) 십육진법

  • 이진법으로 컴퓨터가 이해할 수 있는 숫자 정보를 직접 표현할 수는 있지만, 숫자가 너무 길어진다는 단점이 있음
  • 때문에 십육진법으로 표현하기도 함
    • 10 > A, 11 > B, 12 > C, 13 > D, 14 > E, 15 > F 로 표기
    • ex) 15(16) or 0x15 로 표기

3-2) 십육진법을 사용하는 이유(이진수 <-> 십육진수)

  • 이진수와 십육진수는 서로 변환하기 쉽다.
  • 십육진수를 이진수로 표현하기
    • 십육진수의 한 글자를 4비트의 이진수로 간주하면 쉽게 변환할 수 있다.
    • ex) 1A2B(16) >> 1(16) A(16) 2(16) B(16) >> 0001 1010 0010 1011(2)
  • 이진수를 십육진수로 표현하기
    • 이진수를 네 개씩 끊어주고, 하나하나 16진수로 변환하면 된다.
    • ex) 11010101(2) >> 1101(2) 0101(2) >> C5(16)

4) 확인문제

  1. 2000000 GB
  2. 4번
  3. [기본숙제2] 1101(2) >> 0010(2) >> 0011(2)
  4. DA(16) >> 1110 1010(2)
  5. 1번

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

1) 문자 집합과 인코딩

  • 문자 집합: 컴퓨터가 인식하고 표현할 수 있는 문자의 모음
    • ex) 문자집합이 {a, b, c, d} 인 컴퓨터는 다섯 문자는 이해할 수 있고, f, g는 이해할 수 없다.
  • 문자 인코딩: 문자를 0과 1로 변환하여 컴퓨커가 이해할 수 있도록 하는 변환 과정
  • 문자 디코딩: 0과 1로 이루어진 문자 코드를 사람이 이해할 수 있는 문자로 변환하는 과정

2) 아스키 코드

  • 아스키: 초창기 문자 집합 중 하나, 영어 알파벳과 아라비아 숫자, 일부 특수 문자를 포함함
    • 7비트로 표현할 수 있는, 즉 128 개의 문자를 표현할 수 있다.
  • 아스키 코드: 아스키 문자에 대응된 고유한 수
  • 코드 포인트: 문자 인코딩에서 글자에 부여된 고유한 값
  • 아스키 코드의 단점
    • 한글을 표현할 수 없음
    • 128 개보다 더 많은 문자를 표현할 수 없다.
  • 확장 아스키 코드
    • 아스키 코드에 1비트를 추가한 버전

3) EUC-KR

3-1) 한글의 특수성

  • 초성 중성 종성의 조합으로 이루어져 있다.

3-2) 한글 인코딩의 2가지 방법

  • 완성형 인코딩: 초성, 중성, 종성의 조합으로 이루어진 완성된 하나의 글자에 고유한 코드를 부여하는 방식
    • EUC-KR은 대표적인 완성형 인코딩 방식이다.
  • 조합형 인코딩: 초성을 위한 비트열, 중성을 위한 비트열, 종성을 위한 비트열을 할당해 그것을 조합으로 하나의 글자코드를 완성하는 인코딩 방식

3-3) EUC-KR로 한글 표현하기

  • 한글 한 글자에 2바이트 코드를 부여함
    • 즉 네 자리 십육진수로 나타낼 수 있음
  • 모든 한글을 표현할 수 없다는 단점이 있음
    • CP949: EUC-KR보다 더 확장된 버전

4) 유니코드와 UTF-8

  • 유니코드: 한글을 포함하여 대부분 나라의 문자, 특수문자, 화살표, 이모티콘까지 코드로 표현할 수 있는 통일된 문자 집합
    • 글자에 부여된 값 자체를 인코딩된 값으로 삼지 않고 이 값을 다양한 방법으로 인코딩함
    • ex) UTF-8, UTF-16, UTF-32

5) 확인 문제

  1. hongong
  2. 2번

3-1 소스 코드와 명령어

1) 고급언어와 저급언어

  • 고급언어: 사람을 위한 언어
  • 저급언어: 컴퓨터가 직접 이해하고 실행할 수 있는 언어 (명령어로 이루어짐)
  • 고급언어로 작성된 코드가 실행되려면 저급 언어(명령어)로 변환되어야 함

2) 저급 언어

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

3) 컴파일 언어와 인터프리터 언어

  • 컴파일 언어: 컴파일러에 의해 소스 코드 전체가 저급 언어로 변환되어 실행되는 고급 언어
    • 소스코드 내에 오류가 있으면 컴파일이 실패한다
    • 결과적으로 목적 코드가 나옴
  • 인터프리터 언어: 인터프리터에 의해 소스코드 한줄 한줄 실행되는 고급 언어

4) 목적파일 vs 실행 파일

  • 링킹: 목적 코드가 실행 파일이 되기 위해서 꼭 거처야 하는 작업

5) 확인 문제

  1. 3, 4번
  2. 2번

3-2 명령어의 구조

1) 연산 코드와 오퍼랜드

  • 연산 코드: 명령어가 수행할 연산
  • 오퍼랜드: 연산에 사용되는 데이터 or 데이터의 위치 (오펄랜드 필드 == 주소 필드)

2) 주소 지정 방식

  • 즉시 주소 지정 방식: 연산에 필요한 데이터를 오퍼랜드에 직접 명시
  • 직접 주소 지정 방식: 유효 주소를 직접 명시
  • 간접 주소 지정 방식: 유효 주소의 주소를 직접 명시
  • 레지스터 주소 지정 방식: 레지스터를 직접 명시
  • 레지스터 간접 주소 지정 방식: 연산에 사용할 메모리의 위치를 저장하고 있는 레지스터를 직접 명시

3) 확인 문제

  1. 2번
  2. 메모리 6번지 속 200이라는 값을 CPU로 갖고 온다.