I (특히와 GCC) C라고 말하고 싶지만는이 목적을 위해 가장 일반적으로 사용되는 컴파일러입니다.
대부분의 최신 컴파일러는 "세그먼트 16 비트"를 더 이상 지원하지 않으며 "이 코드는 512 바이트에 맞아야합니다"또는 CPU 모드 스위치 및 비정상적인 상황을 처리하는 것과 같은 제한 사항을 처리하는 데 실제로 유용하지 않습니다. 이러한 이유로 "PC BIOS"(GRUB과 같은 것을 사용하는 것과 반대)를위한 자체 부트 로더를 작성하는 사람들은 방언의 방언 (NASM, FASM, GAS)을 사용하는 경향이 있습니다.
다른 언어 (및 다른 컴파일러)를 사용할 수 없다는 의미는 아닙니다. 사람들이 다양한 언어 (파스칼, C++, C# 등)로 커널을 작성하는 것을 보았습니다. 또한 하위 수준 코드 (예 : 부팅 코드 및 커널)로 제한됩니다. 그 이상으로 벗어나면, 높은 부분 (드라이버, 파일 시스템, GUI, 응용 프로그램)을 위해 거의 모든 것을 사용할 수 있습니다. 또한 커널 및/또는 OS의 상위 부분에 사용할 언어를 고안하는 사람들이 있습니다.
나는 대체적이지만 더 우수한 언어에 대한 의견이 있습니다. 필자가 생각하기에 "잠재적으로 우월한"것은 많은 다른 언어의 존재가 IT 업계에서 가지고있는 높은 "바벨탑"비용 (대부분의 프로그래머가 언어 차이로 인해 대부분의 소스 코드를 읽을 수없는)을 정당화하지 않는다는 것입니다. 전체. OS 프로젝트의 경우 대체 언어는 이론적 인 이점이 있지만 실제적으로 이러한 장점은 언어에 익숙한 사람들의 수를 줄이거 나 자원하여 도움을 줄 수 있다는 단점을 능가합니다 (장애가되어 도움을 필요로 할 때 버그 등), 또는 나중에 자원 봉사자가 수천 명의 운전자에게 기여해야하는 경우).
(예 : 부팅 코드, 커널 코드, 드라이버 등) 일반 오래된 어셈블러를 사용합니다. 나는 그것을 추천하지 않는다; 다른 언어보다 어셈블리에 대한 경험이 풍부하고 상위 언어를 사용하지 않는 다른 이유가 있고 이식성이 문제가되지 않는 한.
OS 프로젝트를 구성하는 대부분의 다른/별도 바이너리를 컴파일하는 데 사용할 수있는 무료 및 오픈 소스 컴파일러로서 GCC를 사용하는 것이 좋습니다. 그러나 비표준 언어 확장과 "구현 정의"비헤이비어 (어떤 언어와 어떤 컴파일러를 사용하든 상관없이)의 사용을 피하는 것이 좋습니다. 그러면 언제든지 다른 컴파일러로 전환 할 수 있습니다. 이유).
[표준 참조] (http://wiki.osdev.org/C%2B%2B_Bare_Bones) ... 부트 로딩을 위해 약간의 어셈블러가 필요하며 사용자 정의 링커 스크립트가 필요합니다 모든 것이 제자리에 있지만 원칙적으로 C++을 주요 개발 언어로 사용하는 것을 방해하는 것은 없습니다. 도서관을 가지고 있지는 않지만, 염두에 두십시오. –
이 새로운 운영 체제에서 작동하도록 컴파일러의 런타임 지원 라이브러리 (예 : CRT)를 포팅합니다. 먼저 C 버전을 이식하는 것이 현명합니다. 그것은 훨씬 작습니다. 그리고 예, 닭고기와 달걀 문제는 대개 이러한 프로젝트를 일찍 끝냅니다. –
마스터 부트 레코드의 내용을 빌드 할 때 C (혼자서도 * shudder * C++) 컴파일러를 사용할 수 있다면 놀랄 것입니다. 공간의 양은 작고 당신은 그것의 모든 인치가 필요합니다. 이것이 하나님이 조립 자들을 창조하신 이유입니다. MBR이 임의로 큰 덩어리를 디스크에서 읽을 수 있다면, 그 덩어리를 원하는대로 만들 수 있습니다. 읽어 와서 초기화 점으로 이동하십시오. –