컴퓨터는 크게 하드웨어와 소프트웨어로 나뉜다.
하드웨어 : 손으로 만질 수 있는 것
소프트웨어 : 순수한 '정보'
인간으로 치면 육체(하드웨어)와 정신(소프트웨어) 로 비유할 수 있다.
사용자(사람)이 입력장치를 사용해 컴퓨터에게 정보를 제공하면,
컴퓨터는 정보를 처리해 결과를 출력장치를 통해 내보낸다.
다양한 입/출력장치가 계속 발전하고 있다.
최근에는 입력을 제공하는 것이 사람이 아닌 다른 컴퓨터가 될 수도,
출력을 사람이 아닌 다른 컴퓨터를 거치도록 할 수 있다.
메인보드(마더보드)
중앙처리장치(CPU) - 메인보드 중앙에 위치, 크기는 작다. 쿨러가 훠얼씬 크다
주기억장치 - CPU 옆자리에 꽂는다. 물리적으로도 가깝고, 회선으로 연결되어 서로 정보를 주고받는다.
보조기억장치 - 주기억장치만으로는 모든 정보를 저장할 수 없으므로, 보조기억장치가 필수. 회선으로 연결되어 다른 위치에 꽂힌다.
입출력장치 - 요즘은 거의 USB를 사용해서 연결
디스플레이, 그래픽카드 - 일반적으로는 그래픽카드에 연결되어 화면을 보는 것이 일반적이었지만, 최근에는 메인보드 칩셋에 그래픽카드 기능이 함께 들어있는 경우도 있다.
Central Proccessing Unit(CPU)
Primary Storage - Computer Memory
전원을 끄면 데이터가 사라짐
Random Access Memory(RAM)
임의접근이 가능한 메모리 ←→ 순차 접근 메모리
따라서 보조기억장치가 꼭 필요하다.
메모리를 사용하는 이유는 속도가 빠르기 때문!
Graphics Card
초기 그래픽카드는 메모리만큼 얇았기 때문에 Card라고 부를만했음
기술이 발전하면서 두꺼운 형태의 그래픽카드가 되었음
자체적으로 Fan을 가지고 있음 - 그래픽카드 안에 CPU가 들어가있다는 것(=GPU)
그래픽카드 안에 그래픽 처리 용도의 CPU와 메모리가 들어가 있고, 이것의 성능에 따라 가격이 천차만별
딥러닝처럼 연산이 많은 작업을 수행해야 하는 경우 그래픽카드를 여러 개 꽂아서 사용하는 것이 일반적이다.
Secondary Storage
컴퓨터를 꺼도 정보가 유지된다.
단점은? 주기억장치(메모리)보다 훨씬 느리다.
운영체제에는 Unix, Linux, Windows, MacOS, iOS, Android가 있다.
핵심기능은 대부분 비슷하다
사용자는 시스템 프로그램 또는 응용 프로그램을 사용하려고 한다.
사용자는 하드웨어를 통해 입력하고 결과를 받을 수 있다.
옛날 개발자들은 하드웨어 조작 프로그램을 전부 따로 만들었다 - 응용프로그램 만들기가 힘들었음!
그래서 공통적으로 개발해야할 부분을 묶어서 같이 사용하자 했던것이 운영체제의 시작!
특히 하드웨어를 어떻게 사용할것인가는 정말 중요한 문제였음. 운영체제를 만드는 사람들이 미리 만들어서 다른 개발자들에게 제공해주었음.
그 중에서도 커널(Kernel)이라는 것이 하드웨어를 담당한다.
요즘에는 프로그램을 딱 하나만 실행하지 않고, 여러개의 프로그램을 사용한다. 누가 먼저 CPU와 메모리를 사용할 것인지 경쟁하게 된다
이 때 컴퓨터의 자원들(CPU, 메모리)를 관리해주는 것이 운영체제의 중요한 역할 중 하나!
컴퓨터는 다양한 형태의 정보를 숫자로 바꾸어 처리한다. (아주 중요한 성질!)
이때 사용하는 숫자가 바로 2진수!
왜 2진수를 사용하는지는 에디슨으로 거슬러올라가고...
필라멘트에 열을 가하면 전자를 방출하는데, 양으로 된 극을 가져다놓으면 전자가 빨려들어가면서 전자가이동하면서 전류가 흐른다(에디슨효과, 열전자방출)
이 효과를 이용해서 진공관이라는 것을 만들었는데, 진공관의 기능은 전자가 흘렀다가 흐르지 못했다가 할 수 있도록! 즉 전자 흐름을 제어하는 것이었다.
껐다 켰다 - 이것이 0과 1로 대응되고, 컴퓨터가 2진수를 사용하는 근본적인 이유가 되었다.
진공관의 구조를 보면 다음과 같다!
음극을 뜨겁게 달구면 전자가 나오고, 이것이 가운데의 control grid 사이로 지나갈 수 있다.
이때 control grid에 약한 전류를 넣었다 뺐다 하면 전자가 위로 올라갈 수 있거나 /없게 된다.
control grid 에 음전압을 걸어주면 전자도 음이므로 통과할 수 없게 되고,
양의 전압을 걸어주면 전자가 통과할 수 있게 된다.
최초의 컴퓨터 에니악을 보면 엄청나게 많은 진공관이 달려있다.
그러나 여러가지 불편함이 있었다.
벨 연구소에서 트랜지스터 효과를 발견했다!
이때부터 정보기술이 현저하게 빨라지게 되어었다.
트랜지스터는 반도체를 사용해서 만든다. 대표적인 반도체는 실리콘!
진공관과 비슷한 기능을 수행하지만, 안정적으로 작동할 수 있어서 이것으로 CPU, 메모리를 만들 수 있게 되었다.
다리 세개가 달려있고, collector, emmiter, base로 되어있다. b에 들어오는 전압을 조절해서 전기 흐름을 조절할 수 있다.
제어에 사용하는 전기는 아주 작은 신호이다.
트랜지스터를 아주 소형화해서 엄청나게 많이 집어넣은것을 집적회로(Integrated Circuits)라고 한다. i7의 경우 11억6천만개의 트랜지스터가 아주 작은 영역에 들어가있다. 이런 식으로 CPU가 복잡한 기능을 처리할 수 있게 된 것!
지금 사용하는 컴퓨터의 구조를 직접적으로 제시한 것은 폰 노이만이다.
폰 노이만은 맨하탄 프로젝트에 참여해서 핵폭탄을 만들기 위해 필요한 수많은 연산을 처리하기 위해 컴퓨터를 개발했다.
현대적 컴퓨터의 구조를 폰 노이만 구조라고도 한다.
기능적인 측면에서는 내장형 프로그램 방식의 컴퓨터(Stored-program computer)라고도 한다.
메모리와 CPU가 있고, 프로그램이 메모리 안에 들어가 있는 형태
메모리에 있는 프로그램을 읽어서 CPU가 기능을 수행하게 된다.
폰 노이만 구조가 발전하여 다음과 같은 형태가 되었다.
CPU에서 연산을, 메모리에서 정보 저장을 한다.
중간에는 캐쉬 메모리라는 것이 있다. 메모리에서 정보를 CPU로 보내는데, 자주 보내는 프로그램/데이터를 캐쉬 메모리에 남겨 두는 것이다. 자주 사용하는 프로그램/데이터를 더 빨리 사용할 수 있게 된다.
순차접근 : 자기 테이프에서 쓰이는 방식. 각각의 칸 안에는 데이터가 들어 있다. 어떤 데이터를 찾기 위해 처음부터 끝까지 하나하나 살펴보는 방식
임의접근 : 현대 컴퓨터에서 사용하는 방식. RAM은 임의접근을 위해 만들어진 장치이다. 데이터의 주소를 알면 바로 찾을 수 있기 때문에 데이터가 어디에 있든 동일한 시간으로 접근할 수 있는 방법. 매우 효율적이다!
트랜지스터 하나와 커페스터 하나가 정보를 저장하는 하나의 단위(셀)이 되고, 여기에는 1bit(2진수 숫자 하나)가 저장된다. 그것을 여러 개 저장한다. 엄청나게 많은 셀 중에서 데이터가 어디 있는지 찾아야 하는데! 순차접근으로는 엄청나게 많은 시간이 걸리겠지만, 임의 접근으로는 빠르게 찾을 수 있다.
임의 접근을 해야 하기 때문에, 주소가 이동하는 통로와 데이터가 이동하는 통로가 분리되어 있다.
주소는 CPU → 메모리 일방향으로만 이동한다.
메모리의 기능은 두가지가 있다.
address bus 때문에 C언어의 포인터가 존재한다. (주소를 직접 주고받아야 한다는 점 때문에)
최근에 나온 다른 언어들, 파이썬이나 자바 등을 보면 포인터가 없는 경우도 있다.
포인터로 직접접근하는것의 장점 : 훨씬 세세하게 하드웨어를 다룰 수 있고, 속도가 훨씬 빠르다.
컴퓨터의 구조, 작동원리에 관심을 갖는 것은 더 좋은 프로그램을 만들기 위해서! 하드웨어 작동 원리에 맞추어 훨씬 더 잘 작동하는 프로그램을 만들기 위한 것.
우리가 만든 프로그램은 보조기억장치에 먼저 저장된다. 저장되어있는 프로그램을 실행시키고싶다면 운영체제에게 부탁을 해야 한다. 운영체제가 신호(사용자의 입력)를 받으면, 보조기억장치에 있는 프로그램을 주기억장치(메모리)로 복사해 온다. 그러면 CPU가 메모리에 올라와 있는 프로그램을 읽어 실행하게 된다.
결과적으로 컴퓨터가 이해할 수 있는 것은 기계어
사람이 이해할 수 있는 단어로 대체한 것이 어셈블리 언어. 지시어 뒤에는 주소가 온다.
컴퓨터에서 더하기를 수행하는 방식
| 고수준 프로그래밍 언어 | a = 3
b = 4
c = a + b |
| --- | --- |
| 어셈블리 언어 | 니모닉(Mnemonic)
LOAD [10]
ADD [11]
STORE [12] |
| 기계어(CPU의 언어) | 10110 (2진수) |
CPU명령어는 단순한 것들로 이루어져 있다. 단순한 명령들의 집합으로 복잡한 기능을 수행한다.
프로그램 카운터
(PC)에 프로그램의 시작 부분 명령어의 메모리주소를 저장한다. 주소 레지스터
에 프로그램 카운터
에 저장된 주소를 저장한다 프로그램 카운터
는 다음 주소를 저장한다. 주소 레지스터
에 저장된 주소에 있는 데이터를 데이터 레지스터
에 저장한다. 데이터 레지스터
에 저장된 데이터가 명령어 레지스터
에 저장된다. 명령어 레지스터
에 있는 명령어가 제어 장치
로 이동한다. 제어 장치
는 명령어를 해독한다. 어큐뮬레이터
에 저장프로그램 카운터
에 저장된 대로, 다음 주소로 간다 현실에서 측정이나 관찰을 통해 얻는 값들을 데이터,
데이터를 처리해 유용한 형태로 바꾸면 정보가 된다.