• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

yschmitzz

C++ criando S.O

8 mensagens neste tópico

Ae

provavelmente da pra criar um sistema operacional em c++

mas queria saber c vcs conseguem fazer isso?

:D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

um sistema operativo é constituído por vario módulos  e o arranque do sistema deve ser programa ao nível da linguagem maquina, bit a bit (botsartup) outros módulos claro que podem ser programados já em c++

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

provavelmente da pra criar um sistema operacional em c++

mas queria saber c vcs conseguem fazer isso?

Bom. Não dá para criar um sistema operativo em C++ a não ser que a kernel já tenha sido desenvolvida. E como a kernel é o coração de uma sistema operativo (SO), um SO não pode ser desenvolvido exclusivamente em C++. Mas mesmo se pudéssemos retirar a Kernel da equação, na minha opinião, o C++ não é a melhor linguagem de programação para o fazer a não ser que o compilador fosse largamente optimizado para o efeito (se se retirasse suporte para OO e Exceptions, abandonasse a STL, reduzisse a Standard Library e revertesse para malloc). Basicamente fazer do C++ uma linguagem C.

A Kernel é o primeiro passo para se desenvolver um sistema operativo sobre hardware já existente e para o qual exista um Assembler. A Kernel é desenvolvida em Assembly. Se não existisse um Assembler é porque o hardware seria novo e seria necessário desenvolver um. O Assembler é normalmente desenvolvido por fabricante do hardware.

Uma vez desenvolvida a Kernel do Sistema operativo, o C é normalmente a linguagem de eleição para desenvolver o OS. Na realidade um misto de C e Assembly. O C porque para todos os efeitos, é uma linguagem de mais baixo nível que o C++ e que oferece índices de performance que ao nível de desenvolvimento SO já se tornam importantes. Sobre a layer do Sistema Operativo são então desenvolvidas uma série de aplicações que juntas compõem o User Interface. Estas sim, poderiam ser - e muitas vezes são - desenvolvidas em C++.

Portanto um sistema operativo é desenvolvido com recurso principalmente a duas linguagens; Assembly e C. O C++ pode também ser usado. Mas quando é, já não o é a nível de SO, mas na layer seguinte que define o User Interface (E muitas vezes o C também está presente aqui lado a lado com o C++).

EDIT: Já agora. Não, não saberia como programar um sistema operativo.

um sistema operativo é constituído por vario módulos  e o arranque do sistema deve ser programa ao nível da linguagem maquina

Na realidade o bootstrapper é normalmente desenvolvido em Assembly. Não existe nenhum desenvolvimento em código máquina que eu tenha conhecimento. O Assembler fornece ao programador todas as ferramentas necessárias para lidar com o hardware.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O C++ pode também ser usado. Mas quando é, já não o é a nível de SO,

Já ouvi rumores de que o windows foi desenvolvido em C++. Já agora podias dizer-me o "porquê" de retirar o OO? É apenas porque estou a aprender C++ e gostaria de saber...

Quanto ao S.O., acho que deveria ser usada, tal como o Marfig disse, uma linguagem mais primitiva como o Assembly (quando digo primitiva refiro-me à aproximação dessa linguagem ao binário). Teoricamente o desempenho de um S.O. criado em assembly (exemplo) é superior a qualquer outro criado numa linguagem mais "moderna".

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, muitos componentes do Windows são desenvolvidos em C++. No Core no entanto, do que se sabe, é tudo um misto de C e Assembly. A Kernel entretanto é toda Assembly.

Já agora podias dizer-me o "porquê" de retirar o OO? É apenas porque estou a aprender C++ e gostaria de saber...

O OOP adiciona uma layer de complexidade que impõe algumas restrições de performance e memória ao software que nele se baseie. Por exemplo, o callling mechanism necessário para implementar funções virtuais, ou Real Time Type Identification (RTTI) são pesados a nível de performance e exigem mais memória. Em muitas aplicações isto é perfeitamente irrelevante. Mesmo em aplicações com exigências críticas a nível de performance o peso adicional poderá ser mitigado pelas vantagens da sua utilização.

Por outro lado, à a considerar o facto de que a velocidade de processamento só é um factor relevante em waiting conditions e quando essa diferença é visível e desconfortável. É por esta razão que normalmente não gosto quando se diz que o Java é uma linguagem e programação mais lenta que o C++ (apesar de pessoalmente nem sequer gostar de Java) quando se procura defender C++ como sendo superior a Java (o que quer que "superior" queira dizer). É que para muitos efeitos não faz diferença nenhuma esperar mais 0.015 segundos para um processamento intensivo terminar. Para o ser humano esta diferença não é visível.

Mas no desenvolvimento de um SO, performance e memória são críticos. Muito críticos mesmo. Portanto aqui é importante que só se use o indispensável. As facilidades OOP do C++ incorrem em custos adicionais que inevitavelmente teriam impacto tanto na memória que sobraria para as aplicações, como na performance do SO. Poder-se-ia argumentar, "bom, então use-se C++ à mesma mas sem OOP". Só que não é só OOP, é também Exceptions e a toda a STL e também (e principalmente) o operador new...

