Re: Unterschied BSD <> Unix V

From: Greg 'groggy' Lehey <grog(at)lemis.com>
Date: Tue, 26 Mar 2002 11:02:21 +1030

On Monday, 25 March 2002 at 18:59:23 +0100, Matthias Teege wrote:
> On Mon, Mar 25, 2002 at 06:16:32PM +0100, Martin Kropfinger wrote:
>> ich habe ja schin gelesen, dass Linux ein Unix V ähnliches
>> System ist, aber nirgens steht wo genau der Unterschied zwischen BSD
>> und Unix V ist...
>
> Die UNIX Welt spaltete sich 1976 in die BSD Seite und die dunkle
> Seite nachdem AT&T Bell Labs von 1969-1970 die Entwicklung allein
> betrieben (bis Version 6).

Hmm. "Dunkle Seite"?

> Es folgten auf der BSD Seite die erste Release BSD (1977), 4.2BSD
> (1984), 4.3BSD(1985) und 4.4BSD (1993). Das sind die Ahnen der
> heutigen BSD Linien. Sie stammen alle direkt von 4.4 BSD.

Im Geigenstiel, 4.4BSD stammt direkt von 4.3BSD ab, usw.

> Die dunkle Seite begann mit Version 7 (1979). Dann folgten System
> III (1982), System V.2 (1984), System V.3 (1986) und System V.4
> (1988).

Nein, das ist nicht richtig. Die 7. Ausgabe (manchmal
fälschlicherweise Version 7 genannt) war wie die Vorgänger das so
genannte "Research UNIX", das über BSD bis zur 10. Ausgabe weiter
entwickelt wurde. Wenn man überhaupt von einer "dunklen Seite"
sprechen kann, dann müsste das das kommerzielle UNIX sein, System III
und System V, die von der 6. Ausgabe abgeleitet und mit Code von der
7. Ausgabe und 4BSD modernisiert wurden.

> In System V sind die wichtigsten Features beider Seiten wieder
> zusammengefaßt. UNIX Administratoren kommen mit beiden gut
> zurecht. Ich kollidierte nur einmal mit den etwas anderen
> Drucksystem.

System V fühlt sich so ungleichmäßig an. Das liegt wohl daran, dass
das System aus lizenztechnischen Gründen aus tausend Teilstücken
zusammengesetzt wurde.

>> Man liesst immer nur BSD ist viel besser da er älter
>
> BSD ist besser, völlig klar. :-)

BSD ist kaum älter als System V. Die erste brauchbare Version war
4.2BSD, erschienen 1983. Da gab's schon System V.

>> und kommerziell entwickelt wurde...

BSD war *nie* kommerziell. *Daher* der gute Ruf :-)

>> und Linux ist besser da es viel freier entwickelt wird oder wie
>> auch immer....
>
> Mir fehlt der Vergleich mit Linux. Ich habe noch niemals einen Linux
> Server gesehen. Auf einem Laptop sah ich es mal und dort ging dann
> der Sound "out of the box".

Ich habe immer wieder extreme Schwierigkeiten gehabt, Linux zu
installieren. FreeBSD kann ich im Schlaf installieren, aber auch mit
Hilfe wirklich bekannten Linux-Hackern (die in
http://www.dina.kvl.dk/~abraham/free/fame.html über mir stehen) gibt's
immer wieder Probleme.

>> Aber ich wüsste gerne mal: Was sind genau die (technischen)
>> Unterschiede zwischen BSD und Unix V
>
> Vor allem ist das Design aus einen Guß. Linux hat für mich immer
> etwas Zusammengeklaubtes.

Die Frage war nach System V. Die Antwort gilt aber :-)

