컴퓨터는 어떻게 작동합니까? [닫은]


59

이것은 거의 부끄러운 질문입니다 ... 나는 컴퓨터 과학 학위 (및 두 번째 과정)를 가지고 있습니다. 거의 5 년 동안 정규 .NET 개발자로 근무했습니다. 나는 일반적으로 내가하는 일에 능숙 해 보인다.

그러나 나는 컴퓨터가 어떻게 작동하는지 모른다!

제발, 나랑 잠깐만 '컴퓨터가 어떻게 작동 하는가'에 대한 빠른 구글은 많은 결과를 낳을 것이지만, 내가 찾고있는 것에 실제로 응답하는 것을 찾기 위해 고군분투했다. 나는 이것이 엄청나게 큰 질문이라는 것을 알고 있습니다. 실제로 키워드 나 방향을 제시해 주시면

전원 공급 장치, 마더 보드, 램, CPU 등의 구성 요소가 있다는 것을 알고 있으며, 그들이하는 일에 대한 '일반적인 아이디어'를 얻습니다. 하지만 난 정말이 같은 코드의 라인에서 이동하는 방법을 이해하지 않습니다 Console.Readline().NET (또는 Java 또는 C ++)와 실제로 가지고 물건을.

물론, 나는 MSIL (.NET의 경우)을 모호하게 알고 있으며 JIT 컴파일러에서 약간의 마술이 일어나고 네이티브 코드로 바뀐다 고 생각합니다 (제 생각에). Java가 비슷하다고 들었고 C ++은 중간 단계를 잘라냅니다.

몇 가지 메인 프레임 어셈블리를 완료했습니다. 몇 년 전이었습니다. 몇 가지 명령어와 CPU 레지스터가 있다는 것을 기억하고 코드를 작성했습니다. ... 그리고 약간의 마술이 일어났습니다. ... 그리고 내 프로그램이 작동하거나 충돌 할 수 있습니다. 내가 이해 한 바에 따르면, '에뮬레이터'는 명령을 호출 할 때 발생하는 상황을 시뮬레이션하고 CPU 레지스터를 업데이트합니다. 그러나 그 지시 사항이 어떻게 작동합니까?

이것이 '컴퓨터'질문이 아닌 전자 질문으로 바뀝니 까? 나는 이것을 이해해야 할 실질적인 이유가 없다고 생각하지만, 나는 할 수 있어야한다고 생각합니다.

(예, 이것은 작은 아이와 함께 하루를 보낼 때 일어나는 일입니다. 당신이 모르는 정도를 깨닫기 위해 '왜?'라고 묻는 데 약 10 분과 5 번의 반복이 필요합니다)



20
나는 Charles Petzold의 코드 를 추천합니다

이 아닙니다 Emulator. 수백 (수천)의 입력 및 출력 와이어와 수십억 개의 논리 게이트가있는 실제 반도체 회로입니다. 는 Emulator교육 목적으로 만 사용되었다.
rwong

1
제목을보다 구체적 / 정보로 변경해야한다고 생각합니다. 이것은 실제로 매우 유용한 질문이지만, 언뜻보기에 작은 아이가 원래 요청한 것과 같이 완전히 어리석은 것처럼 보입니다. "높은 수준의 소프트웨어 명령이 낮은 수준의 하드웨어 응답에 연결되는 방법"과 같은 것으로 변경하십시오.
jhocking 2016 년

2
안녕 Rob, 지금 말했듯이, 이것은 절망적으로 광범위하며 책 추천 질문과 확장 된 토론으로 빠르게 바뀌 었습니다. 우리 둘 다 여기서 원하지 않습니다. 집중력을 강화 하고 현재 겪고 있는 문제에 대해 구체적 으로 물어볼 수 있으면 언제든지 문의하십시오.

답변:


139

