컴퓨터의 발전과정
2024년 4월 28일
컴퓨터의 역사 #
컴퓨터라는것은 한번에 전기를 이용한 기계가 발명된게 아니라 옛날부터 조금씩 발전해오면서 만들어진 것이다.
기계식 컴퓨터의 아이디어들 #
- 기계식 계산기 파스칼린 (1645) : 별건 없다 올림/내림처리가 자동으로 돼서 덧셈 뺄셈을 편하게 할 수 있는 기계인데, 각 자릿수마다 기어를 돌려 숫자를 입력하고 더할 수만큼 추가로 입력하면 자동으로 올림(일의자리가 9에서 한칸 더 움직이면 십의자리가 1 오르는 형식)처리 되면서 결과가 표시되는 방식이다.
- 자카드 직조기 (1801) : 이때부터 요즘 컴퓨터와 유사해진다. 직조도 정말 많은 방식으로 반복노동을 하게 되는데 기계가 천공카드의 구멍에 따라 동작하며 다양한 직조 패턴을 기록한 천공카드로 빠르게 패턴을 넣을 수 있게 됐다.
- 찰스배비지 차분 기관 (1822) : 다항식의 계산을 차분법(연속된 덧셈만으로도 다항식 값을 순차적으로 계산가능 f(1), f(2), f(3)…)과 톱니와 기어를 사용해서 기계화 했다. 사실 이 기계는 컴퓨터 역사에서 크게 중요하진 않고 어느정도의 인풋이 있다면 기계식으로 자동화가 가능하다는 것에 의미를 둘 수 있다.
- 찰스배비지 해석 기관 (1830) : 천공카드를 이용해서 프로그래밍이 가능한 컴퓨터의 시초라고 볼 수 있다. 반복문, 조건부 실행까지 가능한 최초의 기계이다. 여러 기능들을 미리 구현해두고 카드리더로 천공카드를 읽게 해서 특정 위치에 있는 구멍으로 인해 각각의 기능을 수행하는 기계로직을 동작하게 한다. 현대의 레지스터처럼 연산 후 상태값도 저장해서 현재 상태의 확인이 가능했고 그걸 천공카드로 상태에 따라 다른 구멍이 실행되도록 만들어졌다.
현대 컴퓨터로 따지면 기계어마다 회로가 따로 있어서 원하는 기능을 동작하게 하는 방식이다. 어 떻게 보면 지금의 어셈 명령어마다 회로를 따로 만드는것과 동일한것 같다.
전기가 아니라서 수동으로 동작하지만, 현대의 CPU와 RAM을 기계로 구현한 것이다.
- 에이다 러브레이스 : 해석기관이 완성되지 않았었지만, 개념적으로 복잡한 계산을 할 수 있다는 걸 증명하기 위해 베르누이 수를 구하는 알고리즘이 담긴 천공카드 명령어를 구현했다. 이 명령어는 러브레이스의 노트에 따르면 25000개에서 30000개 정도로 추정된다.
이것도 현대식으로 생각해보면 그시대에 어셈블리 코딩을 한것이다.
전기 기계식 #
- 홀러리스 인구조사 기계 (1890) : 천공카드의 아이디어를 수은과 금속바늘로 변경하며 이때부터 전기와 천공카드를 같이 사용하게 된다.
인구조사용으로 구현되어 집에 방문해서 획득한 정보를 천공카드에 구멍을 뚫어 나이 성별 직업 등을 수동으로 기록하고, 나이별, 직업별 인구수 등 계산작업은 기계로 자동화 했다.
나중에 IBM(국제상업기계)이라는 회사에 합병되게 된다. - 튜링머신 (1936) : 앨런튜링이 제안한 추상적인 기계모델로, 데이터의 읽고 쓰기가 가능한 테이프, 상태레지스터, 상태와 테이프에서 읽은 값에 따라 상태와 테이프를 변경할 수 있는 함수로 구성된 시간이 걸리더라도 이론상 모든 수학적으로 증명 가능한 문제를 해결할 수 있는 기계이다.
튜링 완전하다는 뜻은 튜링머신이 이론상 가능한 계산 능력을 모두 수행할 수 있다는 의미로, 프로그래밍 언어나 모든 계산 가능성의 기준이 됐다. 해석기관은 튜링 완전하다. - 하버드 마크 1 (1944) : 하버드와 IBM이 협력해서 개발. 배비지의 해석기관을 전기 기계식으로 구현한 다용도 기계이다. 천공 테이프를 사용해서 프로그래밍했다.
전자식 #
- 진공관 : 내부가 진공상태로 만들어져 음극을 가열하며 전자를 제어했다(전류를 흐르게 하거나 하지않거나). 다이오드는 진공관의 한 종류이다. 트랜지스터가 발명되기 전까지 컴퓨터의 부품으로 사용됐다.
- 에니악 (1945) : 진공관을 이용해서 매우 빠르고, 플러그보드로 프로그래밍이 가능한 전자식 기계이다. 플러그보드에 플러그를 꽂아 미리 회로를 만들어두고 전압을 인가해서 회로가 지나가는 진공관의 전자를 제어하는 방식이라 프로그램의 변경이 어려웠지만, 마크1보다 연산 속도는 정말 빨랐다.
- 에드박 (1952) : 에드박은 펜실베니아 대학에서 프로그래밍 내장 방식으로 구현한 컴퓨터이다. 폰노이만 구조를 사용한 것인데, 사실 폰노이만이 에드박의 설계를 보고 보고서로 정립한게 폰노이만 구조이다. 에드박은 에커트에 의해 1944년에 설계되었으며 폰노이만은 1945년에 이 설계를 보고 문서를 작성했다.
프로그래밍 내장 방식은 데이터만 저장하던 메모리에 실행권한을 줘서 프로그램도 포함시킬 수 있게 한건데, 메모리는 쓰기가 가능하기 때문에 프로그램도 변경이 가능한 방식이다.
현대 컴퓨터 #
ISA (Instruction Set Architecture) #
CPU가 해석할 수 있는 명령어의 집합을 의미한다.
CPU는 전기 신호만 알아들을 수 있기 때문에 실행하는 명령어들은 전부 기계어인데, 명령어가 저장된 메모리에는 전압들이 저장되어 있는거고, 클럭 타이밍에 맞게 CPU에 전압이 공급되며 CPU의 사이클이 실행된다.
CPU 마다 성능과 발열 등 여러 요인에 따라 최적화된 설계가 만들어질 것이고, RISC, CISC로 나뉘어서 설계된다.
- RISC(Reduced Instruction Set Computer) : 최소한의 크기로 명령어를 나눠서 하나의 작업을 할 때 여러개의 명령어가 사용될 수 있다. 형식이 고정되어 있어서 디코딩이 빠르고, 대부분 레지스터로 작업하기 때문에 메모리 접근을 최소화한다.
- CISC(Complex Instruction Set Computer) : 하나의 명령어로 작업을 수행할 수 있도록 만들어서 명확한 명령어를 구현한다. 작성하거나 이해하기 쉽고, 하나의 명령이 여러 사이클에 걸쳐서 실행될 수 있다.
이 방식에 따라 실제로 구현된 것이 기계어이며 어셈블리로 변환이 가능하다.
구조 #
CPU #
실제로 연산을 처리할때 사용되는 회로가 포함된 부품이며, 연산장치(ALU), 제어장치(CU), 레지스터 등으로 구성된다.
메모리 #
레지스터는 크기가 매우 작기 때문에 연산 후 데이터를 저장하는 용도로 RAM이 사용된다.
- 프로그램의 실행 중 파일 입출력 관련 함수가 실행되면 프로그램은 시스템콜로 진입하며 커널모드로 변경된다.
- 운영체제에서 요청한 입출력 장치 드라이버 큐에 요청을 추가하고, 프로세스의 상태를 실행에서 대기로 변경한다.
- DMA 등 입출력장치 컨트롤러 등에서 메모리의 데이터를 읽어 보조기억장치로 쓰는 작업을 실행하게 된다.
- 데이터를 전부 쓰고나면 컨트롤러에서 해당 프로세스의 인터럽트를 발생시킨다.
- CPU는 각 사이클마다 인터럽트가 들어왔는지 체크하는데, 인터럽트가 발생하면 현재 작업을 중지하고 운영체제가의 인터럽트 처리 루틴을 실행하며 프로세스를 다시 준비상태로 변경시킨다.
- 멀티코어의 경우 당연하게도 인터럽트 처리 루틴과 함께 다른 프로세스의 코드도 실행할 수 있다.
- 스케줄링에 따라 다시 실행 상태로 변경되고, CPU를 선점하게 됐을때 다음 명령어를 계속 실행시킨다.
버스 #
버스는 간단하게 말하면 회로에서 부품끼리 연결된 구리선을 의미하며 구리선의 수가 많을수록 버스로 한꺼번에 전송될 수 있는 데이터의 크기도 커진다. 당연히 컴퓨터는 클럭당 전기신호(데이터)를 구분짓기 때문에 마찬가지로 클럭당 한번의 데이터가 전송된다.
CPU에서 한번에 처리할 수 있는 데이터 단위인 WORD를 구분짓는건 버스크기와 레지스터의 크기가 주로 작용하게 된다. 또한 버스가 한꺼번에 처리할 수 있는 주소의 크기라는 의미도 되기 때문에 메모리의 최대 크기도 버스의 영향을 받게된다. 32bit = 2^32bit = 4GB