공부/TIL

[혼자 공부하는 컴퓨터구조+운영체제] Chapter 1 - 3

Ail_ 2023. 7. 29. 14:29
컴퓨터 구조와 운영체제를 공부하여 문제 해결 능력을 길러 보자~!

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

목표
- 컴퓨터 구조를 공부하는 이유를 이해한다.
- 컴퓨터 구조의 큰 그림을 이해한다.

01. 컴퓨터 구조

1. 컴퓨터 구조를 공부해야 하는 이유

- 코드 단에서는 해결할 수 없는 문제를 정확히 파악하고 해결하기 위하여 공부해야 한다.

 

2. 컴퓨터가 이해하는 정보

- 데이터 : 0과 1로 표현되는 숫자, 문자, 이미지, 동영상 등의 정적인 정보

- 명령어 : 데이터를 움직이고 컴퓨터를 작동시키는 정보

 

3. 컴퓨터의 네 가지 핵심 부품

- 중앙처리장치(CPU)

    - 산술논리연산장치(ALU) : 계산기

    - 레지스터 : 프로그램 실행에 필요한 값들을 위한 작은 임시 저장 장치

    - 제어장치 : 제어 신호(= 전기 신호 : 메모리 읽기/쓰기)를 내보내고 명령어를 해석하는 장치

- 주기억장치(메모리)

    - 현재 실행되는 프로그램의 명령어와 데이터를 저장하는 부품

    - 주소 : 메모리에 효율적이고 빠르게 접근하기 위해 사용하는 개념

- 보조기억장치 : 전원이 꺼져도 보관 프로그램을 저장하는 부품

- 입출력장치 : 컴퓨터 외부에 연결되어 컴퓨터 내부와 정보를 교환하는 장치 ex. 모니터, 마우스, 키보드 등

4. 메인보드와 시스템버스

- 메인보드 main board = 마더보드 mother board

   - 버스 bus : 메인보드에 연결된 부품들이 서로 정보를 주고받기 위해 존재하는 통로

- 시스템버스 system bus

    - 여러 다양한 버스 중 네 가지 핵심 부품을 연결하는 가장 중요한 버스

시스템버스
주소 버스 address bus 데이터 버스 data bus 제어 버스 control bus
주소를 주고받는 통로 명령어와 데이터를 주고받는 통로 제어 신호를 주고받는 통로

 

Chapter 2. 데이터

목표
- 컴퓨터가 이해하는 정보 단위를 이해한다.
- 0과 1로 다양한 숫자를 표현하는 방법을 이해한다.
- 0과 1로 다양한 문자를 표현하는 방법을 이해한다.

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

1. 정보 단위

- 비트 bit : 0과 1을 나타내는 가장 작은 정보 단위

1byte 8bit
1kB 1,000byte
1MB 1,000kB
1GB 1,000MB
1TB 1,000GB

+ 1,024byte = 1KiB

- 워드 word : CPU가 한번에 처리할 수 있는 데이터 크기 ex. CPU가 한번에 32비트 처리할 수 있다 -> 1word = 32bit

    - 하프 워드 half word : 정의된 워드의 절반 크기

    - 풀 워드 full word : 1배 크기

    - 더블 워드 double word : 2배 크기

-> 현재 컴퓨터의 워드 크기는 대부분 32bit(=x86) / 64bit(=x64)

 

2. 이진법

- 이진수

    - 이진법으로 표현한 수.

    - 십진수와 구분하기 위해 이진수 끝에 아래첨자(2)를 붙이거나 이진수 앞에 0b를 붙여 표현

    - 이진수의 음수 표현 : 2의 보수 tow's complement = 어떤 수를 그보다 큰 2n에서 뺀 값

    - 플래그 : 컴퓨터 내부에서 이 수가 양수인지 음수인지 구분하기 위해 사용하는 부가 정보

3. 십육진법 hexadecimal

- 십육진법 : 수가 15를 넘어가는 시점에 자리 올림을 하는 숫자 표현 방식

- 십육진수와 이진수는 서로 변환하기가 쉽기 때문에 십육진법을 사용

    - 1A2B(16) -> 각 자리의 숫자를 이진수로 변환하여 그대로 이어붙이면 됨 -> 0001 + 1010 + 0010 + 1011

    - 11010101(2) -> 네 개씩 끊고, 네 개의 숫자를 하나의 십육진수로 변환하여 그대로 이어붙이면 됨 -> D + 5

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

1. 문자 집합

- 컴퓨터가 인식하고 표현할 수 있는 문자의 모음

 

2. 문자 인코딩

- 문자를 0과 1로 변환하는 과정

- 문자 코드 : 인코딩 후 0과 1로 이루어지 결과값

 

3. 문자 디코딩

