SlideShare a Scribd company logo
1 of 28
Download to read offline
컴퓨터는어떻게동작하는가? 1
🖥
컴퓨터는어떻게동작하는가?
☠0과1에서자바스크립트까지겉핥는이야기☠
Computer
Hidden figures, 20th Century Fox, 2016. Netflix | IMDb
compute + er : 계산하는사람(mathematicians)
컴퓨터는어떻게동작하는가? 2
💡 기계가계산하게할순없을까?
계산이란것을기계가할수있는것인가?
The imitation game, Black Bear Pictures, 2014. Netflix | IMDb
앨런튜링의논문"계산가능수와결정문제에대한응용에관하여", 1948
On computable numbers, with an application to the Entscheidungsproblem
괴델의"불완전성의정리", 1931. 에대해증명하는논문
Incompleteness theorems
이과정에서계산하는상상의기계"튜링머신" 이등장.
논문은아무도모르지만, 튜링머신만유명해짐
결국튜링은컴퓨터를발명한사람
튜링상
컴퓨터과학분야에서업적을남긴사람에게매년시상하는상
컴퓨터과학의노벨상
튜링머신
컴퓨터는어떻게동작하는가? 3
...무한한저장공간은무한한길이의테이프로나타나는데이테
이프는하나의기호를인쇄할수있는크기의정사각형들로쪼
개져있다. 언제든지기계속에는하나의기호가들어가있고이를
"읽힌기호"라고한다. 이기계는"읽힌기호"를바꿀수있는데
그기계의행동은오직읽힌기호만이결정한다. 테이프는앞뒤
로움직일수있어서모든기호들은적어도한번씩은기계에게
읽힐것이다.
Tursi : 튜링머신머신시뮬레이터
https://github.com/schaetzc/tursi
온라인튜링머신시뮬레이터
http://morphett.info/turing/turing.html
💡 전기를이용해서만들어보자!
전기회로
컴퓨터는어떻게동작하는가? 4
스위치를닫으면전기가통한다.
스위치를사용해서전기를제어하면여러가지를만들수있겠다.
AND 게이트
컴퓨터는어떻게동작하는가? 5
두개의스위치가모두닫혀야전기가통한다.
OR 게이트
두개의스위치중하나라도닫히면전기가통한다.
컴퓨터는어떻게동작하는가? 6
NOT 게이트
스위치를닫으면전기가닫힌다. (불이안켜진다.)
💡 스위치를열고닫고하는게귀찮네... 뭔가다른걸로만들수없을까?
전기를이용해서만들어보자!
컴퓨터는어떻게동작하는가? 7
전기로전기를제어해보자
스위치⇒전기가흘렀다안흘렀다⇒흐르면도체⇒안흐르면부도체⇒흘렀다
안흘렀다하면반도체
진공관... 패스
컴퓨터는어떻게동작하는가? 8
반도체에의해전기흐름의제어를전기로하게되었음.
트랜지스터가발명된이해모든전기제어는트랜지스터가하고있음. 아직도..
How many transitors in M1
나노공정
nano :
반도체회로의선폭을의미
10−9
컴퓨터는어떻게동작하는가? 9
Apple M1 chip : 5nm (머리카락한올을1만개로쪼갠크기)
컴퓨터는어떻게동작하는가? 10
https://youtu.be/bor0qLifjz4
나노공정의한계: 더이상작게만들수없다⇒여러개만들면되지! ⇒멀티
코어
💡 그런데, 전기로계산을어떻게하지?
2진수로계산하기
전기가안흐르면0, 흐르면1 이라하자
그러면0, 1 두경우밖에없네?
모든것을2진수로처리하면되지~
가산기
컴퓨터는어떻게동작하는가? 11
더하기만할수있다면
빼기는음수를더하면됨
곱하기는계속더하면됨
나누기는계속빼면됨
결국사칙연산을다할수있다
Bit
Bit : Binary Digit
8 bit = 1 byte
1 KB = bytes = bytes = 1,024 bytes
1 MB = bytes = bytes = 1,048,576 bytes
Hex
2진수는숫자가2개밖에없어서숫자가너무길어진다.
0100101101011010101101010101010010101 ⇒무슨값인지도모르겠
다.
103
210
106
220
컴퓨터는어떻게동작하는가? 12
4개씩잘라보자
0000 1001 0110 1011 0101 0110 1010 1010 1001 0101
각4bit 들은 이니까0 ~ 15 까지표현될수있다. 16진수를사용해서표현
해보자
0 9 6 B 5 6 A A 9 5
09 6B 56 AA 95 라고짧게줄여쓸수있다. 좋구나!
💡 이제이걸로계산기계를만들어보자!
ENIAC
Electronic Numerical Integrator And Computer
1948년2월포탄의탄도학계산을위해개발.
진공관: 18,800개사용, 무게: 30톤
24
컴퓨터는어떻게동작하는가? 13
Bug
1945년여름, 마크II (사진) 가계속오작동을일으켜원인을분석, 그레이
스호퍼
컴퓨터는어떻게동작하는가? 14
💡 아.. 전선뺐다꼽았다.. 귀찮다.
기계가대신해줄수없을까?
컴퓨터가할일을순서대로적어놓자
컴퓨터가할일을순서대로적어놓은것: 프로그램
컴퓨터가프로그램을수행하려면어떻게만들어져야하나?
컴퓨터는어떻게동작하는가? 15
폰노이만이1945년설계한컴퓨터아키텍쳐
CPU, Memory, Program 으로구성됨
아직까지이구조를사용하고있다⇒아직이것보다뛰어난것을설계하지못했다
Punch Card
컴퓨터는어떻게동작하는가? 16
Harvard architecture
💡 그래서이게어떻게돌아가는건데?
컴퓨터는어떻게동작하는가? 17
단순한컴퓨터를가지고알아보자
프로그램은0과1로구성된비트나열이다
이것을순차적으로읽어서정해진동작을수행한다.
4 bit CPU, 30Hz
Instruction and Data size : 4 bit
boot memory address : 0
hardware
프로그램
0001 0001 0010 1101 0000 0100 1010 0100 1010 0100 1010 0010 1101 0001
0100 1010 0100 1010 0100 1010 1110 0010
컴퓨터는어떻게동작하는가? 18
16진수로표현하면
11 2D 04 A4 A4 A2 D1 4A 4A 4A E2
명령어세트
0001 비트값읽기(LOD), 다음에핀번호가온다.
0010 비트값쓰기(MOV), 다음에핀번호와값이온다.
0100 시스템대기(HLT), 다음에클럭수가온다.
1110 다음명령이동(PC), 다음에주소값이온다.
Assembler Language
LOD 1
MOV 13, 0
HLT 10
HLT 10
HLT 10
MOV 13, 1
HLT 10
HLT 10
HLT 10
PC 2
컴퓨터는어떻게동작하는가? 19
제자: 기계어너무어려워요.. 어셈블리어같은거를만들어야
겠어요... ㅠㅠ
폰노이만: 왜? 기계어가있는데?
제자: 이씽~ ㅠㅠ🤬🤬🤬
8051 instructions
Intel 에서1980년대개발한경량8bit cpu
https://www.keil.com/support/man/docs/is51/is51_opcodes.htm
Operating System
프로그램은cpu에연결된주변장치들에대한모든처리를직접해줘야함
Operating System 등장
실행프로그램과기계사이에서장치들을대신제어해주고
컴퓨터는어떻게동작하는가? 20
프로그램의동작환경을보호해주는시스템
프로그램의동작환경은CPU 와OS 에의해서결정됨
💡 근데.. 이거어려워서해먹겠냐?
기계가대신만들어주면안될까?
Computer Languages
기계어로프로그래밍하는것은너무어렵다.
어셈블리어로하는것도어렵다.
뭔가고차원적인, 사람이보고이해하기쉬운그런게있으면좋겠다.
우아하게만들고그걸번역하면되지!
본격적인Computer Language 의시작
Compiler : 컴퓨터언어를해석해서기계어로만들어주는번역기
컴퓨터는어떻게동작하는가? 21
native language : 동작환경에서그대로실행할수있는형태로결
과물이만들어지는언어
A-0 언어
1952, 그레이스호퍼. 최초의컴파일언어. 컴파일러의시초. (버그리포트작
성한그분!)
Fortran, 1957, IBM, 존배커스. 최초의완전한컴파일러. 최적화기능탑재.
B 언어
Bell 연구소에서1969년개발
Bell 연구소의이름에서따와서B 언어라고함.
C 언어
Bell 연구소에서1972년, B언어를토대로개발.
Unix 시스템개발하려는데언어가부족해서언어를만들어버림.
설계자: 데니스리치
그의저서"The C Programming Language" 에서등장한첫예제프로그램이
"Hello World" 출력하기
컴퓨터언어계보
컴퓨터는어떻게동작하는가? 22
컴퓨터는어떻게동작하는가? 23
💡 실행할때마다컴파일하려니귀찮네..
기계가자동으로해주면안될까?
Interpreter Language
한꺼번에다컴파일해놓지말고
실행할때마다한줄씩컴파일해서실행해보자
Perl, Python, Ruby, Javascript
인터프리터 가하는일
1. 프로그램과machine 사이에서실행환경을제공
2. 컴파일
3. 프로그램의동작환경을보호
⇒이거OS가하는일아님?
인터프리터도역시프로그램일뿐
컴퓨터는어떻게동작하는가? 24
하지만하는일은거의OS 급
프로그램입장에서는인터프리터가동작환경의전부
그렇다면가상머신?
언어별따른동작환경(인터프리터)
인터프리터역시프로그램이기때문에OS와CPU에의해동작환경이결정됨.
Python : Python Interperter
Ruby : Ruby Runtime
Java : Java Virtual Machine
C# : Common Language Runtime
Javascript : Node runtime 또는Browser
💡 야.... 진짜로기계가하는일을똑같이프로그램으로구현하면가상컴퓨터가
되는거아냐?
해보자!
Virtual Computer
컴퓨터는어떻게동작하는가? 25
이게되네?
완전신박함
근데너무느려서못써먹겠다
그러면... OS를통일해놓고
1. 서로다른virtual 환경에서동작하는프로그램들을
2. 실제로는host 에서실행하고
3. 결과를다시virtual 환경으로보내주면
4. 빠르게돌아가지않을까?
그게되겠어?
컴퓨터는어떻게동작하는가? 26
짜잔! 도커등장!
컴퓨터는어떻게동작하는가? 27
생각해봅시다.
1. 자바스크립트코드가수행될때코드에서부터CPU 까지동작을설명해볼수있을
까요?
2. Macbook Intel 용프로그램은왜Macbook M1 에서실행되지않을까요?
3. Rosetta 를통하면Intel용프로그램이M1에서실행된다는데, Rosetta는뭘해주
는건가요?
4. 3진수컴퓨터, 4진수컴퓨터가나올수있을까요?
더공부해보기
https://www.youtube.com/watch?v=Fg00LN30Ezg
컴퓨터는어떻게동작하는가? 28
컴퓨터과학이여는세계강의
https://bit.ly/how_computer_works

