[혼공챌린지 : 혼공단 9기 컴퓨터 구조+운영체제] 1주차

김진환·2023년 1월 8일
0

1주차 학습 정리

1. Chapter 01 : 컴퓨터 구조 시작하기

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

컴퓨터를 단순히 미지의 대상이 아닌 분석의 대상으로서 볼 수 있습니다.
컴퓨터 문제 해결시 컴퓨터 구조를 이해하고 있다면, 다양한 실마리를 통해서 문제 해결에 도움을 받을 수 있습니다.
위와 같은 이유로 대부분의 기업에서 각종 기술 면접에서 컴퓨터 구조에 관한 소양 요구하고 있습니다.
또한 작성한 프로그램(웹사이트 등)을 사용자가 사용시 필요한 성능을 프로그래머라면 어느 정도 예상할 수 있어야합니다.

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

컴퓨터가 이해하는 정보

컴퓨터는 0과 1로 표현된 정보를 이해하며 크게 데이터명령어로 구분됩니다.

  • 데이터 : 컴퓨터에 저장된 정보(숫자, 문자, 이미지, 동영상)
  • 명령어 : 데이터를 움직이고 컴퓨터를 작동시키는 정보

컴퓨터의 4가지 핵심 부품

  • 중앙처리장치 [CPU(Central Processing Unit)] : 컴퓨터의 두뇌, 메모리에 저장된 명령어 및 데이터를 읽어서 해석, 실행하는 부품
    • 산술논리연산장치 [ALU(Arithmetic Logic Unic)] : 계산만을 위해 존재하는 부품, 컴퓨터 내부의 대부분의 계산을 수행
    • 레지스터 [register] : CPU 내부의 여러 개의 임시 저장장치, 프로그램 실행 시 필요 값을 임시 저장
    • 제어장치 [CU(Control Unit)] : 제어 신호(control signal)를 내보내고 명령어를 해석하는 장치
  • 주기억장치 [main memory] : 현재 실행되는 프로그램의 명령어와 데이터를 저장하는 부품
  • 보조기억장치 [secondary storage] : 메모리의 약점(적은 용량, 휘발성)을 보조하는 장치 (HDD, SSD, USB Disk 등)
  • 입출력장치 [I/O(input/output) device] : 컴퓨터 외부에 연결 되어 컴퓨터 내부와 정보를 교환하는 장치(마이크, 스피커, 프린터, 마우스, 키보드), 보조 기억장치도 관점에 따라서는 입출력장치로 볼 수 있지만 보통의 경우 구분해서 사용한다.

2. Chapter 02 : 데이터

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

정보 단위

컴퓨터는 0과 1만 이해할 수 있으며, 0과 1만 표현할 수 있는 가장 적은 단위를 비트라고 합니다.
1가지 비트가 늘어날때마다 2배씩 표현할 수 있는 상태가 늘어납니다.
따라서, n비트는 2n2^n 가지의 상태를 표시할 수 있습니다.

  • 비트(bit) : 0과 1만 표시할 수 있는 컴퓨터의 가장 작은 표현 단위
  • 바이트(byte) : 8개의 비트를 묶은 단위
    • 8bit = 1byte (바이트)
    • 1000byte = 1KB (킬로바이트)
    • 1000KB = 1MB (메가바이트)
    • 1000MB = 1GB (기가바이트)
    • 1000GB = 1TB (테라바이트)
  • 워드(word) : CPU가 한 번에 처리할 수 있는 데이터 크기(32비트 CPU는 32비트가 1워드, 64비트 CPU는 64비트가 1워드)

이진법

이진법(binary)은 0과 1만으로 모든 수자를 표현하는 방법입니다.
숫자가 1을 넘어가느 시점에 자리 올림을 하여 모든 숫자를 표현합니다.
ex) 2 = 0010, 8 = 1000

컴퓨터에서 이진수의 음수 표현

수학에서는 음수 표현 시 -기호를 통해서 표현합니다.
컴퓨터는 마이너스 부호를 이해할 수 없기 때문에 부호 없이 0과 1로만 음수를 표현합니다.
0과 1로 음수 표현 시, 보통 2의 보수(two's complement)를 음수로 간주하는 방법을 사용합니다.

  • 2의 보수 구하기 : ex) 4 = 0100
    1. 이진 수의 모든 0과 1을 뒤집니다. (1의 보수로 변환) ex) 0100 => 1011
    2. 뒤집힌 값에 1을 더합니다. ex) 1011 => 1100
    3. 해당 값이 2의 보수 입니다.

십육진법