- 0과 1로 이루어진 문자 코드를 사람이 이해할 수 있는 문자로 변환하는 과정

 

4. 아스키 코드

- 아스키ASCII : 초창기 문자 집합

- 영어 알파벳, 아라비아 숫자, 일부 특수 문자 포함

- 아스키 문자 : 아스키 문자 집합에 속한 문자

- 문자 각 7비트로 표현하기 때문에 2의 7승, 총 128개의 문자를 표현 가능

 

5. 한글 인코딩

- 완성형 인코딩 : 초성, 중성, 종성의 조합으로 이루어진 하나의 글자에 고유한 코드를 부여하는 인코딩 방식

- 조합형 인코딩 : 초성을 위한 비트열, 중성을 위한 비트열, 종성을 위한 비트열을 각각 할당, 조합하는 방식

 

6. EUC-KR

- 완성형 인코딩 방식

- 한글을 2byte 크기로 인코딩

- 총 2,350개 정도의 한글 단어 표현 가능 -> 모든 한글 조합 표현 X

- CP949 : EUC-KR의 확장된 버전

 

7. 유니코드 unicode

- 대부분 나라의 문자, 특수문자, 화살표, 이모티콘 등을 코드로 표현할 수 있는 통일된 문자 집합

- 현대 문자를 표현할 때 가장 많이 사용되는 표준 문자 집합

- 다양한 인코딩 방법이 존재함 ex. UTF-8, UTF-16, UTF-32 등

- UTF-8 : 1byte부터 4byte까지의 인코딩 결과를 만들어냄

 

Chapter 3. 명령어

목표
- 고급 언어와 저급 언어의 차이를 이해한다.
- 컴파일 언어와 인터프리터 언어의 차이를 이해한다.
- 명령어를 구성하는 연산 코드와 오퍼랜드에 대해 학습한다.
- 명령어의 주소 지점 방식에 대해 학습한다.

04. 소스 코드와 명령어

1. 저급 언어

- low-level programming language

- 컴퓨터가 직접 이해하고 실행할 수 있는 언어

- 기계어 machine code : 0과 1로 이루어진 명령어 모음

- 어셈블리어 asembly language : 기계어를 읽기 편한 형태로 번역한 언어

 

2. 고급 언어

- high-level programming language

- 사람을 위한 언어

- 컴파일 언어(컴파일 방식)

    - 소스 코드 전체가 저급 언어로 변환되는 고급 언어

    - C : 대표적인 컴파일 언어

- 인터프리터 언어(인터프리트 방식)

    - 인터프리터에 의해 소스 코드가 한 줄씩 실행되는 고급 언어

    - Python : 대표적인 인터프리터 언어

- 일반적으로 인터프리터 언어가 컴파일 언어보다 속도가 좀더 빠름

- 컴파일 언어와 인터프리터 언어를 완벽하게 구분하는 것은 불가능

3. 목적 파일

- 목적 코드로 이루어진 파일

- 링킹 lingking : 목적 코드가 실행 파일이되기 위해 거쳐야하는, 변환된 목적 코드에 존재하지 않는 외부 기능을 연결 짓는 작업

 

4. 연산 코드 operation code

= 연산자

- 명령어가 수행할 연산

- 연산 코드 필드 : 연산 코드가 담기는 영역

- 연산 코드 유형

   - 데이터 전송 ex. MOVE, STORE, LOAD(FETCH), PUSH, POP 등

   - 산술/논리 연산 ex. ADD/SUBTRACT/MULTIPLY/DIVIDE, AND/OR/NOT 

   - 제어 흐름 변경 ex. JUMP, CALL, RETURN 

   - 입출력 제어 ex. READ(INPUT), WRITE(OUTPUT) 

 

5. 오퍼랜드 operand

= 피연산자

- 연산에 사용할 데이터, 연산에 사용할 데이터가 저장된 위치

- 오퍼랜드 필드(주소 필드) : 오퍼랜드가 담기는 영역

색칠된 부분 : 연산코드, 나머지 부분 : 오퍼랜드

6. 주소 지정 방식

- 오퍼랜드 필드에 데이터가 저장된 위치를 명시할 때 연산에 사용할 데이터 위치를 찾는 방법

- 오퍼랜드 필드에 명시하는 값 정리

    - 즉시 주소 지정 방식 : 연산에 사용할 데이터

    - 직접 주소 지정 방식 : 유효 주소(메모리 주소)

    - 간접 주소 지정 방식 : 유효 주소의 주소

    - 레지스터 주소 지정 방식 :연산에 사용할 데이터를 저장한 레지스터

    - 레지스터 간접 주소 지정 방식 : 연산에 사용할 데이터를 메모리에 저장하고, 그 주소(유효 주소)를 지정한 레지스터