본문 바로가기

IT

폰 노이만의 디자인 [출처 - 구글] 폰 노이만이 앨런 튜링의 논문을 봤는지 안 봤는지 알 수 없지만 폰 노이만은 1945년 'First Draft of a Report on the EDVAC'이라는 논문을 발표했다. 또, EDVAC이라는 컴퓨터를 만들었는데, 튜링의 기계와 비슷하지만 사뭇 다른 양상의 컴퓨터였다. 폰 노이만의 기계는 메모리에 프로그램이 저장되고, 메모리는 주소로 직접접근했다. 또, 중앙제어장치에 Program Counter(PC)를 (Personal Computer 이랑 다르다...) 만들어 프로그램의 흐름을 제어했다. 튜링의 기계와 폰 노이만의 기계 모두 어느 것이 더 낫다거나 한 쪽이 하는 일을 다른 쪽이 못 한다거나 하는 일을 없다. 두 기계 모두 유사한 구조를 띄고 있기 때문이다. 더보기
컴퓨터과학이 여는 세계_7.2 규칙표와 메모리에 읽고쓰는 회로 강좌 동영상 이제 메모리를 구현했으니 메모리에 읽고 쓰는 회로도 만들 차례이다. 간단하게 4비트 메모리에 읽고 쓰는 장치라고 해보자. 4비트 메모리니 쓸 주소와 읽은 주소도 4개의 숫자만 표현하게 두 개의 회로만 사용하면 된다. 그러면 이제 쓰기회로와 읽기회로를 주소가 입력되었을 때 해당 주소에 맞는 메모리에 어떻게 접근할까? 우선 읽기 회로이다. 응답회로는 앞서 구현했던 Decoder회로이다. 만약 m0를 읽고싶으면, 주소에 00을 입력해 m0와 연결된 and연산에 1을 주고 나머진 모두 0을 준다. 그렇다면 결국 출력으로 나오는 결과는 m0에 해당하는 정보일 것이다. 내 생각엔 or연산을 빼도 성립할 것 같다. 쓰기회로도 이와 비슷하다. 읽기회로와 달리 or연산이 하나 빠졌다. 데이터를 통째로 입력하.. 더보기
튜링기계를 컴퓨터 회로로 ':)'을 계속 쓰는 스마일 튜링기계가 있다고 하자.그렇다면 다음과 같이 A와 B상태가 번갈아가면서 :) 을 계속 쓸 것이다.(악필이다.. 그러려니 넘어가자) 이 튜링기계를 전기회로 바꾸고 싶은데 우선 'A'나 '>' 같은 기호를 표현해주기 위해 이진수로 표현해 보도록 한다. 그런다음 상태와 심볼, 움직임에 따른 각각의 이진수를 표로 나타낸 뒤 어떤 연관을 가지는 지 알아보자. 튜링기계가 간단하기 때문에, 이진수 표도 간단하게 나타낼 수 있다.이제 이 표를 가지고 회로도를 나타내는데 이번엔 회로도 자체보단 메모리와의 관계를 알아보도록 하자. 먼저 긴 메모리와 작은 메모리에서 S, I0, I1을 받아온다. 그 후 위에 표와 같은 연산을 마치고 S', O0, O1, D0, D1을 다시 메모리에 쓴다. 이 과.. 더보기
[Python3] 소수이면서 각각의 자리가 소수인 수 각 자리가 소수이면서 전체적으로 소수인 수를 구하라 말 그대로 소수이면서 각 자리 또한 소수인 수를 구하는 것이다.n = int(input()) num = list(range(1, n + 1)) prime = [] for i in range(1, n + 1): if(i == 1 or num[i - 1] == 0): continue prime.append(i) for j in range(i * 2 - 1, n, i): num[j] = 0 double_prime = [] for i in prime: check = True for k in list(str(i)): if(k not in ['2', '3', '5', '7']): check = False break if(check): double_prime.app.. 더보기
컴퓨터과학이 여는 세계_7.1 메모리회로 만들기_이광근 강좌 동영상 메모리회로: 어떤 값을 기억하고 있고 추후 그 값을 사용하거나 수정할 수 있는 회로 "flip-flop"회로라고도 한다. 전기는 한번 입력되면 순식간에 지나가기 때문에 시간이 지나도 그 정보가 남아있는 회로는 생각하기 힘들다. 하지만, 다음과 같이 회로를 만들면 가능하다.(컴퓨터로 지금까지 그렸는데, 시간이 너무 많이 걸려서 앞으로 손그림을 이용하기로 했다) 초승달 A, B가 or스위치고 그옆에 붙어있는 원이 not 스위치이다.R = 0, S = 1 이면 B에서 S가 1이니 무조건 1을 반환할것이고 not때문에 0이 된채로 A에 들어간다. 이때, R = 0이니 A는 0을 반환하지만 not 때문에 1이 되고 Q = 1이 된다.R = 0, S = 0 이 되어서 S가 꺼지면 A에 남아있던 1이 B.. 더보기
SQL - 04 먼저, 명령들을 입력할 무언가가 필요한데 난 그 무언가를 가장 기본적인 콘솔창으로 하기로 했다. APMSetup을 사용한다면, SQL콘솔창은 시작메뉴에 'MySQL Console(root)'요놈이 콘솔창이다. 만약 시작메뉴에 등록을 하지 않았다면, APM_Setup\Server\MySQL5\bin에 'mysql.exe'를 우클릭-바로가기 만들기를 한뒤에 바로가기를 우클릭-속성에 들어가 대상 끝에 '-uroot -p'를 추가한다. 바로가기를 실행하게 되면, 다짜고짜 비밀번호를 입력하라는 창이 뜨게된다. 여기서 당황하지 말고, apmsetup 이라고 입력하자. 입력후엔, 이제 자유로이(?) 명령을 입력해 데이터 베이스를 조작할 수 있다. 더보기
둘중 하나 결정하기 multiplexer C의 값에 따라 A나 B 둘중 하나를 선택하는 회로를 multiplexer라고 한다. 이때, A와 B는 0이나 1 둘중 하나이고, C가 0이면 결과를 A값으로 C과 1이면 결과를 B값으로 하도록 해보자. 이제 만들어진 표를 가지고 부울 논리를 만들어 보자.? =~A, B, C or (0 1 1) ...①A, ~B, ~C or (1 0 0) ...②A, B, ~C or (1 1 0) ...③A, B, C (1 1 1) ...④ ①과 ④는 B, C가 공통이고 ②와 ③은 A, ~C가 공통이므로 묶어내자. ?=B, C, (~A or A) orA, ~C, (~B or B) 또, A or ~A = 1(참)도 적용하자. ? = B,C or A, ~C*(and는 콤마(,) 로 not은 물결(~)로 나타내었다. 더보기
컴퓨터과학이 여는 세계_6.3 디지털 논리회로 만들기: 응답_이광근 강좌 동영상 전기회로를 이용해 가위바위보도 만들 수 있다. 우선, 전기 신호는 0과 1 둘밖에 없으니 신호 여러개를 사용하여 더 많은 경우의 수를 만들어 보자. 가위 바위 보는 낼 수 있는 세가지 경우의 수가 있으니 전기신호 두 개를 사용하여 만들면,가위를 00바위를 01보자기는 10이라고 할 수 있다. 또, 결과 값도 세가지이니 (A와 B 두 명이서 가위바위보를 한다고 하자) 마찬가지로 전기신호 두 개를 사용하면,비기면 11A가 이기면 10B가 이기면 01로 표현할 수 있다. 각각의 경우에 대하여 표를 만들어 보자. 이제 각각에 대하여 부울식을 만들어 보자. C가 1인 식을 찾아 C0와 C1 각각 NOT과 AND로 한줄을 표현하고 다음줄을 OR로 이어쓰면 된다. C0 =(~A0, ~A1, ~B0, ~B.. 더보기
스위치 회로 = 집합 몇몇은 눈치를 챘는지 모르겠지만, 집합이랑 스위치 회로랑도 비슷한 연산관계를 갖는다. 이 말은 곧 부울대수와 집합이랑 같다는 의미이다. 먼저, A and B라는 연산자를 보면 A와 B가 참이면 참이다. 곧 A라는 조건을 만족하고 동시에 B라는 조건도 참이라는 소리이다. 이 때 A∩B를 보자. a라는 조건을 만족하는 집합A와 b라는 조건을 만족하는 집합B가 있을 때, 두 조건을 모두 만족하는 집합은 A∩B인 것이다. A and B랑 문맥상 같다는 것을 확인할 수 있다. 같은 방법으로 A or B를 보자. A라는 조건이나 B라는 조건 둘 중 하나만 맞으면 참이라는 연산자이다. 이는 A∪B랑 같다. 마지막으로, not A는 A라는 조건을 만족하지 않는 집합 AC 과 같다. 이렇듯 부울대수가 곧 집합이고 이는 .. 더보기
컴퓨터과학이 여는 세계_6.2 디지털 논리회로 만들기: 판정, 선택_이광근 강좌 동영상 A = B인지를 판단하는 회로를 만든다고 해보자. 먼저 A와 B에 따라 결과값이 뭔지를 생각해보자.이때, A=B에 쓰인 엑셀함수는 =IF(A2=B2, 1, 0)으로 A와B가 같다면 1을 다르면 0을 출력한다. 먼저 A와 B가 둘다 0일때 1을 결과로 내니까 둘다 NOT을 붙인뒤 AND로 엮자는 것이 첫 번째 생각이다. (~A * ~B) 다음으로 A와 B가 둘다 1일때도 1을 결과로 내니까 AND로 엮자는것이 두 번째 생각이다. (A * B) 마지막으로 두 연산을 더한다. (A * B) + (~A * ~B) (계산 순서때문에 괄호를 안해줘도 되지만 편의상 표기하였다. 따라서 A = B를 판단하는 회로는 (A * B) + (~A * ~B) 으로 만들 수 있다. 더보기