2009-12-16 3 views
-1

Ma question est simple car je suis débutant, alors est-ce que je peux programmer un système informatique complet en utilisant seulement le langage C++? Merci.Programmer un système avec C++

+2

Qu'entendez-vous par "un système informatique complet"? –

+2

Eh bien, au moins vous visez haut;) –

+0

Il ya beaucoup de choses à un système informatique complet que les débutants se rendent compte. En outre, les débutants n'ont souvent pas l'expérience nécessaire pour se rendre compte qu'il existe plus de types de systèmes informatiques différents que ceux qui sont assis sur les pupitres des peuples (y compris les iPods, les Blackberries et les calculatrices). –

Répondre

0

Simplement, oui vous pouvez.

+0

Et comment faites-vous un accès direct au registre du matériel en C++ ou même en C? – hirschhornsalz

+0

Eh bien cela dépend de la façon dont vous définissez "système" alors n'est-ce pas? Je supposais qu'il voulait dire un système de logiciel complet ... – Goz

+0

drhirsch, dépend également du matériel. Si le registre matériel est mappé en mémoire, aucun problème. –

11

Bien ... Généralement, vous aurez besoin d'au moins un peu d'assemblage aux niveaux les plus bas, pour une initialisation dépendant de la machine, etc.

Donc "non" à proprement parler, mais cela peut vraiment être une très petite proportion, rendant la vraie réponse "oui".

BeOS est un exemple de système d'exploitation écrit en C++.

+0

Et aussi AROS. (http://www.aros.org) –

0

Vous pouvez écrire tous les programmes possibles en C++. En fait, vous pouvez écrire la plupart des programmes dans la plupart des langues, surtout si vous excluez les problèmes de performances. Ce concept est connu sous le nom de "complétude de Turing"

+3

Bien sûr, cela ne vaut que pour une définition spécifique de "programme possible", et la complétude de Turing suppose un modèle assez abstrait. Vous ne pouvez vraiment pas écrire un noyau de système d'exploitation PC en Perl, simplement parce qu'il ne fonctionnera pas directement sur le matériel. – Thomas

+1

D'autre part, il n'y a pas de loi fondamentale que perl ne peut pas être compilé en code natif. – jalf

+0

Techniquement, vous pouvez coder un système d'exploitation dans n'importe quelle langue complète de Turing. Vous pouvez toujours utiliser Perl pour écrire un compilateur qui génère l'assembly nécessaire. –

-1

Vous pourriez programmer un système d'exploitation complet en C++ si vous étiez si incliné (et disposiez d'une dizaine d'années ...) puisqu'il compile en code machine. Cependant, ce n'est probablement pas une tâche «débutante», et pour être honnête, l'ancien C serait un meilleur choix pour les choses au niveau du système (les noyaux Windows et Linux utilisent C).

+0

Juste parce que quelque chose "se compile en code machine" ne signifie pas que vous pouvez y écrire un OS complet. Comment allez-vous écrire un changement de contexte en C++? Comment allez-vous enregistrer les valeurs de registre? – tgamblin

+0

C++ fournit les mêmes fonctionnalités pour le code d'assemblage en ligne que vous trouvez dans C. Vous pourriez être pédant et argumenter que cela n'écrit pas en C++, mais la plus grande partie du code serait C++. –

+0

Un système d'exploitation complet ne prend pas une décennie à écrire. Beaucoup de gens, y compris moi-même, ont écrit des systèmes d'exploitation minimes en un jour ou deux. Tout dépend de la complexité de l'OS. Une machine peut ne pas avoir besoin d'un système d'exploitation. –

2

Non, vous ne pouvez pas.

Vous avez besoin de services de bas niveau qui ne sont pas normalisés dans les langages de programmation. Par exemple, vous avez besoin d'un port système et d'E/S DMA, qui sont fondamentalement différents sur toutes les plates-formes. Ceci est généralement fait par le code de l'assemblage en ligne au niveau le plus bas, bien que certains compilateurs C++ vous fournissent des mots-clés spéciaux pour accéder aux fonctionnalités du CPU telles que les registres et les opcodes spéciaux. Par exemple, dans MS VC++, vous avez une pseudo-variable _EAX pour accéder au registre de la CPU EAX.

+0

Vous êtes sur quelque chose, mais le poste se lit un peu comme FUD. Le matériel peut être différent, mais une quantité surprenante peut être faite en C ou C++. Regardez simplement à quel point le noyau Linux est écrit en assembleur. Et beaucoup de ce qui est écrit en assembleur n'est pas parce qu'il était impossible de faire en C (ou C++, le même principe s'applique) mais pour des raisons de performance. –

+0

Je suis d'accord. Il est important de comprendre que seulement quelques codes non-C++ sont requis. Cependant, il est également important qu'un langage de programmation lui-même ne soit pas édenté sans lien approprié avec le monde réel. –

+0

En fait, C++ a un rapport technique officiel qui spécifie exactement une telle interface de bas niveau à HW. – MSalters

1

Vous aurez besoin d'un assemblage. Cela est dû au fait que certaines instructions privilégiées sont nécessaires pour la conception du système d'exploitation qui ne seront pas générées par un compilateur C/C++. Par exemple, lorsqu'un code utilisateur veut utiliser un service de système d'exploitation (comme une communication interprocessus), il doit passer du mode utilisateur au mode noyau. Ceci est normalement effectué en émettant un interruption de logiciel (SWI). Un C++ ne créera jamais l'instruction SWI. De même, lors de l'écriture d'une bibliothèque arithmatique entière de précision arbitraire, il faudra trouver la valeur du bit de report. Il n'y a pas d'opérateur C/C++ capable de faire cela pour vous. Vous devrez utiliser l'assembleur.

Incidentation, écrivant directement à un registre de dispositif peut et est souvent fait en C. le mot-clé volatile est placé dans la langue spécifiquement pour les registres dont les valeurs peuvent changer de façon inattendue

+0

Dépend de l'OS. Rappelez-vous le bon vieux temps de MS-DOS, Windows 3.1/95/98, MacOS jusqu'à la version 9? Ils étaient limités, mais j'ai fait beaucoup de bon travail sur certains d'entre eux. –

Questions connexes