On Monday, 25 March 2002 at 21:05:04 +0100, Bernd Walter wrote:
> On Mon, Mar 25, 2002 at 06:59:23PM +0100, Matthias Teege wrote:
>> On Mon, Mar 25, 2002 at 06:16:32PM +0100, Martin Kropfinger wrote:
>>> ich habe ja schin gelesen, dass Linux ein Unix V ähnliches
>>> System ist, aber nirgens steht wo genau der Unterschied zwischen BSD
>>> und Unix V ist...
>>
>> Die UNIX Welt spaltete sich 1976 in die BSD Seite und die dunkle
>> Seite nachdem AT&T Bell Labs von 1969-1970 die Entwicklung allein
>> betrieben (bis Version 6).
>>
>> Es folgten auf der BSD Seite die erste Release BSD (1977), 4.2BSD
>> (1984), 4.3BSD(1985) und 4.4BSD (1993). Das sind die Ahnen der
>> heutigen BSD Linien. Sie stammen alle direkt von 4.4 BSD.
>
> Die heutigen BSDs stammten eigendlich alle vom 4.3BSD NET/2.
> Die 4.4 Linie wurde nach erscheinen jeweils reingemerged.

Hmm, nicht ganz so. Schau' mal das FreBSD-repo an. Da kannst Du
lückenlos die Entwicklung bis zurück auf 4.4BSD-Lite verfolgen.

> Nachzulesen unter /usr/share/misc/bsd-family-tree

Sehr empfehlenswert. Ich frage mich aber, inwiefern die Diagramme
abgeändert werden sollten, um die Haupt- und Nebenquellen von
z.B. FreeBSD 2.0 dar

>> Wie Du siehst hat Linux, in diesem Sinne, nichts mit UNIX zu
>> tun. Linux ist ein Kernel. Das Drumherum ist das GNU System und das
>> ist laut eigene Aussage eben nicht UNIX.
>
> Die freien BSDs sind vom rechtlichen Standpunkt auch kein Unix.
> Vom Geschichtlichen her schon.

Jetzt darf es hinaus: Der USL-Prozess war begründet. Hier ein
Beispiel:

7. Ausgabe (1978), /usr/sys/sys/clock.c:

/*
 * timeout is called to arrange that
 * fun(arg) is called in tim/HZ seconds.
 * An entry is sorted into the callout
 * structure. The time in each structure
 * entry is the number of HZ's more
 * than the previous entry.
 * In this way, decrementing the
 * first entry has the effect of
 * updating all entries.
 *
 * The panic is there because there is nothing
 * intelligent to be done if an entry won't fit.
 */
timeout(fun, arg, tim)
int (*fun)();
caddr_t arg;
{
        register struct callo *p1, *p2;
        register int t;
        int s;

        t = tim;
        p1 = &callout[0];
        s = spl7();
        while(p1->c_func != 0 && p1->c_time <= t) {
                t -= p1->c_time;
                p1++;
        }
        if (p1 >= &callout[NCALL-1])
                panic("Timeout table overflow");
        p1->c_time -= t;
        p2 = p1;
        while(p2->c_func != 0)
                p2++;
        while(p2 >= p1) {
                (p2+1)->c_time = p2->c_time;
                (p2+1)->c_func = p2->c_func;
                (p2+1)->c_arg = p2->c_arg;
                p2--;
        }
        p1->c_time = t;
        p1->c_func = fun;
        p1->c_arg = arg;
        splx(s);
}

The corresponding definition in FreeBSD 1.0 (1992) sys/kern/kern_clock.c:

/*
 * Arrange that (*func)(arg) is called in t/hz seconds.
 */
timeout(func, arg, t)
        int (*func)();
        caddr_t arg;
        register int t;
{
        register struct callout *p1, *p2, *pnew;
        register int s = splhigh();

        if (t <= 0)
                t = 1;
        pnew = callfree;
        if (pnew == NULL)
                panic("timeout table overflow");
        callfree = pnew->c_next;
        pnew->c_arg = arg;
        pnew->c_func = func;
        for (p1 = &calltodo; (p2 = p1->c_next) && p2->c_time < t; p1 = p2)
                if (p2->c_time > 0)
                        t -= p2->c_time;
        p1->c_next = pnew;
        pnew->c_next = p2;
        pnew->c_time = t;
        if (p2)
                p2->c_time -= t;
        splx(s);
}

Dieser Code ist bis auf den Namen der Variablen func identisch mit
4.3BSD, wo sie noch fun hieß.

Greg

--
Finger grog(at)lemis.com for PGP public key
See complete headers for address and phone numbers
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Tue 26 Mar 2002 - 01:33:28 CET

search this site