2009-12-16 3 views
-1

초보자이기 때문에 제 질문은 간단합니다. C++ 언어만을 사용하여 전체 컴퓨터 시스템을 프로그래밍 할 수 있습니까? 감사합니다. .C++을 사용하여 시스템 프로그래밍

+2

"전체 컴퓨터 시스템"이란 무엇입니까? –

+2

글쎄, 적어도 당신이 목표로하고있다;) –

+0

초보자가 깨닫지 못하는 것보다 완전한 컴퓨터 시스템에는 많은 것들이있다. 또한, 초보자는 종종 사람들 책상 (iPod, 블랙 베리 및 계산기 포함)에 앉아있는 컴퓨터 시스템보다 다른 종류의 컴퓨터 시스템이 있다는 것을 깨닫지 못한 경험이 있습니다. –

답변

0

간단히 말해서 가능합니다.

+0

그리고 어떻게하면 C++이나 C로 하드웨어 레지스터에 직접 액세스 할 수 있습니까? – hirschhornsalz

+0

그럼 "시스템"을 정의하는 방법에 달려 있지 않습니까? 나는 그가 완전한 _software_ 시스템을 의미한다고 가정하고 있었다. ... – Goz

+0

drhirsch 또한 하드웨어에 달려있다. 하드웨어 레지스터가 메모리 맵핑 된 경우, 전혀 문제가 없습니다. –

11

음 ... 일반적으로 시스템 종속 초기화 등을 위해 매우 낮은 수준의 어셈블리가 필요합니다.

엄밀히 말하면 "아니요"이지만 실제로는 매우 작은 비율 일 수 있으므로 실제 답변은 "예"입니다.

BeOS은 C++로 작성된 운영 체제의 예입니다.

+0

또한 AROS. (http://www.aros.org) –

0

C++에서 가능한 모든 프로그램을 작성할 수 있습니다. 실제로 대부분의 프로그램을 대부분의 언어로 작성할 수 있습니다 (특히 성능 문제를 제외하는 경우). 이 개념은 "Turing completeness"라고도합니다.

+3

물론 이것은 "가능한 프로그램"의 특정 정의에 대해서만 유지되며 Turing의 완전성은 꽤 추상적 인 모델을 가정합니다. Perl에서는 하드웨어에서 직접 실행되지 않기 때문에 실제로는 PC 운영 체제 커널을 작성할 수 없습니다. – Thomas

+1

반면에 펄은 원시 코드로 컴파일 될 수 없다는 근본적인 법칙은 없습니다. – jalf

+0

기술적으로 모든 튜링 언어로 OS를 코딩 할 수 있습니다. Perl을 사용하여 필요한 어셈블리를 출력하는 컴파일러를 작성할 수 있습니다. –

-1

기계어 코드로 컴파일되기 때문에 C++로 완전한 OS를 프로그래밍 할 수 있습니다 (10 년이나 남았는데 ....).

'초보자'의 일은 아니지만 솔직히 말해서 오래된 C 언어는 시스템 수준의 자료 (Windows 및 Linux 커널 모두 C 언어를 사용)에 더 적합한 선택입니다.

+0

"기계 코드로 컴파일"하는 것이 당신이 그것에 완전한 OS를 쓸 수 있다는 것을 의미하지는 않습니다. C++에서 컨텍스트 스위치를 어떻게 작성할까요? 어떻게 레지스터 값을 저장 하시겠습니까? – tgamblin

+0

C++은 C에서 찾을 수있는 인라인 어셈블리 코드와 동일한 기능을 제공합니다. 당신은 현학적 일 수 있고 C++로 작성하지 않지만 C++ 코드를 사용한다고 주장 할 수 있습니다. –

+0

완전한 OS는 10 년 동안 쓸 필요가 없습니다. 나 자신을 포함한 많은 사람들이 하루 정도면 최소한의 OS를 작성했습니다. 모두는 OS의 복잡성에 달려 있습니다. 컴퓨터에는 OS가 필요하지 않을 수 있습니다. –

2

아니요.

프로그래밍 언어에서는 표준화되지 않은 하위 서비스가 필요합니다. 예를 들어, 시스템 포트와 DMA IO가 필요합니다. 기본적으로 모든 플랫폼에서 다르게 보입니다. 일반적으로 가장 낮은 레벨의 인라인 어셈블리 코드로 수행되지만 일부 C++ 컴파일러는 레지스터 및 특수 opcode와 같은 CPU 기능에 액세스하는 특수 키워드를 제공합니다. 예를 들어, MS VC++에서 EAX CPU 레지스터에 액세스하려면 _EAX 가상 변수가 있습니다.

+0

당신은 무언가를하고 있지만, 게시물은 FUD처럼 조금 읽습니다. 하드웨어는 다를 수 있지만 C 또는 C++에서 놀라운 양을 수행 할 수 있습니다. 어셈블러에서 리눅스 커널이 얼마나 적게 작성되었는지 살펴보십시오. 어셈블러에 작성된 많은 부분이 C (또는 C++, 동일한 원칙이 적용됨)로 수행하는 것이 불가능했기 때문에가 아니라 성능상의 이유로 사용되었습니다. –

+0

동의합니다. 몇 가지 비 C++ 코드 만 필요하다는 것을 이해하는 것이 중요합니다. 그러나 프로그래밍 언어 자체가 실세계와의 적절한 연결없이 이빨이 없어지는 것도 중요합니다. –

+0

사실, C++에는 HW에 대한 그러한 저수준 인터페이스를 정확하게 지정하는 공식 기술 보고서가 있습니다. – MSalters

1

당신은 약간의 조립이 필요합니다. 이는 C/C++ 컴파일러에서 생성되지 않는 운영 체제 디자인에 필요한 몇 가지 권한있는 지침이 있기 때문입니다.

예를 들어 사용자 측 코드가 프로세스 간 통신과 같은 운영 체제 서비스를 사용하려면 사용자 모드에서 커널 모드로 전환해야합니다. 이는 일반적으로 소프트웨어 인터럽트 (SWI)를 발행하여 수행됩니다. C++은 절대로 SWI 명령어를 생성하지 않습니다.

마찬가지로, 임의 정밀도 정수 arithmatic 라이브러리를 작성할 때 캐리 비트 값을 찾아야합니다. 이 작업을 수행 할 수있는 C/C++ 연산자가 없습니다. 어셈블러를 사용해야합니다.

Incidentation, 디바이스 레지스터에 직접 쓰기는 종종 휘발성 키워드가 구체적으로 해당 값이 예기치 않게

+0

OS에 따라 다릅니다. MS-DOS, Windows 3.1/95/98, MacOS 9 이전 버전을 기억하십니까? 그들은 제한적 이었지만, 나는 그것들 중 일부에 대해 많은 훌륭한 일을했다. –

1

을 변경할 수 있습니다 레지스터의 언어에 배치됩니다 C.에서 수행 할 수 있음. C++은 Turing Complete ... a realtime 3D engine을 구현하는 동안 영리한 친구가 발견 한 Excel도 마찬가지입니다.

관련 문제