Windows에서 컴파일 된 간단한 C 프로그램을 생각해 봅시다.기계 독립성
Intel CPU 컴퓨터에서 프로그램을 컴파일하고 AMD CPU 하나 (동일한 운영 체제)에서 실행할 수 있습니다. 그렇다면 CPU의 명령어 세트가 동일하다는 의미입니까?
OS가 같고 CPU가 동일한 컴퓨터에서 동일한 프로그램이 실행되지 않는 이유는 무엇입니까?
Windows에서 컴파일 된 간단한 C 프로그램을 생각해 봅시다.기계 독립성
Intel CPU 컴퓨터에서 프로그램을 컴파일하고 AMD CPU 하나 (동일한 운영 체제)에서 실행할 수 있습니다. 그렇다면 CPU의 명령어 세트가 동일하다는 의미입니까?
OS가 같고 CPU가 동일한 컴퓨터에서 동일한 프로그램이 실행되지 않는 이유는 무엇입니까?
개체 파일의 바이너리 설정은 완전히 다릅니다. 또한 사용할 수있는 라이브러리 또는 호출 방법.
ELF 또는 EXE 파일의 헤더를 비교하면 무슨 뜻인지 알 수 있습니다.
"main() {printf ("Hello \ n "); return 0;}과 같은 간단한 프로그램을 작성하면이 줄이 인쇄되도록 컴파일러에서 다루는 장면이 많이 있습니다. 는 어셈블리 명령어를 실행할 수 있기 때문에 같은 CPU에서 실행은 도움이되지 않지만, 제 1 OS 함수를 호출하는 즉시 끔찍하게 실패
이 조금 정교하게하려면. 그냥 exmaple로
을 우리가 Motorola 68000 CPU로 Amiga OS를 돌리고 있다고 가정 해 보겠습니다.
내가 올바르게 기억한다면, sys tem 라이브러리는 포인터를 CPU의 어드레스 레지스터에 로딩 한 다음 OS 기능을 호출하는 것을 포함한다.
이제 Motorola 68000 CPU를 사용하여 직접 OS를 작성한다고 가정 해 보겠습니다. 그러나 OS를 디자인 할 때 데이터 교환을 위해 스택을 사용하는 것이 훨씬 더 좋은 아이디어라고 생각했기 때문에 내 개인 OS에서 비슷한 기능을 호출하면 주소록에 주소를 전달하지 않습니다. 그것을 스택에 밀어 넣습니다. 실행 파일이 내 OS에서 실행될 때 (동일한 객체 구조를 사용하기 때문에로드 될 수 있다고 가정) 실행 파일은 레지스터에 값을 넣을 것이고 OS는 스택에서 팝하려고 시도 할 것입니다. 찾고 있던 가치가 그 밖의 어떤 것으로 생각되었다는 것을 알아라.
이 내용이 조금 더 자세하게 설명되어 있으므로 이해해 주시면 좋겠지 만 문제는 관련된 문제 중 일부에 지나지 않습니다.
Intel 및 AMD 모두 x86 (또는 x86-64) 아키텍처를 사용합니다. 그래서 두 소프트웨어 모두에서 동일한 소프트웨어를 실행할 수 있습니다. 그러나 컴파일 된 프로그램에는 아키텍처에 대한 종속성 외에도 기본 운영 체제에 대한 종속성이 포함되어 있습니다. 예를 들어 Linux 실행 파일의 이진 형식조차도 Windows 실행 파일과 다릅니다.
그러나 C 표준 라이브러리를 사용하고 다른 운영 체제와 프로세서 아키텍처에서 컴파일하는 간단한 C 프로그램을 사용할 수 있습니다. 코드에 운영 체제 종속 코드가 포함되어 있지 않으면 운영 체제간에 포트가 연결됩니다. 마찬가지로 코드가 기본 아키텍처의 endianess에 의존하지 않는 경우 아키텍처 전반에 걸쳐 포팅됩니다.
요한.
감사합니다. 런타임에 이식이 어떻게 이루어 집니까? –
"런타임에"은 무엇을 의미합니까? 런타임에서 호환성이 달성된다면 (Linux의 와인은 좋은 예입니다.) 누군가가 실행 파일을로드하는 방법을 알고있는 랩퍼를 작성한 다음 이진에서 호출을 가로 채어 기본 OS로 변환하는 것을 의미합니다. 런타임에는 실행 파일을 이식 할 수 없습니다. 항상 에뮬레이션 레이어가 필요합니다. – Devolus
런타임시 @ShankarNShankar 포트는 OS에 ** foreign ** 실행 파일을 읽고 실행할 수있는 많은 코드가있는 경우에만 제거 할 수 있습니다. 요즘은 ** 가상 머신 ** (VM)입니다. 두 플랫폼 모두 충분히 유사하여 일부 VM에서는 전체 VM이 필요하지 않은 일부 플랫폼에서는 VM없이 제거 할 수 있습니다. ** Linux x86 또는 Mac x86에서 Windows x86을 실행하는 Wine **이 하나의 예입니다. –
간단한 단어로 설명해주세요. 미리 감사드립니다. –
예를 들어 텍스트를 편집하여 의미를 설명합니다. – Devolus
오 좋은 그림. 컴퓨터 수준 (디지털 논리)에서 컴퓨터가 어떻게 작동하는지 알 수있는 좋은 책을 알고 있습니까? –