학교에서 우리는 컴파일러가 기계어를 컴퓨터 프로그램으로 컴파일한다는 것을 배웠습니다. 우리는 또한 기계어가 하드웨어에 대한 직접적인 지시로 구성된다는 것을 배웠습니다. 그런 다음 동일한 컴파일 된 프로그램을 다른 하드웨어를 사용하는 여러 컴퓨터 구성에서 어떻게 실행할 수 있습니까?다른 컴퓨터에서 어떻게 프로그램을 컴파일하여 기계어를 실행할 수 있습니까?
답변
동일한 프로세서 (또는 Intel x86과 같은 제품군) 인 경우 '다른 하드웨어'의 의미에 따라 다르지만 기계 코드 명령어는 동일합니다.
여분의 하드웨어는 다른 주변 장치 (스크린, 디스크 프린터 등) 사용자가 프로그램을 실행할 수있는 방법을 다음 운영 체제, 당신이 그들에게 당신이 의미하는 경우
를 구동 지침의 일관된을 제공하여 그 내용을 숨 깁니다 경우 Intel x86에서 ARM CPU의 경우, 각 ARM 명령어를 읽고이를 x86으로 변환하거나 x86 기능 세트와 동일한 기능을 실행 한 후 리턴하는 일종의 가상 기계 에뮬레이터를 제외하고는 불가능합니다. ARM이했던 것과 같은 대답이다.
편집 : 당신은 다른 hw - 다른 주변 장치 그러나 동일한 프로세서 제품군을 가진 PC를 의미한다고 가정합니까?
하드웨어와의 대화에는 운영 체제 및/또는 장치 드라이버가 해당 장치로가는 데이터를 구체적으로 예약 한 특정 위치로 메모리를 옮기는 문제가 있습니다. 그런 다음 DOS와 BIOS를 사용하면 BIOS에서 특정 비트의 코드를 호출하여 해당 데이터를 처리하고 하드웨어로 보낼 수 있습니다.
에뮬레이터 또는 가상 머신을 사용하면 어느 쪽이든 효과적으로 기계어를 변환 할 수 있습니다.
그래서 어떤 종류의 에뮬레이션이 항상 프로세스에서 사용된다는 의미입니까? –
@BobbyMarinoff : 하나의 CPU 아키텍처 용 코드를 컴파일하고 다른 CPU 아키텍처에서 실행하는 경우에는 변환 작업을 수행해야합니다. –
네이티브 컴파일러가 프로세서의 특정 명령어 세트로 컴파일한다고 말하는 것이 더 정확하다고 생각합니다. 이전 버전과의 호환성을 유지하는 프로세서 제품군이 있기 때문에 : 8086 - 80386 - 80486 - 80586 - 이중 코어 - 쿼드 코어 ...; 각 프로세서는 조상의 명령을 실행합니다. 프로세서 아키텍처간에 코드를 이식하려는 경우 이전에 언급 한 것처럼 가상 시스템이나 에뮬레이터가 필요합니다.
간결한 답변 주셔서 감사합니다. 프로그램이 OS의 API에 어떻게 연결되는지 이해할 수 없었습니다. 나는 프로그램과 프로세서 사이에있는 추상화 수준이 있으며 그 중 일부는 명령어를 실행하고 나머지는 프로세서로 전달한다고 상상한다. 그리고이 "가상"지침은 어떤 언어 (또는 언어)로 작성되어 있습니까? 그 과정에 대해 더 자세히 읽을 수있는 곳은 어디입니까? –
그것은 단지 구체적인 지시보다는 움직이는 기억 일뿐입니다. 예전에는 화면이 특정 주소에 있었고 그 주소에 '65'를 쓰고 최상단에 'A'가 표시되면 1을 다른 위치에 썼고 그 문자의 색을 빨간. –
컴파일 된 C 프로그램은 현재 시스템에있는 라이브러리에 링크됩니다. 프로세서 아키텍처가 같더라도 컴퓨터 A의 실행 파일이 컴퓨터 B로 이동하면 컴퓨터 B가 컴퓨터 A와 동일한 라이브러리를 가지고 있지 않으면 실행 파일이 실행되지 않습니까? – Sophtware