- Inhaltsverzeichnis
- Programme
- Aufzeichnungen Semester 4
- Aufzeichnungen Semester 5
- Diverse Kommandos und Befehle
- TODO
- HA
Die Programme sortiert nach ihrem Behandlungsdatum:
Semester 4:
Semester 5:
Um die Projekte mit 32 Bit Architektur nutzen zu können, kann es notwendig sein, die Bibliothek gcc-multilib mit dem entsprechenden Paketmanager zu installieren. Die Programme unter 'models' sind von der Website opensource.com (Author: Sachin Patil) inspirierte Vorlagen für Makefiles von C Programmen. Erstere sind wiederum Ausgangsbasis für die oben genannten Programme, weswegen dieses Projekt insgesamt der ursprünglichen Lizenz CC BY-SA 4.0 unterstellt ist.
mithilfe des 'file' Befehls können Metainformationen einer Datei abgefragt werden, bspw.:
Heutzutage nutzen Prozessoren eine 64 Bit Architektur. Dies bedeutet das 64 Bit Zahlen und Befehle verarbeitet werden.
- statisches Linking: Der gesamte Code des Programms befindet sich in der Datei
- Nützlich, wenn das Programm auf einem minimalen Linux (bspw. Auto) laufen soll
- dynamisches Linking: In dem Code des Programms finden sich Verweise auf externe Bibliotheken
Eine Datei, die von dem Programm Make verwendet werden kann. Dieses wird normalerweise dazu verwendet den Compilierungsprozess zu automatisieren. Vorteile: bedarfkonforme Compilierung, Parallelisierung
von gnu.gcc.org
Output constraints must begin with either = (a variable overwriting an existing value) or + (when reading and writing). When using =, do not assume the location contains the existing value on entry to the asm, except when the operand is tied to an input; see Input Operands.
von wikipedia.org
Der Data Display Debugger ist ein quell-offenes, grafisches Frontend für kommandozeilen-basierte Debugger und Teil des GNU-Projekts. Zweck von DDD ist es, die Fehlersuche in Programmen zu erleichtern, indem Datenstrukturen grafisch dargestellt werden. Dabei ist DDD selbst kein Debugger, sondern benötigt immer einen untergeordneten Debugger wie GDB, DBX oder XDB.
DDD eignet sich nicht nur zum Debuggen kompilierter Programme, sondern auch für interpretierte Sprachen wie Python, Perl oder Bash. Das breiteste Funktionsspektrum bietet DDD in Verbindung mit dem GNU Debugger, GDB.
[...]
Mit dem DDD kann man zum Beispiel Quellcode-Zeilen und grafisch aufbereitete Daten betrachten, wobei Datenstrukturen als Diagramme angezeigt werden. Mit einem Mausklick können Zeiger dereferenziert oder Inhalte von Strukturen dargestellt werden, die jedes Mal aktualisiert werden, wenn das Programm angehalten wird.
Nutzung des DDD am Beispielprogramm inline_ass
1 - C Programmcode. Hier können Breakpoints eingefügt werden, bei denen beim Durchlaufen angehalten wird.
2 - Assembler Code. Hier werden die übersetzten Maschinenanweisungen des C Codes auszugsweise (kurz vor bis kurz nach dem aktuellen Breakpoint) angezeigt.
3 - Registeranzeige. Zeigt die aktuellen Zustände der CPU Register.
4 - GDB Konsole. Ermöglicht direkt Befehle an den GDB zu richten.
5 - DDD Steuerung. Beinhaltet Buttons zur Steuerung des Debugprozesses.
ABIs, auch Binärschnittstellen sind Schnittstellen zwischen Programmen auf Maschinenebene.
Sie definieren Spezifikationen für den Programmcode, damit dieser die Schnittstelle nutzen kann.
Über solche Schnittstellen werden Beispielsweise externe Bibliotheken in Programme eingebunden.
Für x86 Prozessoren gibt es eine definierte ABI, die durch folgende Aufrufkonvention definiert ist.
AT&T (beheimatet bei Unix) | Intel (beheimatet bei Windows) |
---|---|
source (Eingabewert) vor destination (Zieladdresse) | destination (Zieladdresse) vor source (Eingabewert) |
unterschiedliche Speichergrößen der Parameter werden durch einen Zusatzbuchstaben am Befehl differenziert | unterschiedliche Speichergrößen der Parameter werden implizit über die übergebenen Register differenziert |
Fünf Philosophen sitzen an einem Tisch und wollen eine schwierige Sorte Spaghetti essen. Dafür brauch ein jeder zwingend zwei Gabeln. Zwischen je zwei Philosophen liegt je eine Gabel, also insgesamt fünf am Tisch.
Nach Wikipedia (de.wikipedia.org):
Die Philosophen sitzen am Tisch und denken über philosophische Probleme
nach. Wenn einer hungrig wird, greift er zuerst die Gabel links von seinem
Teller, dann die auf der rechten Seite und beginnt zu essen. Wenn er satt
ist, legt er die Gabeln wieder zurück und beginnt wieder zu denken. Sollte
eine Gabel nicht an ihrem Platz liegen, wenn der Philosoph sie aufnehmen
möchte, so wartet er, bis die Gabel wieder verfügbar ist.
Solange nur einzelne Philosophen hungrig sind, funktioniert dieses
Verfahren. Es kann aber passieren, dass sich alle fünf Philosophen
gleichzeitig entschließen, zu essen. Sie ergreifen also alle gleichzeitig
ihre linke Gabel und nehmen damit dem jeweils links von ihnen sitzenden
Kollegen dessen rechte Gabel weg. Nun warten alle fünf darauf, dass die
rechte Gabel wieder auftaucht. Das passiert aber nicht, da keiner der fünf
seine linke Gabel zurücklegt. Die Philosophen verhungern.
- gegenseitige Absprache
- Priorisierung
- Nummerierung und intelligente Nutzung der Ressourcen
- Es gibt 5 Prozesse: A, B, C, D, E.
- Es gibt 4 CPU-Kerne.
- Ein Prozess dauert 1 min.
- Ein Prozess kann unterbrochen werden.
Wie lange dauert die parallele Abarbeitung der fünf Prozesse (ohne Overhead)?
Antwort: 1,25 min
Mithilfe des Kommandos kill
können verschiedene Signal an Prozesse gesendet
werden. Mit dem Signal SIGKILL (Standard) kann so zum Beispiel ein Prozess
aufgefordert werden, sich zu beenden, während mit SIGSTOP und anschließendem
SIGCONT ein Prozess angehalten und wieder gestartet werden kann.
Diese letzten Beiden können von einem Scheduler genutzt werden, um Prozesse
unterbrechen und später weiterführen zu können.
Fork ist ein Kommando, das einen bestehenden Prozess vollständig kopiert. Dabei gibt der Rückgabewert auskunft dass:
- ich der Elternprozess bin und welche PID mein Kind hat (>0)
- ich der Kindprozess bin (=0)
- das kopieren Fehlgeschlagen ist, z.B. aufgrund fehlender Ressourcen (<0)
- Semaphore
- Socket + TCP verbindung
- cd
- ls
- gcc
- htop
- mcedit
- ps
- cp
- chmod / chown
- kate
- nano
- time
- sed
- bash
- make
- sudo
- vi
- cat
- ssh
- kill
- lolcat
- touch
- file
- pwd
- |
-
- <
- &
Pipe, Select, Deadlock UDP, TCP
semget() semctl() semop()