OS가없는 타겟 (Linux라고도 함)과 OS가없는 타겟 (예 : 임베디드 DSP 타겟)에 대해 c/C++ 컴파일러를 사용하여 컴파일 할 때 두 개의 빈 프로그램 main {}
을 컴파일 할 때의 차이점은 무엇입니까? 나는 OS가있을 때와 그렇지 않은 경우에 컴파일러가 다르게하는 것을 알고 싶어한다. 두 경우 컴파일러/언어 런타임이 어떻게 다른가요?OS가 있거나없는 두 개의 빈 주 {} 프로그램의 차이점은 무엇입니까?
답변
실제적으로 링커 운영 체제에서 실행되도록 프로그램을 패키징하는 경우와 별도의 하드웨어에서만 실행되는 프로그램을 빌드 할 때 다른 작업을 수행합니다. 컴파일러는 호스트 아키텍처를 대상으로하는 명령으로 구성된 개체 파일을 생성하기 만하고 이러한 청크는 나중에 링커에서 결합 및 패키지화됩니다.
운영 체제에서 실행되는 프로그램은 특정 바이너리 구조를 가져야합니다. 여기서 실행 가능한 형식이 작동합니다. 이러한 형식은 프로그램이 처음에는 몇 개의 헤더 섹션을 가져야하고 그 다음에 코드가 따라야한다고 지시 할 수 있습니다. 이 구조를 해석 한 다음 코드 섹션에 포함 된 명령어 스트림을 CPU에 공급하는 것은 OS 로더의 임무입니다.
반대로 베어 하드웨어에서 실행되는 프로그램은 일반적으로 특별한 구조가 아니며 CPU에 직접 공급할 수 있습니다.
근본적인 질문입니다. 이 대답은 토론자의 초점을 (정확하게 IMO) 컴파일러에서 멀리 옮겼습니다. 자세한 정보에 대한 훌륭한 참고 자료 1) Bare Metal에 관한 Balau의 기사 (http : //balau82.wordpress.com/2010/02/14/가장 단순한 베어 메탈 프로그램을위한 /). 2) "실행 가능한 형식"은 Linux 용 Teensy ELF 실행 파일 (http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html)을 참조하십시오. –
그것은 실제로 프로그램을 빌드 대 운영 체제에서 실행하는 프로그램을 포장 할 때 다른 일을 링커입니다 만 베어 하드웨어 실행됩니다. 컴파일러는 단지 이라는 호스트 아키텍처를 대상으로하는 명령어로 구성된 파일을 생성하며이 덩어리는 나중에 링커에서 결합 및 패키지화됩니다.
운영 체제에서 실행되는 프로그램은 특정 바이너리 구조를 가져야합니다. 여기에서 실행 가능한 형식은 재생이됩니다. 이러한 형식은 프로그램이 처음에 몇 가지 헤더 섹션을 가져야하고 그 다음에 코드가 이어져야한다고 지시 할 수 있습니다 (예 : ). OS 로더는이 구조를 해석하고 코드를 입력 한 다음 섹션에 포함 된 명령어 스트림을 CPU에 공급합니다.
대조적으로 베어 하드웨어에서 실행하려는 프로그램 은 일반적으로 특수 구조가 없으므로 CPU에 직접 공급할 수 있습니다 ( ).
저는 Blagovest가 작성한 매우 잘 작성된 답변을 작성하고 싶습니다. 실제로 그는 실행 가능한 컨테이너 형식과 이진 인터페이스 및 기타 등등의 차이점을 제시합니다. 그러나 가장 큰 차이점은 실제 응용 프로그램 코드의 실행에 대한 기본 진입 점과 런타임 라이브러리와 함께 시작 코드의 존재 여부입니다. 비록 당신이 무엇을하고 있는지 알고 있다면, 본격적인 OS에서 후자와 연결되는 것을 피할 수 있습니다.
시작 루틴이있는 경우 crt0과 같은 런타임 라이브러리에서 종종 응용 프로그램의 실제 진입 점은 main
이 아닌 다른 항목 (보통 _start
)이됩니다. 이 실제 진입 점이 컨트롤을 사용자의 main
으로 가져 오기 전에 대개 초기 작업과 관련된 매우 구체적인 작업을 수행 할 수 있습니다.
항상 more information on crt0에 대한 위키피디아가 있습니다.
그러나 베어 메탈 플랫폼에서는 컴파일러와 함께 번들로 제공되는 루틴이 없을 수 있습니다. 결과적으로 컨트롤이 곧바로 main
으로 전달 될 수 있으며 플랫폼에서 실행될 첫 번째 코드가 사용자의 것입니다.
자,이 두 가지 종류의 가장 기본적인 차이점은 main
입니다. 그러나, 스택 등을 초기화하는 경우 시작 스크립트없이 수행 할 수있는 것처럼 질문이 다소 모호하다는 말을해야하며 런타임 라이브러리를 사용하여 일부 (대부분?) 맨 위에있는 모든 작업을 수행 할 수도 있습니다 - 금속 플랫폼. 사실이 모든 것은 컴파일러 제품군, 타겟팅하려는 플랫폼 등에 따라 다릅니다.
나는 차이가 없다고 말하고 싶습니다. 어떤 컴파일러 (또는 번역 시스템)은 주로 구현 에 종속적입니다. 두 번역 시스템 모두 리눅스보다 윈도우 용으로 다른 것들을 수행 할 가능성이 높습니다.
구현의 주된 차이점은 이 아닌 것입니다. 호스트되지 않으면 main
을 지원하지 않을 수도 있고, 그렇지 않은 경우 을 인수로 지원하지 않을 수도 있습니다. 호스트되지 않은 구현이 시작을 위해 을 필요로하거나 구현해야하는 것은 구현이 정의됩니다. 스타트 업에 관해서 "정의 구현"의 많은 호스팅 환경에서, 응용 프로그램이 필요합니다 main
을 지원하는 데 필요한, int
을 반환하고 두 개 이상의 서명을하고, 된 구현은이 있지만 그러한 기능을 제공한다.
과거와 현재의 많은 구현 인 은 실제로 여러 가지 이유로 호스트되지 않는다고 생각할 것입니다. 예를 들어, g ++는 호스트가 아닌 것으로 (gcc 이상) 문서를 작성했습니다. 제어가 없으므로 구현의 라이브러리 부분을 보장 할 수 없었기 때문입니다. 심지어 오늘은 일 뿐이므로 Microsoft의 C++은 콘솔 응용 프로그램을 생성 할 때만 호스트로 간주 할 수 있습니다. Windows 응용 프로그램에는 이없고 main
입니다.
@BlagovestBuyukliev는 잘 쓰여진 답변을 제공합니다.
조금 확장하고 싶습니다. OS가 없다는 것은 실제로 소프트웨어 구현 OS가 없음을 의미합니다. 이진 코드를 실행할 수있는 HW 조각에는 프로그램의로드를 처리하고 CPU 및 나머지 모든 하위 수준 세부 정보로 전달하는 프로토콜이 있습니다. 이 경우 "OS"는 실제로 HW로 구현됩니다. 이 시점부터 표준 OS와 다른 점은 이진 코드 실행을 고려할 때 원칙적이지만 기술적 인 것이 아닙니다.
- 1. 두 프로그램의 차이점은 무엇입니까?
- 2. 두 프로그램의 차이점은 무엇입니까?
- 3. 다음 두 프로그램의 차이점은 무엇입니까?
- 4. <> 연산자가 있거나없는 arraylist의 차이점은 무엇입니까
- 5. 장면이 있거나없는 스마트 TV 앱의 차이점은 무엇입니까?
- 6. 블록이 있거나없는 File.open()의 차이점은 무엇입니까?
- 7. PoC 빈 OS가 있습니까?
- 8. 코드와 프로그램의 차이점은 무엇입니까?
- 9. 연도와 주 단위의 차이점은 무엇입니까?
- 10. 보기에서 바인딩 접미사가 있거나없는 접미사 변수 - 차이점은 무엇입니까? 엠버에서
- 11. 두 개의 Ruby 스 니펫의 차이점은 무엇입니까?
- 12. 두 개의 ajax 스크립트의 차이점은 무엇입니까?
- 13. 두 개의 서로 다른 jqGrid의 차이점은 무엇입니까?
- 14. 환경이 있거나없는 파이썬
- 15. 두 SQL 쿼리의 차이점은 무엇입니까?
- 16. 설치 프로젝트는 두 개의 파일을 만듭니다. 차이점은 무엇입니까?
- 17. 두 개의 C++ 프로그램의 차이점
- 18. 전경과 배경 프로그램의 차이점은 무엇입니까?
- 19. Zend Router - 매개 변수가 있거나없는 URL은 두 개의 다른 경로입니다.
- 20. Open Graph META 태그가 있거나없는 Like 버튼의 차이점은 무엇입니까?
- 21. jQuery의 함수 안에 괄호가 있거나없는 함수를 작성하는 것의 차이점은 무엇입니까?
- 22. 이 두 프로그램의 결과물의 차이점은 무엇이며 그 이유는 무엇입니까?
- 23. 두 FactType 인터페이스의 차이점은 무엇입니까?
- 24. 주 프로그램의 메소드 호출
- 25. 두 명령의 차이점은 무엇입니까
- 26. 두 파일의 차이점은 무엇입니까?
- 27. 두 쿼리의 차이점은 무엇입니까?
- 28. 두 버튼의 차이점은 무엇입니까?
- 29. 두 가지의 차이점은 무엇입니까?
- 30. 두 명령문의 차이점은 무엇입니까?
DSP에 OS가없는 경우? – user1824407
OS를 가지고있을 때 그 파일은 어떤 종류의 파일인지, 어떤 종류의 파일인지, 그리고 premmissions가 있어야합니다. – elyashiv
관련 답변 : http://stackoverflow.com/a/4519407/17034 –