More Related Content

More from Chiwon Song

20190330 immutable data
20190330 immutable data20190330 immutable data
20190330 immutable dataChiwon Song
 
20190306 만들면서 배우는 IoT / IoT의 이해
20190306 만들면서 배우는 IoT / IoT의 이해20190306 만들면서 배우는 IoT / IoT의 이해
20190306 만들면서 배우는 IoT / IoT의 이해Chiwon Song
 
20181020 advanced higher-order function
20181020 advanced higher-order function20181020 advanced higher-order function
20181020 advanced higher-order functionChiwon Song
 
20180721 code defragment
20180721 code defragment20180721 code defragment
20180721 code defragmentChiwon Song
 
20180310 functional programming
20180310 functional programming20180310 functional programming
20180310 functional programmingChiwon Song
 
20171104 FRP 패러다임
20171104 FRP 패러다임20171104 FRP 패러다임
20171104 FRP 패러다임Chiwon Song
 
스크래치로 시작하는 코딩
스크래치로 시작하는 코딩스크래치로 시작하는 코딩
스크래치로 시작하는 코딩Chiwon Song
 
메이커운동과 아두이노
메이커운동과 아두이노메이커운동과 아두이노
메이커운동과 아두이노Chiwon Song
 
아두이노 RC카 만들기
아두이노 RC카 만들기아두이노 RC카 만들기
아두이노 RC카 만들기Chiwon Song
 
