Rechnerorganisation Dieter Zöbel Universität Koblenz-Landau Fachbereich Informatik, Institut für Softwaretechnik Inhaltsverzeichnis 0 Prolog 1 1 Mechanismen der Organisation 1.1 Vorüberlegungen zur Organisation . . 1.2 Entwicklung von Rechensystemen . . 1.3 Organisation der Datenverarbeitung . 1.4 Beispiele . . . . . . . . . . . . . . . . 1.4.1 Organisation einer Vorlesung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 10 15 25 26 27 2 Datenorganisation 2.1 Organisation beim Publizieren . . 2.2 Dokumentenstruktur in LATEX . . 2.3 HTML - die Sprache des Web . . 2.4 XML - die Auszeichnungssprache 2.5 Content Management Systeme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 32 36 61 70 82 . . . . . . . . . . 3 Betriebssysteme 92 3.1 Nutzersicht auf Betriebssysteme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 3.1.1 Konzeptuelle Eigenschaften . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 3.1.2 Der Unix-Dateibaum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 i 3.2 3.3 3.1.3 Die Shell . . . . . . . . . . . . . . . . . . . 3.1.4 Wichtige Unix-Kommandos . . . . . . . . 3.1.5 Schutzmechanismen . . . . . . . . . . . . . 3.1.6 Aufbau des Dateisystems . . . . . . . . . . 3.1.7 Aufruf von Diensten . . . . . . . . . . . . Werkzeuge . . . . . . . . . . . . . . . . . . . . . . 3.2.1 Shell-Skripte . . . . . . . . . . . . . . . . . 3.2.2 Der Erzeugung lauffähiger Programme . . 3.2.3 Programmentwicklung mit make . . . . . . 3.2.4 Dezentrale Programmentwicklung mit cvs 3.2.5 Weitere Unix-nahe Werkzeuge . . . . . . . Prozesse und Interprozesskommunikation . . . . . 3.3.1 Erzeugung paralleler Prozesse mit fork . . 3.3.2 Der Pipe-Mechanismus . . . . . . . . . . . 3.3.3 Ersetzen von Prozessen durch andere . . . 4 Netzwerke 4.1 Das ISO/OSI-Referenzmodell . . . . 4.2 Bauformen . . . . . . . . . . . . . . . 4.3 Transportprotokolle für das Internet . 4.4 Zugang zum Internet . . . . . . . . . 4.5 Dienste der Anwendungsschicht . . . 4.6 Der socket-Mechanismus . . . . . . 4.7 Verteilte Dateisysteme . . . . . . . . 4.8 Verteilte Programmierung . . . . . . 4.9 Schutzmechanismen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 107 116 124 131 134 134 136 137 142 147 148 148 152 160 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 166 167 169 171 173 174 189 190 191 5 World Wide Web 192 5.1 Internetadressierung über URL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 ii 5.2 5.3 5.4 Elementare Internet-Protokolle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 Server-seitige Anwendungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 Client-seitige Anwendungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 iii Kapitel 4 Netzwerke Das Internet als Referenznetzwerk steht im Mittelpunkt der Betrachtung — warum? Seit Jahrzehnten spielt das Internet und seine Vorläufer eine entscheidende Rolle für die Entwicklung von Netzwerken in technischer, programmiertechnischer, anwendungsorientierter und organisatorischer Sicht. • Das OSI-Referenzmodell • Zugangsprotokolle zum Internet • technische und topologische Bauformen • Dienste der Anwendungsschicht • Internetprotokolle • Programmierschnittstellen 165 Rechnerorganisation KAPITEL 4. NETZWERKE 4.1 4.1. DAS ISO/OSI-REFERENZMODELL Das ISO/OSI-Referenzmodell Festgelegt von der Untergruppe Open System Interconnection (OSI) der International Standard Organisation(ISO) wurden sieben Schichten unterschiedlicher Aufgaben definiert, die im Allgemeinen bei der Datenübertragung in Netzwerken anfallen. • peer to peer-Kommunikation client write(...) --> server read(...) • der Protokollstapel, d.h. die Abbildung der write(...)- bzw. read(...)Operationen auf die Fähigkeiten der auf dem lokalen Endgerät vorhandenen nächst niedrigeren Schicht. Dieter Zöbel IST 166 Rechnerorganisation KAPITEL 4. NETZWERKE 4.2 4.2. BAUFORMEN Bauformen Gliederung von Netzwerken anhand der überbrückten Entferungen Bauelemente von Netzwerken • Übertragungsmedien • Gerätenetzwerke (CAN1) • Netwerkomponenten • lokale Netzwerke (LAN2) – Übetragungsgeräte • regionale Netze (MAN3 ) – Endgeräte • Weitverkehrsnetze (WAN4 ) 1 controller area networks local area networks metropolitan area networks 4 wide area networks 2 3 Dieter Zöbel IST 167 Rechnerorganisation KAPITEL 4. NETZWERKE 4.2. BAUFORMEN Topologien und Bauelemente • Repeater schicht) Topologien von Netzwerken • Bus • Bridge und Switching Hub (Sicherungsschicht) • Stern • Ring Bauelemente auf unterschiedlichen Transportschichten Dieter Zöbel (Bitübertragungs- IST • Router (Netzwerkschicht) • Gateway (Transportschicht) 168 Rechnerorganisation KAPITEL 4. NETZWERKE 4.3 4.3. TRANSPORTPROTOKOLLE FÜR DAS INTERNET Transportprotokolle für das Internet Enscheidend und maßgebend sind die kombinierten Protolkolle TCP5/IP6. Die IP-Adresse identifiziert einen Rechner, z.B.: 141.26.131.16. Hierbei handelt es sich um einen Rechner in der Domäne der Universität Koblenz (141.26). IP-Packete bestehen aus drei Angaben: Das TCP-Protokoll ist verbindungsorientiert und wickelt eine Sitzung (engl.: session) zwische Sender und Empfänger ab. Dabei wird der ganze Datenstrom in eine Folge von Packeten zerlegt. TCP besitzt: • IPwoher • Sicherheitsmechanismen • IPwohin • Flusssteuerung • Daten • Programmierschnittstelle (API, z.B. die Socket-Schnittstelle) Das IP-Protokoll ist verbindungslos. 5 6 Transmission Control Protocol Internet Protocol Dieter Zöbel IST 169 Rechnerorganisation KAPITEL 4. NETZWERKE 4.3. TRANSPORTPROTOKOLLE FÜR DAS INTERNET Dienste und Dienstleister bei TCP/IP Dienste auf Kommandoebene • ping testet den Bestand der Übertragungsstrecke • traceroute findet alle Router auf der Übertragungsstrecke Sogenannte demon-Programme laufen im Hintergrund der Rechner, die TCP/IP oder höhere Protokolle fahren • inetd der TCP/IP Dämon, der die Ports des TCP-Protokolls abhört und nach Bedarf einen der Dieter Zöbel IST folgenden anwendungsspezifischen Dämon-Programme startet • telnetd der Dämon für eine Terminal-Verbindung zu einem Rechner • ftpd der Dämon für die Übertragung von Dateien zwischen Rechnern • httpd der Dämon für das httpProtokoll 170 Rechnerorganisation KAPITEL 4. NETZWERKE 4.4 4.4. ZUGANG ZUM INTERNET Zugang zum Internet • via Telekommunikationsnetze • via Rechnernetze (Datenkommunikationsnetze) Protokolle für die Datenübertragung auf Telekommunikationsnetzen • für Modems: PPP7 oder Slip8 ISDN10 und HDLC • für ISDN9 -Anschlüsse: PPP over 11 • für xDSL12-Anschlüsse 7 point to point protocol serial line protocol(SLIP verfügt im Gegensatz zu PPP über variable Packetlängen und über mechanismen zur Authentisierung 9 integrated systems digital network 10 z.B. für die Kommunikation einer Fritz-Card 11 high level data link control protocol 12 digital subscriber line, bei TDSL mit 756kBit/s im Download und 128kBit/s im Upload 8 Dieter Zöbel IST 171 Rechnerorganisation KAPITEL 4. NETZWERKE 4.4. ZUGANG ZUM INTERNET Organisation des Internetzugangs Für Netzwerkbetreiber ist das NIC13, genauer DE-NIC in Karlsruhe, maßgebend. . .edu .com top-level first-level second-level .de uni-koblenz.de balvanie mailhost Das Auffinden von Netwerken wird durch den DNS14 ermöglicht. 13 14 network information center domain name service Dieter Zöbel IST 172 Rechnerorganisation KAPITEL 4. NETZWERKE 4.5 4.5. DIENSTE DER ANWENDUNGSSCHICHT Dienste der Anwendungsschicht Protokolle auf der Grundlage von TCP/IP • ftp (file transfer protocol): Unter Einloggen auf einem entfernten Rechner mittles dessen IP-Adresse stehen eine Reihe von Kommandos zur Datenübertragung und Administration auf dem entfernten Rechner bereit, z.B. put, get, ls, cd und bye. Die Sicherheit wird durch Angabe einer Kennung (z.B. anonymous) und eines Passwortes auf dem entfernten Rechner hergestellt. • telnet: Terminalverbindung mit einem entfernten Rechner. Auch hier wird die sicherheit durch Angabe einer Kennung (z.B. anonymous) und eines Passwortes auf dem entfernten Rechner hergestellt. Die Standardeingabe des Terminalfensters wird an den entfernten Rechner weitergeleitet. Mit quit wird diese Verbindung wieder abgebaut. Mit der escape-Taste gefolgt von [ wird ein Kommando an das eigene Terminalfenster geschickt. Dieter Zöbel IST 173 Rechnerorganisation KAPITEL 4. NETZWERKE 4.6 4.6. DER SOCKET-MECHANISMUS Der socket-Mechanismus Kommunikation von Client-Server Prozessen auf verschiedenen Rechnern (im Zuge von BSD 4.3) Kunde Bediener Anwendung Dienstprogramm Socket Transportschichten Socket Transportschichten Netzwerk Kundeprozeß und Bedienerprozeß installieren sog. Sockets (Kommunikationsendpunkte). Das Paar von Sockets steht für eine spezielle Kunde-BedienerBeziehung. Dieter Zöbel IST 174 Rechnerorganisation KAPITEL 4. NETZWERKE 4.6. DER SOCKET-MECHANISMUS Anbindung des Kunden an den Bediener Die Anbindung von Kunden an den Bediener erfolgt in einer Reihe von Schritten (hier auf der Grundlage eines verbindungsorientierten Transportprotokolls TCP/IP). Kunde: Bediener: socket() bind() listen() accept() socket() connect() read(), write() write(), read() Nachdem auf Bedienerseite mit accept() alle Voraussetzungen für eine Bedingung getroffen sind, kann ein Kunde ein connect() durchführen. Dieter Zöbel IST 175 Rechnerorganisation KAPITEL 4. NETZWERKE 4.6. DER SOCKET-MECHANISMUS Datenstrukturen für Sockets Die Socket-Adresse im Internet (definiert in <netinet/in.h>): struct soccaddr_in { short sin_familiy; u_short sin_port; struct in_addr sin_addr; char sin_zero(8); }; /* /* /* /* hier AF_INET */ 2 Byte Port-Nummer */ 4 Byte Internet-Adresse */ ungenutzt */ Ein Socket wird netzweit eindeutigdurch die 4Byte IP-Adresse und die 2Byte Portnummer identifiziert. Dieter Zöbel IST 176 Rechnerorganisation KAPITEL 4. NETZWERKE 4.6. DER SOCKET-MECHANISMUS Allgemeine socket-Stuktur Die Internet-Socket-Adresse ist eingebettet in allgemeine Socket-Adressen (definiert in <sys/socket.h>): struct soccaddr { short sa_family; union { struct soccaddr_in sa_in; . . . }; }; /* AF-Internet */ /* Internet Basis */ /* andere Basen */ Dieter Zöbel IST 177 Rechnerorganisation KAPITEL 4. NETZWERKE 4.6. DER SOCKET-MECHANISMUS Einrichten eines Socket Einrichten eines Socket (auf der Basis von TCP/IP): int socket(int family, int type, int protocol) Der Aufruf, um • im Internet (family) • verbindungsorientiert (type) • unter TCP (protocol) kommunizieren zu können, lautet für Kunde und Bediener gleichermaßen: sockfd = socket(AF INET, SOCK STREAM, IPPROTO TCP); und liefert den Dateidescriptor sockfd zurück, auf den die üblichen Systemaufrufe read(), write() und close() anwendbar sind. Dieter Zöbel IST 178 Rechnerorganisation KAPITEL 4. NETZWERKE 4.6. DER SOCKET-MECHANISMUS Die Socket-Verbindung Mit sockfd wird auf eine sog. association verwiesen, die eine Verbindung beschreibt durch: • Protokoll • lokale Adresse • lokaler Prozeß • entfernter Adresse • entfernter Prozeß Durch den Aufruf des socket()-Kommandos wird dabei nur das Protokoll, die lokale Adresse (hier: Internet-Adresse) und der lokale Prozeß (hier: PortNummer) festlegt. Da alle Kunden mit einem speziellen Bediener kommunizieren, ist es ratsam, eine gemeinsame Header-Datei (hier: socket.h) zu benutzen, in der die Adresse und der Port des Servers festgelegt sind. Dieter Zöbel IST 179 Rechnerorganisation KAPITEL 4. NETZWERKE 4.6. DER SOCKET-MECHANISMUS Identifikation des bedieners in socket.h Inhalt der gemeinsamen Header-Datei socket.h: /* Aufbau eine Kunde-Bediener-Systems /* auf der Grundlage von Sockets. #include #include #include #include */ */ <sys/types.h> <sys/socket.h> <netinet/in.h> <arpa/inet.h> #define SERV_TCP_PORT 5566 /* mind. 5000 */ #define SERV_HOST_ADDR "141.26.7.100" /* IP-Adresse */ Mit dem Systemaufruf bind() identifiziert sich der Bediener für einen speziellen Dienst, der mit dem Systemaufruf connect() vom Kunden in Anspruch genommen wird. Dieter Zöbel IST 180 Rechnerorganisation KAPITEL 4. NETZWERKE 4.6. DER SOCKET-MECHANISMUS schema des Aufbaus einer Socket-Verbindung socket.h b_socket.c k_socket.c .. . bind(sockfd, &serv_addr, ... ); ... listen(sockfd, ... ); .. . accept(sockfd, &serv_addr, ... ); .. . .. . connect(sockfd, &serv_addr, ... ); ... liefert: (tcp, 141.26.7.100, 5566, , ) (tcp, 141.26.7.107, 493, 141.26.7.100, 5566) Socket des Bedieners Socket des Kunden noch unbekannt Erzeugter Socket auf Rechner des Kunden Socket des Bedieners Mit dem Systemaufruf listen() erzeugt der Bediener eine Schlange, um connect()-Aufrufe von Kunden zu puffern. Die eigentliche Annahme eines connect()-Aufrufers vollzieht der Bediener mit accept(). Dieter Zöbel IST 181 Rechnerorganisation KAPITEL 4. NETZWERKE 4.6. DER SOCKET-MECHANISMUS Der Bedienvorgang Die Ausführung der Bedienung kann • sequentiell in der Reihenfolge der connect()-Aufrufe von Kunden oder • pseudo-parallel durch mit fork() erzeugte Bedienerprozesse erfolgen. Der zweite Fall ist markanter und wird im Folgenden exemplarisch vorgestellt. Der accept()-Aufruf durch den Bediener blockiert solange, bis ein entsprechender connect()-Aufruf ergeht. Mit diesem Aufruf macht sich der Kunde beim Bediener bekannt. Gleichzeitig ist die association vollständig und wird von accept() in einen neuem Deskriptor abgelegt: n sockfd = accept(sockfd, &serv addr, ...); Mit einem anschließenden fork() kann zum einen die Bedienung in einen Kindprozeß erfolgen, während der Elternprozeß den nächsten connect()-Aufruf erwartet. Dieter Zöbel IST 182 Rechnerorganisation KAPITEL 4. NETZWERKE 4.6. DER SOCKET-MECHANISMUS Programmbeispiel: Die Socket-Verbindung Inhalt der Datei bediener.c: b_socket() { int sockfd,n_sockfd; int kind_pid, kunde_laddr; struct sockaddr_in serv_addr, kunde_addr; int aufruf_nr=0; /* Erzeugen eines Socket */ if ((sockfd=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))<0) { /* Fehlerbehandlung */ printf("Bediener: Fehler beim socket-Aufruf\n"); exit(0); } Dieter Zöbel IST 183 Rechnerorganisation KAPITEL 4. NETZWERKE 4.6. DER SOCKET-MECHANISMUS Socket-Verbindung (Fortsetzung 1) /* Anbindung des Socket an eine Adresse und einen Prozess */ bzero((char *)&serv_addr,sizeof(serv_addr)); serv_addr.sin_family=AF_INET; serv_addr.sin_addr.s_addr=htonl(INADDR_ANY); serv_addr.sin_port=htons(SERV_TCP_PORT); if((bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr))) < 0) { /* Fehlerbehandlung */ printf("Bediener: Fehler beim bind-Aufruf\n"); exit(0); } Dieter Zöbel IST 184 Rechnerorganisation KAPITEL 4. NETZWERKE 4.6. DER SOCKET-MECHANISMUS Socket-Verbindung (Fortsetzung 2) /* Einrichten der Auftragsschlange der Laenge 3 */ if((listen(sockfd,3))<0) { /* Fehlerbehandlung */ printf("Bediener: Fehler beim listen-Aufruf\n"); exit(0); } for(;;) { printf("Bediener: Warten auf Kundschaft\n"); /* Erwarten eines Kundenauftrages */ kunde_laddr=sizeof(kunde_addr); if((n_sockfd=accept(sockfd, (struct sockaddr *) &kunde_addr, &kunde_laddr)) < 0) { /* Fehlerbehandlung */ printf("Bediener: Fehler beim accept-Aufruf\n"); exit(0); } Dieter Zöbel IST 185 Rechnerorganisation KAPITEL 4. NETZWERKE 4.6. DER SOCKET-MECHANISMUS Socket-Verbindung (Fortsetzung 3) /* Erzeugung eines Kind-Prozesses, der */ /* die eigentliche Bedienung uebernimmt */ aufruf_nr++; if((kind_pid=fork())<0) { /* Fehlerbehandlung */ printf("Bediener: Fehler beim fork-Aufruf\n"); exit(0); } if(kind_pid==0) { /* Kind-Prozess als Bediener */ printf("%d-ter Bedienaufruf\n",aufruf_nr); close(sockfd); /* Datenaustausch mit read und write */ b_proc(n_sockfd,aufruf_nr); close(n_sockfd); exit(0); } /* Eltern-Prozess */ close(n_sockfd); } } Dieter Zöbel IST 186 Rechnerorganisation KAPITEL 4. NETZWERKE 4.6. DER SOCKET-MECHANISMUS Socket-Verbindung (Fortsetzung 4) Inhalt der Datei kunde.c: k_socket() { int sockfd; struct sockaddr_in serv_addr; /* Erzeugen eines Socket */ if ((sockfd=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))<0) { /* Fehlerbehandlung */ printf("Kunde: Socket nicht installiert.\n"); exit(0); } Dieter Zöbel IST 187 Rechnerorganisation KAPITEL 4. NETZWERKE 4.6. DER SOCKET-MECHANISMUS Socket-Verbindung (Fortsetzung 5) /* Verbindungsaufbau durch den Kunden */ bzero((char*)&serv_addr,sizeof(serv_addr)); serv_addr.sin_family=AF_INET; serv_addr.sin_addr.s_addr=inet_addr(SERV_HOST_ADDR); serv_addr.sin_port=htons(SERV_TCP_PORT); printf("Portnummer %d\n",ntohs(serv_addr.sin_port)); if((connect(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr))) < 0) { /* Fehlerbehandlung */ printf("Kunde: Verbindung nicht hergestellt.\n"); exit(0); } /* Datenaustausch mit write und read */ k_proc(sockfd); close(sockfd); } Dieter Zöbel IST 188 Rechnerorganisation KAPITEL 4. NETZWERKE 4.7 4.7. VERTEILTE DATEISYSTEME Verteilte Dateisysteme Stellvertretend: NFS (network file system), das auf die Schichten UDP15 /IP, RPC16 und XDR17 aufbaut. NFS : Operationen auf DateiNFS, MOUNT,YP en: Lesen, Schreiben, Erzeugen, Löschen, Suchen usw. XDR MOUNT : Verbinden und Trennen von Dateisystemen RPC a YP : Zentralisierte Benutzterverwaltung: Eintragen, Löschen, UDP/IP usw. a 15 16 17 yellow pages user datagram protocol remote procedure call external data representation Dieter Zöbel IST 189 Rechnerorganisation KAPITEL 4. NETZWERKE 4.8 4.8. VERTEILTE PROGRAMMIERUNG Verteilte Programmierung Dieter Zöbel IST 190 Rechnerorganisation KAPITEL 4. NETZWERKE 4.9 4.9. SCHUTZMECHANISMEN Schutzmechanismen Dieter Zöbel IST 191 Literaturverzeichnis [DvH66] J. B. Dennis and E. C. van Horn. Programming semantics for multiprogrammed computations. CACM, 9(3):143 – 155, 1966. [GMS94] Michel Goossens, Frank Mittelbach, and Alexander Samarin. Der LaTeX-Begleiter. Addison-Wesley, Bonn, 1994. [JM02] Stefan Jablonski and Christian Meiler. Web-content-management. Informatik-Spektrum, 25(2):101–119, April 2002. [Knu86] Donald E. Knuth. The TeXbook - Computers and Typesetting. Addison-Wesley, Reading, Massachusetts, 1986. [Old01] Unversität Oldenburg. Tutorium Studiertechniken. http//:www.unioldenburg.de/fb11/prima/tutorium.htm, 2001. Rechnerorganisation LITERATURVERZEICHNIS [RR01] LITERATURVERZEICHNIS Gunther Rothfuss and Christian Ried. Content Management mit XML. Springer-Verlag, Berlin, 2001. [SW00] Erwin Schuster and Stephan Wilhelm. Content management. Informatik Spektrum, 23(6):373–375, Dezember 2000. [Tan95] Andrew Tanenbaum. Moderne Betriebssysteme. Hanser Verlag, München, 1995. [Wes01] Georg Westermann. Organisationslehre. http://www2.fhharz.de/ gwestermann/EinfOrgaFolien/EinfOrgaFolien.htm, 2001. Dieter Zöbel IST 199