0.4 컴퓨터는 왜 2진수를 사용힐까?
뛰어난 프로그래머? 사람과 컴퓨터의 생각차이를 잘 이해하는 것.
- 열전자방출
전자가 음극에서 양극으로 흐르는 것을 조절할 수 있는 것이 진공관
-> On / Off 두가지 상태 -> 2진수
여러개의 진공관을 연결해서 복잡한 계싼을 할 수 있다.
https://www.youtube.com/watch?v=nA_tgIygvNo&t=4s
트랜지스터
- 반도체를 이용한 트랜지스터! -> 실리콘 -> 실리콘 밸리
- 작고, 안전(고장이 덜난다)
0.5 현대적 컴퓨터의 기본 구조
- 앨런튜링
- 폰노이만 : 폰노이만 구조-> 내장형 프로그램 방식의 컴퓨터
내장형 프로그램 방식의 컴퓨터
프로그램이 메모리에 들어가고, CPU(제어+산술/논리연산)
연산 + 기억이 분리되었다.
cpu / memory / IO
----------system bus----------------
control bus
address bus
data bus
----------system bus----------------
버스들을 거쳐서 다음 버스로 간다.
Example of asinglesystem computer bus
0.6 컴퓨터 메모리의 기본 구조
- CPU <----- 캐시메모리 -----> 메모리
캐시메모리
- 자주 갖고 오는 것은 캐쉬 메모리에 넣어두고 CPU가 거기서 가져온다
순차 / 임의 접근
순차 접근(sequential Access) : 자기테이프
-> 모든 집을 다뒤져!
자기테이프
임의 접근(Random Access)
- 주소를 알고 있어 -> 효율적
- 임의 접근을 위해 현대 메모리 구조가 생김
-> RAM
- 셀마다 1bit (0/1)이 저장된다. 여러개가 저장된다.
How a cpu works - [https://www.youtube.com/watch?v=cNN_tTXABUA]
- address bus: 임의 접근을 위해 주소가 왔다갔다. -> 이놈 때문에 포인터가 있다. -> 빠르다.
- data bus: 실제 데이터가 왔다갔다 -> 포인터를 접근하지 않는 언어는 프로그래머가 이것만 신경쓰면 된다.
- controll bus : 데이터를 보낼건지 받을건지 전달.
0.7 CPU의 기본구조
프로그램이 시작되는 과정
- 내가 만든 프로그램은 보조기억장치에 저장되어 있다.
- 보조기억장치에서 메모리로 프로그램을 올린다.
- CPU는 메모리에 나열된 할 일들을 수행한다.
언어
- 기계어: 100110 0000001010 ...
- 어셈블리 언어 (니모닉) : [숫자]는 메모리 주소를 십진수로 적음
- LOAD [10]
- 고수준 언어
- a = 3
메모리에 공간을 잡고 3을 올린다. (실제로는 2진수)
4를 올린다.
3과 4를 연산하여 c 메모리에 올린다.
CPU 명령어 기본 집합 (어셈블리 언어)
-
ADD : 숫자 두 개를 더한다
-
COMPARE : 숫자들끼리 비교한다.
-
IN : 입력장치(키보드)로부터 정보를 입력받는다.
-
OUT: 출력장치로 정보를 출력한다.
-
JUMP: 지정된 메모리 주소로 점프한다.
-
JUMP IF: 조건에 따라 점프한다.
-
LOAD: 메모리에서 CPU로 정보를 가져온다.
-
STORE: 메모리에 정보를 저장한다.
CPU의 구성요소들
- 제어장치 - 실제 일을 할 때 관리
- 산술논리장치(ALU - Arithmetic Logic Unit) - 계산
- 여러가지 레지스터들 (등록부?) - 산술 논리장치의 책상위?
- 주소 레지스터: 읽거나 쓸 메모리 주소 저장 => 임의접근
- 프로그램 카운터: 다음 명령어의 메모리 주소 저장
- 데이터 레지스터: 메모리에서 읽어온 데이터 저장
- 명령어 레지스터: 메모리에서 읽어온 명령어 저장
- 머큐뮬레이터: 연산에 사용되는 데이터 저장.
(저장소..) -> [메모리] - [캐시메모리] - [레지스터(in CPU)]
but, 구조적으로는 메모리와 매우 다르다고 한다.
'저장'이라는 의미에 집중하기 보다는 구분해서 생각하는 것이 좋다.