[5] 아두이노로 만드는 IoT
[5] 아두이노로 만드는 IoT[5] 아두이노로 만드는 IoT
[5] 아두이노로 만드는 IoTChiwon Song
 
[4] 아두이노와 인터넷
[4] 아두이노와 인터넷[4] 아두이노와 인터넷
[4] 아두이노와 인터넷Chiwon Song
 
[2] 아두이노 활용 실습
[2] 아두이노 활용 실습[2] 아두이노 활용 실습
[2] 아두이노 활용 실습Chiwon Song
 
[3] 프로세싱과 아두이노
[3] 프로세싱과 아두이노[3] 프로세싱과 아두이노
[3] 프로세싱과 아두이노Chiwon Song
 
[1] IoT와 아두이노
[1] IoT와 아두이노[1] IoT와 아두이노
[1] IoT와 아두이노Chiwon Song
 
3D 프린터와 아두이노
3D 프린터와 아두이노3D 프린터와 아두이노
3D 프린터와 아두이노Chiwon Song
 
Java programming language test
Java programming language testJava programming language test
Java programming language testChiwon Song
 
Java programming language
Java programming languageJava programming language
Java programming languageChiwon Song
 
[가상편] 하드웨어에 생명을 주는 아두이노
[가상편] 하드웨어에 생명을 주는 아두이노[가상편] 하드웨어에 생명을 주는 아두이노
[가상편] 하드웨어에 생명을 주는 아두이노Chiwon Song
 