Portanto estaremos efectivamente a "reduzir" o C++ ao C, pelo que será mais fácil simplesmente programar em C :(

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado Marfig. Fiquei exclarecido. Portanto ao final de contas, programadores de C++ que não usem OO estão, ao fianl de contas, a programar numa espécie de C (agora já compreendo a tag "C/C++").

Mais uma vez, muit obrigado pelo exclarecimento e força. 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado Marfig. Fiquei exclarecido. Portanto ao final de contas, programadores de C++ que não usem OO estão, ao fianl de contas, a programar numa espécie de C

Só para esclarecer mais um pouco... :(

O C++ é por vezes vezes apelidado de "C com objectos" de forma a simplificar a sua descrição. Mas esta simplificação, pese embora por vezes bem intencionada, deveria realmente ser abandonada porque o C e o C++ são linguagens distintas em mais do que OOP. A razão da existência desta expressão é quase sem dúvida porque o C++ foi realmente chamado de "C with Classes" quando foi criado. O nome no entanto foi abandonado nesse mesmo ano e alterado para C++. "C with Classes" era o C com alguma funcionalidade OOP criado pelo Stroustrup para programar o primeiro compilador de C++.

O seu criador queria duas coisas essencialmente:

- Uma linguagem compatível com o que ele considerava a mehor linguagem de sistemas na altura (e ainda hoje), o C

- Uma linguagem que implementasse Generic Programming, Object Oriented Programming e inspirada no estilo de programação do Simula67

Precisava essencialmente de C, mas precisava de outras funcionalidades e de um nível diferente de expressividade. O C++ já era portanto na altura -- e mais ainda hoje -- uma linguagem diferente do C. E o seu sucesso e adopção só foi realmente possível graças à genialidade e bom-senso do seu criador em não criar apenas mais uma linguagem de programação, mas em manter uma relação muito próxima com o C. Na realidade muitos dos amantes do C e do C++ que gostam de se degladiar criticando a linguagem de programação do outro, deveriam se lembrar que dois dos colaboradores do Stroustrup na criação do C++ foram nada mais nada menos do que o Dennis Richie (o criador do C) e o Brian Kernigham que foi co-autor do famoso livro K&R C.

Mas esta proximidade entre as duas linguagens só poderá existir até um certo ponto. É essencialmente por isso que ambas são distintas. O C++ pode ser pensado como "C com mais coisas", mas até esta expressão estará errada porque efectivamente existe código C que não compila em C++:

char ch;
void* ptr = &ch; // void pointer. Até aqui tudo bem
int* ptr_i = ptr;  // conversão implicita de void* para int*. Muito comum em C. Inválido em C++.

double virtual; // válido em C. Inválido em C++. "virtual" é um palavra reservada

... para dar dois exemplos rápidos. Existe muito mais. Depois existe também funcionalidades da linguagem para além do OOP que não existem no C, como references e templates, por exemplo. Portanto quando digo que retirar OOP do C++ é parecido com programar em C, estou a simplificar a questão.

(agora já compreendo a tag "C/C++")

Não queiras :D

O termo C/C++ é usado de uma forma abusiva. Eu próprio sou culpado disso também. Estritamente falando não existe tal coisa como C/C++. Poder-se-á aceitar quando usado num contexto em que alguém se está a referir a ambas as linguagens em simultâneo, como por exemplo "O gcc e o Visual Studio são  compiladores C/C++". Mas no contexto estrito das linguagens de programação, exactamente porque ambas são essencialmente distintas deveria ser "C e C++" ou "C ou C++", conforme os casos.

O problema é que muita gente usa o termo como se ambas as linguagens fossem uma só como em "Em C/C++ existe a noção de apontador". O autor é muitas vezes bem intencionado. Ele está a querer dizer "Em C e C++ existe a noção de apontador". Eu próprio cometo este erro por vezes. Mas na realidade o leitor inexperiente poderá não perceber o termo dessa maneira (raramente o percebe dessa maneira) enquanto que o leitor mais conhecedor e também mais crítico pode franzir o sobrolho e considerar o autor inexperiente.

É tudo uma questão de semântica e existem pessoas que levam a semântica muito a sério. Mas infelizmente por vezes têm razão porque o termo pode ser usado mal, muito mal mesmo. Como em "Eu gosto de programar em C/C++. É uma linguagem espectacular". Eu fico feliz porque alguém gostar de programar em C/C++. Mas ficaria ainda mais se ele me ensinasse a programar nela também. É que eu não sei que linguagem é essa.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pá, muito obrigado por todos os esclarecimentos porque acredita que esclareceram. Além disso é só coloquei essa do "C/C++" por vi isso num forum qualquer.

offtopic: uma das coisas que me faz preferir C++ ao C:

cout<<"O seu no. de cliente é: "<<idNbr<<"\n";

Acho uma maneira muito lógica de fazer o output das variaveis em relação a C.

printf ("O seu no. de cliente é: %n", n); 

E foi uma das coisas que me fez mudar de C para C++, pois quando comecei com C a única coisa que sabia era PHP.

Quando entrei para C++ adorei aquela linguagem até por ser muito semelhante ao PHP.

Continuações e mais uma vez obrigado Marfig.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora