나는 원자에서 전기, 트랜지스터, 논리 게이트, 집적 회로 (칩 / CPU)에 이르기까지 관련이있을 수있는 가장 낮은 레벨에서 시작할 것입니다 (더 낮은 레벨에서 시작할 수는 있지만 너무 관련이 없을 수 있습니다). ) 및 조립 완료 (상위 수준에 익숙하다고 가정합니다).
처음에
원자
원자 는 전자, 양성자 및 중성자로 구성된 구조입니다 (자체는 기본 입자 로 구성됨 ). 컴퓨터와 전자 기기에서 가장 흥미로운 부분은 전자가 전자 이기 때문에 전자가 이동하기 때문에 (즉, 이동하기 어려운 양성자와 중성자와는 달리 상대적으로 쉽게 움직일 수 있으며, 내부에 들지 않고 스스로 자유 부동 할 수 있음) 원자.
일반적으로 각 원자는 같은 수의 양성자와 전자를 가지고 있으며,이를 "중립"상태라고합니다. 그것이 일어날 때, 원자가 여분의 전자를 잃거나 얻을 수 있습니다. 이 불균형 상태의 원자는 각각 "양으로 하전 된"원자 (전자보다 양성자) 및 "음으로 하전 된"원자 (양성 전자보다).
전자는 구성 할 수없고 파괴 할 수 없습니다 (양자 역학에서는 그렇지 않지만 우리의 목적과 관련이 없습니다). 원자가 전자를 잃으면 근처의 다른 원자가 여분의 전자를 받거나 전자가 자유 부동 전자로 방출되어야합니다. 또는 자유 부유 전자로부터. 전자의 역학은 양으로 하전 된 원자 근처에 음으로 하전 된 원자가있는 경우 두 전자가 동일한 전하를 가질 때까지 일부 전자가 이동합니다.
전기
전기 는 음으로 하전 된 원자 수가 매우 많은 영역에서 양으로 하전 된 원자가 매우 많은 영역으로의 전자 흐름입니다. 특정 화학 반응은 음으로 하전 된 원자가 많은 하나의 노드 ( "애노드"라고 함)와 양으로 하전 된 원자가 많은 다른 노드 ( "캐소드"라고 함)가있는 상황을 만들 수 있습니다. 두 개의 반대로 하전 된 노드를 와이어로 연결하면 대량의 전자가 양극에서 음극으로 흐르게되며이 흐름을 "전류"라고합니다.
모든 와이어가 전자를 똑같이 쉽게 전달할 수있는 것은 아니며, 전자는 "저항성"재료보다 "전도성"재료에서 훨씬 쉽게 흐릅니다. "전도성"재료는 전기 저항이 낮고 (예 : 케이블의 구리 와이어) "저항성"재료는 전기 저항이 높습니다 (예 : 고무 케이블 절연). 반도체 (예 : 실리콘)라고 불리는 일부 흥미로운 재료는 반도체가 도체로 작용할 수있는 다른 조건에서 저항으로 변할 수있는 저항을 쉽게 변경할 수 있기 때문에 반도체 (예 : 실리콘)라고합니다.
전기는 항상 저항이 가장 적은 물질을 통과하는 것을 선호하므로 음극과 양극이 두 개의 전선으로 연결되어 있습니다. 하나는 저항이 매우 높고 다른 하나는 저항이 매우 낮습니다. 대부분의 전자는 저 저항 케이블을 통해 흐릅니다. 고 저항 재료에는 아무 것도 흐르지 않습니다.
중세
스위치 및 트랜지스터
스위치 / 플립 플롭은 일반 조명 스위치와 비슷하며 스위치를 두 개의 전선 사이에 놓아 전기 흐름을 차단 및 / 또는 복원 할 수 있습니다. 트랜지스터는 라이트 스위치와 정확히 동일하게 작동합니다. 단, 물리적으로 와이어를 연결 및 분리하는 대신 트랜지스터가 기본 노드에 전기가 있는지 여부에 따라 저항을 변경하여 전기 흐름을 연결 / 분리합니다. 트랜지스터는 반도체로 만들어져 있기 때문에 전류를 연결하거나 연결을 끊기 위해 반도체를 저항이나 도체로 바꿀 수 있기 때문입니다.
일반적인 유형의 트랜지스터 인 NPN BJT ( Bipolar Junction Transistor )는 "base", "collector"및 "emitter"의 세 가지 노드를 갖습니다. NPN BJT에서 전기는 "기본"노드가 충전 된 경우에만 "이미 터"노드에서 "수집기"노드로 흐를 수 있습니다. 베이스 노드가 충전되지 않으면, 실질적으로 전자가 흐를 수없고베이스 노드가 충전 될 때, 전자는 이미 터와 컬렉터 사이에서 흐를 수있다.
트랜지스터의 동작
( 대화식 그래픽으로 나보다 더 잘 설명 할 수 있기 때문에 계속하기 전에 이것을 읽는 것이 좋습니다. )
베이스와 컬렉터의 전원에 트랜지스터를 연결 한 다음 콜렉터 근처에 출력 케이블을 연결한다고 가정 해 봅시다 ( http://www.spsu.edu/cs/faculty/bbrown/web_lectures의 그림 3 참조). / 트랜지스터 / ).
베이스 나 컬렉터에 전기를 공급하지 않으면 다음과 같은 전기가 없기 때문에 전기가 흐를 수 없습니다.
B C | E O
0 0 | 0 0
베이스가 아닌 컬렉터에 전기를 공급하면베이스가 고 저항 재료가되어 전기가 출력 와이어로 빠져 나가기 때문에 이미 터로 전기가 흐를 수 없습니다.
B C | E O
0 1 | 0 1
콜렉터가 아닌베이스에 전기를 공급할 때 콜렉터와 이미 터 사이에 전하 차이가 없으므로 전기가 흐를 수 없습니다.
B C | E O
1 0 | 0 0
베이스와 컬렉터 모두에 전기를 공급하면 트랜지스터를 통해 전기가 흐르지 만 트랜지스터는 출력 와이어보다 저항이 낮아 출력 와이어를 통해 전기가 거의 흐르지 않습니다.
B C | E O
1 1 | 1 O
논리 게이트
한 트랜지스터 (E1)의 이미 터를 다른 트랜지스터 (C2)의 콜렉터에 연결 한 다음 첫 번째 트랜지스터 (O)의베이스 근처에 출력을 연결합니다 ( http://www.spsu.edu의 그림 4 참조) . / cs / faculty / bbrown / web_lectures / transistors / ), 흥미로운 일이 발생합니다. 또한 항상 첫 번째 트랜지스터 (C1)의 콜렉터에 전기를 공급하고 트랜지스터 (B1, B2)의 기본 노드로만 놀고 있다고 가정 해 봅시다.
B1 B2 C1 E1/C2 | E2 O
----------------------+----------
0 0 1 0 | 0 1
0 1 1 0 | 0 1
1 0 1 0 | 0 1
1 1 1 1 | 1 0
B1, B2 및 O 만 볼 수 있도록 표를 요약 해 보겠습니다.
B1 B2 | O
---------+-----
0 0 | 1
0 1 | 1
1 0 | 1
1 1 | 0
보라 보라 는 부울 논리 및 / 또는 논리 게이트에 익숙 경우는,이 정확하게 NAND 게이트 것을 알 수 있습니다. 부울 논리 및 / 또는 논리 게이트에 익숙한 경우 NAND (NOR뿐만 아니라)도 기능적으로 완전 하다는 것을 알 수 있습니다 . 즉 NAND 만 사용하면 다른 모든 논리 게이트와 나머지 진실을 구성 할 수 있습니다 테이블. 즉, NAND 게이트 만 사용하여 전체 컴퓨터 칩을 설계 할 수 있습니다.
실제로, 대부분의 CPU는 NAND, NOR, AND, OR 등의 조합을 사용하는 것보다 제조 비용이 저렴하기 때문에 NAND 만 사용하여 설계되었습니다 (또는 사용 되었습니까?).
NAND에서 다른 부울 연산자 도출
모든 부울 연산자를 만드는 방법을 설명하지 않고 NOT 및 AND 게이트 만 나머지를 다른 곳에서 찾을 수 있습니다.
NAND 연산자가 주어지면 NOT 게이트를 구성 할 수 있습니다.
Given one input B
O = NAND(B, B)
Output O
NAND와 NOT 연산자가 주어지면 AND 게이트를 구성 할 수 있습니다.
Given two inputs B1, B2
C = NAND(B1, B2)
O = NOT(C) // or NAND(C,C)
Output O
비슷한 방식으로 다른 로직 게이트를 구성 할 수 있습니다. NAND 게이트는 기능적으로 완전 하기 때문에 2 개 이상의 입력과 1 개 이상의 출력으로 논리 게이트를 구성 할 수도 있습니다. 여기서는 이러한 논리 게이트를 구성하는 방법에 대해서는 설명하지 않겠습니다.
깨달음 시대
부울 게이트에서 튜링 머신 구축
CPU는 Turing Machine의 더 복잡한 버전입니다. CPU 레지스터는 Turing Machine의 내부 상태이고 RAM은 Turing Machine의 테이프입니다.
튜링 머신 (CPU)은 다음 세 가지 작업을 수행 할 수 있습니다.
- 테이프에서 0 또는 1을 읽습니다 (RAM에서 메모리 셀 읽기)
- 내부 상태 변경 (레지스터 변경)
- 왼쪽 또는 오른쪽으로 이동 (RAM에서 여러 위치 읽기)
- 테이프에 0 또는 1 쓰기 (메모리 셀에 RAM 쓰기)
우리는 조합 논리를 사용하여 Wolfram의 2 상태 3 기호 튜링 머신 을 구축하고 있습니다 (현대 CPU는 마이크로 코드를 사용하지만 목적에 필요한 것보다 더 복잡합니다).
Wolfram (2,3) Turing Machine의 상태 테이블은 다음과 같습니다.
A B
0 P1,R,B P2,L,A
1 P2,L,A P2,R,B
2 P1,L,A P0,R,A
위의 상태 테이블을 진리 테이블로 다시 인코딩하려고합니다.
Let I1,I2 be the input from the tape reader (0 = (0,0), 1 = (0,1), 2 = (1,0))
Let O1,O2 be the tape writer (symbol encoding same as I1,I2)
Let M be connected to the machine's motor (0 = move left, 1 = move right)
Let R be the machine's internal state (A = 0, B = 1)
(R(t) is the machine's internal state at timestep t, R(t+1) at timestep t+1)
(Note that we used two input and two outputs since this is a 3-symbol Turing machine.)
R 0 1
I1,I2
(0,0) (0,1),1,1 (1,0),0,0
(0,1) (1,0),0,0 (1,0),1,1
(1,0) (0,1),0,0 (0,0),1,0
The truth table for the state table above:
I1 I2 R(t) | O1 O2 M R(t+1)
-------------+--------------------
0 0 0 | 0 1 1 1
0 0 1 | 1 0 0 0
0 1 0 | 1 0 0 0
0 1 1 | 1 0 1 1
1 0 0 | 0 1 0 0
1 0 1 | 0 0 1 0
나는 그런 논리 게이트를 실제로 만들지 않을 것입니다 (SE에서 그것을 그리는 방법을 모르겠고 아마도 상당히 클 것입니다).하지만 NAND 게이트가 기능적으로 완벽 하다는 것을 알고 있기 때문에 방법이 있습니다. 이 진리표를 구현할 일련의 NAND 게이트를 찾을 수 있습니다.
Turing Machine의 중요한 특성은 고정 상태 테이블 만있는 Turing 기계를 사용하여 저장된 프로그램 컴퓨터 를 에뮬레이트 할 수 있다는 것입니다 . 따라서 모든 Universal Turing Machine은 내부 상태 테이블에 명령을 하드 코딩하지 않아도 테이프 (RAM)에서 프로그램을 읽을 수 있습니다. 다시 말해, (2,3) 튜링 머신은 로직 게이트 구현 (하드웨어)에서 하드 코딩되는 대신 I1, I2 핀 (소프트웨어)에서 명령을 읽을 수 있습니다.
마이크로 코드
최신 CPU의 복잡성이 증가함에 따라 조합 논리를 단독으로 사용하여 전체 CPU를 설계하는 것은 엄청나게 어려워집니다. 최신 CPU는 일반적으로 마이크로 코드 명령의 인터프리터로 설계됩니다. 마이크로 코드는 실제 기계 코드를 해석하기 위해 CPU가 사용하는 CPU에 내장 된 작은 프로그램입니다. 이 마이크로 코드 인터프리터 자체는 일반적으로 조합 논리를 사용하여 설계됩니다.
레지스터, 캐시 및 RAM
우리는 위의 것을 잊었습니다. 우리는 어떻게 무언가를 기억합니까? 테이프와 RAM을 어떻게 구현합니까? 답은 커패시터라는 전자 부품에 있습니다. 커패시터는 충전식 배터리와 같습니다. 커패시터가 충전되면 여분의 전자를 유지하고 전자를 회로로 되돌릴 수도 있습니다.
커패시터에 쓰려면 커패시터를 전자로 채우거나 (쓰기 1) 커패시터가 비워 질 때까지 커패시터의 모든 전자를 쓰십시오 (쓰기 0). 커패시터의 값을 읽으려면 방전하려고합니다. 방전하려고 할 때 전기가 흐르지 않으면 커패시터가 비어 있지만 (0 읽기), 전기를 감지하면 커패시터를 충전해야합니다 (1 읽기). 커패시터를 읽는 것이 전자 저장소를 소모한다는 것을 알 수 있습니다. 현대의 RAM은 전기가있는 한 메모리를 유지할 수 있도록 커패시터를 주기적으로 재충전하는 회로를 가지고 있습니다.
CPU에는 여러 유형의 커패시터가 사용되며, CPU 레지스터 및 상위 레벨 CPU 캐시는 실제로 트랜지스터로 만들어진 초고속 "커패시터"를 사용하여 만들어집니다 (따라서 읽기 / 쓰기에 "래그"가 거의 없습니다) 이들을 정적 RAM (SRAM)이라고합니다. 메인 메모리 RAM은 더 낮은 전력을 사용하지만 더 느리고 훨씬 저렴한 커패시터를 사용하여 만들어지는 반면,이를 DRAM (Dynamic RAM)이라고합니다.
시계
CPU의 매우 중요한 구성 요소는 시계입니다. 클록은 처리를 동기화하기 위해 정기적으로 "틱"하는 구성 요소입니다. 클록은 일반적으로 잘 알려져 있고 비교적 일정한 발진주기를 갖는 석영 또는 다른 물질을 포함하며, 클록 회로는이 발진을 유지하고 측정하여 시간 감각을 유지한다.
CPU 작업이 완료 사이의 클럭 틱 및 읽기 / 쓰기가 완료 에 모든 구성 요소가 중간 상태에있는 동안 서로 짓밟 기적이 아니라 이동하는 것이 보장하기 위해 틱. 우리의 (2,3) Turing Machine에서 클럭 틱 사이의 전기는 로직 게이트를 통과하여 입력 (I1, I2, R (t))의 출력을 계산합니다. 및 에 클록 틱 테이프 기록기 테이프에 O1, O2을 작성한다, M의 값에 따라 이동 모터, 내부 레지스터 R의 값으로부터 기입 (t + 1)이면 테이프 판독기 현재 테이프를 읽고 I1, I2에 충전하고 내부 레지스터를 R (t)로 다시 읽습니다.
주변기기와 대화
(2,3) Turing Machine이 모터와 어떻게 인터페이스하는지 유의하십시오. 이는 CPU가 임의의 하드웨어와 어떻게 인터페이스 할 수 있는지에 대한 매우 단순화 된 관점입니다. 임의 하드웨어는 입력 / 출력을 위해 특정 와이어를 청취하거나 쓸 수 있습니다. (2,3) 튜링 머신의 경우 모터와의 인터페이스는 모터가 시계 방향 또는 시계 반대 방향으로 회전하도록 지시하는 단일 와이어입니다.
이 기계에 남아 있지 않은 것은 모터가 기계의 내부 "시계"와 동기로 작동하는 다른 "시계"가 있어야 언제 작동을 시작하고 중지해야하는지 알 수 있기 때문에 동기식 데이터 전송 의 예입니다 . 일반적으로 사용되는 다른 비동기 전송은 인터럽트 라인이라고하는 다른 와이어를 사용하여 CPU와 비동기 장치 사이의 동기화 지점을 전달합니다.
디지털 시대
기계 코드 및 조립
어셈블리 언어는 기계 코드에 대한 사람이 읽을 수있는 니모닉입니다. 가장 간단한 경우, 어셈블리와 기계 코드간에 일대일 매핑이 있습니다. 최신 어셈블리 언어에서는 일부 명령어가 여러 opcode에 매핑 될 수 있습니다.
프로그래밍 언어
우리 모두 이것에 익숙하지 않습니까?
휴, 마침내 완료, 나는 단지 4 시간 만 에이 모든 것을 입력 했으므로 어딘가에 실수가 있다고 확신합니다 (저는 주로 전기 기술 자나 물리학자가 아닌 프로그래머이므로 끔찍하게 잘못된 몇 가지가있을 수 있습니다). 실수를 발견 한 경우 주저하지 말고 @yell을 제공하거나 담당자가 있거나 보완 답변을 작성하는 경우 직접 수정하십시오.