이진법으로 데이터 표현시 너무 길어진다는 단점을 해결하기 위해 십육진법을 사용합니다.
십육진법(hexadecimal)은 수가 15를 넘어가는 시점에서 자리 올림하여 숫자 표현하는 방식입니다.
십육진법을 주로 사용하는 이유 중 하나는 이진수와 십육진수 간의 변환이 쉽기 때문입니다.

  • 01 = 0x1
  • 02 = 0x2
  • 03 = 0x3
  • 04 = 0x4
  • 05 = 0x5
  • 06 = 0x6
  • 07 = 0x7
  • 08 = 0x8
  • 09 = 0x9
  • 10 = 0xA
  • 11 = 0xB
  • 12 = 0xC
  • 13 = 0xD
  • 14 = 0xE
  • 15 = 0xF

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

문자 집합과 인코딩

  • 문자 집합(character set) : 컴퓨터가 인식하고 표현할 수 있는 문자의 모음
  • 문자 인코딩(character encoding) : 문자 집합에 속한 문자를 컴퓨터가 이해할 수 있는 0과 1로 구성된 문자 코드로 변환하는 과정
  • 문자 디코딩(chracter decoding) : 0과 1로 이루어진 문자 코드를 사람이 이해할 수 있는 문자로 변환하는 과정

아스키 코드

아스키(ASCII : Amenrican Standard Code for Information Interchange)는 초창기 문자 집합 중 하나
8비트로 표현되며, 문자 표현에는 7비트를 사용하며, 표현할 수 있는 정보는 272^7개입니다.
총 128개의 문자를 표현할 수 있으며, 1비트는 패리티 비트(parity bit)로 오류 검출을 위해 사용되는 비트입니다.
한글과 같이 아스키 문자 집합 외의 문자, 특수문자를 표현할 수 없는 문제가 있습니다.

EUC-KR

EUC-KR은 한글 인코딩 방식입니다.
한글은 두 가지 방식의 인코딩 방식이 존재합니다.

  • 한글 완성형 인코딩 : 초성, 중성, 종성의 조합으로 이루어진 완성된 하나의 글자에 고유한 코드를 부여하는 방식
  • 한글 조합형 인코딩 : 초성, 중성, 종성을 위한 비트영을 할당하여 그것들의 조합으로 하나의 글자를 완성하는 방식

EUC-KR은 KS X 1001, KS X 1003이라는 문자 집합을 기반으로 하는 완성형 인코딩 방식으로, 한글 한 글자에 2바이트 크기의 코드를 부여합니다.
총 2,350개의 한글을 표현할 수 있으며, 모든 한글 조합을 표현할 수 있지는 않습니다.

유니코드와 UTF-8

유니코드(unicode)는 모든 언어를 아우르는 문자 집합과 통일된 표준 인코딩 방식입니다.
한글을 포함한 대부분 나라의 문자, 특수문자, 화살표, 이모티콘까지 표현할 수 있습니다.
유니코드 인코딩 방법은 UTF-8, UTF-16, UTF-32 등이 있습니다.

3. Chapter 03 : 명령어

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

고급 언어와 저급 언어

  • 고급 언어(high-level programming language) : 사람을 위한 언어 (C, C++, Java, Python)
  • 저급 언어(low-level programming language) : 컴퓨터가 직접 이해하고 실행할 수 있는 언어
    • 기계어(machine code)
    • 어셈블리어(assembly language)

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

