<< | Index | Übung 2 >>


Betriebssysteme 1 - Übung 1

Aufgabe 1 Schichtsalat

Basteln. Verfolge die Systemaufrufe eines einfachen Programmes, zum Beispiel cat mittels strace. Vergleiche diese mit einem trace der Bibliotheksaufrufe mittels ltrace. Wie und wo siehst du Zusammenhänge zwischen diese beiden Ausgaben? Wo siehst du Hinweise auf Übergänge zwischen den Schichten des Schichtenmodells (siehe Vorlesung)?

Der Aufruf von strace:

 $ strace cat test > /dev/null 
execve("/bin/cat", ["cat", "test"], [/* 42 vars */]) = 0
brk(0)                                  = 0x804d000
open("/etc/ld.so.preload", O_RDONLY)    = -1 ENOENT (No such file or directory)
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40016000
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=87799, ...}) = 0
old_mmap(NULL, 87799, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40017000
close(3)                                = 0
open("/lib/libc.so.6", O_RDONLY)        = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\0_\1\000"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1455013, ...}) = 0
old_mmap(NULL, 1261412, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x4002d000
old_mmap(0x40157000, 32768, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x12a000) = 0x40157000
old_mmap(0x4015f000, 8036, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x4015f000
close(3)                                = 0
munmap(0x40017000, 87799)               = 0
open("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=2089536, ...}) = 0
mmap2(NULL, 2089536, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40161000
close(3)                                = 0
brk(0)                                  = 0x804d000
brk(0x806e000)                          = 0x806e000
brk(0)                                  = 0x806e000
fstat64(1, {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 3), ...}) = 0
open("test", O_RDONLY|O_LARGEFILE)      = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=19, ...}) = 0
read(3, "Dies ist ein Test.\n", 131072) = 19
write(1, "Dies ist ein Test.\n", 19)    = 19
read(3, "", 131072)                     = 0
close(3)                                = 0
close(1)                                = 0
exit_group(0)                           = ?

Der Aufruf von ltrace:

 $ ltrace cat test >/dev/null
__libc_start_main(0x8048c00, 2, 0xbffff814, 0x804ae90, 0x804aef0 <unfinished ...>
setlocale(6, "")                                 = "de_DE@euro"
bindtextdomain("coreutils", "/usr/share/locale") = "/usr/share/locale"
textdomain("coreutils")                          = "coreutils"
__cxa_atexit(0x80499e0, 0, 0, 0x4015e200, 0xbffff7c8) = 0
getopt_long(2, 0xbffff814, "benstuvAET", 0x804b120, NULL) = -1
__fxstat64(3, 1, 0xbffff750)                     = 0
open64("test", 0, 027777773520)                  = 3
__fxstat64(3, 3, 0xbffff750)                     = 0
malloc(131072)                                   = 0x804d8a0
read(3, "Dies ist ein Test.\n", 131072)          = 19
write(1, "Dies ist ein Test.\n", 19)             = 19
read(3, "", 131072)                              = 0
free(0x804d8a0)                                  = <void>
close(3)                                         = 0
close(1)                                         = 0
exit(0 <unfinished ...>
+++ exited (status 0) +++

Ich beziehe ich im Folgenden auf den Abschnitt der eigentlichen Programmausführung. Die Ausgabe von strace enthält nämlich noch das Laden und Hinzubinden der C-Bibliotheken. Das eigentliche Programm beginnt hier mit den drei Instruktionen brk(0), brk(0x806e000), brk(0), die dem Aufruf von malloc entsprechen.

Hieran kann man aber schon erkennen, dass dem Aufruf von malloc in der ltrace-Ausgabe kein System-Call in der strace-Ausgabe folgt. Die Funktion malloc, die zur Speicherverwaltung der C-Bibliotek gehört, verwendet also keine Systemdienste.

Dagegen werden die Aufrufe von __fxstat64, open64, close, read und write (Ausgabe von ltrace) nahezu identisch an die System-Calls fstat64, open, close, read und write (Ausgabe von strace) weitergeleitet.

Der Aufruf von free weiter unten bei ltrace führt wiederum zu keinem System-Call, auch hier ist alleine die Speicherverwaltung der Bibliotheksroutinen zuständig.

Name in ltraceName in straceSystem-CallFunktion
malloc-neinSpeicher reservieren
free-neinReservierten Speicher freigeben
__fxstat64fstat64jaInformationen über eine Datei erlangen (Datei vorhanden?)
open64openjaDatei öffnen
closeclosejaDatei schließen
readreadjaAus einer Datei lesen
writewritejaIn eine Datei schreiben (in dem Fall die Standardausgabe)

Aufgabe 2 Geforderte Software

Diskussion. Vergleiche die Anforderungen an ein Betriebssystem mit denen an ein Anwendungsprogramm (z. B. eine große Datenbank). Was für Unterschiede gibt es?

Das Anwendungsprogramm setzt auf den Schnittstellen bzw. Funktionalitäten auf, die ihm das darunter liegende Betriebssystem bietet. Ein Betriebssystem setzt an den Schnittstellen der darunter liegenden Hardware an.

Die Anwendung wird zielgerichtet auf die Lösung eines speziellen Problems hin entwickelt, sei es eine Berechnung, das Zeichnen von Bildern oder eben die effiziente Speicherung und Durchsuchung eine großen Datenmenge (Datenbank). Ein Betriebssystem hingegen muss ein sehr breites Spektrum an Funktionalität und Verwaltungsaufgaben abdecken (BS als "Manager"). Es gibt keine konkrete Zielrichtung, außer eben die der möglichst effizienten Verwaltung des Systems (Zuteilung der Ressourcen, Zugriffskontrolle, Bereitstellung von System-Diensten, Datei-Verwaltung, Abschottung der Prozesse, etc.).

Natürlich sind die Anforderungen in Bezug auf Zuverlässigkeit und Sicherheit an ein Betriebssystem sehr viel höher als an eine normale Anwendung. Wenn in letzerer ein Fehler auftritt, dann stürzt i. d. R. das Programm ab (in dem Fall wäre die Datenbank nicht mehr verfügbar), aber das System läuft stabil weiter. Tritt jedoch im Betriebssystem ein nicht-behebbaren Fehler auf, dann steht das System oder es entstehen Sicherheitslücken, die Angreifer zu ihren Gunsten ausnutzen können.

Aufgabe 3 Qualitätsmerkmale

Recherche. Um Qualität zu bewerten und zu vergleichen gibt es unterschiedlichste Ansätze. Beispiele sind zum Beispiel Leistungsvergleichtests (Benchmark Tests) oder aber Einstufungen in Klassen wie zum Beispiel das Orange Book (DOD-5200.28-STD). Suche, beschreibe und vergleiche bekannte Verfahren. Was für Merkmale werden dabei auf welche Art bewertet?

Es gibt u. a. Qualitätskriterien für die Sicherheit eines Betriebssystems:

  • TCSEC (Orange Book)
  • IT-Sicherheitskritieren (Grünbuch)
  • ITSEC
  • Commen Criteria

Diese bewerten die Sicherheitsgüte einer Software und auch eines Betriebssystems und verteilen eine Art "Gütesiegel" für die Sicherheit. Zum Teil wird nur das Endergebnis (die fertige Software) bewertet (z. B. Orange Book), zum Teil wird der ganze Entwurfsprozess in die Bewertung mit einbezogen (z. B. ITSEC, Commen Criteria).


Nach oben

Zuletzt geändert am 26 März 2007 14:26 Uhr von chrschn