초보자이기 때문에 제 질문은 간단합니다. C++ 언어만을 사용하여 전체 컴퓨터 시스템을 프로그래밍 할 수 있습니까? 감사합니다. .C++을 사용하여 시스템 프로그래밍
답변
간단히 말해서 가능합니다.
그리고 어떻게하면 C++이나 C로 하드웨어 레지스터에 직접 액세스 할 수 있습니까? – hirschhornsalz
그럼 "시스템"을 정의하는 방법에 달려 있지 않습니까? 나는 그가 완전한 _software_ 시스템을 의미한다고 가정하고 있었다. ... – Goz
drhirsch 또한 하드웨어에 달려있다. 하드웨어 레지스터가 메모리 맵핑 된 경우, 전혀 문제가 없습니다. –
음 ... 일반적으로 시스템 종속 초기화 등을 위해 매우 낮은 수준의 어셈블리가 필요합니다.
엄밀히 말하면 "아니요"이지만 실제로는 매우 작은 비율 일 수 있으므로 실제 답변은 "예"입니다.
BeOS은 C++로 작성된 운영 체제의 예입니다.
또한 AROS. (http://www.aros.org) –
C++에서 가능한 모든 프로그램을 작성할 수 있습니다. 실제로 대부분의 프로그램을 대부분의 언어로 작성할 수 있습니다 (특히 성능 문제를 제외하는 경우). 이 개념은 "Turing completeness"라고도합니다.
기계어 코드로 컴파일되기 때문에 C++로 완전한 OS를 프로그래밍 할 수 있습니다 (10 년이나 남았는데 ....).
'초보자'의 일은 아니지만 솔직히 말해서 오래된 C 언어는 시스템 수준의 자료 (Windows 및 Linux 커널 모두 C 언어를 사용)에 더 적합한 선택입니다.
"기계 코드로 컴파일"하는 것이 당신이 그것에 완전한 OS를 쓸 수 있다는 것을 의미하지는 않습니다. C++에서 컨텍스트 스위치를 어떻게 작성할까요? 어떻게 레지스터 값을 저장 하시겠습니까? – tgamblin
C++은 C에서 찾을 수있는 인라인 어셈블리 코드와 동일한 기능을 제공합니다. 당신은 현학적 일 수 있고 C++로 작성하지 않지만 C++ 코드를 사용한다고 주장 할 수 있습니다. –
완전한 OS는 10 년 동안 쓸 필요가 없습니다. 나 자신을 포함한 많은 사람들이 하루 정도면 최소한의 OS를 작성했습니다. 모두는 OS의 복잡성에 달려 있습니다. 컴퓨터에는 OS가 필요하지 않을 수 있습니다. –
아니요.
프로그래밍 언어에서는 표준화되지 않은 하위 서비스가 필요합니다. 예를 들어, 시스템 포트와 DMA IO가 필요합니다. 기본적으로 모든 플랫폼에서 다르게 보입니다. 일반적으로 가장 낮은 레벨의 인라인 어셈블리 코드로 수행되지만 일부 C++ 컴파일러는 레지스터 및 특수 opcode와 같은 CPU 기능에 액세스하는 특수 키워드를 제공합니다. 예를 들어, MS VC++에서 EAX CPU 레지스터에 액세스하려면 _EAX 가상 변수가 있습니다.
당신은 무언가를하고 있지만, 게시물은 FUD처럼 조금 읽습니다. 하드웨어는 다를 수 있지만 C 또는 C++에서 놀라운 양을 수행 할 수 있습니다. 어셈블러에서 리눅스 커널이 얼마나 적게 작성되었는지 살펴보십시오. 어셈블러에 작성된 많은 부분이 C (또는 C++, 동일한 원칙이 적용됨)로 수행하는 것이 불가능했기 때문에가 아니라 성능상의 이유로 사용되었습니다. –
동의합니다. 몇 가지 비 C++ 코드 만 필요하다는 것을 이해하는 것이 중요합니다. 그러나 프로그래밍 언어 자체가 실세계와의 적절한 연결없이 이빨이 없어지는 것도 중요합니다. –
사실, C++에는 HW에 대한 그러한 저수준 인터페이스를 정확하게 지정하는 공식 기술 보고서가 있습니다. – MSalters
this book에 관심이있을 수 있습니다. 가장 낮은 하드웨어 수준에서 코드로 진행하는 컴퓨터 작동 방식을 설명합니다. 충분히 추천 할 수 없습니다!
당신은 약간의 조립이 필요합니다. 이는 C/C++ 컴파일러에서 생성되지 않는 운영 체제 디자인에 필요한 몇 가지 권한있는 지침이 있기 때문입니다.
예를 들어 사용자 측 코드가 프로세스 간 통신과 같은 운영 체제 서비스를 사용하려면 사용자 모드에서 커널 모드로 전환해야합니다. 이는 일반적으로 소프트웨어 인터럽트 (SWI)를 발행하여 수행됩니다. C++은 절대로 SWI 명령어를 생성하지 않습니다.
마찬가지로, 임의 정밀도 정수 arithmatic 라이브러리를 작성할 때 캐리 비트 값을 찾아야합니다. 이 작업을 수행 할 수있는 C/C++ 연산자가 없습니다. 어셈블러를 사용해야합니다.
Incidentation, 디바이스 레지스터에 직접 쓰기는 종종 휘발성 키워드가 구체적으로 해당 값이 예기치 않게
OS에 따라 다릅니다. MS-DOS, Windows 3.1/95/98, MacOS 9 이전 버전을 기억하십니까? 그들은 제한적 이었지만, 나는 그것들 중 일부에 대해 많은 훌륭한 일을했다. –
을 변경할 수 있습니다 레지스터의 언어에 배치됩니다 C.에서 수행 할 수 있음. C++은 Turing Complete ... a realtime 3D engine을 구현하는 동안 영리한 친구가 발견 한 Excel도 마찬가지입니다.
- 1. Microsoft WCF를 사용하여 P2P 분산 시스템 프로그래밍
- 2. 맵리 듀스 프로그래밍 시스템
- 3. C/C을 찾고 ++ 언어와 표준 라이브러리 사양
- 4. JetBrains 메타 프로그래밍 시스템
- 5. C에서 시스템 프로그래밍
- 6. 시스템 프로그래밍 언어와 응용 프로그래밍 언어의 차이점
- 7. 시스템 측 프로그래밍 - 어떤 언어입니까?
- 8. 프로그래밍 방식으로 열린 시스템 정보
- 9. 프로그래밍 방식으로 시스템 핫키를 감지하는 방법?
- 10. Mac에서 시스템 환경 설정을 사용하여 프로그래밍 방식으로 시스템 깨우기를 예약하는 방법은 무엇입니까?
- 11. 시스템 호출을 사용하는 Common Lisp GUI 프로그래밍
- 12. 시스템 전체 백업이 프로그래밍 방식으로 활성화되었는지 확인
- 13. Mac OS X 시스템 프로그래밍 및 bsd
- 14. 시스템 관리자가 필요로하는 최상의 프로그래밍 언어는 무엇입니까?
- 15. 프로그래밍 방식으로 시스템 네트워크 (프록시) 설정 변경
- 16. 프로그래밍 방식으로 Windows 시스템 시간을 변경하는 방법?
- 17. PHP를 사용하여 로그인 시스템
- 18. WCF를 사용하여 OLTP 시스템 만들기
- 19. DDD를 사용하여 양식 시스템 구축
- 20. NSDirectoryEnumerator를 사용하여 파일 시스템 모델하기
- 21. HTML을 사용하여 시스템 사운드 재생
- 22. 확인 시스템
- 23. 프로그래밍 언어 프로젝트를 사용하여
- 24. Sql Ce 시스템 테이블을 프로그래밍 방식으로 삭제 하시겠습니까?
- 25. getrusage() 시스템 시간, 사용자 시간을 가져옵니다. 유닉스 프로그래밍 도움말
- 26. 커널 프로그래밍
- 27. 프로그래밍 방식으로 새 MMS 메시지에 대한 시스템 알림을 비활성화 하시겠습니까?
- 28. 시스템/커널 수준에서 프로그래밍 학습을위한 텍스트 북/온라인 리소스
- 29. 프로그래밍 방식으로 Mac OSX 기본 시스템 키보드 단축키 가져 오기
- 30. 리눅스에서 기계의 일련 번호를 얻기위한 시스템 호출 (java로 프로그래밍 됨)
"전체 컴퓨터 시스템"이란 무엇입니까? –
글쎄, 적어도 당신이 목표로하고있다;) –
초보자가 깨닫지 못하는 것보다 완전한 컴퓨터 시스템에는 많은 것들이있다. 또한, 초보자는 종종 사람들 책상 (iPod, 블랙 베리 및 계산기 포함)에 앉아있는 컴퓨터 시스템보다 다른 종류의 컴퓨터 시스템이 있다는 것을 깨닫지 못한 경험이 있습니다. –