컴퓨터에 대해서 조금씩 공부하고 있는데요 궁금한 점이 생겼습니다.
cpu 마다 아키텍처가 다르고 명령어가 다르기 때문에
서로 다른 cpu 끼리는 프로그램이 호환이 되지 않는다고 하더군요...
여기까지는 이해할 수 있습니다.
그런데
동일한 CPU 에서 한쪽은 윈도우, 한쪽은 리눅스(맥,안드,....)설치를 하면
왜 서로 프로그램이 서로 호환이 안되는 걸까요?
분명히 동일한 아키텍처와 동일한 명령어 갯수를 가지고 있을텐데 말이죠...
이 부분이 너무 궁금합니다.
(프로그래밍 언어를 서로 달리했다 하더라도... 컴파일러가 똑같이 기계어를 만들어주지 않나요?)
현존 프로그램의 거의 대다수(임베디드빼고)는 운영체제의 시스템콜(api)을 통해서 추상화된 실제하드웨어와 연동합니다. 시스템콜 용법이 다르니 당연히 호환이 안ㄷ는 것
파일 포맷이 다르구여. 프로그램 로드 방식도 다르구여. 프로세스 관리도 다르구여. api도 다르구여. 등등