(하도 급격한 발전이 있어서 문헌마다 자기 것이 최초라는데, 이 말이 사실인지 분간하기 어려운 것들도 있으므로 '이 시대에 이런 게 만들어졌구나~'하고 넘어가길 바람.)
(사진은 콜로서스 마크 2)
1946년(컴퓨터 설계 계약일 기준) 에니악을 만든 모클리와 에커트가 존 폰 노이만의 프로그램 내장방식을 적용해 만든 전자식 컴퓨터.
1945년 존 폰 노이만은 에드박 설계에 자문으로 참가하여, <First Draft of a Report on the EDVAC>을 요약/논의함.
1946년 6월 노이만은 에드박 계획을 종합해 <Preliminary Discussion
of the Logical Design of an Electronic Computing Instrument; 전자계산기의 이론 설계 서론>을 발표함. 여기에는 에니악의 단점을 보완하기 위해 기억장치에 컴퓨터의 명령이나 데이터를 모두 기억시키는 프로그램 내장방식(stored programming)을 제안.
에니악과 다르게 최초로 2진수를 사용하여 연산 속도를 비약적으로 향상시킴.
오늘날의 '소프트웨어'라는 개념을 탄생시킴.
1946년에 발표한 <Preliminary Discussion of the Logical Design of an Electronic Computing Instrument; 전자계산기의 이론 설계 서론>에서 제안한 프로그램 내장장식 컴퓨터 구조.
인간의 사고과정을 참고해서 구조를 설계함.
내장 메모리 순차처리 방식으로, 데이터 메모리와 프로그램 메모리가 구분되어 있지 않고 하나의 버스를 가지고 있는 구조.
- 폰 노이만 구조 내부
- 주기억 장치 = 단일 메모리(데이터, 명령어)
- 중앙 처리 장치 = CPU(명령어 레지스터, 클록, 계수기, 산술 연산기)
- 입출력 장치
전자식 시스템에서는 처리 속도가 빠른데 반해 메모리에서 데이터를 읽는 일 등을 할 때는 기다려야 하므로 일의 처리 순서가 잘못될 수 있음. 그래서 컴퓨터 내부에 일정한 주기로 신호를 생성하는 클록을 넣고, 모든 일들이 클록 신호에 맞추어 동작하도록 했음.
또한 데이터 흐름 규칙을 정의해 메모리에서 읽은 명령어가 처리 중인 데이터와 섞이지 않도록 함.
프로그램 내장식이기 때문에 이전처럼 전선을 뺐다가 꽂을 필요가 없으며 프로그램(소프트웨어)만 교체하면 되기 때문에 범용성이 크게 향상됨.
폰 노이만의 아이디어는 CPU, 메모리, 프로그램 구조를 갖는 범용 컴퓨터 구조를 확립시킴.
--> 에드삭 이후의 컴퓨터는 대부분 폰 노이만 구조를 기본 구조로 하고 있음.
CPU가 읽고 처리한 데이터는 다시 메모리에 저장을 해야 함.
--> CPU가 아무리 빨리 데이터를 처리하더라도 메모리의 속도가 느리거나
데이터 이동 속도가 느리면 전체 시스템의 성능 저하가 불가피.
==> 즉, 계산속도가 기억장치 속도에 영향을 받기 때문에 데이터 이동에 따라 필연적으로 병목현상이 발생하는 것!
메모리가 작아서 명령과 데이터를 따로 처리한 Harvard Mark I이라는 릴레이 컴퓨터로부터 나온 구조.
(+ 버그 용어의 기원에 대한 재밌는 이야기(실화이긴 하나 최초는 아닐 수 있음 주의.))
하버드 구조는 명령용 버스와 데이터용 버스가 물리적으로 분리되어 있기 때문에, 명령을 메모리로부터 읽는 것과 데이터를 메모리로부터 읽는 것을 동시에 할 수 있음.
하버드 구조와 폰 노이만 구조를 모두 도입한 구조.
--> 하버드 구조를 캐시 메모리 장치에 적용하였고, 폰 노이만 구조를 CPU 외부 주 메모리에 적용.
하버드 구조에서 사용했던 통합 캐시 메모리 장치를 보통 명령용과 데이터용으로 분리.
하버드 구조는 캐시에 오류가 일어나면 주 메모리로부터 데이터를 가져오고, 명령 캐시나 데이터 캐시에 저장함.
요즘 성능 좋은 CPU 설계는 이 수정된 하버드 구조를 도입하고 있음.
- 컴퓨터의 역사에 대해서 알아보자, 2016.06.04,(https://ndb796.tistory.com/1)
- 컴퓨터의 역사, 2020.08.12에 마지막 수정, (https://ko.wikipedia.org/wiki/%EC%BB%B4%ED%93%A8%ED%84%B0%EC%9D%98_%EC%97%AD%EC%82%AC)
- 차분기관, 2018.11.02에 마지막 수정, (https://ko.wikipedia.org/wiki/%EC%B0%A8%EB%B6%84%EA%B8%B0%EA%B4%80)
- 차분기관, 전국과학관길라잡이 과학학습콘텐츠, (https://smart.science.go.kr/scienceSubject/computer/view.action?menuCd=DOM_000000101001007000&subject_sid=256)
- 해석기관, 2020.03.13에 마지막 수정, (https://ko.wikipedia.org/wiki/%ED%95%B4%EC%84%9D%EA%B8%B0%EA%B4%80)
- 콘라트 추제, 2021.02.04에 마지막 수정, (https://ko.wikipedia.org/wiki/%EC%BD%98%EB%9D%BC%ED%8A%B8_%EC%B6%94%EC%A0%9C)
- Z1(컴퓨터), 2020.09.26에 마지막 수정, (https://ko.wikipedia.org/wiki/Z1_(%EC%BB%B4%ED%93%A8%ED%84%B0))
- Z2(컴퓨터), 2020.06.07에 마지막 수정, (https://ko.wikipedia.org/wiki/Z2_(%EC%BB%B4%ED%93%A8%ED%84%B0))
- 전자계전기, 2021.01.14에 마지막 수정, (https://ko.wikipedia.org/wiki/%EC%A0%84%EC%9E%90%EA%B3%84%EC%A0%84%EA%B8%B0)
- Z3(컴퓨터), 2021.01.20에 마지막 수정, (https://ko.wikipedia.org/wiki/Z3_(%EC%BB%B4%ED%93%A8%ED%84%B0))
- Z4(computer), 2021.02.20에 마지막 수정, (https://en.wikipedia.org/wiki/Z4_(computer))
- 콜로서스, 2020.06.12, (https://ko.wikipedia.org/wiki/%EC%BD%9C%EB%A1%9C%EC%84%9C%EC%8A%A4_(%EC%BB%B4%ED%93%A8%ED%84%B0))
- MARK I, 전국과학관길라잡이 과학학습콘텐츠, (https://smart.science.go.kr/scienceSubject/computer/view.action?menuCd=DOM_000000101001007000&subject_sid=250)
- 하버드 마크 I, 2020.09.24에 마지막 수정, (https://ko.wikipedia.org/wiki/%ED%95%98%EB%B2%84%EB%93%9C_%EB%A7%88%ED%81%AC_I)
- 에드삭, 2020.06.12에 마지막 수정, (https://ko.wikipedia.org/wiki/%EC%97%90%EB%93%9C%EC%82%AD)
- EDSAC, 2021.02.01에 마지막 수정, (https://en.wikipedia.org/wiki/EDSAC)
- 에드박, 2020.09.24에 마지막 수정, (https://ko.wikipedia.org/wiki/%EC%97%90%EB%93%9C%EB%B0%95)
- 유니박 I, 2020.06.12에 마지막 수정, (https://ko.wikipedia.org/wiki/%EC%9C%A0%EB%8B%88%EB%B0%95_I)
- 'UNIVAC, the first commercially produced digital computer, is dedicated', 2010.07.20, (https://www.history.com/this-day-in-history/univac-computer-dedicated)
- EDVAC, 전국과학관길라잡이 과학학습콘텐츠, (https://smart.science.go.kr/scienceSubject/computer/view.action?menuCd=DOM_000000101001007000&subject_sid=245)
- Who Invented EDVAC?, (https://www.letusfindout.com/who-invented-edvac/)
- EDVAC, 2020.12.05에 마지막 수정, (https://en.wikipedia.org/wiki/EDVAC)
- von Neumann architecture, 2021.01.22, (https://en.wikipedia.org/wiki/Von_Neumann_architecture)
- 만화로 배우는 인공지능 '43. 역사상 최고의 천재, 존 폰 노이만', 2020.07.29, (https://post.naver.com/viewer/postView.nhn?volumeNo=28926572&memberNo=50533718)
- Britannica, Computer - ENIAC, (https://www.britannica.com/technology/computer/ENIAC#ref723664)
- 존 폰 노이만, 2021.02.04에 마지막 수정, (https://ko.wikipedia.org/wiki/%EC%A1%B4_%ED%8F%B0_%EB%85%B8%EC%9D%B4%EB%A7%8C)
- 실험심리학용어사전, 폰 노이만 구조, (https://terms.naver.com/entry.nhn?docId=274780&cid=41990&categoryId=41990)
- 폰 노이만 구조, 2021.01.12에 마지막 수정, (https://ko.wikipedia.org/wiki/%ED%8F%B0_%EB%85%B8%EC%9D%B4%EB%A7%8C_%EA%B5%AC%EC%A1%B0)
- Preliminary Discussion of the Logical Design of an Electronic Computing Instrument, John von Neumann, 1946.06.28, (https://www.ias.edu/sites/default/files/library/Prelim_Disc_Logical_Design.pdf)
- 폰 노이만과 새로운 컴퓨터의 탄생, 한빛네트워크, 2019.06.18, (https://www.hanbit.co.kr/channel/category/category_view.html?cms_code=CMS4316945379)
- [뉴메모리 시대의 암투]③ 폰 노이먼의 병목 현상을 해결하라...4차 산업혁명 개막에 뉴메모리 춘추전국 시대 열리나, chosun Biz, 2016.11.23, (https://biz.chosun.com/site/data/html_dir/2016/11/23/2016112300511.html)
- 폰노이만 구조와 하버드 구조, ckstn0777.log, 2020.10.08, (https://velog.io/@ckstn0777/%EC%BB%B4%ED%93%A8%ED%84%B0-%EA%B5%AC%EC%A1%B0)
- '버그'라는 용어의 기원, IT WORLD, 2011.09.06, (https://www.itworld.co.kr/news/71587)
- 하버드 아키텍처, 2020.09.21에 마지막 수정, (https://ko.wikipedia.org/wiki/%ED%95%98%EB%B2%84%EB%93%9C_%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98)
- Harvard Mark I, 2008.09.18에 마지막 수정, (https://web.math.pmf.unizg.hr/~nela/prteme/Mark_I_Harvard.htm)
- 폰 노이만 구조 vs 하버드 구조 vs 수정된 하버드 구조, 2017.03.30, (https://woodforest.tistory.com/164)
- 컴퓨터의 구조는 어떻게 생겼을까? 폰 노이만 구조, 과학기술정보통신부 네이버 블로그, 2020.05.28, (https://m.blog.naver.com/with_msip/221981730449)
컴퓨터란? (정은의 역사와 구조)
computer = 계산기
데이터와 연산을 반드시 필요.
운영체제: 컴퓨터의 운영을 맞아주는 관리자.
--> 파일 시스템 관리, 프로세스 관리(채은님의 조사), 리소스 관리, 터미널
사용자와 컴퓨터를 연결하는 터미널.
데이터는 가장 소중한 존재.
컴퓨터는 모든 정보를 bit, 0과1. --> 이진법.
(만약 삼진법을 사용하면 메모리 효율성을 높일 수 있음.)
사람이 느끼는 데이터와 컴퓨터가 느끼는 데이터는 다르기에 변환이 필요.
--> 데이터 표현 방식이 다름.
문자열이 있나 없나 찾는 것이 정규표 현식(은지님 조사)
효율적인 연산을 위해 자료구조, 알고리즘이 필요.
데이터베이스가 나온 이유도 질의를 던지고 답변을 효율적으로 받기 위함.
지효님의 알고리즘 강의 1
- 자료구조란? -> 문제 해결 절차.
- 정의: 컴퓨터에서 처리하는 자료(Data)를 효율적(Operation)으로 관리하고, 구조화(Structure)시키는 것에 대한 학문. --> 저 세 가지는 자료구조의 중요 구성요소.
어떻게 자료구조 구성요소를 살펴볼 것인가?
- data: '기본단위'(한 개)와 '복합적으로 묶인 데이터'(해시 등등).
- operation: 자료구조는 저장만 하지 않고 검색, 삭제, 입력 등의 연산이 있음. 그럴 때 고려해야 할 것은 '필요한 연산이 무엇인지', '필요한 연산이 얼마나 사용될 지(빈도)'.('통계자료는 삭제를 거의 하지 않고 입력, 찾기가 많음. --> 삭제 연산은 비효율적으로 짜더라도 입력, 찾기 연산을 효율적으로 하면 됨.' 등등)
- structure: 구조에 따라 연산의 모양이 달라지고 설계가 달라질 수 있음. '모양'이 중요.(선형, 비선형 등등)
지효님이 정의한 기본연산 --> 모든 연산을 만들 수 있음.
1. 입력 insert 2. 삭제delete 3. 찾기find
- 예: '버블정렬'은 찾기 연산으로 가능. '스왑'은 찾기 후 두 개 다 삭제 후 다시 넣어주기.
자료 구조의 종류(모양이 기준)
- 선형: 일자로 이어진 구조. --> 배열과 리스트(자료구조의 기본), 스택, 큐, 덱, 해시테이블
- 비선형: 일자가 아닌 구조. --> 그래프를 알면 다 아는 것. 그래프는 일반적 그래프가 아닌 수학적 구조(오차역전법의 계산 그래프의 그 그래프!). 그래프 하위에 트리가 존재.
배열과 연결 리스트는 왜 기본인가?
- 모든 자료구조에 사용되기 때문에, 이 두가지로 모든 자료구조를 구현 가능.
what is 배열?
- 물리적인 (선형)데이터 저장방식.
- 컴퓨터 메모리가 네모나게 생겼다고 했을 때, 연속적인 메모리의 모양을 나타낸 것이 배열.
- 인덱스: 0부터 시작 --> 왜? 시작 주소인 0부터 얼만큼 떨어져 있는지 나타내는 것이 인덱스이기 때문. 앞의 주소만 알면 거리를 알 수 있기 때문에 바로 찾아갈 수 있음.
배열에서의 data, operation, structure
- Data: 동일한 형식이 들어가면 됨.
- Operation: 기준 위치에 대한 연산. 일반화 가능.
- Structure: 선형.
배열의 operation
- insert(k,a): k에 있는 원소를 k+1로 옮기고 a를 입력. O(n)
- delete(k,a): k에 있는 원소를 삭제하고 뒤 원소들을 땡김. O(n)
- find(k): k번째 찾기. 주소 값을 알고 있으니 k번을 더한 곳으로 이동(참조)하면 끝. O(1)
배열의 장단점
- 장점: 효율적 --> 주소만 알면 접근이 쉽기에 접근시간이 빠름 --> 캐시(cache, 메모리 구조와 같아서 자주 사용하는 것을 캐시에 올려줌. 배열에서 나타나는 캐시 효율은 로컬리티.)효율을 받음, 길이값을 선언하면 배열. ==> 정적
- 단점: 길이가 제한적임. 처음 픽스가 되면 삭제하고 만들지 않는 이상 바꿀 수 없음. 근데 입력이란 삭제 연산은 비쌈. ==> 동적이지 않아서(정적이라서)
what is 연결리스트?
- 배열과 반대 개념. 논리적으로 연결된 (선형)구조. = 포인터로 연결된 구조.
연결리스트의 종류('연결'을 기준으로)
- 단방향: 앞으로만 갈 수 있음. 저장된 것과 포인터
- 양방향: 뒤로도 갈 수 있음. 포인터가 메모리를 2배 더 많이 먹음.(트레이드 오프 관계)
- 환형: 앞, 뒤를 연결한 것. --> 양방향 환형도 있음.
--> 사용자 입장에서는 다 비슷해보이긴 함.
연결리스트에서의 data, operation, structure
- Data: 포인터.
- Operation: i, d, f
- Structure: 선형.
연결리스트의 operation
- insert(k,a): k를 가리키는 포인터를 a로 바꾸고 a의 포인터를 k에 연결해 줌. iterator(위치를 저장한 값)를 알고 있으면 O(1), iterator가 없으면 처음부터 포인터를 따라 가야함(O(n)).
- delete(k,a): iterator가 있으면 포인터만 적절하게 바꿔줌. O(1).
- find(k): iterator가 없다고 가정하면 O(n).
연결리스트의 장단점(배열과 반대) --> 동적이기 때문.
- 장점: 길이 제한이 없음. --> 메모리 한도 내에서 무한정 추가 가능, 동적연산이 입력, 삭제가 빠름.
- 단점: 접근시간이 느림, 캐시 효율을 못 받음. --> 멀리 떨어져 있기 때문. 구현 어려움.
(+ 숙제 연결리스트 클래스로 구현하기)
<아이효 1 2021.03.06 오후 1시>
주제: 인공지능
--> 지능이란? 생각하는 힘, 지식, 경험, 지적능력, 판단능력, 세상에 적응하는 능력 등등)