고급 언어로 작성한 소스 코드가 저급 언어로 변환되는 방식은 컴파일 방식과 인터프리트 방식이 있습니다.
컴파일 방식의 프로그래밍 언어를 컴파일 언어, 인터프리트 방식의 프로그래밍 언어를 인터프리터 언어라고 합니다.

  • 컴파일 언어 : 컴파일러(compiler)에 의해 소스 코드 전체가 저급 언어로 변환(컴파일(compile)되어 실행되는 고급 언어
  • 인터프리터 언어 : 소스 코드를 한 줄씩 차례대로 실행하는 인터프리터(interpreter)에 의해 한 줄씩 저급 언어로 변환하여 실행되는 고급 언어

목적 파일 vs 실행 파일

  • 목적 파일 : 컴퓨터가 이해하는 저급 언어인 목적 코드로 이루어진 파일
  • 실행 파일 : 목적 파일에서 없는 외부 기능을 해당 목적 파일과 연결하는 링킹(linking)을 통해서 구현된 실행 가능한 파일

03-2 : 명령어의 구조

연산 코드와 오퍼랜드

명령어는 연산 코드와 오퍼랜드로 구성되어 있습니다.

  • 연산 코드(operation code) : 명령어가 수행할 연산, 연산자라고도 합니다.
    1. 데이터 전송 : MOVE, STORE, LOAD(FETCH), PUSH, POP 등
    2. 산술/논리 연산 : ADD / INCREMENT / AND / COMPARE 등
    3. 제어 흐름 변경 : JUMP, CONDITIONAL JUMP, HALT, CALL, RETURN 등
    4. 입출력 제어 : READ, WRITE, START IO, TEST IO 등
  • 오퍼랜드 (operand) : 연산에 사용할 데이터 또는 연산에 사용할 데이터가 저장된 위치, 피연산자라고도 합니다.
    • 대부분 연산에 사용할 데이터가 직접 사용되지 않고, 저장된 위치인 메모리 주소나 레지스터 이름이 담긴다.
    • 오퍼랜드의 개수에 따라 명령어를 0-주소 명령어, 1-주소 명령어, 2-주소 명령어, 3-주소 명령어라고 합니다.

주소 지정 방식

명령어의 길이 때문에 오퍼랜드에 직접 데이터를 담는 대신 메모리 주소를 주로 사용합니다.
연산 코드에 사용할 데이터가 저장된 위치를 유효 주소(effective address)라고 합니다.
오퍼랜드 필드의 데이터가 지정된 위치를 명시할 때 데이터 위치(유효 주소)를 찾는 방법을 주소 지정 방식(addressing mode)라고 합니다.

  • 즉시 주소 지정 방식 (immediate addressing mode) : 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시, 가장 빠릅니다.
  • 직접 주소 지정 방식 (direct addressing mode) : 유효 주소(메모리 주소)를 오퍼랜드 필드에 직접 명시, 유효 주소에 제한이 생길 수 있습니다.
  • 간접 주소 지정 방식 (indirect addressing mode) : 유효 주소의 주소를 오퍼랜드 필드에 명시, 표현할 수 있는 유효 주소의 범위가 넓지만, 두 번의 메모리 접근이 있어서 일반적으로 느린 방식입니다.
  • 레지스터 주소 지정 방식 (register addressing mode) : 연산에 사용할 데이터를 저장한 레지스터를 오퍼랜드 필터에 직접 명시, CPU 내부에 있는 레지스터에 접근하여 직접 주소 지정 방식보다 빠르다. 직접 주소 지정 방식과 마찬가지로 제한이 생길 수 있습니다.
  • 레지스터 간접 주소 지정 방식 (register indirect addressing mode) : 유효 주소를 저장한 레지스터를 오퍼랜드 필드에 명시하는 방법, 간접 주소 지정 방식과 비슷하지만 메모리 접근하는 횟수가 한 번으로 줄어 빠릅니다.

스택과 큐

  • 스택(stack) : LIFO(Last In First Out) 자료 구조, 먼저 넣은 데이터가 나중에 출력된다.
  • 큐(Queue) : FIFO(First In First Out) 자료 구조, 먼저 넣은 데이터가 먼저 출력된다.

1주차 미션

1. 기본 미션 : p. 51의 확인 문제 3번, p. 65의 확인 문제 3번 풀고 인증하기

1.1. p. 51 : 확인 문제 3번 : 다음 설명의 설명의 빈칸에 들어갈 알맞은 내용을 써 보세요.

프로그램이 실행되려면 반드시 (메모리)에 저장되어 있어야 합니다.

1.2. p. 65 : 확인 문제 3번 : 1101(2)1101\begin{smallmatrix}(2)\end{smallmatrix}의 음수를 2의 보수 표현법으로 구해 보세요.

1101 -> 0010 -> 0011

1101(2)1101\begin{smallmatrix}(2)\end{smallmatrix}을 음수로 표현한 값은 0011(2)0011\begin{smallmatrix}(2)\end{smallmatrix}입니다.

2. 선택 미션 : p. 100의 스택과 큐의 개념을 정리하기

2.1. 스택

스택(stack)이란 바구니와 비슷한 자료 구조입니다.
흔히 바구니에 물건을 넣는 경우를 생각하면 됩니다.
한 바구니에 물건을 넣을 때는 가장 아래부터 차곡차곡 넣고,
빼낼 때는 가장 위의 물건부터 하나씩 꺼내게 됩니다.
위와 같은 특성 때문에 스택은 LIFO(Last In First Out) 자료 구조라고도 합니다.

2.2. 큐

큐(Queue)는 놀이공원 줄 서기와 비슷한 자료 구조입니다.
줄을 설때는 가장 먼저 온 사람부터 순서대로 줄을 섭니다.
또한 줄의 가장 앞 사람부터 입장합니다.
위와 같은 특성 때문에 큐는 FIFO(First In First Out) 자료 구조라고도 합니다.

참조 자료

  • 혼자 공부하는 컴퓨터 구조+운영체제 : Chapter 01 ~ 03
profile
발전 중인 주니어 개발자

0개의 댓글