나는 원자에서 전기, 트랜지스터, 논리 게이트, 집적 회로 (칩 / 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을 제공하거나 담당자가 있거나 보완 답변을 작성하는 경우 직접 수정하십시오.


37
" awesome "은 정의를하지 않습니다. 이 답변은 긍정적으로 영웅적 입니다.
njd

1
원자 부분이 정확하지 않습니까? 일반적으로, 이들은 완전한 외부 서브 쉘을 갖기 위해 중성으로 유지되기보다는 하전 된 원자를 형성하도록 이온화 될 것이다 .
대안

3
가능하면 +1, +1000 정말 놀라운 일이며이 분야를 좋아하는 이유 는이 답변에 포함 된 광범위한 정보가 현대 PC를 작동시키는 놀라운 기술 깊이에 흠집을 내기조차하지 않기 때문입니다.
quentin-starin

이런 세상에. 대단해. 한 번 이상 투표를 할 수 있으면 좋겠다.
Rob P.

3
+1하지만 현대 하드웨어는 NAND 게이트를 통해 정확하게 수행되지 않습니다. 예. 게이트가 있지만 실제로는 상당히 복잡하며 NAND 논리와 거의 비슷합니다. 제약은 거의 물리적입니다. 물리적 게이트는 먼저 논리 모듈로 조립되는데, 이는 고전적인 NAND 일 수 있지만 일반적으로 다소 더 높습니다 (예 : 플립 플롭 또는 반가산기). 허용되는 정확한 게이트 세트는 사용되는 로직 스타일과 제조 공장의 제약 조건에 따라 다릅니다. 모든 팹이 모든 것을 구축 할 수있는 것은 아닙니다. (Aaargh! 나는 세부 사항을 기억하기 시작하고있다! 도움!)
Donal Fellows

12

낸드에서 테트리스까지 12 단계

나는 이것이 당신에게 완벽하게 완벽 할 것이라고 생각합니다.

낸드에서 테트리스까지 12 단계


링크를 주셔서 감사합니다. 지금 시청하십시오. 이 대화의 중심 색인이 있습니까, 아니면 블로그에서이 대화를 보셨습니까?
jhocking 2016 년

확실하지 않습니다, 어느 날 서핑을
하면서이 내용이 나타났습니다

그는 13 단계 실리콘 웨이퍼를 놓쳤다.
Job

게시 해 주셔서 감사합니다! 이것은 기본적으로 이스라엘의 IDC에서 비디오 강의에서 강연을하는 강의 요강의 요약이며, 그의 책을 기반으로합니다.
littleadv 2016 년

이 사이트는 같은 자료입니까? 그것은 하나의 큰 비디오 nand2tetris.org
jhocking

10

조립을 마쳤다면 이해하기 위해 실제로 2-3 개 레이어 만 남았습니다.

  • 로직 게이트 , 이것은 움직이는 전자를 통해 로직이 구현되는 방식입니다.
  • CPU 및 시스템 설계는 로직 게이트가 CPU를 구성하고 RAM 및 주변 장치와 연결되도록 구성되는 방식입니다. 최신 CPU는 매우 복잡하지만 기본적으로 작동하는 방식을 이해하려면 Z80 과 같은 고전적인 간단한 CPU를 보는 것으로 충분합니다 .
  • Microcode : 어셈블리 명령어를 해석하고 레지스터 및 로직 회로의 하드웨어 수준 동작으로 변환하는 방법입니다.

마지막 하나 (마이크로 코드)는 전자 제품과 코드 사이의 간격을 메우기 때문에 "클릭"한 것입니다.


어쩌면 내가 놓친 마이크로 코드 일 수도 있습니다. 나는 논리 게이트와 CPU / 시스템 디자인에서 수업을 받았고, 어셈블리로 프로그래밍되었고, 이진 명령에 대해 모든 것을 배웠고 (모든 클래스에서 잘 수행 했음), 여전히 어떻게 모든 것이 잘 맞는지 말할 수 없었다. 마이크로 코드를 연구해야합니다.
케이시 패튼

@Casey : 실제로 당신이 잃어버린 것입니다. 저에게는 마이크로 코드에 대해 배우고 작성하는 것이 제 위치에 있습니다. 이제 컴퓨터 작동 방식을 이해합니다. 물론 이해하기 어려운 상황에 쉽게 빠져들 수있을 정도로 복잡해졌지만, 유능하고 지속적이며 충분한 시간을 투자하면 그러한 상황을 이해할 수 있다고 확신합니다.
Michael Borgwardt 2016 년

7

귀하가 요청한 내용을 정확하게 설명하는 CS 학부 강의 계획서의 예는 여기 (IDC.AC.IL 과정 CS101) 에서 찾을 수 있습니다 . 이 MIT 보도 자료 : " 컴퓨팅 시스템의 요소 : 첫 번째 원칙에서 최신 컴퓨터 구축 "을 기반으로합니다.


1
"컴퓨팅 시스템의 요소"에 대해 +1 훌륭한 책이며 "컴퓨터는 어떻게 작동합니까?"라는 질문에 정확하게 대답해야합니다.
Cedric

이 자료들이 무엇을하는지 더 자세히 설명해 주시겠습니까? 그리고 질문에 대답 할 때 왜 그 자료들을 추천하십니까? "링크 전용 답변" 은 Stack Exchange에서 그리 환영받지 않습니다
gnat


4

Charles Petzold의 코드 를 강력히 추천 합니다. 이 책은 컴퓨터를 만드는 방법에 대한 기록과 기술 개요입니다. 간단한 텔레그래프 스위치를 설명하면서이 책은 트랜지스터가 작동하는 방식을 보여준 다음 프로그래머블 컴퓨터 인 로직 게이트, 더 복잡한 것들로 작동하는 방법을 보여줍니다. 그것은 또한 매우 잘 쓰여졌으며 충분한 호기심을 가진 사람이라면 누구나 이해할 수 있습니다.


3

알아야 할 사항을 충분히 이해하기 위해 알아야 할 모든 것을 나열하는 것은 너무 어렵고 길다! 이 모든 질문에 실제로 대답하는 유명한 책은 Andrew Tanenbaum : Structured Computer Organization 에서 왔습니다 .

이 책은 실제로 책상 위의 실제 컴퓨터에서 논리 게이트와 부울 대수까지 여러분을 안내합니다. 그런 다음 그러한 시스템에서 모든 것이 실제로 어떻게 발생하는지 안내하는 아키텍처 예를 보여줍니다.

(한 쪽 참고 : ~ 800 페이지이므로 매우 비쌉니다. 중고 버전이나 이전 버전을 얻는 것만으로도 좋습니다. 개념은 바뀌지 않았습니다.)


2

그 말을하고 추측을하기 위해 많은 공이 필요합니다.

대부분의 코드는 점점 더 복잡한 하위 레벨 코드로 줄어 듭니다. 푸시 및 이동 레지스터 등이있는 어셈블리 레벨 코드까지 ..

그러면 하드웨어가이 코드를 가져 와서 작동합니다. 대부분의 경우 하드웨어에는 실제로 작업 방법에 대한 자체 지침이 있습니다. 따라서 레지스터 (메모리 위치)가 1 또는 2와 같은 값을 얻는 PUSH와 같은 간단한 명령이있을 수 있습니다.

확실히 컴퓨터 질문입니다. 또한 프로그래밍도 가능합니다. 일부 프로그래머는 코드를 취할 하드웨어를 프로그래밍하여 매우 낮은 수준의 작업을 수행합니다. 전자 질문이기도합니다.


1

장치가 있습니다.

그런 다음 이러한 장치와 상호 작용하는 장치 드라이버가 있습니다. C로 작성된 부품, 일반적으로 어셈블리 부품.

OS는 한쪽 끝의 응용 프로그램 소프트웨어와 다른 쪽 끝의 장치 드라이버와 상호 작용하여 실제 하드웨어와 통신합니다.

정말로 관심이 있다면 Linux 커널 해킹으로 더 많은 것을 배우지 않겠습니까?


답변과 제안에 감사드립니다. 좋은 생각 인 것 같습니다!
Rob P.

1

사물의 핵심은 전자 질문이지만, 이것의 기본 사항은 모든 CS 학위에 대한 설문 조사 과정에서 다루어 져야합니다. 모든 하드웨어는 구성 요소 수준에서 프로그래밍 된 게이트를 기반으로 작동합니다. 가장 기본적인 논리 연산은 NOT, AND, OR, XOR, NAND, NOR입니다. 각 게이트에는 특정 기능이 있습니다.

NOT의 게이트는 0 또는 1을 얻고, 반대로 출력하는 하나 개의 입력 값을 취하고 하나의 출력값을 생성한다.

AND 게이트는 그것이 1 출력하는 두 사람을 제외한 임의의 조합에 대해 0에서 1과 0의 출력을 임의의 조합을 가져, 두 개의 입력 값을 사용하고 하나 개의 출력 값을 생성한다.

OR의 게이트 많이 AND 게이트처럼 동작하지만 0 출력하는 두 개의 제로 제외 0과 1이 도착의 모든 조합에 대해 1을 생성 할 것이다.

XOR의 게이트는 AND 및 OR 게이트 모두 다시 유사하지만 두 입력이 동일 할 때와 1 두 입력이 다를 때 0을 생성 할 것이다.

낸드 게이트는 AND 게이트의 논리와 반대 NOR 게이트는 OR 게이트의 논리적 반대이다.

다시 말해, 하드웨어 수준에서 가장 기본적인 이진 논리 표현으로 귀결됩니다. 다른 모든 것들은이 마지막 계층에 도달 할 때까지 더 높은 수준의 프로그래밍에서 더 낮은 수준의 프로그래밍으로의 전환 일뿐입니다.


+1 다음 단계는 이러한 논리 게이트로 순차적 동작을 수행하는 방법입니다. 핵심 구성 요소는 flip-flop 입니다. 로직 게이트를 조립하여 ALU, 레지스터 용 플립 플롭, 클럭을 형성하면 CPU를 얻게됩니다.
mouviciel

@mouviciel 멀티플렉서를 잊었다.
starblue


1

누군가가 하드웨어를 이해하지 않고 CS에서 과정을 이수 할 수 있다는 것은 놀라운 일이지만,이 과정은 엔지니어링 및 구현 세부 사항이 아니라 수학의 한 가지 이론으로 만 집중할 수 있다고 생각합니다. 훌륭한 SICP 강의 (1980 년대에 제공됨 )는 이와 같은 것처럼 보였습니다.

20 년 전 CS 과정 에서 첫 번째 버전에서는 Logic에서 Architecture이르기까지 이전 버전의 Computer 가 필요했습니다.
이와 같은 것이 틈을 메워야합니다.

또는 MIT의 오픈 코스웨어에 도움이 될만한 것이 있어야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.