기계 코드가 실제로 하드웨어와 CPU에 의해 실행될 때, 어떻게 생겼습니까?
명령어가 1과 0으로 표시되는 것처럼 이진처럼 보입니까, 아니면 opcode가 바이트 코드와 같은 16 진 숫자로 표시되는 바이트 인 16 진 숫자로 구성됩니까? 바이트 코드와 같이 이진 숫자로 다시 나눌 수 있습니까?
기계 코드가 실제로 하드웨어와 CPU에 의해 실행될 때, 어떻게 생겼습니까?
명령어가 1과 0으로 표시되는 것처럼 이진처럼 보입니까, 아니면 opcode가 바이트 코드와 같은 16 진 숫자로 표시되는 바이트 인 16 진 숫자로 구성됩니까? 바이트 코드와 같이 이진 숫자로 다시 나눌 수 있습니까?
답변:
내가 줄 수있는 가장 좋은 대답은, "아무것도"보이지 않는 "것입니다. 현재 CPU에 의해 실행되는 명령은 일련의 와이어로 표현되며, 일부는 고전압이고 일부는 저전압입니다.
고전압과 저전압을 0과 1로 해석 할 수 있지만, 고전압과 저전압 그룹을 16 진수로 또는 ADD $0 $1
CPU가 해석하는 방식과 가장 유사한 조립 명령으로 동일하게 해석 할 수 있습니다 . 이 숫자와 니모닉 자체는 인간이 읽을 수있는 편의성입니다. 내부적으로는 전선의 전압에 지나지 않습니다.
이 옵션 중에서 이진수는 0과 1이 전선의 고전압과 저전압에 직접 매핑되므로 "금속에 가장 가깝습니다". 그러나 다른 것들 중 어느 것도 부정확하지 않으며, 종종 더 유용합니다. 사람들이 16 진 덤프 실행 파일을 보지만 거의 2 진 덤프를 보지 않는 이유가 있습니다.
"처럼"는 은유를 의미합니다. 문자 그대로 "어떻게 보일 것"을 취하면, 그것은 마더 보드에 놓인 멋진 에칭 실리콘 조각처럼 보일 것입니다. 분명히 은유가 목표였습니다. 은유를 구축하기 위해 우리는 그것이 실제로 무엇인지 살펴 봐야합니다. 그런 다음 허용되는 은유를 만들 수 있습니다. 이것은 약간 길지만 다행히도 비디오 비유로 끝납니다 .
머신 코드는 실제로 메모리에 비트로 저장됩니다. 메모리 칩은 일반적으로 DRAM 으로 커패시터와 전자 양단의 전압으로 해당 비트를 저장합니다. 전자가없는 전압에 대해서는 말하기가 어렵습니다. 때때로 하나 또는 다른 것에 대해 이야기하는 것이 편리하지만, 어느 쪽이 가고 있는지, 다른 쪽이 따라 온다는 것을 이해하십시오.
기계 코드의 여정은 "가져 오기"로 시작합니다. 특정 패턴의 전압이 RAM 칩의 와이어에 적용되어이 특정 비트 세트가 CPU로 전송되어야 함을 나타냅니다. 왜? 상관 없어요. 일반적으로 해당 신호는 CPU가 마지막 명령을 마치고 첫 번째 명령을 내린 후 두 번째 치료를 요청하는 개와 같이 본능적 인 응답으로 새 명령을 요청하기 때문에 전송됩니다. 이 과정은 CPU의 자연스러운 불안정성으로 인해 바지가 약간 걷어차 기 시작합니다. 전원 공급 장치가 칩에 일정한 전압을 적용하면 전압 상승으로 인해 CPU가 RAM 칩에 올바른 전압을 공급하여 첫 번째 지침을 얻습니다 (BIOS 레이어를 조금 손으로 흔 듭니다. 이야기에).
최신 메모리는 데이터를 병렬로 스트리밍합니다. 이것은 머신 코드를 구성하는 비트가 RAM에서 CPU로 32/64 와이어를 논리적으로 말하는 "레인"(32 또는 64가 일반적)으로 분할됨을 의미합니다. 해당 라인의 전압은 CPU로 전송하기 위해 필요에 따라 상승 및 하강합니다.
CPU에 들어가면 작업을 수행 할 수 있습니다. 이것은 마이크로 아키텍처 의 영역 이며 문자 그대로 10 억 달러 규모의 산업이기 때문에 복잡해질 수 있습니다. 이러한 전압은 트랜지스터에 영향을 미치며 다른 비트에 영향을 미치며 "비트 추가"또는 "곱셈"으로 설명 할 수 있습니다. 그것들은 실제로 그 비트들을 나타내는 전압 일뿐입니다. 같은 방식으로 종이에 5 개의 문자열 "2 + 2 = 4"를 낙서하고 수학을했다고 말할 수 있습니다. 연필 흑연은 두 번째가 아닙니다. 그것은 우리가 그 숫자로 사용하고있는 물리적 표현 일뿐입니다.
이것이 실제 시스템이하는 것입니다. 잘 건너 뛰었습니다 ... 거의 모든 것 ...하지만 실제 질문으로 돌아갈 수있을만큼 괜찮습니다. [비 유적으로] 어떤 모습일까요?
그렇게된다면 Martin Molin이 Marble Machine으로 최고의 은유를 만들었을 것 입니다. 기계 코드는 커패시터의 전압이 아니라 중간에 페그로 일부 레고 테크닉스 스트립에 (수동으로) 인코딩됩니다. 이것은 DRAM보다 EPROM 과 비슷 하지만 둘 다 데이터를 보유합니다. 구슬은 전자와 같으며 전압 (또는 구슬의 경우 중력)에 의해 움직입니다. 그리고 전자가 움직일 때, 일을하는 게이트에 힘을가합니다.
그의 머신은 현대 CPU에 비해 단순하지만 은유가 적용되는 한 그렇게 나쁘지는 않습니다. 그리고 그것은 흥미 롭다!
이 비디오 , 특히 1:00-1:17을 확인하십시오 . 프로그램이 컴퓨터에서 실행될 때의 모습입니다. 두 행의 표시등은 주소 레지스터와 데이터 레지스터의 현재 내용을 보여줍니다. PDP-11에는 명령 레지스터가 없지만 내용이 표시되는 표시등이 있고 전면에 표시등이 있으면 거의 동일하게 보입니다. 16 등-일부는 켜져 있고 일부는 꺼져 있습니다.
깜박이는 조명을 정말로 좋아한다면 6 개의 레지스터, 스택 포인터, 프로그램 카운터의 현재 내용을 표시하기 위해 더 많은 조명을 가질 수 있습니다. 추가 32768 조명의 경우 캐시의 각 비트에 대한 조명을 가질 수 있습니다. 메모리의 각 비트마다 조명을 가질 수도 있지만 실제로는 많은 조명이 될 것입니다.
이것은 15.2 MHz에서 실행되는 PDP11-70이며 각 명령을 실행하는 데 약 1.5 마이크로 초가 걸립니다. 사람의 눈은 1/10 초까지의 변화를 감지 할 수 있으며, 이때 PDP-11은 60,000 개의 명령을 실행할 수 있습니다. 기본적으로 모든 것이 흐릿합니다.
프로세서를 구현 및 테스트 (및 테스트 및 테스트)하는 하드웨어 디자이너는 실제로 시각적 모델을 사용하여 설계가 수행하는 작업을 확인합니다. 대부분의 HDL 시뮬레이션 도구는 모든 레지스터와 와이어의 웨이브 뷰를 출력하여 디버깅이 용이합니다. 아래 스크린 샷 ( 여기 에서 촬영 )은 몇 가지 지침을 실행하는 RISC-V 프로세서에 대한 VCS 시뮬레이터의 이러한 파형을 보여줍니다.
이것은 전체 프로세서 설계와 관련된 논리의 작은 하위 집합을 보여주는 매우 간단한 예입니다. 전체 프로세서에 대해 이러한 뷰를 열고 로직을 통해 데이터가 전파되는 것을 볼 수 있습니다. 언급 한대로 머신 코드가 실행 중인지 확인하려면 명령 레지스터 또는 프로세서가 메모리에서 명령을 읽는 데 사용하는 버스의 웨이브를 볼 수 있습니다. 대부분의 웨이브 뷰어에는 버스 및 레지스터에 대한 유연한보기 옵션이 있으므로 이진, 16 진수, 8 진수 및 열거 형 레이블로 값을 표시 할 수 있습니다. 일부에서는 비트 패턴 매핑 표시 값을위한 고유 한 함수를 정의 할 수도 있습니다.
이것은 단지 프로세서의 시뮬레이션을 나타내는 것입니다. 이미 제조 된 프로세서 칩에 대해서는 이러한 종류의 견해를 얻을 수있는 방법이 없습니다.
건설중인 골목 아래로 걸려 넘어지는 맹인을 상상해보십시오. 사방에 구멍과 틈이있어 자연스럽게 넘어 져야합니다. 이 시각 장애인은 지시 사항, 대기 시간, 이동시기, 이동 위치 및 도로 끝까지 도달하기 위해 환경을 조작하는 방법에 대한 지침이 담긴 종이 스크롤이 있습니다. 그것이 맹목적으로 따르는 지침 목록 인 집회입니다. 그들은이 골목과이 맹인에게만 의미가 있습니다. 이론적으로 지침만으로 3D 모델을 재구성 할 수도 있습니다 (디 컴파일).
플랫폼을 변경할 때마다 맹인을위한 지침을 다시 컴파일해야합니다. 당신은 하드웨어 (건설 현장의 레이아웃), "12 개의 울타리가 나올 때까지 한 줄에있는 모든 울타리를 뛰어 넘기를 원합니다"와 같은 인간이 입력 한 의도 지침 (고수준 코드)을 알아야합니다. 맹인 (CPU)의 능력. 그는 단기 기억, 한 번에 여러 가지 일을 할 수있는 능력이 있습니까?
이러한 모든 정보를 취하고 일관된 명령어 스크롤을 만드는 것은 컴파일러의 일입니다.
프로그램이 어떻게 보이는지 설명 할 수 있습니까? 아니요. 그러나 우리는 그것을 어떻게 느끼는지 설명 할 수 있습니까? 그렇습니다. 어떤 곳도 보지 않고 거울 가장자리처럼 점프하고 달리는 것처럼 느껴질 것입니다.