Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Betriebssystem in C geschrieben: Wie kann das funktionieren?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 < [ 3 ]
010
24.08.2003, 12:59 Uhr
0xdeadbeef
Gott
(Operator)


Abgesehen davon gilt eher

C++:
class produkt {
protected:
  bool is_free;

public:
  produkt(bool free) : is_free(free) { }
  bool is_good() { return is_free; }  
};


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 24.08.2003 um 12:59 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
24.08.2003, 13:03 Uhr
Spacelord
Hoffnungsloser Fall



Zitat:
Pablo Yanez Trujillo postete
......
@Litte-OS-Programmer: was verstehst du unter Betriebssystem gebunden? Ich verstehe nicht, was du damit meinst? Dass es nicht portabel ist?
......




Nein ich denke eher dass er meint dass man früher oder später für sein eigenes OS auch seine eigenen libs schreiben muss.
Wenn du nur nen nackten Bootloader hast kennt dein Rechner kein printf!!
Man kann sehr wohl mit C einen Bootloader schreiben(als .bin -File !!) allerdings sind sämtliche Bibliotheksfunktionen tabu.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
24.08.2003, 13:04 Uhr
0xdeadbeef
Gott
(Operator)


Hier übrigens ne schöne Seite, die erklärt, was es mit C und Unix auf sich hat: www.gnu.org/fun/jokes/unix-hoax.html
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
24.08.2003, 13:05 Uhr
0xdeadbeef
Gott
(Operator)


@Spacelord: Man kann das Zeug doch statisch linken.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
24.08.2003, 13:09 Uhr
Pablo
Supertux
(Operator)


@beefy: Ich kenne den selben Text, aber auf Deutsch:
www.c-plusplus.de/geschichte.htm
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
24.08.2003, 13:18 Uhr
virtual
Sexiest Bit alive
(Operator)


@beefy
Bei so trivialen routinen ist das sicherlich möglich. Aber schon bei einem putc sollte es egal sein, ob statisch oder dynamisch: man sollte es vermeiden, weil bei einem Bootstrap eben das System noch nicht da ist.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
24.08.2003, 13:24 Uhr
Spacelord
Hoffnungsloser Fall



Zitat:
0xdeadbeef postete
@Spacelord: Man kann das Zeug doch statisch linken.


Dann musst du jedes Programm auf einem anderen Rechner schreiben,was soll denn das für nen OS sein wo in jeder Kernelfunktion die komplette C-Library von z.B. Linux mitgelinkt ist?
Desweiteren sind die Libs anderer Betriebssysteme ja auf diese genau zugeschnitten.Wenn deine Hardwarezugriffe und überhaupt alles andere genauso abläuft wie bei Linux brauchst du kein "neues" OS.Sollte es nicht so sein funktionieren die Funktionen nicht(zumindest nicht alle).
Mal eben die Lib´s von Linux rüberkopieren kannst du auch mal getrost vergessen.
Wahrscheinlich "kennt" dein OS ja nichtmal das Fileformat von Linux.Und falls doch.... NeuesOS=überfluessig.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
26.08.2003, 11:43 Uhr
0xdeadbeef
Gott
(Operator)


@virtual: Gut, dass man nicht nach stdout schreiben kann, wenn kein stdout da ist, klingt einleuchten. Wenn der Kernel eine Funktion aufruft, die im wesentlichen aus einem system call besteht, der dann wieder diese Funktion aufrufen würde, ist das laufzeittechnisch gesehen nicht besonders effizient. Aber, um mit Linus Torvalds zu sprechen: "We all know Linux is great...it does infinite loops in 5 seconds."

@Spacelord: Beim statischen Linken wird 1. nicht die ganze libc und 2. nicht in jede Funktion geschrieben. Du packst nur die Funktionen, die du aus den entsprechenden Bibliotheken brauchst, fest in dein Programm rein, für ne Sprunganweisung hat man in der Regel noch Zeit.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
26.08.2003, 17:57 Uhr
Spacelord
Hoffnungsloser Fall


@deadbeef:
Hier ist mal nen kleiner Ausschnitt aus der C Runtime von Windows.
Ist eine der absoluten Basisdateien!

C++:
/***
*heapinit.c -  Initialze the heap
*
*       Copyright (c) 1989-1998, Microsoft Corporation. All rights reserved.
*
*Purpose:
*
*******************************************************************************/



#ifdef WINHEAP


#include <cruntime.h>
#include <malloc.h>
#include <stdlib.h>
#include <winheap.h>

HANDLE _crtheap;

/*
* Dummy definition of _amblksiz. Included primarily so the dll will build
* without having to change crtlib.c (there is an access function for _amblksiz
* defined in crtlib.c).
*/

unsigned int _amblksiz = BYTES_PER_PARA;

int __active_heap;