[실습편] 하드웨어에 생명을 주는 아두이노
[실습편] 하드웨어에 생명을 주는 아두이노[실습편] 하드웨어에 생명을 주는 아두이노
[실습편] 하드웨어에 생명을 주는 아두이노Chiwon Song
 
DIY의 끝판왕 3D 프린터
DIY의 끝판왕 3D 프린터DIY의 끝판왕 3D 프린터
DIY의 끝판왕 3D 프린터Chiwon Song
 

More from Chiwon Song (20)

20190330 immutable data
20190330 immutable data20190330 immutable data
20190330 immutable data
 
20190306 만들면서 배우는 IoT / IoT의 이해
20190306 만들면서 배우는 IoT / IoT의 이해20190306 만들면서 배우는 IoT / IoT의 이해
20190306 만들면서 배우는 IoT / IoT의 이해
 
20181020 advanced higher-order function
20181020 advanced higher-order function20181020 advanced higher-order function
20181020 advanced higher-order function
 
20180721 code defragment
20180721 code defragment20180721 code defragment
20180721 code defragment
 
20180310 functional programming
20180310 functional programming20180310 functional programming
20180310 functional programming
 
20171104 FRP 패러다임
20171104 FRP 패러다임20171104 FRP 패러다임
20171104 FRP 패러다임
 
스크래치로 시작하는 코딩
스크래치로 시작하는 코딩스크래치로 시작하는 코딩
스크래치로 시작하는 코딩
 
메이커운동과 아두이노
메이커운동과 아두이노메이커운동과 아두이노
메이커운동과 아두이노
 
아두이노 RC카 만들기
아두이노 RC카 만들기아두이노 RC카 만들기
아두이노 RC카 만들기
 
[5] 아두이노로 만드는 IoT
[5] 아두이노로 만드는 IoT[5] 아두이노로 만드는 IoT
[5] 아두이노로 만드는 IoT
 
[4] 아두이노와 인터넷
[4] 아두이노와 인터넷[4] 아두이노와 인터넷
[4] 아두이노와 인터넷
 
[2] 아두이노 활용 실습
[2] 아두이노 활용 실습[2] 아두이노 활용 실습
[2] 아두이노 활용 실습
 
[3] 프로세싱과 아두이노
[3] 프로세싱과 아두이노[3] 프로세싱과 아두이노
[3] 프로세싱과 아두이노
 
[1] IoT와 아두이노
[1] IoT와 아두이노[1] IoT와 아두이노
[1] IoT와 아두이노
 
3D 프린터와 아두이노
3D 프린터와 아두이노3D 프린터와 아두이노
3D 프린터와 아두이노
 
Java programming language test
Java programming language testJava programming language test
Java programming language test
 
Java programming language
Java programming languageJava programming language
Java programming language
 
[가상편] 하드웨어에 생명을 주는 아두이노
[가상편] 하드웨어에 생명을 주는 아두이노[가상편] 하드웨어에 생명을 주는 아두이노
[가상편] 하드웨어에 생명을 주는 아두이노
 
[실습편] 하드웨어에 생명을 주는 아두이노
[실습편] 하드웨어에 생명을 주는 아두이노[실습편] 하드웨어에 생명을 주는 아두이노
[실습편] 하드웨어에 생명을 주는 아두이노
 
DIY의 끝판왕 3D 프린터
DIY의 끝판왕 3D 프린터DIY의 끝판왕 3D 프린터
DIY의 끝판왕 3D 프린터
 

20210812 컴퓨터는 어떻게 동작하는가?