Hardware : Software = Body : Mind
다른 컴퓨터로부터 다른 컴퓨터로부터
사용자 -> 입력장치 -> 컴퓨터 본체 -> 출력장치
키보드, 마우스 등 ↓ 스피커, 프린터 등
↓
가장 큰 부품: 전원 공급 장치
그래픽 카드 크기↑
CPU, 반도체 열↑ -> 냉각장치 안에 있음
메인보드-> 중앙 처리장치/주 기억장치(메모리)
가운데 *전원 끄면 메모리 없어짐
CPU
- 주 기억장치로만 소통함
주 기억장치(메모리, RAM-Random Access Memory)
- 전원을 끄면 데이터가 사라짐 (Volatile type of memory)
- 빠름
그래픽 카드(Graphics Card)
- GPU: 그래픽 카드에 들어간 CPU -> 냉각장치 있음, 메모리 존재
보조 기억 장치
- 전원을 꺼도 데이터 존재
- 느림
- Ex) 하드 디스크 드라이브(HDD, 움직이는 부품 있음), SSD(USB의 발전형) -> 물리적으로 움직이는 부품 X, 비쌈
전원을 킬 때
부팅 절차
- 전원공급
- 부트 프로그램 실행 (ROM: Read Only Memory)
- 하드웨어 검사
- 운영 체제(OS) 로드: 보조기억장치에 저장되어 있음
= 보조 기억 장치 -> 주기억장치로 복사 -> CPU가 사용
- 운영 체제 실행
운영 체제의 역할
종류: UNIX, Linux(무료 OS), android, ios, mac os, window
사용자 -> 시스템 프로그램, 응용프로그램 -> OS (Operating System) ->
[ Kernel -> 하드웨어(CPU, 메모리, 보조기억장치, 입출력 장치) ]
OS: 하드웨어 운영 조절(어느 프로그램이 CPU를 더 사용해야 하는지 정함), Interface 제공
컴퓨터가 2진수를 사용하는 이유
모든 데이터를 숫자로 바꾸어서 저장 -> 0, 1
Decimal numerical system <-> Binary numerical system
0 – 0 5 – 101
1 – 1 6 – 110
2 – 10 7 - 111
3 – 11
4 – 100
에디슨이 발명한 진공관 -> 컴퓨터로 발전(에니악) -> 트랜지스터 발명(실리콘사용 반도체)
실리콘을 사용하는 반도체 -> 그래서 실리콘밸리
트랜지스터 -> 진공관의 기능과 같음, 안전성, 작음
Quad-core 코어 17 -> 트랜지스터 1억 6천개
현대적 컴퓨터의 기본 구조
과거 프로그래밍
è 플러그 보드 (배선 꼽았다 뺐다)
è 펀치카드
앨런 튜링: Universal Turing machine (UTM)
폰 노이만: 폰 노이만 구조, 핵폭탄 개발 실험 참여
- 폰 노이만 구조 (애니악 -> 폰 노이만 구조로 업그레이드)
: 내장형 프로그램 방식의 컴퓨터 (Stored-program computer)
CPU
Input -> Control Unit -> Output
Device Arithmetic/Logic Unit Device
↓↑
Memory Unit
컴퓨터 메모리의 기본 구조
CPU -> 메모리
: 연산 : 저장
↔
캐쉬 메모리
순차 접근(Sequential access): 테이프처럼 -> 모든 메모리를 확인해야함
임의 접근(Random access): 메모리 -> 정보를 얻고 정보 바탕으로 메모리 찾음
Binary Digit = bit
→(어느 주소에 있는)→ ADDRESS
CPU →(데이터를 보내/저장해)→ CONTROL RAM
↔(데이터수신/발신)↔ DATA
C 언어의 포인터가 있는 이유: Address bus 때문에
-> 하드웨어 프로그램 만드는데 유리(빠름)
CPU의 구조
프로그램이 시작되는 과정
CPU (프로그램 개발이 CPU에게 어떤 일을 해야 하는지 알려주는 것)
↕
주기억장치(메모리) 보조기억장치(HDD, SSD)
프로그램 ← 프로그램
고수준 프로그래밍 언어 A = 3
(High level programming language) B = 4
C = A + B
(니모닉, Mnemonic)
어셈블리 언어 LOAD [10] [메모리의 주소]
(Assembly language) ADD [11]
STORE [12]
기계어 100110 0000001010
(Machine code) 110011 0000001011
111010 0000001100
CPU 명령어 집합(Instruction Set)
| Functional Group | Example Mnemonics |
| Move Instructions | MOV |
| Math Instructions | MUL DIV ADD SUB |
| Logic Instructions | AND IOR XOR NEG |
| Rotate/Shift Instructions | ASR LSR SL |
| Bit Instructions | BEST BCLR BTG BTST |
| Compare/Skip/Branch | BTSC BTSS CPBEQ CPBGT |
| Flow Control Instructions | BRA CALL RCALL REPREAT |
| Shadow/Stack Instructions | LNK POP PUSH ULNK |
| Control Instructions | NOP CKRWDT PWRSAV RESET |
| DSP Instructions | MAC LAC SAC SFTAC |
CPU의 구성 요소들
제어 장치 ↔
(Control Unit)
여러가지
↓ 레지스터들
(Registers)
산술논리장치 ↔
(Arithmetic Logic Unit)
| 레지스터 종류 | 기능 |
| 주소 레지스터 | 읽거나 쓸 메모리 주소 저장 |
| 프로그램 카운터 | 다음 명령어의 메모리 주소 저장 |
| 데이터 레지스터 | 메모리에서 읽어온 데이터 저장 |
| 명령어 레지스터 | 메모리에서 읽어온 명령어 저장 |
| 어큐뮬레이터 | 연산에 사용되는 데이터 저장 |
CPU가 일하는 방법
프로그램 카운터(Program Counter, PC) : 명령어가 어느 주소에 있는지 알려줌
메모리 주소 레지스터(Memory Address Register) : 명령어에 접근함
메모리 데이터 레지스터(Memory Data Register) : 명령어를 가지고 옴
명령어 레지스터(Current Insturction Register) : 명령어가 옮겨감
프로그램 카운터(Program Counter) :
항상 다음번에 가지고 와야할 메모리 주소를 가지고 있어야 하기 때문에 숫자가 하나 증가함
명령어 레지스터 : 명령어가 제어장치로 들어감 (디코딩)
메모리 주소 레지스터 : 10이라는 주소가 입력됨
메모리 데이터 레지스터 : 10 주소의 3이라는 값이 입력
어큐뮬레이터 : 산술 논리 장치와 계산하기를 시작함
정보의 단위
클라우드 섀넌 : 정보의 기본 단위 '비트' 처음 사용
데이터 vs 정보
데이터 ↔ 처리과정 ↔ 정보
(디지털 정보의 단위는 디지털 데이터의 단위이기도 합니다)
비트 bit (Binary Digit) 정보의 기본 단위
0
1 바이트 byte = 8 비트 bit 메모리 주소의 기본 단위
01010101
1 워드 word = 16 비트 bit CPU가 데이터를 다루는 기본 단위
= 32 비트 bit = 레지스터의 크기
01010101 01010101
01010101 01010101 01010101 01010101
ex)
8 비트 컴퓨터 -> 8 비트 = 1 워드
64 비트 아이폰 -> 64 비트 = 1 워드
2진수 (Binary numbers)
10진수
256
= 200 + 50 + 6
= 2 * 100 + 5 * 10 + 6 * 1
= 2 * 10^2 + 5 * 10^1 + 6 * 10^0
2진수
10(2진수) = 1 * 2^1 + 0 * 2^0 = 2
11(2진수) = 1 * 2^1 + 1 * 2^0 = 3
10진수 -> 2진수
148(10진수) ÷ 2 ÷ 2 ÷ 2 ÷ 2 ÷ 2 ÷ 2 ÷ 2 ÷ 2 ...
몫 74 37 18 9 4 2 1 0
나머지 0 0 1 0 1 0 0 1
=> 148(10진수) = 1001 0100(2진수)
ex) 4비트 2진수 더하기
0110 (10진수 6)
+ 0111 (10진수 7)
------------
1101 (10진수 13)
부호가 있는 8비트 정수 (Signed Integer) -> Two's complement(2의 보수) 방법
10진수 -5 (10진수 -> 2진수)
1. 5를 2진수로 0000 0101
2. 보수 complement 1111 1010
3. 더하기 1 1111 1011
↑
첫 비트가 1이면 음수
0이면 양수
0000 0101
+ 1111 1011
------------------------
1 0000 0000
Two's complement -> -0 = 0
(음의 정수 2진수 -> 10진수)
1. 1001 1110 (첫 비트 1 = 음수)
2. 보수 complement 0110 0001
3. 더하기 1 0110 0010
1 * 2^6 + 1 * 2^5 = 98 -> -98
※부호가 있는 정수인지 부호가 없는 정수인지 확인※
부호가 있는 정수 (signed integer)
1000 0000 ~ 0111 1111
-128 ~ 127
부호가 없는 정수 (unsigned integer)
0000 0000 ~ 1111 1111
0 ~ 255
-> 표현할 수 있는 숫자의 갯수는 같음 (256개)