void __cdecl _GetLinkerVersion(LinkerVersion * plv)
{
        PIMAGE_DOS_HEADER   pidh;
        PIMAGE_NT_HEADERS   pinh;

        plv->dw = 0;
        pidh = (PIMAGE_DOS_HEADER) GetModuleHandle(NULL);

        if ( pidh->e_magic != IMAGE_DOS_SIGNATURE || pidh->e_lfanew == 0)
            return;

        pinh = (PIMAGE_NT_HEADERS)(((PBYTE)pidh) + pidh->e_lfanew);

        plv->bverMajor = pinh->OptionalHeader.MajorLinkerVersion;
        plv->bverMinor = pinh->OptionalHeader.MinorLinkerVersion;
}

/***
*__heap_select() - Choose from the V6, V5 or system heaps
*
*Purpose:
*       Check OS, environment and build bits to determine appropriate
*       small-block heap for the app.
*
*Entry:
*       <void>
*Exit:
*       Returns __V6_HEAP, __V5_HEAP or __SYSTEM_HEAP
*
*Exceptions:
*       none
*
*******************************************************************************/


int __cdecl __heap_select(void)
{
        char env_heap_select_string[(_MAX_PATH+5)*16];
        char env_app_name[_MAX_PATH];
        char *env_heap_type = NULL;
        char *cp;
        int heap_choice;
        LinkerVersion lv;
        OSVERSIONINFO osvi;

        // First, check the OS for NT >= 5.0
        osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
        if ( GetVersionEx(&osvi) )
            if ( (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) &&
                 (osvi.dwMajorVersion >= 5) )
                return __SYSTEM_HEAP;

        // Second, check the envrionment variable override
        if (GetEnvironmentVariableA(__HEAP_ENV_STRING, env_heap_select_string, sizeof(env_heap_select_string)))
        {
            for (cp = env_heap_select_string; *cp; ++cp)
                if ('a' <= *cp && *cp <= 'z')
                    *cp += 'A' - 'a';
            if (!strncmp(__GLOBAL_HEAP_SELECTOR,env_heap_select_string,sizeof(__GLOBAL_HEAP_SELECTOR)-1))
                env_heap_type = env_heap_select_string;
            else
            {
                GetModuleFileName(NULL,env_app_name,sizeof(env_app_name));
                for (cp = env_app_name; *cp; ++cp)
                    if ('a' <= *cp && *cp <= 'z')
                        *cp += 'A' - 'a';
                env_heap_type = strstr(env_heap_select_string,env_app_name);
            }
            if (env_heap_type)
            {
                if (env_heap_type = strchr(env_heap_type,','))
                {
                    cp = ++env_heap_type;
                    while (*cp)
                    {
                        if (*cp == ';')
                            *cp = 0;
                        else cp++;
                    }
                    heap_choice = (int)strtol(env_heap_type, NULL, 10);
                    if ( (heap_choice == __V5_HEAP) ||
                         (heap_choice == __V6_HEAP) ||
                         (heap_choice == __SYSTEM_HEAP) )
                        return heap_choice;
                }
            }
        }

        // Third, check the build bits in the app; apps built with tools >= VC++ 6.0
        // will get the V6 heap, apps built with older tools will get the V5 heap

        _GetLinkerVersion(&lv);
        if (lv.bverMajor >= 6)
            return __V6_HEAP;
        else
            return __V5_HEAP;

}

/***


Wenn du nen popeliges new aufrufen willst kommt diese und 20 andere Dateien zu Einsatz.
Das ganze ist (mal ganz abgesehen von den Api-Aufrufen) so vollgepackt mit OS spezifischem Code dass du damit ohne Portierung auf deinem eigenen OS nichts(!) anfangen kannst.
Durch die gegenseitigen Abhängigkeiten der einzelnen Dateien wirst du im Endeffekt trotzdem die komplette lib mitlinken.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
26.08.2003, 19:20 Uhr
0xdeadbeef
Gott
(Operator)


Au weia, der Coder hat sich aber darauf verlassen, dass der Compiler ihm so ziemlich jeden Mist rausoptimiert. Aber zum Thema: ein "new" (oder vielmehr ein malloc, wenn wir von C reden) ist in aller Regel ein Teil des Kernels, und kein besonders komplizierter.

Nur als Beispiel: Die Linux-Kernel-Sourcen umfassen etwa 212 MB. Davon sind 38 MB plattformabhängig, also etwa 18%. Die verteilen sich ziemlich ungleichmäßig auf 20 Architekturen, von 4,6 MB bei PPC und Mips bis runter zu 351 KB für h8300. i386 liegt bei 2,5 MB. Das heißt, Im worst case sind etwa 2,57% (4,6/(212-38+4,6)), im best case etwa 0,2% des Codes plattformabhängig, i386 liegt mit etwa 1,4% in der Mitte.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 26.08.2003 um 19:21 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: