컴퓨터 구조와 운영체제를 공부하여 문제 해결 능력을 길러 보자~!
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. 주소 지정 방식
- 오퍼랜드 필드에 데이터가 저장된 위치를 명시할 때 연산에 사용할 데이터 위치를 찾는 방법
- 오퍼랜드 필드에 명시하는 값 정리
- 즉시 주소 지정 방식 : 연산에 사용할 데이터
- 직접 주소 지정 방식 : 유효 주소(메모리 주소)
- 간접 주소 지정 방식 : 유효 주소의 주소
- 레지스터 주소 지정 방식 :연산에 사용할 데이터를 저장한 레지스터
- 레지스터 간접 주소 지정 방식 : 연산에 사용할 데이터를 메모리에 저장하고, 그 주소(유효 주소)를 지정한 레지스터
'공부 > TIL' 카테고리의 다른 글
[혼자 공부하는 컴퓨터구조+운영체제] Chapter 6 - 7 (0) | 2023.08.05 |
---|---|
[혼자 공부하는 컴퓨터구조+운영체제] Chapter 4 - 5 (0) | 2023.07.30 |
[Nods.js] dgram을 이용한 UDP 채팅 서버 구현 (0) | 2023.07.15 |
[Node.js] Socket.io를 이용한 TCP/IP chat program 구현 (0) | 2023.07.15 |
[Node.js] net을 이용하여 간단한 TCP/IP chat program 만들기 (0) | 2023.07.15 |