diff --git a/20211007/Zeichen_123.pdf b/20211007/Zeichen_123.pdf deleted file mode 120000 index fdbc897227df059cfda790a16555e6e417682116..0000000000000000000000000000000000000000 --- a/20211007/Zeichen_123.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/Zeichen_123.pdf \ No newline at end of file diff --git a/20211007/chmod-1.txt b/20211007/chmod-1.txt deleted file mode 100644 index 6b1df1fc6d7316666e045fb0fdec08189cd8c510..0000000000000000000000000000000000000000 --- a/20211007/chmod-1.txt +++ /dev/null @@ -1,31 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211007> ls -l hello --rwxr-xr-x 1 peter peter 16608 Okt 7 17:49 hello -cassini/home/peter/bo/2021ws/es/20211007> ./hello -Hello, world! -cassini/home/peter/bo/2021ws/es/20211007> chmod -x hello -cassini/home/peter/bo/2021ws/es/20211007> ./hello -bash: ./hello: Keine Berechtigung -cassini/home/peter/bo/2021ws/es/20211007> ls -l hello --rw-r--r-- 1 peter peter 16608 Okt 7 17:49 hello -cassini/home/peter/bo/2021ws/es/20211007> chmod +x hello -cassini/home/peter/bo/2021ws/es/20211007> ./hello -Hello, world! -cassini/home/peter/bo/2021ws/es/20211007> ls -l hello --rwxr-xr-x 1 peter peter 16608 Okt 7 17:49 hello -cassini/home/peter/bo/2021ws/es/20211007> chmod o-x hello -cassini/home/peter/bo/2021ws/es/20211007> ./hello -Hello, world! -cassini/home/peter/bo/2021ws/es/20211007> ls -l hello --rwxr-xr-- 1 peter peter 16608 Okt 7 17:49 hello -cassini/home/peter/bo/2021ws/es/20211007> chmod 777 hello -cassini/home/peter/bo/2021ws/es/20211007> ./hello -Hello, world! -cassini/home/peter/bo/2021ws/es/20211007> ls -l hello --rwxrwxrwx 1 peter peter 16608 Okt 7 17:49 hello -cassini/home/peter/bo/2021ws/es/20211007> chmod 750 hello -cassini/home/peter/bo/2021ws/es/20211007> ./hello -Hello, world! -cassini/home/peter/bo/2021ws/es/20211007> chmod 750 hello -cassini/home/peter/bo/2021ws/es/20211007> ls -l hello --rwxr-x--- 1 peter peter 16608 Okt 7 17:49 hello -cassini/home/peter/bo/2021ws/es/20211007> diff --git a/20211007/chmod-2.txt b/20211007/chmod-2.txt deleted file mode 100644 index 8ee4d0f438c9713822ef9d65a3084ba99518cbf6..0000000000000000000000000000000000000000 --- a/20211007/chmod-2.txt +++ /dev/null @@ -1,12 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211007> cat toll -cat test-2.txt -ls -l test-2.txt -cassini/home/peter/bo/2021ws/es/20211007> chmod +x toll -cassini/home/peter/bo/2021ws/es/20211007> ls -l toll --rwxr-xr-x 1 peter peter 32 Okt 7 18:54 toll -cassini/home/peter/bo/2021ws/es/20211007> ./toll -Dies ist noch ein Test. -Er enthält total wertvolle Daten. -Wirklich. --rw-r--r-- 1 peter peter 69 Okt 7 18:31 test-2.txt -cassini/home/peter/bo/2021ws/es/20211007> diff --git a/20211007/cp-1.txt b/20211007/cp-1.txt deleted file mode 100644 index 4e9d58c6207d9ae5b8bcdd50e7e4e24aaadd1a5e..0000000000000000000000000000000000000000 --- a/20211007/cp-1.txt +++ /dev/null @@ -1,17 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211007> cat test-1.txt -Dies ist ein Test. -cassini/home/peter/bo/2021ws/es/20211007> ls -l test* -<Fiese Dinge }:-> --rw-r--r-- 1 peter peter 19 Okt 7 18:23 test-1.txt --rw-r--r-- 1 peter peter 19 Okt 7 18:23 test-2.txt -cassini/home/peter/bo/2021ws/es/20211007> cp test-1.txt test-2.txt -cassini/home/peter/bo/2021ws/es/20211007> ls -l test* -<Fiese Dinge }:-> --rw-r--r-- 1 peter peter 19 Okt 7 18:23 test-1.txt --rw-r--r-- 1 peter peter 19 Okt 7 18:24 test-2.txt -cassini/home/peter/bo/2021ws/es/20211007> cp -p test-1.txt test-2.txt -cassini/home/peter/bo/2021ws/es/20211007> ls -l test* -<Fiese Dinge }:-> --rw-r--r-- 1 peter peter 19 Okt 7 18:23 test-1.txt --rw-r--r-- 1 peter peter 19 Okt 7 18:23 test-2.txt -cassini/home/peter/bo/2021ws/es/20211007> diff --git a/20211007/cp-2.txt b/20211007/cp-2.txt deleted file mode 100644 index fc41477e862ea45179d9937e2b764694f4931f0a..0000000000000000000000000000000000000000 --- a/20211007/cp-2.txt +++ /dev/null @@ -1,28 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211007> ls -l test* -<Fiese Dinge }:-> --rw-r--r-- 1 peter peter 19 Okt 7 18:23 test-1.txt --rw-r--r-- 1 peter peter 19 Okt 7 18:23 test-2.txt -cassini/home/peter/bo/2021ws/es/20211007> -cassini/home/peter/bo/2021ws/es/20211007> mkdir test -cassini/home/peter/bo/2021ws/es/20211007> cd test/ -cassini/home/peter/bo/2021ws/es/20211007/test> cp -p ../test-1.txt . -cassini/home/peter/bo/2021ws/es/20211007/test> ls -l -insgesamt 4 --rw-r--r-- 1 peter peter 19 Okt 7 18:23 test-1.txt -cassini/home/peter/bo/2021ws/es/20211007/test> cp -p ../test-1.txt -cp: Fehlender Zieldatei‐Operand hinter '../test-1.txt' -„cp --help“ liefert weitere Informationen. -cassini/home/peter/bo/2021ws/es/20211007/test> cp -p ../test-*.txt . -cassini/home/peter/bo/2021ws/es/20211007/test> ls -l -insgesamt 8 --rw-r--r-- 1 peter peter 19 Okt 7 18:23 test-1.txt --rw-r--r-- 1 peter peter 19 Okt 7 18:23 test-2.txt -cassini/home/peter/bo/2021ws/es/20211007/test> rm *.txt -cassini/home/peter/bo/2021ws/es/20211007/test> ls -l -insgesamt 0 -cassini/home/peter/bo/2021ws/es/20211007/test> cp -p ../test-*.txt -cassini/home/peter/bo/2021ws/es/20211007/test> ls -l -insgesamt 0 -cassini/home/peter/bo/2021ws/es/20211007/test> echo cp -p ../test-*.txt -cp -p ../test-1.txt ../test-2.txt -cassini/home/peter/bo/2021ws/es/20211007/test> diff --git a/20211007/cp-3.txt b/20211007/cp-3.txt deleted file mode 100644 index a32ba837ad035a5effcb6e008c3a788895ede0ed..0000000000000000000000000000000000000000 --- a/20211007/cp-3.txt +++ /dev/null @@ -1,22 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211007> cat test-2.txt -Dies ist noch ein Test. -Er enthält total wertvolle Daten. -Wirklich. -cassini/home/peter/bo/2021ws/es/20211007> cat test-1.txt -Dies ist ein Test. -cassini/home/peter/bo/2021ws/es/20211007> ls -l test*.txt -<Fiese Dinge }:-> --rw-r--r-- 1 peter peter 19 Okt 7 18:23 test-1.txt --rw-r--r-- 1 peter peter 69 Okt 7 18:29 test-2.txt -cassini/home/peter/bo/2021ws/es/20211007> cd test -cassini/home/peter/bo/2021ws/es/20211007/test> cp -p ../test*.txt -cassini/home/peter/bo/2021ws/es/20211007/test> ls -l -insgesamt 0 -cassini/home/peter/bo/2021ws/es/20211007/test> cd .. -cassini/home/peter/bo/2021ws/es/20211007> ls -l test*.txt -<Fiese Dinge }:-> --rw-r--r-- 1 peter peter 19 Okt 7 18:23 test-1.txt --rw-r--r-- 1 peter peter 19 Okt 7 18:23 test-2.txt -cassini/home/peter/bo/2021ws/es/20211007> cat test-2.txt -Dies ist ein Test. -cassini/home/peter/bo/2021ws/es/20211007> diff --git a/20211007/cp-4.txt b/20211007/cp-4.txt deleted file mode 100644 index 249fd139a7f4e72acc156eaaf5ea9f03381afa4d..0000000000000000000000000000000000000000 --- a/20211007/cp-4.txt +++ /dev/null @@ -1,14 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211007> ls -l test-*.txt -<Fiese Dinge }:-> --rw-r--r-- 1 peter peter 19 Okt 7 18:23 test-1.txt --rw-r--r-- 1 peter peter 69 Okt 7 18:31 test-2.txt -cassini/home/peter/bo/2021ws/es/20211007> cat test-1.txt -Dies ist ein Test. -cassini/home/peter/bo/2021ws/es/20211007> cat test-2.txt -Dies ist noch ein Test. -Er enthält total wertvolle Daten. -Wirklich. -cassini/home/peter/bo/2021ws/es/20211007> cd test/ -cassini/home/peter/bo/2021ws/es/20211007/test> cp -pi ../test*.txt -cp: '../test-2.txt' überschreiben? n -cassini/home/peter/bo/2021ws/es/20211007/test> diff --git a/20211007/hello.c b/20211007/hello.c deleted file mode 100644 index b19d80e9bd0bd7c5ed8f54b20c6a50d9166f03ac..0000000000000000000000000000000000000000 --- a/20211007/hello.c +++ /dev/null @@ -1,7 +0,0 @@ -#include <stdio.h> - -int main (void) -{ - printf ("Hello, world!\n"); - return 0; -} diff --git a/20211007/ls b/20211007/ls deleted file mode 100755 index eff3f9a4770972d8c669bfdaa9f42361529e1781..0000000000000000000000000000000000000000 --- a/20211007/ls +++ /dev/null @@ -1,2 +0,0 @@ -echo "<Fiese Dinge }:->" -/bin/ls "$@" diff --git a/20211007/ls-1.txt b/20211007/ls-1.txt deleted file mode 100644 index f688febf2418de9885b428b0e4db6354f5791b45..0000000000000000000000000000000000000000 --- a/20211007/ls-1.txt +++ /dev/null @@ -1,33 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211007> ls -l -insgesamt 4240 --rw-r--r-- 1 peter peter 1416 Okt 7 18:53 chmod-1.txt --rw-r--r-- 1 peter peter 450 Okt 7 18:55 chmod-2.txt --rw-r--r-- 1 peter peter 783 Okt 7 18:24 cp-1.txt --rw-r--r-- 1 peter peter 1323 Okt 7 18:28 cp-2.txt --rw-r--r-- 1 peter peter 914 Okt 7 18:30 cp-3.txt --rw-r--r-- 1 peter peter 586 Okt 7 18:33 cp-4.txt -lrwxrwxrwx 1 peter peter 18 Apr 13 2016 csa2.jpg -> ../common/csa2.jpg --rw-r--r-- 1 peter peter 4220460 Okt 7 09:39 es-20211007.pdf --rw-r--r-- 1 peter peter 20247 Okt 7 09:39 es-20211007.tex -lrwxrwxrwx 1 peter peter 21 Apr 13 2016 floppys.jpg -> ../common/floppys.jpg --rwxr-x--- 1 peter peter 16608 Okt 7 17:49 hello --rw-r--r-- 1 peter peter 82 Okt 7 17:48 hello.c -lrwxrwxrwx 1 peter peter 48 Okt 7 2018 logo-hochschule-bochum-cvh-text-v2.pdf -> ../common/logo-hochschule-bochum-cvh-text-v2.pdf -lrwxrwxrwx 1 peter peter 36 Okt 5 2016 logo-hochschule-bochum.pdf -> ../common/logo-hochschule-bochum.pdf --rwxr-xr-x 1 peter peter 38 Okt 7 17:54 ls --rw-r--r-- 1 peter peter 614 Okt 7 17:24 options-1.txt --rw-r--r-- 1 peter peter 901 Okt 7 17:29 options-2.txt --rw-r--r-- 1 peter peter 987 Okt 7 17:53 path-1.txt --rw-r--r-- 1 peter peter 3034 Okt 7 17:57 path-2.txt -lrwxrwxrwx 1 peter peter 22 Okt 5 2016 pgslides.sty -> ../common/pgslides.sty --rw-r--r-- 1 peter peter 519 Okt 7 18:37 rm-1.txt --rw-r--r-- 1 peter peter 472 Okt 7 18:38 rm-2.txt -drwxr-xr-x 2 peter peter 4096 Okt 7 18:38 test --rw-r--r-- 1 peter peter 19 Okt 7 18:23 test-1.txt --rw-r--r-- 1 peter peter 69 Okt 7 18:31 test-2.txt --rwxr-xr-x 1 peter peter 32 Okt 7 18:54 toll -lrwxrwxrwx 1 peter peter 27 Okt 7 09:37 wetterstation.jpg -> ../common/wetterstation.jpg -lrwxrwxrwx 1 peter peter 25 Okt 3 2016 Zeichen_123.pdf -> ../common/Zeichen_123.pdf -cassini/home/peter/bo/2021ws/es/20211007> ls -l /dev/sdb1 -brw-rw---- 1 root disk 8, 17 Okt 7 18:56 /dev/sdb1 -cassini/home/peter/bo/2021ws/es/20211007> diff --git a/20211007/options-1.txt b/20211007/options-1.txt deleted file mode 100644 index 3a69ba1ebac9be142b4bce27c951ed95e9339624..0000000000000000000000000000000000000000 --- a/20211007/options-1.txt +++ /dev/null @@ -1,15 +0,0 @@ -cassini/home/peter/bo/2021ws> ls -l -r -t -insgesamt 20 -drwxr-xr-x 4 peter peter 4096 Okt 3 12:12 kis -drwxr-xr-x 3 peter peter 4096 Okt 3 19:20 misc -drwxr-xr-x 6 peter peter 4096 Okt 3 20:00 hp -drwxr-xr-x 5 peter peter 4096 Okt 4 16:27 bachelor -drwxr-xr-x 4 peter peter 4096 Okt 7 09:36 es -cassini/home/peter/bo/2021ws> ls -lrt -insgesamt 20 -drwxr-xr-x 4 peter peter 4096 Okt 3 12:12 kis -drwxr-xr-x 3 peter peter 4096 Okt 3 19:20 misc -drwxr-xr-x 6 peter peter 4096 Okt 3 20:00 hp -drwxr-xr-x 5 peter peter 4096 Okt 4 16:27 bachelor -drwxr-xr-x 4 peter peter 4096 Okt 7 09:36 es -cassini/home/peter/bo/2021ws> diff --git a/20211007/options-2.txt b/20211007/options-2.txt deleted file mode 100644 index eb6d3cee5faabd1f4f29a48d50b50137c5345537..0000000000000000000000000000000000000000 --- a/20211007/options-2.txt +++ /dev/null @@ -1,12 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211007> ls -lrth -insgesamt 4,1M -lrwxrwxrwx 1 peter peter 21 Apr 13 2016 floppys.jpg -> ../common/floppys.jpg -lrwxrwxrwx 1 peter peter 18 Apr 13 2016 csa2.jpg -> ../common/csa2.jpg -lrwxrwxrwx 1 peter peter 25 Okt 3 2016 Zeichen_123.pdf -> ../common/Zeichen_123.pdf -lrwxrwxrwx 1 peter peter 22 Okt 5 2016 pgslides.sty -> ../common/pgslides.sty -lrwxrwxrwx 1 peter peter 36 Okt 5 2016 logo-hochschule-bochum.pdf -> ../common/logo-hochschule-bochum.pdf -lrwxrwxrwx 1 peter peter 48 Okt 7 2018 logo-hochschule-bochum-cvh-text-v2.pdf -> ../common/logo-hochschule-bochum-cvh-text-v2.pdf -lrwxrwxrwx 1 peter peter 27 Okt 7 09:37 wetterstation.jpg -> ../common/wetterstation.jpg --rw-r--r-- 1 peter peter 20K Okt 7 09:39 es-20211007.tex --rw-r--r-- 1 peter peter 4,1M Okt 7 09:39 es-20211007.pdf --rw-r--r-- 1 peter peter 614 Okt 7 17:24 options-1.txt diff --git a/20211007/path-1.txt b/20211007/path-1.txt deleted file mode 100644 index fa872b2bb9168be9372d4b5430ea40bcb8120503..0000000000000000000000000000000000000000 --- a/20211007/path-1.txt +++ /dev/null @@ -1,22 +0,0 @@ -#include <stdio.h> - -int main (void) -{ - printf ("Hello, world!\n"); - return 0; -} -cassini/home/peter/bo/2021ws/es/20211007> gcc -Wall -O hello.c -o hello -cassini/home/peter/bo/2021ws/es/20211007> hello -bash: hello: Kommando nicht gefunden. -cassini/home/peter/bo/2021ws/es/20211007> echo $PATH -/home/peter/usr/bin:/home/peter/usr/bin:/home/peter/usr/bin:/home/peter/usr/bin:/home/peter/.cargo/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games -cassini/home/peter/bo/2021ws/es/20211007> /home/peter/bo/2021ws/es/20211007/hello -Hello, world! -cassini/home/peter/bo/2021ws/es/20211007> ./hello -Hello, world! -cassini/home/peter/bo/2021ws/es/20211007> PATH=.:$PATH -cassini/home/peter/bo/2021ws/es/20211007> echo $PATH -.:/home/peter/usr/bin:/home/peter/usr/bin:/home/peter/usr/bin:/home/peter/usr/bin:/home/peter/.cargo/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games -cassini/home/peter/bo/2021ws/es/20211007> hello -Hello, world! -cassini/home/peter/bo/2021ws/es/20211007> diff --git a/20211007/path-2.txt b/20211007/path-2.txt deleted file mode 100644 index 0166fe07ded6c0e8bbe5bc3c6c47f606e7557f4e..0000000000000000000000000000000000000000 --- a/20211007/path-2.txt +++ /dev/null @@ -1,50 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211007> vi ls - -echo "<Fiese Dinge }:->" -/bin/ls "$@" -~ -~ -"ls" [Neu] 2L, 38C geschrieben -cassini/home/peter/bo/2021ws/es/20211007> ls -lrt -insgesamt 4188 -lrwxrwxrwx 1 peter peter 21 Apr 13 2016 floppys.jpg -> ../common/floppys.jpg -lrwxrwxrwx 1 peter peter 18 Apr 13 2016 csa2.jpg -> ../common/csa2.jpg -lrwxrwxrwx 1 peter peter 25 Okt 3 2016 Zeichen_123.pdf -> ../common/Zeichen_123.pdf -lrwxrwxrwx 1 peter peter 22 Okt 5 2016 pgslides.sty -> ../common/pgslides.sty -lrwxrwxrwx 1 peter peter 36 Okt 5 2016 logo-hochschule-bochum.pdf -> ../common/logo-hochschule-bochum.pdf -lrwxrwxrwx 1 peter peter 48 Okt 7 2018 logo-hochschule-bochum-cvh-text-v2.pdf -> ../common/logo-hochschule-bochum-cvh-text-v2.pdf -lrwxrwxrwx 1 peter peter 27 Okt 7 09:37 wetterstation.jpg -> ../common/wetterstation.jpg --rw-r--r-- 1 peter peter 20247 Okt 7 09:39 es-20211007.tex --rw-r--r-- 1 peter peter 4220460 Okt 7 09:39 es-20211007.pdf --rw-r--r-- 1 peter peter 614 Okt 7 17:24 options-1.txt --rw-r--r-- 1 peter peter 901 Okt 7 17:29 options-2.txt --rw-r--r-- 1 peter peter 82 Okt 7 17:48 hello.c --rwxr-xr-x 1 peter peter 16608 Okt 7 17:49 hello --rw-r--r-- 1 peter peter 987 Okt 7 17:53 path-1.txt --rw-r--r-- 1 peter peter 38 Okt 7 17:54 ls -cassini/home/peter/bo/2021ws/es/20211007> chmod +x ls -cassini/home/peter/bo/2021ws/es/20211007> ls -lrt -<Fiese Dinge }:-> -insgesamt 4188 -lrwxrwxrwx 1 peter peter 21 Apr 13 2016 floppys.jpg -> ../common/floppys.jpg -lrwxrwxrwx 1 peter peter 18 Apr 13 2016 csa2.jpg -> ../common/csa2.jpg -lrwxrwxrwx 1 peter peter 25 Okt 3 2016 Zeichen_123.pdf -> ../common/Zeichen_123.pdf -lrwxrwxrwx 1 peter peter 22 Okt 5 2016 pgslides.sty -> ../common/pgslides.sty -lrwxrwxrwx 1 peter peter 36 Okt 5 2016 logo-hochschule-bochum.pdf -> ../common/logo-hochschule-bochum.pdf -lrwxrwxrwx 1 peter peter 48 Okt 7 2018 logo-hochschule-bochum-cvh-text-v2.pdf -> ../common/logo-hochschule-bochum-cvh-text-v2.pdf -lrwxrwxrwx 1 peter peter 27 Okt 7 09:37 wetterstation.jpg -> ../common/wetterstation.jpg --rw-r--r-- 1 peter peter 20247 Okt 7 09:39 es-20211007.tex --rw-r--r-- 1 peter peter 4220460 Okt 7 09:39 es-20211007.pdf --rw-r--r-- 1 peter peter 614 Okt 7 17:24 options-1.txt --rw-r--r-- 1 peter peter 901 Okt 7 17:29 options-2.txt --rw-r--r-- 1 peter peter 82 Okt 7 17:48 hello.c --rwxr-xr-x 1 peter peter 16608 Okt 7 17:49 hello --rw-r--r-- 1 peter peter 987 Okt 7 17:53 path-1.txt --rwxr-xr-x 1 peter peter 38 Okt 7 17:54 ls -cassini/home/peter/bo/2021ws/es/20211007> ls -<Fiese Dinge }:-> -csa2.jpg hello ls pgslides.sty -es-20211007.pdf hello.c options-1.txt wetterstation.jpg -es-20211007.tex logo-hochschule-bochum-cvh-text-v2.pdf options-2.txt Zeichen_123.pdf -floppys.jpg logo-hochschule-bochum.pdf path-1.txt -cassini/home/peter/bo/2021ws/es/20211007> diff --git a/20211007/rm-1.txt b/20211007/rm-1.txt deleted file mode 100644 index db4edce2e268ee084836db9d8b9bae4bdd0ca321..0000000000000000000000000000000000000000 --- a/20211007/rm-1.txt +++ /dev/null @@ -1,12 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211007/test> ls -l -insgesamt 0 --rw-r--r-- 1 peter peter 0 Okt 7 18:36 test --rw-r--r-- 1 peter peter 0 Okt 7 18:36 test.bla --rw-r--r-- 1 peter peter 0 Okt 7 18:36 test.blubb --rw-r--r-- 1 peter peter 0 Okt 7 18:36 test.log --rw-r--r-- 1 peter peter 0 Okt 7 18:36 test.txt -cassini/home/peter/bo/2021ws/es/20211007/test> rm *.* -cassini/home/peter/bo/2021ws/es/20211007/test> ls -l -insgesamt 0 --rw-r--r-- 1 peter peter 0 Okt 7 18:36 test -cassini/home/peter/bo/2021ws/es/20211007/test> diff --git a/20211007/rm-2.txt b/20211007/rm-2.txt deleted file mode 100644 index 771e3ade2e39048aadc989803f9c42b8d114e55e..0000000000000000000000000000000000000000 --- a/20211007/rm-2.txt +++ /dev/null @@ -1,11 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211007/test> ls -l -insgesamt 0 --rw-r--r-- 1 peter peter 0 Okt 7 18:36 test --rw-r--r-- 1 peter peter 0 Okt 7 18:38 test.bla --rw-r--r-- 1 peter peter 0 Okt 7 18:38 test.blubb --rw-r--r-- 1 peter peter 0 Okt 7 18:38 test.log --rw-r--r-- 1 peter peter 0 Okt 7 18:38 test.txt -cassini/home/peter/bo/2021ws/es/20211007/test> rm * -cassini/home/peter/bo/2021ws/es/20211007/test> ls -l -insgesamt 0 -cassini/home/peter/bo/2021ws/es/20211007/test> diff --git a/20211007/test-1.txt b/20211007/test-1.txt deleted file mode 100644 index d7e5cff47f0303c2d892d3e790e00552759b639c..0000000000000000000000000000000000000000 --- a/20211007/test-1.txt +++ /dev/null @@ -1 +0,0 @@ -Dies ist ein Test. diff --git a/20211007/test-2.txt b/20211007/test-2.txt deleted file mode 100644 index d89647ad07abd859c580d7695cf152da3bb1468c..0000000000000000000000000000000000000000 --- a/20211007/test-2.txt +++ /dev/null @@ -1,3 +0,0 @@ -Dies ist noch ein Test. -Er enthält total wertvolle Daten. -Wirklich. diff --git a/20211007/toll b/20211007/toll deleted file mode 100755 index 6c37e7b94289aca866d7e7c4eabf62050606bc53..0000000000000000000000000000000000000000 --- a/20211007/toll +++ /dev/null @@ -1,2 +0,0 @@ -cat test-2.txt -ls -l test-2.txt diff --git a/20211014/Zeichen_123.pdf b/20211014/Zeichen_123.pdf deleted file mode 120000 index fdbc897227df059cfda790a16555e6e417682116..0000000000000000000000000000000000000000 --- a/20211014/Zeichen_123.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/Zeichen_123.pdf \ No newline at end of file diff --git a/20211014/c-1.txt b/20211014/c-1.txt deleted file mode 100644 index 4243e12114637b9a8ca16733cc9275b14d9ffdc3..0000000000000000000000000000000000000000 --- a/20211014/c-1.txt +++ /dev/null @@ -1,23 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211014> gcc -Wall -O hello.c -o hello -cassini/home/peter/bo/2021ws/es/20211014> ls -l hello* --rwxr-xr-x 1 peter peter 16608 Okt 14 16:08 hello --rwxr-xr-x 1 peter peter 82 Okt 14 16:05 hello.c -cassini/home/peter/bo/2021ws/es/20211014> cat hello.c -#include <stdio.h> - -int main (void) -{ - printf ("Hello, world!\n"); - return 0; -} -cassini/home/peter/bo/2021ws/es/20211014> cat hello -ELF>P@`9@8 - @@@@h���``�� PP�-�=�=HP�-�=�=����DDP�td <<Q�tdR�td�-�=�=/lib64/ld-linux-x86-64.so.2GNUGNUT��o��z�cԑ�5�^�2���e�m= - Y h "libc.so.6puts__cxa_finalize__libc_start_mainGLIBC_2.2.5_ITM_deregisterTMCloneTable__gmon_start___ITM_registerTMCloneTableui 1�0��((@�?�?�?�?�?@H�H��H�=��f/�DH�=�/H��/H9�tH�>/H��t%�����H�=y/H�5r/H)�H��H��H��?H�H��tH�/H����fD���=9/u/UH�=�.H��tH�=/�-����h����/]�����{���H�H�=�������H�ÐAWI��AVI��AUA��ATL�%�,UH�-�,SL)�H�����H��t�L��L��D��A��H��H9�u�H�[]A\A]A^A_��H�H��Hello, world!;8����,����<���T!����<��������$zR�����+zR�$���� FJ - �?;*3�������0���DDtX���]B�E�E �E(�H0�H8�G@j8A0A(B BB�p���0� -� - @H� ������oh���o���oZ���o�=6(@GCC: (Debian 8.3.0-6) 8.3.0��0�h � -H -@P� P �=�=�=�?@ @0@����!�70@F�=m0y�=������L!����=��=��=� �@� - � j @0B0@�Ih @u �(@� �P]�8@nP+�0@�5�0@� �"crtstuff.cderegister_tm_clones__do_global_dtors_auxcompleted.7325__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entryhello.c__FRAME_END____init_array_end_DYNAMIC__init_array_start__GNU_EH_FRAME_HDR_GLOBAL_OFFSET_TABLE___libc_csu_fini_ITM_deregisterTMCloneTableputs@@GLIBC_2.2.5_edata__libc_start_main@@GLIBC_2.2.5__data_start__gmon_start____dso_handle_IO_stdin_used__libc_csu_init__bss_startmain__TMC_END___ITM_registerTMCloneTable__cxa_finalize@@GLIBC_2.2.5.symtab.strtab.shstrtab.interp.note.ABI-tag.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.got.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.dynamic.got.plt.data.bss.comment��#�� 1��$D��No - 00V���^���oZZk���ohhz���BH�� �PPa��� � � <�P P������=�-��?��@� @ 0@0�000P0-P6S8cassini/home/peter/bo/2021ws/es/20211014> diff --git a/20211014/chmod-1.txt b/20211014/chmod-1.txt deleted file mode 100644 index 3790dfb5e217fa28be5c2e56b8fe8e5c2a1da023..0000000000000000000000000000000000000000 --- a/20211014/chmod-1.txt +++ /dev/null @@ -1,24 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211014> echo "ls -l" > ll -cassini/home/peter/bo/2021ws/es/20211014> ./ll -bash: ./ll: Keine Berechtigung -cassini/home/peter/bo/2021ws/es/20211014> ls -l ll --rw-r--r-- 1 peter peter 6 Okt 14 16:02 ll -cassini/home/peter/bo/2021ws/es/20211014> chmod +x ll -cassini/home/peter/bo/2021ws/es/20211014> ls -l ll --rwxr-xr-x 1 peter peter 6 Okt 14 16:02 ll -cassini/home/peter/bo/2021ws/es/20211014> ./ll -insgesamt 212 --rw-r--r-- 1 peter peter 162254 Okt 14 10:41 es-20211014.pdf --rw-r--r-- 1 peter peter 23811 Okt 14 10:41 es-20211014.tex --rwxr-xr-x 1 peter peter 6 Okt 14 16:02 ll -lrwxrwxrwx 1 peter peter 48 Okt 7 2018 logo-hochschule-bochum-cvh-text-v2.pdf -> ../common/logo-hochschule-bochum-cvh-text-v2.pdf -lrwxrwxrwx 1 peter peter 36 Okt 5 2016 logo-hochschule-bochum.pdf -> ../common/logo-hochschule-bochum.pdf -lrwxrwxrwx 1 peter peter 22 Okt 5 2016 pgslides.sty -> ../common/pgslides.sty -drwxr-xr-x 2 peter peter 4096 Okt 14 15:47 test --rw-r--r-- 1 peter peter 19 Okt 14 15:43 test-1.txt --rw-r--r-- 1 peter peter 11 Okt 14 15:43 test-2.txt --rw-r--r-- 1 peter peter 828 Okt 14 15:42 wildcards-1.txt --rw-r--r-- 1 peter peter 589 Okt 14 15:45 wildcards-2.txt --rw-r--r-- 1 peter peter 352 Okt 14 15:47 wildcards-3.txt -lrwxrwxrwx 1 peter peter 25 Okt 3 2016 Zeichen_123.pdf -> ../common/Zeichen_123.pdf -cassini/home/peter/bo/2021ws/es/20211014> diff --git a/20211014/chmod-2.txt b/20211014/chmod-2.txt deleted file mode 100644 index 915307690ac55973304017e683406aecb2ab1e38..0000000000000000000000000000000000000000 --- a/20211014/chmod-2.txt +++ /dev/null @@ -1,14 +0,0 @@ -#include <stdio.h> - -int main (void) -{ - printf ("Hello, world!\n"); - return 0; -} -cassini/home/peter/bo/2021ws/es/20211014> ls -l hello.c --rw-r--r-- 1 peter peter 82 Okt 14 16:05 hello.c -cassini/home/peter/bo/2021ws/es/20211014> chmod +x hello.c -cassini/home/peter/bo/2021ws/es/20211014> ./hello.c -./hello.c: Zeile 3: Syntaxfehler beim unerwarteten Wort `(' -./hello.c: Zeile 3: `int main (void)' -cassini/home/peter/bo/2021ws/es/20211014> diff --git a/20211014/es-20211014.pdf b/20211014/es-20211014.pdf deleted file mode 100644 index 8b4016eb0b216da6b78bb40b1c1c03d2a4166391..0000000000000000000000000000000000000000 Binary files a/20211014/es-20211014.pdf and /dev/null differ diff --git a/20211014/es-20211014.tex b/20211014/es-20211014.tex deleted file mode 100644 index 8a408396a3b1c8e80f86643ee639f56fd6b4171a..0000000000000000000000000000000000000000 --- a/20211014/es-20211014.tex +++ /dev/null @@ -1,953 +0,0 @@ -% es-20211014.pdf - Lecture Slides on Embedded Systems -% Copyright (C) 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Peter Gerwinski -% -% This document is free software: you can redistribute it and/or -% modify it either under the terms of the Creative Commons -% Attribution-ShareAlike 3.0 License, or under the terms of the -% GNU General Public License as published by the Free Software -% Foundation, either version 3 of the License, or (at your option) -% any later version. -% -% This document is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with this document. If not, see <http://www.gnu.org/licenses/>. -% -% You should have received a copy of the Creative Commons -% Attribution-ShareAlike 3.0 Unported License along with this -% document. If not, see <http://creativecommons.org/licenses/>. - -% README: Unix-Kommandozeile: Links, Ein- und Ausgabeströme, Pipes - -\documentclass[10pt,t]{beamer} - -\usepackage{pgslides} -\usepackage{rotating} -\usepackage{tikz} - -\newcommand{\underconstruction}{% - \begin{picture}(0,0) - \put(9,0.9){\makebox(0,0)[b]{\includegraphics[width=1.5cm]{Zeichen_123.pdf}}} - \put(9,0.6){\makebox(0,0)[t]{\shortstack{Änderungen\\vorbehalten}}} - \end{picture}} - -\title{Eingebettete Systeme} -\author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski} -\date{14.\ Oktober 2021} - -\newcommand{\ItwoC}{I\raisebox{0.5ex}{\footnotesize 2}C} - -\begin{document} - -\maketitleframe - -\nosectionnonumber{\inserttitle} - -\begin{frame} - - \shownosectionnonumber - - \begin{itemize} - \item[\textbf{1}] \textbf{Einführung} - \hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/es}}}% - \begin{itemize} - \color{medgreen} - \item[1.1] Was sind eingebettete Systeme? - \item[1.2] Vertiefung Systemtechnik - \item[1.3] In dieser Lehrveranstaltung - \end{itemize} - \item[\textbf{2}] \textbf{Einführung in Unix} - \begin{itemize} - \color{medgreen} - \item[2.1] Grundkonzepte - \item[2.2] Die Kommandozeile: Grundlagen - \color{orange} - \item[2.3] Dateisysteme - \color{red} - \item[2.4] Ein- und Ausgabeströme - \item[2.5] Pipes - \item[2.6] Verzweigungen und Schleifen -% \item[\dots] - \end{itemize} - \color{gray} - \item[\textbf{3}] \textbf{TCP/IP in der Praxis} - \vspace*{-\smallskipamount} - \item[\textbf{\dots}] - \end{itemize} - -% \vspace*{-1cm plus 1filll} - -% \underconstruction - -\end{frame} - -\sectionnonumber{Was sind eingebettete Systeme?} - -\begin{frame} - - \showsectionnonumber - - \emph{Der Ausdruck \textbf{\newterm{eingebettetes System\/}} (\dots\,) bezeichnet - einen elektronischen Rechner oder auch Computer, - der in einen technischen Kontext eingebunden (eingebettet) ist.} - \vspace*{-0.5cm} - \begin{flushright} - \url{https://de.wikipedia.org/wiki/Eingebettetes_System} - \end{flushright} - - \begin{itemize} -% \pause - \item - \emph{keine\/} Aussage über die Größe -% \pause - \item - in der Praxis: so klein wie möglich, z.\,B.: -% \only<4>{\vspace*{-3.3cm}\hspace*{0.7cm}\includegraphics[height=8cm]{csa2.jpg}\hspace*{-1cm}\vspace*{-8cm}} -% \pause -% \pause - \begin{itemize} - \item - mehrere Rechnerschränke - \item - Industrie-PC - \item - Einplatinencomputer - \item - Mikro-Controller - \end{itemize} -% \pause - \item - Bedienung über spezielle Ein-/Ausgabegeräte (z.\,B.\ Flugsimulator, Telefon) -% \pause - \item - Wartung über speziellen Adminstrator-Zugang - \begin{itemize} - \item - Bus-Schnittstelle (RS-232, CAN-BUS) - \item - Netzwerk (TCP/IP, Ethernet oder WLAN) - \end{itemize} -% \pause - \item - Programmierung oft außerhalb des Systems\\ - (Cross-Entwicklungswerkzeuge) - \end{itemize} - \vspace*{-1cm} - -\end{frame} - -\sectionnonumber{In dieser Lehrveranstaltung} - -\begin{frame} - - \showsectionnonumber - \vspace*{-\medskipamount} - \begin{itemize} - \item - Einführung in Unix - \item - TCP/IP und Bus-Systeme in der Praxis - \item - C-Programmierung für Fortgeschrittene - \item - Echtzeit-Systeme in Theorie und Praxis - \medskip - \item - Prüfungsleistung: Projektaufgabe\\ - Eingebettetes System eigener Wahl zum Laufen bringen - \arrowitem - {\color{red}Projektaufgabe überlegen} - \end{itemize} - - \bigskip - - Ideen: - \begin{itemize} - \item - Steuerung von Robotern - \item - Smart Home - \item - Smartphone im Selbstbau - \item - Verbesserungen an unseren Online-Werkzeugen\\für Lehre und Home-Office - \end{itemize} - -\end{frame} - -\setcounter{section}{1} -\section{Einführung in Unix} - -\subsection{Grundkonzepte} - -\begin{frame} - - \begin{minipage}[b]{6.5cm} - \showsection - \vspace{-\medskipamount} - \showsubsection - \end{minipage} - - \begin{description} - \addtolength{\leftskip}{-1cm} - \item[1965] - Vorgänger: Multics (Multiplexed Information and Computing Service)\\ - "`überladen"' - \item[1970] - Unix: Einfachheit als Grundkonzept - \item[1972] - Umstellung auf neu entwickelte Programmiersprache C - \item[1975] - AT\&T: Unix inkl.\ Quelltext für Universitäten - \item[1977] - Berkeley Software Distribution (BSD) - \item[1983] - GNU-Projekt - \item[1987] - Minix - \item[1991] - Linux - \item[1993] - FreeBSD, NetBSD - \item[1994] - OpenBSD - \item[2000] - Darwin (Mac OS X, BSD-basiert) - \item[2008] - Android (Linux-basiert) - \end{description} - -\end{frame} - -\begin{frame}[fragile] - - \begin{minipage}[b]{6.5cm} - \showsection - \vspace{-\medskipamount} - \showsubsection - - Unix und C: Einfachheit als Grundkonzept -% \vspace{-\bigskipamount} - \begin{itemize} - \item - Vermeiden von Ausnahmen - \item[\color{lightgray}$\bullet$] - \color{lightgray}Baukastensystem - \end{itemize} - \end{minipage}\hspace*{0.5cm}% - \begin{minipage}[b]{5cm} - \small - C: Hauptprogramm\\ - = "`normale"' Funktion - - \medskip - - \begin{lstlisting}[gobble=6] - int main (int argc, char **argv) - { - printf ("Hello, world!\n"); - return 0; - } - \end{lstlisting} - \vspace{-\bigskipamount} - \end{minipage} - - \bigskip - \bigskip - - Unix: übergeordnetes Verzeichnis = "`normales"' Verzeichnis - - \medskip - - \begin{lstlisting}[style=terminal] - cassini/home/peter/foo> ¡ls -la¿ - insgesamt 24 - drwxr-xr-x 2 peter peter 4096 Okt 6 13:30 . - drwxr-xr-x 172 peter peter 20480 Okt 6 13:30 .. - cassini/home/peter/foo> ¡cd ..¿ - cassini/home/peter> - \end{lstlisting} - -\end{frame} - -\begin{frame}[fragile] - - \begin{minipage}[b]{6.5cm} - \showsection - \vspace{-\medskipamount} - \showsubsection - - Unix und C: Einfachheit als Grundkonzept -% \vspace{-\bigskipamount} - \begin{itemize} - \item - Vermeiden von Ausnahmen - \item - Baukastensystem - \end{itemize} - \end{minipage}% - \begin{minipage}[b]{5.5cm} - \small - C: Bibliotheken - - \smallskip - - z.\,B.: \lstinline{printf()} = "`normale"' Funktion\\ - aus eine Bibliothek (\file{libc}) - \end{minipage} - - \bigskip - \bigskip - - Unix: Programme arbeiten zusammen - - \medskip - - \begingroup\small - - \begin{lstlisting}[style=terminal] - cassini/home/peter/bo> ¡find . -name "*klausur*.tex" \ - | xargs grep -l "PBM-Datei"¿ - ./2014ws/ainf/20150130.0/ainf-klausur-20150130.tex - ./2016ws/hp/20170920.0/klausur.tex - ./2016ws/hp/20170206.0/klausur.tex - ./2011ws/rarch/20120322.0/rarch-klausur-20120322.tex - ./2012ws/klausuren-gerwinski/rarch-klausur-20120322.tex - ./2013ws/ainf/20140918.0/ainf-klausur-20140918.tex - ./2017ws/hp/20180213.k1/klausur.tex - ./2017ws/hp/20180205/klausur.tex - ./2015ws/ainf/20160913/ainf-klausur-20160913.tex - \end{lstlisting} - - \endgroup - -\end{frame} - -\subsection{Die Kommandozeile: Grundlagen} - -\begin{frame}[fragile] - - \showsubsection - - \begin{itemize} - \item - Programm aufrufen: Namen eingeben, z.\,B.: \lstinline[style=cmd]{ls} - \item - Optionen: \lstinline[style=cmd]{ls -l} - \item - Lange Optionen (GNU-Konvention): \lstinline[style=cmd]{ls --help} - \medskip - \item - Text schreiben: \lstinline[style=cmd]{echo "Hello, world!"} - \item - (String-)Variable setzen: \lstinline[style=cmd]{FOO=bar} - \item - Variable abrufen: \lstinline[style=cmd]{echo $FOO} - \end{itemize} - -% \pause - \begin{lstlisting}[style=terminal] - cassini/home/peter/bo> ¡FOO=ls¿ - cassini/home/peter/bo> ¡echo $FOO¿ - ls - cassini/home/peter/bo> ¡$FOO¿ - 2011ws 2012ws 2013ws doc misc projekte - 2012ss 2013ss briefe material orga - cassini/home/peter/bo> - \end{lstlisting} - -\end{frame} - -\begin{frame} - - \showsubsection - - \begin{itemize} - \item - Befehl zurückholen: Pfeiltasten $\uparrow$, $\downarrow$ - \item - Befehl bearbeiten: Pfeiltasten $\leftarrow$, $\rightarrow$ usw. - \item - Befehl vervollständigen: TAB - \item - Befehl rückwärts suchen: Ctrl+R - \item - Bildschirm löschen: Ctrl+L - \item - Befehl abbrechen: Ctrl+C - \bigskip -% \pause - \item - Hilfe-Option: \lstinline[style=cmd]{ls --help} - \item - Unix-Handbuch -- \emph{manual\/}: \lstinline[style=cmd]{man ls}\\ - (Beenden mit \lstinline[style=cmd]{q}) - \end{itemize} - -\end{frame} - -\begin{frame} - - \showsubsection - - \begin{itemize} - \item - Verzeichnisse für Programme: \lstinline[style=cmd]{echo $PATH} - \item - Programm in explizitem Verzeichnis aufrufen: \lstinline[style=cmd]{/bin/ls -l} - \item - Programm im aktuellen Verzeichnis aufrufen: \lstinline[style=cmd]{./hello} - \bigskip - - \addtolength{\leftskip}{1cm} - \item[MS-DOS:] - Ausführbare Programme werden gefunden,\\ - wenn sie im \lstinline[style=terminal]{PATH} stehen\\ - \emph{oder\/} sich im aktuellen Verzeichnis befinden. - \smallskip - \item[Unix:] - Ausführbare Programme werden gefunden,\\ - wenn sie im \lstinline[style=terminal]{PATH} stehen. - - \smallskip - \textarrow\ Vermeiden von Ausnahmen - -% \pause - \smallskip - Das aktuelle Verzeichnis (\lstinline[style=terminal]{.}) - \emph{kann\/} im \lstinline[style=terminal]{PATH} stehen,\\ - muß dies aber nicht --\\ - und sollte es aus Sicherheitsgründen auch nicht. - - \end{itemize} - -\end{frame} - -\subsection{Dateisysteme} - -\begin{frame} - - \showsubsection - - \begin{itemize} - \item - Dateien listen: \lstinline[style=cmd]{ls}\\ - langes Listenformat: \lstinline[style=cmd]{ls -l}\\ - rückwärts nach Zeit sortiert: \lstinline[style=cmd]{ls -lrt} - \item - Datei ausgeben: \lstinline[style=cmd]{cat hello.c} - \item - Datei anzeigen: \lstinline[style=cmd]{less hello.c} - \end{itemize} - -\end{frame} - -\begin{frame}[fragile] - - \showsubsection - - \begin{itemize} - \item - Arbeitsverzeichnis anzeigen: \lstinline[style=cmd]{pwd}\\ - \item - Arbeitsverzeichnis wechseln: \lstinline[style=cmd]{cd script}\\ - (\emph{kein\/} Programm, sondern Shell-Befehl) - \item - übergeordnetes Verzeichnis: \lstinline[style=cmd]{cd ..} - \item - eigenes \newterm{Home-\/}Verzeichnis: \lstinline[style=cmd]{cd} - \item - Wurzelverzeichnis: \lstinline[style=cmd]{cd /} - \item - wieder zurück: \lstinline[style=cmd]{cd -} - \end{itemize} - -% \pause - \begin{lstlisting}[style=terminal] - cassini/home/peter/bo/2013ss/net/script> ¡cd /usr/bin¿ - cassini/usr/bin> ¡cd ../lib¿ - cassini/usr/lib> ¡cd¿ - cassini/home/peter> - \end{lstlisting} - -\end{frame} - -\begin{frame}[fragile] - - \showsubsection - - \begin{itemize} - \item - Dateien kopieren (\emph{copy\/}): \lstinline[style=cmd]{cp} - \item - Dateien verschieben/umbenennen (\emph{move\/}): \lstinline[style=cmd]{mv} - \item - Dateien löschen (\emph{remove\/}): \lstinline[style=cmd]{rm} - \end{itemize} - - \begin{lstlisting}[style=terminal,xleftmargin=-3pt] - cassini/home/peter> ¡cp -p foo/test.txt¿ - cp: missing destination file operand after `foo/test.txt' - Try `cp --help' for more information. - cassini/home/peter> ¡cp -p foo/test.txt .¿ - cassini/home/peter> ¡mv test.txt bla.txt¿ - cassini/home/peter> ¡cat bla.txt¿ - Dies ist ein Test. - cassini/home/peter> ¡rm bla.txt¿ - cassini/home/peter> - \end{lstlisting} - - \medskip - - Aktuelles Verzeichnis: \lstinline[style=cmd]{.} - -\end{frame} - -\begin{frame}[fragile] - - \showsubsection - - \begin{itemize} - \item - Datenträger in Verzeichnis \newterm{einhängen\/}: \lstinline[style=cmd]{mount} - \end{itemize} - - \begin{lstlisting}[style=terminal] - cassini/home/peter> ¡ls /media/usb1/¿ - cassini/home/peter> ¡mount /media/usb1¿ - cassini/home/peter> ¡ls /media/usb1/¿ - es-20191002.pdf hello.c hexapode KIS-Bericht.pdf - cassini/home/peter> ¡umount /media/usb1¿ - cassini/home/peter> ¡ls /media/usb1/¿ - cassini/home/peter> - \end{lstlisting} - -\end{frame} - -\begin{frame}[fragile] - - \showsubsection - - \begin{itemize} - \item - \newterm{Zugriffsrechte} - \end{itemize} - - \begingroup -% \small - \begin{lstlisting}[style=terminal,gobble=6,xleftmargin=-3pt] - cassini/home/peter/bo/2019ws/es/20191009> ¡ls -l¿ - ... - -rw-r--r-- 1 peter peter 24523 Okt 8 21:47 es-20191009.tex - \end{lstlisting} - \endgroup - \begin{onlyenv}<2> - \begin{picture}(0,1) - \color{red} - \put(0.3,0){\tikz{\draw[-latex,red](0,0)--(0,1); - \draw[-latex,red](0,0)--(2.5,1);}} - \put(0,-0.1){\makebox(0,0)[tl]{Benutzer (u -- \emph{user\/}) darf lesen und schreiben}} - \end{picture} - \end{onlyenv} - \begin{onlyenv}<3> - \begin{picture}(0,1) - \color{red} - \put(0.84,0){\tikz{\draw[-latex,red](0,0)--(0,1); - \draw[-latex,red](0,0)--(3.2,1);}} - \put(0,-0.1){\makebox(0,0)[tl]{Gruppe (g -- \emph{group\/}) darf lesen}} - \end{picture} - \end{onlyenv} - \begin{onlyenv}<4> - \begin{picture}(0,1) - \color{red} - \put(1.47,0){\tikz{\draw[-latex,red](0,0)--(0,1);}} - \put(0,-0.1){\makebox(0,0)[tl]{alle anderen (o -- \emph{other\/}) dürfen lesen}} - \end{picture} - \end{onlyenv} - - \medskip - \pause[5] - \begin{itemize} - \item - Zugriffsrechte ändern:\\ - \lstinline[style=cmd]{chmod o-r es-20191009.tex} -- Lesezugriff entziehen\\ - \lstinline[style=cmd]{chmod g+w es-20191009.tex} -- Schreibzugriff gewähren\\ - \lstinline[style=cmd]{chmod 640 es-20191009.tex} -- - auf \lstinline[style=terminal]{-}% - \lstinline[style=terminal]{rw-}% - \lstinline[style=terminal]{r--}% - \lstinline[style=terminal]{---} setzen - \end{itemize} - \pause - \begin{picture}(0,0) - \color{red} - \put(7.22,0.55){\makebox(0,0)[tl]{% - \small - \begin{math}% - \underbrace{\rule{0.7em}{0pt}}_{\textstyle 6}% - \underbrace{\rule{0.7em}{0pt}}_{\textstyle 4}% - \underbrace{\rule{0.7em}{0pt}}_{\textstyle 0} - \end{math}}} - \end{picture} - -\end{frame} - -\begin{frame}[fragile] - - \showsubsection - - \begin{itemize} - \item - \newterm{ausführbare\/} Dateien - \end{itemize} - - \begingroup -% \small - \begin{lstlisting}[style=terminal,gobble=6,xleftmargin=-3pt] - cassini/home/peter/bo/2019ws/es/20191002> ¡cat test2.txt¿ - ls -l - cassini/home/peter/bo/2019ws/es/20191002> ¡chmod +x test2.txt¿ - cassini/home/peter/bo/2019ws/es/20191002> ¡ls -l test2.txt¿ - -rwxr-xr-x 1 peter peter 6 Okt 2 13:43 test2.txt - cassini/home/peter/bo/2019ws/es/20191002> ¡./test2.txt¿ - insgesamt 4828 - lrwxrwxrwx 1 peter peter 18 Apr 13 2016 csa2.jpg -> ../common/csa2.jpg - -rw-r--r-- 1 peter peter 4619138 Okt 8 21:28 es-20191002.pdf - ... - \end{lstlisting} - \endgroup - -% \pause - \begin{itemize} - \item - ausführbare Textdateien: \newterm{Skripte} - -% \pause - \smallskip - hier: ausführbare Textdatei mit Shell-Befehlen\\ - (ohne spezielle Kennung): Shell-Skript - - \pause - \smallskip - Kennung: 1.\ Zeile enthält \lstinline[style=terminal]{#!} und den Interpreter,\\ - z.\,B.\ \lstinline[style=terminal]{#!/bin/bash}\\ - \end{itemize} - -\end{frame} - -\begin{frame} - - \shownosectionnonumber - - \begin{itemize} - \item[\textbf{1}] \textbf{Einführung} - \hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/es}}}% - \begin{itemize} - \color{medgreen} - \item[1.1] Was sind eingebettete Systeme? - \item[1.2] Vertiefung Systemtechnik - \item[1.3] In dieser Lehrveranstaltung - \end{itemize} - \item[\textbf{2}] \textbf{Einführung in Unix} - \begin{itemize} - \color{medgreen} - \item[2.1] Grundkonzepte - \item[2.2] Die Kommandozeile: Grundlagen - \color{orange} - \item[2.3] Dateisysteme - \color{red} - \item[2.4] Ein- und Ausgabeströme - \item[2.5] Pipes - \item[2.6] Verzweigungen und Schleifen - \end{itemize} - \color{gray} - \item[\textbf{3}] \textbf{TCP/IP in der Praxis} - \vspace*{-\smallskipamount} - \item[\textbf{\dots}] - \end{itemize} - -% \vspace*{-1cm plus 1filll} - -% \underconstruction - -\end{frame} - -\begin{frame}[fragile] - - \showsubsection - - \begin{itemize} - \item - \newterm{Symbolische Verknüpfungen -- symbolic links} - - \smallskip - - Verweis auf die eigentliche Datei\\ - \textarrow\ Wenn man die Datei löscht, zeigt der Link ins Leere. - - \smallskip - - Verknüpfung anlegen: \lstinline[style=cmd]{ln -s datei link}\\ - (Richtung: wie bei \lstinline[style=cmd]{cp}) - - \smallskip - - Beispiel: \lstinline[style=cmd]{ln -s ../common/GNU-GPL-3 gpl.txt} - \pause - \medskip - \item - \newterm{Harte Verknüpfungen -- hard links} - - \smallskip - - Dieselben Daten auf dem Datenträger\\ - sind unter mehreren Namen verfügbar.\\ - \textarrow\ Wenn man einen löscht, sind die Daten noch da. - - \smallskip - - \begingroup - \begin{lstlisting}[style=terminal,gobble=10,xleftmargin=-3pt] - cassini/home/peter/bo/2019ws/es/20191002> ¡ls -l¿ - ... - -rw-r--r-- 1 peter peter 1202 Okt 2 13:35 shell-06.txt - drwxr-xr-x 2 peter peter 4096 Okt 2 13:16 test - \end{lstlisting} - \endgroup - \begin{picture}(0,0.5) - \color{red} - \put(2.31,0){\tikz{\draw[-latex,red](0,0)--(0,0.5);}} - \put(0,-0.1){\makebox(0,0)[tl]{Anzahl der ("`harten"') Links - auf diese Datei / dieses Verzeichnis}} - \end{picture} - \end{itemize} - -\end{frame} - -\begin{frame}[fragile] - - \showsubsection - - \begin{itemize} - \item - \lstinline[style=cmd]{grep}: Dateien durchsuchen - \end{itemize} - \begin{lstlisting}[style=terminal,xleftmargin=-3pt] - cassini/home/peter/bo/2019ws/es/20191002> ¡grep gcc *.txt¿ - shell-03.txt: cassini/...> gcc -Wall -O hello.c -o hello - \end{lstlisting} - -\end{frame} - -\begin{frame}[fragile] - - \showsubsection - - \begin{itemize} - \item - \lstinline[style=cmd]{find}: Dateien anhand ihrer Eigenschaften suchen - \end{itemize} - -% \small - \begin{lstlisting}[style=terminal] - $ ¡find . -name "*.txt"¿ - ./shell-06.txt - ./shell-03.txt - ./shell-05.txt - ./test.txt - ./test/test.txt - ... - $ ¡find . -name "*.txt" -perm /u+x¿ - ./test2.txt - $ ¡find . -name "*.txt" -perm /u+x -exec ls -l {} \;¿ - -rwxr-xr-x 1 peter peter 6 Okt 2 13:43 ./test2.txt - \end{lstlisting} - -\end{frame} - -\subsection{Ein- und Ausgabeströme} - -\begin{frame}[fragile] - - \showsubsection - - \begin{itemize} - \item - Standard-Ausgabe in Datei umleiten - \end{itemize} - \begin{lstlisting}[style=terminal] - $ ¡echo "Dies ist ein Test." > test.txt¿ - $ ¡cat test.txt¿ - Dies ist ein Test. - \end{lstlisting} - - \pause - \smallskip - - \begin{itemize} - \item - Standard-Ausgabe an Datei anhängen - \end{itemize} - \begin{lstlisting}[style=terminal] - $ ¡echo "Dies ist noch ein Test." >> test.txt¿ - $ ¡cat test.txt¿ - Dies ist ein Test. - Dies ist noch ein Test. - \end{lstlisting} - -\end{frame} - -\begin{frame}[fragile] - - \showsubsection - - \begin{itemize} - \item - Fehler-Ausgabe in Datei umleiten - \end{itemize} - \begin{lstlisting}[style=terminal] - $ ¡cat gibtsnicht.txt > fehler.txt¿ - cat: gibtsnicht.txt: No such file or directory - $ ¡cat fehler.txt¿ - $ ¡cat gibtsnicht.txt 2> fehler.txt¿ - $ ¡cat fehler.txt¿ - cat: gibtsnicht.txt: No such file or directory - \end{lstlisting} - -\end{frame} - -\begin{frame}[fragile] - - \showsubsection - - \begin{itemize} - \item - Standard-Eingabe aus Datei lesen - \end{itemize} - \begin{lstlisting}[style=terminal] - $ ¡bc¿ - bc 1.06.95 - Copyright [...] 2006 Free Software Foundation, Inc. - This is free software with ABSOLUTELY NO WARRANTY. - For details type `warranty'. - ¡2 + 2¿ - 4 - $ ¡echo "2 + 2" > test.bc¿ - $ ¡bc < test.bc¿ - 4 - \end{lstlisting} - -\end{frame} - -\subsection{Pipes} - -\begin{frame}[fragile] - - \showsubsection - - Standard-Ausgabe von Programm A\\ - wird zu Standard-Eingabe von Programm B - - \smallskip - - \begin{lstlisting}[style=terminal] - $ ¡echo "2 + 2" | bc¿ - 4 - \end{lstlisting} - - \smallskip - - \textarrow\ sehr mächtiger "`Baukasten"' - -\end{frame} - -\begin{frame}[fragile] - - \showsubsection - - \begin{itemize} - \item - \lstinline[style=cmd]{sed}: \emph{stream editor}\\ - Suchen und Ersetzen (und noch viel mehr) - \end{itemize} - \begin{lstlisting}[style=terminal] - $ ¡echo "Schlimmer geht nimmer." | sed -e 's/nim/im/g'¿ - Schlimmer geht immer. - \end{lstlisting} - -\end{frame} - -\begin{frame}[fragile] - - \showsubsection - - \begin{itemize} - \item - \lstinline[style=cmd]{grep}: Standard-Eingabe durchsuchen - \end{itemize} - \begin{lstlisting}[style=terminal] - $ ¡ls | grep slides¿ - pgslides.sty - $ ¡ls *.pdf | grep -v logo¿ - es-20191002.pdf - Zeichen_123.pdf - $ ¡ls -l $(ls *.pdf | grep -v logo)¿ - -rw-r--r-- 1 ... 4619138 Okt 8 21:28 es-20191002.pdf - lrwxrwxrwx 1 ... 25 Okt 3 2016 Zeichen_123.pdf -> ... - \end{lstlisting} - -\end{frame} - -\subsection{Verzweigungen und Schleifen} - -\begin{frame}[fragile] - - \showsubsection - - \begin{lstlisting}[style=terminal] - $ ¡if grep Blubb test.txt; then echo "gefunden"; \ - else echo "nicht gefunden"; fi¿ - nicht gefunden - $ ¡for x in foo bar baz; do echo $x; done¿ - foo - bar - baz - \end{lstlisting} - -\end{frame} - -\nosectionnonumber{\inserttitle} - -\begin{frame} - - \shownosectionnonumber - - \begin{itemize} - \item[\textbf{1}] \textbf{Einführung} - \hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/es}}}% - \item[\textbf{2}] \textbf{Einführung in Unix} - \begin{itemize} - \item[2.1] Grundkonzepte - \item[2.2] Die Kommandozeile: Grundlagen - \color{medgreen} - \item[2.3] Dateisysteme - \item[2.4] Ein- und Ausgabeströme - \item[2.5] Pipes - \item[2.6] Verzweigungen und Schleifen - \end{itemize} - \color{red} - \item[\textbf{3}] \textbf{TCP/IP in der Praxis} - \vspace*{-\smallskipamount} - \item[\textbf{\dots}] - \end{itemize} - -% \vspace*{-1cm plus 1filll} - -% \underconstruction - -\end{frame} - -\end{document} diff --git a/20211014/fehler.txt b/20211014/fehler.txt deleted file mode 100644 index be6e4a2f52986509e117253929140d3be3fb88bc..0000000000000000000000000000000000000000 --- a/20211014/fehler.txt +++ /dev/null @@ -1 +0,0 @@ -cat: gibtsnicht.txt: Datei oder Verzeichnis nicht gefunden diff --git a/20211014/find-1.txt b/20211014/find-1.txt deleted file mode 100644 index 7ec6bf023cb3a3938e044a5bfcf59f49e1c27fc0..0000000000000000000000000000000000000000 --- a/20211014/find-1.txt +++ /dev/null @@ -1,9 +0,0 @@ -cassini/home/peter/bo/2021ws/es> find . -name "test*" -./20211014/test-3.txt -./20211014/test -./20211014/test-1.txt -./20211014/test-2.txt -./20211014/test-4.txt -./20211007/test -./20211007/test-1.txt -./20211007/test-2.txt diff --git a/20211014/find-2.txt b/20211014/find-2.txt deleted file mode 100644 index fc13098141dbcaafcbedc578d7da1785a49f77de..0000000000000000000000000000000000000000 --- a/20211014/find-2.txt +++ /dev/null @@ -1,10 +0,0 @@ -cassini/home/peter/bo/2021ws/es> find . -name test* -./20211014/test-3.txt -./20211014/test -./20211014/test-1.txt -./20211014/test-2.txt -./20211014/test-4.txt -./20211007/test -./20211007/test-1.txt -./20211007/test-2.txt -cassini/home/peter/bo/2021ws/es> diff --git a/20211014/find-3.txt b/20211014/find-3.txt deleted file mode 100644 index 828096b5780a13154bf15696d3f5a85eb921b8a4..0000000000000000000000000000000000000000 --- a/20211014/find-3.txt +++ /dev/null @@ -1,8 +0,0 @@ -cassini/home/peter/bo/2021ws/es> ls -20211007 20211014 common es-slides-2021ws.pdf find-1.txt find-2.txt README.md update -cassini/home/peter/bo/2021ws/es> find . -name find* -find: paths must precede expression: `find-2.txt' -find: possible unquoted pattern after predicate `-name'? -cassini/home/peter/bo/2021ws/es> echo find . -name find* -find . -name find-1.txt find-2.txt -cassini/home/peter/bo/2021ws/es> diff --git a/20211014/find-4.txt b/20211014/find-4.txt deleted file mode 100644 index fcd9bfa18b1e440a3a0785252af7978815ac696a..0000000000000000000000000000000000000000 --- a/20211014/find-4.txt +++ /dev/null @@ -1,11 +0,0 @@ -cassini/home/peter/bo/2021ws/es> find . -name "*.txt" -perm /u+x -./20211014/test-3.txt -cassini/home/peter/bo/2021ws/es> ls -l ./20211014/test-3.txt -lrwxrwxrwx 1 peter peter 10 Okt 14 16:20 ./20211014/test-3.txt -> test-1.txt -cassini/home/peter/bo/2021ws/es> 20211014/test-3.txt -bash: 20211014/test-3.txt: Keine Berechtigung -cassini/home/peter/bo/2021ws/es> find . -name "*.txt" -type f -perm /u+x -cassini/home/peter/bo/2021ws/es> find . -name "*.sh" -type f -perm /u+x -./20211014/script-2.sh -./20211014/script-1.sh -cassini/home/peter/bo/2021ws/es> diff --git a/20211014/for-1.txt b/20211014/for-1.txt deleted file mode 100644 index fd86ec89417e3ce8671169cf64196e2b2497b427..0000000000000000000000000000000000000000 --- a/20211014/for-1.txt +++ /dev/null @@ -1,28 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211014> for x in foo bar baz; do echo $x; done -foo -bar -baz -cassini/home/peter/bo/2021ws/es/20211014> seq -seq: fehlender Operand -„seq --help“ liefert weitere Informationen. -cassini/home/peter/bo/2021ws/es/20211014> seq 3 -1 -2 -3 -cassini/home/peter/bo/2021ws/es/20211014> seq 5 -1 -2 -3 -4 -5 -cassini/home/peter/bo/2021ws/es/20211014> ls test*.txt -test-1.txt test-2.txt test-3.txt test-4.txt test-5.txt test-6.txt -cassini/home/peter/bo/2021ws/es/20211014> seq 7 10 -7 -8 -9 -10 -cassini/home/peter/bo/2021ws/es/20211014> for x in $(seq 7 10); do echo "Test" > test-$x.txt; done -cassini/home/peter/bo/2021ws/es/20211014> ls test*.txt test-10.txt test-2.txt test-4.txt test-6.txt test-8.txt -test-1.txt test-3.txt test-5.txt test-7.txt test-9.txt -cassini/home/peter/bo/2021ws/es/20211014> diff --git a/20211014/grep-1.txt b/20211014/grep-1.txt deleted file mode 100644 index 61db19087099360876bafa320cba1632e46024f0..0000000000000000000000000000000000000000 --- a/20211014/grep-1.txt +++ /dev/null @@ -1,21 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211014> grep "^[Tt]est" *.txt -cassini/home/peter/bo/2021ws/es/20211014> grep "[Tt]est$" *.txt -chmod-1.txt:drwxr-xr-x 2 peter peter 4096 Okt 14 15:47 test -wildcards-1.txt:cassini/home/peter/bo/2021ws/es/20211014> mkdir test -wildcards-1.txt:cassini/home/peter/bo/2021ws/es/20211014> cd test -wildcards-2.txt:cassini/home/peter/bo/2021ws/es/20211014> cd test -cassini/home/peter/bo/2021ws/es/20211014> grep "[Tt]est.$" *.txt -links-1.txt:Dies ist ein Test. -links-1.txt:Dies ist ein Test. -links-1.txt:Dies ist ein Test. -links-1.txt:Dies ist ein besonders schöner Test. -links-2.txt:Dies ist ein besonders schöner Test. -links-2.txt:Dies ist ein Test. -links-3.txt:Dies ist ein Test. -test-1.txt:Dies ist ein Test. -test-3.txt:Dies ist ein Test. -test-4.txt:Dies ist ein Test. -wildcards-1.txt:Dies ist ein Test. -wildcards-2.txt:cassini/home/peter/bo/2021ws/es/20211014/test> -wildcards-3.txt:cassini/home/peter/bo/2021ws/es/20211014/test> -cassini/home/peter/bo/2021ws/es/20211014> diff --git a/20211014/grep-2.txt b/20211014/grep-2.txt deleted file mode 100644 index 67bcf542566b674efb5a7659b9a83e3f3277c138..0000000000000000000000000000000000000000 --- a/20211014/grep-2.txt +++ /dev/null @@ -1,31 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211014> grep -i "[Dd]ies.*[Tt]est" *.txt -grep-1.txt:links-1.txt:Dies ist ein Test. -grep-1.txt:links-1.txt:Dies ist ein Test. -grep-1.txt:links-1.txt:Dies ist ein Test. -grep-1.txt:links-1.txt:Dies ist ein besonders schöner Test. -grep-1.txt:links-2.txt:Dies ist ein besonders schöner Test. -grep-1.txt:links-2.txt:Dies ist ein Test. -grep-1.txt:links-3.txt:Dies ist ein Test. -grep-1.txt:test-1.txt:Dies ist ein Test. -grep-1.txt:test-3.txt:Dies ist ein Test. -grep-1.txt:test-4.txt:Dies ist ein Test. -grep-1.txt:wildcards-1.txt:Dies ist ein Test. -links-1.txt:Dies ist ein Test. -links-1.txt:Dies ist ein Test. -links-1.txt:Dies ist ein Test. -links-1.txt:cassini/home/peter/bo/2021ws/es/20211014> echo "Dies ist ein besonders schöner Test." > test-1.txt -links-1.txt:Dies ist ein besonders schöner Test. -links-2.txt:cassini/home/peter/bo/2021ws/es/20211014> echo "Dies ist ein besonders schöner Test." > test-1.txt -links-2.txt:Dies ist ein besonders schöner Test. -links-2.txt:cassini/home/peter/bo/2021ws/es/20211014> echo "Dies ist ein Test." > test-1.txt cassini/home/peter/bo/2021ws/es/20211014> cat test-4.txt -links-2.txt:Dies ist ein Test. -links-3.txt:Dies ist ein Test. -test-1.txt:Dies ist ein Test. -test-3.txt:Dies ist ein Test. -test-4.txt:Dies ist ein Test. -wildcards-1.txt:cassini/home/peter/bo/2021ws/es/20211014> echo "Dies ist ein Test." > test-1.txt -wildcards-1.txt:cassini/home/peter/bo/2021ws/es/20211014> echo "Dies auch." > test-2.txt -wildcards-1.txt:Dies ist ein Test. -wildcards-2.txt:cassini/home/peter/bo/2021ws/es/20211014> echo "Dies ist ein Test." > test-1.txt -wildcards-2.txt:cassini/home/peter/bo/2021ws/es/20211014> echo "Dies auch." > test-2.txt -cassini/home/peter/bo/2021ws/es/20211014> diff --git a/20211014/grep-3.txt b/20211014/grep-3.txt deleted file mode 100644 index 3094dcc08633849229c1777c1d42285e9fbc8c23..0000000000000000000000000000000000000000 --- a/20211014/grep-3.txt +++ /dev/null @@ -1,7 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211014> grep "public key" index.html -<tr><td><a href="peter-gerwinski.public-key.asc">GnuPG public key:<code><br>2CFD EA6C 31E6 12A0 BFFF<br>2451 D955 0227 6224 E7F5</code></a></td></tr> -cassini/home/peter/bo/2021ws/es/20211014> grep "href=\".*\".*public key" index.html -<tr><td><a href="peter-gerwinski.public-key.asc">GnuPG public key:<code><br>2CFD EA6C 31E6 12A0 BFFF<br>2451 D955 0227 6224 E7F5</code></a></td></tr> -cassini/home/peter/bo/2021ws/es/20211014> grep -o "href=\".*\".*public key" index.html -href="peter-gerwinski.public-key.asc">GnuPG public key -cassini/home/peter/bo/2021ws/es/20211014> diff --git a/20211014/hello-1.c b/20211014/hello-1.c deleted file mode 100644 index b19d80e9bd0bd7c5ed8f54b20c6a50d9166f03ac..0000000000000000000000000000000000000000 --- a/20211014/hello-1.c +++ /dev/null @@ -1,7 +0,0 @@ -#include <stdio.h> - -int main (void) -{ - printf ("Hello, world!\n"); - return 0; -} diff --git a/20211014/hello-2.c b/20211014/hello-2.c deleted file mode 100644 index ad00a77d2f568db1c8e32ecc56a6dd5a38970db8..0000000000000000000000000000000000000000 --- a/20211014/hello-2.c +++ /dev/null @@ -1,7 +0,0 @@ -#include <stdio.h> - -int main (void) -{ - printf ("Hallo, Welt!\n"); - return 0; -} diff --git a/20211014/hello-3.c b/20211014/hello-3.c deleted file mode 100644 index 45a6c793407abd7596c15caa379c4c29bf6e25e4..0000000000000000000000000000000000000000 --- a/20211014/hello-3.c +++ /dev/null @@ -1,7 +0,0 @@ -#include <stdio.h> - -int main (void) -{ - printf ("Bonjour, le monde !\n"); - return 0; -} diff --git a/20211014/hello.c b/20211014/hello.c deleted file mode 100755 index b19d80e9bd0bd7c5ed8f54b20c6a50d9166f03ac..0000000000000000000000000000000000000000 --- a/20211014/hello.c +++ /dev/null @@ -1,7 +0,0 @@ -#include <stdio.h> - -int main (void) -{ - printf ("Hello, world!\n"); - return 0; -} diff --git a/20211014/if-1.txt b/20211014/if-1.txt deleted file mode 100644 index c72ca141ef635453cc88bfb7aebf77b43d02f754..0000000000000000000000000000000000000000 --- a/20211014/if-1.txt +++ /dev/null @@ -1,11 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211014> if grep Blubb test*.txt; then echo "gefunden"; fi -cassini/home/peter/bo/2021ws/es/20211014> if grep Blubb test*.txt; then echo "gefunden"; else echo "nicht gefunden"; fi -nicht gefunden -cassini/home/peter/bo/2021ws/es/20211014> \ -> if grep Blubb *.txt; then -> echo "gefunden" -> else -> echo "nicht gefunden" -> fi -nicht gefunden -cassini/home/peter/bo/2021ws/es/20211014> diff --git a/20211014/index.html b/20211014/index.html deleted file mode 100644 index 098068edadb2c4a8666195c2c99d15a10b7cac1a..0000000000000000000000000000000000000000 --- a/20211014/index.html +++ /dev/null @@ -1,184 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> -<html lang="de"> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> -<title>Peter Gerwinski</title> -<link rev="made" title="Peter Gerwinski" -href="mailto:peter@gerwinski.de"> -</head> -<body bgcolor="#FFFFFF" text="#100050" link="#0000FF" vlink="#1060C0" -alink="#00A000"> -<p align="right"> -<table border="0" cellspacing="0" cellpadding="3"> -<tr> -<td bgcolor="#FFFFFF" background="images/farbverlauf-dunkler.png"> -<img src="images/null.png" alt=". . o o O O " -width="1" height="1" hspace="127"> -</td> -<td bgcolor="#E0E0E0" background="images/grau.png"> -<img src="images/null.png" alt="(" -width="1" height="1" hspace="3"> -</td> -<td valign="middle" bgcolor="#E0E0E0" background="images/grau.png"> -<font size="-1"><b> -<font size="-2">Home</font> -<img src="images/punkt.png" alt="-" width="8" height="8" hspace="3"> -<font size="-2"><a href="physik/index.de.html">Physik</a></font> -<img src="images/punkt.png" alt="-" width="8" height="8" hspace="3"> -<font size="-2"><a href="download/index.de.html">Download</a></font> -<img src="images/punkt.png" alt="-" width="8" height="8" hspace="3"> -<font size="-2"><a href="artikel/index.de.html">Artikel</a></font> -<img src="images/punkt.png" alt="-" width="8" height="8" hspace="3"> -<font size="-2"><a href="satire/index.de.html">Satire</a></font> -<img src="images/punkt.png" alt="-" width="8" height="8" hspace="3"> -<font size="-2"><a href="fotos/index.de.html">Fotos</a></font> -<img src="images/punkt.png" alt="-" width="8" height="8" hspace="3"> -<font size="-2"><a href="sitemap.de.html">Inhalt</a></font> -</font> -</td> -<td bgcolor="#E0E0E0" background="images/grau.png"> -<img src="images/null.png" alt=")" -width="1" height="1" hspace="3"> -</td> -</tr> -</table> -</p> -<p> -</p> -<a href="artikel/kein-wurm.de.html"><img -src="images/kein-wurm-small.jpg" -alt="Nein, ich habe Ihnen keinen Virus/Wurm geschickt!" -align="right" width="196" height="112" border="0"></a> -<h2>Peter Gerwinski</h2> -<br clear="all"> -<table border="0" cellspacing="0" cellpadding="10" hspace="20" vspace="0"> -<tr valign="top"> -<td width="50%"> -<table width="100%" border="0" cellspacing="0" cellpadding="2"> -<tr background="images/farbverlauf-heller.png" -bgcolor="#E0E0E0"><td><b>Berufliches</b></td></tr> -<tr><td><a href="https://www.hs-bochum.de">Hochschule Bochum</a><br>(Professor für hardwarenahe IT-Systeme)</td></tr> -<tr><td><a href="physik/index.de.html">Physiker</a></td></tr> -</table> -</td> -<td width="50%"> -<table width="100%" border="0" cellspacing="0" cellpadding="2"> -<tr background="images/farbverlauf-heller.png" -bgcolor="#E0E0E0"><td><b>Business</b></td></tr> -<tr><td><a href="https://www.hs-bochum.de">Bochum University of Applied Sciences</a><br>(professor for low-level IT systems)</td></tr> -<tr><td><a href="physik/index.de.html">Physicist</a></td></tr> -</table -</td> -</tr> -<tr valign="top"> -<td width="50%"> -<table width="100%" border="0" cellspacing="0" cellpadding="2"> -<tr background="images/farbverlauf-heller.png" -bgcolor="#E0E0E0"><td><b>GNU – Freie Software</b></td></tr> -<tr><td><a href="https://www.gnu-pascal.de">GNU Pascal</a> (Maintainer)</td></tr> -<tr><td><a href="https://www.elug.de">Essener Linux User Group</a> (Gründungsmitglied)</td></tr> -<tr><td><a href="https://www.gnu.de">GNU-Projekt</a> (Kontributor)</li></td></tr> -</table> -</td> -<td width="50%"> -<table width="100%" border="0" cellspacing="0" cellpadding="2"> -<tr background="images/farbverlauf-heller.png" -bgcolor="#E0E0E0"><td><b>GNU – Free Software</b></td></tr> -<tr><td><a href="https://www.gnu-pascal.de">GNU Pascal</a> (maintainer)</td></tr> -<tr><td><a href="https://www.elug.de">Essener Linux User Group</a><br>(founding member)</td></tr> -<tr><td><a href="https://www.gnu.org">GNU Project</a> (contributor)</td></tr> -</table> -</td> -</tr> -<tr> -<td width="50%"> -<table width="100%" border="0" cellspacing="0" cellpadding="2"> -<tr background="images/farbverlauf-heller.png" -bgcolor="#E0E0E0"><td><b>Sport</b></td></tr> -<tr><td><a href="https://www.sportschule-tokio.de">Judo – Sportschule Tokio</a><br>(Inhaber, Lehrer)</td></tr> -</table> -</td> -<td width="50%"> -<table width="100%" border="0" cellspacing="0" cellpadding="2"> -<tr background="images/farbverlauf-heller.png" -bgcolor="#E0E0E0"><td><b>Sports</b></td></tr> -<tr><td><a href="https://www.sportschule-tokio.de">Judo – Sportschule Tokio</a><br>(owner, teacher)</td></tr> -</table> -</td> -</tr> -<tr> -<td width="50%"> -<table width="100%" border="0" cellspacing="0" cellpadding="2"> -<tr background="images/farbverlauf-heller.png" -bgcolor="#E0E0E0"><td><b>Kontakt / Impressum</b></td></tr> -</table> -</td> -<td width="50%"> -<table width="100%" border="0" cellspacing="0" cellpadding="2"> -<tr background="images/farbverlauf-heller.png" -bgcolor="#E0E0E0"><td><b>Contact</b></td></tr> -</table> -</td> -</tr> -<tr> -<td colspan="2" width="100%" align="center"> -<table width="70%" border="0" cellspacing="0" cellpadding="2"> -<tr><td>Prof. Dr. rer. nat. Peter Gerwinski<br>Gerlachfeld 13, 45279 Essen<br>Deutschland – Germany</td></tr> -<tr><td>E-Mail: <a href="mailto:peter@gerwinski.de">peter@gerwinski.de</a></td></tr> -<tr><td><a href="peter-gerwinski.public-key.asc">GnuPG public key:<code><br>2CFD EA6C 31E6 12A0 BFFF<br>2451 D955 0227 6224 E7F5</code></a></td></tr> -</table> -</td> -</tr> -<tr> -<td colspan="2" width="100%" align="center"> -<table width="70%" border="0" cellspacing="0" cellpadding="2"> -<tr><td><pre> ------BEGIN GEEK CODE BLOCK----- -Version: 3.12@ -GAT d+(++)@ s: a0x7af C++$ UL+++ -P+ L++++$ E- W-(++) N@ w---- M- !V -PS+ PE Y++ GPG++ GPC++++@ R+@ !tv b+ -D-- G+++ e++++ h++ r+++ y? -------END GEEK CODE BLOCK------ -</pre></td></tr> -</table> -</td> -</tr> -</table> -<p align="right"> -<table border="0" cellspacing="0" cellpadding="3"> -<tr> -<td bgcolor="#FFFFFF" background="images/farbverlauf-dunkler.png"> -<img src="images/null.png" alt=". . o o O O " -width="1" height="1" hspace="127"> -</td> -<td bgcolor="#E0E0E0" background="images/grau.png"> -<img src="images/null.png" alt="(" -width="1" height="1" hspace="3"> -</td> -<td valign="middle" bgcolor="#E0E0E0" background="images/grau.png"> -<font size="-1"><b> -<font size="-2">Home</font> -<img src="images/punkt.png" alt="-" width="8" height="8" hspace="3"> -<font size="-2"><a href="physik/index.de.html">Physik</a></font> -<img src="images/punkt.png" alt="-" width="8" height="8" hspace="3"> -<font size="-2"><a href="download/index.de.html">Download</a></font> -<img src="images/punkt.png" alt="-" width="8" height="8" hspace="3"> -<font size="-2"><a href="artikel/index.de.html">Artikel</a></font> -<img src="images/punkt.png" alt="-" width="8" height="8" hspace="3"> -<font size="-2"><a href="satire/index.de.html">Satire</a></font> -<img src="images/punkt.png" alt="-" width="8" height="8" hspace="3"> -<font size="-2"><a href="fotos/index.de.html">Fotos</a></font> -<img src="images/punkt.png" alt="-" width="8" height="8" hspace="3"> -<font size="-2"><a href="sitemap.de.html">Inhalt</a></font> -</font> -</td> -<td bgcolor="#E0E0E0" background="images/grau.png"> -<img src="images/null.png" alt=")" -width="1" height="1" hspace="3"> -</td> -</tr> -</table> -</p> -</body> -</html> diff --git a/20211014/io-redirection-1.txt b/20211014/io-redirection-1.txt deleted file mode 100644 index 3c7523e321f3aed7649dae9d83bbd791fb213c24..0000000000000000000000000000000000000000 --- a/20211014/io-redirection-1.txt +++ /dev/null @@ -1,11 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211014> echo "Dies ist ein Test." > test-5.txt -cassini/home/peter/bo/2021ws/es/20211014> cat test-5.txt -Dies ist ein Test. -cassini/home/peter/bo/2021ws/es/20211014> echo "Dies ist ein Toast." > test-5.txt -cassini/home/peter/bo/2021ws/es/20211014> cat test-5.txt -Dies ist ein Toast. -cassini/home/peter/bo/2021ws/es/20211014> echo "Ach nee: Dies ist ein Test." >> test-5.txt -cassini/home/peter/bo/2021ws/es/20211014> cat test-5.txt -Dies ist ein Toast. -Ach nee: Dies ist ein Test. -cassini/home/peter/bo/2021ws/es/20211014> diff --git a/20211014/io-redirection-2.txt b/20211014/io-redirection-2.txt deleted file mode 100644 index ff7923a500ca0cd064542a73cc30b52670b40ed7..0000000000000000000000000000000000000000 --- a/20211014/io-redirection-2.txt +++ /dev/null @@ -1,12 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211014> cat >> io-redirection-1.txt -cassini/home/peter/bo/2021ws/es/20211014> echo "Dies ist ein Test." > test-5.txt -cassini/home/peter/bo/2021ws/es/20211014> cat test-5.txt -Dies ist ein Test. -cassini/home/peter/bo/2021ws/es/20211014> echo "Dies ist ein Toast." > test-5.txt -cassini/home/peter/bo/2021ws/es/20211014> cat test-5.txt -Dies ist ein Toast. -cassini/home/peter/bo/2021ws/es/20211014> echo "Ach nee: Dies ist ein Test." >> test-5.txt -cassini/home/peter/bo/2021ws/es/20211014> cat test-5.txt -Dies ist ein Toast. -Ach nee: Dies ist ein Test. -cassini/home/peter/bo/2021ws/es/20211014> \ No newline at end of file diff --git a/20211014/io-redirection-3.txt b/20211014/io-redirection-3.txt deleted file mode 100644 index b2053d1a9357de7faee19e0e267c1b05bee888e5..0000000000000000000000000000000000000000 --- a/20211014/io-redirection-3.txt +++ /dev/null @@ -1,13 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211014> cat io-redirection-2.txt -cassini/home/peter/bo/2021ws/es/20211014> cat >> io-redirection-1.txt -cassini/home/peter/bo/2021ws/es/20211014> echo "Dies ist ein Test." > test-5.txt -cassini/home/peter/bo/2021ws/es/20211014> cat test-5.txt -Dies ist ein Test. -cassini/home/peter/bo/2021ws/es/20211014> echo "Dies ist ein Toast." > test-5.txt -cassini/home/peter/bo/2021ws/es/20211014> cat test-5.txt -Dies ist ein Toast. -cassini/home/peter/bo/2021ws/es/20211014> echo "Ach nee: Dies ist ein Test." >> test-5.txt -cassini/home/peter/bo/2021ws/es/20211014> cat test-5.txt -Dies ist ein Toast. -Ach nee: Dies ist ein Test. -cassini/home/peter/bo/2021ws/es/20211014> diff --git a/20211014/links-1.txt b/20211014/links-1.txt deleted file mode 100644 index f7e33e1eca8fc1f6227b386171247342f0e82de7..0000000000000000000000000000000000000000 --- a/20211014/links-1.txt +++ /dev/null @@ -1,32 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211014> cat test-1.txt -Dies ist ein Test. -cassini/home/peter/bo/2021ws/es/20211014> cat test-2.txt -Dies auch. -cassini/home/peter/bo/2021ws/es/20211014> ln -s test-1.txt test-3.txt -cassini/home/peter/bo/2021ws/es/20211014> ls -l test*.txt --rw-r--r-- 1 peter peter 19 Okt 14 15:43 test-1.txt --rw-r--r-- 1 peter peter 11 Okt 14 15:43 test-2.txt -lrwxrwxrwx 1 peter peter 10 Okt 14 16:20 test-3.txt -> test-1.txt -cassini/home/peter/bo/2021ws/es/20211014> cat test-1.txt -Dies ist ein Test. -cassini/home/peter/bo/2021ws/es/20211014> cat test-3.txt -Dies ist ein Test. -cassini/home/peter/bo/2021ws/es/20211014> cat test-2.txt -Dies auch. -cassini/home/peter/bo/2021ws/es/20211014> echo "Dies ist ein besonders schöner Test." > test-1.txt -cassini/home/peter/bo/2021ws/es/20211014> cat test-3.txt -Dies ist ein besonders schöner Test. -cassini/home/peter/bo/2021ws/es/20211014> rm test-1.txt -cassini/home/peter/bo/2021ws/es/20211014> cat test-3.txt -cat: test-3.txt: Datei oder Verzeichnis nicht gefunden -cassini/home/peter/bo/2021ws/es/20211014> ls -l test-3.txt -lrwxrwxrwx 1 peter peter 10 Okt 14 16:20 test-3.txt -> test-1.txt -cassini/home/peter/bo/2021ws/es/20211014> which vi -/usr/bin/vi -cassini/home/peter/bo/2021ws/es/20211014> ls -l /usr/bin/vi -lrwxrwxrwx 1 root root 20 Dez 22 2012 /usr/bin/vi -> /etc/alternatives/vi -cassini/home/peter/bo/2021ws/es/20211014> ls -l /etc/alternatives/vi -lrwxrwxrwx 1 root root 18 Feb 5 2020 /etc/alternatives/vi -> /usr/bin/vim.basic -cassini/home/peter/bo/2021ws/es/20211014> ls -l /usr/bin/vim.basic --rwxr-xr-x 1 root root 2704360 Jun 15 2019 /usr/bin/vim.basic -cassini/home/peter/bo/2021ws/es/20211014> diff --git a/20211014/links-2.txt b/20211014/links-2.txt deleted file mode 100644 index ad1d8cdc578d52e4d681263ab3d4a9b341f8c446..0000000000000000000000000000000000000000 --- a/20211014/links-2.txt +++ /dev/null @@ -1,11 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211014> echo "Dies ist ein besonders schöner Test." > test-1.txt -cassini/home/peter/bo/2021ws/es/20211014> ln test-1.txt test-4.txt cassini/home/peter/bo/2021ws/es/20211014> ls -l test-*.txt --rw-r--r-- 2 peter peter 38 Okt 14 16:30 test-1.txt --rw-r--r-- 1 peter peter 11 Okt 14 15:43 test-2.txt -lrwxrwxrwx 1 peter peter 10 Okt 14 16:20 test-3.txt -> test-1.txt --rw-r--r-- 2 peter peter 38 Okt 14 16:30 test-4.txt -cassini/home/peter/bo/2021ws/es/20211014> cat test-4.txt -Dies ist ein besonders schöner Test. -cassini/home/peter/bo/2021ws/es/20211014> echo "Dies ist ein Test." > test-1.txt cassini/home/peter/bo/2021ws/es/20211014> cat test-4.txt -Dies ist ein Test. -cassini/home/peter/bo/2021ws/es/20211014> diff --git a/20211014/links-3.txt b/20211014/links-3.txt deleted file mode 100644 index b2255e25128fdbe739531bffd2d7ee1684fc37c9..0000000000000000000000000000000000000000 --- a/20211014/links-3.txt +++ /dev/null @@ -1,8 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211014> rm test-1.txt -cassini/home/peter/bo/2021ws/es/20211014> ls -l test-*.txt --rw-r--r-- 1 peter peter 11 Okt 14 15:43 test-2.txt -lrwxrwxrwx 1 peter peter 10 Okt 14 16:20 test-3.txt -> test-1.txt --rw-r--r-- 1 peter peter 19 Okt 14 16:31 test-4.txt -cassini/home/peter/bo/2021ws/es/20211014> cat test-4.txt -Dies ist ein Test. -cassini/home/peter/bo/2021ws/es/20211014> diff --git a/20211014/ll b/20211014/ll deleted file mode 100755 index 7bcac8bfc897131206cb32ba88d805ed03dca042..0000000000000000000000000000000000000000 --- a/20211014/ll +++ /dev/null @@ -1 +0,0 @@ -ls -l diff --git a/20211014/logo-hochschule-bochum-cvh-text-v2.pdf b/20211014/logo-hochschule-bochum-cvh-text-v2.pdf deleted file mode 120000 index 4aa99b8f81061aca6dcaf43eed2d9efef40555f8..0000000000000000000000000000000000000000 --- a/20211014/logo-hochschule-bochum-cvh-text-v2.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/logo-hochschule-bochum-cvh-text-v2.pdf \ No newline at end of file diff --git a/20211014/logo-hochschule-bochum.pdf b/20211014/logo-hochschule-bochum.pdf deleted file mode 120000 index b6b9491e370e499c9276918182cdb82cb311bcd1..0000000000000000000000000000000000000000 --- a/20211014/logo-hochschule-bochum.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/logo-hochschule-bochum.pdf \ No newline at end of file diff --git a/20211014/pgslides.sty b/20211014/pgslides.sty deleted file mode 120000 index 5be1416f4216f076aa268901f52a15d775e43f64..0000000000000000000000000000000000000000 --- a/20211014/pgslides.sty +++ /dev/null @@ -1 +0,0 @@ -../common/pgslides.sty \ No newline at end of file diff --git a/20211014/pipes-1.txt b/20211014/pipes-1.txt deleted file mode 100644 index a97d28bc04471296cfa677cc8d14adcc6a27b52c..0000000000000000000000000000000000000000 --- a/20211014/pipes-1.txt +++ /dev/null @@ -1,9 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211014> echo "2 + 2" | bc -4 -cassini/home/peter/bo/2021ws/es/20211014> echo "2 + 2" | sed -e 's/2/4/' -4 + 2 -cassini/home/peter/bo/2021ws/es/20211014> echo "2 + 2" | sed -e 's/2/4/g' -4 + 4 -cassini/home/peter/bo/2021ws/es/20211014> echo "2 + 2" | sed -e 's/2/4/g' | bc -8 -cassini/home/peter/bo/2021ws/es/20211014> diff --git a/20211014/script-1.sh b/20211014/script-1.sh deleted file mode 100755 index 7bcac8bfc897131206cb32ba88d805ed03dca042..0000000000000000000000000000000000000000 --- a/20211014/script-1.sh +++ /dev/null @@ -1 +0,0 @@ -ls -l diff --git a/20211014/script-2.sh b/20211014/script-2.sh deleted file mode 100755 index cbdd06a11b722d2cb0549a68bab423d42c246256..0000000000000000000000000000000000000000 --- a/20211014/script-2.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -ls -l diff --git a/20211014/script-3.bc b/20211014/script-3.bc deleted file mode 100755 index 824ea4ec82fb458e0f05cf8de828f5f41f142d49..0000000000000000000000000000000000000000 --- a/20211014/script-3.bc +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/bc - -2 + 2 diff --git a/20211014/script-4.bc b/20211014/script-4.bc deleted file mode 100755 index f1bff564d4c6419879aa4ab5546490249ca21bc5..0000000000000000000000000000000000000000 --- a/20211014/script-4.bc +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/bc - -2 + 2 -quit diff --git a/20211014/script-5.bc b/20211014/script-5.bc deleted file mode 100755 index 5c9b89f5905da3fa328443da6f35241a28da5605..0000000000000000000000000000000000000000 --- a/20211014/script-5.bc +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/bc -q - -2 + 2 -quit diff --git a/20211014/test-1.txt b/20211014/test-1.txt deleted file mode 100644 index d7e5cff47f0303c2d892d3e790e00552759b639c..0000000000000000000000000000000000000000 --- a/20211014/test-1.txt +++ /dev/null @@ -1 +0,0 @@ -Dies ist ein Test. diff --git a/20211014/test-10.txt b/20211014/test-10.txt deleted file mode 100644 index 345e6aef713208c8d50cdea23b85e6ad831f0449..0000000000000000000000000000000000000000 --- a/20211014/test-10.txt +++ /dev/null @@ -1 +0,0 @@ -Test diff --git a/20211014/test-11.c b/20211014/test-11.c deleted file mode 100644 index df820341fa5429bed1b66fd06d7ad4749ce51f8f..0000000000000000000000000000000000000000 --- a/20211014/test-11.c +++ /dev/null @@ -1,74 +0,0 @@ -Hallo? - -Ich schreibe noch was dazwischen. <-- -Und noch was (i: vor dem Punkt). -Und noch was. (a: nach dem Punkt) (A: am Zeilenende anfügen) <-- - -Dies ist ein wunder-wunderschöner Test. - - 1 A alpha - 2 B beta - 3 C gamma - -insgesamt 388 --rw-r--r-- 1 peter peter 2987 Okt 14 16:09 c-1.txt --rw-r--r-- 1 peter peter 1420 Okt 14 16:04 chmod-1.txt --rw-r--r-- 1 peter peter 438 Okt 14 16:08 chmod-2.txt --rw-r--r-- 1 peter peter 162254 Okt 14 10:41 es-20211014.pdf --rw-r--r-- 1 peter peter 23811 Okt 14 10:41 es-20211014.tex --rw-r--r-- 1 peter peter 59 Okt 14 17:45 fehler.txt --rw-r--r-- 1 peter peter 218 Okt 14 16:58 find-1.txt --rw-r--r-- 1 peter peter 249 Okt 14 16:59 find-2.txt --rw-r--r-- 1 peter peter 412 Okt 14 17:01 find-3.txt --rw-r--r-- 1 peter peter 548 Okt 14 17:03 find-4.txt --rw-r--r-- 1 peter peter 864 Okt 14 18:01 for-1.txt --rw-r--r-- 1 peter peter 1004 Okt 14 16:48 grep-1.txt --rw-r--r-- 1 peter peter 1758 Okt 14 16:50 grep-2.txt --rw-r--r-- 1 peter peter 639 Okt 14 16:56 grep-3.txt --rw-r--r-- 1 peter peter 82 Okt 14 18:03 hello-1.c --rw-r--r-- 1 peter peter 81 Okt 14 18:07 hello-2.c --rw-r--r-- 1 peter peter 88 Okt 14 18:11 hello-3.c --rwxr-xr-x 1 peter peter 82 Okt 14 16:05 hello.c --rw-r--r-- 1 peter peter 414 Okt 14 17:57 if-1.txt --rw-r--r-- 1 peter peter 7178 Okt 6 11:10 index.html --rw-r--r-- 1 peter peter 554 Okt 14 17:35 io-redirection-1.txt --rw-r--r-- 1 peter peter 623 Okt 14 17:36 io-redirection-2.txt --rw-r--r-- 1 peter peter 692 Okt 14 17:38 io-redirection-3.txt --rw-r--r-- 1 peter peter 1671 Okt 14 16:26 links-1.txt --rw-r--r-- 1 peter peter 784 Okt 14 16:31 links-2.txt --rw-r--r-- 1 peter peter 403 Okt 14 16:33 links-3.txt --rwxr-xr-x 1 peter peter 6 Okt 14 16:02 ll -lrwxrwxrwx 1 peter peter 48 Okt 7 2018 logo-hochschule-bochum-cvh-text-v2.pdf -> ../common/logo-hochschule-bochum-cvh-text-v2.pdf -lrwxrwxrwx 1 peter peter 36 Okt 5 2016 logo-hochschule-bochum.pdf -> ../common/logo-hochschule-bochum.pdf -lrwxrwxrwx 1 peter peter 22 Okt 5 2016 pgslides.sty -> ../common/pgslides.sty --rw-r--r-- 1 peter peter 344 Okt 14 17:49 pipes-1.txt --rwxr-xr-x 1 peter peter 6 Okt 14 16:11 script-1.sh --rwxr-xr-x 1 peter peter 19 Okt 14 16:11 script-2.sh --rwxr-xr-x 1 peter peter 21 Okt 14 16:13 script-3.bc --rwxr-xr-x 1 peter peter 26 Okt 14 16:14 script-4.bc --rwxr-xr-x 1 peter peter 29 Okt 14 16:16 script-5.bc -drwxr-xr-x 2 peter peter 4096 Okt 14 15:47 test --rw-r--r-- 1 peter peter 5 Okt 14 18:00 test-10.txt --rw-r--r-- 1 peter peter 77 Okt 14 18:46 test-11.c --rw-r--r-- 2 peter peter 19 Okt 14 16:31 test-1.txt --rw-r--r-- 1 peter peter 11 Okt 14 15:43 test-2.txt -lrwxrwxrwx 1 peter peter 10 Okt 14 16:20 test-3.txt -> test-1.txt --rw-r--r-- 2 peter peter 19 Okt 14 16:31 test-4.txt --rw-r--r-- 1 peter peter 48 Okt 14 17:32 test-5.txt --rw-r--r-- 1 peter peter 77 Okt 14 17:42 test-6.txt --rw-r--r-- 1 peter peter 5 Okt 14 18:00 test-7.txt --rw-r--r-- 1 peter peter 5 Okt 14 18:00 test-8.txt --rw-r--r-- 1 peter peter 5 Okt 14 18:00 test-9.txt --rw-r--r-- 1 peter peter 6 Okt 14 17:45 test.bc --rw-r--r-- 1 peter peter 572 Okt 14 18:55 vi-1.txt --rwxr-xr-x 1 peter peter 1110 Dez 22 2020 vic --rwxr-xr-x 1 peter peter 129 Okt 21 2018 vicat --rw-r--r-- 1 peter peter 828 Okt 14 15:42 wildcards-1.txt --rw-r--r-- 1 peter peter 589 Okt 14 15:45 wildcards-2.txt --rw-r--r-- 1 peter peter 352 Okt 14 15:47 wildcards-3.txt --rwxr-xr-x 1 peter peter 1003 Dez 25 2019 xkcd -lrwxrwxrwx 1 peter peter 25 Okt 3 2016 Zeichen_123.pdf -> ../common/Zeichen_123.pdf - - -vi ist schön. -vi ist schön. diff --git a/20211014/test-2.txt b/20211014/test-2.txt deleted file mode 100644 index 2bfbacbaf474dd3743bbc4f7f79409cb6efb2ead..0000000000000000000000000000000000000000 --- a/20211014/test-2.txt +++ /dev/null @@ -1 +0,0 @@ -Dies auch. diff --git a/20211014/test-3.txt b/20211014/test-3.txt deleted file mode 120000 index e512c20fae491086c36ada7e2b276df83e32b1bd..0000000000000000000000000000000000000000 --- a/20211014/test-3.txt +++ /dev/null @@ -1 +0,0 @@ -test-1.txt \ No newline at end of file diff --git a/20211014/test-4.txt b/20211014/test-4.txt deleted file mode 100644 index d7e5cff47f0303c2d892d3e790e00552759b639c..0000000000000000000000000000000000000000 --- a/20211014/test-4.txt +++ /dev/null @@ -1 +0,0 @@ -Dies ist ein Test. diff --git a/20211014/test-5.txt b/20211014/test-5.txt deleted file mode 100644 index c233f5f99e7759ff135c060c524c514b844b4b85..0000000000000000000000000000000000000000 --- a/20211014/test-5.txt +++ /dev/null @@ -1,2 +0,0 @@ -Dies ist ein Toast. -Ach nee: Dies ist ein Test. diff --git a/20211014/test-6.txt b/20211014/test-6.txt deleted file mode 100644 index 7acacd5a0886bc962816aee843046db872c84342..0000000000000000000000000000000000000000 --- a/20211014/test-6.txt +++ /dev/null @@ -1,4 +0,0 @@ -Ich ging im Walde -So für mich hin, -Und nichts zu suchen, -Das war mein Sinn. diff --git a/20211014/test-7.txt b/20211014/test-7.txt deleted file mode 100644 index 345e6aef713208c8d50cdea23b85e6ad831f0449..0000000000000000000000000000000000000000 --- a/20211014/test-7.txt +++ /dev/null @@ -1 +0,0 @@ -Test diff --git a/20211014/test-8.txt b/20211014/test-8.txt deleted file mode 100644 index 345e6aef713208c8d50cdea23b85e6ad831f0449..0000000000000000000000000000000000000000 --- a/20211014/test-8.txt +++ /dev/null @@ -1 +0,0 @@ -Test diff --git a/20211014/test-9.txt b/20211014/test-9.txt deleted file mode 100644 index 345e6aef713208c8d50cdea23b85e6ad831f0449..0000000000000000000000000000000000000000 --- a/20211014/test-9.txt +++ /dev/null @@ -1 +0,0 @@ -Test diff --git a/20211014/test.bc b/20211014/test.bc deleted file mode 100644 index a922b775b5315bf2bc04d96cbdaba8d32c911404..0000000000000000000000000000000000000000 --- a/20211014/test.bc +++ /dev/null @@ -1 +0,0 @@ -2 + 2 diff --git a/20211014/vi-1.txt b/20211014/vi-1.txt deleted file mode 100644 index 3969e54f2c1fe946c0f4b21c14ad7ee7e5158a11..0000000000000000000000000000000000000000 --- a/20211014/vi-1.txt +++ /dev/null @@ -1,35 +0,0 @@ -Aufruf: vi <Dateiname> -Notausgang: ESC : q ! ENTER - -In den Insert-Modus gehen: i ("insert") - a ("append") -... und am Zeilenende anfügen: A -In den Insert-Modus gehen, neue Zeile eröffnen: o ("open") -Insert-Modus verlassen: ESC -Speichern: : w ENTER (erscheint unten links) - -Alternative zu den Pfeiltasten: h j k l - -Letzte Aktion wiederholen: . - -Text markieren: v -... zeilenweise: V -... rechteckig: Ctrl+V - -In die Zwischenablage kopieren: y -Ausschneiden: d -Zeile löschen: dd -Wort löschen: dw -Undo: u -Redo: Strg+R -Zwischenablage links einfügen: P -Zwischenablage rechts einfügen: p - -Shell-Befehl ausführen: :! <Befehl> ENTER -Shell-Befehl ausführen, Ausgabe hier einfügen: :r! <Befehl> ENTER - -Aktion mehrfach ausführen: <Zahl> <vi-Kommando> -Beispiele: - - 100mal schreieben: "vi ist schön." 100ovi ist schön. ESC - - 98 Zeilen löschen: 98dd - - 2 Wörter löschen: 2dw diff --git a/20211014/vic b/20211014/vic deleted file mode 100755 index 063daa1366b11b0914121af554892a2e2c68183f..0000000000000000000000000000000000000000 --- a/20211014/vic +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/bash - -debug=false - -if [ $# -gt 0 ]; then - $debug && echo "parameters = $@" - shift $(( $# - 1 )) - file_template="$1" -else - file_template=$(ls -rt *.c *.cpp *.sh *.py *.tex *.diff 2>/dev/null | tail -1) -fi - -$debug && echo "file_template = $file_template" - -file_extension=$(echo $file_template | sed -e 's/.*\.\(.*$\)/\1/') -file_base=$(echo $file_template | sed -e 's/\(.*\)\..*$/\1/') - -$debug && echo "file_extension = $file_extension" -$debug && echo "file_base = $file_base" - -file_number=$(echo $file_base | sed -e 's/^.*-\([0-9]*$\)/\1/') -file_stem=$(echo $file_base | sed -e 's/^\(.*\)-[0-9]*$/\1/') - -$debug && echo "file_number = $file_number" -$debug && echo "file_number = $file_stem" - -while [ -e "$file_stem-$file_number.$file_extension" ]; do - file_number=$((file_number + 1)) -done -new_file_name="$file_stem-$file_number.$file_extension" - -$debug && echo "new_file_name = $new_file_name" && read junk - -cp -pi "$file_template" "$new_file_name" -#$EDITOR "$new_file_name" -/usr/bin/vim -X -c 'set sw=2' -c 'set expandtab' -c 'set ai' -c 'set nowrap' \ - "$new_file_name" -clear -cat "$new_file_name" diff --git a/20211014/vicat b/20211014/vicat deleted file mode 100755 index c3565c648e9320f871f275b135cef86d4c918ebd..0000000000000000000000000000000000000000 --- a/20211014/vicat +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -/usr/bin/vim -X -c 'set sw=2' -c 'set expandtab' -c 'set ai' -c 'set nowrap' "$@" -clear -shift $(( $# - 1 )) -cat "$1" diff --git a/20211014/wildcards-1.txt b/20211014/wildcards-1.txt deleted file mode 100644 index 2f253b9576279d71959587512268b1de79d0375b..0000000000000000000000000000000000000000 --- a/20211014/wildcards-1.txt +++ /dev/null @@ -1,16 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211014> echo "Dies ist ein Test." > test-1.txt -cassini/home/peter/bo/2021ws/es/20211014> echo "Dies auch." > test-2.txt -cassini/home/peter/bo/2021ws/es/20211014> ls -l test*.txt --rw-r--r-- 1 peter peter 19 Okt 14 15:40 test-1.txt --rw-r--r-- 1 peter peter 11 Okt 14 15:41 test-2.txt -cassini/home/peter/bo/2021ws/es/20211014> mkdir test -cassini/home/peter/bo/2021ws/es/20211014> cd test -cassini/home/peter/bo/2021ws/es/20211014/test> mv ../test*.txt -cassini/home/peter/bo/2021ws/es/20211014/test> ls -l -insgesamt 0 -cassini/home/peter/bo/2021ws/es/20211014/test> cd .. -cassini/home/peter/bo/2021ws/es/20211014> ls -l test*.txt --rw-r--r-- 1 peter peter 19 Okt 14 15:40 test-2.txt -cassini/home/peter/bo/2021ws/es/20211014> cat test-2.txt -Dies ist ein Test. -cassini/home/peter/bo/2021ws/es/20211014> diff --git a/20211014/wildcards-2.txt b/20211014/wildcards-2.txt deleted file mode 100644 index 3cc2ff29275c1aaa042162f9c1187341467c631b..0000000000000000000000000000000000000000 --- a/20211014/wildcards-2.txt +++ /dev/null @@ -1,11 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211014> echo "Dies ist ein Test." > test-1.txt -cassini/home/peter/bo/2021ws/es/20211014> echo "Dies auch." > test-2.txt -cassini/home/peter/bo/2021ws/es/20211014> cd test -cassini/home/peter/bo/2021ws/es/20211014/test> mv -i ../test*.txt -mv: '../test-2.txt' überschreiben? n -cassini/home/peter/bo/2021ws/es/20211014/test> mv ../test*.txt . -cassini/home/peter/bo/2021ws/es/20211014/test> ls -l -insgesamt 8 --rw-r--r-- 1 peter peter 19 Okt 14 15:43 test-1.txt --rw-r--r-- 1 peter peter 11 Okt 14 15:43 test-2.txt -cassini/home/peter/bo/2021ws/es/20211014/test> diff --git a/20211014/wildcards-3.txt b/20211014/wildcards-3.txt deleted file mode 100644 index c781087c3e8da320fcdf28122ba46b7b941d3d2e..0000000000000000000000000000000000000000 --- a/20211014/wildcards-3.txt +++ /dev/null @@ -1,6 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211014/test> echo mv ../*.txt . -mv ../test-1.txt ../test-2.txt ../wildcards-1.txt ../wildcards-2.txt . -cassini/home/peter/bo/2021ws/es/20211014/test> echo mv ../test*.txt . -mv ../test-1.txt ../test-2.txt . -cassini/home/peter/bo/2021ws/es/20211014/test> mv ../test*.txt . -cassini/home/peter/bo/2021ws/es/20211014/test> diff --git a/20211014/xkcd b/20211014/xkcd deleted file mode 100755 index 9964c95684e445d54fa4d26b6eb096257bed767c..0000000000000000000000000000000000000000 --- a/20211014/xkcd +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/sh - -set -e - -prefix="${1:-xkcd}" -suffix="$2" -url=$(xsel) - -filebase="$prefix-$(echo $url | sed -e 's/^.*\///')" -filename="$filebase$suffix" -orig_filename=$(echo $filename | sed -e 's/\.png$/-orig.png/') -if [ -e "$orig_filename" ]; then - echo -n "$orig_filename exists. Press ENTER to proceed, ^C to abort. " - read junk -fi - -if [ -e "$filename" ]; then - mv "$filename" "$orig_filename" -fi - -if [ "$prefix" = "xkcd" ]; then - url2=$(echo $url | sed -e 's/\.png$/_2x.png/') - filename2=$(echo $filename | sed -e 's/\.png$/_2x.png/') - if [ -e "$filename2" ]; then - echo -n "$filename2 exists. Press ENTER to proceed, ^C to abort. " - read junk - fi - wget "$url" -O "$filename" - wget "$url2" -O "$filename2" - ls -l "$filename" "$filename2" - test -s "$filename2" || rm "$filename2" -else - wget "$url" -O "$filename" - ls -l "$filename" -fi - -if [ -e "$orig_filename" ]; then - if diff "$orig_filename" "$filename"; then - echo "$filename unchanged" - mv "$orig_filename" "$filename" - fi -fi diff --git a/20211021/DSC_0001.JPG b/20211021/DSC_0001.JPG deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/20211021/DSC_0002.JPG b/20211021/DSC_0002.JPG deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/20211021/DSC_0003.JPG b/20211021/DSC_0003.JPG deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/20211021/DSC_0004.JPG b/20211021/DSC_0004.JPG deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/20211021/DSC_0005.JPG b/20211021/DSC_0005.JPG deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/20211021/DSC_0006.JPG b/20211021/DSC_0006.JPG deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/20211021/DSC_0007.JPG b/20211021/DSC_0007.JPG deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/20211021/DSC_0008.JPG b/20211021/DSC_0008.JPG deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/20211021/DSC_0009.JPG b/20211021/DSC_0009.JPG deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/20211021/DSC_0010.JPG b/20211021/DSC_0010.JPG deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/20211021/DSC_0011.JPG b/20211021/DSC_0011.JPG deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/20211021/DSC_0012.JPG b/20211021/DSC_0012.JPG deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/20211021/DSC_0013.JPG b/20211021/DSC_0013.JPG deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/20211021/DSC_0014.JPG b/20211021/DSC_0014.JPG deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/20211021/DSC_0015.JPG b/20211021/DSC_0015.JPG deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/20211021/DSC_0016.JPG b/20211021/DSC_0016.JPG deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/20211021/DSC_0017.JPG b/20211021/DSC_0017.JPG deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/20211021/DSC_0018.JPG b/20211021/DSC_0018.JPG deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/20211021/DSC_0019.JPG b/20211021/DSC_0019.JPG deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/20211021/DSC_0020.JPG b/20211021/DSC_0020.JPG deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/20211021/X-1.txt b/20211021/X-1.txt deleted file mode 100644 index 40ec99f2131d67041f454de3c002cdca9329af05..0000000000000000000000000000000000000000 --- a/20211021/X-1.txt +++ /dev/null @@ -1,63 +0,0 @@ -cassini/home/peter/bo/2020ws/es/20201117> xwininfo -root -children - -xwininfo: Window id: 0x394 (the root window) (has no name) - - Root window id: 0x394 (the root window) (has no name) - Parent window id: 0x0 (none) - 33 children: - 0x2003cf (has no name): () 149x218+1086+862 +1086+862 - 0x200260 (has no name): () 94x20+0+0 +0+0 - 0x1200153 (has no name): () 80x144+0+0 +0+0 - 0x1200147 "Xpdf: Print": ("printDialog_popup" "Xpdf") 5x5+0+0 +0+0 - 0x1200146 "Xpdf: Find": ("findDialog_popup" "Xpdf") 5x5+0+0 +0+0 - 0x1200138 "Xpdf: About": ("aboutDialog_popup" "Xpdf") 450x300+0+0 +0+0 - 0x1200124 (has no name): () 5x5+0+0 +0+0 - 0x1200123 "Xpdf: Password": ("passwordDialog_popup" "Xpdf") 5x5+0+0 +0+0 - 0x1200002 (has no name): () 961x622+959+128 +959+128 - 0x1200001 "xpdf.real": ("xpdf.real" "Xpdf") 961x622+957+128 +957+128 - 0x20026a (has no name): () 1132x1036+0+0 +0+0 - 0x200438 (has no name): () 961x622+959+128 +959+128 - 0x20042e (has no name): () 480x360+1440+720 +1440+720 - 0x20042a (has no name): () 640x640+0+0 +0+0 - 0x20031f (has no name): () 484x28+0+1044 +0+1044 - 0x200266 (has no name): () 120x120+1800+0 +1800+0 - 0x2002d5 (has no name): () 484x28+1580+0 +1580+0 - 0x10009ba "Pan Icon": ("display-im6.q16" "Display-im6.q16") 96x72+1824+1008 +1824+1008 - 0x10008c4 "Magnify 3X": ("display-im6.q16" "Display-im6.q16") 256x256+1664+720 +1664+720 - 0x10007c5 (has no name): ("display-im6.q16" "Display-im6.q16") 1x1+960+960 +960+960 - 0x10006cb (has no name): ("display-im6.q16" "Display-im6.q16") 1x1+1488+756 +1488+756 - 0x10005d1 "Commands": ("display-im6.q16" "Display-im6.q16") 134x410+1281+670 +1281+670 - 0x10001f3 (has no name): ("display-im6.q16" "Display-im6.q16") 96x72+960+960 +960+960 - 0x2003fb (has no name): () 212x149+791+931 +791+931 - 0x2003d0 (has no name): () 328x295+346+785 +346+785 - 0x3bf (has no name): () 100x100+0+0 +0+0 - 0x1800001 (has no name): () 10x10+-100+-100 +-100+-100 - 0xa00001 "screensaver": ("xscreensaver" "XScreenSaver") 1920x1080+0+0 +0+0 - 0x200265 (has no name): () 1920x2+0+1078 +0+1078 - 0x200264 (has no name): () 2x1080+1918+0 +1918+0 - 0x200263 (has no name): () 2x1080+0+0 +0+0 - 0x200262 (has no name): () 1920x2+0+0 +0+0 - 0x20014c "FVWM": ("fvwm" "FVWM") 10x10+-10+-10 +-10+-10 - -cassini/home/peter/bo/2020ws/es/20201117> xwininfo -root -children | grep -i xpdf - 0x1200147 "Xpdf: Print": ("printDialog_popup" "Xpdf") 5x5+0+0 +0+0 - 0x1200146 "Xpdf: Find": ("findDialog_popup" "Xpdf") 5x5+0+0 +0+0 - 0x1200138 "Xpdf: About": ("aboutDialog_popup" "Xpdf") 450x300+0+0 +0+0 - 0x1200123 "Xpdf: Password": ("passwordDialog_popup" "Xpdf") 5x5+0+0 +0+0 - 0x1200001 "xpdf.real": ("xpdf.real" "Xpdf") 961x622+957+128 +957+128 -cassini/home/peter/bo/2020ws/es/20201117> xwininfo -root -children | grep xpdf - 0x1200001 "xpdf.real": ("xpdf.real" "Xpdf") 961x622+957+128 +957+128 -cassini/home/peter/bo/2020ws/es/20201117> line=$(xwininfo -root -children | grep xpdf) -cassini/home/peter/bo/2020ws/es/20201117> echo $line -0x1200001 "xpdf.real": ("xpdf.real" "Xpdf") 961x622+957+128 +957+128 -cassini/home/peter/bo/2020ws/es/20201117> echo "echo $line" -echo 0x1200001 "xpdf.real": ("xpdf.real" "Xpdf") 961x622+957+128 +957+128 -cassini/home/peter/bo/2020ws/es/20201117> echo $line -0x1200001 "xpdf.real": ("xpdf.real" "Xpdf") 961x622+957+128 +957+128 -cassini/home/peter/bo/2020ws/es/20201117> echo $line | cut -d " " -f 1 -0x1200001 -cassini/home/peter/bo/2020ws/es/20201117> echo $line | cut -d " " -f 2 -"xpdf.real": -cassini/home/peter/bo/2020ws/es/20201117> echo $line | cut -d " " -f 3 -("xpdf.real" -cassini/home/peter/bo/2020ws/es/20201117> diff --git a/20211021/a b/20211021/a deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/20211021/es-20211021.pdf b/20211021/es-20211021.pdf deleted file mode 100644 index 12f2f21c0be5a3656d13e2ee8f63502be9f05d70..0000000000000000000000000000000000000000 Binary files a/20211021/es-20211021.pdf and /dev/null differ diff --git a/20211021/es-20211021.tex b/20211021/es-20211021.tex deleted file mode 100644 index 66c5c318cb2b1bd23e27907f5367e74da83e8a79..0000000000000000000000000000000000000000 --- a/20211021/es-20211021.tex +++ /dev/null @@ -1,808 +0,0 @@ -% es-20211021.pdf - Lecture Slides on Embedded Systems -% Copyright (C) 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Peter Gerwinski -% -% This document is free software: you can redistribute it and/or -% modify it either under the terms of the Creative Commons -% Attribution-ShareAlike 3.0 License, or under the terms of the -% GNU General Public License as published by the Free Software -% Foundation, either version 3 of the License, or (at your option) -% any later version. -% -% This document is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with this document. If not, see <http://www.gnu.org/licenses/>. -% -% You should have received a copy of the Creative Commons -% Attribution-ShareAlike 3.0 Unported License along with this -% document. If not, see <http://creativecommons.org/licenses/>. - -% README: GNU Screen - -\documentclass[10pt,t]{beamer} - -\usepackage{pgslides} -\usepackage{rotating} -\usepackage{tikz} - -\newcommand{\underconstruction}{% - \begin{picture}(0,0) - \put(9,0.9){\makebox(0,0)[b]{\includegraphics[width=1.5cm]{Zeichen_123.pdf}}} - \put(9,0.6){\makebox(0,0)[t]{\shortstack{Änderungen\\vorbehalten}}} - \end{picture}} - -\title{Eingebettete Systeme} -\author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski} -\date{21.\ Oktober 2021} - -\newcommand{\ItwoC}{I\raisebox{0.5ex}{\footnotesize 2}C} - -\begin{document} - -\maketitleframe - -\nosectionnonumber{\inserttitle} - -\begin{frame} - - \shownosectionnonumber - - \begin{itemize} - \item[\textbf{1}] \textbf{Einführung} - \hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/es}}}% - \item[\textbf{2}] \textbf{Einführung in Unix} - \begin{itemize} - \item[2.1] Grundkonzepte - \item[2.2] Die Kommandozeile: Grundlagen - \color{medgreen} - \item[2.3] Dateisysteme - \item[2.4] Ein- und Ausgabeströme - \item[2.5] Pipes - \item[2.6] Verzweigungen und Schleifen - \item[2.7] Skript-Programmierung - \color{red} - \item[2.8] GNU screen - \end{itemize} - \item[\textbf{3}] \textbf{TCP/IP in der Praxis} -% \begin{itemize} -% \color{medgreen} -% \item[3.0] Vorbereitungen -% \item[3.1] IP-Adressen -% \item[3.2] MAC-Adressen -% \item[3.3] TCP- und UDP-Ports -% \item[3.4] TCP-Protokolle -% \item[3.5] Routing -% \color{orange} -% \item[3.6] Netzwerkanalyse -% \item[3.7] SSH -% \item[3.8] X11 -%% \color{red} -%% \item[3.9] Programmierung -% \end{itemize} - \item[\textbf{4}] \textbf{Bus-Systeme} - \vspace*{-\smallskipamount} - \item[\textbf{\dots}] - \end{itemize} - -% \vspace*{-1cm plus 1filll} - -% \underconstruction - -\end{frame} - -\setcounter{section}{1} -\section{Einführung in Unix} -\setcounter{subsection}{2} -\subsection{Dateisysteme} - -\begin{frame}[fragile] - - \showsubsection - - \begin{itemize} - \item - \newterm{Symbolische Verknüpfungen -- symbolic links} - - \smallskip - - Verweis auf die eigentliche Datei\\ - \textarrow\ Wenn man die Datei löscht, zeigt der Link ins Leere. - - \smallskip - - Verknüpfung anlegen: \lstinline[style=cmd]{ln -s datei link}\\ - (Richtung: wie bei \lstinline[style=cmd]{cp}) - - \smallskip - - Beispiel: \lstinline[style=cmd]{ln -s ../common/GNU-GPL-3 gpl.txt} - \pause - \medskip - \item - \newterm{Harte Verknüpfungen -- hard links} - - \smallskip - - Dieselben Daten auf dem Datenträger\\ - sind unter mehreren Namen verfügbar.\\ - \textarrow\ Wenn man einen löscht, sind die Daten noch da. - - \smallskip - - \begingroup - \begin{lstlisting}[style=terminal,gobble=10,xleftmargin=-3pt] - cassini/home/peter/bo/2019ws/es/20191002> ¡ls -l¿ - ... - -rw-r--r-- 1 peter peter 1202 Okt 2 13:35 shell-06.txt - drwxr-xr-x 2 peter peter 4096 Okt 2 13:16 test - \end{lstlisting} - \endgroup - \begin{picture}(0,0.5) - \color{red} - \put(2.31,0){\tikz{\draw[-latex,red](0,0)--(0,0.5);}} - \put(0,-0.1){\makebox(0,0)[tl]{Anzahl der ("`harten"') Links - auf diese Datei / dieses Verzeichnis}} - \end{picture} - \end{itemize} - -\end{frame} - -\begin{frame}[fragile] - - \showsubsection - - \begin{itemize} - \item - \lstinline[style=cmd]{grep}: Dateien durchsuchen - \end{itemize} - \begin{lstlisting}[style=terminal,xleftmargin=-3pt] - cassini/home/peter/bo/2019ws/es/20191002> ¡grep gcc *.txt¿ - shell-03.txt: cassini/...> gcc -Wall -O hello.c -o hello - \end{lstlisting} - -\end{frame} - -\begin{frame}[fragile] - - \showsubsection - - \begin{itemize} - \item - \lstinline[style=cmd]{find}: Dateien anhand ihrer Eigenschaften suchen - \end{itemize} - -% \small - \begin{lstlisting}[style=terminal] - $ ¡find . -name "*.txt"¿ - ./shell-06.txt - ./shell-03.txt - ./shell-05.txt - ./test.txt - ./test/test.txt - ... - $ ¡find . -name "*.txt" -perm /u+x¿ - ./test2.txt - $ ¡find . -name "*.txt" -perm /u+x -exec ls -l {} \;¿ - -rwxr-xr-x 1 peter peter 6 Okt 2 13:43 ./test2.txt - \end{lstlisting} - -\end{frame} - -\subsection{Ein- und Ausgabeströme} - -\begin{frame}[fragile] - - \showsubsection - - \begin{itemize} - \item - Standard-Ausgabe in Datei umleiten - \end{itemize} - \begin{lstlisting}[style=terminal] - $ ¡echo "Dies ist ein Test." > test.txt¿ - $ ¡cat test.txt¿ - Dies ist ein Test. - \end{lstlisting} - -% \pause - \smallskip - - \begin{itemize} - \item - Standard-Ausgabe an Datei anhängen - \end{itemize} - \begin{lstlisting}[style=terminal] - $ ¡echo "Dies ist noch ein Test." >> test.txt¿ - $ ¡cat test.txt¿ - Dies ist ein Test. - Dies ist noch ein Test. - \end{lstlisting} - -\end{frame} - -\begin{frame}[fragile] - - \showsubsection - - \begin{itemize} - \item - Fehler-Ausgabe in Datei umleiten - \end{itemize} - \begin{lstlisting}[style=terminal] - $ ¡cat gibtsnicht.txt > fehler.txt¿ - cat: gibtsnicht.txt: No such file or directory - $ ¡cat fehler.txt¿ - $ ¡cat gibtsnicht.txt 2> fehler.txt¿ - $ ¡cat fehler.txt¿ - cat: gibtsnicht.txt: No such file or directory - \end{lstlisting} - -\end{frame} - -\begin{frame}[fragile] - - \showsubsection - - \begin{itemize} - \item - Standard-Eingabe aus Datei lesen - \end{itemize} - \begin{lstlisting}[style=terminal] - $ ¡bc¿ - bc 1.06.95 - Copyright [...] 2006 Free Software Foundation, Inc. - This is free software with ABSOLUTELY NO WARRANTY. - For details type `warranty'. - ¡2 + 2¿ - 4 - $ ¡echo "2 + 2" > test.bc¿ - $ ¡bc < test.bc¿ - 4 - \end{lstlisting} - -\end{frame} - -\subsection{Pipes} - -\begin{frame}[fragile] - - \showsubsection - - Standard-Ausgabe von Programm A\\ - wird zu Standard-Eingabe von Programm B - - \smallskip - - \begin{lstlisting}[style=terminal] - $ ¡echo "2 + 2" | bc¿ - 4 - \end{lstlisting} - - \smallskip - - \textarrow\ sehr mächtiger "`Baukasten"' - -\end{frame} - -\begin{frame}[fragile] - - \showsubsection - - \begin{itemize} - \item - \lstinline[style=cmd]{sed}: \emph{stream editor}\\ - Suchen und Ersetzen (und noch viel mehr) - \end{itemize} - \begin{lstlisting}[style=terminal] - $ ¡echo "Schlimmer geht nimmer." | sed -e 's/nim/im/g'¿ - Schlimmer geht immer. - \end{lstlisting} - -\end{frame} - -\begin{frame}[fragile] - - \showsubsection - - \begin{itemize} - \item - \lstinline[style=cmd]{grep}: Standard-Eingabe durchsuchen - \end{itemize} - \begin{lstlisting}[style=terminal] - $ ¡ls | grep slides¿ - pgslides.sty - $ ¡ls *.pdf | grep -v logo¿ - es-20191002.pdf - Zeichen_123.pdf - $ ¡ls -l $(ls *.pdf | grep -v logo)¿ - -rw-r--r-- 1 ... 4619138 Okt 8 21:28 es-20191002.pdf - lrwxrwxrwx 1 ... 25 Okt 3 2016 Zeichen_123.pdf -> ... - \end{lstlisting} - -\end{frame} - -\begin{frame}[fragile] - - \showsubsection - - \begin{itemize} - \item - Standard-Ausgabe im Befehl verwenden - \end{itemize} - \begin{lstlisting}[style=terminal] - $ ¡grep -l "|" *.txt¿ - regex-1.txt - regex-2.txt - regex-3.txt - regex-4.txt - shell-skripts-11.txt - X-1.txt - $ ¡vi $(grep -l "|" *.txt)¿ - \end{lstlisting} - -\end{frame} - -\subsection{Verzweigungen und Schleifen} - -\begin{frame}[fragile] - - \showsubsection - - \begin{lstlisting}[style=terminal] - $ ¡if grep Blubb test.txt; then echo "gefunden"; \ - else echo "nicht gefunden"; fi¿ - nicht gefunden - $ ¡for x in foo bar baz; do echo $x; done¿ - foo - bar - baz - \end{lstlisting} - -\end{frame} - -\subsection{Skript-Programmierung} - -\begin{frame}[fragile] - - \showsubsection - - \textbf{Aufgabe:} Programmieren Sie ein Unix-Shell-Skript,\\ - das etwas Nützliches macht. \mbox{:--)} - - \bigskip - - Beispiel: CSV-Import-Interface - \begin{itemize} - \item - CSV-Datei: "`comma-separated values"'\\ - Tabelle, durch Kommata getrennt - \item - Viele Tabellenkalkulationsprogramme können CSV-Dateien exportieren. - \item - Beispiel-Datei: \file{test.csv} (siehe auch: \file{test.ods}) - \item - Beispiel-Anwendung: Ermitteln der durchschnittlichen Note - \item - Beispiel-Anwendung für Datenbank-Experten:\\ - Speichere die Spalten 1 und 2 in einer Datenbank. - \item - Hinweis 1: \lstinline[style=cmd]{cat X-1.txt} - \item - Hinweis 2: \lstinline[style=cmd]{man cut} - \end{itemize} - -\end{frame} - -\subsection{GNU screen} - -\begin{frame} - - \showsubsection - - \begin{itemize} - \item - Text-Bildschirm und Eingabegeräte über's Netz - \item - \lstinline[style=cmd]{Ctrl+A c}: neues Fenster (create) - \item - \lstinline[style=cmd]{Ctrl+A Leertaste}: nächstes Fenster - \item - \lstinline[style=cmd]{Ctrl+A 3}: Fenster Nr.\ 3 - \item - \lstinline[style=cmd]{Ctrl+A ESC}: hochscrollen, suchen, markieren (copy) - \item - \lstinline[style=cmd]{Ctrl+A ]}: einfügen (paste) - \item - \lstinline[style=cmd]{Ctrl+A d}: von \file{screen} ablösen (detach) - \item - \lstinline[style=cmd]{screen -x}: an laufenden \file{screen} andocken - \medskip - \item - ähnliche Funktionalität für Grafik: \file{VNC}, \file{x2go} - \end{itemize} - -\end{frame} - -\nosectionnonumber{\inserttitle} - -\begin{frame} - - \shownosectionnonumber - - \begin{itemize} - \item[\textbf{1}] \textbf{Einführung} - \hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/es}}}% - \item[\textbf{2}] \textbf{Einführung in Unix} - \begin{itemize} - \item[2.1] Grundkonzepte - \item[2.2] Die Kommandozeile: Grundlagen - \item[2.3] Dateisysteme - \item[2.4] Ein- und Ausgabeströme - \item[2.5] Pipes - \item[2.6] Verzweigungen und Schleifen - \color{medgreen} - \item[2.7] Skript-Programmierung - \item[2.8] GNU screen - \end{itemize} - \item[\textbf{3}] \textbf{TCP/IP in der Praxis} -% \begin{itemize} -% \color{red} -% \item[3.0] Vorbereitungen -% \item[3.1] IP-Adressen -% \item[3.2] MAC-Adressen -% \item[3.3] TCP- und UDP-Ports -% \item[3.4] TCP-Protokolle -% \color{orange} -% \item[3.5] Routing -% \item[3.6] Netzwerkanalyse -% \item[3.7] SSH -% \color{black} -% \item[3.8] X11 -% \item[3.9] Programmierung -% \end{itemize} - \item[\textbf{4}] \textbf{Bus-Systeme} - \vspace*{-\smallskipamount} - \item[\textbf{\dots}] - \end{itemize} - -\end{frame} - -\iffalse - -\begin{frame} - - \shownosectionnonumber - - \begin{itemize} - \item[\textbf{1}] \textbf{Einführung} - \hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/es}}}% - \item[\textbf{2}] \textbf{Einführung in Unix} -% \begin{itemize} -% \item[2.1] Grundkonzepte -% \item[2.2] Die Kommandozeile: Grundlagen -% \item[2.3] Dateisysteme -% \item[2.4] Ein- und Ausgabeströme -% \item[2.5] Pipes -% \color{medgreen} -% \item[2.6] Verzweigungen und Schleifen -% \item[2.7] Skript-Programmierung -% \color{red} -% \item[2.8] GNU screen -% \end{itemize} - \item[\textbf{3}] \textbf{TCP/IP in der Praxis} - \begin{itemize} - \color{red} - \item[3.0] Vorbereitungen - \item[3.1] IP-Adressen - \item[3.2] MAC-Adressen - \item[3.3] TCP- und UDP-Ports - \item[3.4] TCP-Protokolle - \color{orange} - \item[3.5] Routing - \item[3.6] Netzwerkanalyse - \item[3.7] SSH - \color{black} - \item[3.8] X11 - \item[3.9] Programmierung - \end{itemize} - \item[\textbf{4}] \textbf{Bus-Systeme} - \vspace*{-\smallskipamount} - \item[\textbf{\dots}] - \end{itemize} - -\end{frame} - -\section{TCP/IP in der Praxis} -\setcounter{subsection}{-1} -\subsection{Vorbereitungen\quad {\color{red}(Nicht auf allen Rechnern ausführen!)}} - -\begin{frame}[fragile] - - \showsection - - {\large\textbf{Literatur:}}\\[\smallskipamount] - \url{http://www.peter.gerwinski.de/download/net-2013ss.tar.gz} - - \bigskip\bigskip - - \showsubsection - - \begin{itemize} - \item - Verkabelung: Twisted-Pair-Kabel, Switches - \item - Automatismen abschalten - \end{itemize} - - \medskip - - \begin{lstlisting}[style=terminal] - # service network-manager stop - \end{lstlisting} - -\end{frame} - -\subsection{IP-Adressen} - -\begin{frame}[fragile] - - \showsubsection - - \begin{itemize} - \item \lstinline[style=cmd]{ip addr} (Linux)\\ - \lstinline[style=cmd]{ifconfig} (Unix allgemein)\\ - \lstinline[style=cmd]{ipconfig} (MS Windows) - \item \lstinline[style=cmd]{ip addr add <Netz>} -% \\ -% Beispiel: -% \lstinline[style=cmd]{ip addr add 192.168.2.197/24}\\ -% \includegraphics[width=7cm]{../20171026/photo-20171026-142620.jpg} - \item \lstinline[style=cmd]{ip link} - \item \lstinline[style=cmd]{ping <IP-Adresse>} - \end{itemize} - - \medskip - - \begin{lstlisting}[style=terminal] - # ifconfig - lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 - inet 127.0.0.1 netmask 255.0.0.0 - inet6 ::1 prefixlen 128 scopeid 0x10<host> - [...] - - wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 - inet 192.168.42.101 netmask 255.255.255.0 - broadcast 192.168.42.255 - ether be:3f:ca:aa:7e:51 txqueuelen 1000 (Ethernet) - [...] - \end{lstlisting} - -\end{frame} - -\begin{frame} - - \showsubsection - - IPv4-Adressen: - \begin{itemize} - \item - 32 Bit - \item - dezimal, 4 Gruppen zu je 8 Bit (0--255), durch Punkte getrennt - \end{itemize} - - \medskip - - IPv6-Adressen: - \begin{itemize} - \item - 128 Bit - \item - hexadezimal, 8 Gruppen zu je 4 Hex-Ziffern, durch Doppelpunkte getrennt - \item - Führende Nullen dürfen weggelassen werden. - \item - Zwei Dopppelpunkte bedeuten: Mit Nullen auffüllen. - \item - Literatur und Beispiel: \url{https://de.wikipedia.org/wiki/IPv6} - \end{itemize} - -\end{frame} - -\subsection{MAC-Adressen} - -\begin{frame} - - \showsubsection - - MAC = Media Access Control - - \smallskip - - MAC-Adresse = Hardware-Adresse = Ethernet-Adresse - - \begin{itemize} - \item \lstinline[style=cmd]{ip neig}\\ - \lstinline[style=cmd]{arp} - \end{itemize} - -\end{frame} - -\subsection{TCP- und UDP-Ports} - -\begin{frame} - - \showsubsection - - \begin{itemize} - \item - \lstinline[style=cmd]{nc <IP> <Port>}\\ - Verbindung zu Programm $\langle$Port$\rangle$ - auf Rechner $\langle$IP$\rangle$ aufnehmen - \item - \lstinline[style=cmd]{nc -l <Port>} - oder - \lstinline[style=cmd]{nc -p <Port> -l}\\ - auf eingehende Verbindungen warten ("`lauschen"') - \medskip - \item - TCP-Ports: Verbindungskonzept, Netzwerk prüft - \item - UDP-Ports: einzelne Pakete, Anwendung muß selbst prüfen - \item - ICMP: keine Ports, nur Rechner:\\ - Erreichbarkeit, Eigenschaften der Übertragung - \end{itemize} - - \medskip - - \begin{center} - \renewcommand{\arraystretch}{1.2} - \begin{tabular}{|l|}\hline - Anwendung: HTTP, SMTP, \dots \\\hline - Transport: TCP-/UDP-Ports, ICMP \\\hline - Internet: IP-Adresse \\\hline - Netzwerkzugang: Hardware-/MAC-Adresse \\\hline - \end{tabular} - \end{center} - -\end{frame} - -\subsection{TCP-Protokolle} - -\begin{frame} - - \showsubsection - - \begin{itemize} - \item - \textbf{HTTP}\\ - \lstinline[style=cmd]{GET / HTTP/1.1}\\ - \lstinline[style=cmd]{Host: www.hs-bochum.de}\\ - (Leerzeile) -% \begin{onlyenv}<2> -% \par\medskip -% URL: Schema://Benutzer:Passwort@Rechner:port/Pfad?Query\#Fragment -% \end{onlyenv} - \begin{onlyenv}<2-> - \medskip - \item - \textbf{SMTP}\\ - \lstinline[style=cmd]{HELO cassini}\\ - \lstinline[style=cmd]{MAIL FROM: <example@example.com>}\\ - \lstinline[style=cmd]{RCPT TO: <beispiel@example.de>}\\ - (E-Mail-Header -- Teil der Nutzdaten)\\ - \lstinline[style=cmd]{From: Eddie Example <example@example.com>}\\ - \lstinline[style=cmd]{To: Bert Beispiel <beispiel@example.de>}\\ - \lstinline[style=cmd]{Subject: Hello, world!}\\ - (Leerzeile)\\ - \lstinline[style=cmd]{Hi, there!}\\ - \lstinline[style=cmd]{.} - \medskip - \item - Protokolle "`mal eben"' selbst schreiben: - \lstinline[style=cmd]{nc -c} oder \file{inetd} - \end{onlyenv} - \end{itemize} - -\end{frame} - -\subsection{Routing} - -\begin{frame}[fragile] - - \showsubsection - - \begin{itemize} - \item - \lstinline[style=cmd]{ip route} (Linux)\\ - \lstinline[style=cmd]{route} (MS-Windows, Unix)\\ - \lstinline[style=cmd]{netstat -nr} (MacOS) -% \\[\medskipamount] -% \includegraphics[width=11cm]{../20171026/photo-20171026-162455.jpg} - \end{itemize} - - \medskip - - \begin{lstlisting}[style=terminal] - # route -n - Kernel-IP-Routentabelle - Ziel Router Genmask [...] Iface - 0.0.0.0 192.168.42.1 0.0.0.0 [...] wlan0 - 169.254.0.0 0.0.0.0 255.255.0.0 [...] wlan0 - 192.168.42.0 0.0.0.0 255.255.255.0 [...] wlan0 - \end{lstlisting} - - \bigskip - - Netzmaske:\\ - Wenn nach Und-Verknüpfung mit IP-Adresse gleich, - \textarrow\ im gleichen Netz - - \medskip - - \lstinline[style=terminal]{255.255.240.0} ist dasselbe wie - \lstinline[style=terminal]{/20}\\ - (20 Bit sind 1; die restlichen 12 Bit sind 0) - -\end{frame} - -\subsection{Netzwerkanalyse} - -\begin{frame} - - \showsubsection - - \begin{itemize} - \item - \lstinline[style=cmd]{tcpdump} - \item - \lstinline[style=cmd]{wireshark} - \item - \lstinline[style=cmd]{ettercap} - \end{itemize} - -\end{frame} - -\subsection{SSH} - -\begin{frame} - - \showsubsection - - \begin{itemize} - \item - \lstinline[style=cmd]{SSH <Rechner>} - \item - \lstinline[style=cmd]{-C}: Komprimierung - \item - \lstinline[style=cmd]{-L}: lokalen Port auf Remote-Port umleiten - \item - \lstinline[style=cmd]{-R}: Remote-Port auf lokalen Port umleiten - \end{itemize} - -\end{frame} - -\subsection{X11} - -\begin{frame} - - \showsubsection - - \begin{itemize} - \item - Grafik-Bildschirm und Eingabegeräte über's Netz - \item - \lstinline[style=cmd]{DISPLAY}-Variable: X-Server: Rechner und Bildschirm - \item - \lstinline[style=cmd]{ssh -X}: X11-Forwarding - \end{itemize} - -\end{frame} - -\fi - -\end{document} diff --git a/20211021/internet-1.txt b/20211021/internet-1.txt deleted file mode 100644 index 4d303282391d3ad4a3ba68e261c217acbc59cc11..0000000000000000000000000000000000000000 --- a/20211021/internet-1.txt +++ /dev/null @@ -1,52 +0,0 @@ -cassini/home/peter> nc -C 88.99.194.201 80 -GET / -<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> -<html><head> -<title>302 Found</title> -</head><body> -<h1>Found</h1> -<p>The document has moved <a href="https://www.cvh-server.de/">here</a>.</p> -<hr> -<address>Apache/2.4.48 (Debian) Server at 0.cvh-server.de Port 80</address> -</body></html> -cassini/home/peter> host www.gerwinski.de -www.gerwinski.de is an alias for https.gerwinski.de. -https.gerwinski.de is an alias for mx3.gerwinski.de. -mx3.gerwinski.de has address 88.198.170.59 -mx3.gerwinski.de has IPv6 address 2a01:4f8:192:4405::170:59 -cassini/home/peter> nc -C 88.198.170.59 80 -GET / -<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN"> -<html> - <head> - <title>ngc224.gerwinski.de</title> - </head> - <body background="ngc224.jpg" bgcolor="#000000" text="#CFCFCF" - link="#7F7FFF" alink="#CFCFFF" vlink="#FF5FFF"> - <h1>ngc224.gerwinski.de - der Server</h1> - <p>Benannt nach der Andromeda-Galaxie - M31 - NGC224 - <p align="center"><img src="null.png" alt="" width="1" height="1" vspace="360"> - <p><font size="-2"><a href="http://www.peter.gerwinski.de">Peter Gerwinski</a><br> - <a href="http://www.noao.edu/image_gallery/html/im0424.html">Bild: - Bill Schoening, Vanessa Harvey/REU program/NOAO/AURA/NSF</a></font> - </body> -</html> -cassini/home/peter> nc -C 88.198.170.59 25 -220 mx3.gerwinski.de ESMTP Exim 4.92 Thu, 21 Oct 2021 18:52:21 +0200 -HELO cassini -250 mx3.gerwinski.de Hello cassini [195.37.15.82] -MAIL FROM: <bill@microsoft.com> -250 OK -RCPT TO: <peter@gerwinski.de> -250 Accepted -DATA -354 Enter message, ending with "." on a line by itself -Subject: Hello! B-) - -Hello from Microsoft. - -b -. -250 OK id=1mdbJT-0000A5-U0 -QUIT -221 mx3.gerwinski.de closing connection -cassini/home/peter> diff --git a/20211021/internet-2.txt b/20211021/internet-2.txt deleted file mode 100644 index e23007b96a2a18b24a0867715615cd57b1c921a9..0000000000000000000000000000000000000000 --- a/20211021/internet-2.txt +++ /dev/null @@ -1,20 +0,0 @@ -cassini/home/peter> nc -C 88.198.170.59 25 -220 mx3.gerwinski.de ESMTP Exim 4.92 Thu, 21 Oct 2021 18:59:26 +0200 -HELO cassini -250 mx3.gerwinski.de Hello cassini [195.37.15.82] -MAIL FROM: <jobs@apple.com> -250 OK -RCPT TO: <peter@gerwinski.de> -250 Accepted -DATA -354 Enter message, ending with "." on a line by itself -From: Steve <jobs@apple.com> -To: Elon <musk@tesla.com> -Subject: Did you receive my invitation? - -Hi, did you receive my invitation? Please send me $1,000,000,000 for the expenses. Thx, S. -. -250 OK id=1mdbQc-0000al-VZ -QUIT -221 mx3.gerwinski.de closing connection -cassini/home/peter> diff --git a/20211021/internet-3.txt b/20211021/internet-3.txt deleted file mode 100644 index 4220f3f567b9706169e2710be8abe2032530e2d5..0000000000000000000000000000000000000000 --- a/20211021/internet-3.txt +++ /dev/null @@ -1,22 +0,0 @@ -From jobs@apple.com Thu Oct 21 19:01:05 2021 | -Return-path: <jobs@apple.com> | -Envelope-to: peter@phoenix.intern | -Delivery-date: Thu, 21 Oct 2021 19:01:05 +0200 | -Received: from localhost ([127.0.0.1] helo=m31.gerwinski.de) | - by phoenix.intern with esmtp (Exim 4.92) | - (envelope-from <jobs@apple.com>) | - id 1mdbRB-0006az-PP | - for peter@phoenix.intern; Thu, 21 Oct 2021 19:01:05 +0200 | -Received: from [195.37.15.82] (helo=cassini) | - by m31.gerwinski.de with smtp (Exim 4.92) | - (envelope-from <jobs@apple.com>) | - id 1mdbQc-0000al-VZ | - for peter@gerwinski.de; Thu, 21 Oct 2021 19:01:47 +0200 | -From: Steve <jobs@apple.com> | -To: Elon <musk@tesla.com> | -Subject: Did you receive my invitation? | -Message-Id: <E1mdbRB-0006az-PP@phoenix.intern> | -Date: Thu, 21 Oct 2021 19:01:05 +0200 | - | -Hi, did you receive my invitation? Please send me $1,000,000,000 for the expenses. | -+Thx, S. | diff --git a/20211021/logo-hochschule-bochum-cvh-text-v2.pdf b/20211021/logo-hochschule-bochum-cvh-text-v2.pdf deleted file mode 120000 index 4aa99b8f81061aca6dcaf43eed2d9efef40555f8..0000000000000000000000000000000000000000 --- a/20211021/logo-hochschule-bochum-cvh-text-v2.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/logo-hochschule-bochum-cvh-text-v2.pdf \ No newline at end of file diff --git a/20211021/logo-hochschule-bochum.pdf b/20211021/logo-hochschule-bochum.pdf deleted file mode 120000 index b6b9491e370e499c9276918182cdb82cb311bcd1..0000000000000000000000000000000000000000 --- a/20211021/logo-hochschule-bochum.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/logo-hochschule-bochum.pdf \ No newline at end of file diff --git a/20211021/pgslides.sty b/20211021/pgslides.sty deleted file mode 120000 index 5be1416f4216f076aa268901f52a15d775e43f64..0000000000000000000000000000000000000000 --- a/20211021/pgslides.sty +++ /dev/null @@ -1 +0,0 @@ -../common/pgslides.sty \ No newline at end of file diff --git a/20211021/sed-1.txt b/20211021/sed-1.txt deleted file mode 100644 index 354968de8b6dff3939be2668cdba3a8833761492..0000000000000000000000000000000000000000 --- a/20211021/sed-1.txt +++ /dev/null @@ -1,6 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211021> sed -e 's/2/Hallo/g' < zusammen-1.txt -a 1 -b Hallo - 3 - 4 -cassini/home/peter/bo/2021ws/es/20211021> diff --git a/20211021/sed-2.txt b/20211021/sed-2.txt deleted file mode 100644 index 8cc3016af651c0074a31612f81dedbf527075f26..0000000000000000000000000000000000000000 --- a/20211021/sed-2.txt +++ /dev/null @@ -1,10 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211021> echo "Dies ist ein Test." | tr iet ooo -Doos oso oon Toso. -cassini/home/peter/bo/2021ws/es/20211021> echo "Dies ist ein Test." | tr iet ooo | tr o x -Dxxs xsx xxn Txsx. -cassini/home/peter/bo/2021ws/es/20211021> echo "Dies ist ein Test." | tr iet ooo | tr o x | sed -e 's/x/Test/' -DTestxs xsx xxn Txsx. -cassini/home/peter/bo/2021ws/es/20211021> echo "Dies ist ein Test." | tr iet ooo | tr o x | sed -e 's/x/Test/g' -DTestTests TestsTest TestTestn TTestsTest. -cassini/home/peter/bo/2021ws/es/20211021> - diff --git a/20211021/sed-3.txt b/20211021/sed-3.txt deleted file mode 100644 index 1d395aefaa062dc803ad1c2fef58a113582e699b..0000000000000000000000000000000000000000 --- a/20211021/sed-3.txt +++ /dev/null @@ -1,12 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211014> echo hello-1.c -hello-1.c -cassini/home/peter/bo/2021ws/es/20211014> echo hello-1.c | grep '\..*$' -hello-1.c -cassini/home/peter/bo/2021ws/es/20211014> echo hello-1.c | grep -o '\..*$' -.c -cassini/home/peter/bo/2021ws/es/20211014> echo hello-1.c | grep -o '\..*$' | cut -b 2- -c -cassini/home/peter/bo/2021ws/es/20211014> echo hello-1.c | grep -o '\..*$' | cut -d '.' -f 2 -c -cassini/home/peter/bo/2021ws/es/20211014> echo hello-1.c | grep -o '\..*$' | sed -e 's/^.*\.//'c -cassini/home/peter/bo/2021ws/es/20211014> diff --git a/20211021/seq-1.txt b/20211021/seq-1.txt deleted file mode 100644 index ae2331cb186af058289c2d76cdc23b0198e1a14a..0000000000000000000000000000000000000000 --- a/20211021/seq-1.txt +++ /dev/null @@ -1,18 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211014> for x in 1 2 3 4 5 6 7 8 9 10; do echo -n "$x "; sleep 0.5; done; echo -1 2 3 4 5 6 7 8 9 10 -cassini/home/peter/bo/2021ws/es/20211014> seq 10 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -cassini/home/peter/bo/2021ws/es/20211014> for x in $(seq 10); do echo -n "$x "; sleep 0.5; done; echo -1 2 3 4 5 6 7 8 9 10 -cassini/home/peter/bo/2021ws/es/20211014> for (( x = 1; x <= 10; x++ )); do echo -n "$x "; sleep 0.5; done; echo -1 2 3 4 5 6 7 8 9 10 -cassini/home/peter/bo/2021ws/es/20211014> diff --git a/20211021/seq-2.txt b/20211021/seq-2.txt deleted file mode 100644 index 0ac9ec1df468316c181a809665f2d9242824cb66..0000000000000000000000000000000000000000 --- a/20211021/seq-2.txt +++ /dev/null @@ -1,24 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211014> seq -f "%x" 10 seq: das Format „%x“ enthält die unbekannte Direktive %x -cassini/home/peter/bo/2021ws/es/20211014> seq -f "%04g" 10 -0001 -0002 -0003 -0004 -0005 -0006 -0007 -0008 -0009 -0010 -cassini/home/peter/bo/2021ws/es/20211014> seq -f "%4g" 10 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 -cassini/home/peter/bo/2021ws/es/20211014> diff --git a/20211021/seq-3.txt b/20211021/seq-3.txt deleted file mode 100644 index c0c16fc11e7de01acd5541efc9b3b00909fef811..0000000000000000000000000000000000000000 --- a/20211021/seq-3.txt +++ /dev/null @@ -1,18 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211021> seq -f "%04g" 6 10 | sed -e 's/\(.*\)/DSC_\1.JPG/' -DSC_0006.JPG -DSC_0007.JPG -DSC_0008.JPG -DSC_0009.JPG -DSC_0010.JPG -cassini/home/peter/bo/2021ws/es/20211021> ls -l $(seq -f "%04g" 6 10 | sed -e 's/\(.*\)/DSC_\1.JPG/') --rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0006.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0007.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0008.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0009.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0010.JPG -cassini/home/peter/bo/2021ws/es/20211021> seq -f "DSC_%04g.JPG" 6 10 DSC_0006.JPG -DSC_0007.JPG -DSC_0008.JPG -DSC_0009.JPG -DSC_0010.JPG -cassini/home/peter/bo/2021ws/es/20211021> diff --git a/20211021/seq-4.txt b/20211021/seq-4.txt deleted file mode 100644 index ac2e6adb1635abf7b8d3c5103ef88e59d2cf4897..0000000000000000000000000000000000000000 --- a/20211021/seq-4.txt +++ /dev/null @@ -1,55 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211021> ls -l *.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0001.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0002.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0003.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0004.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0005.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0006.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0007.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0008.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0009.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0010.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0011.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0012.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0013.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0014.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0015.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0016.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0017.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0018.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0019.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0020.JPG -cassini/home/peter/bo/2021ws/es/20211021> ls -l DSC_000[6-9].JPG DSC_00[1-9][0-9].JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0006.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0007.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0008.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0009.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0010.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0011.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0012.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0013.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0014.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0015.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0016.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0017.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0018.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0019.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0020.JPG -cassini/home/peter/bo/2021ws/es/20211021> ls -l DSC_000[6-9].JPG DSC_00[1-9][0-9].JPG DSC_0[1-9][0-9][0-9].JPG -ls: Zugriff auf 'DSC_0[1-9][0-9][0-9].JPG' nicht möglich: Datei oder Verzeichnis nicht gefunden --rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0006.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0007.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0008.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0009.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0010.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0011.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0012.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0013.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0014.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0015.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0016.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0017.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0018.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0019.JPG --rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0020.JPG -cassini/home/peter/bo/2021ws/es/20211021> diff --git a/20211021/tr-1.txt b/20211021/tr-1.txt deleted file mode 100644 index bc2480e9d45494fd73e3671c55f9afd90971409a..0000000000000000000000000000000000000000 --- a/20211021/tr-1.txt +++ /dev/null @@ -1,9 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211021> echo "Dies ist ein Test." | tr i o -Does ost eon Test. -cassini/home/peter/bo/2021ws/es/20211021> echo "Dies ist ein Test." | tr ie oo -Doos ost oon Tost. -cassini/home/peter/bo/2021ws/es/20211021> echo "Dies ist ein Test." | tr iet ooo -Doos oso oon Toso. -cassini/home/peter/bo/2021ws/es/20211021> echo "Dies ist ein Test." | tr iets ooox -Doox oxo oon Toxo. -cassini/home/peter/bo/2021ws/es/20211021> diff --git a/20211021/tr-2.txt b/20211021/tr-2.txt deleted file mode 100644 index be256d3ebd252f8b8d465a947d05e36f2bd7eab3..0000000000000000000000000000000000000000 --- a/20211021/tr-2.txt +++ /dev/null @@ -1,36 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211021> cat zusammen-1.txt -a 1 -b 2 - 3 - 4 -cassini/home/peter/bo/2021ws/es/20211021> tr [:alnum:] x < zusammen-1.txt -x x -x x - x - x -cassini/home/peter/bo/2021ws/es/20211021> touch a -cassini/home/peter/bo/2021ws/es/20211021> tr [:alnum:] x < zusammen-1.txt -x 1 -b 2 - 3 - 4 -cassini/home/peter/bo/2021ws/es/20211021> ls -l -insgesamt 248 --rw-r--r-- 1 peter peter 0 Okt 21 16:59 a --rw-r--r-- 1 peter peter 9031 Okt 21 16:16 es-20211021.aux --rw-r--r-- 1 peter peter 51093 Okt 21 16:16 es-20211021.log --rw-r--r-- 1 peter peter 5269 Okt 21 16:16 es-20211021.nav --rw-r--r-- 1 peter peter 1110 Okt 21 16:16 es-20211021.out --rw-r--r-- 1 peter peter 130217 Okt 21 16:16 es-20211021.pdf --rw-r--r-- 1 peter peter 0 Okt 21 16:16 es-20211021.snm --rw-r--r-- 1 peter peter 19734 Okt 21 16:16 es-20211021.tex --rw-r--r-- 1 peter peter 1065 Okt 21 16:16 es-20211021.toc --rw-r--r-- 1 peter peter 982 Okt 21 16:16 es-20211021.vrb -lrwxrwxrwx 1 peter peter 48 Okt 7 2018 logo-hochschule-bochum-cvh-text-v2.pdf -> ../common/logo-hochschule-bochum-cvh-text-v2.pdf -lrwxrwxrwx 1 peter peter 36 Okt 5 2016 logo-hochschule-bochum.pdf -> ../common/logo-hochschule-bochum.pdf -lrwxrwxrwx 1 peter peter 22 Okt 5 2016 pgslides.sty -> ../common/pgslides.sty --rw-r--r-- 1 peter peter 1758 Okt 21 16:04 SCRATCH --rw-r--r-- 1 peter peter 438 Okt 21 16:54 tr-1.txt --rw-r--r-- 1 peter peter 28 Okt 21 16:44 zusammen-1.txt --rw-r--r-- 1 peter peter 14 Okt 21 16:48 zusammen-2.txt -cassini/home/peter/bo/2021ws/es/20211021> diff --git a/20211021/tr-3.txt b/20211021/tr-3.txt deleted file mode 100644 index 07b75cc255c994cacf23ce346c29222b192800fb..0000000000000000000000000000000000000000 --- a/20211021/tr-3.txt +++ /dev/null @@ -1,6 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211021> tr "[:alnum:]" x < zusammen-1.txt -x x -x x - x - x -cassini/home/peter/bo/2021ws/es/20211021> diff --git a/20211021/tr-4.txt b/20211021/tr-4.txt deleted file mode 100644 index be6f3117b889d5ad534e456217da1cdecad2c029..0000000000000000000000000000000000000000 --- a/20211021/tr-4.txt +++ /dev/null @@ -1,3 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211021> echo tr [:alnum:] x < zusammen-1.txt -tr a x -cassini/home/peter/bo/2021ws/es/20211021> diff --git a/20211021/tr-5.txt b/20211021/tr-5.txt deleted file mode 100644 index 4a9cede3021ace2ef38b8e0216a150ca22d334bb..0000000000000000000000000000000000000000 --- a/20211021/tr-5.txt +++ /dev/null @@ -1,8 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211021> echo tr '[:alnum:]' x < zusammen-1.txt -tr [:alnum:] x -cassini/home/peter/bo/2021ws/es/20211021> tr '[:alnum:]' x < zusammen-1.txt -x x -x x - x - x -cassini/home/peter/bo/2021ws/es/20211021> diff --git a/20211021/zusammen-1.txt b/20211021/zusammen-1.txt deleted file mode 100644 index 75785a327fd72fd35d450678970870a67c6465d0..0000000000000000000000000000000000000000 --- a/20211021/zusammen-1.txt +++ /dev/null @@ -1,4 +0,0 @@ -a 1 -b 2 - 3 - 4 diff --git a/20211021/zusammen-2.txt b/20211021/zusammen-2.txt deleted file mode 100644 index 4c36f01563d3a6f901a26d2e7dcbc8e356142a9d..0000000000000000000000000000000000000000 --- a/20211021/zusammen-2.txt +++ /dev/null @@ -1,4 +0,0 @@ -a 1 -b 2 - 3 - 4 diff --git a/20211028/es-20211028.pdf b/20211028/es-20211028.pdf deleted file mode 100644 index 96cb07db1dec85380e40c3b75ab563e2190ac2d3..0000000000000000000000000000000000000000 Binary files a/20211028/es-20211028.pdf and /dev/null differ diff --git a/20211028/es-20211028.tex b/20211028/es-20211028.tex deleted file mode 100644 index 22fc664c013112b0b4faaad8960c5c6149bb2db5..0000000000000000000000000000000000000000 --- a/20211028/es-20211028.tex +++ /dev/null @@ -1,631 +0,0 @@ -% es-20211021.pdf - Lecture Slides on Embedded Systems -% Copyright (C) 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Peter Gerwinski -% -% This document is free software: you can redistribute it and/or -% modify it either under the terms of the Creative Commons -% Attribution-ShareAlike 3.0 License, or under the terms of the -% GNU General Public License as published by the Free Software -% Foundation, either version 3 of the License, or (at your option) -% any later version. -% -% This document is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with this document. If not, see <http://www.gnu.org/licenses/>. -% -% You should have received a copy of the Creative Commons -% Attribution-ShareAlike 3.0 Unported License along with this -% document. If not, see <http://creativecommons.org/licenses/>. - -% README: TCP/IP in der Praxis - -\documentclass[10pt,t]{beamer} - -\usepackage{pgslides} -\usepackage{rotating} -\usepackage{tikz} - -\newcommand{\underconstruction}{% - \begin{picture}(0,0) - \put(9,0.9){\makebox(0,0)[b]{\includegraphics[width=1.5cm]{Zeichen_123.pdf}}} - \put(9,0.6){\makebox(0,0)[t]{\shortstack{Änderungen\\vorbehalten}}} - \end{picture}} - -\title{Eingebettete Systeme} -\author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski} -\date{28.\ Oktober 2021} - -\newcommand{\ItwoC}{I\raisebox{0.5ex}{\footnotesize 2}C} - -\begin{document} - -\maketitleframe - -\nosectionnonumber{\inserttitle} - -\begin{frame} - - \shownosectionnonumber - - \begin{itemize} - \item[\textbf{1}] \textbf{Einführung} - \hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/es}}}% - \item[\textbf{2}] \textbf{Einführung in Unix} - \begin{itemize} - \item[2.1] Grundkonzepte - \item[2.2] Die Kommandozeile: Grundlagen - \item[2.3] Dateisysteme - \item[2.4] Ein- und Ausgabeströme - \item[2.5] Pipes - \item[2.6] Verzweigungen und Schleifen - \item[2.7] Skript-Programmierung - \color{medgreen} - \item[2.8] GNU screen - \end{itemize} - \item[\textbf{3}] \textbf{TCP/IP in der Praxis} -% \begin{itemize} -% \color{medgreen} -% \item[3.0] Vorbereitungen -% \item[3.1] IP-Adressen -% \item[3.2] MAC-Adressen -% \item[3.3] TCP- und UDP-Ports -% \item[3.4] TCP-Protokolle -% \item[3.5] Routing -% \item[3.6] Netzwerkanalyse -% \item[3.7] SSH -% \item[3.8] X11 -%% \color{red} -%% \item[3.9] Programmierung -% \end{itemize} - \item[\textbf{4}] \textbf{Bus-Systeme} - \vspace*{-\smallskipamount} - \item[\textbf{\dots}] - \end{itemize} - -% \vspace*{-1cm plus 1filll} - -% \underconstruction - -\end{frame} - -\setcounter{section}{1} -\section{Einführung in Unix} -\setcounter{subsection}{4} -\subsection{Pipes} - -\begin{frame}[fragile] - - \showsubsection - - Standard-Ausgabe von Programm A\\ - wird zu Standard-Eingabe von Programm B - - \smallskip - - \begin{lstlisting}[style=terminal] - $ ¡echo "2 + 2" | bc¿ - 4 - \end{lstlisting} - - \smallskip - - \textarrow\ sehr mächtiger "`Baukasten"' - -\end{frame} - -\begin{frame}[fragile] - - \showsubsection - - \begin{itemize} - \item - \lstinline[style=cmd]{sed}: \emph{stream editor}\\ - Suchen und Ersetzen (und noch viel mehr) - \end{itemize} - \begin{lstlisting}[style=terminal] - $ ¡echo "Schlimmer geht nimmer." | sed -e 's/nim/im/g'¿ - Schlimmer geht immer. - \end{lstlisting} - -\end{frame} - -\begin{frame}[fragile] - - \showsubsection - - \begin{itemize} - \item - \lstinline[style=cmd]{grep}: Standard-Eingabe durchsuchen - \end{itemize} - \begin{lstlisting}[style=terminal] - $ ¡ls | grep slides¿ - pgslides.sty - $ ¡ls *.pdf | grep -v logo¿ - es-20191002.pdf - Zeichen_123.pdf - $ ¡ls -l $(ls *.pdf | grep -v logo)¿ - -rw-r--r-- 1 ... 4619138 Okt 8 21:28 es-20191002.pdf - lrwxrwxrwx 1 ... 25 Okt 3 2016 Zeichen_123.pdf -> ... - \end{lstlisting} - -\end{frame} - -\begin{frame}[fragile] - - \showsubsection - - \begin{itemize} - \item - Standard-Ausgabe im Befehl verwenden - \end{itemize} - \begin{lstlisting}[style=terminal] - $ ¡grep -l "|" *.txt¿ - regex-1.txt - regex-2.txt - regex-3.txt - regex-4.txt - shell-skripts-11.txt - X-1.txt - $ ¡vi $(grep -l "|" *.txt)¿ - \end{lstlisting} - -\end{frame} - -\subsection{Verzweigungen und Schleifen} - -\begin{frame}[fragile] - - \showsubsection - - \begin{lstlisting}[style=terminal] - $ ¡if grep Blubb test.txt; then echo "gefunden"; \ - else echo "nicht gefunden"; fi¿ - nicht gefunden - $ ¡for x in foo bar baz; do echo $x; done¿ - foo - bar - baz - \end{lstlisting} - -\end{frame} - -\subsection{Skript-Programmierung} - -\begin{frame}[fragile] - - \showsubsection - - \textbf{Aufgabe:} Programmieren Sie ein Unix-Shell-Skript,\\ - das etwas Nützliches macht. \mbox{:--)} - - \bigskip - - Beispiel: CSV-Import-Interface - \begin{itemize} - \item - CSV-Datei: "`comma-separated values"'\\ - Tabelle, durch Kommata getrennt - \item - Viele Tabellenkalkulationsprogramme können CSV-Dateien exportieren. - \item - Beispiel-Datei: \file{test.csv} (siehe auch: \file{test.ods}) - \item - Beispiel-Anwendung: Ermitteln der durchschnittlichen Note - \item - Beispiel-Anwendung für Datenbank-Experten:\\ - Speichere die Spalten 1 und 2 in einer Datenbank. - \item - Hinweis 1: \lstinline[style=cmd]{cat X-1.txt} - \item - Hinweis 2: \lstinline[style=cmd]{man cut} - \end{itemize} - -\end{frame} - -\subsection{GNU screen} - -\begin{frame} - - \showsubsection - - \begin{itemize} - \item - Text-Bildschirm und Eingabegeräte über's Netz - \item - \lstinline[style=cmd]{Ctrl+A c}: neues Fenster (create) - \item - \lstinline[style=cmd]{Ctrl+A Leertaste}: nächstes Fenster - \item - \lstinline[style=cmd]{Ctrl+A 3}: Fenster Nr.\ 3 - \item - \lstinline[style=cmd]{Ctrl+A ESC}: hochscrollen, suchen, markieren (copy) - \item - \lstinline[style=cmd]{Ctrl+A ]}: einfügen (paste) - \item - \lstinline[style=cmd]{Ctrl+A d}: von \file{screen} ablösen (detach) - \item - \lstinline[style=cmd]{screen -x}: an laufenden \file{screen} andocken - \medskip - \item - ähnliche Funktionalität für Grafik: \file{VNC}, \file{x2go} - \end{itemize} - -\end{frame} - -\nosectionnonumber{\inserttitle} - -\begin{frame} - - \shownosectionnonumber - - \begin{itemize} - \item[\textbf{1}] \textbf{Einführung} - \hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/es}}}% - \item[\textbf{2}] \textbf{Einführung in Unix} - \begin{itemize} - \item[2.1] Grundkonzepte - \item[2.2] Die Kommandozeile: Grundlagen - \item[2.3] Dateisysteme - \item[2.4] Ein- und Ausgabeströme - \item[2.5] Pipes - \item[2.6] Verzweigungen und Schleifen - \color{medgreen} - \item[2.7] Skript-Programmierung - \item[2.8] GNU screen - \end{itemize} - \item[\textbf{3}] \textbf{TCP/IP in der Praxis} -% \begin{itemize} -% \color{red} -% \item[3.0] Vorbereitungen -% \item[3.1] IP-Adressen -% \item[3.2] MAC-Adressen -% \item[3.3] TCP- und UDP-Ports -% \item[3.4] TCP-Protokolle -% \item[3.5] Routing -% \item[3.6] Netzwerkanalyse -% \item[3.7] SSH -% \color{black} -% \item[3.8] X11 -% \item[3.9] Programmierung -% \end{itemize} - \item[\textbf{4}] \textbf{Bus-Systeme} - \vspace*{-\smallskipamount} - \item[\textbf{\dots}] - \end{itemize} - -\end{frame} - -\begin{frame} - - \shownosectionnonumber - - \begin{itemize} - \item[\textbf{1}] \textbf{Einführung} - \hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/es}}}% - \item[\textbf{2}] \textbf{Einführung in Unix} -% \begin{itemize} -% \item[2.1] Grundkonzepte -% \item[2.2] Die Kommandozeile: Grundlagen -% \item[2.3] Dateisysteme -% \item[2.4] Ein- und Ausgabeströme -% \item[2.5] Pipes -% \color{medgreen} -% \item[2.6] Verzweigungen und Schleifen -% \item[2.7] Skript-Programmierung -% \color{red} -% \item[2.8] GNU screen -% \end{itemize} - \item[\textbf{3}] \textbf{TCP/IP in der Praxis} - \begin{itemize} - \color{red} - \item[3.0] Vorbereitungen - \item[3.1] IP-Adressen - \item[3.2] MAC-Adressen - \item[3.3] TCP- und UDP-Ports - \item[3.4] TCP-Protokolle - \item[3.5] Routing - \color{black} - \item[3.6] Netzwerkanalyse - \item[3.7] SSH - \item[3.8] X11 - \item[3.9] Programmierung - \end{itemize} - \item[\textbf{4}] \textbf{Bus-Systeme} - \vspace*{-\smallskipamount} - \item[\textbf{\dots}] - \end{itemize} - -\end{frame} - -\section{TCP/IP in der Praxis} -\setcounter{subsection}{-1} -\subsection{Vorbereitungen\quad {\color{red}(Nicht auf allen Rechnern ausführen!)}} - -\begin{frame}[fragile] - - \showsection - - {\large\textbf{Literatur:}}\\[\smallskipamount] - \url{http://www.peter.gerwinski.de/download/net-2013ss.tar.gz} - - \bigskip\bigskip - - \showsubsection - - \begin{itemize} - \item - Verkabelung: Twisted-Pair-Kabel, Switches - \item - Automatismen abschalten - \end{itemize} - - \medskip - - \begin{lstlisting}[style=terminal] - # service network-manager stop - \end{lstlisting} - -\end{frame} - -\subsection{IP-Adressen} - -\begin{frame}[fragile] - - \showsubsection - - \begin{itemize} - \item \lstinline[style=cmd]{ip addr} (Linux)\\ - \lstinline[style=cmd]{ifconfig} (Unix allgemein)\\ - \lstinline[style=cmd]{ipconfig} (MS Windows) - \item \lstinline[style=cmd]{ip addr add <Netz>} -% \\ -% Beispiel: -% \lstinline[style=cmd]{ip addr add 192.168.2.197/24}\\ -% \includegraphics[width=7cm]{../20171026/photo-20171026-142620.jpg} - \item \lstinline[style=cmd]{ip link} - \item \lstinline[style=cmd]{ping <IP-Adresse>} - \end{itemize} - - \medskip - - \begin{lstlisting}[style=terminal] - # ifconfig - lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 - inet 127.0.0.1 netmask 255.0.0.0 - inet6 ::1 prefixlen 128 scopeid 0x10<host> - [...] - - wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 - inet 192.168.42.101 netmask 255.255.255.0 - broadcast 192.168.42.255 - ether be:3f:ca:aa:7e:51 txqueuelen 1000 (Ethernet) - [...] - \end{lstlisting} - -\end{frame} - -\begin{frame} - - \showsubsection - - IPv4-Adressen: - \begin{itemize} - \item - 32 Bit - \item - dezimal, 4 Gruppen zu je 8 Bit (0--255), durch Punkte getrennt - \end{itemize} - - \medskip - - IPv6-Adressen: - \begin{itemize} - \item - 128 Bit - \item - hexadezimal, 8 Gruppen zu je 4 Hex-Ziffern, durch Doppelpunkte getrennt - \item - Führende Nullen dürfen weggelassen werden. - \item - Zwei Dopppelpunkte bedeuten: Mit Nullen auffüllen. - \item - Literatur und Beispiel: \url{https://de.wikipedia.org/wiki/IPv6} - \end{itemize} - -\end{frame} - -\subsection{MAC-Adressen} - -\begin{frame} - - \showsubsection - - MAC = Media Access Control - - \smallskip - - MAC-Adresse = Hardware-Adresse = Ethernet-Adresse - - \begin{itemize} - \item \lstinline[style=cmd]{ip neig}\\ - \lstinline[style=cmd]{arp} - \end{itemize} - -\end{frame} - -\subsection{TCP- und UDP-Ports} - -\begin{frame} - - \showsubsection - - \begin{itemize} - \item - \lstinline[style=cmd]{nc <IP> <Port>}\\ - Verbindung zu Programm $\langle$Port$\rangle$ - auf Rechner $\langle$IP$\rangle$ aufnehmen - \item - \lstinline[style=cmd]{nc -l <Port>} - oder - \lstinline[style=cmd]{nc -p <Port> -l}\\ - auf eingehende Verbindungen warten ("`lauschen"') - \medskip - \item - TCP-Ports: Verbindungskonzept, Netzwerk prüft - \item - UDP-Ports: einzelne Pakete, Anwendung muß selbst prüfen - \item - ICMP: keine Ports, nur Rechner:\\ - Erreichbarkeit, Eigenschaften der Übertragung - \end{itemize} - - \medskip - - \begin{center} - \renewcommand{\arraystretch}{1.2} - \begin{tabular}{|l|}\hline - Anwendung: HTTP, SMTP, \dots \\\hline - Transport: TCP-/UDP-Ports, ICMP \\\hline - Internet: IP-Adresse \\\hline - Netzwerkzugang: Hardware-/MAC-Adresse \\\hline - \end{tabular} - \end{center} - -\end{frame} - -\subsection{TCP-Protokolle} - -\begin{frame} - - \showsubsection - - \begin{itemize} - \item - \textbf{HTTP}\\ - \lstinline[style=cmd]{GET / HTTP/1.1}\\ - \lstinline[style=cmd]{Host: www.hs-bochum.de}\\ - (Leerzeile) -% \begin{onlyenv}<2> -% \par\medskip -% URL: Schema://Benutzer:Passwort@Rechner:port/Pfad?Query\#Fragment -% \end{onlyenv} - \begin{onlyenv}<2-> - \medskip - \item - \textbf{SMTP}\\ - \lstinline[style=cmd]{HELO cassini}\\ - \lstinline[style=cmd]{MAIL FROM: <example@example.com>}\\ - \lstinline[style=cmd]{RCPT TO: <beispiel@example.de>}\\ - (E-Mail-Header -- Teil der Nutzdaten)\\ - \lstinline[style=cmd]{From: Eddie Example <example@example.com>}\\ - \lstinline[style=cmd]{To: Bert Beispiel <beispiel@example.de>}\\ - \lstinline[style=cmd]{Subject: Hello, world!}\\ - (Leerzeile)\\ - \lstinline[style=cmd]{Hi, there!}\\ - \lstinline[style=cmd]{.} - \medskip - \item - Protokolle "`mal eben"' selbst schreiben: - \lstinline[style=cmd]{nc -c} oder \file{inetd} - \end{onlyenv} - \end{itemize} - -\end{frame} - -\subsection{Routing} - -\begin{frame}[fragile] - - \showsubsection - - \begin{itemize} - \item - \lstinline[style=cmd]{ip route} (Linux)\\ - \lstinline[style=cmd]{route} (MS-Windows, Unix)\\ - \lstinline[style=cmd]{netstat -nr} (MacOS) -% \\[\medskipamount] -% \includegraphics[width=11cm]{../20171026/photo-20171026-162455.jpg} - \end{itemize} - - \medskip - - \begin{lstlisting}[style=terminal] - # route -n - Kernel-IP-Routentabelle - Ziel Router Genmask [...] Iface - 0.0.0.0 192.168.42.1 0.0.0.0 [...] wlan0 - 169.254.0.0 0.0.0.0 255.255.0.0 [...] wlan0 - 192.168.42.0 0.0.0.0 255.255.255.0 [...] wlan0 - \end{lstlisting} - - \bigskip - - Netzmaske:\\ - Wenn nach Und-Verknüpfung mit IP-Adresse gleich, - \textarrow\ im gleichen Netz - - \medskip - - \lstinline[style=terminal]{255.255.240.0} ist dasselbe wie - \lstinline[style=terminal]{/20}\\ - (20 Bit sind 1; die restlichen 12 Bit sind 0) - -\end{frame} - -\subsection{Netzwerkanalyse} - -\begin{frame} - - \showsubsection - - \begin{itemize} - \item - \lstinline[style=cmd]{tcpdump} - \item - \lstinline[style=cmd]{wireshark} - \item - \lstinline[style=cmd]{ettercap} - \end{itemize} - -\end{frame} - -\subsection{SSH} - -\begin{frame} - - \showsubsection - - \begin{itemize} - \item - \lstinline[style=cmd]{SSH <Rechner>} - \item - \lstinline[style=cmd]{-C}: Komprimierung - \item - \lstinline[style=cmd]{-L}: lokalen Port auf Remote-Port umleiten - \item - \lstinline[style=cmd]{-R}: Remote-Port auf lokalen Port umleiten - \end{itemize} - -\end{frame} - -\subsection{X11} - -\begin{frame} - - \showsubsection - - \begin{itemize} - \item - Grafik-Bildschirm und Eingabegeräte über's Netz - \item - \lstinline[style=cmd]{DISPLAY}-Variable: X-Server: Rechner und Bildschirm - \item - \lstinline[style=cmd]{ssh -X}: X11-Forwarding - \end{itemize} - -\end{frame} - -\end{document} diff --git a/20211028/http-1.txt b/20211028/http-1.txt deleted file mode 100644 index 046dbe69e1caa093d0629b5dc4c428591b06e1e7..0000000000000000000000000000000000000000 --- a/20211028/http-1.txt +++ /dev/null @@ -1,42 +0,0 @@ -cassini/home/peter> nc -C 88.198.170.59 80 -GET / HTTP/1.1 -Host: www.sportschule-tokio.de - -HTTP/1.1 200 OK -Date: Thu, 28 Oct 2021 14:21:04 GMT -Server: Apache/2.4.38 (Debian) -Last-Modified: Tue, 05 Oct 2021 12:12:00 GMT -ETag: "1c0c-5cd99efd08faf" -Accept-Ranges: bytes -Content-Length: 7180 -Vary: Accept-Encoding -Content-Type: text/html; charset=ISO-8859-15 - -<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN"> -<html> -<head> -<!-- Website designed by Felix Hamme & Peter Gerwinski --> -<title>Sportschule Tokio – die besondere Judo-Schule in Essen-Bredeney</title> -<link rel="icon" href="tokio-logo-80x80.jpg" type="image/jpeg"> -<link rel="stylesheet" href="stylesheets/default.css" type="text/css"> -<link rel="stylesheet" href="stylesheets/index.css" type="text/css"> -</head> -<body bgcolor="#F0F0FF" text="#000000" link="#0033F0" vlink="#404090" alink="#0000FF"> -<div class="headline"> -<p><a href="#Impressum">Impressum</a> Sportschule Tokio</p> -</div> -<div class="menu"> -<ul> -<li class="active">Aktuelles</li> -<li><a href="training.de.html">Trainingsangebot</a></li> -<li><a href="lageplan.de.html">Lageplan</a></li> -<li><a href="tokio.de.html">�ber uns</a></li> -<li><a href="techniken.de.html">Judo-Techniken</a></li> -<li><a href="/fotos" target="_blank">Fotos</a></li> -</ul> - -[...] - -</body> -</html> -cassini/home/peter> diff --git a/20211028/logo-hochschule-bochum-cvh-text-v2.pdf b/20211028/logo-hochschule-bochum-cvh-text-v2.pdf deleted file mode 120000 index 4aa99b8f81061aca6dcaf43eed2d9efef40555f8..0000000000000000000000000000000000000000 --- a/20211028/logo-hochschule-bochum-cvh-text-v2.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/logo-hochschule-bochum-cvh-text-v2.pdf \ No newline at end of file diff --git a/20211028/logo-hochschule-bochum.pdf b/20211028/logo-hochschule-bochum.pdf deleted file mode 120000 index b6b9491e370e499c9276918182cdb82cb311bcd1..0000000000000000000000000000000000000000 --- a/20211028/logo-hochschule-bochum.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/logo-hochschule-bochum.pdf \ No newline at end of file diff --git a/20211028/pgslides.sty b/20211028/pgslides.sty deleted file mode 120000 index 5be1416f4216f076aa268901f52a15d775e43f64..0000000000000000000000000000000000000000 --- a/20211028/pgslides.sty +++ /dev/null @@ -1 +0,0 @@ -../common/pgslides.sty \ No newline at end of file diff --git a/20211028/regex-1.txt b/20211028/regex-1.txt deleted file mode 100644 index 1216745b2d96adca0875d8e42ed16af4e3a9b10e..0000000000000000000000000000000000000000 --- a/20211028/regex-1.txt +++ /dev/null @@ -1,2 +0,0 @@ -cassini/home/peter/bo/2021ws/es/20211028> echo "Meine E-Mail-Adresse ist peter.gerwinski@hs-bochum.de." | grep -o "[A-Za-z._0-9-]*@[A-Za-z.0-9-]*[A-Za-z0-9]" -peter.gerwinski@hs-bochum.de diff --git a/20211028/roboter.sh b/20211028/roboter.sh deleted file mode 100755 index a82a83b68d1e01d0516caf4ba2b5803757ec9dd3..0000000000000000000000000000000000000000 --- a/20211028/roboter.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/bash - -echo "ROBOT CONTROL SOFTWARE v42.137 ;-)" -echo -n "? " -while read cmd; do - if [ "$cmd" = "h" ] || [ "$cmd" = "help" ]; then - echo "w = fahren" - echo "a = nach links lenken" - echo "s = stop" - echo "d = nach rechts lenken" - echo "q = beenden" - fi - if [ "$cmd" = "w" ]; then - echo "LOOOS!" - fi - if [ "$cmd" = "a" ]; then - echo "LllllIIIInks!" - fi - if [ "$cmd" = "s" ]; then - echo "StooooOOOOOP!" - fi - if [ "$cmd" = "d" ]; then - echo "RrrrrEEEEchts!" - fi - if [ "$cmd" = "q" ]; then - exit 0 - fi - echo -n "? " -done diff --git a/20211028/routing.txt b/20211028/routing.txt deleted file mode 100644 index 6cf0e04758b9904998af2adf2bfe42513a7e2dff..0000000000000000000000000000000000000000 --- a/20211028/routing.txt +++ /dev/null @@ -1,67 +0,0 @@ -192.168.42.0/24 bedeutet: Die letzte von den 4 Zahlen darf sich ändern. -Netz-Adresse: 192.168.42.0 -Netz-Maske: 255.2555.255.0 - `----v-----' - 24 Einsen (und danach 8 Nullen) - - -$ ipcalc 192.168.42.0/24 - -Address: 192.168.42.0 11000000.10101000.00101010. 00000000 -Netmask: 255.255.255.0 = 24 11111111.11111111.11111111. 00000000 -Wildcard: 0.0.0.255 00000000.00000000.00000000. 11111111 -=> -Network: 192.168.42.0/24 11000000.10101000.00101010. 00000000 -HostMin: 192.168.42.1 11000000.10101000.00101010. 00000001 -HostMax: 192.168.42.254 11000000.10101000.00101010. 11111110 -Broadcast: 192.168.42.255 11000000.10101000.00101010. 11111111 -Hosts/Net: 254 Class C, Private Internet - -$ ipcalc 192.168.0.0/16 - -Address: 192.168.0.0 11000000.10101000. 00000000.00000000 -Netmask: 255.255.0.0 = 16 11111111.11111111. 00000000.00000000 -Wildcard: 0.0.255.255 00000000.00000000. 11111111.11111111 -=> -Network: 192.168.0.0/16 11000000.10101000. 00000000.00000000 -HostMin: 192.168.0.1 11000000.10101000. 00000000.00000001 -HostMax: 192.168.255.254 11000000.10101000. 11111111.11111110 -Broadcast: 192.168.255.255 11000000.10101000. 11111111.11111111 -Hosts/Net: 65534 Class C, Private Internet - -$ ipcalc 192.168.0.0/20 - -Address: 192.168.0.0 11000000.10101000.0000 0000.00000000 -Netmask: 255.255.240.0 = 20 11111111.11111111.1111 0000.00000000 -Wildcard: 0.0.15.255 00000000.00000000.0000 1111.11111111 -=> -Network: 192.168.0.0/20 11000000.10101000.0000 0000.00000000 -HostMin: 192.168.0.1 11000000.10101000.0000 0000.00000001 -HostMax: 192.168.15.254 11000000.10101000.0000 1111.11111110 -Broadcast: 192.168.15.255 11000000.10101000.0000 1111.11111111 -Hosts/Net: 4094 Class C, Private Internet - -$ ipcalc 192.168.64.0/20 - -Address: 192.168.64.0 11000000.10101000.0100 0000.00000000 -Netmask: 255.255.240.0 = 20 11111111.11111111.1111 0000.00000000 -Wildcard: 0.0.15.255 00000000.00000000.0000 1111.11111111 -=> -Network: 192.168.64.0/20 11000000.10101000.0100 0000.00000000 -HostMin: 192.168.64.1 11000000.10101000.0100 0000.00000001 -HostMax: 192.168.79.254 11000000.10101000.0100 1111.11111110 -Broadcast: 192.168.79.255 11000000.10101000.0100 1111.11111111 -Hosts/Net: 4094 Class C, Private Internet - -$ ipcalc 192.168.137.80/28 - -Address: 192.168.137.80 11000000.10101000.10001001.0101 0000 -Netmask: 255.255.255.240 = 28 11111111.11111111.11111111.1111 0000 -Wildcard: 0.0.0.15 00000000.00000000.00000000.0000 1111 -=> -Network: 192.168.137.80/28 11000000.10101000.10001001.0101 0000 -HostMin: 192.168.137.81 11000000.10101000.10001001.0101 0001 -HostMax: 192.168.137.94 11000000.10101000.10001001.0101 1110 -Broadcast: 192.168.137.95 11000000.10101000.10001001.0101 1111 -Hosts/Net: 14 Class C, Private Internet - diff --git a/20211028/screenshot-huygens.xwd b/20211028/screenshot-huygens.xwd deleted file mode 100644 index 285bf3aee65f6c6cb56ca9ba33ea678470cc6b00..0000000000000000000000000000000000000000 Binary files a/20211028/screenshot-huygens.xwd and /dev/null differ diff --git a/20211028/screenshot-vnc6.xwd b/20211028/screenshot-vnc6.xwd deleted file mode 100644 index ff01bd651b0ccb70311fe520e274bd63d0c47268..0000000000000000000000000000000000000000 Binary files a/20211028/screenshot-vnc6.xwd and /dev/null differ diff --git a/20211028/screenshot.xwd b/20211028/screenshot.xwd deleted file mode 100644 index 05db57d51840e256b679438f618d75baf464641a..0000000000000000000000000000000000000000 Binary files a/20211028/screenshot.xwd and /dev/null differ diff --git a/20211028/start-roboter.sh b/20211028/start-roboter.sh deleted file mode 100755 index 5c31d01e511221d9410ddf1dfec7e7d3937652f1..0000000000000000000000000000000000000000 --- a/20211028/start-roboter.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -nc -p 5501 -l -c ./roboter.sh diff --git a/20211028/start-shell.sh b/20211028/start-shell.sh deleted file mode 100644 index 1c69feaba7dd4088da633470afbc0e6bed28a290..0000000000000000000000000000000000000000 --- a/20211028/start-shell.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -nc -p 5501 -l -c /bin/bash diff --git a/20211104/I2C_data_transfer.pdf b/20211104/I2C_data_transfer.pdf deleted file mode 120000 index 73e7ce07770a0599ae1a2aa11e97899767a1f9b0..0000000000000000000000000000000000000000 --- a/20211104/I2C_data_transfer.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/I2C_data_transfer.pdf \ No newline at end of file diff --git a/20211104/SPI_single_slave.pdf b/20211104/SPI_single_slave.pdf deleted file mode 120000 index b51d59e51fffb101086bfaa811370f66436127e7..0000000000000000000000000000000000000000 --- a/20211104/SPI_single_slave.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/SPI_single_slave.pdf \ No newline at end of file diff --git a/20211104/SPI_three_slaves.pdf b/20211104/SPI_three_slaves.pdf deleted file mode 120000 index b2e27257652bbefd9e1c9194ac1f518a43c8aa15..0000000000000000000000000000000000000000 --- a/20211104/SPI_three_slaves.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/SPI_three_slaves.pdf \ No newline at end of file diff --git a/20211104/SPI_three_slaves_daisy_chained.pdf b/20211104/SPI_three_slaves_daisy_chained.pdf deleted file mode 120000 index 967389aeed788b2fed87b2a6b25a5ebd8256978f..0000000000000000000000000000000000000000 --- a/20211104/SPI_three_slaves_daisy_chained.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/SPI_three_slaves_daisy_chained.pdf \ No newline at end of file diff --git a/20211104/es-20211104.pdf b/20211104/es-20211104.pdf deleted file mode 100644 index e4ef975ace8b6066695e0d2aaafecab3ed4eab1e..0000000000000000000000000000000000000000 Binary files a/20211104/es-20211104.pdf and /dev/null differ diff --git a/20211104/es-20211104.tex b/20211104/es-20211104.tex deleted file mode 100644 index 038e686806470b2913117c1a0389ce55677a43b4..0000000000000000000000000000000000000000 --- a/20211104/es-20211104.tex +++ /dev/null @@ -1,780 +0,0 @@ -% es-20211104.pdf - Lecture Slides on Embedded Systems -% Copyright (C) 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Peter Gerwinski -% -% This document is free software: you can redistribute it and/or -% modify it either under the terms of the Creative Commons -% Attribution-ShareAlike 3.0 License, or under the terms of the -% GNU General Public License as published by the Free Software -% Foundation, either version 3 of the License, or (at your option) -% any later version. -% -% This document is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with this document. If not, see <http://www.gnu.org/licenses/>. -% -% You should have received a copy of the Creative Commons -% Attribution-ShareAlike 3.0 Unported License along with this -% document. If not, see <http://creativecommons.org/licenses/>. - -% README: Netzwerkanalyse, VNC, Netzwerk-Programmierung - -\documentclass[10pt,t]{beamer} - -\usepackage{pgslides} -\usepackage{rotating} -\usepackage{tikz} - -\newcommand{\underconstruction}{% - \begin{picture}(0,0) - \put(9,0.9){\makebox(0,0)[b]{\includegraphics[width=1.5cm]{Zeichen_123.pdf}}} - \put(9,0.6){\makebox(0,0)[t]{\shortstack{Änderungen\\vorbehalten}}} - \end{picture}} - -\title{Eingebettete Systeme} -\author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski} -\date{4.\ November 2021} - -\newcommand{\ItwoC}{I\raisebox{0.5ex}{\footnotesize 2}C} - -\begin{document} - -\maketitleframe - -\nosectionnonumber{\inserttitle} - -\begin{frame} - - \shownosectionnonumber - - \begin{itemize} - \item[\textbf{1}] \textbf{Einführung} - \hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/es}}}% - \item[\textbf{2}] \textbf{Einführung in Unix} - \item[\textbf{3}] \textbf{TCP/IP in der Praxis} - \begin{itemize} - \color{medgreen} - \item[3.0] Vorbereitungen - \item[3.1] IP-Adressen - \item[3.2] MAC-Adressen - \item[3.3] TCP- und UDP-Ports - \item[3.4] TCP-Protokolle - \item[3.5] Routing - \color{orange} - \item[3.6] Netzwerkanalyse - \color{medgreen} - \item[3.7] SSH - \color{orange} - \item[3.8] X11 und VNC - \color{red} - \item[3.9] Programmierung - \end{itemize} - \item[\textbf{4}] \textbf{Bus-Systeme} - \vspace*{-\smallskipamount} - \item[\textbf{\dots}] - \end{itemize} - -\end{frame} - -\setcounter{section}{2} -\section{TCP/IP in der Praxis} -\setcounter{subsection}{-1} -\subsection{Vorbereitungen\quad {\color{red}(Nicht auf allen Rechnern ausführen!)}} - -\begin{frame}[fragile] - - \showsection - - {\large\textbf{Literatur:}}\\[\smallskipamount] - \url{http://www.peter.gerwinski.de/download/net-2013ss.tar.gz} - - \bigskip\bigskip - - \showsubsection - - \begin{itemize} - \item - Verkabelung: Twisted-Pair-Kabel, Switches - \item - Automatismen abschalten - \end{itemize} - - \medskip - - \begin{lstlisting}[style=terminal] - # service network-manager stop - \end{lstlisting} - -\end{frame} - -\subsection{IP-Adressen} - -\begin{frame}[fragile] - - \showsubsection - - \begin{itemize} - \item \lstinline[style=cmd]{ip addr} (Linux)\\ - \lstinline[style=cmd]{ifconfig} (Unix allgemein)\\ - \lstinline[style=cmd]{ipconfig} (MS Windows) - \item \lstinline[style=cmd]{ip addr add <Netz>} -% \\ -% Beispiel: -% \lstinline[style=cmd]{ip addr add 192.168.2.197/24}\\ -% \includegraphics[width=7cm]{../20171026/photo-20171026-142620.jpg} - \item \lstinline[style=cmd]{ip link} - \item \lstinline[style=cmd]{ping <IP-Adresse>} - \end{itemize} - - \medskip - - \begin{lstlisting}[style=terminal] - # ifconfig - lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 - inet 127.0.0.1 netmask 255.0.0.0 - inet6 ::1 prefixlen 128 scopeid 0x10<host> - [...] - - wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 - inet 192.168.42.101 netmask 255.255.255.0 - broadcast 192.168.42.255 - ether be:3f:ca:aa:7e:51 txqueuelen 1000 (Ethernet) - [...] - \end{lstlisting} - -\end{frame} - -\begin{frame} - - \showsubsection - - IPv4-Adressen: - \begin{itemize} - \item - 32 Bit - \item - dezimal, 4 Gruppen zu je 8 Bit (0--255), durch Punkte getrennt - \end{itemize} - - \medskip - - IPv6-Adressen: - \begin{itemize} - \item - 128 Bit - \item - hexadezimal, 8 Gruppen zu je 4 Hex-Ziffern, durch Doppelpunkte getrennt - \item - Führende Nullen dürfen weggelassen werden. - \item - Zwei Dopppelpunkte bedeuten: Mit Nullen auffüllen. - \item - Literatur und Beispiel: \url{https://de.wikipedia.org/wiki/IPv6} - \end{itemize} - -\end{frame} - -\subsection{MAC-Adressen} - -\begin{frame} - - \showsubsection - - MAC = Media Access Control - - \smallskip - - MAC-Adresse = Hardware-Adresse = Ethernet-Adresse - - \begin{itemize} - \item \lstinline[style=cmd]{ip neig}\\ - \lstinline[style=cmd]{arp} - \end{itemize} - -\end{frame} - -\subsection{TCP- und UDP-Ports} - -\begin{frame} - - \showsubsection - - \begin{itemize} - \item - \lstinline[style=cmd]{nc <IP> <Port>}\\ - Verbindung zu Programm $\langle$Port$\rangle$ - auf Rechner $\langle$IP$\rangle$ aufnehmen - \item - \lstinline[style=cmd]{nc -l <Port>} - oder - \lstinline[style=cmd]{nc -p <Port> -l}\\ - auf eingehende Verbindungen warten ("`lauschen"') - \medskip - \item - TCP-Ports: Verbindungskonzept, Netzwerk prüft - \item - UDP-Ports: einzelne Pakete, Anwendung muß selbst prüfen - \item - ICMP: keine Ports, nur Rechner:\\ - Erreichbarkeit, Eigenschaften der Übertragung - \end{itemize} - - \medskip - - \begin{center} - \renewcommand{\arraystretch}{1.2} - \begin{tabular}{|l|}\hline - Anwendung: HTTP, SMTP, \dots \\\hline - Transport: TCP-/UDP-Ports, ICMP \\\hline - Internet: IP-Adresse \\\hline - Netzwerkzugang: Hardware-/MAC-Adresse \\\hline - \end{tabular} - \end{center} - -\end{frame} - -\subsection{TCP-Protokolle} - -\begin{frame} - - \showsubsection - - \begin{itemize} - \item - \textbf{HTTP}\\ - \lstinline[style=cmd]{GET / HTTP/1.1}\\ - \lstinline[style=cmd]{Host: www.hs-bochum.de}\\ - (Leerzeile) -% \begin{onlyenv}<2> -% \par\medskip -% URL: Schema://Benutzer:Passwort@Rechner:port/Pfad?Query\#Fragment -% \end{onlyenv} - \begin{onlyenv}<2-> - \medskip - \item - \textbf{SMTP}\\ - \lstinline[style=cmd]{HELO cassini}\\ - \lstinline[style=cmd]{MAIL FROM: <example@example.com>}\\ - \lstinline[style=cmd]{RCPT TO: <beispiel@example.de>}\\ - (E-Mail-Header -- Teil der Nutzdaten)\\ - \lstinline[style=cmd]{From: Eddie Example <example@example.com>}\\ - \lstinline[style=cmd]{To: Bert Beispiel <beispiel@example.de>}\\ - \lstinline[style=cmd]{Subject: Hello, world!}\\ - (Leerzeile)\\ - \lstinline[style=cmd]{Hi, there!}\\ - \lstinline[style=cmd]{.} - \medskip - \item - Protokolle "`mal eben"' selbst schreiben: - \lstinline[style=cmd]{nc -c} oder \file{inetd} - \end{onlyenv} - \end{itemize} - -\end{frame} - -\subsection{Routing} - -\begin{frame}[fragile] - - \showsubsection - - \begin{itemize} - \item - \lstinline[style=cmd]{ip route} (Linux)\\ - \lstinline[style=cmd]{route} (MS-Windows, Unix)\\ - \lstinline[style=cmd]{netstat -nr} (MacOS) -% \\[\medskipamount] -% \includegraphics[width=11cm]{../20171026/photo-20171026-162455.jpg} - \end{itemize} - - \medskip - - \begin{lstlisting}[style=terminal] - # route -n - Kernel-IP-Routentabelle - Ziel Router Genmask [...] Iface - 0.0.0.0 192.168.42.1 0.0.0.0 [...] wlan0 - 169.254.0.0 0.0.0.0 255.255.0.0 [...] wlan0 - 192.168.42.0 0.0.0.0 255.255.255.0 [...] wlan0 - \end{lstlisting} - - \bigskip - - Netzmaske:\\ - Wenn nach Und-Verknüpfung mit IP-Adresse gleich, - \textarrow\ im gleichen Netz - - \medskip - - \lstinline[style=terminal]{255.255.240.0} ist dasselbe wie - \lstinline[style=terminal]{/20}\\ - (20 Bit sind 1; die restlichen 12 Bit sind 0) - -\end{frame} - -\subsection{Netzwerkanalyse} - -\begin{frame} - - \showsubsection - - \begin{itemize} - \item - \lstinline[style=cmd]{tcpdump} - \item - \lstinline[style=cmd]{wireshark} - \item - \lstinline[style=cmd]{ettercap} - \end{itemize} - -\end{frame} - -\subsection{SSH} - -\begin{frame} - - \showsubsection - - \begin{itemize} - \item - \lstinline[style=cmd]{SSH <Rechner>} - \item - \lstinline[style=cmd]{-C}: Komprimierung - \item - \lstinline[style=cmd]{-L}: lokalen Port auf Remote-Port umleiten - \item - \lstinline[style=cmd]{-R}: Remote-Port auf lokalen Port umleiten - \end{itemize} - -\end{frame} - -\subsection{X11} - -\subsection{X11 und VNC} - -\begin{frame} - - \showsection - \showsubsection - - \begin{itemize} - \item - Grafik-Bildschirm und Eingabegeräte über's Netz - \item - \lstinline[style=cmd]{DISPLAY}-Variable: X-Server: Rechner und Bildschirm - \item - \lstinline[style=cmd]{ssh -X}: X11-Forwarding - \pause - \bigskip - \item - VNC = Virtual Network Computing - \item - VNC-Server stellt Bildschirminhalt zur Verfügung - \begin{itemize} - \item entweder: eigener, virtueller X11-Server - \item oder: ruft Inhalt von anderem (X11-) Bildschirm ab - \end{itemize} - \item - VNC-Client ruft Bildschirminhalt ab und stellt ihn dar - \begin{itemize} - \item z.\,B.\ per X11 - \item z.\,B.\ per Web-Interface: noVNC - \end{itemize} - \end{itemize} - -\end{frame} - -\subsection{Programmierung} - -\begin{frame} - - \showsection - \showsubsection - - \begin{itemize} - \item - Shell-Skripte: \file{nc} (\file{traditional} oder \file{OpenBSD}) - \item - C: Sockets, \lstinline{select()} - \item - C++: Callbacks - \end{itemize} - - \pause - \bigskip - - Aktuelles Beispiel: Programmierung eines VNC-Servers per Web-Interface - - \begin{itemize} - \item - Grundlagen: RFC~6143 - \item - Praxis: Untersuchung mit Wireshark - \item - Implementation: JavaScript, WebSockets, \file{websockify}, Callbacks - \end{itemize} - -\end{frame} - -\nosectionnonumber{\inserttitle} - -\begin{frame} - - \shownosectionnonumber - - \begin{itemize} - \item[\textbf{1}] \textbf{Einführung} - \hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/es}}}% - \item[\textbf{2}] \textbf{Einführung in Unix} - \item[\textbf{3}] \textbf{TCP/IP in der Praxis} - \begin{itemize} - \vspace*{-\medskipamount} - \item[\textbf{\dots}] - \color{medgreen} - \item[3.6] Netzwerkanalyse - \color{black} - \item[3.7] SSH - \color{medgreen} - \item[3.8] X11 und VNC - \item[3.9] Programmierung - \end{itemize} - \item[\textbf{5}] \textbf{Bus-Systeme} - \begin{itemize} - \color{red} - \item[5.1]Was sind Bus-Systeme? - \item[5.2]RS-232 - \item[5.3]\ItwoC\ (TWI) - \item[5.4]SPI - \vspace*{-\smallskipamount} - \item[\textbf{\dots}] - \end{itemize} - \vspace*{-\smallskipamount} - \item[\textbf{\dots}] - \end{itemize} - -\end{frame} - -\iffalse - -\section{Bus-Systeme} -\subsection{Was sind Bus-Systeme?} - -\begin{frame} - \showsection - \showsubsection - - \begin{quote} - Ein Bus ist ein System zur Datenübertragung zwischen mehreren - Teilnehmern über einen gemeinsamen Übertragungsweg. - \color{gray} - Findet eine Datenübertragung zwischen zwei Teilnehmern statt, so - müssen die übrigen Teilnehmer schweigen, da sie sich sonst - gegenseitig stören würden. Umgangssprachlich werden mitunter -- - oft aus historischen Gründen – auch Datenübertragungssysteme als - "`Bus"' bezeichnet, die technisch eigentlich eine andere - Topologie besitzen. - - \medskip - - \strut\hfill\url{https://de.wikipedia.org/wiki/Bus_(Datenverarbeitung)} - \end{quote} - Beispiele: - \begin{itemize} - \item - Computer kommuniziert mit Peripherie - \item - Computer kommunizieren (direkt) miteinander - \item - Prozessor kommuniziert mit externem Speicher - \item - Teile eines Prozessors kommunizieren miteinander - \end{itemize} -\end{frame} - -\begin{frame} - \showsection - \showsubsection - Standard-Personal-Computer: - \begin{itemize} - \item - Einsteckkarten: PCI (und Vorgänger) - \item - Festplatten: SATA (und Vorgänger) - \item - USB, FireWire, \dots - \item - Ethernet, CAN-Bus, \dots - \item - WLAN, BlueTooth, IR, \dots - \item - PS/2, RS-232, Centronics - \end{itemize} - - \medskip - - \begin{visibleenv}<2-> - Minimal-Hardware: - \begin{itemize} - \item - RS-232 - \item - \ItwoC\ (TWI) - \item - SPI - \end{itemize} - \end{visibleenv} - - \begin{onlyenv}<1> - \begin{picture}(0,0) - \put(5,1.5){\includegraphics[height=3cm]{motherboard-anschluesse.jpg}} - \end{picture} - \end{onlyenv} - \begin{onlyenv}<2> - \begin{picture}(0,0)(-1.3,-4) - \put(1.8,-4.9){\includegraphics[height=3.5cm]{kompassmodul-an-roboter.jpg}} - \put(6.1,-3.3){\includegraphics[height=4.5cm]{kompassmodul.jpg}} - \put(6.1,1.2){\makebox(0,0)[tr]{\tikz{\draw(0,0)--(-1.9,-3.6);}}} - \put(6.1,-3.3){\makebox(0,0)[br]{\tikz{\draw(0,0)--(-1.8,0.2);}}} - \end{picture} - \end{onlyenv} -\end{frame} - -\begin{frame}[fragile] - - \showsection - \showsubsection - - \vspace*{-\bigskipamount} - \begin{tabbing} - \newterm{Punkt-zu-Punkt}\quad\=\kill - \newterm{seriell} \> jedes Bit einzeln übertragen\\ - \newterm{parallel} \> mehrere Bits gleichzeitig\\[\smallskipamount] - \newterm{synchron} \> Abgleich über Steuerleitung: \newterm{Takt}\\ - \newterm{asynchron} \> Abgleich über Zeitvereinbarungen\\[\smallskipamount] - \newterm{Punkt-zu-Punkt} \> genau zwei Teilnehmer\\ - \newterm{busfähig} \> mehrere Teilnehmer, mit \newterm{Adressierung} - \end{tabbing} - - \begin{itemize} - \item - \ItwoC: seriell, synchron, mit Adressierung - \item - RS-232: seriell, asynchron, Punkt-zu-Punkt - \item - RS-485, USB, CAN: seriell, asynchron, mit Adressierung - \item - SPI: seriell, synchron, Punkt-zu-Punkt oder mit Adressierung - \end{itemize} - -\end{frame} - -\subsection{RS-232} - -\begin{frame} - \showsection - \showsubsection - - seriell - \begin{itemize} - \item - \newterm{TX\/}: 1 Leitung für Daten - \item - \newterm{RX\/}: ggf.\ 1 Leitung für Daten in der anderen Richtung - \item - \newterm{GND\/}: gemeinsame \newterm{Masse} - \item - evtl.\ zusätzliche Steuerleitungen - \end{itemize} - - \medskip - - asynchron - \begin{itemize} - \item - \emph{keine\/} Taktleitung für Abgleich, wann Daten anliegen - \item - Stattdessen: Abgleich über Zeitvereinbarungen - \arrowitem - Jeder Teilnehmer braucht eine eigene Zeitbasis. - \end{itemize} - - \medskip - - Punkt-zu-Punkt - \begin{itemize} - \item - nur 2 Teilnehmer vorgesehen - \end{itemize} -\end{frame} - -\begin{frame} - \showsubsection - \vspace*{-0.35cm} - \begin{center} - \includegraphics[scale=0.9]{rs-232.pdf} - \end{center} -\end{frame} - -\subsection{\protect\ItwoC\ (TWI)} - -\begin{frame} - \showsection - \showsubsection - - \ItwoC\ = Inter-IC; TWI = Two-Wire-Interface - - \medskip - - seriell - \begin{itemize} - \item - \newterm{SDA\/}: 1 Leitung für Daten (in beiden Richtungen) - \item - \newterm{SCL\/}: Taktleitung (Clock) - \item - \newterm{GND\/}: gemeinsame Masse - \item - evtl.\ \newterm{VCC\/}: Stromversorgung für Peripheriegerät - \end{itemize} - - \medskip - - synchron - \begin{itemize} - \item - Abgleich über\\Taktleitung - \begin{picture}(0,0) - \put(0.4,-0.4){\includegraphics[width=9.7cm]{I2C_data_transfer.pdf}} - \end{picture} - \end{itemize} - - \medskip - - busfähig - \begin{itemize} - \item - \newterm{Master\/} initiiert Kommuniation und steuert Taktleitung - \item - erstes gesendetes Byte: \newterm{Adresse\/} des Teilnehmers - \item - 2 Adressen pro Teilnehmer: Lesen/Schreiben - \end{itemize} - \vspace*{-1cm} -\end{frame} - -\subsection{SPI} - -\begin{frame} - \showsection - \showsubsection - - Serial Peripheral Interface - - \medskip - - seriell - \begin{itemize} - \item - \newterm{MOSI\/}: Master Out, Slave In - \item - \newterm{MISO\/}: Master In, Slave Out - \item - \newterm{SCLK\/}: Taktleitung (Clock) - \item - \newterm{$\overline{\text{SS}}$\/}: Slave Select (invertiert) - \item - \newterm{GND\/}: gemeinsame Masse - \item - evtl.\ \newterm{VCC\/}: Stromversorgung für Peripheriegerät - \end{itemize} - - \medskip - - synchron - \begin{itemize} - \item - Abgleich über Taktleitung - \end{itemize} - - \medskip - - busfähig - \begin{itemize} - \item - \newterm{Master\/} initiiert Kommuniation und steuert Taktleitung - \item - \newterm{Slave\/} wird über \newterm{Slave Select\/} ausgewählt - \begin{picture}(0,0)(0,-0.2) - \only<1>{\put(-2.175,2.875){\includegraphics[scale=0.7]{SPI_single_slave.pdf}}} - \only<2>{\put(-2.0,3.0){\includegraphics[scale=0.7]{SPI_three_slaves.pdf}}} - \only<2>{\put(2.55,3.1){\begin{minipage}[t]{2.5cm} - \newterm{Stern} - \end{minipage}}} - \only<3->{\put(-2.0,3.0){\includegraphics[scale=0.7]{SPI_three_slaves_daisy_chained.pdf}}} - \only<3->{\put(2.55,3.1){\begin{minipage}[t]{2.5cm} - \newterm{Kaskade}\\ - \newterm{Daisy Chain}\pause[4]\par\smallskip - \setlength{\leftskip}{-3.5cm}\small - Slave gibt MOSI-Input um 1 Takt verzögert - an MISO aus \textarrow\ Master setzt - "`im richtigen Moment"' $\overline{\text{SS}}$ - \end{minipage}}} - \end{picture} - \end{itemize} - \vspace*{-1cm} - -\end{frame} - -\subsection{PWM} - -\begin{frame} - \showsection - \showsubsection - - Pulsweitenmodulation -- \emph{pulse-width modulation} - - \begin{itemize} - \item - Steuerung von Motoren - \item - Nutzung als allgemeines Protokoll\\ - zur Übertragung analoger Werte - \end{itemize} -\end{frame} - -\subsection{Sonstiges} - -\begin{frame} - \showsection - \showsubsection - - Matrix-Schaltung - \begin{itemize} - \item - möglichst viele Aktoren/Sensoren\\ - über möglichst wenige digitals Inputs abfragen\\ - bzw.\ über möglichst wenige digitale Outputs steuern - \item - Beispiele: LED-Felder, Tastaturen - \end{itemize} - - \pause - \bigskip - - R/2R-Netzwerk - \begin{itemize} - \item - möglichst viele digitale Inputs\\ - über einen einzigen analogen Input abfragen - \item - Beispiele: Tastaturen - \end{itemize} - -\end{frame} - -\fi - -\end{document} diff --git a/20211104/kompassmodul-an-roboter.jpg b/20211104/kompassmodul-an-roboter.jpg deleted file mode 120000 index dab8b38c1a92bf8072d42dc3abcc07be54a58c7b..0000000000000000000000000000000000000000 --- a/20211104/kompassmodul-an-roboter.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/kompassmodul-an-roboter.jpg \ No newline at end of file diff --git a/20211104/kompassmodul.jpg b/20211104/kompassmodul.jpg deleted file mode 120000 index be108a5341df13a693959dbe69b7b9541b36fc4c..0000000000000000000000000000000000000000 --- a/20211104/kompassmodul.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/kompassmodul.jpg \ No newline at end of file diff --git a/20211104/logo-hochschule-bochum-cvh-text-v2.pdf b/20211104/logo-hochschule-bochum-cvh-text-v2.pdf deleted file mode 120000 index 4aa99b8f81061aca6dcaf43eed2d9efef40555f8..0000000000000000000000000000000000000000 --- a/20211104/logo-hochschule-bochum-cvh-text-v2.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/logo-hochschule-bochum-cvh-text-v2.pdf \ No newline at end of file diff --git a/20211104/logo-hochschule-bochum.pdf b/20211104/logo-hochschule-bochum.pdf deleted file mode 120000 index b6b9491e370e499c9276918182cdb82cb311bcd1..0000000000000000000000000000000000000000 --- a/20211104/logo-hochschule-bochum.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/logo-hochschule-bochum.pdf \ No newline at end of file diff --git a/20211104/motherboard-anschluesse.jpg b/20211104/motherboard-anschluesse.jpg deleted file mode 120000 index 07335d7dff65c71a683588d2ed108485c4653fb7..0000000000000000000000000000000000000000 --- a/20211104/motherboard-anschluesse.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/motherboard-anschluesse.jpg \ No newline at end of file diff --git a/20211104/pgslides.sty b/20211104/pgslides.sty deleted file mode 120000 index 5be1416f4216f076aa268901f52a15d775e43f64..0000000000000000000000000000000000000000 --- a/20211104/pgslides.sty +++ /dev/null @@ -1 +0,0 @@ -../common/pgslides.sty \ No newline at end of file diff --git a/20211104/rs-232.pdf b/20211104/rs-232.pdf deleted file mode 120000 index 67016059af4a0ca0db871b9dd784bcacc0eecf7a..0000000000000000000000000000000000000000 --- a/20211104/rs-232.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/rs-232.pdf \ No newline at end of file diff --git a/20211104/tcpip-client-0.c b/20211104/tcpip-client-0.c deleted file mode 100644 index 6c6d6d89daeeff447a7bb87aee5da2e162269167..0000000000000000000000000000000000000000 --- a/20211104/tcpip-client-0.c +++ /dev/null @@ -1,56 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <netdb.h> -#include <sys/socket.h> -#include <arpa/inet.h> - -#define TARGET_HOST "ngc224.gerwinski.de" -#define PORT 80 -#define COMMAND "GET /\r\n" - -void error (char *msg) -{ - fprintf (stderr, "%s\n", msg); - exit (1); -} - -int main (void) -{ - int s; - struct sockaddr_in name; - if ((s = socket (PF_INET, SOCK_STREAM, 0)) < 0) - error ("cannot create socket"); - memset (&name, 0, sizeof (name)); - name.sin_family = AF_INET; - name.sin_port = htons (PORT); - name.sin_addr.s_addr = htonl (INADDR_ANY); - struct hostent *ho = gethostbyname (TARGET_HOST); - if (!ho) - { - close (s); - error ("name server lookup error"); - } - if (ho->h_length > (int) sizeof (name.sin_addr)) - ho->h_length = sizeof (name.sin_addr); - memcpy (&name.sin_addr, ho->h_addr, ho->h_length); - if (connect (s, (struct sockaddr *) &name, sizeof (name)) < 0) - { - close (s); - error ("cannot connect to socket"); - } - send (s, COMMAND, strlen (COMMAND), 0); - ssize_t l; - do - { - char buffer[100]; - l = recv (s, buffer, 100, 0); - if (l > 0) - write (1, buffer, l); - } - while (l > 0); - shutdown (s, SHUT_RDWR); - close (s); - return 0; -} diff --git a/20211104/tcpip-client-1.cpp b/20211104/tcpip-client-1.cpp deleted file mode 100644 index 1847bcaa5eb95028f4a70b3dc0369f0bb2244cad..0000000000000000000000000000000000000000 --- a/20211104/tcpip-client-1.cpp +++ /dev/null @@ -1,49 +0,0 @@ -#include <boost/asio/io_service.hpp> -#include <boost/asio/write.hpp> -#include <boost/asio/buffer.hpp> -#include <boost/asio/ip/tcp.hpp> -#include <array> -#include <string> -#include <iostream> - -using namespace boost::asio; -using namespace boost::asio::ip; - -io_service ioservice; -tcp::resolver resolv{ioservice}; -tcp::socket tcp_socket{ioservice}; -std::array<char, 4096> bytes; - -void read_handler(const boost::system::error_code &ec, - std::size_t bytes_transferred) -{ - if (!ec) - { - std::cout.write(bytes.data(), bytes_transferred); - tcp_socket.async_read_some(buffer(bytes), read_handler); - } -} - -void connect_handler(const boost::system::error_code &ec) -{ - if (!ec) - { - std::string r = "GET /\r\n"; - write(tcp_socket, buffer(r)); - tcp_socket.async_read_some(buffer(bytes), read_handler); - } -} - -void resolve_handler(const boost::system::error_code &ec, - tcp::resolver::iterator it) -{ - if (!ec) - tcp_socket.async_connect(*it, connect_handler); -} - -int main() -{ - tcp::resolver::query q{"ngc224.gerwinski.de", "80"}; - resolv.async_resolve(q, resolve_handler); - ioservice.run(); -} diff --git a/20211104/tcpip-server-0.c b/20211104/tcpip-server-0.c deleted file mode 100644 index 868993c4ec429d02f5fe576af9ab57c807367ab6..0000000000000000000000000000000000000000 --- a/20211104/tcpip-server-0.c +++ /dev/null @@ -1,59 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <netdb.h> -#include <sys/socket.h> -#include <arpa/inet.h> - -#define PORT 1234 -#define MESSAGE "Hello, world!\n" - -void error (char *msg) -{ - fprintf (stderr, "%s\n", msg); - exit (1); -} - -int main (void) -{ - int s; - struct sockaddr_in name; - if ((s = socket (PF_INET, SOCK_STREAM, 0)) < 0) - error ("cannot create socket"); - memset (&name, 0, sizeof (name)); - name.sin_family = AF_INET; - name.sin_port = htons (PORT); - name.sin_addr.s_addr = htonl (INADDR_ANY); - int on = 1; - setsockopt (s, SOL_SOCKET, SO_REUSEADDR, (void *) &on, sizeof (on)); - if (bind (s, (struct sockaddr *) &name, sizeof (name)) < 0) - { - close (s); - error ("cannot bind socket"); - } - if (listen (s, 16) < 0) - { - close (s); - error ("cannot listen on socket"); - } - struct sockaddr_in clientname; - socklen_t size = sizeof (clientname); - s = accept (s, (struct sockaddr *) &clientname, &size); - if (s < 0) - error ("cannot accept connection"); - char *host_address = inet_ntoa (clientname.sin_addr); - char *host_name; - struct hostent *hp = gethostbyaddr ((void *) &clientname.sin_addr, sizeof (clientname.sin_addr), clientname.sin_family); - if (hp) - host_name = hp->h_name; - else - host_name = inet_ntoa (clientname.sin_addr); - int remote_port = ntohs (clientname.sin_port); - printf ("connection from %s [%s], port %d\n", - host_name, host_address, remote_port); - send (s, MESSAGE, strlen (MESSAGE), 0); - shutdown (s, SHUT_RDWR); - close (s); - return 0; -} diff --git a/20211104/tcpip-server-1.cpp b/20211104/tcpip-server-1.cpp deleted file mode 100644 index b2059c1d664a05b3581ac1f194ad203d0bca9401..0000000000000000000000000000000000000000 --- a/20211104/tcpip-server-1.cpp +++ /dev/null @@ -1,37 +0,0 @@ -#include <boost/asio/io_service.hpp> -#include <boost/asio/write.hpp> -#include <boost/asio/buffer.hpp> -#include <boost/asio/ip/tcp.hpp> -#include <string> - -using namespace boost::asio; -using namespace boost::asio::ip; - -io_service ioservice; -tcp::endpoint tcp_endpoint{tcp::v4(), 1234}; -tcp::acceptor tcp_acceptor{ioservice, tcp_endpoint}; -tcp::socket tcp_socket{ioservice}; -std::string data; - -void write_handler(const boost::system::error_code &ec, - std::size_t bytes_transferred) -{ - if (!ec) - tcp_socket.shutdown(tcp::socket::shutdown_send); -} - -void accept_handler(const boost::system::error_code &ec) -{ - if (!ec) - { - std::string data = "Hello, world!\n"; - async_write(tcp_socket, buffer(data), write_handler); - } -} - -int main() -{ - tcp_acceptor.listen(); - tcp_acceptor.async_accept(tcp_socket, accept_handler); - ioservice.run(); -} diff --git a/20211104/vnc-0-x-server.png b/20211104/vnc-0-x-server.png deleted file mode 100644 index 73f5583b87a866bffe9ac6845e167f78c3cff9fa..0000000000000000000000000000000000000000 Binary files a/20211104/vnc-0-x-server.png and /dev/null differ diff --git a/20211104/vnc-1-vnc.png b/20211104/vnc-1-vnc.png deleted file mode 100644 index 135a88d2b3029bce6cb391ba519e76574bb23823..0000000000000000000000000000000000000000 Binary files a/20211104/vnc-1-vnc.png and /dev/null differ diff --git a/20211104/vnc-2-cvh.png b/20211104/vnc-2-cvh.png deleted file mode 100644 index bcea16ff26e2f7fef476aa38ea18e8f7147e0d02..0000000000000000000000000000000000000000 Binary files a/20211104/vnc-2-cvh.png and /dev/null differ diff --git a/20211104/vnc-3-cvh-einspeisung.png b/20211104/vnc-3-cvh-einspeisung.png deleted file mode 100644 index 6283298ae135a41a62cfd5b6a6399b710aacaffe..0000000000000000000000000000000000000000 Binary files a/20211104/vnc-3-cvh-einspeisung.png and /dev/null differ diff --git a/20211104/vnc-4-cvh-einspeisung-pg.png b/20211104/vnc-4-cvh-einspeisung-pg.png deleted file mode 100644 index 5fa3235ce1831ffea373afd70cc432e3e068eac3..0000000000000000000000000000000000000000 Binary files a/20211104/vnc-4-cvh-einspeisung-pg.png and /dev/null differ diff --git a/20211104/vnc.xcf.gz b/20211104/vnc.xcf.gz deleted file mode 100644 index a7cff1c05f5f77de274ec63714cd45ad532e2b33..0000000000000000000000000000000000000000 Binary files a/20211104/vnc.xcf.gz and /dev/null differ diff --git a/20211104/yesvnc-wc-6.html b/20211104/yesvnc-wc-6.html deleted file mode 100644 index e039f5ca712a2ae9526ec112428ef7b8ea74a997..0000000000000000000000000000000000000000 --- a/20211104/yesvnc-wc-6.html +++ /dev/null @@ -1,1282 +0,0 @@ -<!doctype html public "-//W3C//DTD HTML 4.0 Strict//EN"> -<html> - <head> - <meta http-equiv="Content-Type" content="text/html; charset=utf8"> - <title>yesVNC Web Connector</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta charset="utf-8"> - <link rel="stylesheet" href="stylesheets/yesvnc-wc.css" type="text/css"> - </head> - <body> - <main class="main"> - <header class="main__header"> - <h2 class="main__header-title">yesVNC Web Connector</h2> - <h3 id="room-indicator" class="main__header-subtitle"> - Channel 6 - </h3> - </header> - <hr class="main__seperator" /> - <div id="preview-section" class="hidden"> - <div id="preview-container"> - <video id="video" style="display: none;" autoplay></video> - <canvas id="canvas0" style="display:none;"></canvas> - <canvas class="preview" id="canvas1"></canvas> - </div> - <hr class="main__seperator" /> - </div> - <div class="main__controls"> - <button id="start">Start</button> - <button id="stop" disabled>Stop</button> - </div> - </main> - <script> - - const debugging = 0; - - const combine_rects_x_min_distance = 24; - const combine_rects_y_min_distance = 4; - - const scroll_detection_x_min = -64; - const scroll_detection_x_max = 64; - const scroll_detection_y_min = -64; - const scroll_detection_y_max = 64; - const scroll_detection_r_max = 16; - const scroll_detection_min_width = 256; - const scroll_detection_min_height = 256; - const scroll_detection_min_stripe_width = 16; - const scroll_detection_min_stripe_height = 16; - const scroll_detection_point_divisor = 1024; - const scroll_detection_length_divisor = 8; - const scroll_detection_same_color_threshold = 0.995; - const scroll_detection_hit_threshold = 0.995; - - let video = document.getElementById ("video"); - const canvas0 = document.getElementById ("canvas0"); - const canvas1 = document.getElementById ("canvas1"); - let ctx0 = undefined; - let ctx1 = undefined; - - function hideElement (el) - { - el.classList.add ('hidden'); - } - - function showElement (el) - { - el.classList.remove ('hidden'); - } - - const displayMediaOptions = { video: { cursor: "always" }, audio: false }; - - async function startCapture () - { - video.srcObject = await navigator.mediaDevices.getDisplayMedia (displayMediaOptions); - showElement (document.getElementById ('preview-section')); - } - - function stopCapture (evt) - { - hideElement (document.getElementById ('preview-section')); - let tracks = video.srcObject.getTracks (); - tracks.forEach ( - function (track) - { - track.stop (); - }); - video.srcObject = null; - } - - const startButton = document.getElementById ("start"); - const stopButton = document.getElementById ("stop"); - - startButton.addEventListener ("click", - function (evt) - { - startCapture (); - startButton.setAttribute ('disabled', ''); - stopButton.removeAttribute ('disabled'); - }, - false); - - stopButton.addEventListener ("click", - function (evt) - { - stopCapture (); - start.removeAttribute ('disabled'); - stopButton.setAttribute ('disabled', ''); - window.location.reload(); - }, - false); - - let socket = undefined; - - function buf2hex (buffer) - { - const b = new Uint8Array (buffer); - const hexdump = Array.prototype.map.call (b, - function (x) - { - return ("00" + x.toString (16)).slice (-2); - }).join (" "); - return hexdump + " (" + buffer.byteLength.toString () - + (buffer.byteLength == 1 ? " byte)" : " bytes)"); - } - - let wScreen = 0; - let hScreen = 0; - - const rfb_padding = 0; - const rfb_encoding_raw = 0; - const rfb_encoding_copyrect = 1; - const rfb_encoding_rre = 2; - const rfb_encoding_tight = 7; - const rfb_name = "wc:6"; - const rfb_name_length = rfb_name.length; - - class Rect - { - constructor (x, y, w, h, encoding) - { - this.x = x; - this.y = y; - this.w = w; - this.h = h; - this.encoding = encoding; - } - - send () - { - const buffer = new ArrayBuffer (12); - const b = new Uint8Array (buffer); - b[0] = this.x >>> 8; - b[1] = this.x & 0xff; - b[2] = this.y >>> 8; - b[3] = this.y & 0xff; - b[4] = this.w >>> 8; - b[5] = this.w & 0xff; - b[6] = this.h >>> 8; - b[7] = this.h & 0xff; - b[8] = this.encoding >>> 24 - b[9] = (this.encoding >>> 16) & 0xff; - b[10] = (this.encoding >>> 8) & 0xff; - b[11] = this.encoding & 0xff; - if (debugging) - console.log ("sending Rect object: " + buf2hex (buffer)); - socket.send (buffer); - } - } - - class RawRect extends Rect - { - constructor (x, y, w, h, data) - { - super (x, y, w, h, rfb_encoding_raw); - this.data = data; - } - - send () - { - super.send (); - if (debugging) - console.log ("sending RawRect object data (" + this.data.byteLength.toString () + " pixel bytes)"); - socket.send (this.data); - } - } - - class ScrollRect extends Rect - { - constructor (x, y, w, h, dx, dy) - { - super (x, y, w, h, rfb_encoding_copyrect); - this.dx = dx; - this.dy = dy; - } - - send () - { - super.send (); - const buffer = new ArrayBuffer (4); - const b = new Uint8Array (buffer); - b[0] = this.dx >>> 8; - b[1] = this.dx & 0xff; - b[2] = this.dy >>> 8; - b[3] = this.dy & 0xff; - if (debugging) - console.log ("sending ScrollRect object: " + buf2hex (buffer)); - socket.send (buffer); - } - } - - class SolidRect extends Rect - { - constructor (x, y, w, h, color) - { - super (x, y, w, h, rfb_encoding_rre); - this.color = color; - } - - send () - { - super.send (); - const buffer = new ArrayBuffer (8); - const b = new Uint8Array (buffer); - b[0] = 0; // number of sub-rectangles - b[1] = 0; - b[2] = 0; - b[3] = 0; - b[4] = this.color >>> 16; - b[5] = (this.color >>> 8) & 0xff; - b[6] = this.color & 0xff; - b[7] = rfb_padding; - if (debugging) - console.log ("sending SolidRect object: " + buf2hex (buffer)); - socket.send (buffer); - } - } - - class TightRect extends Rect - { - constructor (x, y, w, h, data) - { - super (x, y, w, h, rfb_encoding_tight); - this.data = data; - } - - send () - { - super.send (); - const data_length = this.data.byteLength; - let data_length_length = undefined; - if (data_length <= 0x7f) - data_length_length = 1; - else if (data_length <= 0x3fff) - data_length_length = 2; - else - data_length_length = 3; - const buffer = new ArrayBuffer (1 + data_length_length); - const b = new Uint8Array (buffer); - b[0] = 0x90; // Tight-JPEG - if (data_length <= 0x7f) - b[1] = data_length & 0x7f; - else if (data_length <= 0x3fff) - { - b[1] = (data_length & 0x7f) | 0x80; - b[2] = (data_length & 0x3f80) >>> 7; - } - else - { - b[1] = (data_length & 0x7f) | 0x80; - b[2] = ((data_length & 0x3f80) >>> 7) | 0x80; - b[3] = (data_length & 0x3fc000) >>> 14; - } - if (debugging) - console.log ("sending TightRect object header: " + buf2hex (buffer)); - socket.send (buffer); - if (debugging) - console.log ("sending TightRect object data (" + data_length.toString () + " pixel bytes)"); - socket.send (this.data); - } - } - - let rects = new Array (); - - class ScrollParams - { - constructor (x, y, w, h, dx, dy) - { - this.x = x; - this.y = y; - this.w = w; - this.h = h; - this.dx = dx; - this.dy = dy; - } - } - - let scrollRects = new Array (); - - let rfb_bits_per_pixel = 32; - let rfb_depth = 24; - let rfb_big_endian_flag = 0; - let rfb_true_color_flag = 1; - let rfb_red_maximum = 255; - let rfb_green_maximum = 255; - let rfb_blue_maximum = 255; - let rfb_red_shift = 24; - let rfb_green_shift = 16; - let rfb_blue_shift = 8; - - let isFirstFrame = 1; - let processing = 0; - const rfb_aborted = 42; - - function fillRectBuffer (px, x, y, w, h, color) - { - for (let yy = 0; yy < h; yy++) - { - let o = (y + yy) * wScreen + x; - for (let xx = 0; xx < w; xx++) - px[o++] = color; - } - } - - function scrollRectBuffer (px, x, y, w, h, dx, dy) - { - const ww = w - Math.abs (dx); - const hh = h - Math.abs (dy); - const do0 = dy > 0 ? -wScreen : wScreen; - let o10 = (dy > 0 ? y + h - 1 : y) * wScreen + (dx > 0 ? x + w - 1 : x); - let o00 = ((dy > 0 ? y + h - 1 : y) - dy) * wScreen + (dx > 0 ? x + w - 1 : x) - dx; - for (let i = 0; i < hh; i++) - { - o1 = o10; - o0 = o00; - if (dx > 0) - for (let j = 0; j < ww; j++) - px[o1--] = px[o0--]; - else - for (let j = 0; j < ww; j++) - px[o1++] = px[o0++]; - o10 += do0; - o00 += do0; - } - } - - function sleep (delay) - { - return new Promise ( - function (resolve) - { - setTimeout (resolve, delay) - }); - } - - function canvasToBlob (canvas, type, options) - { - return new Promise ( - function (resolve) - { - canvas.toBlob (resolve, type, options); - }); - } - - function pushRectRaw (x, y, w, h) - { - const data_length = w * h * 4; - const buffer = new ArrayBuffer (data_length); - const b = new Uint8Array (buffer); - const id1 = ctx1.getImageData (x, y, w, h); - const px1 = new Uint8Array (id1.data.buffer); - let bo = 0; - let po = 0; - for (let yy = 0; yy < h; yy++) - for (let xx = 0; xx < w; xx++) - { - b[bo + 0] = px1[po + 2]; - b[bo + 1] = px1[po + 1]; - b[bo + 2] = px1[po + 0]; - b[bo + 3] = rfb_padding; - bo += 4; - po += 4; - } - if (debugging) - console.log ("storing RawRect (" + data_length.toString () + " pixel bytes)"); - rects.push (new RawRect (x, y, w, h, buffer)); - } - - function pushRectScroll (x, y, w, h, dx, dy) - { - if (debugging) - console.log ("storing ScrollRect"); - rects.push (new ScrollRect (x, y, w, h, dx, dy)); - } - - function pushRectSolid (x, y, w, h, color) - { - if (debugging) - console.log ("storing SolidRect"); - rects.push (new SolidRect (x, y, w, h, color)); - } - - async function pushRectTight (x, y, w, h) - { - if (debugging) - console.log ("pushRectTight: x = " + x.toString () + ", y = " + y.toString () + ", w = " + w.toString () + ", h = " + h.toString ()); - let canvas = undefined; - if (x == 0 && y == 0 && w == wScreen && h == hScreen) - canvas = canvas1; - else - { - canvas = document.createElement ('canvas'); - canvas.width = w; - canvas.height = h; - canvas.getContext ('2d').drawImage (canvas1, -x, -y); - } - // if (debugging) - // console.log ("calling canvasToBlob()"); - const blob = await canvasToBlob (canvas, "image/jpeg"); - // if (debugging) - // console.log ("calling blob.arrayBuffer()"); - const jpeg_buffer = await blob.arrayBuffer (); - // if (debugging) - // console.log ("storing TightRect (" + jpeg_buffer.byteLength.toString () + " instead of " + (w * h * 4).toString () + " pixel bytes)"); - rects.push (new TightRect (x, y, w, h, jpeg_buffer)); - } - - function detectScrolling (px0, px1, x, y, w, h) - { - if (debugging) - console.log ("scrolling: detection started"); - const pixels = w * h; - const points = Math.floor (pixels / scroll_detection_point_divisor); - const qxBuffer = new ArrayBuffer (2 * points); - const qx = new Uint16Array (qxBuffer); - const qyBuffer = new ArrayBuffer (2 * points); - const qy = new Uint16Array (qyBuffer); - const qc1Buffer = new ArrayBuffer (4 * points); - const qc1 = new Uint32Array (qc1Buffer); - const qc0Buffer = new ArrayBuffer (4 * points); - const qc0 = new Uint32Array (qc0Buffer); - for (let i = 0; i < points; i++) - { - const p = Math.floor (Math.random () * pixels); - // I lost a whole day to find out that p / w is a floating point division, - // which causes crazy things to happen when we use yy as an array index. - // I hate JavaScript. -- PG 20201222 - const yy = Math.floor (p / w); - const xx = p % w; - const o = (y + yy) * wScreen + x + xx; - qy[i] = yy; - qx[i] = xx; - qc1[i] = px1[o]; - qc0[i] = px0[o]; - } - const xDensityBuffer = new ArrayBuffer (2 * w); - const xDensity = new Uint16Array (xDensityBuffer); - const yDensityBuffer = new ArrayBuffer (2 * h); - const yDensity = new Uint16Array (yDensityBuffer); - for (let xx = 0; xx < w; xx++) - { - xDensity[xx] = 0; - for (let i = 0; i < points; i++) - if (qx[i] < xx && qc1[i] != qc0[i]) - xDensity[xx]++; - } - const lx = Math.floor (w / scroll_detection_length_divisor); - const halflx = Math.floor (lx / 2); - const averageDensity = Math.floor (xDensity[w - 1] / scroll_detection_length_divisor); - if (debugging) - console.log ("scrolling: averageDensity =", averageDensity); - let x0 = 0; - while (x0 + lx < w) - { - while (x0 + lx < w && xDensity[x0 + lx] - xDensity[x0] < averageDensity) - x0++; - let x1 = x0; - while (x1 + lx < w && xDensity[x1 + lx] - xDensity[x1] >= averageDensity) - x1++; - if (x1 - x0 >= scroll_detection_min_stripe_width) - { - if (debugging) - console.log ("scrolling: vertical stripe:", x0 + halflx, x1 - x0); - for (let yy = 0; yy < h; yy++) - { - yDensity[yy] = 0; - for (let i = 0; i < points; i++) - if (qy[i] < yy && qc1[i] != qc0[i] && qx[i] >= x0 && qx[i] < x1) - yDensity[yy]++; - - } - const ly = Math.floor (h / scroll_detection_length_divisor); - const halfly = Math.floor (ly / 2); - const averageDensity = Math.floor (yDensity[h - 1] / scroll_detection_length_divisor); - if (debugging) - console.log ("scrolling: averageDensity =", averageDensity); - let y0 = 0; - while (y0 + ly < h) - { - while (y0 + ly < h && yDensity[y0 + ly] - yDensity[y0] < averageDensity) - y0++; - let y1 = y0; - while (y1 + ly < h && yDensity[y1 + ly] - yDensity[y1] >= averageDensity) - y1++; - if (y1 - y0 >= scroll_detection_min_stripe_height) - { - if (debugging) - console.log ("scrolling: horizontal stripe:", y0 + halfly, y1 - y0); - let sx = x0 + halflx; - let sy = y0 + halfly; - let sw = x1 - x0; - let sh = y1 - y0; - if (debugging) - { - console.log ("scrolling: checking area:", sx, sy, sw, sh); - console.log ("scrolling: " + scrollRects.length.toString () + " rects"); - } - const redundant = scrollRects.find ( - function (r) - { - if (debugging) - console.log ("scrolling: checking rect", sx, sy, sw, sh, "against", r.x, r.y, r.w, r.h, r.dx, r.dy); - if (sx + sw <= r.x || sx >= r.x + r.w) - return 0; - else if (sy + sh <= r.y || sy >= r.y + r.h) - return 0; - else - { - if (debugging) - console.log ("scrolling: new rect", sx, sy, sw, sh, "is redundant with", r.x, r.y, r.w, r.h, r.dx, r.dy); - return 1; - } - }); - if (!redundant) - { - const color = new Array; - for (let i = 0; i < points; i++) - if (qx[i] >= sx && qx[i] < sx + sw && qy[i] >= sy && qy[i] < sy + sh) - color.push (qc1[i]); - const points_inside = color.length; - color.sort ( - function (a, b) - { - return a - b; - }); - let color_abundance = 1; - let i0 = 0; - let i1 = 1; - while (i1 < points_inside) - { - if (color[i1] != color[i0]) - { - const a = i1 - i0; - if (a > color_abundance) - { - color_abundance = a; - i0 = i1; - } - } - i1++ - } - const a = i1 - i0; - if (a > color_abundance) - color_abundance = a; - if (debugging) - console.log ("scrolling: color_abundance = " + color_abundance.toString () + ", points_inside = " + points_inside.toString () - + ", threshold = " + (points_inside * scroll_detection_same_color_threshold).toString ()); - if (color_abundance < points_inside * scroll_detection_same_color_threshold) - { - let min_mishits = points_inside; - let sdx = 0; - let sdy = 0; - // We intentionally include the case dx == dy == 0. - // Without this, we get false positives where unchanged content - // is scrolled by 1 pixel because the "repair" after the scrolling - // is minimal. - for (let dy = scroll_detection_y_max; dy >= scroll_detection_y_min && min_mishits > 0; dy--) - for (let dx = scroll_detection_x_max; dx >= scroll_detection_x_min && min_mishits > 0; dx--) - if ((dx == 0 || dy == 0 || dx * dx + dy * dy < scroll_detection_r_max * scroll_detection_r_max)) - { - let i = 0; - let mishits = 0; - while (i < points && mishits < min_mishits) - { - if (qx[i] >= sx && qx[i] < sx + sw && qy[i] >= sy && qy[i] < sy + sh) - { - const o0 = (y + qy[i] - dy) * wScreen + x + qx[i] - dx; - if (o0 >= 0 && o0 < pixels && qc1[i] != px0[o0]) - mishits++; -// if (i < 10) -// console.log ("scrolling: point:", qx[i], qy[i], "rect:", sx, sx + sw, sy, sy + sh, -// "o0, px:", o0, qc1[i], px0[o0]); - } - i++; - } - if (mishits < min_mishits) - { - min_mishits = mishits; - sdx = dx; - sdy = dy; - } - if (debugging) - console.log ("scrolling: dx = " + dx.toString () + ", dy = " + dy.toString () - + ", mishits = " + mishits.toString () + ", points_inside = " + points_inside.toString ()); - } - if (debugging) - console.log ("scrolling: sdx = " + sdx.toString () + ", sdy = " + sdy.toString () - + ", min_mishits = " + min_mishits.toString () + ", points_inside = " + points_inside.toString ()); - if (min_mishits < points_inside * (1 - scroll_detection_hit_threshold)) - { - if (debugging) - console.log ("scrolling: expanding rect:", sx, sy, sw, sh, sdx, sdy); - let xx = sx - 1; - let scrollable = 1; - while (xx > 0 && scrollable) - { - let yy = sy; - let scrollable_points = 0; - let o1 = (y + yy) * wScreen + x + xx; - let o0 = (y + yy - sdy) * wScreen + x + xx - sdx; - while (yy < sy + sh) - { - if (px1[o1] == px0[o0]) - scrollable_points++; - yy++; - o1 += wScreen; - o0 += wScreen; - } - if (scrollable_points < sh * scroll_detection_hit_threshold) - scrollable = 0; - xx--; - } - if (!scrollable) - sx = xx + 1; - else - sx = xx; - xx = sx + sw; - scrollable = 1; - while (xx < w && scrollable) - { - let yy = sy; - let scrollable_points = 0; - let o1 = (y + yy) * wScreen + x + xx; - let o0 = (y + yy - sdy) * wScreen + x + xx - sdx; - while (yy < sy + sh) - { - if (px1[o1] == px0[o0]) - scrollable_points++; - yy++; - o1 += wScreen; - o0 += wScreen; - } - if (scrollable_points < sh * scroll_detection_hit_threshold) - scrollable = 0; - xx++; - } - if (!scrollable) - sw = xx - sx - 1; - else - sw = xx - sx; - let yy = sy - 1; - scrollable = 1; - while (yy > 0 && scrollable) - { - let xx = sx; - let scrollable_points = 0; - let o1 = (y + yy) * wScreen + x + xx; - let o0 = (y + yy - sdy) * wScreen + x + xx - sdx; - while (xx < sx + sw) - { - if (px1[o1] == px0[o0]) - scrollable_points++; - xx++; - o1++; - o0++; - } - if (scrollable_points < sw * scroll_detection_hit_threshold) - scrollable = 0; - yy--; - } - if (!scrollable) - sy = yy + 1; - else - sy = yy; - yy = sy + sh; - scrollable = 1; - while (yy < h && scrollable) - { - let xx = sx; - let scrollable_points = 0; - let o1 = (y + yy) * wScreen + x + xx; - let o0 = (y + yy - sdy) * wScreen + x + xx - sdx; - while (xx < sx + sw) - { - if (px1[o1] == px0[o0]) - scrollable_points++; - xx++; - o1++; - o0++; - } - if (scrollable_points < sw * scroll_detection_hit_threshold) - scrollable = 0; - yy++; - } - if (!scrollable) - sh = yy - sy - 1; - else - sh = yy - sy; -// if (debugging) - console.log ("scrolling: pushing rect:", sx, sy, sw, sh, sdx, sdy); - scrollRects.forEach ( - function (r) - { - if (!(sx + sw <= r.x || sx >= r.x + r.w || sy + sh <= r.y || sy >= r.y + r.h)) - { - if (debugging) - console.log ("scrolling: neutralizing redundant rect:", r.x, r.y, r.w, r.h, r.dx, r.dy); - r.dx = 0; - r.dy = 0; - } - }); - scrollRects.push (new ScrollParams (sx, sy, sw, sh, sdx, sdy)); - } - } - } - } - y0 = y1; - } - } - x0 = x1; - } - scrollRects.forEach ( - function (r) - { - if (r.dx != 0 || r.dy != 0) - { - const adx = Math.abs (r.dx); - const ady = Math.abs (r.dy); - if (r.w > adx && r.h > ady) - { -// pushRectSolid (r.x, r.y, r.w, r.h, 0xff0000); -// fillRectBuffer (px0, r.x, r.y, r.w, r.h, 0xffff0000); - const xx = r.dx > 0 ? r.x + r.dx : r.x; - const yy = r.dy > 0 ? r.y + r.dy : r.y; - pushRectScroll (xx, yy, r.w - adx, r.h - ady, xx - r.dx, yy - r.dy); - scrollRectBuffer (px0, r.x, r.y, r.w, r.h, r.dx, r.dy); - } - } - }); - if (debugging) - console.log ("scrolling: " + scrollRects.length.toString () - + " rectangle" + (scrollRects.length == 1 ? "" : "s") + " detected"); - scrollRects.length = 0; - } - - function determineBackgroundColor (px, x, y, w, h) - { - const pixels = w * h; - const max_points = Math.floor (pixels / 16); - const points = max_points > 256 ? 256 : max_points; - const color = new Array (points); - for (let i = 0; i < points; i++) - { - const p = Math.floor (Math.random () * pixels); - const yy = Math.floor (p / w); - const xx = p % w; - const o = yy * wScreen + x; - color[i] = px[o]; - } - color.sort ( - function (a, b) - { - return a - b; - }); - let background_index = 0; - let background_abundance = 1; - let i0 = 0; - let i1 = 1; - while (i1 < points) - { - if (color[i1] != color[i0]) - { - const a = i1 - i0; - if (a > background_abundance) - { - background_index = i0; - background_abundance = a; - i0 = i1; - } - } - i1++ - } - const a = i1 - i0; - if (a > background_abundance) - background_index = i0; - return color[background_index]; - } - - async function updateFullRectangle (x, y, w, h) - { - if (w * h * 4 > 1024) - await pushRectTight (x, y, w, h); - else - pushRectRaw (x, y, w, h); - } - - async function updateInnerStructureHorizontal (px0, px1, x, y, w, h, final) - { - // if (debugging) - // console.log ("updateInnerStructureHorizontal: x = " + x.toString () + ", y = " + y.toString () - // + ", w = " + w.toString () + ", h = " + h.toString () + ", final = ", final.toString ()); - const empty = new Array (w); - const pixel_unchanged = 0x01000000; - const same_color = 0x2000000; - let xx = 0; - while (xx < w) - { - let yy = 0; - let o = y * wScreen + x + xx; - const start_color = px1[o]; - empty[xx] = (start_color & 0x00ffffff) | (pixel_unchanged | same_color); - while (yy < h && empty[xx] & (pixel_unchanged | same_color)) - { - if (px1[o] != px0[o]) - empty[xx] &= ~pixel_unchanged; - if (px1[o] != start_color) - empty[xx] &= ~same_color; - o += wScreen; - yy++; - } - xx++; - } - let x0 = 0; - while (x0 < w && empty[x0] & (pixel_unchanged | same_color)) - x0++; - while (x0 < w) - { - while (x0 < w && !(empty[x0] & (pixel_unchanged | same_color))) - x0++; - let x1 = x0; - while (x1 < w && empty[x1] & (pixel_unchanged | same_color)) - x1++; - if (x1 < w && x1 - x0 < combine_rects_x_min_distance) - for (let xx = x0; xx < x1; xx++) - empty[xx] &= ~(pixel_unchanged | same_color); - x0 = x1; - } - let nothing_empty = 1; - for (let xx = 0; xx < w; xx++) - if (empty[xx] & (pixel_unchanged | same_color)) - nothing_empty = 0; - // if (debugging) - // console.log ("nothing_empty = " + nothing_empty.toString () + ", empty =", empty); - x0 = 0; - while (x0 < w) - { - let x1 = x0; - if (empty[x0] & pixel_unchanged) - { - while (x1 < w && empty[x1] & pixel_unchanged) - x1++; - } - else if (empty[x0] & same_color) - { - while (x1 < w && empty[x1] & same_color && (empty[x1] & 0x00ffffff) == (empty[x0] & 0x00ffffff)) - x1++; - x1--; - while (x1 > x0 && empty[x1] & pixel_unchanged) - x1--; - x1++; - const start_color = empty[x0] | 0xff000000; - pushRectSolid (x + x0, y, x1 - x0, h, debugging ? start_color | 0x00ffff : start_color); - fillRectBuffer (px0, x + x0, y, x1 - x0, h, start_color); - } - else - { - while (x1 < w && !(empty[x1] & (pixel_unchanged | same_color))) - x1++; - if (final) - await updateFullRectangle (x + x0, y, x1 - x0, h); - else - await updateInnerStructureVertical (px0, px1, x + x0, y, x1 - x0, h, nothing_empty); - } - x0 = x1; - } - } - - async function updateInnerStructureVertical (px0, px1, x, y, w, h, final) - { - // if (debugging) - // console.log ("updateInnerStructureVertical: x = " + x.toString () + ", y = " + y.toString () - // + ", w = " + w.toString () + ", h = " + h.toString () + ", final = ", final.toString ()); - const empty = new Array (h); - const pixel_unchanged = 1; - const same_color = 2; - let yy = 0; - while (yy < h) - { - let xx = 0; - let o = (y + yy) * wScreen + x; - const start_color = px1[o]; - empty[yy] = (start_color & 0x00ffffff) | (pixel_unchanged | same_color); - while (xx < w && empty[yy] & (pixel_unchanged | same_color)) - { - if (px1[o] != px0[o]) - empty[yy] &= ~pixel_unchanged; - if (px1[o] != start_color) - empty[yy] &= ~same_color; - o++; - xx++; - } - yy++; - } - let y0 = 0; - while (y0 < h && empty[y0] & (pixel_unchanged | same_color)) - y0++; - while (y0 < h) - { - while (y0 < h && !(empty[y0] & (pixel_unchanged | same_color))) - y0++; - let y1 = y0; - while (y1 < h && empty[y1] & (pixel_unchanged | same_color)) - y1++; - if (y1 < h && y1 - y0 < combine_rects_y_min_distance) - for (let yy = y0; yy < y1; yy++) - empty[yy] &= ~(pixel_unchanged | same_color); - y0 = y1; - } - let nothing_empty = 1; - for (let yy = 0; yy < h; yy++) - if (empty[yy] & (pixel_unchanged | same_color)) - nothing_empty = 0; - // if (debugging) - // console.log ("nothing_empty = " + nothing_empty.toString () + ", empty =", empty); - y0 = 0; - while (y0 < h) - { - let y1 = y0; - if (empty[y0] & pixel_unchanged) - { - while (y1 < h && empty[y1] & pixel_unchanged) - y1++; - } - else if (empty[y0] & same_color) - { - while (y1 < h && empty[y1] & same_color && (empty[y1] & 0x00ffffff) == (empty[y0] & 0x00ffffff)) - y1++; - y1--; - while (y1 > y0 && empty[y1] & pixel_unchanged) - y1--; - y1++; - const start_color = empty[y0] | 0xff000000; - pushRectSolid (x, y + y0, w, y1 - y0, debugging ? start_color | 0xffff00 : start_color); - fillRectBuffer (px0, x, y + y0, w, y1 - y0, start_color); - } - else - { - while (y1 < h && !(empty[y1] & (pixel_unchanged | same_color))) - y1++; - if (final) - await updateFullRectangle (x, y + y0, w, y1 - y0); - else - await updateInnerStructureHorizontal (px0, px1, x, y + y0, w, y1 - y0, nothing_empty); - } - y0 = y1; - } - } - - async function decomposeRect (px0, px1, x, y, w, h) - { - await updateInnerStructureVertical (px0, px1, x, y, w, h, 0); - } - - async function rfbFramebufferUpdate (isIncremental, x, y, w, h) - { - if (debugging) - console.log ("rfbFramebufferUpdate: isIncremental = " + isIncremental.toString () - + ", x = " + x.toString () + ", y = " + h.toString () - + ", w = " + w.toString () + ", h = " + h.toString ()); - let id1 = ctx1.getImageData (x, y, w, h); - ctx0.putImageData (id1, x, y, x, y, w, h); - const id0 = ctx0.getImageData (0, 0, wScreen, hScreen); - const px0 = new Uint32Array (id0.data.buffer); - ctx1.drawImage (video, 0, 0, wScreen, hScreen); - id1 = ctx1.getImageData (0, 0, wScreen, hScreen); - let px1 = new Uint32Array (id1.data.buffer); - if (!isIncremental) - { - const color = determineBackgroundColor (px1, x, y, w, h); - if (debugging) - console.log ("background color = " + color.toString ()); - pushRectSolid (x, y, w, h, debugging ? color | 0x7f00ff : color); - fillRectBuffer (px0, x, y, w, h, color); - } - do - { - const length = px0.length; - let o = 0; - while (o < length && px0[o] == px1[o]) - o++; - if (o < length) - { -// if (isIncremental && w >= scroll_detection_min_width && h >= scroll_detection_min_height) -// detectScrolling (px0, px1, x, y, w, h); - await decomposeRect (px0, px1, x, y, w, h); - } - if (rects.length == 0) - { - await sleep (100); - ctx1.drawImage (video, 0, 0, wScreen, hScreen); - id1 = ctx1.getImageData (x, y, w, h); - px1 = new Uint32Array (id1.data.buffer); - } - } - while (rects.length == 0); - } - - function rfbReceivePixelFormat (buffer, offset) - { - if (debugging) - console.log ("received: SetPixelFormat"); - const b = new Uint8Array (buffer); - rfb_bits_per_pixel = b[4]; - rfb_depth = b[5]; - rfb_big_endian_flag = b[6]; - rfb_true_color_flag = b[7]; - rfb_red_maximum = b[8] << 8 + b[9]; - rfb_green_maximum = b[10] << 8 + b[11]; - rfb_blue_maximum = b[12] << 8 + b[13]; - rfb_red_shift = b[14]; - rfb_green_shift = b[15]; - rfb_blue_shift = b[16]; - return 20; - } - - function rfbReceiveEncodings (buffer, offset) - { - if (debugging) - console.log ("received: SetEncodings"); - const b = new Uint8Array (buffer); - const encodings = b[offset + 2] << 8 + b[offset + 3]; - return 4 + 4 * encodings; - } - - function rfbAbort () - { - if (debugging) - console.log ("Aborting RFB transmission ..."); - processing += rfb_aborted; - } - - async function rfbFramebufferUpdateRequest (buffer, offset) - { - if (debugging) - console.log ("received: FramebufferUpdateRequest"); - if (processing) - { -// if (debugging) - if (processing >= rfb_aborted) - console.log ("aborted"); - else - console.log ("already being processed"); - } - else - { - processing++; - let b = new Uint8Array (buffer); - let isIncremental = b[1]; - const x = b[2] * 256 + b[3]; - const y = b[4] * 256 + b[5]; - const w = b[6] * 256 + b[7]; - const h = b[8] * 256 + b[9]; - if (debugging) - { - console.log ("FramebufferUpdateRequest: Initiating processing ..."); - console.log ("wScreen = ", wScreen, ", hScreen = ", hScreen + ", w = ", w, ", h = ", h); - } - rects.length = 0; - if (processing < rfb_aborted) - { - if (isFirstFrame) - { - await rfbFramebufferUpdate (0, 0, 0, wScreen, hScreen); - isFirstFrame = 0; - } - else if (isIncremental) - await rfbFramebufferUpdate (1, x, y, w, h); - else - await rfbFramebufferUpdate (0, x, y, w, h); - if (debugging) - console.log ("FramebufferUpdateRequest: Processing completed. Sending data ... (" - + rects.length.toString () - + " rectangle" + (rects.length != 1 ? "s" : "") + ")"); - const header_buffer = new ArrayBuffer (4); - b = new Uint8Array (header_buffer); - const num_rects = rects.length; - b[0] = 0; - b[1] = rfb_padding; - b[2] = num_rects >>> 8; - b[3] = num_rects & 0xff; - if (debugging) - console.log ("sending rfbFramebufferUpdate header: " + buf2hex (header_buffer)); - socket.send (header_buffer); - rects.forEach ( - function sendIt (r) - { - r.send (); - }); - } - processing--; - } - return 10; - } - - function rfbReceiveKeyEvent (buffer, offset) - { - if (debugging) - console.log ("received: KeyEvent"); - return 8; - } - - function rfbReceivePointerEvent (buffer, offset) - { - if (debugging) - console.log ("received: PointerEvent"); - return 6; - } - - function rfbReceiveCutText (buffer, offset) - { - if (debugging) - console.log ("received: ClientCutText"); - const b = new Uint8Array (buffer); - const length = b[offset + 4] << 24 + b[offset + 5] << 16 + b[offset + 6] << 8 + b[offset + 7]; - return 8 + length; - } - - function rfbServer (event) - { - if (debugging) - console.log ("received: " + buf2hex (event.data)); - const b = new Uint8Array (event.data); - let offset = 0; - while (offset < event.data.byteLength) - { - if (debugging) - console.log ("received RFB packet type " + b[offset].toString ()); - if (b[offset] == 0) - offset += rfbReceivePixelFormat (event.data, offset); - else if (b[offset] == 2) - offset += rfbReceiveEncodings (event.data, offset); - else if (b[offset] == 3) - offset += rfbFramebufferUpdateRequest (event.data, offset); - else if (b[offset] == 4) - offset += rfbReceiveKeyEvent (event.data, offset); - else if (b[offset] == 5) - offset += rfbReceivePointerEvent (event.data, offset); - else if (b[offset] == 6) - offset += rfbReceiveCutText (event.data, offset); - else - { - if (debugging) - console.log ("unknown RFB packet"); - offset = event.data.byteLength; - } - } - } - - function rfbFramebufferHandshake (event) - { - if (debugging) - console.log ("received: " + buf2hex (event.data)); - socket.removeEventListener ("message", rfbFramebufferHandshake); - socket.addEventListener ("message", rfbServer); - const buffer = new ArrayBuffer (24 + rfb_name_length); - const b = new Uint8Array (buffer); - b[0] = wScreen >>> 8; - b[1] = wScreen & 0xff; - b[2] = hScreen >>> 8; - b[3] = hScreen & 0xff; - b[4] = rfb_bits_per_pixel; - b[5] = rfb_depth; - b[6] = rfb_big_endian_flag; - b[7] = rfb_true_color_flag; - b[8] = rfb_red_maximum >>> 8; - b[9] = rfb_red_maximum & 0xff; - b[10] = rfb_green_maximum >>> 8; - b[11] = rfb_green_maximum & 0xff; - b[12] = rfb_blue_maximum >>> 8; - b[13] = rfb_blue_maximum & 0xff; - b[14] = rfb_red_shift; - b[15] = rfb_green_shift; - b[16] = rfb_blue_shift; - b[17] = rfb_padding; - b[18] = rfb_padding; - b[19] = rfb_padding; - b[20] = rfb_name_length >>> 24; - b[21] = rfb_name_length >>> 16; - b[22] = rfb_name_length >>> 8; - b[23] = rfb_name_length & 0xff; - for (let i = 0; i < rfb_name_length; i++) - b[24 + i] = rfb_name[i]; - if (debugging) - console.log ("sending framebuffer parameters: " + buf2hex (buffer)); - socket.send (buffer); - } - - function rfbAuthenticate (event) - { - if (debugging) - console.log ("received: " + buf2hex (event.data)); - socket.removeEventListener ("message", rfbAuthenticate); - socket.addEventListener ("message", rfbFramebufferHandshake); - if (debugging) - console.log ("sending: 00 00 00 00"); - const buffer = new ArrayBuffer (4); - const b = new Uint8Array (buffer); - b[0] = 0; - b[1] = 0; - b[2] = 0; - b[3] = 0; - socket.send (buffer); - } - - function rfbSecurityHandshake (event) - { - if (debugging) - console.log ("received: " + buf2hex (event.data)); - socket.removeEventListener ("message", rfbSecurityHandshake); - socket.addEventListener ("message", rfbAuthenticate); - if (debugging) - console.log ("sending: 01 01"); - const buffer = new ArrayBuffer (2); - const b = new Uint8Array (buffer); - b[0] = 1; - b[1] = 1; - socket.send (buffer); - } - - function rfbConnect (event) - { - socket.addEventListener ("message", rfbSecurityHandshake); - if (debugging) - console.log ("sending: RFB 003.008\\n"); - socket.send ("RFB 003.008\n"); - } - - document.addEventListener ("DOMContentLoaded", - function () - { - video.addEventListener ("play", - function () - { - wScreen = video.videoWidth; - hScreen = video.videoHeight; - canvas1.width = wScreen; - canvas1.height = hScreen; - ctx1 = canvas1.getContext ("2d"); - canvas0.width = wScreen; - canvas0.height = hScreen; - ctx0 = canvas0.getContext ("2d"); - ctx0.beginPath (); - ctx0.rect (0, 0, wScreen, hScreen); - ctx0.fillStyle = "black"; - ctx0.fill (); - if (debugging) - console.log ("Opening WebSocket ..."); - socket = new WebSocket ("wss://streaming.cvh-server.de/websock/wc-6/", ['binary', 'base64']); - socket.binaryType = "arraybuffer"; - socket.addEventListener ("open", rfbConnect); - }, - false); - video.addEventListener ("abort", rfbAbort, false); - video.addEventListener ("emptied", rfbAbort, false); - video.addEventListener ("ended", rfbAbort, false); - video.addEventListener ("error", rfbAbort, false); - video.addEventListener ("pause", rfbAbort, false); - video.addEventListener ("stalled", rfbAbort, false); -// video.addEventListener ("suspend", rfbAbort, false); - }); - - </script> - </body> -</html> diff --git a/20211111/I2C_data_transfer.pdf b/20211111/I2C_data_transfer.pdf deleted file mode 120000 index 73e7ce07770a0599ae1a2aa11e97899767a1f9b0..0000000000000000000000000000000000000000 --- a/20211111/I2C_data_transfer.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/I2C_data_transfer.pdf \ No newline at end of file diff --git a/20211111/SPI_single_slave.pdf b/20211111/SPI_single_slave.pdf deleted file mode 120000 index b51d59e51fffb101086bfaa811370f66436127e7..0000000000000000000000000000000000000000 --- a/20211111/SPI_single_slave.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/SPI_single_slave.pdf \ No newline at end of file diff --git a/20211111/SPI_three_slaves.pdf b/20211111/SPI_three_slaves.pdf deleted file mode 120000 index b2e27257652bbefd9e1c9194ac1f518a43c8aa15..0000000000000000000000000000000000000000 --- a/20211111/SPI_three_slaves.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/SPI_three_slaves.pdf \ No newline at end of file diff --git a/20211111/SPI_three_slaves_daisy_chained.pdf b/20211111/SPI_three_slaves_daisy_chained.pdf deleted file mode 120000 index 967389aeed788b2fed87b2a6b25a5ebd8256978f..0000000000000000000000000000000000000000 --- a/20211111/SPI_three_slaves_daisy_chained.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/SPI_three_slaves_daisy_chained.pdf \ No newline at end of file diff --git a/20211111/es-20211111.pdf b/20211111/es-20211111.pdf deleted file mode 100644 index 168658df09c56105788b010e03d54395ce3157dc..0000000000000000000000000000000000000000 Binary files a/20211111/es-20211111.pdf and /dev/null differ diff --git a/20211111/es-20211111.tex b/20211111/es-20211111.tex deleted file mode 100644 index 1217908cb9f81bb7861a1a680ac5a72fd9318fc4..0000000000000000000000000000000000000000 --- a/20211111/es-20211111.tex +++ /dev/null @@ -1,541 +0,0 @@ -% es-20211111.pdf - Lecture Slides on Embedded Systems -% Copyright (C) 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Peter Gerwinski -% -% This document is free software: you can redistribute it and/or -% modify it either under the terms of the Creative Commons -% Attribution-ShareAlike 3.0 License, or under the terms of the -% GNU General Public License as published by the Free Software -% Foundation, either version 3 of the License, or (at your option) -% any later version. -% -% This document is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with this document. If not, see <http://www.gnu.org/licenses/>. -% -% You should have received a copy of the Creative Commons -% Attribution-ShareAlike 3.0 Unported License along with this -% document. If not, see <http://creativecommons.org/licenses/>. - -% README: Bus-Systeme - -\documentclass[10pt,t]{beamer} - -\usepackage{pgslides} -\usepackage{rotating} -\usepackage{tikz} - -\newcommand{\underconstruction}{% - \begin{picture}(0,0) - \put(9,0.9){\makebox(0,0)[b]{\includegraphics[width=1.5cm]{Zeichen_123.pdf}}} - \put(9,0.6){\makebox(0,0)[t]{\shortstack{Änderungen\\vorbehalten}}} - \end{picture}} - -\title{Eingebettete Systeme} -\author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski} -\date{11.\ November 2021} - -\newcommand{\ItwoC}{I\raisebox{0.5ex}{\footnotesize 2}C} - -\begin{document} - -\maketitleframe - -\nosectionnonumber{\inserttitle} - -\begin{frame} - - \shownosectionnonumber - - \begin{itemize} - \item[\textbf{1}] \textbf{Einführung} - \hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/es}}}% - \item[\textbf{2}] \textbf{Einführung in Unix} - \item[\textbf{3}] \textbf{TCP/IP in der Praxis} - \begin{itemize} - \item[3.0] Vorbereitungen - \item[3.1] IP-Adressen - \item[3.2] MAC-Adressen - \item[3.3] TCP- und UDP-Ports - \item[3.4] TCP-Protokolle - \item[3.5] Routing - \color{medgreen} - \item[3.6] Netzwerkanalyse - \color{black} - \item[3.7] SSH - \color{medgreen} - \item[3.8] X11 und VNC - \item[3.9] Programmierung - \end{itemize} - \item[\textbf{4}] \textbf{Bus-Systeme} - \vspace*{-\smallskipamount} - \item[\textbf{\dots}] - \end{itemize} - -\end{frame} - -\setcounter{section}{2} -\section{TCP/IP in der Praxis} -\setcounter{subsection}{5} -\subsection{Netzwerkanalyse} - -\begin{frame} - - \showsubsection - - \begin{itemize} - \item - \lstinline[style=cmd]{tcpdump} - \item - \lstinline[style=cmd]{wireshark} - \item - \lstinline[style=cmd]{ettercap} - \end{itemize} - -\end{frame} - -\subsection{SSH} - -\begin{frame} - - \showsubsection - - \begin{itemize} - \item - \lstinline[style=cmd]{SSH <Rechner>} - \item - \lstinline[style=cmd]{-C}: Komprimierung - \item - \lstinline[style=cmd]{-L}: lokalen Port auf Remote-Port umleiten - \item - \lstinline[style=cmd]{-R}: Remote-Port auf lokalen Port umleiten - \end{itemize} - -\end{frame} - -\subsection{X11} - -\subsection{X11 und VNC} - -\begin{frame} - - \showsection - \showsubsection - - \begin{itemize} - \item - Grafik-Bildschirm und Eingabegeräte über's Netz - \item - \lstinline[style=cmd]{DISPLAY}-Variable: X-Server: Rechner und Bildschirm - \item - \lstinline[style=cmd]{ssh -X}: X11-Forwarding - \pause - \bigskip - \item - VNC = Virtual Network Computing - \item - VNC-Server stellt Bildschirminhalt zur Verfügung - \begin{itemize} - \item entweder: eigener, virtueller X11-Server - \item oder: ruft Inhalt von anderem (X11-) Bildschirm ab - \end{itemize} - \item - VNC-Client ruft Bildschirminhalt ab und stellt ihn dar - \begin{itemize} - \item z.\,B.\ per X11 - \item z.\,B.\ per Web-Interface: noVNC - \end{itemize} - \end{itemize} - -\end{frame} - -\subsection{Programmierung} - -\begin{frame} - - \showsection - \showsubsection - - \begin{itemize} - \item - Shell-Skripte: \file{nc} (\file{traditional} oder \file{OpenBSD}) - \item - C: Sockets, \lstinline{select()} - \item - C++: Callbacks - \end{itemize} - - \pause - \bigskip - - Aktuelles Beispiel: Programmierung eines VNC-Servers per Web-Interface - - \begin{itemize} - \item - Grundlagen: RFC~6143 - \item - Praxis: Untersuchung mit Wireshark - \item - Implementation: JavaScript, WebSockets, \file{websockify}, Callbacks - \end{itemize} - -\end{frame} - -\nosectionnonumber{\inserttitle} - -\begin{frame} - - \shownosectionnonumber - - \begin{itemize} - \item[\textbf{1}] \textbf{Einführung} - \hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/es}}}% - \item[\textbf{2}] \textbf{Einführung in Unix} - \item[\textbf{3}] \textbf{TCP/IP in der Praxis} - \begin{itemize} - \vspace*{-\medskipamount} - \item[\textbf{\dots}] - \color{medgreen} - \item[3.6] Netzwerkanalyse - \color{black} - \item[3.7] SSH - \color{medgreen} - \item[3.8] X11 und VNC - \item[3.9] Programmierung - \end{itemize} - \item[\textbf{5}] \textbf{Bus-Systeme} - \begin{itemize} - \color{red} - \item[5.1]Was sind Bus-Systeme? - \item[5.2]RS-232 - \item[5.3]\ItwoC\ (TWI) - \item[5.4]SPI - \vspace*{-\smallskipamount} - \item[\textbf{\dots}] - \end{itemize} - \vspace*{-\smallskipamount} - \item[\textbf{\dots}] - \end{itemize} - -\end{frame} - -\section{Bus-Systeme} -\subsection{Was sind Bus-Systeme?} - -\begin{frame} - \showsection - \showsubsection - - \begin{quote} - Ein Bus ist ein System zur Datenübertragung zwischen mehreren - Teilnehmern über einen gemeinsamen Übertragungsweg. - \color{gray} - Findet eine Datenübertragung zwischen zwei Teilnehmern statt, so - müssen die übrigen Teilnehmer schweigen, da sie sich sonst - gegenseitig stören würden. Umgangssprachlich werden mitunter -- - oft aus historischen Gründen – auch Datenübertragungssysteme als - "`Bus"' bezeichnet, die technisch eigentlich eine andere - Topologie besitzen. - - \medskip - - \strut\hfill\url{https://de.wikipedia.org/wiki/Bus_(Datenverarbeitung)} - \end{quote} - Beispiele: - \begin{itemize} - \item - Computer kommuniziert mit Peripherie - \item - Computer kommunizieren (direkt) miteinander - \item - Prozessor kommuniziert mit externem Speicher - \item - Teile eines Prozessors kommunizieren miteinander - \end{itemize} -\end{frame} - -\begin{frame} - \showsection - \showsubsection - Standard-Personal-Computer: - \begin{itemize} - \item - Einsteckkarten: PCI (und Vorgänger) - \item - Festplatten: SATA (und Vorgänger) - \item - USB, FireWire, \dots - \item - Ethernet, CAN-Bus, \dots - \item - WLAN, BlueTooth, IR, \dots - \item - PS/2, RS-232, Centronics - \end{itemize} - - \medskip - - \begin{visibleenv}<2-> - Minimal-Hardware: - \begin{itemize} - \item - RS-232 - \item - \ItwoC\ (TWI) - \item - SPI - \end{itemize} - \end{visibleenv} - - \begin{onlyenv}<1> - \begin{picture}(0,0) - \put(5,1.5){\includegraphics[height=3cm]{motherboard-anschluesse.jpg}} - \end{picture} - \end{onlyenv} - \begin{onlyenv}<2> - \begin{picture}(0,0)(-1.3,-4) - \put(1.8,-4.9){\includegraphics[height=3.5cm]{kompassmodul-an-roboter.jpg}} - \put(6.1,-3.3){\includegraphics[height=4.5cm]{kompassmodul.jpg}} - \put(6.1,1.2){\makebox(0,0)[tr]{\tikz{\draw(0,0)--(-1.9,-3.6);}}} - \put(6.1,-3.3){\makebox(0,0)[br]{\tikz{\draw(0,0)--(-1.8,0.2);}}} - \end{picture} - \end{onlyenv} -\end{frame} - -\begin{frame}[fragile] - - \showsection - \showsubsection - - \vspace*{-\bigskipamount} - \begin{tabbing} - \newterm{Punkt-zu-Punkt}\quad\=\kill - \newterm{seriell} \> jedes Bit einzeln übertragen\\ - \newterm{parallel} \> mehrere Bits gleichzeitig\\[\smallskipamount] - \newterm{synchron} \> Abgleich über Steuerleitung: \newterm{Takt}\\ - \newterm{asynchron} \> Abgleich über Zeitvereinbarungen\\[\smallskipamount] - \newterm{Punkt-zu-Punkt} \> genau zwei Teilnehmer\\ - \newterm{busfähig} \> mehrere Teilnehmer, mit \newterm{Adressierung} - \end{tabbing} - - \begin{itemize} - \item - \ItwoC: seriell, synchron, mit Adressierung - \item - RS-232: seriell, asynchron, Punkt-zu-Punkt - \item - RS-485, USB, CAN: seriell, asynchron, mit Adressierung - \item - SPI: seriell, synchron, Punkt-zu-Punkt oder mit Adressierung - \end{itemize} - -\end{frame} - -\subsection{RS-232} - -\begin{frame} - \showsection - \showsubsection - - seriell - \begin{itemize} - \item - \newterm{TX\/}: 1 Leitung für Daten - \item - \newterm{RX\/}: ggf.\ 1 Leitung für Daten in der anderen Richtung - \item - \newterm{GND\/}: gemeinsame \newterm{Masse} - \item - evtl.\ zusätzliche Steuerleitungen - \end{itemize} - - \medskip - - asynchron - \begin{itemize} - \item - \emph{keine\/} Taktleitung für Abgleich, wann Daten anliegen - \item - Stattdessen: Abgleich über Zeitvereinbarungen - \arrowitem - Jeder Teilnehmer braucht eine eigene Zeitbasis. - \end{itemize} - - \medskip - - Punkt-zu-Punkt - \begin{itemize} - \item - nur 2 Teilnehmer vorgesehen - \end{itemize} -\end{frame} - -\begin{frame} - \showsubsection - \vspace*{-0.35cm} - \begin{center} - \includegraphics[scale=0.9]{rs-232.pdf} - \end{center} -\end{frame} - -\subsection{\protect\ItwoC\ (TWI)} - -\begin{frame} - \showsection - \showsubsection - - \ItwoC\ = Inter-IC; TWI = Two-Wire-Interface - - \medskip - - seriell - \begin{itemize} - \item - \newterm{SDA\/}: 1 Leitung für Daten (in beiden Richtungen) - \item - \newterm{SCL\/}: Taktleitung (Clock) - \item - \newterm{GND\/}: gemeinsame Masse - \item - evtl.\ \newterm{VCC\/}: Stromversorgung für Peripheriegerät - \end{itemize} - - \medskip - - synchron - \begin{itemize} - \item - Abgleich über\\Taktleitung - \begin{picture}(0,0) - \put(0.4,-0.4){\includegraphics[width=9.7cm]{I2C_data_transfer.pdf}} - \end{picture} - \end{itemize} - - \medskip - - busfähig - \begin{itemize} - \item - \newterm{Master\/} initiiert Kommuniation und steuert Taktleitung - \item - erstes gesendetes Byte: \newterm{Adresse\/} des Teilnehmers - \item - 2 Adressen pro Teilnehmer: Lesen/Schreiben - \end{itemize} - \vspace*{-1cm} -\end{frame} - -\subsection{SPI} - -\begin{frame} - \showsection - \showsubsection - - Serial Peripheral Interface - - \medskip - - seriell - \begin{itemize} - \item - \newterm{MOSI\/}: Master Out, Slave In - \item - \newterm{MISO\/}: Master In, Slave Out - \item - \newterm{SCLK\/}: Taktleitung (Clock) - \item - \newterm{$\overline{\text{SS}}$\/}: Slave Select (invertiert) - \item - \newterm{GND\/}: gemeinsame Masse - \item - evtl.\ \newterm{VCC\/}: Stromversorgung für Peripheriegerät - \end{itemize} - - \medskip - - synchron - \begin{itemize} - \item - Abgleich über Taktleitung - \end{itemize} - - \medskip - - busfähig - \begin{itemize} - \item - \newterm{Master\/} initiiert Kommuniation und steuert Taktleitung - \item - \newterm{Slave\/} wird über \newterm{Slave Select\/} ausgewählt - \begin{picture}(0,0)(0,-0.2) - \only<1>{\put(-2.175,2.875){\includegraphics[scale=0.7]{SPI_single_slave.pdf}}} - \only<2>{\put(-2.0,3.0){\includegraphics[scale=0.7]{SPI_three_slaves.pdf}}} - \only<2>{\put(2.55,3.1){\begin{minipage}[t]{2.5cm} - \newterm{Stern} - \end{minipage}}} - \only<3->{\put(-2.0,3.0){\includegraphics[scale=0.7]{SPI_three_slaves_daisy_chained.pdf}}} - \only<3->{\put(2.55,3.1){\begin{minipage}[t]{2.5cm} - \newterm{Kaskade}\\ - \newterm{Daisy Chain}\pause[4]\par\smallskip - \setlength{\leftskip}{-3.5cm}\small - Slave gibt MOSI-Input um 1 Takt verzögert - an MISO aus \textarrow\ Master setzt - "`im richtigen Moment"' $\overline{\text{SS}}$ - \end{minipage}}} - \end{picture} - \end{itemize} - \vspace*{-1cm} - -\end{frame} - -\subsection{PWM} - -\begin{frame} - \showsection - \showsubsection - - Pulsweitenmodulation -- \emph{pulse-width modulation} - - \begin{itemize} - \item - Steuerung von Motoren - \item - Nutzung als allgemeines Protokoll\\ - zur Übertragung analoger Werte - \end{itemize} -\end{frame} - -\subsection{Sonstiges} - -\begin{frame} - \showsection - \showsubsection - - Matrix-Schaltung - \begin{itemize} - \item - möglichst viele Aktoren/Sensoren\\ - über möglichst wenige digitals Inputs abfragen\\ - bzw.\ über möglichst wenige digitale Outputs steuern - \item - Beispiele: LED-Felder, Tastaturen - \end{itemize} - - \pause - \bigskip - - R/2R-Netzwerk - \begin{itemize} - \item - möglichst viele digitale Inputs\\ - über einen einzigen analogen Input abfragen - \item - Beispiele: Tastaturen - \end{itemize} - -\end{frame} - -\end{document} diff --git a/20211111/kompassmodul-an-roboter.jpg b/20211111/kompassmodul-an-roboter.jpg deleted file mode 120000 index dab8b38c1a92bf8072d42dc3abcc07be54a58c7b..0000000000000000000000000000000000000000 --- a/20211111/kompassmodul-an-roboter.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/kompassmodul-an-roboter.jpg \ No newline at end of file diff --git a/20211111/kompassmodul.jpg b/20211111/kompassmodul.jpg deleted file mode 120000 index be108a5341df13a693959dbe69b7b9541b36fc4c..0000000000000000000000000000000000000000 --- a/20211111/kompassmodul.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/kompassmodul.jpg \ No newline at end of file diff --git a/20211111/logo-hochschule-bochum-cvh-text-v2.pdf b/20211111/logo-hochschule-bochum-cvh-text-v2.pdf deleted file mode 120000 index 4aa99b8f81061aca6dcaf43eed2d9efef40555f8..0000000000000000000000000000000000000000 --- a/20211111/logo-hochschule-bochum-cvh-text-v2.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/logo-hochschule-bochum-cvh-text-v2.pdf \ No newline at end of file diff --git a/20211111/logo-hochschule-bochum.pdf b/20211111/logo-hochschule-bochum.pdf deleted file mode 120000 index b6b9491e370e499c9276918182cdb82cb311bcd1..0000000000000000000000000000000000000000 --- a/20211111/logo-hochschule-bochum.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/logo-hochschule-bochum.pdf \ No newline at end of file diff --git a/20211111/matrix-1-tasten.png b/20211111/matrix-1-tasten.png deleted file mode 100644 index 2899a1b4643723b578e0e8a7399755e00d31aff9..0000000000000000000000000000000000000000 Binary files a/20211111/matrix-1-tasten.png and /dev/null differ diff --git a/20211111/matrix-2-leds.png b/20211111/matrix-2-leds.png deleted file mode 100644 index 2aeeb0c5295ebed9b0f45744b842d1d526b22320..0000000000000000000000000000000000000000 Binary files a/20211111/matrix-2-leds.png and /dev/null differ diff --git a/20211111/matrix-3-gluehlampen.png b/20211111/matrix-3-gluehlampen.png deleted file mode 100644 index 6ecb8864decc5a88ef77c89cfd05a607ed41eab7..0000000000000000000000000000000000000000 Binary files a/20211111/matrix-3-gluehlampen.png and /dev/null differ diff --git a/20211111/matrix.xcf.gz b/20211111/matrix.xcf.gz deleted file mode 100644 index b5c30586903fd4bbac51024b13aeadccf30f70b7..0000000000000000000000000000000000000000 Binary files a/20211111/matrix.xcf.gz and /dev/null differ diff --git a/20211111/motherboard-anschluesse.jpg b/20211111/motherboard-anschluesse.jpg deleted file mode 120000 index 07335d7dff65c71a683588d2ed108485c4653fb7..0000000000000000000000000000000000000000 --- a/20211111/motherboard-anschluesse.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/motherboard-anschluesse.jpg \ No newline at end of file diff --git a/20211111/pgslides.sty b/20211111/pgslides.sty deleted file mode 120000 index 5be1416f4216f076aa268901f52a15d775e43f64..0000000000000000000000000000000000000000 --- a/20211111/pgslides.sty +++ /dev/null @@ -1 +0,0 @@ -../common/pgslides.sty \ No newline at end of file diff --git a/20211111/pwm-1-50-prozent.png b/20211111/pwm-1-50-prozent.png deleted file mode 100644 index c1e631f9f37a0c6619b5c214357e7c3c47d0dd8b..0000000000000000000000000000000000000000 Binary files a/20211111/pwm-1-50-prozent.png and /dev/null differ diff --git a/20211111/pwm-2-50-prozent-geglaettet.png b/20211111/pwm-2-50-prozent-geglaettet.png deleted file mode 100644 index 889a22da0af52e670d2b04301b5f5b0878be6a7d..0000000000000000000000000000000000000000 Binary files a/20211111/pwm-2-50-prozent-geglaettet.png and /dev/null differ diff --git a/20211111/pwm-3-50-prozent-geglaettet.png b/20211111/pwm-3-50-prozent-geglaettet.png deleted file mode 100644 index d09a99a11fc0900c498cfa1db5a13715107247f8..0000000000000000000000000000000000000000 Binary files a/20211111/pwm-3-50-prozent-geglaettet.png and /dev/null differ diff --git a/20211111/pwm-4-75-prozent-geglaettet.png b/20211111/pwm-4-75-prozent-geglaettet.png deleted file mode 100644 index bd07bd2174320220d7e84d766c96e6b518e78582..0000000000000000000000000000000000000000 Binary files a/20211111/pwm-4-75-prozent-geglaettet.png and /dev/null differ diff --git a/20211111/pwm.xcf.gz b/20211111/pwm.xcf.gz deleted file mode 100644 index 7ec32313de0854162ee7d26fa7ebcd83c0bcb5b0..0000000000000000000000000000000000000000 Binary files a/20211111/pwm.xcf.gz and /dev/null differ diff --git a/20211111/rs-232.pdf b/20211111/rs-232.pdf deleted file mode 120000 index 67016059af4a0ca0db871b9dd784bcacc0eecf7a..0000000000000000000000000000000000000000 --- a/20211111/rs-232.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/rs-232.pdf \ No newline at end of file diff --git a/20211111/serial-G.ino b/20211111/serial-G.ino deleted file mode 100644 index 7fe49df377b7a3f4ee8b852e83fcc72c9235de29..0000000000000000000000000000000000000000 --- a/20211111/serial-G.ino +++ /dev/null @@ -1,10 +0,0 @@ -void setup() { - // put your setup code here, to run once: - Serial.begin(960, SERIAL_8O1); -} - -void loop() { - // put your main code here, to run repeatedly: - // delay (1); - Serial.print ('G'); -} diff --git a/20211111/tcpip-server-2.cpp b/20211111/tcpip-server-2.cpp deleted file mode 100644 index 39e9faa75df110c4d0a78d3d1409ae4843d7d278..0000000000000000000000000000000000000000 --- a/20211111/tcpip-server-2.cpp +++ /dev/null @@ -1,39 +0,0 @@ -#include <boost/asio/io_service.hpp> -#include <boost/asio/write.hpp> -#include <boost/asio/buffer.hpp> -#include <boost/asio/ip/tcp.hpp> -#include <iostream> -#include <string> - -using namespace boost::asio; -using namespace boost::asio::ip; - -io_service ioservice; -tcp::endpoint tcp_endpoint{tcp::v4(), 1234}; -tcp::acceptor tcp_acceptor{ioservice, tcp_endpoint}; -tcp::socket tcp_socket{ioservice}; -std::string data; - -void write_handler(const boost::system::error_code &ec, - std::size_t bytes_transferred) -{ - if (!ec) - tcp_socket.shutdown(tcp::socket::shutdown_send); -} - -void accept_handler(const boost::system::error_code &ec) -{ - if (!ec) - { - std::string data = "Hello, world!\n"; - async_write(tcp_socket, buffer(data), write_handler); - } -} - -int main() -{ - tcp_acceptor.listen(); - std::cout << "Nach listen()" << std::endl; - tcp_acceptor.async_accept(tcp_socket, accept_handler); - ioservice.run(); -} diff --git a/20211111/widerstandsnetzwerk-1.png b/20211111/widerstandsnetzwerk-1.png deleted file mode 100644 index 639a2d8a7f2ae212771755c560488ee44506a98a..0000000000000000000000000000000000000000 Binary files a/20211111/widerstandsnetzwerk-1.png and /dev/null differ diff --git a/20211111/widerstandsnetzwerk-2.png b/20211111/widerstandsnetzwerk-2.png deleted file mode 100644 index 40afd2246487439946b672b728b0433fc4bd91dc..0000000000000000000000000000000000000000 Binary files a/20211111/widerstandsnetzwerk-2.png and /dev/null differ diff --git a/20211111/widerstandsnetzwerk-3.png b/20211111/widerstandsnetzwerk-3.png deleted file mode 100644 index 637e988acfaa8bf9f45c056259cf2719b8c824b8..0000000000000000000000000000000000000000 Binary files a/20211111/widerstandsnetzwerk-3.png and /dev/null differ diff --git a/20211111/widerstandsnetzwerk.xcf.gz b/20211111/widerstandsnetzwerk.xcf.gz deleted file mode 100644 index e94ce445a8ae92f67a4b0de47e2c2e903ceb5a39..0000000000000000000000000000000000000000 Binary files a/20211111/widerstandsnetzwerk.xcf.gz and /dev/null differ diff --git a/20211118/I2C_data_transfer.pdf b/20211118/I2C_data_transfer.pdf deleted file mode 120000 index 73e7ce07770a0599ae1a2aa11e97899767a1f9b0..0000000000000000000000000000000000000000 --- a/20211118/I2C_data_transfer.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/I2C_data_transfer.pdf \ No newline at end of file diff --git a/20211118/Retribution_Engine_Screenshot_120807.jpg b/20211118/Retribution_Engine_Screenshot_120807.jpg deleted file mode 120000 index 19f4cb3e4aae1e24c3466a25b2c0e5ad90ee49e7..0000000000000000000000000000000000000000 --- a/20211118/Retribution_Engine_Screenshot_120807.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/Retribution_Engine_Screenshot_120807.jpg \ No newline at end of file diff --git a/20211118/SPI_single_slave.pdf b/20211118/SPI_single_slave.pdf deleted file mode 120000 index b51d59e51fffb101086bfaa811370f66436127e7..0000000000000000000000000000000000000000 --- a/20211118/SPI_single_slave.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/SPI_single_slave.pdf \ No newline at end of file diff --git a/20211118/SPI_three_slaves.pdf b/20211118/SPI_three_slaves.pdf deleted file mode 120000 index b2e27257652bbefd9e1c9194ac1f518a43c8aa15..0000000000000000000000000000000000000000 --- a/20211118/SPI_three_slaves.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/SPI_three_slaves.pdf \ No newline at end of file diff --git a/20211118/SPI_three_slaves_daisy_chained.pdf b/20211118/SPI_three_slaves_daisy_chained.pdf deleted file mode 120000 index 967389aeed788b2fed87b2a6b25a5ebd8256978f..0000000000000000000000000000000000000000 --- a/20211118/SPI_three_slaves_daisy_chained.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/SPI_three_slaves_daisy_chained.pdf \ No newline at end of file diff --git a/20211118/Telefon_t-sinus-700.jpg b/20211118/Telefon_t-sinus-700.jpg deleted file mode 120000 index 27c322c50b0f05edc8b07cfb0cc99b1876eb506d..0000000000000000000000000000000000000000 --- a/20211118/Telefon_t-sinus-700.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/Telefon_t-sinus-700.jpg \ No newline at end of file diff --git a/20211118/a380.jpg b/20211118/a380.jpg deleted file mode 120000 index 33a5d1fd18843bf7385e5a6d90f69af9fd8720da..0000000000000000000000000000000000000000 --- a/20211118/a380.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/a380.jpg \ No newline at end of file diff --git a/20211118/curiosity.jpg b/20211118/curiosity.jpg deleted file mode 120000 index 4452844da537414b751c5283ca8468b3ced9afb3..0000000000000000000000000000000000000000 --- a/20211118/curiosity.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/curiosity.jpg \ No newline at end of file diff --git a/20211118/dsc_8208.jpg b/20211118/dsc_8208.jpg deleted file mode 120000 index 5796341ebc774aa09965a3a29854c65ce1144fb8..0000000000000000000000000000000000000000 --- a/20211118/dsc_8208.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/dsc_8208.jpg \ No newline at end of file diff --git a/20211118/es-20211118.pdf b/20211118/es-20211118.pdf deleted file mode 100644 index 9e4dd6867c8876ea9f98e164db50e97e690a5284..0000000000000000000000000000000000000000 Binary files a/20211118/es-20211118.pdf and /dev/null differ diff --git a/20211118/es-20211118.tex b/20211118/es-20211118.tex deleted file mode 100644 index e6358d3e07ec297a7624fb5779d743fdac679cbf..0000000000000000000000000000000000000000 --- a/20211118/es-20211118.tex +++ /dev/null @@ -1,783 +0,0 @@ -% es-20211111.pdf - Lecture Slides on Embedded Systems -% Copyright (C) 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Peter Gerwinski -% -% This document is free software: you can redistribute it and/or -% modify it either under the terms of the Creative Commons -% Attribution-ShareAlike 3.0 License, or under the terms of the -% GNU General Public License as published by the Free Software -% Foundation, either version 3 of the License, or (at your option) -% any later version. -% -% This document is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with this document. If not, see <http://www.gnu.org/licenses/>. -% -% You should have received a copy of the Creative Commons -% Attribution-ShareAlike 3.0 Unported License along with this -% document. If not, see <http://creativecommons.org/licenses/>. - -% README: Echtzeit: Definition, Echtzeitprogrammierung - -\documentclass[10pt,t]{beamer} - -\usepackage{pgslides} -\usepackage{rotating} -\usepackage{tikz} -\usepackage[obeyfamily=false,mathrm=mathsf,textrm=sffamily]{siunitx} - -\newcommand{\underconstruction}{% - \begin{picture}(0,0) - \put(9,0.9){\makebox(0,0)[b]{\includegraphics[width=1.5cm]{Zeichen_123.pdf}}} - \put(9,0.6){\makebox(0,0)[t]{\shortstack{Änderungen\\vorbehalten}}} - \end{picture}} - -\title{Eingebettete Systeme} -\author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski} -\date{18.\ November 2021} - -\newcommand{\ItwoC}{I\raisebox{0.5ex}{\footnotesize 2}C} - -\begin{document} - -\maketitleframe - -\nosectionnonumber{\inserttitle} - -\begin{frame} - - \shownosectionnonumber - - \begin{itemize} - \item[\textbf{1}] \textbf{Einführung} - \hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/es}}}% - \item[\textbf{2}] \textbf{Einführung in Unix} - \item[\textbf{3}] \textbf{TCP/IP in der Praxis} - \item[\textbf{4}] \textbf{Bus-Systeme} - \begin{itemize} - \color{medgreen} - \item[5.1]Was sind Bus-Systeme? - \item[5.2]RS-232 - \item[5.3]\ItwoC\ (TWI) - \item[5.4]SPI - \item[5.5]PWM - \item[5.6]Sonstiges - \end{itemize} - \item[\textbf{6}] \textbf{Echtzeit} - \begin{itemize} - \color{red} - \item[6.1] Was ist Echtzeit? - \item[6.2] Echtzeitprogrammierung - \color{black} - \item[6.3] Multitasking - \item[6.4] Ressourcen - \item[6.5] Prioritäten - \end{itemize} - \vspace*{-\smallskipamount} - \item[\textbf{\dots}] - \end{itemize} - -\end{frame} - -\setcounter{section}{3} -\section{Bus-Systeme} -\subsection{Was sind Bus-Systeme?} - -\begin{frame} - \showsection - \showsubsection - - \begin{quote} - Ein Bus ist ein System zur Datenübertragung zwischen mehreren - Teilnehmern über einen gemeinsamen Übertragungsweg. - \color{gray} - Findet eine Datenübertragung zwischen zwei Teilnehmern statt, so - müssen die übrigen Teilnehmer schweigen, da sie sich sonst - gegenseitig stören würden. Umgangssprachlich werden mitunter -- - oft aus historischen Gründen – auch Datenübertragungssysteme als - "`Bus"' bezeichnet, die technisch eigentlich eine andere - Topologie besitzen. - - \medskip - - \strut\hfill\url{https://de.wikipedia.org/wiki/Bus_(Datenverarbeitung)} - \end{quote} - Beispiele: - \begin{itemize} - \item - Computer kommuniziert mit Peripherie - \item - Computer kommunizieren (direkt) miteinander - \item - Prozessor kommuniziert mit externem Speicher - \item - Teile eines Prozessors kommunizieren miteinander - \end{itemize} -\end{frame} - -\begin{frame} - \showsection - \showsubsection - Standard-Personal-Computer: - \begin{itemize} - \item - Einsteckkarten: PCI (und Vorgänger) - \item - Festplatten: SATA (und Vorgänger) - \item - USB, FireWire, \dots - \item - Ethernet, CAN-Bus, \dots - \item - WLAN, BlueTooth, IR, \dots - \item - PS/2, RS-232, Centronics - \end{itemize} - - \medskip - - \begin{visibleenv}<2-> - Minimal-Hardware: - \begin{itemize} - \item - RS-232 - \item - \ItwoC\ (TWI) - \item - SPI - \end{itemize} - \end{visibleenv} - - \begin{onlyenv}<1> - \begin{picture}(0,0) - \put(5,1.5){\includegraphics[height=3cm]{motherboard-anschluesse.jpg}} - \end{picture} - \end{onlyenv} - \begin{onlyenv}<2> - \begin{picture}(0,0)(-1.3,-4) - \put(1.8,-4.9){\includegraphics[height=3.5cm]{kompassmodul-an-roboter.jpg}} - \put(6.1,-3.3){\includegraphics[height=4.5cm]{kompassmodul.jpg}} - \put(6.1,1.2){\makebox(0,0)[tr]{\tikz{\draw(0,0)--(-1.9,-3.6);}}} - \put(6.1,-3.3){\makebox(0,0)[br]{\tikz{\draw(0,0)--(-1.8,0.2);}}} - \end{picture} - \end{onlyenv} -\end{frame} - -\begin{frame}[fragile] - - \showsection - \showsubsection - - \vspace*{-\bigskipamount} - \begin{tabbing} - \newterm{Punkt-zu-Punkt}\quad\=\kill - \newterm{seriell} \> jedes Bit einzeln übertragen\\ - \newterm{parallel} \> mehrere Bits gleichzeitig\\[\smallskipamount] - \newterm{synchron} \> Abgleich über Steuerleitung: \newterm{Takt}\\ - \newterm{asynchron} \> Abgleich über Zeitvereinbarungen\\[\smallskipamount] - \newterm{Punkt-zu-Punkt} \> genau zwei Teilnehmer\\ - \newterm{busfähig} \> mehrere Teilnehmer, mit \newterm{Adressierung} - \end{tabbing} - - \begin{itemize} - \item - \ItwoC: seriell, synchron, mit Adressierung - \item - RS-232: seriell, asynchron, Punkt-zu-Punkt - \item - RS-485, USB, CAN: seriell, asynchron, mit Adressierung - \item - SPI: seriell, synchron, Punkt-zu-Punkt oder mit Adressierung - \end{itemize} - -\end{frame} - -\subsection{RS-232} - -\begin{frame} - \showsection - \showsubsection - - seriell - \begin{itemize} - \item - \newterm{TX\/}: 1 Leitung für Daten - \item - \newterm{RX\/}: ggf.\ 1 Leitung für Daten in der anderen Richtung - \item - \newterm{GND\/}: gemeinsame \newterm{Masse} - \item - evtl.\ zusätzliche Steuerleitungen - \end{itemize} - - \medskip - - asynchron - \begin{itemize} - \item - \emph{keine\/} Taktleitung für Abgleich, wann Daten anliegen - \item - Stattdessen: Abgleich über Zeitvereinbarungen - \arrowitem - Jeder Teilnehmer braucht eine eigene Zeitbasis. - \end{itemize} - - \medskip - - Punkt-zu-Punkt - \begin{itemize} - \item - nur 2 Teilnehmer vorgesehen - \end{itemize} -\end{frame} - -\begin{frame} - \showsubsection - \vspace*{-0.35cm} - \begin{center} - \includegraphics[scale=0.9]{rs-232.pdf} - \end{center} -\end{frame} - -\subsection{\protect\ItwoC\ (TWI)} - -\begin{frame} - \showsection - \showsubsection - - \ItwoC\ = Inter-IC; TWI = Two-Wire-Interface - - \medskip - - seriell - \begin{itemize} - \item - \newterm{SDA\/}: 1 Leitung für Daten (in beiden Richtungen) - \item - \newterm{SCL\/}: Taktleitung (Clock) - \item - \newterm{GND\/}: gemeinsame Masse - \item - evtl.\ \newterm{VCC\/}: Stromversorgung für Peripheriegerät - \end{itemize} - - \medskip - - synchron - \begin{itemize} - \item - Abgleich über\\Taktleitung - \begin{picture}(0,0) - \put(0.4,-0.4){\includegraphics[width=9.7cm]{I2C_data_transfer.pdf}} - \end{picture} - \end{itemize} - - \medskip - - busfähig - \begin{itemize} - \item - \newterm{Master\/} initiiert Kommuniation und steuert Taktleitung - \item - erstes gesendetes Byte: \newterm{Adresse\/} des Teilnehmers - \item - 2 Adressen pro Teilnehmer: Lesen/Schreiben - \end{itemize} - \vspace*{-1cm} -\end{frame} - -\subsection{SPI} - -\begin{frame} - \showsection - \showsubsection - - Serial Peripheral Interface - - \medskip - - seriell - \begin{itemize} - \item - \newterm{MOSI\/}: Master Out, Slave In - \begin{picture}(0,0) - \only<1>{\put(3.2,1.2){\makebox(0,0){% - \begin{minipage}{3.3cm} - \begin{tabular}{lcl} - \multicolumn{3}{l}{Neue Bezeichnungen:}\\[\smallskipamount] - Master & \textarrow & Primary \\ - Slave & \textarrow & Secondary \\ - MISO & \textarrow & PISO \\ - MOSI & \textarrow & POSI - \end{tabular} - \end{minipage}}}} - \end{picture} - \item - \newterm{MISO\/}: Master In, Slave Out - \item - \newterm{SCLK\/}: Taktleitung (Clock) - \item - \newterm{$\overline{\text{SS}}$\/}: Slave Select (invertiert) - \item - \newterm{GND\/}: gemeinsame Masse - \item - evtl.\ \newterm{VCC\/}: Stromversorgung für Peripheriegerät - \end{itemize} - - \medskip - - synchron - \begin{itemize} - \item - Abgleich über Taktleitung - \end{itemize} - - \medskip - - busfähig - \begin{itemize} - \item - \newterm{Master\/} initiiert Kommuniation und steuert Taktleitung - \item - \newterm{Slave\/} wird über \newterm{Slave Select\/} ausgewählt - \begin{picture}(0,0)(0,-0.2) - \only<1>{\put(-2.175,2.875){\includegraphics[scale=0.7]{SPI_single_slave.pdf}}} - \only<2>{\put(-2.0,3.0){\includegraphics[scale=0.7]{SPI_three_slaves.pdf}}} - \only<2>{\put(2.55,3.1){\begin{minipage}[t]{2.5cm} - \newterm{Stern} - \end{minipage}}} - \only<3->{\put(-2.0,3.0){\includegraphics[scale=0.7]{SPI_three_slaves_daisy_chained.pdf}}} - \only<3->{\put(2.55,3.1){\begin{minipage}[t]{2.5cm} - \newterm{Kaskade}\\ - \newterm{Daisy Chain}\pause[4]\par\smallskip - \setlength{\leftskip}{-3.5cm}\small - Slave gibt MOSI-Input um 1 Takt verzögert - an MISO aus \textarrow\ Master setzt - "`im richtigen Moment"' $\overline{\text{SS}}$ - \end{minipage}}} - \end{picture} - \end{itemize} - \vspace*{-1cm} - -\end{frame} - -\subsection{PWM} - -\begin{frame} - \showsection - \showsubsection - - Pulsweitenmodulation -- \emph{pulse-width modulation} - - \begin{itemize} - \item - Steuerung von Motoren - \item - Nutzung als allgemeines Protokoll\\ - zur Übertragung analoger Werte - \end{itemize} -\end{frame} - -\subsection{Sonstiges} - -\begin{frame} - \showsection - \showsubsection - - Matrix-Schaltung - \begin{itemize} - \item - möglichst viele Aktoren/Sensoren\\ - über möglichst wenige digitals Inputs abfragen\\ - bzw.\ über möglichst wenige digitale Outputs steuern - \item - Beispiele: LED-Felder, Tastaturen - \end{itemize} - - \pause - \bigskip - - R/2R-Netzwerk - \begin{itemize} - \item - möglichst viele digitale Inputs\\ - über einen einzigen analogen Input abfragen - \item - Beispiele: Tastaturen - \end{itemize} - -\end{frame} - -\section{Echtzeit} - -\subsection{Was ist Echtzeit?} - -\begin{frame} - - \showsection - \showsubsection - - \begin{itemize} - \pause - \item - Animation in Echtzeit:\\ - schnelle Berechnung anstatt Wiedergabe einer Aufzeichnung - \pause - \medskip - \item - Fantasy-Rollenspiel in Echtzeit:\\ - Der Zeitverlauf der Spielwelt entspricht dem der realen Welt. - \pause - \medskip - \item - Datenverarbeitung in Echtzeit:\\ - Die Daten werden so schnell verarbeitet, wie sie anfallen. - \pause - \medskip - \item - speziell: Echtzeit-Steuerung von Maschinen:\\ - Die Berechnung kann mit den physikalischen Vorgängen schritthalten. - \pause - \bigskip - \arrowitem - "`Schnell genug."' - \end{itemize} - -\end{frame} - -\begin{frame} - - \showsubsection - - "`Schnell genug."' \pause-- "`Und wenn nicht?"' - - \pause - - \begin{itemize} - \item - "`Ganz schlecht."' \pause\textarrow\ \newterm{harte Echtzeit} - \begin{onlyenv}<4-8> - \begin{picture}(0,0)(0,-0.3) - \pause - \put(0,-4){\makebox(0,0)[br]{\includegraphics[height=3.5cm]{a380.jpg}}} - % http://de.wikipedia.org/w/index.php?title=Datei:Airbus_A380_overfly.jpg&filetimestamp=20111223141606 - \pause - \put(0.2,-3.9){\makebox(0,0)[bl]{\includegraphics[height=4.0cm]{quadrocopter.jpg}}} - %\put(0.2,-3.5){\makebox(0,0)[bl]{\includegraphics[height=3.5cm]{mercedes-benz-w116.jpg}}} - % http://commons.wikimedia.org/wiki/File:1973-1980_Mercedes-Benz_450_SEL_%28W116%29_sedan_%282010-12-28%29_01.jpg - \pause - \put(-0.5,-4.2){\makebox(0,0)[tr]{\includegraphics[height=3.5cm]{herzschrittmacher.jpg}}} - % http://de.wikipedia.org/w/index.php?title=Datei:Pacemaker_GuidantMeridianSR.jpg&filetimestamp=20051203173642 - \pause - \put(0,-4){\makebox(0,0)[tl]{\includegraphics[height=3.5cm]{curiosity.jpg}}} - % http://mars.jpl.nasa.gov/msl/news/whatsnew/index.cfm?FuseAction=ShowNews&NewsID=1344 - \end{picture} - \end{onlyenv} - \pause\\[2pt] - rechtzeitiges Ergebnis funktionsentscheidend - - \smallskip - - \pause - \item - "`Unschön."' \textarrow\ \newterm{weiche Echtzeit} - \begin{onlyenv}<10-12> - \begin{picture}(0,0)(0,0.3) - \pause - \put(0,-4){\makebox(0,0)[br]{\includegraphics[width=5cm]{Retribution_Engine_Screenshot_120807.jpg}}} - % http://en.wikipedia.org/wiki/File:Retribution_Engine_Screenshot_120807.jpg - \pause - \put(0.1,-4.5){\makebox(0,0)[bl]{\includegraphics[width=5cm]{Telefon_t-sinus-700.jpg}}} - % http://de.wikipedia.org/w/index.php?title=Datei:Telefon_t-sinus-700.jpg&filetimestamp=20050807203655 - \end{picture} - \end{onlyenv} - \pause\\[2pt] - verspätetes Ergebnis qualitätsmindernd - \begin{itemize} - \baselineskip14pt\par - \item - verwenden und Verzögerung in Kauf nehmen - \item - verwerfen und Ausfall in Kauf nehmen - \end{itemize} - - \smallskip - - \pause - \item - "`Es gibt keinen festen Termin. Möglichst schnell halt."'\pause\\[2pt] - \textarrow\ \newterm{keine Echtzeit} - \end{itemize} - -\end{frame} - -\begin{frame}[fragile] - - \showsubsection - - Das Problem: - \vspace{-\bigskipamount} - \begin{center} - \begin{picture}(6,2) - \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}} - \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}} -% \put(2.75,0.875){\vector(1,3){0.25}} -% \put(2.75,0.875){\line(2,1){0.5}} -% \put(3.25,1.125){\vector(-1,-3){0.25}} - \put(2.70,0.350){\tikz{\draw[latex-latex](0.25,0.625)--(0,-0.12)--(0.5,0.12)--(0.25,-0.625);}} - \end{picture} -% \begin{pdfpic} -% \begin{pspicture}(6,2) -% \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}} -% \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}} -% \psline[arrows=<->](3,0.4)(3.2,1.125)(2.8,0.875)(3,1.6) -% \end{pspicture} -% \end{pdfpic} - \end{center} - - \pause - - Beispiel: - \begin{itemize} - \item - Eine Motorsteuerung benötigt alle \SI{2000}{\mics} einen Steuerimpuls,\\ - dessen Berechnung maximal \SI{10}{\mics} dauert. - \pause[3] - \item - Entweder: Der Steuer-Computer macht noch andere Dinge.\\ - \textarrow\ Risiko der Zeitüberschreitung - \pause - \item - Oder: Der Steuer-Computer macht nichts anderes.\\ - \textarrow\ Verschwendung von Rechenzeit\\ - \pause - {\color{red}\textarrow\ Na und?} - \end{itemize} - -\end{frame} - -\begin{frame}[fragile] - - \showsubsection - - Das Problem: - \vspace{-\bigskipamount} - \begin{center} - \begin{picture}(6,2) - \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}} - \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}} -% \put(2.75,0.875){\vector(1,3){0.25}} -% \put(2.75,0.875){\line(2,1){0.5}} -% \put(3.25,1.125){\vector(-1,-3){0.25}} - \put(2.70,0.350){\tikz{\draw[latex-latex](0.25,0.625)--(0,-0.12)--(0.5,0.12)--(0.25,-0.625);}} - \end{picture} -% \begin{pdfpic} -% \begin{pspicture}(6,2) -% \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}} -% \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}} -% \psline[arrows=<->](3,0.4)(3.2,1.125)(2.8,0.875)(3,1.6) -% \end{pspicture} -% \end{pdfpic} - \end{center} - - \medskip - - {\large\color{structure}\textbf{"`Verschwendung von Rechenzeit -- na und?"'}} - - \medskip - - \pause - Große Stückzahlen - \begin{itemize} - \item - 138\,000 Toyota Prius V von Mai 2011 bis April 2012 - \end{itemize} - - \medskip - - \pause - Wertvolle Ressourcen - \begin{itemize} - \item - Fähigkeiten einer Raumsonde optimieren - % (Marsumlaufbahn: ab ca.~127\,000 Euro pro kg) - % 70000000 / 550000 = 127._27 - % http://www.bernd-leitenberger.de/blog/2009/09/29/reduktion-der-kosten-von-planetenmissionen/ - \only<.(1)>{\\[\medskipamount]\strut\hfill\makebox(0,0)[r]{\includegraphics[height=3.3cm]{curiosity.jpg}}\vspace*{-1cm}} - \pause - \item - Implantat: Platz- und Stromverbrauch minimieren - \only<.(1)>{\\\strut\hfill\makebox(0,0)[r]{\includegraphics[height=3.4cm]{herzschrittmacher.jpg}}\vspace*{-1cm}} - \end{itemize} - - \bigskip - - \pause - \textarrow\ {\large\color{structure}\textbf{Echtzeitprogrammierung}}\\[2pt] - \strut \phantom{\textarrow} Echtzeitanforderungen erfüllen, ohne Ressourcen zu verschwenden - -\end{frame} - -\subsection{Echtzeitprogrammierung} - -\begin{frame} - - \showsubsection - - Echtzeitanforderungen erfüllen, ohne Ressourcen zu verschwenden - - \bigskip - - \alt<.(1)>{Aber wie?}{Beispiele für Lösungen:} - - \begin{itemize} - \pause - \item - ZigBee-Modul:\only<.(1)>{\hfill\makebox(0,0)[tr]{\includegraphics[width=5cm]{xbee.jpg}}}\\ - % http://commons.wikimedia.org/wiki/File:Arduino_xbee.JPG - Funk- vs.\ UART-Protokoll\\ - \textarrow\ dedizierte Hardware - \pause - \item - RP6:\\ - Motorsteuerung vs.\ Anwender-Software\\ - \textarrow\ spezielle Software - \only<.(1)>{\hfill\makebox(0,0)[r]{\includegraphics[width=5cm]{rp6.jpg}}} - \pause - \item - Quadrocopter:\\ - Motorsteuerung vs.\ Sensoren-Abfrage\\ - vs.\ Funk-Fernsteuerung \dots\\ - \textarrow\ spezielle Software - \only<.(1)>{\hfill\makebox(0,0)[br]{\includegraphics[width=5cm]{quadrocopter.jpg}}}\\ - \pause - \item - Flugzeugkabinensimulatortür:\\ - Türsteuerung vs.\ Bedienung\\ - \textarrow\ Echtzeitbetriebssystem - \only<.(1)>{\\[-3.2cm]\strut\hfill\makebox(0,0)[r]{\includegraphics[angle=-90,width=5cm]{dsc_8208.jpg}}} - \end{itemize} - -\end{frame} - -\begin{frame} - - \showsubsection - - Quadrocopter-Steuerung \emph{MultiWii} - \begin{itemize} - \item - Konfiguration durch bedingte Compilierung (Präprozessor) - \item - In der Hauptschleife wird 50mal pro Sekunde der RC-Task aufgerufen,\\ - ansonsten zyklisch einer von bis zu 5 weiteren Tasks. - \end{itemize} - - \pause - - RP6-Steuerung - \begin{itemize} - \item - Konfiguration durch bedingte Compilierung (Präprozessor) - \item - Lichtschranken an Encoder-Scheiben lösen bei Bewegung Interrupts aus.\\ - Die Interrupt-Handler zählen Variable hoch. - \item - 10000mal pro Sekunde: Timer-Interrupt\\ - Durch Zähler im Interrupt-Handler: verschiedene Taktraten\\ - 1000mal pro Sekunde: Stopwatches\\ - 5mal pro Sekunde: Blinkende Power-On-LED\\ - 1000mal pro Sekunde: Bumper, ACS, PWM zur Motorsteuerung\\ - Geschwindigkeitsmessung durch Zählen der Ticks in 0.2\,s\\ - Anpassung der Motorkraft in $\pm$1-Schritten - \pause - \item - Nebenbei: \only<4->{1 }Benutzerprogramm - \end{itemize} - -\end{frame} - -\subsection{Multitasking} - -\begin{frame} - - \showsubsection - - \begin{itemize} - \item - \newterm{Kooperatives Multitasking}\\ - Prozesse geben freiwillig Rechenzeit ab - \item - \newterm{Präemptives Multitasking}\\ - Das Betriebssystem unterbricht laufende Prozesse\\ - (englisch: \emph{to pre-empt\/} -- jemandem zuvorkommen) - \pause - \bigskip - \item - \newterm{Scheduler}\\ - Steuerprogramm, das Prozessen Rechenzeit zuteilt - \item - \newterm{Kontextwechsel}\\ - Umschalten zwischen zwei Prozessen - \item - \newterm{Round-Robin-Verfahren (Rundlauf)}\\ - Zuteilung von \newterm{Zeitschlitzen\/} auf einer \newterm{Zeitscheibe} an die Prozesse - \bigskip - \pause - \item - Ausblick: Zuteilung von Rechenzeit = wichtiger Spezialfall\\ - allgemein: Zuteilung von Ressourcen - \end{itemize} - -\end{frame} - -\subsectionnonumber{Beispiele für Multitasking} - -\begin{frame} - - \showsubsectionnonumber - - Quadrocopter-Steuerung \emph{MultiWii} - \begin{itemize} - \item - Konfiguration durch bedingte Compilierung (Präprozessor) - \item - In der Hauptschleife wird 50mal pro Sekunde der RC-Task aufgerufen,\\ - ansonsten zyklisch einer von bis zu 5 weiteren Tasks. - \end{itemize} - - RP6-Steuerung - \begin{itemize} - \item - Konfiguration durch bedingte Compilierung (Präprozessor) - \item - Lichtschranken an Encoder-Scheiben lösen bei Bewegung Interrupts aus.\\ - Die Interrupt-Handler zählen Variable hoch. - \item - 10000mal pro Sekunde: Timer-Interrupt\\ - verschiedene Tasks werden unterschiedlich häufig aufgerufen - \item - Nebenbei: 1 Benutzerprogramm - \end{itemize} - -% \pause -% -% Linux 0.01 -% \begin{itemize} -% \item -% Timer-Interrupt:\only<2->{ Zähler des aktuellen Tasks wird dekrementiert;}\\ -% Task mit höchstem Zähler bekommt Rechenzeit. -% \item -% Wenn es keinen laufbereiten Task mit positivem Zähler gibt,\\ -% bekommen alle Tasks gemäß ihrer Priorität neue Zähler zugewiesen. -% \item -% \emph{keine\/} harte Echtzeit -% % Aufgabe: Wo wird der Zähler heruntergezählt? -% \end{itemize} - -\end{frame} - -\end{document} diff --git a/20211118/herzschrittmacher.jpg b/20211118/herzschrittmacher.jpg deleted file mode 120000 index 92d8f0053003cc555aec83f5d088f1cec822ad81..0000000000000000000000000000000000000000 --- a/20211118/herzschrittmacher.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/herzschrittmacher.jpg \ No newline at end of file diff --git a/20211118/kompassmodul-an-roboter.jpg b/20211118/kompassmodul-an-roboter.jpg deleted file mode 120000 index dab8b38c1a92bf8072d42dc3abcc07be54a58c7b..0000000000000000000000000000000000000000 --- a/20211118/kompassmodul-an-roboter.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/kompassmodul-an-roboter.jpg \ No newline at end of file diff --git a/20211118/kompassmodul.jpg b/20211118/kompassmodul.jpg deleted file mode 120000 index be108a5341df13a693959dbe69b7b9541b36fc4c..0000000000000000000000000000000000000000 --- a/20211118/kompassmodul.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/kompassmodul.jpg \ No newline at end of file diff --git a/20211118/logo-hochschule-bochum-cvh-text-v2.pdf b/20211118/logo-hochschule-bochum-cvh-text-v2.pdf deleted file mode 120000 index 4aa99b8f81061aca6dcaf43eed2d9efef40555f8..0000000000000000000000000000000000000000 --- a/20211118/logo-hochschule-bochum-cvh-text-v2.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/logo-hochschule-bochum-cvh-text-v2.pdf \ No newline at end of file diff --git a/20211118/logo-hochschule-bochum.pdf b/20211118/logo-hochschule-bochum.pdf deleted file mode 120000 index b6b9491e370e499c9276918182cdb82cb311bcd1..0000000000000000000000000000000000000000 --- a/20211118/logo-hochschule-bochum.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/logo-hochschule-bochum.pdf \ No newline at end of file diff --git a/20211118/loop-time.cpp b/20211118/loop-time.cpp deleted file mode 100644 index bb4fb00de597c740ab097e6eacc955d4d65da117..0000000000000000000000000000000000000000 --- a/20211118/loop-time.cpp +++ /dev/null @@ -1,33 +0,0 @@ - while(1) { - currentTime = micros(); - cycleTime = currentTime - previousTime; - #if defined(LOOP_TIME) - if (cycleTime >= LOOP_TIME) break; - #else - break; - #endif - } - previousTime = currentTime; - - - - currentTime = micros(); - #if defined(LOOP_TIME) - cycleTime = currentTime - previousTime; - while (cycleTime < LOOP_TIME) - { - currentTime = micros(); - cycleTime = currentTime - previousTime; - } - #endif - previousTime = currentTime; - - - - #if defined(LOOP_TIME) - while ((currentTime = micros()) - previousTime < LOOP_TIME) - ; /* do nothing */ - previousTime = currentTime; - #else - currentTime = micros(); - #endif diff --git a/20211118/motherboard-anschluesse.jpg b/20211118/motherboard-anschluesse.jpg deleted file mode 120000 index 07335d7dff65c71a683588d2ed108485c4653fb7..0000000000000000000000000000000000000000 --- a/20211118/motherboard-anschluesse.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/motherboard-anschluesse.jpg \ No newline at end of file diff --git a/20211118/pgslides.sty b/20211118/pgslides.sty deleted file mode 120000 index 5be1416f4216f076aa268901f52a15d775e43f64..0000000000000000000000000000000000000000 --- a/20211118/pgslides.sty +++ /dev/null @@ -1 +0,0 @@ -../common/pgslides.sty \ No newline at end of file diff --git a/20211118/quadrocopter.jpg b/20211118/quadrocopter.jpg deleted file mode 120000 index 7eaf0c024b63b7bc1dd3df2c17c8ab93f67fc15c..0000000000000000000000000000000000000000 --- a/20211118/quadrocopter.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/quadrocopter.jpg \ No newline at end of file diff --git a/20211118/rp6.jpg b/20211118/rp6.jpg deleted file mode 120000 index 2a0ecff23845770c3a98178eca6dce3ec73aca58..0000000000000000000000000000000000000000 --- a/20211118/rp6.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/rp6.jpg \ No newline at end of file diff --git a/20211118/rs-232.pdf b/20211118/rs-232.pdf deleted file mode 120000 index 67016059af4a0ca0db871b9dd784bcacc0eecf7a..0000000000000000000000000000000000000000 --- a/20211118/rs-232.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/rs-232.pdf \ No newline at end of file diff --git a/20211118/xbee.jpg b/20211118/xbee.jpg deleted file mode 120000 index ff0adff2eadf3d9b775d03cea8cf1f118534e2b9..0000000000000000000000000000000000000000 --- a/20211118/xbee.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/xbee.jpg \ No newline at end of file diff --git a/20211125/Retribution_Engine_Screenshot_120807.jpg b/20211125/Retribution_Engine_Screenshot_120807.jpg deleted file mode 120000 index 19f4cb3e4aae1e24c3466a25b2c0e5ad90ee49e7..0000000000000000000000000000000000000000 --- a/20211125/Retribution_Engine_Screenshot_120807.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/Retribution_Engine_Screenshot_120807.jpg \ No newline at end of file diff --git a/20211125/Telefon_t-sinus-700.jpg b/20211125/Telefon_t-sinus-700.jpg deleted file mode 120000 index 27c322c50b0f05edc8b07cfb0cc99b1876eb506d..0000000000000000000000000000000000000000 --- a/20211125/Telefon_t-sinus-700.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/Telefon_t-sinus-700.jpg \ No newline at end of file diff --git a/20211125/a380.jpg b/20211125/a380.jpg deleted file mode 120000 index 33a5d1fd18843bf7385e5a6d90f69af9fd8720da..0000000000000000000000000000000000000000 --- a/20211125/a380.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/a380.jpg \ No newline at end of file diff --git a/20211125/curiosity.jpg b/20211125/curiosity.jpg deleted file mode 120000 index 4452844da537414b751c5283ca8468b3ced9afb3..0000000000000000000000000000000000000000 --- a/20211125/curiosity.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/curiosity.jpg \ No newline at end of file diff --git a/20211125/dsc_8208.jpg b/20211125/dsc_8208.jpg deleted file mode 120000 index 5796341ebc774aa09965a3a29854c65ce1144fb8..0000000000000000000000000000000000000000 --- a/20211125/dsc_8208.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/dsc_8208.jpg \ No newline at end of file diff --git a/20211125/es-20211125.pdf b/20211125/es-20211125.pdf deleted file mode 100644 index 2d4a180ee8ab9a990ad1dae98a225369b0b06abb..0000000000000000000000000000000000000000 Binary files a/20211125/es-20211125.pdf and /dev/null differ diff --git a/20211125/es-20211125.tex b/20211125/es-20211125.tex deleted file mode 100644 index dd721d798306cbe194bad584f3e7fcb8007cba50..0000000000000000000000000000000000000000 --- a/20211125/es-20211125.tex +++ /dev/null @@ -1,1715 +0,0 @@ -% es-20211125.pdf - Lecture Slides on Embedded Systems -% Copyright (C) 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Peter Gerwinski -% -% This document is free software: you can redistribute it and/or -% modify it either under the terms of the Creative Commons -% Attribution-ShareAlike 3.0 License, or under the terms of the -% GNU General Public License as published by the Free Software -% Foundation, either version 3 of the License, or (at your option) -% any later version. -% -% This document is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with this document. If not, see <http://www.gnu.org/licenses/>. -% -% You should have received a copy of the Creative Commons -% Attribution-ShareAlike 3.0 Unported License along with this -% document. If not, see <http://creativecommons.org/licenses/>. - -% README: Echtzeit: Multitasking, Ressourcen - -\documentclass[10pt,t]{beamer} - -\usepackage{pgslides} -\usepackage{rotating} -\usepackage{tikz} -\usepackage[obeyfamily=false,mathrm=mathsf,textrm=sffamily]{siunitx} - -\newrgbcolor{lightyellow}{0.95 0.85 0.0} -\newrgbcolor{lightorange}{1.0 0.7 0.0} -\newrgbcolor{lightgreen}{0.0 0.8 0.0} - -\newcommand{\underconstruction}{% - \begin{picture}(0,0) - \put(9,0.9){\makebox(0,0)[b]{\includegraphics[width=1.5cm]{Zeichen_123.pdf}}} - \put(9,0.6){\makebox(0,0)[t]{\shortstack{Änderungen\\vorbehalten}}} - \end{picture}} - -\title{Eingebettete Systeme} -\author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski} -\date{25.\ November 2021} - -\newcommand{\ItwoC}{I\raisebox{0.5ex}{\footnotesize 2}C} - -\begin{document} - -%\newlength{\normalpdfpageheight} -%\setlength{\normalpdfpageheight}{\pdfpageheight} - -\maketitleframe - -\nosectionnonumber{\inserttitle} - -\begin{frame} - - \shownosectionnonumber - - \begin{itemize} - \item[\textbf{1}] \textbf{Einführung} - \hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/es}}}% - \item[\textbf{2}] \textbf{Einführung in Unix} - \item[\textbf{3}] \textbf{TCP/IP in der Praxis} - \item[\textbf{4}] \textbf{Bus-Systeme} - \item[\textbf{5}] \textbf{Echtzeit} - \begin{itemize} - \color{medgreen} - \item[5.1] Was ist Echtzeit? - \color{orange} - \item[5.2] Echtzeitprogrammierung - \color{red} - \item[5.3] Multitasking - \item[5.4] Ressourcen - \item[5.5] Prioritäten - \end{itemize} -% \item[\textbf{???}] - \end{itemize} - -\end{frame} - -\setcounter{section}{4} -\section{Echtzeit} - -\subsection{Was ist Echtzeit?} - -\begin{frame} - - \showsection - \showsubsection - - \begin{itemize} -% \pause - \item - Animation in Echtzeit:\\ - schnelle Berechnung anstatt Wiedergabe einer Aufzeichnung -% \pause - \medskip - \item - Fantasy-Rollenspiel in Echtzeit:\\ - Der Zeitverlauf der Spielwelt entspricht dem der realen Welt. -% \pause - \medskip - \item - Datenverarbeitung in Echtzeit:\\ - Die Daten werden so schnell verarbeitet, wie sie anfallen. -% \pause - \medskip - \item - speziell: Echtzeit-Steuerung von Maschinen:\\ - Die Berechnung kann mit den physikalischen Vorgängen schritthalten. -% \pause - \bigskip - \arrowitem - "`Schnell genug."' - \end{itemize} - -\end{frame} - -\begin{frame} - - \showsubsection - - "`Schnell genug."' % \pause - -- "`Und wenn nicht?"' - -% \pause - - \begin{itemize} - \item - "`Ganz schlecht."' % \pause - \textarrow\ \newterm{harte Echtzeit} - \begin{onlyenv}<1> - \begin{picture}(0,0)(0,-0.3) -% \pause - \put(0,-4){\makebox(0,0)[br]{\includegraphics[height=3.5cm]{a380.jpg}}} - % http://de.wikipedia.org/w/index.php?title=Datei:Airbus_A380_overfly.jpg&filetimestamp=20111223141606 -% \pause - \put(0.2,-3.9){\makebox(0,0)[bl]{\includegraphics[height=4.0cm]{quadrocopter.jpg}}} - %\put(0.2,-3.5){\makebox(0,0)[bl]{\includegraphics[height=3.5cm]{mercedes-benz-w116.jpg}}} - % http://commons.wikimedia.org/wiki/File:1973-1980_Mercedes-Benz_450_SEL_%28W116%29_sedan_%282010-12-28%29_01.jpg -% \pause - \put(-0.5,-4.2){\makebox(0,0)[tr]{\includegraphics[height=3.5cm]{herzschrittmacher.jpg}}} - % http://de.wikipedia.org/w/index.php?title=Datei:Pacemaker_GuidantMeridianSR.jpg&filetimestamp=20051203173642 -% \pause - \put(0,-4){\makebox(0,0)[tl]{\includegraphics[height=3.5cm]{curiosity.jpg}}} - % http://mars.jpl.nasa.gov/msl/news/whatsnew/index.cfm?FuseAction=ShowNews&NewsID=1344 - \end{picture} - \end{onlyenv} - \pause\\[2pt] - rechtzeitiges Ergebnis funktionsentscheidend - - \smallskip - - \pause - \item - "`Unschön."' \textarrow\ \newterm{weiche Echtzeit} - \begin{onlyenv}<3> - \begin{picture}(0,0)(0,0.3) -% \pause - \put(0,-4){\makebox(0,0)[br]{\includegraphics[width=5cm]{Retribution_Engine_Screenshot_120807.jpg}}} - % http://en.wikipedia.org/wiki/File:Retribution_Engine_Screenshot_120807.jpg -% \pause - \put(0.1,-4.5){\makebox(0,0)[bl]{\includegraphics[width=5cm]{Telefon_t-sinus-700.jpg}}} - % http://de.wikipedia.org/w/index.php?title=Datei:Telefon_t-sinus-700.jpg&filetimestamp=20050807203655 - \end{picture} - \end{onlyenv} - \pause\\[2pt] - verspätetes Ergebnis qualitätsmindernd - \begin{itemize} - \baselineskip14pt\par - \item - verwenden und Verzögerung in Kauf nehmen - \item - verwerfen und Ausfall in Kauf nehmen - \end{itemize} - - \smallskip - - \pause - \item - "`Es gibt keinen festen Termin. Möglichst schnell halt."' % \pause - \\[2pt] - \textarrow\ \newterm{keine Echtzeit} - \end{itemize} - -\end{frame} - -\begin{frame}[fragile] - - \showsubsection - - Das Problem: - \vspace{-\bigskipamount} - \begin{center} - \begin{picture}(6,2) - \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}} - \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}} -% \put(2.75,0.875){\vector(1,3){0.25}} -% \put(2.75,0.875){\line(2,1){0.5}} -% \put(3.25,1.125){\vector(-1,-3){0.25}} - \put(2.70,0.350){\tikz{\draw[latex-latex](0.25,0.625)--(0,-0.12)--(0.5,0.12)--(0.25,-0.625);}} - \end{picture} -% \begin{pdfpic} -% \begin{pspicture}(6,2) -% \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}} -% \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}} -% \psline[arrows=<->](3,0.4)(3.2,1.125)(2.8,0.875)(3,1.6) -% \end{pspicture} -% \end{pdfpic} - \end{center} - -% \pause - - Beispiel: - \begin{itemize} - \item - Eine Motorsteuerung benötigt alle \SI{2000}{\mics} einen Steuerimpuls,\\ - dessen Berechnung maximal \SI{10}{\mics} dauert. -% \pause[3] - \item - Entweder: Der Steuer-Computer macht noch andere Dinge.\\ - \textarrow\ Risiko der Zeitüberschreitung -% \pause - \item - Oder: Der Steuer-Computer macht nichts anderes.\\ - \textarrow\ Verschwendung von Rechenzeit\\ -% \pause - {\color{red}\textarrow\ Na und?} - \end{itemize} - -\end{frame} - -\begin{frame}[fragile] - - \showsubsection - - Das Problem: - \vspace{-\bigskipamount} - \begin{center} - \begin{picture}(6,2) - \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}} - \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}} -% \put(2.75,0.875){\vector(1,3){0.25}} -% \put(2.75,0.875){\line(2,1){0.5}} -% \put(3.25,1.125){\vector(-1,-3){0.25}} - \put(2.70,0.350){\tikz{\draw[latex-latex](0.25,0.625)--(0,-0.12)--(0.5,0.12)--(0.25,-0.625);}} - \end{picture} -% \begin{pdfpic} -% \begin{pspicture}(6,2) -% \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}} -% \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}} -% \psline[arrows=<->](3,0.4)(3.2,1.125)(2.8,0.875)(3,1.6) -% \end{pspicture} -% \end{pdfpic} - \end{center} - - \medskip - - {\large\color{structure}\textbf{"`Verschwendung von Rechenzeit -- na und?"'}} - - \medskip - -% \pause - Große Stückzahlen - \begin{itemize} - \item - 138\,000 Toyota Prius V von Mai 2011 bis April 2012 - \end{itemize} - - \medskip - -% \pause - Wertvolle Ressourcen - \begin{itemize} - \item - Fähigkeiten einer Raumsonde optimieren - % (Marsumlaufbahn: ab ca.~127\,000 Euro pro kg) - % 70000000 / 550000 = 127._27 - % http://www.bernd-leitenberger.de/blog/2009/09/29/reduktion-der-kosten-von-planetenmissionen/ - \only<.(1)>{\\[\medskipamount]\strut\hfill\makebox(0,0)[r]{\includegraphics[height=3.3cm]{curiosity.jpg}}\vspace*{-1cm}} - \pause - \item - Implantat: Platz- und Stromverbrauch minimieren - \only<.(1)>{\\\strut\hfill\makebox(0,0)[r]{\includegraphics[height=3.4cm]{herzschrittmacher.jpg}}\vspace*{-1cm}} - \end{itemize} - - \bigskip - - \pause - \textarrow\ {\large\color{structure}\textbf{Echtzeitprogrammierung}}\\[2pt] - \strut \phantom{\textarrow} Echtzeitanforderungen erfüllen, ohne Ressourcen zu verschwenden - -\end{frame} - -\subsection{Echtzeitprogrammierung} - -\begin{frame} - - \showsubsection - - Echtzeitanforderungen erfüllen, ohne Ressourcen zu verschwenden - - \bigskip - - \alt<.(1)>{Aber wie?}{Beispiele für Lösungen:} - - \begin{itemize} - \pause - \item - ZigBee-Modul:\only<.(1)>{\hfill\makebox(0,0)[tr]{\includegraphics[width=5cm]{xbee.jpg}}}\\ - % http://commons.wikimedia.org/wiki/File:Arduino_xbee.JPG - Funk- vs.\ UART-Protokoll\\ - \textarrow\ dedizierte Hardware - \pause - \item - RP6:\\ - Motorsteuerung vs.\ Anwender-Software\\ - \textarrow\ spezielle Software - \only<.(1)>{\hfill\makebox(0,0)[r]{\includegraphics[width=5cm]{rp6.jpg}}} - \pause - \item - Quadrocopter:\\ - Motorsteuerung vs.\ Sensoren-Abfrage\\ - vs.\ Funk-Fernsteuerung \dots\\ - \textarrow\ spezielle Software - \only<.(1)>{\hfill\makebox(0,0)[br]{\includegraphics[width=5cm]{quadrocopter.jpg}}}\\ - \pause - \item - Flugzeugkabinensimulatortür:\\ - Türsteuerung vs.\ Bedienung\\ - \textarrow\ Echtzeitbetriebssystem - \only<.(1)>{\\[-3.2cm]\strut\hfill\makebox(0,0)[r]{\includegraphics[angle=-90,width=5cm]{dsc_8208.jpg}}} - \end{itemize} - -\end{frame} - -\begin{frame} - - \showsubsection - - Quadrocopter-Steuerung \emph{MultiWii} - \begin{itemize} - \item - Konfiguration durch bedingte Compilierung (Präprozessor) - \item - In der Hauptschleife wird 50mal pro Sekunde der RC-Task aufgerufen,\\ - ansonsten zyklisch einer von bis zu 5 weiteren Tasks. - \end{itemize} - - \pause - - RP6-Steuerung - \begin{itemize} - \item - Konfiguration durch bedingte Compilierung (Präprozessor) - \item - Lichtschranken an Encoder-Scheiben lösen bei Bewegung Interrupts aus.\\ - Die Interrupt-Handler zählen Variable hoch. - \item - 10000mal pro Sekunde: Timer-Interrupt\\ - Durch Zähler im Interrupt-Handler: verschiedene Taktraten\\ - 1000mal pro Sekunde: Stopwatches\\ - 5mal pro Sekunde: Blinkende Power-On-LED\\ - 1000mal pro Sekunde: Bumper, ACS, PWM zur Motorsteuerung\\ - Geschwindigkeitsmessung durch Zählen der Ticks in 0.2\,s\\ - Anpassung der Motorkraft in $\pm$1-Schritten - \pause - \item - Nebenbei: \only<4->{1 }Benutzerprogramm - \end{itemize} - -\end{frame} - -\subsection{Multitasking} - -\begin{frame} - - \showsubsection - - \begin{itemize} - \item - \newterm{Kooperatives Multitasking}\\ - Prozesse geben freiwillig Rechenzeit ab - \item - \newterm{Präemptives Multitasking}\\ - Das Betriebssystem unterbricht laufende Prozesse\\ - (englisch: \emph{to pre-empt\/} -- jemandem zuvorkommen) - \pause - \bigskip - \item - \newterm{Scheduler}\\ - Steuerprogramm, das Prozessen Rechenzeit zuteilt - \item - \newterm{Kontextwechsel}\\ - Umschalten zwischen zwei Prozessen - \item - \newterm{Round-Robin-Verfahren (Rundlauf)}\\ - Zuteilung von \newterm{Zeitschlitzen\/} auf einer \newterm{Zeitscheibe} an die Prozesse - \bigskip - \pause - \item - Ausblick: Zuteilung von Rechenzeit = wichtiger Spezialfall\\ - allgemein: Zuteilung von Ressourcen - \end{itemize} - -\end{frame} - -\subsectionnonumber{Beispiele für Multitasking} - -\begin{frame} - - \showsubsectionnonumber - - Quadrocopter-Steuerung \emph{MultiWii} - \begin{itemize} - \item - Konfiguration durch bedingte Compilierung (Präprozessor) - \item - In der Hauptschleife wird 50mal pro Sekunde der RC-Task aufgerufen,\\ - ansonsten zyklisch einer von bis zu 5 weiteren Tasks. - \end{itemize} - - RP6-Steuerung - \begin{itemize} - \item - Konfiguration durch bedingte Compilierung (Präprozessor) - \item - Lichtschranken an Encoder-Scheiben lösen bei Bewegung Interrupts aus.\\ - Die Interrupt-Handler zählen Variable hoch. - \item - 10000mal pro Sekunde: Timer-Interrupt\\ - verschiedene Tasks werden unterschiedlich häufig aufgerufen - \item - Nebenbei: 1 Benutzerprogramm - \end{itemize} - -% \pause -% -% Linux 0.01 -% \begin{itemize} -% \item -% Timer-Interrupt:\only<2->{ Zähler des aktuellen Tasks wird dekrementiert;}\\ -% Task mit höchstem Zähler bekommt Rechenzeit. -% \item -% Wenn es keinen laufbereiten Task mit positivem Zähler gibt,\\ -% bekommen alle Tasks gemäß ihrer Priorität neue Zähler zugewiesen. -% \item -% \emph{keine\/} harte Echtzeit -% % Aufgabe: Wo wird der Zähler heruntergezählt? -% \end{itemize} - -\end{frame} - -\iffalse - -\subsectionnonumber{Zombies} - -\begin{frame} - - \showsubsectionnonumber - - \pause - Wikipedia: - \begin{quote} - Als Zombie wird die fiktive Figur eines zum Leben erweckten - Toten (Untoter) oder eines seiner Seele beraubten, willenlosen - Wesens bezeichnet. Der Begriff leitet sich von dem Wort nzùmbe - aus der zentralafrikanischen Sprache Kimbundu ab und bezeichnet - dort ursprünglich einen Totengeist. - \end{quote} - - \bigskip - - \pause - Ein Zombie-Prozeß ist bereits beendet ("`tot"'),\\ - bekommt keine Rechenzeit mehr ("`seiner Seele beraubt"'),\\ - hat alle belegten Ressourcen wieder freigegeben ("`willenlos"'),\\ - wird aber noch in der Prozeßliste geführt ("`untot"'). - \begin{itemize} - \pause - \item - Warum? - \textarrow\ - Ein anderer Prozeß (Elternprozeß) wartet noch auf den - Rückgabewert des beendeten Prozesses. - \pause - \item - Schadet das? - \textarrow\ - Nein. - \pause - \item - Aber? - \textarrow\ - Wenn sich Zombie-Prozesse anhäufen, deutet dies auf einen - Prozeß hin, der andere Prozesse erzeugt und anschließend "`hängt"'. - \pause - \item - Beispiel: - Datenträger entfernt, zugreifender Prozeß "`hängt"'.\\ - \textarrow\ - Tochterprozesse werden zu Zombies. - \end{itemize} - -\end{frame} - -\fi - -\subsectionnonumber{Multitasking} - -\begin{frame} - - \showsection - \showsubsection - - \begin{minipage}[t]{6cm} - Qualitätsaspekte beim Multitasking - \begin{itemize} - \item<2-> - Verschiedene Anforderungen: - \newterm{Latenz\/} vs.\ \newterm{Jitter\/}\\ - vs.\ \newterm{Durchsatz} - \smallskip - \begin{onlyenv}<3> - \begin{itemize} - \item - \newterm{Latenz:} interaktive Anwendungen - \item - \newterm{Jitter:} Echtzeitanwendungen - \item - \newterm{Durchsatz:} Stapelverarbeitung - \end{itemize} - \vspace*{-3cm} - \end{onlyenv} - \item<4-> - Ressourcen reservieren:\\ - \newterm{Mutexe} - \only<5->{(= spezielle \newterm{Semaphore\/})\\} - \only<6->{\textarrow\ kommt gleich} - \item<7-> - Verschiedene Methoden\\ - der Priorisierung\\ - \textarrow\ später\\ - \strut - \item<8-> - Umgehung der Probleme durch - speziell geschriebene Software\\ - (MultiWii, RP6, \dots) - \end{itemize} - \end{minipage} - \hfill - \pause[9]% - \begin{minipage}[t]{6.2cm} - Qualitätsaspekte für Netzwerke: - \begin{itemize} - \item - Verschiedene Anforderungen: - \newterm{Latenz\/} vs.\ \newterm{Jitter\/} vs.\ \newterm{Verluste\/}\\vs.\ \newterm{Durchsatz} - \item - Ressourcen reservieren:\\ - \newterm{IntServ} mit \newterm{Resource Reservation Protocol (RSVP)} - \item - Klassifizierung und Priorisierung: - \newterm{DiffServ} mit Type-of-Service-Bits (IPv4) - bzw.\ Traffic-Class-Bits (IPv6) im IP-Header - \item - Eigenes Protokoll (Telefondienste):\\ - \newterm{Asynchronous Transfer Mode (ATM)} - \end{itemize} - \end{minipage} - -\end{frame} - -\subsection{Ressourcen} - -\begin{frame} - - \showsection - \showsubsection - - Ressourcen reservieren - \begin{itemize} - \item - \newterm{Semaphor}\\ - gemeinsame Variable mehrerer Prozesse\\ - zur Regelung des Zugriffs auf eine Ressource\\[\smallskipamount] - Ressource belegt \textarrow\ Kontextwechsel - \begin{onlyenv}<1> - \par\medskip - griechisch: \emph{sema\/} -- Zeichen, \emph{pherein\/} -- tragen\\ - "`Eisenbahnsignal"' - \vspace*{-3cm} - \end{onlyenv} - \pause - \medskip - \item - \newterm{Mutex}\\ - Mechanismus, damit immer nur ein Prozeß gleichzeitig\\ - auf eine Ressource zugreifen kann - \begin{onlyenv}<2> - \par\medskip - englisch: \emph{mutual exclusion\/} -- wechselseitiger Ausschluß\\ - spezieller binärer Semaphor: nur "`Besitzer"' darf freigeben\\ - % allgemein: auch jemand anderer dürfte freigeben - \vspace*{-3cm} - \end{onlyenv} - \pause - \medskip - \item - \newterm{Spinlock} (\emph{busy waiting\/})\\ - leichtgewichtige Alternative zu Kontextwechsel - \begin{onlyenv}<3> - \par\medskip - englisch: \emph{spin\/} -- rotieren, \emph{lock\/} Sperre\\ - \emph{busy waiting} auf etwas Schnelles, z.\,B.\ auf einen Semaphor\\[\medskipamount] - Hardware-Unterstützung: - Prüfen, ob Variable bestimmten Wert hat;\\ - wenn ja, auf anderen Wert setzen; andere Prozessoren solange anhalten - \vspace*{-3cm} - \end{onlyenv} - \pause - \medskip - \item - \newterm{Kritischer Abschnitt -- critical section}\\ - Programmabschnitt zwischen Reservierung\\ - und Freigabe einer Ressource\\ - \textarrow\ sollte immer so kurz wie möglich sein - \end{itemize} - \vspace*{-1cm} - -\end{frame} - -\iffalse - -\begin{frame} - - \showsection - \showsubsection - - Ressourcen reservieren -- - Beispiel: \file{linux-3.7rc1} - \begin{itemize} - \item - \newterm{Semaphor}\\ - \file{kernel/semaphor.c}\\ - \file{drivers/usb/core/file.c} - \medskip - \item - \newterm{Mutex}\\ - \file{kernel/mutex.c}\\ - \file{drivers/usb/serial/usb-serial.c} - \medskip - \item - \newterm{Spinlock}\\ - \file{kernel/spinlock.c}\\ - \file{kernel/semaphor.c}, - \file{kernel/mutex.c} - \end{itemize} - - % Aufgabe: Anwendungsarten im MultiWii- und RP6-Code identifizieren - - % evtl. Aufgabe: Warte-Problem - - % Aufgabe: Wie lösen bekannte Multitasking-Betriebssysteme - % das o.a. Zuteilungsproblem? - - % Danach: Semaphoren, Mutexe, Spinlocks - % Priorisierungsmethoden und -probleme - - % Festplatten: completely fair queueing - % cat /sys/block/sdc/queue/scheduler - % "noop" hat sich für SVG gelohnt - - % Virtualisierung + Kernel-Threads + Multiprozessorsystem = Chaos - -\end{frame} - -\begin{frame}[fragile] - - \textbf{Beispiel:} - \lstinline{usb_serial_get_by_index()} -- serielle Schnittstelle reservieren - - Datei \file{linux-3.7-rc1/drivers/usb/serial/usb-serial.c}, ab Zeile 62 - - \medskip - - \begin{lstlisting} - struct usb_serial *usb_serial_get_by_index (unsigned index) - { - struct usb_serial *serial; - mutex_lock (&table_lock); - serial = serial_table[index]; - if (serial) - { - mutex_lock (&serial->disc_mutex); - if (serial->disconnected) - { - mutex_unlock (&serial->disc_mutex); - serial = NULL; - } - else - kref_get (&serial->kref); - } - mutex_unlock (&table_lock); - return serial; - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(5.1,6.85){\vector(-1,0){0.5}} - \put(5.2,6.85){\makebox(0,0)[l]{exklusiven Zugriff auf Tabelle sichern}} - \put(5.4,1.35){\vector(-1,0){0.5}} - \put(5.5,1.35){\makebox(0,0)[l]{\shortstack[l]{exklusiven Zugriff auf Tabelle\\wieder freigeben}}} - \end{picture} - -\end{frame} - -\setlength{\pdfpageheight}{48cm} - -\begin{frame}[fragile] - - \lstinline{mutex_lock()} -- Ressource beanspruchen, notfalls warten - - Datei \file{linux-3.7-rc1/drivers/usb/serial/usb-serial.c}, ab Zeile 62 - - \medskip - - \begin{lstlisting} - void __sched mutex_lock (struct mutex *lock) - { - might_sleep (); - __mutex_fastpath_lock (&lock->count, __mutex_lock_slowpath); - mutex_set_owner (lock); - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(11.6,1.35){\line(-1,0){1}} - \put(11.6,1.35){\line(0,-1){2.45}} - \put(11.6,-1.10){\vector(-1,0){2.0}} - \end{picture} - - \bigskip - - Datei \file{linux-3.7-rc1/arch/x86/include/asm/mutex\_32.h}, ab Zeile 24 - - Macro-Definition für \lstinline{__mutex_fastpath_lock} (expandiert) - - \medskip - - Assembler: - \begin{lstlisting}[language={[x86masm]Assembler}] - lock dec (lock->count) - jns 1 - call __mutex_lock_slowpath - 1: - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(9,0.95){\line(-1,0){3.5}} - \put(9,0.95){\line(0,-1){2.5}} - \put(9.0,-1.55){\vector(-1,0){1.0}} - \end{picture} - - \bigskip - - Datei \file{linux-3.7-rc1/kernel/mutex.c}, ab Zeile 398 - - \medskip - - \begin{lstlisting} - static __used noinline void __sched - __mutex_lock_slowpath (atomic_t *lock_count) - { - struct mutex *lock = container_of (lock_count, struct mutex, count); - __mutex_lock_common (lock, TASK_UNINTERRUPTIBLE, 0, - NULL, _RET_IP_); - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(11.0,1.40){\line(-1,0){1.0}} - \put(11.0,1.40){\vector(0,-1){2.5}} - \end{picture} - - \bigskip - - Datei \file{linux-3.7-rc1/kernel/mutex.c}, ab Zeile 132 - - \medskip - - \begin{lstlisting} - static inline int __sched - __mutex_lock_common (struct mutex *lock, long state, unsigned int subclass, - struct lockdep_map *nest_lock, unsigned long ip) - { - struct task_struct *task = current; - struct mutex_waiter waiter; - unsigned long flags; - - preempt_disable (); - mutex_acquire_nest (&lock->dep_map, subclass, 0, nest_lock, ip); - - /* ... */ - - spin_lock_mutex (&lock->wait_lock, flags); - - debug_mutex_lock_common (lock, &waiter); - debug_mutex_add_waiter (lock, &waiter, task_thread_info (task)); - - /* add waiting tasks to the end of the waitqueue (FIFO): */ - list_add_tail (&waiter.list, &lock->wait_list); - waiter.task = task; - - if (atomic_xchg (&lock->count, -1) == 1) - goto done; - - lock_contended (&lock->dep_map, ip); - - for (;;) - { - /* - * Lets try to take the lock again - this is needed even if - * we get here for the first time (shortly after failing to - * acquire the lock), to make sure that we get a wakeup once - * it's unlocked. Later on, if we sleep, this is the - * operation that gives us the lock. We xchg it to -1, so - * that when we release the lock, we properly wake up the - * other waiters: - */ - if (atomic_xchg (&lock->count, -1) == 1) - break; - - /* - * got a signal? (This code gets eliminated in the - * TASK_UNINTERRUPTIBLE case.) - */ - if (unlikely (signal_pending_state (state, task))) - { - mutex_remove_waiter (lock, &waiter, task_thread_info (task)); - mutex_release (&lock->dep_map, 1, ip); - spin_unlock_mutex (&lock->wait_lock, flags); - - debug_mutex_free_waiter (&waiter); - preempt_enable (); - return -EINTR; - } - __set_task_state (task, state); - - /* didn't get the lock, go to sleep: */ - spin_unlock_mutex (&lock->wait_lock, flags); - schedule_preempt_disabled (); - spin_lock_mutex (&lock->wait_lock, flags); - } - - done: - lock_acquired (&lock->dep_map, ip); - /* got the lock - rejoice! */ - mutex_remove_waiter (lock, &waiter, current_thread_info ()); - mutex_set_owner (lock); - - /* set it to 0 if there are no waiters left: */ - if (likely (list_empty (&lock->wait_list))) - atomic_set (&lock->count, 0); - - spin_unlock_mutex (&lock->wait_lock, flags); - - debug_mutex_free_waiter (&waiter); - preempt_enable (); - - return 0; - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(7.9,28.3){\vector(-1,0){0.5}} - \put(8.0,28.3){\makebox(0,0)[l]{\shortstack[l]{exklusiven Zugriff\\auf Mutex sichern}}} - \put(7.4,2.3){\vector(-1,1){0.4}} - \put(7.5,2.0){\makebox(0,0)[l]{\shortstack[l]{exklusiven Zugriff auf Mutex\\wieder freigeben}}} - \end{picture} - -\end{frame} - -\setlength{\pdfpageheight}{40.5cm} - -\begin{frame}[fragile] - - \lstinline{spin_lock_mutex()} -- Mutex beanspruchen, notfalls \emph{busy waiting} - - Datei \file{linux-3.7-rc1/kernel/mutex.h}, ab Zeile 12 - - \medskip - - \begin{lstlisting} - #define spin_lock_mutex(lock, flags) \ - do \ - { \ - spin_lock (lock); \ - (void) (flags); \ - } \ - while (0) - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(8.5,1.75){\line(-1,0){4.5}} - \put(8.5,1.75){\line(0,-1){2.9}} - \put(8.5,-1.15){\vector(-1,0){1.0}} - \end{picture} - - \bigskip - - Datei \file{linux-3.7-rc1/kernel/spinlock.h}, ab Zeile 283 - - \medskip - - \begin{lstlisting} - static inline void spin_lock (spinlock_t *lock) - { - raw_spin_lock (&lock->rlock); - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(9.3,0.95){\line(-1,0){4.0}} - \put(9.3,0.95){\line(0,-1){2.1}} - \put(9.3,-1.15){\vector(-1,0){1.0}} - \end{picture} - - \bigskip - - Datei \file{linux-3.7-rc1/kernel/spinlock.h}, Zeile 170 - - \medskip - - \begin{lstlisting} - #define raw_spin_lock(lock) _raw_spin_lock (lock) - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(10.0,0.55){\line(-1,0){0.5}} - \put(10.0,0.55){\line(0,-1){1.7}} - \put(10.0,-1.15){\vector(-1,0){1.3}} - \end{picture} - - \bigskip - - Datei \file{linux-3.7-rc1/include/linux/spinlock\_api\_smp.h}, Zeile 47 - - \medskip - - \begin{lstlisting} - #define _raw_spin_lock(lock) __raw_spin_lock (lock) - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(10.7,0.55){\line(-1,0){0.5}} - \put(10.7,0.55){\line(0,-1){1.75}} - \put(10.7,-1.2){\vector(-1,0){2.3}} - \end{picture} - - \bigskip - - Datei \file{linux-3.7-rc1/kernel/spinlock.c}, ab Zeile 46 (expandiert): - - \medskip - - \begin{lstlisting} - void __lockfunc __raw_spin_lock (spinlock_t *lock) - { - for (;;) - { - preempt_disable (); - if (likely (do_raw_spin_trylock (lock))) - break; - preempt_enable (); - - if (!(lock)->break_lock) - (lock)->break_lock = 1; - while (!raw_spin_can_lock (lock) && (lock)->break_lock) - arch_spin_relax (&lock->raw_lock); - } - (lock)->break_lock = 0; - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(10.7,4.75){\line(-1,0){3.5}} - \put(10.7,4.75){\line(0,-1){5.95}} - \put(10.7,-1.2){\vector(-1,0){1.1}} - \end{picture} - - \bigskip - - Datei \file{linux-3.7-rc1/include/linux/spinlock.h}, ab Zeile 150: - - \medskip - - \begin{lstlisting} - static inline int do_raw_spin_trylock (raw_spinlock_t *lock) - { - return arch_spin_trylock (&(lock)->raw_lock); - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(11.5,0.95){\line(-1,0){3.5}} - \put(11.5,0.95){\line(0,-1){2.1}} - \put(11.5,-1.15){\vector(-1,0){0.7}} - \end{picture} - - \bigskip - - Datei \file{arch/x86/include/asm/spinlock.h}, ab Zeile 116: - - \medskip - - \begin{lstlisting} - static __always_inline int arch_spin_trylock (arch_spinlock_t *lock) - { - return __ticket_spin_trylock (lock); - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(9.5,0.95){\line(-1,0){3.5}} - \put(9.5,0.95){\vector(0,-1){1.7}} - \end{picture} - - \bigskip - - Datei \file{arch/x86/include/asm/spinlock.h}, ab Zeile 65: - - \medskip - - \begin{lstlisting} - static __always_inline int __ticket_spin_trylock (arch_spinlock_t *lock) - { - arch_spinlock_t old, new; - - old.tickets = ACCESS_ONCE (lock->tickets); - if (old.tickets.head != old.tickets.tail) - return 0; - - new.head_tail = old.head_tail + (1 << TICKET_SHIFT); - - /* cmpxchg is a full barrier, so nothing can move before it */ - return cmpxchg (&lock->head_tail, old.head_tail, new.head_tail) == old.head_tail; - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(2.2,0.3){\line(0,1){0.4}} - \put(9.0,0.3){\line(-1,0){6.8}} - \put(9.0,0.3){\line(0,-1){1.45}} - \put(9.0,-1.15){\vector(-1,0){3.2}} - \end{picture} - - \bigskip - - Datei \file{arch/x86/include/asm/cmpxchg.h}, ab Zeile 147: - - \medskip - - \begin{lstlisting} - #define cmpxchg(ptr, old, new) \ - __cmpxchg (ptr, old, new, sizeof (*(ptr))) - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(9.0,0.5){\line(-1,0){1.8}} - \put(9.0,0.5){\line(0,-1){1.65}} - \put(9.0,-1.15){\vector(-1,0){2.2}} - \end{picture} - - \bigskip - - Datei \file{arch/x86/include/asm/cmpxchg.h}, ab Zeile 131: - - \medskip - - \begin{lstlisting} - #define __cmpxchg(ptr, old, new, size) \ - __raw_cmpxchg ((ptr), (old), (new), (size), LOCK_PREFIX) - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(2.2,-0.1){\line(0,1){0.3}} - \put(9.0,-0.1){\line(-1,0){6.8}} - \put(9.0,-0.1){\line(0,-1){1.05}} - \put(9.0,-1.15){\vector(-1,0){2.2}} - \end{picture} - - \bigskip - - Datei \file{arch/x86/include/asm/cmpxchg.h}, ab Zeile 110: - - \medskip - - \begin{lstlisting} - asm volatile (lock "cmpxchgl %2,%1" \ - : "=a" (__ret), "+m" (*__ptr) \ - : "r" (__new), "0" (__old) \ - : "memory"); - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(9.8,1.8){\vector(-1,0){0.6}} - \put(9.8,1.2){\line(0,1){0.6}} - \put(9.8,1.1){\makebox(0,0)[t]{\shortstack{atomarer und exklusiver\\Zugriff auf Spinlock\\durch Hardware-Unterstützung}}} - \end{picture} - -\end{frame} - -\setlength{\pdfpageheight}{\normalpdfpageheight} - -%\sectionnonumber{Literaturempfehlung} -%\subsectionnonumber{Automotive Embedded Systeme} -% -%\begin{frame}[c] -% -% \showsectionnonumber -% -% Prof.\ Dr.\ Joachim Wietzke, FH Darmstadt,\\ -% Prof.\ Dr.\ Manh Tien Tran, FH Kaiserslautern: -% -% \medskip -% -% \showsubsectionnonumber -% -% \vspace{-\medskipamount} -% -% Springer-Verlag, Berlin, Heidelberg 2005 -% -% \bigskip -% -% Lizenz: proprietär -% -% \medskip -% -% (gesetzt mit \textrm{\LaTeX}, ca.\ \EUR{10}) -% -%\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - Ressourcen reservieren - \begin{itemize} - \item - \newterm{Semaphor}\\ - gemeinsame Variable mehrerer Prozesse\\ - zur Regelung des Zugriffs auf eine Ressource\\[\smallskipamount] - Ressource belegt \textarrow\ Kontextwechsel - \medskip - \item - \newterm{Mutex}\\ - Mechanismus, damit immer nur ein Prozeß gleichzeitig\\ - auf eine Ressource zugreifen kann - \medskip - \item - \newterm{Spinlock} (\emph{busy waiting\/})\\ - leichtgewichtige Alternative zu Kontextwechsel - \medskip - \item - \newterm{Kritischer Abschnitt -- critical section}\\ - Programmabschnitt zwischen Reservierung\\ - und Freigabe einer Ressource\\ - \textarrow\ sollte immer so kurz wie möglich sein - \end{itemize} - \vspace*{-1cm} - -\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - \begin{picture}(0,0) - \only<2-3>{\put(6.3,-7){\includegraphics[height=6cm]{philosophenproblem.jpg}}} - \end{picture}% - \newterm{Verklemmungen\/}: Gegenseitiges Blockieren von Ressourcen - \begin{itemize} - \item - \newterm{Deadlock\/}: Prozeß wartet - \item - \newterm{Livelock\/}: Prozeß macht andere Dinge\\ - (z.\,B.\ \emph{busy waiting\/}) - \end{itemize} - - \pause - \bigskip - - Beispiel: Philosophenproblem - - \only<2-3>{% - \begin{itemize} - \item - 5 Philosophen, 5 Gabeln - \item - 2 Gabeln zum Essen notwendig - \item - Wer essen will, nimmt eine Gabel\\ - und wartet notfalls auf die zweite. - \item - Keiner legt eine einzelne Gabel\\ - wieder zurück. - \end{itemize} - Jeder hält 1 Gabel \textarrow\ \newterm{Verklemmung}\\[0.5\smallskipamount] - \pause - \strut\quad schweigen \textarrow\ \newterm{Deadlock}\\ - \strut\quad philosophieren weiter \textarrow\ \newterm{Livelock}\\[-1cm] - } - \only<4->{% - \bigskip - - Bedingungen für Verklemmungen: - - \begin{minipage}[t]{4.5cm} - \begin{itemize} - \item - Exklusivität - \item - \newterm{hold and wait} - \item - Entzug nicht möglich - \item - zirkuläre Blockade - \end{itemize} - \end{minipage}\pause[5] - \begin{minipage}[t]{7.5cm} - \begin{itemize} - \arrowitem - Spooling - \arrowitem - simultane Zuteilung - \arrowitem - Prozesse suspendieren, beenden, \newterm{Rollback} - \arrowitem - Reihenfolge abhängig von Ressourcen - \end{itemize} - \end{minipage} - } - -\end{frame} - -\subsection{Prioritäten} - -\begin{frame} - - \showsection - \showsubsection - - Linux 0.01 - \begin{itemize} - \item - Timer-Interrupt: Zähler des aktuellen Prozesses wird dekrementiert;\\ - Prozeß mit höchstem Zähler bekommt Rechenzeit. - \item - Wenn es keinen laufbereiten Prozeß mit positivem Zähler gibt,\\ - bekommen alle Prozesse gemäß ihrer \newterm{Priorität\/} neue Zähler zugewiesen. - \item - \emph{keine\/} harte Echtzeit - \arrowitem - \newterm{dynamische Prioritätenvergabe\/}:\\ - Rechenzeit hängt vom Verhalten des Prozesses ab - \end{itemize} - - \medskip - - Echtzeitbetriebssysteme - \begin{itemize} - \item - Prozesse können einen festen Anteil an Rechenzeit bekommen. - \item - Bei Ereignissen können Prozesse hoher Priorität\\ - Prozesse niedriger Priorität unterbrechen, aber nicht umgekehrt. - \arrowitem - \newterm{statische Prioritätenvergabe} - \end{itemize} - -\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - Echtzeitbetriebssysteme - \begin{itemize} - \item - Prozesse können einen festen Anteil an Rechenzeit bekommen. - \item - Bei Ereignissen können Prozesse hoher Priorität\\ - Prozesse niedriger Priorität unterbrechen, aber nicht umgekehrt. - \end{itemize} - - \vspace{0cm plus 1filll} - - \begin{center} - \begin{picture}(11,4)(-1,0) - \small - - \put(-0.1,0.5){\vector(1,0){10.1}} - \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}} - \put(0,0.4){\vector(0,1){3.6}} - \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}} - - \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \put(3,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}} - \put(5,3){{\color{lightorange}\rule{0.6cm}{0.4cm}}} - \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}} - \put(0,3){\line(1,0){10}} - - \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}} - \put(1.5,1){{\color{lightgreen}\rule{1.5cm}{0.4cm}}} - \put(3.7,1){{\color{lightgreen}\rule{0.6cm}{0.4cm}}} - \alt<1>{% - \put(7.9,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}} - }{% - \put(8.1,1){{\color{lightgreen}\rule{0.9cm}{0.4cm}}} - } - \put(9.7,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}} - \put(0,1){\line(1,0){10}} - - \pause - - \put(4.6,2){{\color{lightyellow}\rule{0.4cm}{0.4cm}}} - \put(5.7,2){{\color{lightyellow}\rule{1.3cm}{0.4cm}}} - \put(7.7,2){{\color{lightyellow}\rule{0.4cm}{0.4cm}}} - \put(0,2){\line(1,0){10}} - - \end{picture} - \end{center} - -\end{frame} - -\subsectionnonumber{Prioritäten \protect\color{darkgray}und Ressourcen} - -\begin{frame} - - \showsection - \showsubsection - - \only<4->{% - Der höher priorisierte Prozeß bewirkt selbst,\\ - daß er eine Ressource verspätet bekommt. - - \medskip - - \textarrow\ \newterm{begrenzte Prioritätsinversion} - - \medskip - - maximale Verzögerung: Länge des kritischen Bereichs - } - - \vspace{0cm plus 1filll} - - \begin{center} - \begin{picture}(11,4)(-1,0) - \small - - \put(-0.1,0.5){\vector(1,0){10.1}} - \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}} - \put(0,0.4){\vector(0,1){3.6}} - \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}} - - \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \only<1-2>{\put(3,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}} - \only<3->{\put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}}} - \only<3-4>{% - \put(3.4,3){{\color{red}\rule{0.8cm}{0.4cm}}} - \put(4.2,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}} - {\thicklines - \put(3.3,2.95){\line(2,1){1.0}} - \put(3.3,3.45){\line(2,-1){1.0}}} - } - \only<5->{% - \put(3.9,3){{\color{red}\rule{0.8cm}{0.4cm}}} - \put(4.7,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}} - } - \put(5,3){{\color{lightorange}\rule{0.6cm}{0.4cm}}} - \only<1-2>{% - \put(5.4,3){{\color{red}\rule{0.8cm}{0.4cm}}} - \put(6.2,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}} - } - \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}} - \put(0,3){\line(1,0){10}} - - \only<2->{% - \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}} - \put(1.5,1){{\color{lightgreen}\rule{1.5cm}{0.4cm}}} - \put(2.6,1){{\color{medgreen}\rule{0.4cm}{0.4cm}}} - \only<2-4>{% - \put(3.7,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}} - \put(4.2,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}} - } - \only<5->{% - \put(3.4,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}} - \put(4.9,1){{\color{lightgreen}\rule{0.1cm}{0.4cm}}} - \put(5.6,1){{\color{lightgreen}\rule{0.2cm}{0.4cm}}} - } - \put(7.7,1){{\color{lightgreen}\rule{1.3cm}{0.4cm}}} - \put(9.7,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}} - \put(0,1){\line(1,0){10}} - } - \end{picture} - \end{center} - -\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - \visible<4->{% - Ein Prozeß mit mittlerer Priorität bewirkt, - daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt. - - \medskip - - \textarrow\ }\newterm{unbegrenzte Prioritätsinversion} - - \pause - \vspace{0cm plus 1filll} - - \begin{center} - \begin{picture}(11,4)(-1,0) - \small - - \put(-0.1,0.5){\vector(1,0){10.1}} - \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}} - \put(0,0.4){\vector(0,1){3.6}} - \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}} - - \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}} - \only<2>{% - \put(3.4,3){{\color{red}\rule{0.8cm}{0.4cm}}} - \put(4.2,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}} - {\thicklines - \put(3.3,2.95){\line(2,1){1.0}} - \put(3.3,3.45){\line(2,-1){1.0}}} - \put(5,3){{\color{lightorange}\rule{0.6cm}{0.4cm}}} - \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}} - } - \put(0,3){\line(1,0){10}} - - \only<2->{% - \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}} - \put(1.5,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}} - \alt<1-4>{% - \put(2.6,1){{\color{medgreen}\rule{0.4cm}{0.4cm}}} - }{% - \put(2.6,1){{\color{medgreen}\rule{0.2cm}{0.4cm}}} - } - \only<2>{% - \put(3.7,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}} - \put(4.2,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}} - } - \only<3-4>{% - \put(3.4,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}} -% \put(3.9,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}} - } - \only<2>{% - \put(7.7,1){{\color{lightgreen}\rule{1.3cm}{0.4cm}}} - \put(9.7,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}} - } - \put(0,1){\line(1,0){10}} - } - - \only<5->{% - \put(2.8,2){{\color{lightyellow}\rule{0.2cm}{0.4cm}}} - \put(3.4,2){{\color{lightyellow}\rule{6.6cm}{0.4cm}}} - \put(0,2){\line(1,0){10}} - } - \end{picture} - \end{center} - -\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - Ein Prozeß mit mittlerer Priorität bewirkt, - daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt. - - \medskip - - \textarrow\ \newterm{unbegrenzte Prioritätsinversion} - - \medskip - - Beispiel: Beinahe-Verlust der Marssonde \emph{Pathfinder\/} im Juli 1997 - - \only<1>{% - \begin{center} - \includegraphics[width=8.5cm]{pathfinder.jpg} - \vspace*{-1.5cm} - \end{center} - } - - \bigskip - - \only<2>{% - Gegenmaßnahmen - \begin{itemize} - \item - \newterm{Priority Inheritance -- Prioritätsvererbung}\\ - Der Besitzer des Mutex erbt die Priorität\\ - des Prozesses, der auf den Mutex wartet. - \end{itemize} - - \bigskip - - \begin{minipage}{7.0cm} - \begin{flushright} - \url{http://research.microsoft.com/en-us/\\um/people/mbj/Mars\_Pathfinder/} - \end{flushright} - \end{minipage} - - \vspace{-0.2cm}\strut\hfill\makebox(0,0)[br]{\includegraphics[height=2.7cm]{pathfinder.jpg}}\vspace*{-1cm} - } - -\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - Ein Prozeß mit mittlerer Priorität bewirkt, - daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt. - - \medskip - - \textarrow\ \newterm{unbegrenzte Prioritätsinversion} - - \bigskip - - Gegenmaßnahme: \newterm{Priority Inheritance -- Prioritätsvererbung} - - \vspace{0cm plus 1filll} - - \begin{center} - \begin{picture}(11,4)(-1,0) - \small - - \put(-0.1,0.5){\vector(1,0){10.1}} - \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}} - \put(0,0.4){\vector(0,1){3.6}} - \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}} - - \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}} - \put(1.5,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}} - \put(2.6,1){{\color{medgreen}\rule{0.2cm}{0.4cm}}} - \put(0,1){\line(1,0){10}} - - \put(2.8,2){{\color{lightyellow}\rule{0.2cm}{0.4cm}}} - \only<1-2>{% - \put(3.4,2){{\color{lightyellow}\rule{6.6cm}{0.4cm}}} - } - \put(0,2){\line(1,0){10}} - - \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}} - \put(0,3){\line(1,0){10}} - - \only<2>{% - \put(3.4,3){{\color{red}\rule{0.8cm}{0.4cm}}} - {\thicklines - \put(3.3,2.95){\line(2,1){1.0}} - \put(3.3,3.45){\line(2,-1){1.0}}} - } - - \only<3->{% - \put(3.4,3){{\color{medgreen}\rule{0.7cm}{0.4cm}}} - \put(4.1,3){{\color{red}\rule{0.8cm}{0.4cm}}} - \put(5.7,2){{\color{lightyellow}\rule{1.3cm}{0.4cm}}} - \put(4.9,3){{\color{lightorange}\rule{0.8cm}{0.4cm}}} - \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \put(7.5,2){{\color{lightyellow}\rule{1.5cm}{0.4cm}}} - \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}} - \put(9.7,2){{\color{lightyellow}\rule{0.3cm}{0.4cm}}} - } - \end{picture} - \end{center} - -\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - Ein Prozeß mit mittlerer Priorität bewirkt, - daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt. - - \medskip - - \textarrow\ \newterm{unbegrenzte Prioritätsinversion} - - \bigskip - - Gegenmaßnahme: \newterm{Priority Ceiling -- Prioritätsobergrenze} - - \vspace{0cm plus 1filll} - - \begin{center} - \begin{picture}(11,4)(-1,0) - \small - - \put(-0.1,0.5){\vector(1,0){10.1}} - \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}} - \put(0,0.4){\vector(0,1){3.6}} - \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}} - - \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}} - \put(1.5,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}} -% \only<1>{% -% \put(2.6,1){{\color{medgreen}\rule{0.2cm}{0.4cm}}} -% } - \put(0,1){\line(1,0){10}} - -% \only<1>{% -% \put(2.8,2){{\color{lightyellow}\rule{0.2cm}{0.4cm}}} -% \put(3.4,2){{\color{lightyellow}\rule{6.6cm}{0.4cm}}} -% } - \put(0,2){\line(1,0){10}} - - \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} -% \only<1>{% -% \put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}} -% } - \put(0,3){\line(1,0){10}} - -% \only<2>{% -% \only<2>{% - \put(2.6,3){{\color{medgreen}\rule{0.9cm}{0.4cm}}} - \put(3.5,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}} - \put(3.9,3){{\color{red}\rule{0.8cm}{0.4cm}}} - \put(4.7,3){{\color{lightorange}\rule{0.8cm}{0.4cm}}} - \put(5.5,2){{\color{lightyellow}\rule{1.5cm}{0.4cm}}} - \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \put(7.5,2){{\color{lightyellow}\rule{1.5cm}{0.4cm}}} - \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}} - \put(9.7,2){{\color{lightyellow}\rule{0.3cm}{0.4cm}}} -% } - \end{picture} - \end{center} - -\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - Ein Prozeß mit mittlerer Priorität bewirkt, - daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt. - - \medskip - - \textarrow\ \newterm{unbegrenzte Prioritätsinversion} - - \medskip - - Beispiel: Beinahe-Verlust der Marssonde \emph{Pathfinder\/} im Juli 1997 - - \bigskip - - Gegenmaßnahmen - \begin{itemize} - \item - \newterm{Priority Inheritance -- Prioritätsvererbung}\\ - Der Besitzer des Mutex erbt die Priorität\\ - des Prozesses, der auf den Mutex wartet. - \smallskip - \item - \newterm{Priority Ceiling -- Prioritätsobergrenze}\\ - Der Besitzer des Mutex bekommt sofort\\ - die Priorität des höchstmöglichen Prozesses,\\ - der evtl.\ den Mutex benötigen könnte. - \pause - \begin{picture}(0,0) - \put(1.2,1.45){\makebox(0,0)[l]{$\left\}\rule{0pt}{1.7cm}\right.$ - \begin{minipage}{4cm} - nur möglich, wenn\\ - Mutexe im Spiel sind - \end{minipage}}} - \end{picture} - \smallskip - \pause - \item - \newterm{Priority Aging}\\ - Die Priorität wächst mit der Wartezeit. - \end{itemize} - \vspace*{-1cm} - -\end{frame} - -\fi - -\end{document} diff --git a/20211125/function-pointer.txt b/20211125/function-pointer.txt deleted file mode 100644 index cad7e7b3abfc759c728c98f43aacba152cea8c09..0000000000000000000000000000000000000000 --- a/20211125/function-pointer.txt +++ /dev/null @@ -1,5 +0,0 @@ -static void (*BUMPERS_stateChangedHandler)(void) = BUMPERS_stateChanged_DUMMY; - ^ - Das, worauf BUMPERS_stateChangedHandler zeigt, ist eine Funktion. - -=> BUMPERS_stateChangedHandler ist ein Zeiger auf eine Funktion. diff --git a/20211125/herzschrittmacher.jpg b/20211125/herzschrittmacher.jpg deleted file mode 120000 index 92d8f0053003cc555aec83f5d088f1cec822ad81..0000000000000000000000000000000000000000 --- a/20211125/herzschrittmacher.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/herzschrittmacher.jpg \ No newline at end of file diff --git a/20211125/if-operator.txt b/20211125/if-operator.txt deleted file mode 100644 index 84935fb33cab3f65b1a2f7ac5f5d06ceb48d32e7..0000000000000000000000000000000000000000 --- a/20211125/if-operator.txt +++ /dev/null @@ -1,8 +0,0 @@ - if (bed) - a = 1; - else - a = 2; - -ist äquivalent zu: - - a = bed ? 1 : 2; diff --git a/20211125/logo-hochschule-bochum-cvh-text-v2.pdf b/20211125/logo-hochschule-bochum-cvh-text-v2.pdf deleted file mode 120000 index 4aa99b8f81061aca6dcaf43eed2d9efef40555f8..0000000000000000000000000000000000000000 --- a/20211125/logo-hochschule-bochum-cvh-text-v2.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/logo-hochschule-bochum-cvh-text-v2.pdf \ No newline at end of file diff --git a/20211125/logo-hochschule-bochum.pdf b/20211125/logo-hochschule-bochum.pdf deleted file mode 120000 index b6b9491e370e499c9276918182cdb82cb311bcd1..0000000000000000000000000000000000000000 --- a/20211125/logo-hochschule-bochum.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/logo-hochschule-bochum.pdf \ No newline at end of file diff --git a/20211125/pathfinder.jpg b/20211125/pathfinder.jpg deleted file mode 120000 index 23c6444fee26e0cf0dd2f8639484b00aa5021b59..0000000000000000000000000000000000000000 --- a/20211125/pathfinder.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/pathfinder.jpg \ No newline at end of file diff --git a/20211125/pgslides.sty b/20211125/pgslides.sty deleted file mode 120000 index 5be1416f4216f076aa268901f52a15d775e43f64..0000000000000000000000000000000000000000 --- a/20211125/pgslides.sty +++ /dev/null @@ -1 +0,0 @@ -../common/pgslides.sty \ No newline at end of file diff --git a/20211125/philosophenproblem.jpg b/20211125/philosophenproblem.jpg deleted file mode 120000 index 26591b2ac2dddfd4786814baf3f19ecb67f1f5ee..0000000000000000000000000000000000000000 --- a/20211125/philosophenproblem.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/philosophenproblem.jpg \ No newline at end of file diff --git a/20211125/quadrocopter.jpg b/20211125/quadrocopter.jpg deleted file mode 120000 index 7eaf0c024b63b7bc1dd3df2c17c8ab93f67fc15c..0000000000000000000000000000000000000000 --- a/20211125/quadrocopter.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/quadrocopter.jpg \ No newline at end of file diff --git a/20211125/rp6.jpg b/20211125/rp6.jpg deleted file mode 120000 index 2a0ecff23845770c3a98178eca6dce3ec73aca58..0000000000000000000000000000000000000000 --- a/20211125/rp6.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/rp6.jpg \ No newline at end of file diff --git a/20211125/xbee.jpg b/20211125/xbee.jpg deleted file mode 120000 index ff0adff2eadf3d9b775d03cea8cf1f118534e2b9..0000000000000000000000000000000000000000 --- a/20211125/xbee.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/xbee.jpg \ No newline at end of file diff --git a/20211202/Retribution_Engine_Screenshot_120807.jpg b/20211202/Retribution_Engine_Screenshot_120807.jpg deleted file mode 120000 index 19f4cb3e4aae1e24c3466a25b2c0e5ad90ee49e7..0000000000000000000000000000000000000000 --- a/20211202/Retribution_Engine_Screenshot_120807.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/Retribution_Engine_Screenshot_120807.jpg \ No newline at end of file diff --git a/20211202/Telefon_t-sinus-700.jpg b/20211202/Telefon_t-sinus-700.jpg deleted file mode 120000 index 27c322c50b0f05edc8b07cfb0cc99b1876eb506d..0000000000000000000000000000000000000000 --- a/20211202/Telefon_t-sinus-700.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/Telefon_t-sinus-700.jpg \ No newline at end of file diff --git a/20211202/a380.jpg b/20211202/a380.jpg deleted file mode 120000 index 33a5d1fd18843bf7385e5a6d90f69af9fd8720da..0000000000000000000000000000000000000000 --- a/20211202/a380.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/a380.jpg \ No newline at end of file diff --git a/20211202/curiosity.jpg b/20211202/curiosity.jpg deleted file mode 120000 index 4452844da537414b751c5283ca8468b3ced9afb3..0000000000000000000000000000000000000000 --- a/20211202/curiosity.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/curiosity.jpg \ No newline at end of file diff --git a/20211202/dsc_8208.jpg b/20211202/dsc_8208.jpg deleted file mode 120000 index 5796341ebc774aa09965a3a29854c65ce1144fb8..0000000000000000000000000000000000000000 --- a/20211202/dsc_8208.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/dsc_8208.jpg \ No newline at end of file diff --git a/20211202/es-20211202.pdf b/20211202/es-20211202.pdf deleted file mode 100644 index ba420eb35191fb7479bcfb05f3ae86df96e6b935..0000000000000000000000000000000000000000 Binary files a/20211202/es-20211202.pdf and /dev/null differ diff --git a/20211202/es-20211202.tex b/20211202/es-20211202.tex deleted file mode 100644 index d01a46f463c381ac8dc0f28a72d5bfa0a58ed6ee..0000000000000000000000000000000000000000 --- a/20211202/es-20211202.tex +++ /dev/null @@ -1,1709 +0,0 @@ -% es-20211202.pdf - Lecture Slides on Embedded Systems -% Copyright (C) 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Peter Gerwinski -% -% This document is free software: you can redistribute it and/or -% modify it either under the terms of the Creative Commons -% Attribution-ShareAlike 3.0 License, or under the terms of the -% GNU General Public License as published by the Free Software -% Foundation, either version 3 of the License, or (at your option) -% any later version. -% -% This document is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with this document. If not, see <http://www.gnu.org/licenses/>. -% -% You should have received a copy of the Creative Commons -% Attribution-ShareAlike 3.0 Unported License along with this -% document. If not, see <http://creativecommons.org/licenses/>. - -% README: Echtzeit: Scheduler, Semaphor, Mutex, Spinlock,Verklemmungen - -\documentclass[10pt,t]{beamer} - -\usepackage{pgslides} -\usepackage{rotating} -\usepackage{tikz} -\usepackage[obeyfamily=false,mathrm=mathsf,textrm=sffamily]{siunitx} - -\newrgbcolor{lightyellow}{0.95 0.85 0.0} -\newrgbcolor{lightorange}{1.0 0.7 0.0} -\newrgbcolor{lightgreen}{0.0 0.8 0.0} - -\newcommand{\underconstruction}{% - \begin{picture}(0,0) - \put(9,0.9){\makebox(0,0)[b]{\includegraphics[width=1.5cm]{Zeichen_123.pdf}}} - \put(9,0.6){\makebox(0,0)[t]{\shortstack{Änderungen\\vorbehalten}}} - \end{picture}} - -\title{Eingebettete Systeme} -\author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski} -\date{2.\ Dezember 2021} - -\newcommand{\ItwoC}{I\raisebox{0.5ex}{\footnotesize 2}C} - -\begin{document} - -\newlength{\normalpdfpageheight} -\setlength{\normalpdfpageheight}{\pdfpageheight} - -\maketitleframe - -\nosectionnonumber{\inserttitle} - -\begin{frame} - - \shownosectionnonumber - - \begin{itemize} - \item[\textbf{1}] \textbf{Einführung} - \hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/es}}}% - \item[\textbf{2}] \textbf{Einführung in Unix} - \item[\textbf{3}] \textbf{TCP/IP in der Praxis} - \item[\textbf{4}] \textbf{Bus-Systeme} - \item[\textbf{5}] \textbf{Echtzeit} - \begin{itemize} - \color{medgreen} - \item[5.1] Was ist Echtzeit? - \item[5.2] Echtzeitprogrammierung - \item[5.3] Multitasking - \color{orange} - \item[5.4] Ressourcen - \color{red} - \item[5.5] Prioritäten - \end{itemize} -% \item[\textbf{???}] - \end{itemize} - -\end{frame} - -\setcounter{section}{4} -\section{Echtzeit} - -\subsection{Was ist Echtzeit?} - -\begin{frame} - - \showsection - \showsubsection - - \begin{itemize} -% \pause - \item - Animation in Echtzeit:\\ - schnelle Berechnung anstatt Wiedergabe einer Aufzeichnung -% \pause - \medskip - \item - Fantasy-Rollenspiel in Echtzeit:\\ - Der Zeitverlauf der Spielwelt entspricht dem der realen Welt. -% \pause - \medskip - \item - Datenverarbeitung in Echtzeit:\\ - Die Daten werden so schnell verarbeitet, wie sie anfallen. -% \pause - \medskip - \item - speziell: Echtzeit-Steuerung von Maschinen:\\ - Die Berechnung kann mit den physikalischen Vorgängen schritthalten. -% \pause - \bigskip - \arrowitem - "`Schnell genug."' - \end{itemize} - -\end{frame} - -\begin{frame} - - \showsubsection - - "`Schnell genug."' % \pause - -- "`Und wenn nicht?"' - -% \pause - - \begin{itemize} - \item - "`Ganz schlecht."' % \pause - \textarrow\ \newterm{harte Echtzeit} - \begin{onlyenv}<1> - \begin{picture}(0,0)(0,-0.3) -% \pause - \put(0,-4){\makebox(0,0)[br]{\includegraphics[height=3.5cm]{a380.jpg}}} - % http://de.wikipedia.org/w/index.php?title=Datei:Airbus_A380_overfly.jpg&filetimestamp=20111223141606 -% \pause - \put(0.2,-3.9){\makebox(0,0)[bl]{\includegraphics[height=4.0cm]{quadrocopter.jpg}}} - %\put(0.2,-3.5){\makebox(0,0)[bl]{\includegraphics[height=3.5cm]{mercedes-benz-w116.jpg}}} - % http://commons.wikimedia.org/wiki/File:1973-1980_Mercedes-Benz_450_SEL_%28W116%29_sedan_%282010-12-28%29_01.jpg -% \pause - \put(-0.5,-4.2){\makebox(0,0)[tr]{\includegraphics[height=3.5cm]{herzschrittmacher.jpg}}} - % http://de.wikipedia.org/w/index.php?title=Datei:Pacemaker_GuidantMeridianSR.jpg&filetimestamp=20051203173642 -% \pause - \put(0,-4){\makebox(0,0)[tl]{\includegraphics[height=3.5cm]{curiosity.jpg}}} - % http://mars.jpl.nasa.gov/msl/news/whatsnew/index.cfm?FuseAction=ShowNews&NewsID=1344 - \end{picture} - \end{onlyenv} - \pause\\[2pt] - rechtzeitiges Ergebnis funktionsentscheidend - - \smallskip - - \pause - \item - "`Unschön."' \textarrow\ \newterm{weiche Echtzeit} - \begin{onlyenv}<3> - \begin{picture}(0,0)(0,0.3) -% \pause - \put(0,-4){\makebox(0,0)[br]{\includegraphics[width=5cm]{Retribution_Engine_Screenshot_120807.jpg}}} - % http://en.wikipedia.org/wiki/File:Retribution_Engine_Screenshot_120807.jpg -% \pause - \put(0.1,-4.5){\makebox(0,0)[bl]{\includegraphics[width=5cm]{Telefon_t-sinus-700.jpg}}} - % http://de.wikipedia.org/w/index.php?title=Datei:Telefon_t-sinus-700.jpg&filetimestamp=20050807203655 - \end{picture} - \end{onlyenv} - \pause\\[2pt] - verspätetes Ergebnis qualitätsmindernd - \begin{itemize} - \baselineskip14pt\par - \item - verwenden und Verzögerung in Kauf nehmen - \item - verwerfen und Ausfall in Kauf nehmen - \end{itemize} - - \smallskip - - \pause - \item - "`Es gibt keinen festen Termin. Möglichst schnell halt."' % \pause - \\[2pt] - \textarrow\ \newterm{keine Echtzeit} - \end{itemize} - -\end{frame} - -\begin{frame}[fragile] - - \showsubsection - - Das Problem: - \vspace{-\bigskipamount} - \begin{center} - \begin{picture}(6,2) - \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}} - \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}} -% \put(2.75,0.875){\vector(1,3){0.25}} -% \put(2.75,0.875){\line(2,1){0.5}} -% \put(3.25,1.125){\vector(-1,-3){0.25}} - \put(2.70,0.350){\tikz{\draw[latex-latex](0.25,0.625)--(0,-0.12)--(0.5,0.12)--(0.25,-0.625);}} - \end{picture} -% \begin{pdfpic} -% \begin{pspicture}(6,2) -% \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}} -% \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}} -% \psline[arrows=<->](3,0.4)(3.2,1.125)(2.8,0.875)(3,1.6) -% \end{pspicture} -% \end{pdfpic} - \end{center} - -% \pause - - Beispiel: - \begin{itemize} - \item - Eine Motorsteuerung benötigt alle \SI{2000}{\mics} einen Steuerimpuls,\\ - dessen Berechnung maximal \SI{10}{\mics} dauert. -% \pause[3] - \item - Entweder: Der Steuer-Computer macht noch andere Dinge.\\ - \textarrow\ Risiko der Zeitüberschreitung -% \pause - \item - Oder: Der Steuer-Computer macht nichts anderes.\\ - \textarrow\ Verschwendung von Rechenzeit\\ -% \pause - {\color{red}\textarrow\ Na und?} - \end{itemize} - -\end{frame} - -\begin{frame}[fragile] - - \showsubsection - - Das Problem: - \vspace{-\bigskipamount} - \begin{center} - \begin{picture}(6,2) - \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}} - \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}} -% \put(2.75,0.875){\vector(1,3){0.25}} -% \put(2.75,0.875){\line(2,1){0.5}} -% \put(3.25,1.125){\vector(-1,-3){0.25}} - \put(2.70,0.350){\tikz{\draw[latex-latex](0.25,0.625)--(0,-0.12)--(0.5,0.12)--(0.25,-0.625);}} - \end{picture} -% \begin{pdfpic} -% \begin{pspicture}(6,2) -% \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}} -% \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}} -% \psline[arrows=<->](3,0.4)(3.2,1.125)(2.8,0.875)(3,1.6) -% \end{pspicture} -% \end{pdfpic} - \end{center} - - \medskip - - {\large\color{structure}\textbf{"`Verschwendung von Rechenzeit -- na und?"'}} - - \medskip - -% \pause - Große Stückzahlen - \begin{itemize} - \item - 138\,000 Toyota Prius V von Mai 2011 bis April 2012 - \end{itemize} - - \medskip - -% \pause - Wertvolle Ressourcen - \begin{itemize} - \item - Fähigkeiten einer Raumsonde optimieren - % (Marsumlaufbahn: ab ca.~127\,000 Euro pro kg) - % 70000000 / 550000 = 127._27 - % http://www.bernd-leitenberger.de/blog/2009/09/29/reduktion-der-kosten-von-planetenmissionen/ - \only<.(1)>{\\[\medskipamount]\strut\hfill\makebox(0,0)[r]{\includegraphics[height=3.3cm]{curiosity.jpg}}\vspace*{-1cm}} - \pause - \item - Implantat: Platz- und Stromverbrauch minimieren - \only<.(1)>{\\\strut\hfill\makebox(0,0)[r]{\includegraphics[height=3.4cm]{herzschrittmacher.jpg}}\vspace*{-1cm}} - \end{itemize} - - \bigskip - - \pause - \textarrow\ {\large\color{structure}\textbf{Echtzeitprogrammierung}}\\[2pt] - \strut \phantom{\textarrow} Echtzeitanforderungen erfüllen, ohne Ressourcen zu verschwenden - -\end{frame} - -\subsection{Echtzeitprogrammierung} - -\begin{frame} - - \showsubsection - - Echtzeitanforderungen erfüllen, ohne Ressourcen zu verschwenden - - \bigskip - -% \alt<.(1)>{Aber wie?}{Beispiele für Lösungen:} - Beispiele für Lösungen: - - \begin{itemize} -% \pause - \item - ZigBee-Modul:\only<.(1)>{\hfill\makebox(0,0)[tr]{\includegraphics[width=5cm]{xbee.jpg}}}\\ - % http://commons.wikimedia.org/wiki/File:Arduino_xbee.JPG - Funk- vs.\ UART-Protokoll\\ - \textarrow\ dedizierte Hardware - \pause - \item - RP6:\\ - Motorsteuerung vs.\ Anwender-Software\\ - \textarrow\ spezielle Software - \only<.(1)>{\hfill\makebox(0,0)[r]{\includegraphics[width=5cm]{rp6.jpg}}} - \pause - \item - Quadrocopter:\\ - Motorsteuerung vs.\ Sensoren-Abfrage\\ - vs.\ Funk-Fernsteuerung \dots\\ - \textarrow\ spezielle Software - \only<.(1)>{\hfill\makebox(0,0)[br]{\includegraphics[width=5cm]{quadrocopter.jpg}}}\\ - \pause - \item - Flugzeugkabinensimulatortür:\\ - Türsteuerung vs.\ Bedienung\\ - \textarrow\ Echtzeitbetriebssystem - \only<.(1)>{\\[-3.2cm]\strut\hfill\makebox(0,0)[r]{\includegraphics[angle=-90,width=5cm]{dsc_8208.jpg}}} - \end{itemize} - -\end{frame} - -\begin{frame} - - \showsubsection - - Quadrocopter-Steuerung \emph{MultiWii} - \begin{itemize} - \item - Konfiguration durch bedingte Compilierung (Präprozessor) - \item - In der Hauptschleife wird 50mal pro Sekunde der RC-Task aufgerufen,\\ - ansonsten zyklisch einer von bis zu 5 weiteren Tasks. - \end{itemize} - -% \pause - - RP6-Steuerung - \begin{itemize} - \item - Konfiguration durch bedingte Compilierung (Präprozessor) - \item - Lichtschranken an Encoder-Scheiben lösen bei Bewegung Interrupts aus.\\ - Die Interrupt-Handler zählen Variable hoch. - \item - 10000mal pro Sekunde: Timer-Interrupt\\ - Durch Zähler im Interrupt-Handler: verschiedene Taktraten\\ - 1000mal pro Sekunde: Stopwatches\\ - 5mal pro Sekunde: Blinkende Power-On-LED\\ - 1000mal pro Sekunde: Bumper, ACS, PWM zur Motorsteuerung\\ - Geschwindigkeitsmessung durch Zählen der Ticks in 0.2\,s\\ - Anpassung der Motorkraft in $\pm$1-Schritten -% \pause - \item - Nebenbei: \only<1->{1 }Benutzerprogramm - \end{itemize} - -\end{frame} - -\subsection{Multitasking} - -\begin{frame} - - \showsubsection - - \begin{itemize} - \item - \newterm{Kooperatives Multitasking}\\ - Prozesse geben freiwillig Rechenzeit ab - \item - \newterm{Präemptives Multitasking}\\ - Das Betriebssystem unterbricht laufende Prozesse\\ - (englisch: \emph{to pre-empt\/} -- jemandem zuvorkommen) -% \pause - \bigskip - \item - \newterm{Scheduler}\\ - Steuerprogramm, das Prozessen Rechenzeit zuteilt - \item - \newterm{Kontextwechsel}\\ - Umschalten zwischen zwei Prozessen - \item - \newterm{Round-Robin-Verfahren (Rundlauf)}\\ - Zuteilung von \newterm{Zeitschlitzen\/} auf einer \newterm{Zeitscheibe} an die Prozesse - \bigskip -% \pause - \item - Ausblick: Zuteilung von Rechenzeit = wichtiger Spezialfall\\ - allgemein: Zuteilung von Ressourcen - \end{itemize} - -\end{frame} - -\subsectionnonumber{Beispiele für Multitasking} - -\begin{frame} - - \showsubsectionnonumber - - Quadrocopter-Steuerung \emph{MultiWii} - \begin{itemize} - \item - Konfiguration durch bedingte Compilierung (Präprozessor) - \item - In der Hauptschleife wird 50mal pro Sekunde der RC-Task aufgerufen,\\ - ansonsten zyklisch einer von bis zu 5 weiteren Tasks. - \end{itemize} - - RP6-Steuerung - \begin{itemize} - \item - Konfiguration durch bedingte Compilierung (Präprozessor) - \item - Lichtschranken an Encoder-Scheiben lösen bei Bewegung Interrupts aus.\\ - Die Interrupt-Handler zählen Variable hoch. - \item - 10000mal pro Sekunde: Timer-Interrupt\\ - verschiedene Tasks werden unterschiedlich häufig aufgerufen - \item - Nebenbei: 1 Benutzerprogramm - \end{itemize} - - \pause - - Linux 0.01 - \begin{itemize} - \item - Timer-Interrupt:\only<2->{ Zähler des aktuellen Tasks wird dekrementiert;}\\ - Task mit höchstem Zähler bekommt Rechenzeit. - \item - Wenn es keinen laufbereiten Task mit positivem Zähler gibt,\\ - bekommen alle Tasks gemäß ihrer Priorität neue Zähler zugewiesen. - \item - \emph{keine\/} harte Echtzeit - % Aufgabe: Wo wird der Zähler heruntergezählt? - \end{itemize} - -\end{frame} - -\subsectionnonumber{Zombies} - -\begin{frame} - - \showsubsectionnonumber - - \pause - Wikipedia: - \begin{quote} - Als Zombie wird die fiktive Figur eines zum Leben erweckten - Toten (Untoter) oder eines seiner Seele beraubten, willenlosen - Wesens bezeichnet. Der Begriff leitet sich von dem Wort nzùmbe - aus der zentralafrikanischen Sprache Kimbundu ab und bezeichnet - dort ursprünglich einen Totengeist. - \end{quote} - - \bigskip - - \pause - Ein Zombie-Prozeß ist bereits beendet ("`tot"'),\\ - bekommt keine Rechenzeit mehr ("`seiner Seele beraubt"'),\\ - hat alle belegten Ressourcen wieder freigegeben ("`willenlos"'),\\ - wird aber noch in der Prozeßliste geführt ("`untot"'). - \begin{itemize} - \pause - \item - Warum? - \textarrow\ - Ein anderer Prozeß (Elternprozeß) wartet noch auf den - Rückgabewert des beendeten Prozesses. - \pause - \item - Schadet das? - \textarrow\ - Nein. - \pause - \item - Aber? - \textarrow\ - Wenn sich Zombie-Prozesse anhäufen, deutet dies auf einen - Prozeß hin, der andere Prozesse erzeugt und anschließend "`hängt"'. - \pause - \item - Beispiel: - Datenträger entfernt, zugreifender Prozeß "`hängt"'.\\ - \textarrow\ - Tochterprozesse werden zu Zombies. - \end{itemize} - -\end{frame} - -\subsectionnonumber{Multitasking} - -\begin{frame} - - \showsection - \showsubsection - - \begin{minipage}[t]{6cm} - Qualitätsaspekte beim Multitasking - \begin{itemize} - \item<2-> - Verschiedene Anforderungen: - \newterm{Latenz\/} vs.\ \newterm{Jitter\/}\\ - vs.\ \newterm{Durchsatz} - \smallskip - \begin{onlyenv}<3> - \begin{itemize} - \item - \newterm{Latenz:} interaktive Anwendungen - \item - \newterm{Jitter:} Echtzeitanwendungen - \item - \newterm{Durchsatz:} Stapelverarbeitung - \end{itemize} - \vspace*{-3cm} - \end{onlyenv} - \item<4-> - Ressourcen reservieren:\\ - \newterm{Mutexe} - \only<5->{(= spezielle \newterm{Semaphore\/})\\} - \only<6->{\textarrow\ kommt gleich} - \item<7-> - Verschiedene Methoden\\ - der Priorisierung\\ - \textarrow\ später\\ - \strut - \item<8-> - Umgehung der Probleme durch - speziell geschriebene Software\\ - (MultiWii, RP6, \dots) - \end{itemize} - \end{minipage} - \hfill - \pause[9]% - \begin{minipage}[t]{6.2cm} - Qualitätsaspekte für Netzwerke: - \begin{itemize} - \item - Verschiedene Anforderungen: - \newterm{Latenz\/} vs.\ \newterm{Jitter\/} vs.\ \newterm{Verluste\/}\\vs.\ \newterm{Durchsatz} - \item - Ressourcen reservieren:\\ - \newterm{IntServ} mit \newterm{Resource Reservation Protocol (RSVP)} - \item - Klassifizierung und Priorisierung: - \newterm{DiffServ} mit Type-of-Service-Bits (IPv4) - bzw.\ Traffic-Class-Bits (IPv6) im IP-Header - \item - Eigenes Protokoll (Telefondienste):\\ - \newterm{Asynchronous Transfer Mode (ATM)} - \end{itemize} - \end{minipage} - -\end{frame} - -\subsection{Ressourcen} - -\begin{frame} - - \showsection - \showsubsection - - Ressourcen reservieren - \begin{itemize} - \item - \newterm{Semaphor}\\ - gemeinsame Variable mehrerer Prozesse\\ - zur Regelung des Zugriffs auf eine Ressource\\[\smallskipamount] - Ressource belegt \textarrow\ Kontextwechsel - \begin{onlyenv}<1> - \par\medskip - griechisch: \emph{sema\/} -- Zeichen, \emph{pherein\/} -- tragen\\ - "`Eisenbahnsignal"' - \vspace*{-3cm} - \end{onlyenv} - \pause - \medskip - \item - \newterm{Mutex}\\ - Mechanismus, damit immer nur ein Prozeß gleichzeitig\\ - auf eine Ressource zugreifen kann - \begin{onlyenv}<2> - \par\medskip - englisch: \emph{mutual exclusion\/} -- wechselseitiger Ausschluß\\ - spezieller binärer Semaphor: nur "`Besitzer"' darf freigeben\\ - % allgemein: auch jemand anderer dürfte freigeben - \vspace*{-3cm} - \end{onlyenv} - \pause - \medskip - \item - \newterm{Spinlock} (\emph{busy waiting\/})\\ - leichtgewichtige Alternative zu Kontextwechsel - \begin{onlyenv}<3> - \par\medskip - englisch: \emph{spin\/} -- rotieren, \emph{lock\/} Sperre\\ - \emph{busy waiting} auf etwas Schnelles, z.\,B.\ auf einen Semaphor\\[\medskipamount] - Hardware-Unterstützung: - Prüfen, ob Variable bestimmten Wert hat;\\ - wenn ja, auf anderen Wert setzen; andere Prozessoren solange anhalten - \vspace*{-3cm} - \end{onlyenv} - \pause - \medskip - \item - \newterm{Kritischer Abschnitt -- critical section}\\ - Programmabschnitt zwischen Reservierung\\ - und Freigabe einer Ressource\\ - \textarrow\ sollte immer so kurz wie möglich sein - \end{itemize} - \vspace*{-1cm} - -\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - Ressourcen reservieren -- - Beispiel: \file{linux-3.7rc1} - \begin{itemize} - \item - \newterm{Semaphor}\\ - \file{kernel/semaphor.c}\\ - \file{drivers/usb/core/file.c} - \medskip - \item - \newterm{Mutex}\\ - \file{kernel/mutex.c}\\ - \file{drivers/usb/serial/usb-serial.c} - \medskip - \item - \newterm{Spinlock}\\ - \file{kernel/spinlock.c}\\ - \file{kernel/semaphor.c}, - \file{kernel/mutex.c} - \end{itemize} - - % Aufgabe: Anwendungsarten im MultiWii- und RP6-Code identifizieren - - % evtl. Aufgabe: Warte-Problem - - % Aufgabe: Wie lösen bekannte Multitasking-Betriebssysteme - % das o.a. Zuteilungsproblem? - - % Danach: Semaphoren, Mutexe, Spinlocks - % Priorisierungsmethoden und -probleme - - % Festplatten: completely fair queueing - % cat /sys/block/sdc/queue/scheduler - % "noop" hat sich für SVG gelohnt - - % Virtualisierung + Kernel-Threads + Multiprozessorsystem = Chaos - -\end{frame} - -\begin{frame}[fragile] - - \textbf{Beispiel:} - \lstinline{usb_serial_get_by_index()} -- serielle Schnittstelle reservieren - - Datei \file{linux-3.7-rc1/drivers/usb/serial/usb-serial.c}, ab Zeile 62 - - \medskip - - \begin{lstlisting} - struct usb_serial *usb_serial_get_by_index (unsigned index) - { - struct usb_serial *serial; - mutex_lock (&table_lock); - serial = serial_table[index]; - if (serial) - { - mutex_lock (&serial->disc_mutex); - if (serial->disconnected) - { - mutex_unlock (&serial->disc_mutex); - serial = NULL; - } - else - kref_get (&serial->kref); - } - mutex_unlock (&table_lock); - return serial; - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(5.1,6.85){\vector(-1,0){0.5}} - \put(5.2,6.85){\makebox(0,0)[l]{exklusiven Zugriff auf Tabelle sichern}} - \put(5.4,1.35){\vector(-1,0){0.5}} - \put(5.5,1.35){\makebox(0,0)[l]{\shortstack[l]{exklusiven Zugriff auf Tabelle\\wieder freigeben}}} - \end{picture} - -\end{frame} - -\setlength{\pdfpageheight}{49cm} - -\begin{frame}[fragile] - - \lstinline{mutex_lock()} -- Ressource beanspruchen, notfalls warten - - Datei \file{linux-3.7-rc1/drivers/usb/serial/usb-serial.c}, ab Zeile 62 - - \medskip - - \begin{lstlisting} - void __sched mutex_lock (struct mutex *lock) - { - might_sleep (); - __mutex_fastpath_lock (&lock->count, __mutex_lock_slowpath); - mutex_set_owner (lock); - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(11.6,1.35){\line(-1,0){1}} - \put(11.6,1.35){\line(0,-1){2.45}} - \put(11.6,-1.10){\vector(-1,0){2.0}} - \end{picture} - - \bigskip - - Datei \file{linux-3.7-rc1/arch/x86/include/asm/mutex\_32.h}, ab Zeile 24 - - Macro-Definition für \lstinline{__mutex_fastpath_lock} (expandiert) - - \medskip - - Assembler: - \begin{lstlisting}[language={[x86masm]Assembler}] - lock dec (lock->count) - jns 1 - call __mutex_lock_slowpath - 1: - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(9,0.95){\line(-1,0){3.5}} - \put(9,0.95){\line(0,-1){2.5}} - \put(9.0,-1.55){\vector(-1,0){1.0}} - \end{picture} - - \bigskip - - Datei \file{linux-3.7-rc1/kernel/mutex.c}, ab Zeile 398 - - \medskip - - \begin{lstlisting} - static __used noinline void __sched - __mutex_lock_slowpath (atomic_t *lock_count) - { - struct mutex *lock = container_of (lock_count, struct mutex, count); - __mutex_lock_common (lock, TASK_UNINTERRUPTIBLE, 0, - NULL, _RET_IP_); - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(11.0,1.40){\line(-1,0){1.0}} - \put(11.0,1.40){\vector(0,-1){2.5}} - \end{picture} - - \bigskip - - Datei \file{linux-3.7-rc1/kernel/mutex.c}, ab Zeile 132 - - \medskip - - \begin{lstlisting} - static inline int __sched - __mutex_lock_common (struct mutex *lock, long state, unsigned int subclass, - struct lockdep_map *nest_lock, unsigned long ip) - { - struct task_struct *task = current; - struct mutex_waiter waiter; - unsigned long flags; - - preempt_disable (); - mutex_acquire_nest (&lock->dep_map, subclass, 0, nest_lock, ip); - - /* ... */ - - spin_lock_mutex (&lock->wait_lock, flags); - - debug_mutex_lock_common (lock, &waiter); - debug_mutex_add_waiter (lock, &waiter, task_thread_info (task)); - - /* add waiting tasks to the end of the waitqueue (FIFO): */ - list_add_tail (&waiter.list, &lock->wait_list); - waiter.task = task; - - if (atomic_xchg (&lock->count, -1) == 1) - goto done; - - lock_contended (&lock->dep_map, ip); - - for (;;) - { - /* - * Lets try to take the lock again - this is needed even if - * we get here for the first time (shortly after failing to - * acquire the lock), to make sure that we get a wakeup once - * it's unlocked. Later on, if we sleep, this is the - * operation that gives us the lock. We xchg it to -1, so - * that when we release the lock, we properly wake up the - * other waiters: - */ - if (atomic_xchg (&lock->count, -1) == 1) - break; - - /* - * got a signal? (This code gets eliminated in the - * TASK_UNINTERRUPTIBLE case.) - */ - if (unlikely (signal_pending_state (state, task))) - { - mutex_remove_waiter (lock, &waiter, task_thread_info (task)); - mutex_release (&lock->dep_map, 1, ip); - spin_unlock_mutex (&lock->wait_lock, flags); - - debug_mutex_free_waiter (&waiter); - preempt_enable (); - return -EINTR; - } - __set_task_state (task, state); - - /* didn't get the lock, go to sleep: */ - spin_unlock_mutex (&lock->wait_lock, flags); - schedule_preempt_disabled (); - spin_lock_mutex (&lock->wait_lock, flags); - } - - done: - lock_acquired (&lock->dep_map, ip); - /* got the lock - rejoice! */ - mutex_remove_waiter (lock, &waiter, current_thread_info ()); - mutex_set_owner (lock); - - /* set it to 0 if there are no waiters left: */ - if (likely (list_empty (&lock->wait_list))) - atomic_set (&lock->count, 0); - - spin_unlock_mutex (&lock->wait_lock, flags); - - debug_mutex_free_waiter (&waiter); - preempt_enable (); - - return 0; - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(7.9,28.3){\vector(-1,0){0.5}} - \put(8.0,28.3){\makebox(0,0)[l]{\shortstack[l]{exklusiven Zugriff\\auf Mutex sichern}}} - \put(7.4,2.3){\vector(-1,1){0.4}} - \put(7.5,2.0){\makebox(0,0)[l]{\shortstack[l]{exklusiven Zugriff auf Mutex\\wieder freigeben}}} - \end{picture} - -\end{frame} - -\setlength{\pdfpageheight}{45cm} - -\begin{frame}[fragile] - - \lstinline{spin_lock_mutex()} -- Mutex beanspruchen, notfalls \emph{busy waiting} - - Datei \file{linux-3.7-rc1/kernel/mutex.h}, ab Zeile 12 - - \medskip - - \begin{lstlisting} - #define spin_lock_mutex(lock, flags) \ - do \ - { \ - spin_lock (lock); \ - (void) (flags); \ - } \ - while (0) - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(8.5,1.75){\line(-1,0){4.5}} - \put(8.5,1.75){\line(0,-1){2.9}} - \put(8.5,-1.15){\vector(-1,0){1.0}} - \end{picture} - - \bigskip - - Datei \file{linux-3.7-rc1/kernel/spinlock.h}, ab Zeile 283 - - \medskip - - \begin{lstlisting} - static inline void spin_lock (spinlock_t *lock) - { - raw_spin_lock (&lock->rlock); - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(9.3,0.95){\line(-1,0){4.0}} - \put(9.3,0.95){\line(0,-1){2.1}} - \put(9.3,-1.15){\vector(-1,0){1.0}} - \end{picture} - - \bigskip - - Datei \file{linux-3.7-rc1/kernel/spinlock.h}, Zeile 170 - - \medskip - - \begin{lstlisting} - #define raw_spin_lock(lock) _raw_spin_lock (lock) - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(10.0,0.55){\line(-1,0){0.5}} - \put(10.0,0.55){\line(0,-1){1.7}} - \put(10.0,-1.15){\vector(-1,0){1.3}} - \end{picture} - - \bigskip - - Datei \file{linux-3.7-rc1/include/linux/spinlock\_api\_smp.h}, Zeile 47 - - \medskip - - \begin{lstlisting} - #define _raw_spin_lock(lock) __raw_spin_lock (lock) - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(10.7,0.55){\line(-1,0){0.5}} - \put(10.7,0.55){\line(0,-1){1.75}} - \put(10.7,-1.2){\vector(-1,0){2.3}} - \end{picture} - - \bigskip - - Datei \file{linux-3.7-rc1/kernel/spinlock.c}, ab Zeile 46 (expandiert): - - \medskip - - \begin{lstlisting} - void __lockfunc __raw_spin_lock (spinlock_t *lock) - { - for (;;) - { - preempt_disable (); - if (likely (do_raw_spin_trylock (lock))) - break; - preempt_enable (); - - if (!(lock)->break_lock) - (lock)->break_lock = 1; - while (!raw_spin_can_lock (lock) && (lock)->break_lock) - arch_spin_relax (&lock->raw_lock); - } - (lock)->break_lock = 0; - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(10.7,4.75){\line(-1,0){3.5}} - \put(10.7,4.75){\line(0,-1){5.95}} - \put(10.7,-1.2){\vector(-1,0){1.1}} - \end{picture} - - \bigskip - - Datei \file{linux-3.7-rc1/include/linux/spinlock.h}, ab Zeile 150: - - \medskip - - \begin{lstlisting} - static inline int do_raw_spin_trylock (raw_spinlock_t *lock) - { - return arch_spin_trylock (&(lock)->raw_lock); - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(11.5,0.95){\line(-1,0){3.5}} - \put(11.5,0.95){\line(0,-1){2.1}} - \put(11.5,-1.15){\vector(-1,0){0.7}} - \end{picture} - - \bigskip - - Datei \file{arch/x86/include/asm/spinlock.h}, ab Zeile 116: - - \medskip - - \begin{lstlisting} - static __always_inline int arch_spin_trylock (arch_spinlock_t *lock) - { - return __ticket_spin_trylock (lock); - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(9.5,0.95){\line(-1,0){3.5}} - \put(9.5,0.95){\vector(0,-1){1.7}} - \end{picture} - - \bigskip - - Datei \file{arch/x86/include/asm/spinlock.h}, ab Zeile 65: - - \medskip - - \begin{lstlisting} - static __always_inline int __ticket_spin_trylock (arch_spinlock_t *lock) - { - arch_spinlock_t old, new; - - old.tickets = ACCESS_ONCE (lock->tickets); - if (old.tickets.head != old.tickets.tail) - return 0; - - new.head_tail = old.head_tail + (1 << TICKET_SHIFT); - - /* cmpxchg is a full barrier, so nothing can move before it */ - return cmpxchg (&lock->head_tail, old.head_tail, new.head_tail) == old.head_tail; - } - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(2.2,0.3){\line(0,1){0.4}} - \put(9.0,0.3){\line(-1,0){6.8}} - \put(9.0,0.3){\line(0,-1){1.45}} - \put(9.0,-1.15){\vector(-1,0){3.2}} - \end{picture} - - \bigskip - - Datei \file{arch/x86/include/asm/cmpxchg.h}, ab Zeile 147: - - \medskip - - \begin{lstlisting} - #define cmpxchg(ptr, old, new) \ - __cmpxchg (ptr, old, new, sizeof (*(ptr))) - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(9.0,0.5){\line(-1,0){1.8}} - \put(9.0,0.5){\line(0,-1){1.65}} - \put(9.0,-1.15){\vector(-1,0){2.2}} - \end{picture} - - \bigskip - - Datei \file{arch/x86/include/asm/cmpxchg.h}, ab Zeile 131: - - \medskip - - \begin{lstlisting} - #define __cmpxchg(ptr, old, new, size) \ - __raw_cmpxchg ((ptr), (old), (new), (size), LOCK_PREFIX) - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(2.2,-0.1){\line(0,1){0.3}} - \put(9.0,-0.1){\line(-1,0){6.8}} - \put(9.0,-0.1){\line(0,-1){1.05}} - \put(9.0,-1.15){\vector(-1,0){2.2}} - \end{picture} - - \bigskip - - Datei \file{arch/x86/include/asm/cmpxchg.h}, ab Zeile 110: - - \medskip - - \begin{lstlisting} - asm volatile (lock "cmpxchgl %2,%1" \ - : "=a" (__ret), "+m" (*__ptr) \ - : "r" (__new), "0" (__old) \ - : "memory"); - \end{lstlisting} - \begin{picture}(0,0) - \color{red} - \put(9.8,1.8){\vector(-1,0){0.6}} - \put(9.8,1.2){\line(0,1){0.6}} - \put(9.8,1.1){\makebox(0,0)[t]{\shortstack{atomarer und exklusiver\\Zugriff auf Spinlock\\durch Hardware-Unterstützung}}} - \end{picture} - -\end{frame} - -\setlength{\pdfpageheight}{\normalpdfpageheight} - -%\sectionnonumber{Literaturempfehlung} -%\subsectionnonumber{Automotive Embedded Systeme} -% -%\begin{frame}[c] -% -% \showsectionnonumber -% -% Prof.\ Dr.\ Joachim Wietzke, FH Darmstadt,\\ -% Prof.\ Dr.\ Manh Tien Tran, FH Kaiserslautern: -% -% \medskip -% -% \showsubsectionnonumber -% -% \vspace{-\medskipamount} -% -% Springer-Verlag, Berlin, Heidelberg 2005 -% -% \bigskip -% -% Lizenz: proprietär -% -% \medskip -% -% (gesetzt mit \textrm{\LaTeX}, ca.\ \EUR{10}) -% -%\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - Ressourcen reservieren - \begin{itemize} - \item - \newterm{Semaphor}\\ - gemeinsame Variable mehrerer Prozesse\\ - zur Regelung des Zugriffs auf eine Ressource\\[\smallskipamount] - Ressource belegt \textarrow\ Kontextwechsel - \medskip - \item - \newterm{Mutex}\\ - Mechanismus, damit immer nur ein Prozeß gleichzeitig\\ - auf eine Ressource zugreifen kann - \medskip - \item - \newterm{Spinlock} (\emph{busy waiting\/})\\ - leichtgewichtige Alternative zu Kontextwechsel - \medskip - \item - \newterm{Kritischer Abschnitt -- critical section}\\ - Programmabschnitt zwischen Reservierung\\ - und Freigabe einer Ressource\\ - \textarrow\ sollte immer so kurz wie möglich sein - \end{itemize} - \vspace*{-1cm} - -\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - \begin{picture}(0,0) - \only<2-3>{\put(6.3,-7){\includegraphics[height=6cm]{philosophenproblem.jpg}}} - \end{picture}% - \newterm{Verklemmungen\/}: Gegenseitiges Blockieren von Ressourcen - \begin{itemize} - \item - \newterm{Deadlock\/}: Prozeß wartet - \item - \newterm{Livelock\/}: Prozeß macht andere Dinge\\ - (z.\,B.\ \emph{busy waiting\/}) - \end{itemize} - - \pause - \bigskip - - Beispiel: Philosophenproblem - - \only<2-3>{% - \begin{itemize} - \item - 5 Philosophen, 5 Gabeln - \item - 2 Gabeln zum Essen notwendig - \item - Wer essen will, nimmt eine Gabel\\ - und wartet notfalls auf die zweite. - \item - Keiner legt eine einzelne Gabel\\ - wieder zurück. - \end{itemize} - Jeder hält 1 Gabel \textarrow\ \newterm{Verklemmung}\\[0.5\smallskipamount] - \pause - \strut\quad schweigen \textarrow\ \newterm{Deadlock}\\ - \strut\quad philosophieren weiter \textarrow\ \newterm{Livelock}\\[-1cm] - } - \only<4->{% - \bigskip - - Bedingungen für Verklemmungen: - - \begin{minipage}[t]{4.5cm} - \begin{itemize} - \item - Exklusivität - \item - \newterm{hold and wait} - \item - Entzug nicht möglich - \item - zirkuläre Blockade - \end{itemize} - \end{minipage}\pause[5] - \begin{minipage}[t]{7.5cm} - \begin{itemize} - \arrowitem - Spooling - \arrowitem - simultane Zuteilung - \arrowitem - Prozesse suspendieren, beenden, \newterm{Rollback} - \arrowitem - Reihenfolge abhängig von Ressourcen - \end{itemize} - \end{minipage} - } - -\end{frame} - -\subsection{Prioritäten} - -\begin{frame} - - \showsection - \showsubsection - - Linux 0.01 - \begin{itemize} - \item - Timer-Interrupt: Zähler des aktuellen Prozesses wird dekrementiert;\\ - Prozeß mit höchstem Zähler bekommt Rechenzeit. - \item - Wenn es keinen laufbereiten Prozeß mit positivem Zähler gibt,\\ - bekommen alle Prozesse gemäß ihrer \newterm{Priorität\/} neue Zähler zugewiesen. - \item - \emph{keine\/} harte Echtzeit - \arrowitem - \newterm{dynamische Prioritätenvergabe\/}:\\ - Rechenzeit hängt vom Verhalten des Prozesses ab - \end{itemize} - - \medskip - - Echtzeitbetriebssysteme - \begin{itemize} - \item - Prozesse können einen festen Anteil an Rechenzeit bekommen. - \item - Bei Ereignissen können Prozesse hoher Priorität\\ - Prozesse niedriger Priorität unterbrechen, aber nicht umgekehrt. - \arrowitem - \newterm{statische Prioritätenvergabe} - \end{itemize} - -\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - Echtzeitbetriebssysteme - \begin{itemize} - \item - Prozesse können einen festen Anteil an Rechenzeit bekommen. - \item - Bei Ereignissen können Prozesse hoher Priorität\\ - Prozesse niedriger Priorität unterbrechen, aber nicht umgekehrt. - \end{itemize} - - \vspace{0cm plus 1filll} - - \begin{center} - \begin{picture}(11,4)(-1,0) - \small - - \put(-0.1,0.5){\vector(1,0){10.1}} - \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}} - \put(0,0.4){\vector(0,1){3.6}} - \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}} - - \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \put(3,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}} - \put(5,3){{\color{lightorange}\rule{0.6cm}{0.4cm}}} - \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}} - \put(0,3){\line(1,0){10}} - - \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}} - \put(1.5,1){{\color{lightgreen}\rule{1.5cm}{0.4cm}}} - \put(3.7,1){{\color{lightgreen}\rule{0.6cm}{0.4cm}}} - \alt<1>{% - \put(7.9,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}} - }{% - \put(8.1,1){{\color{lightgreen}\rule{0.9cm}{0.4cm}}} - } - \put(9.7,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}} - \put(0,1){\line(1,0){10}} - - \pause - - \put(4.6,2){{\color{lightyellow}\rule{0.4cm}{0.4cm}}} - \put(5.7,2){{\color{lightyellow}\rule{1.3cm}{0.4cm}}} - \put(7.7,2){{\color{lightyellow}\rule{0.4cm}{0.4cm}}} - \put(0,2){\line(1,0){10}} - - \end{picture} - \end{center} - -\end{frame} - -\subsectionnonumber{Prioritäten \protect\color{darkgray}und Ressourcen} - -\begin{frame} - - \showsection - \showsubsection - - \only<4->{% - Der höher priorisierte Prozeß bewirkt selbst,\\ - daß er eine Ressource verspätet bekommt. - - \medskip - - \textarrow\ \newterm{begrenzte Prioritätsinversion} - - \medskip - - maximale Verzögerung: Länge des kritischen Bereichs - } - - \vspace{0cm plus 1filll} - - \begin{center} - \begin{picture}(11,4)(-1,0) - \small - - \put(-0.1,0.5){\vector(1,0){10.1}} - \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}} - \put(0,0.4){\vector(0,1){3.6}} - \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}} - - \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \only<1-2>{\put(3,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}} - \only<3->{\put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}}} - \only<3-4>{% - \put(3.4,3){{\color{red}\rule{0.8cm}{0.4cm}}} - \put(4.2,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}} - {\thicklines - \put(3.3,2.95){\line(2,1){1.0}} - \put(3.3,3.45){\line(2,-1){1.0}}} - } - \only<5->{% - \put(3.9,3){{\color{red}\rule{0.8cm}{0.4cm}}} - \put(4.7,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}} - } - \put(5,3){{\color{lightorange}\rule{0.6cm}{0.4cm}}} - \only<1-2>{% - \put(5.4,3){{\color{red}\rule{0.8cm}{0.4cm}}} - \put(6.2,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}} - } - \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}} - \put(0,3){\line(1,0){10}} - - \only<2->{% - \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}} - \put(1.5,1){{\color{lightgreen}\rule{1.5cm}{0.4cm}}} - \put(2.6,1){{\color{medgreen}\rule{0.4cm}{0.4cm}}} - \only<2-4>{% - \put(3.7,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}} - \put(4.2,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}} - } - \only<5->{% - \put(3.4,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}} - \put(4.9,1){{\color{lightgreen}\rule{0.1cm}{0.4cm}}} - \put(5.6,1){{\color{lightgreen}\rule{0.2cm}{0.4cm}}} - } - \put(7.7,1){{\color{lightgreen}\rule{1.3cm}{0.4cm}}} - \put(9.7,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}} - \put(0,1){\line(1,0){10}} - } - \end{picture} - \end{center} - -\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - \visible<4->{% - Ein Prozeß mit mittlerer Priorität bewirkt, - daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt. - - \medskip - - \textarrow\ }\newterm{unbegrenzte Prioritätsinversion} - - \pause - \vspace{0cm plus 1filll} - - \begin{center} - \begin{picture}(11,4)(-1,0) - \small - - \put(-0.1,0.5){\vector(1,0){10.1}} - \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}} - \put(0,0.4){\vector(0,1){3.6}} - \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}} - - \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}} - \only<2>{% - \put(3.4,3){{\color{red}\rule{0.8cm}{0.4cm}}} - \put(4.2,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}} - {\thicklines - \put(3.3,2.95){\line(2,1){1.0}} - \put(3.3,3.45){\line(2,-1){1.0}}} - \put(5,3){{\color{lightorange}\rule{0.6cm}{0.4cm}}} - \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}} - } - \put(0,3){\line(1,0){10}} - - \only<2->{% - \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}} - \put(1.5,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}} - \alt<1-4>{% - \put(2.6,1){{\color{medgreen}\rule{0.4cm}{0.4cm}}} - }{% - \put(2.6,1){{\color{medgreen}\rule{0.2cm}{0.4cm}}} - } - \only<2>{% - \put(3.7,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}} - \put(4.2,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}} - } - \only<3-4>{% - \put(3.4,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}} -% \put(3.9,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}} - } - \only<2>{% - \put(7.7,1){{\color{lightgreen}\rule{1.3cm}{0.4cm}}} - \put(9.7,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}} - } - \put(0,1){\line(1,0){10}} - } - - \only<5->{% - \put(2.8,2){{\color{lightyellow}\rule{0.2cm}{0.4cm}}} - \put(3.4,2){{\color{lightyellow}\rule{6.6cm}{0.4cm}}} - \put(0,2){\line(1,0){10}} - } - \end{picture} - \end{center} - -\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - Ein Prozeß mit mittlerer Priorität bewirkt, - daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt. - - \medskip - - \textarrow\ \newterm{unbegrenzte Prioritätsinversion} - - \medskip - - Beispiel: Beinahe-Verlust der Marssonde \emph{Pathfinder\/} im Juli 1997 - - \only<1>{% - \begin{center} - \includegraphics[width=8.5cm]{pathfinder.jpg} - \vspace*{-1.5cm} - \end{center} - } - - \bigskip - - \only<2>{% - Gegenmaßnahmen - \begin{itemize} - \item - \newterm{Priority Inheritance -- Prioritätsvererbung}\\ - Der Besitzer des Mutex erbt die Priorität\\ - des Prozesses, der auf den Mutex wartet. - \end{itemize} - - \bigskip - - \begin{minipage}{7.0cm} - \begin{flushright} - \url{http://research.microsoft.com/en-us/\\um/people/mbj/Mars\_Pathfinder/} - \end{flushright} - \end{minipage} - - \vspace{-0.2cm}\strut\hfill\makebox(0,0)[br]{\includegraphics[height=2.7cm]{pathfinder.jpg}}\vspace*{-1cm} - } - -\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - Ein Prozeß mit mittlerer Priorität bewirkt, - daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt. - - \medskip - - \textarrow\ \newterm{unbegrenzte Prioritätsinversion} - - \bigskip - - Gegenmaßnahme: \newterm{Priority Inheritance -- Prioritätsvererbung} - - \vspace{0cm plus 1filll} - - \begin{center} - \begin{picture}(11,4)(-1,0) - \small - - \put(-0.1,0.5){\vector(1,0){10.1}} - \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}} - \put(0,0.4){\vector(0,1){3.6}} - \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}} - - \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}} - \put(1.5,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}} - \put(2.6,1){{\color{medgreen}\rule{0.2cm}{0.4cm}}} - \put(0,1){\line(1,0){10}} - - \put(2.8,2){{\color{lightyellow}\rule{0.2cm}{0.4cm}}} - \only<1-2>{% - \put(3.4,2){{\color{lightyellow}\rule{6.6cm}{0.4cm}}} - } - \put(0,2){\line(1,0){10}} - - \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}} - \put(0,3){\line(1,0){10}} - - \only<2>{% - \put(3.4,3){{\color{red}\rule{0.8cm}{0.4cm}}} - {\thicklines - \put(3.3,2.95){\line(2,1){1.0}} - \put(3.3,3.45){\line(2,-1){1.0}}} - } - - \only<3->{% - \put(3.4,3){{\color{medgreen}\rule{0.7cm}{0.4cm}}} - \put(4.1,3){{\color{red}\rule{0.8cm}{0.4cm}}} - \put(5.7,2){{\color{lightyellow}\rule{1.3cm}{0.4cm}}} - \put(4.9,3){{\color{lightorange}\rule{0.8cm}{0.4cm}}} - \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \put(7.5,2){{\color{lightyellow}\rule{1.5cm}{0.4cm}}} - \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}} - \put(9.7,2){{\color{lightyellow}\rule{0.3cm}{0.4cm}}} - } - \end{picture} - \end{center} - -\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - Ein Prozeß mit mittlerer Priorität bewirkt, - daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt. - - \medskip - - \textarrow\ \newterm{unbegrenzte Prioritätsinversion} - - \bigskip - - Gegenmaßnahme: \newterm{Priority Ceiling -- Prioritätsobergrenze} - - \vspace{0cm plus 1filll} - - \begin{center} - \begin{picture}(11,4)(-1,0) - \small - - \put(-0.1,0.5){\vector(1,0){10.1}} - \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}} - \put(0,0.4){\vector(0,1){3.6}} - \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}} - - \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}} - \put(1.5,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}} -% \only<1>{% -% \put(2.6,1){{\color{medgreen}\rule{0.2cm}{0.4cm}}} -% } - \put(0,1){\line(1,0){10}} - -% \only<1>{% -% \put(2.8,2){{\color{lightyellow}\rule{0.2cm}{0.4cm}}} -% \put(3.4,2){{\color{lightyellow}\rule{6.6cm}{0.4cm}}} -% } - \put(0,2){\line(1,0){10}} - - \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} -% \only<1>{% -% \put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}} -% } - \put(0,3){\line(1,0){10}} - -% \only<2>{% -% \only<2>{% - \put(2.6,3){{\color{medgreen}\rule{0.9cm}{0.4cm}}} - \put(3.5,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}} - \put(3.9,3){{\color{red}\rule{0.8cm}{0.4cm}}} - \put(4.7,3){{\color{lightorange}\rule{0.8cm}{0.4cm}}} - \put(5.5,2){{\color{lightyellow}\rule{1.5cm}{0.4cm}}} - \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}} - \put(7.5,2){{\color{lightyellow}\rule{1.5cm}{0.4cm}}} - \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}} - \put(9.7,2){{\color{lightyellow}\rule{0.3cm}{0.4cm}}} -% } - \end{picture} - \end{center} - -\end{frame} - -\begin{frame} - - \showsection - \showsubsection - - Ein Prozeß mit mittlerer Priorität bewirkt, - daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt. - - \medskip - - \textarrow\ \newterm{unbegrenzte Prioritätsinversion} - - \medskip - - Beispiel: Beinahe-Verlust der Marssonde \emph{Pathfinder\/} im Juli 1997 - - \bigskip - - Gegenmaßnahmen - \begin{itemize} - \item - \newterm{Priority Inheritance -- Prioritätsvererbung}\\ - Der Besitzer des Mutex erbt die Priorität\\ - des Prozesses, der auf den Mutex wartet. - \smallskip - \item - \newterm{Priority Ceiling -- Prioritätsobergrenze}\\ - Der Besitzer des Mutex bekommt sofort\\ - die Priorität des höchstmöglichen Prozesses,\\ - der evtl.\ den Mutex benötigen könnte. - \pause - \begin{picture}(0,0) - \put(1.2,1.45){\makebox(0,0)[l]{$\left\}\rule{0pt}{1.7cm}\right.$ - \begin{minipage}{4cm} - nur möglich, wenn\\ - Mutexe im Spiel sind - \end{minipage}}} - \end{picture} - \smallskip - \pause - \item - \newterm{Priority Aging}\\ - Die Priorität wächst mit der Wartezeit. - \end{itemize} - \vspace*{-1cm} - -\end{frame} - - -\end{document} diff --git a/20211202/herzschrittmacher.jpg b/20211202/herzschrittmacher.jpg deleted file mode 120000 index 92d8f0053003cc555aec83f5d088f1cec822ad81..0000000000000000000000000000000000000000 --- a/20211202/herzschrittmacher.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/herzschrittmacher.jpg \ No newline at end of file diff --git a/20211202/linux-scheduler-0.c b/20211202/linux-scheduler-0.c deleted file mode 100644 index e97d32bf1d7845caca253f67242f4c042b9f7616..0000000000000000000000000000000000000000 --- a/20211202/linux-scheduler-0.c +++ /dev/null @@ -1,48 +0,0 @@ -/* - * 'schedule()' is the scheduler function. This is GOOD CODE! There - * probably won't be any reason to change this, as it should work well - * in all circumstances (ie gives IO-bound processes good response etc). - * The one thing you might take a look at is the signal-handler code here. - * - * NOTE!! Task 0 is the 'idle' task, which gets called when no other - * tasks can run. It can not be killed, and it cannot sleep. The 'state' - * information in task[0] is never used. - */ -void schedule(void) -{ - int i,next,c; - struct task_struct ** p; - -/* check alarm, wake up any interruptible tasks that have got a signal */ - - for(p = &LAST_TASK ; p > &FIRST_TASK ; --p) - if (*p) { - if ((*p)->alarm && (*p)->alarm < jiffies) { - (*p)->signal |= (1<<(SIGALRM-1)); - (*p)->alarm = 0; - } - if ((*p)->signal && (*p)->state==TASK_INTERRUPTIBLE) - (*p)->state=TASK_RUNNING; - } - -/* this is the scheduler proper: */ - - while (1) { - c = -1; - next = 0; - i = NR_TASKS; - p = &task[NR_TASKS]; - while (--i) { - if (!*--p) - continue; - if ((*p)->state == TASK_RUNNING && (*p)->counter > c) - c = (*p)->counter, next = i; - } - if (c) break; - for(p = &LAST_TASK ; p > &FIRST_TASK ; --p) - if (*p) - (*p)->counter = ((*p)->counter >> 1) + - (*p)->priority; - } - switch_to(next); -} diff --git a/20211202/linux-scheduler-1.c b/20211202/linux-scheduler-1.c deleted file mode 100644 index 0b365643eb3e9f245997c0e5cb331cbfb39fbacf..0000000000000000000000000000000000000000 --- a/20211202/linux-scheduler-1.c +++ /dev/null @@ -1,40 +0,0 @@ -void schedule(void) -{ - int i,next,c; - struct task_struct ** p; - -/* check alarm, wake up any interruptible tasks that have got a signal */ - - for(p = &LAST_TASK ; p > &FIRST_TASK ; --p) - if (*p) { - if ((*p)->alarm && (*p)->alarm < jiffies) { - (*p)->signal |= (1<<(SIGALRM-1)); - (*p)->alarm = 0; - } - if ((*p)->signal && (*p)->state==TASK_INTERRUPTIBLE) - (*p)->state=TASK_RUNNING; - } - -/* this is the scheduler proper: */ - - while (1) { - c = -1; - next = 0; - i = NR_TASKS - 1; - p = &task[NR_TASKS - 1]; - while (i) { - if (*p) { - if ((*p)->state == TASK_RUNNING && (*p)->counter > c) - c = (*p)->counter, next = i; - } - i--; - p--; - } - if (c) break; - for(p = &LAST_TASK ; p > &FIRST_TASK ; --p) - if (*p) - (*p)->counter = ((*p)->counter >> 1) + - (*p)->priority; - } - switch_to(next); -} diff --git a/20211202/linux-scheduler-2.c b/20211202/linux-scheduler-2.c deleted file mode 100644 index 1ccce7fdcc73ff02c9f67b4f9c2d4ae995fb88c1..0000000000000000000000000000000000000000 --- a/20211202/linux-scheduler-2.c +++ /dev/null @@ -1,42 +0,0 @@ -void schedule(void) -{ - int i,next,c; - struct task_struct ** p; - -/* check alarm, wake up any interruptible tasks that have got a signal */ - - for(p = &LAST_TASK ; p > &FIRST_TASK ; --p) - if (*p) { - if ((*p)->alarm && (*p)->alarm < jiffies) { - (*p)->signal |= (1<<(SIGALRM-1)); - (*p)->alarm = 0; - } - if ((*p)->signal && (*p)->state==TASK_INTERRUPTIBLE) - (*p)->state=TASK_RUNNING; - } - -/* this is the scheduler proper: */ - - while (1) { - c = -1; - next = 0; - i = NR_TASKS - 1; - p = &task[NR_TASKS - 1]; - while (i) { - if (*p) { - if ((*p)->state == TASK_RUNNING && (*p)->counter > c) { - c = (*p)->counter; - next = i; - } - } - i--; - p--; - } - if (c) break; - for(p = &LAST_TASK ; p > &FIRST_TASK ; --p) - if (*p) - (*p)->counter = ((*p)->counter >> 1) + - (*p)->priority; - } - switch_to(next); -} diff --git a/20211202/logo-hochschule-bochum-cvh-text-v2.pdf b/20211202/logo-hochschule-bochum-cvh-text-v2.pdf deleted file mode 120000 index 4aa99b8f81061aca6dcaf43eed2d9efef40555f8..0000000000000000000000000000000000000000 --- a/20211202/logo-hochschule-bochum-cvh-text-v2.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/logo-hochschule-bochum-cvh-text-v2.pdf \ No newline at end of file diff --git a/20211202/logo-hochschule-bochum.pdf b/20211202/logo-hochschule-bochum.pdf deleted file mode 120000 index b6b9491e370e499c9276918182cdb82cb311bcd1..0000000000000000000000000000000000000000 --- a/20211202/logo-hochschule-bochum.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/logo-hochschule-bochum.pdf \ No newline at end of file diff --git a/20211202/make-zombies-1.c b/20211202/make-zombies-1.c deleted file mode 100644 index f7b2604f147e5efca9e2adcca5f50b8d134ccaab..0000000000000000000000000000000000000000 --- a/20211202/make-zombies-1.c +++ /dev/null @@ -1,41 +0,0 @@ -#include <stdio.h> -#include <sys/wait.h> -#include <stdlib.h> -#include <unistd.h> - -int main(void){ - pid_t pids[10]; // Platz f�r 10 Prozess-IDs (die Kindprozesse) - int i; // Laufvariable - - for (i = 0; i < 10; ++i) { - // Der Vaterprozess erzeugt nun einen Kindprozess, - // welcher unabh�ngig vom Vaterprozess mit der - // erneuten Ausf�hrung des Programms beginnt. - // Ein Kindprozess erzeugt keinen Fork von sich selbst. - pids[i] = fork(); - if (pids[i] == 0) { - // dann befinden wir uns in einem der 10 Kindprozesse - // Der erste Kindprozess wartet 10 Sekunden und jeder - // weitere Kindprozess wartet 1 Sekunde k�rzer als der - // vorige. - sleep(10-i); - printf ("%d BRAINS! ", i); - exit(0); // Kindprozess erfolgreich beenden - } - } - -// - // hier kommt nur der Vaterprozess vorbei - for (i = 0; i < 10; ++i){ - // Der Vaterprozess wartet nun, bis der Reihe nach jeder - // seiner 10 Kindprozesse beendet ist. Leider wird auf das - // Kind mit der l�ngsten Wartezeit zuerst gewartet. Obwohl - // die anderen Kinder l�ngst erfolgreich beendet wurden, - // blockiert das erste Kind eine Bereinigung der Prozesstabelle - waitpid(pids[i], NULL, 0); - } -// - -// while (1); - return 0; // Vaterprozess erfolgreich beenden -} diff --git a/20211202/make-zombies-2.c b/20211202/make-zombies-2.c deleted file mode 100644 index 737940e90a5057377c5a8a95d49afccedf703a28..0000000000000000000000000000000000000000 --- a/20211202/make-zombies-2.c +++ /dev/null @@ -1,41 +0,0 @@ -#include <stdio.h> -#include <sys/wait.h> -#include <stdlib.h> -#include <unistd.h> - -int main(void){ - pid_t pids[10]; // Platz für 10 Prozess-IDs (die Kindprozesse) - int i; // Laufvariable - - for (i = 0; i < 10; ++i) { - // Der Vaterprozess erzeugt nun einen Kindprozess, - // welcher unabhängig vom Vaterprozess mit der - // erneuten Ausführung des Programms beginnt. - // Ein Kindprozess erzeugt keinen Fork von sich selbst. - pids[i] = fork(); - if (pids[i] == 0) { - // dann befinden wir uns in einem der 10 Kindprozesse - // Der erste Kindprozess wartet 10 Sekunden und jeder - // weitere Kindprozess wartet 1 Sekunde kürzer als der - // vorige. - sleep(10-i); - printf ("%d BRAINS! ", i); - exit(0); // Kindprozess erfolgreich beenden - } - } - -// -// // hier kommt nur der Vaterprozess vorbei -// for (i = 0; i < 10; ++i){ -// // Der Vaterprozess wartet nun, bis der Reihe nach jeder -// // seiner 10 Kindprozesse beendet ist. Leider wird auf das -// // Kind mit der längsten Wartezeit zuerst gewartet. Obwohl -// // die anderen Kinder längst erfolgreich beendet wurden, -// // blockiert das erste Kind eine Bereinigung der Prozesstabelle -// waitpid(pids[i], NULL, 0); -// } -// - - while (1); -// return 0; // Vaterprozess erfolgreich beenden -} diff --git a/20211202/make-zombies-3.c b/20211202/make-zombies-3.c deleted file mode 100644 index 196e0a4f93def95ac693571b03c8f66bc198ff54..0000000000000000000000000000000000000000 --- a/20211202/make-zombies-3.c +++ /dev/null @@ -1,41 +0,0 @@ -#include <stdio.h> -#include <sys/wait.h> -#include <stdlib.h> -#include <unistd.h> - -int main(void){ - pid_t pids[10]; // Platz für 10 Prozess-IDs (die Kindprozesse) - int i; // Laufvariable - - for (i = 0; i < 10; ++i) { - // Der Vaterprozess erzeugt nun einen Kindprozess, - // welcher unabhängig vom Vaterprozess mit der - // erneuten Ausführung des Programms beginnt. - // Ein Kindprozess erzeugt keinen Fork von sich selbst. - pids[i] = fork(); - if (pids[i] == 0) { - // dann befinden wir uns in einem der 10 Kindprozesse - // Der erste Kindprozess wartet 10 Sekunden und jeder - // weitere Kindprozess wartet 1 Sekunde kürzer als der - // vorige. - sleep(10-i); - printf ("%d BRAINS! ", i); - exit(0); // Kindprozess erfolgreich beenden - } - } - -// -// // hier kommt nur der Vaterprozess vorbei -// for (i = 0; i < 10; ++i){ -// // Der Vaterprozess wartet nun, bis der Reihe nach jeder -// // seiner 10 Kindprozesse beendet ist. Leider wird auf das -// // Kind mit der längsten Wartezeit zuerst gewartet. Obwohl -// // die anderen Kinder längst erfolgreich beendet wurden, -// // blockiert das erste Kind eine Bereinigung der Prozesstabelle -// waitpid(pids[i], NULL, 0); -// } -// - -// while (1); - return 0; // Vaterprozess erfolgreich beenden -} diff --git a/20211202/pathfinder.jpg b/20211202/pathfinder.jpg deleted file mode 120000 index 23c6444fee26e0cf0dd2f8639484b00aa5021b59..0000000000000000000000000000000000000000 --- a/20211202/pathfinder.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/pathfinder.jpg \ No newline at end of file diff --git a/20211202/pgslides.sty b/20211202/pgslides.sty deleted file mode 120000 index 5be1416f4216f076aa268901f52a15d775e43f64..0000000000000000000000000000000000000000 --- a/20211202/pgslides.sty +++ /dev/null @@ -1 +0,0 @@ -../common/pgslides.sty \ No newline at end of file diff --git a/20211202/philosophenproblem.jpg b/20211202/philosophenproblem.jpg deleted file mode 120000 index 26591b2ac2dddfd4786814baf3f19ecb67f1f5ee..0000000000000000000000000000000000000000 --- a/20211202/philosophenproblem.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/philosophenproblem.jpg \ No newline at end of file diff --git a/20211202/preprocessor-1.c b/20211202/preprocessor-1.c deleted file mode 100644 index 91a99c5cead1969500264c33b346ab6e3737c719..0000000000000000000000000000000000000000 --- a/20211202/preprocessor-1.c +++ /dev/null @@ -1,9 +0,0 @@ -#include <stdio.h> - -#define VIER 4 - -int main (void) -{ - printf ("Die Antwort lautet: %d\n", VIER); - return 0; -} diff --git a/20211202/preprocessor-10.c b/20211202/preprocessor-10.c deleted file mode 100644 index e01204d4301ccb6e30455749c4606bd3c1243fff..0000000000000000000000000000000000000000 --- a/20211202/preprocessor-10.c +++ /dev/null @@ -1,15 +0,0 @@ -#include <stdio.h> - -#define hello(x) { printf ("Hello!\n"); printf ("World!\n"); } -#define hallo(x) { printf ("Hallo!\n"); printf ("Welt!\n"); } - -#define english 1 - -int main (void) -{ - if (english) - hello () - else - hallo () - return 0; -} diff --git a/20211202/preprocessor-11.c b/20211202/preprocessor-11.c deleted file mode 100644 index 0778e33d67abaf3d04bb52fe701c0592b8d72f5d..0000000000000000000000000000000000000000 --- a/20211202/preprocessor-11.c +++ /dev/null @@ -1,15 +0,0 @@ -#include <stdio.h> - -#define hello(x) do { printf ("Hello!\n"); printf ("World!\n"); } while (0) -#define hallo(x) do { printf ("Hallo!\n"); printf ("Welt!\n"); } while (0) - -#define english 1 - -int main (void) -{ - if (english) - hello (); - else - hallo (); - return 0; -} diff --git a/20211202/preprocessor-12.c b/20211202/preprocessor-12.c deleted file mode 100644 index 6f5432ffa656b7308025babce6ae17b17d1cace7..0000000000000000000000000000000000000000 --- a/20211202/preprocessor-12.c +++ /dev/null @@ -1,28 +0,0 @@ -#include <stdio.h> - -#define hello(x) \ - do \ - { \ - printf ("Hello!\n"); \ - printf ("World!\n"); \ - } \ - while (0) - -#define hallo(x) \ - do \ - { \ - printf ("Hallo!\n"); \ - printf ("Welt!\n"); \ - } \ - while (0) - -#define english 1 - -int main (void) -{ - if (english) - hello (); - else - hallo (); - return 0; -} diff --git a/20211202/preprocessor-13.c b/20211202/preprocessor-13.c deleted file mode 100644 index 1c0a27bc4399ad7cb5be4eef22cdc0ada6d4fd49..0000000000000000000000000000000000000000 --- a/20211202/preprocessor-13.c +++ /dev/null @@ -1,14 +0,0 @@ -#include <stdio.h> - -#define set_answer(a,v) \ - do \ - a = v; \ - while (0) - -int main (void) -{ - int answer = 0; - set_answer (answer, 42); - printf ("Die Antwort lautet: %d\n", answer); - return 0; -} diff --git a/20211202/preprocessor-13.s b/20211202/preprocessor-13.s deleted file mode 100644 index 2b29389c7116ade1fd8474c72c03d818019009c5..0000000000000000000000000000000000000000 --- a/20211202/preprocessor-13.s +++ /dev/null @@ -1,26 +0,0 @@ - .file "preprocessor-13.c" - .text - .section .rodata.str1.1,"aMS",@progbits,1 -.LC0: - .string "Die Antwort lautet: %d\n" - .text - .globl main - .type main, @function -main: -.LFB11: - .cfi_startproc - subq $8, %rsp - .cfi_def_cfa_offset 16 - movl $42, %esi - leaq .LC0(%rip), %rdi - movl $0, %eax - call printf@PLT - movl $0, %eax - addq $8, %rsp - .cfi_def_cfa_offset 8 - ret - .cfi_endproc -.LFE11: - .size main, .-main - .ident "GCC: (Debian 8.3.0-6) 8.3.0" - .section .note.GNU-stack,"",@progbits diff --git a/20211202/preprocessor-14.c b/20211202/preprocessor-14.c deleted file mode 100644 index b1558f58a621c73abbb056296bc13a332a554e68..0000000000000000000000000000000000000000 --- a/20211202/preprocessor-14.c +++ /dev/null @@ -1,14 +0,0 @@ -#include <stdio.h> - -void set_answer (int *a, int v) -{ - *a = v; -} - -int main (void) -{ - int answer = 0; - set_answer (&answer, 42); - printf ("Die Antwort lautet: %d\n", answer); - return 0; -} diff --git a/20211202/preprocessor-14.s b/20211202/preprocessor-14.s deleted file mode 100644 index ee84b203efd614679f58360601e4cf65ffde2e37..0000000000000000000000000000000000000000 --- a/20211202/preprocessor-14.s +++ /dev/null @@ -1,36 +0,0 @@ - .file "preprocessor-14.c" - .text - .globl set_answer - .type set_answer, @function -set_answer: -.LFB11: - .cfi_startproc - movl %esi, (%rdi) - ret - .cfi_endproc -.LFE11: - .size set_answer, .-set_answer - .section .rodata.str1.1,"aMS",@progbits,1 -.LC0: - .string "Die Antwort lautet: %d\n" - .text - .globl main - .type main, @function -main: -.LFB12: - .cfi_startproc - subq $8, %rsp - .cfi_def_cfa_offset 16 - movl $42, %esi - leaq .LC0(%rip), %rdi - movl $0, %eax - call printf@PLT - movl $0, %eax - addq $8, %rsp - .cfi_def_cfa_offset 8 - ret - .cfi_endproc -.LFE12: - .size main, .-main - .ident "GCC: (Debian 8.3.0-6) 8.3.0" - .section .note.GNU-stack,"",@progbits diff --git a/20211202/preprocessor-2.c b/20211202/preprocessor-2.c deleted file mode 100644 index c876b5935fa297b351efb2424d4b374df6c789df..0000000000000000000000000000000000000000 --- a/20211202/preprocessor-2.c +++ /dev/null @@ -1,9 +0,0 @@ -#include <stdio.h> - -#define VIER 4); - -int main (void) -{ - printf ("Die Antwort lautet: %d\n", VIER - return 0; -} diff --git a/20211202/preprocessor-3.c b/20211202/preprocessor-3.c deleted file mode 100644 index 17d6f174c8c837ad514ea04a825c45d8b8a816cb..0000000000000000000000000000000000000000 --- a/20211202/preprocessor-3.c +++ /dev/null @@ -1,9 +0,0 @@ -#include <stdio.h> - -#define ZWEIMAL(X) 2 * X - -int main (void) -{ - printf ("Die Antwort lautet: %d\n", ZWEIMAL (23)); - return 0; -} diff --git a/20211202/preprocessor-4.c b/20211202/preprocessor-4.c deleted file mode 100644 index 2fa584c9e9de7d9aa14152d223cd2f9cb9f7363a..0000000000000000000000000000000000000000 --- a/20211202/preprocessor-4.c +++ /dev/null @@ -1,10 +0,0 @@ -#include <stdio.h> - -#define SECHS 1 + 5 -#define NEUN 8 + 1 - -int main (void) -{ - printf ("Die Antwort lautet: %d\n", SECHS * NEUN); - return 0; -} diff --git a/20211202/preprocessor-5.c b/20211202/preprocessor-5.c deleted file mode 100644 index f5bd2e52509346c794fbd051801caf03ff2d26a1..0000000000000000000000000000000000000000 --- a/20211202/preprocessor-5.c +++ /dev/null @@ -1,10 +0,0 @@ -#include <stdio.h> - -#define SECHS (1 + 5) -#define NEUN (8 + 1) - -int main (void) -{ - printf ("Die Antwort lautet: %d\n", SECHS * NEUN); - return 0; -} diff --git a/20211202/preprocessor-6.c b/20211202/preprocessor-6.c deleted file mode 100644 index e2b5e155366db5d304822c8ec3c2e53e5bfe34d8..0000000000000000000000000000000000000000 --- a/20211202/preprocessor-6.c +++ /dev/null @@ -1,15 +0,0 @@ -#include <stdio.h> - -#define hello printf ("Hello!\n") -#define hallo printf ("Hallo!\n") - -#define english 1 - -int main (void) -{ - if (english) - hello; - else - hallo; - return 0; -} diff --git a/20211202/preprocessor-7.c b/20211202/preprocessor-7.c deleted file mode 100644 index 673d2a3da8dc0427f6b2729f57e3f4840bd7afde..0000000000000000000000000000000000000000 --- a/20211202/preprocessor-7.c +++ /dev/null @@ -1,15 +0,0 @@ -#include <stdio.h> - -#define hello(x) printf ("Hello!\n") -#define hallo(x) printf ("Hallo!\n") - -#define english 1 - -int main (void) -{ - if (english) - hello (); - else - hallo (); - return 0; -} diff --git a/20211202/preprocessor-8.c b/20211202/preprocessor-8.c deleted file mode 100644 index ab6f6599c53a607155e3954d21d353aa37664a8a..0000000000000000000000000000000000000000 --- a/20211202/preprocessor-8.c +++ /dev/null @@ -1,15 +0,0 @@ -#include <stdio.h> - -#define hello(x) printf ("Hello!\n"); printf ("World!\n"); -#define hallo(x) printf ("Hallo!\n"); printf ("Welt!\n"); - -#define english 1 - -int main (void) -{ - if (english) - hello (); - else - hallo (); - return 0; -} diff --git a/20211202/preprocessor-9.c b/20211202/preprocessor-9.c deleted file mode 100644 index 5258c1a54ebef882dd7eae3abdeee46eb0cfed09..0000000000000000000000000000000000000000 --- a/20211202/preprocessor-9.c +++ /dev/null @@ -1,15 +0,0 @@ -#include <stdio.h> - -#define hello(x) { printf ("Hello!\n"); printf ("World!\n"); } -#define hallo(x) { printf ("Hallo!\n"); printf ("Welt!\n"); } - -#define english 1 - -int main (void) -{ - if (english) - hello (); - else - hallo (); - return 0; -} diff --git a/20211202/quadrocopter.jpg b/20211202/quadrocopter.jpg deleted file mode 120000 index 7eaf0c024b63b7bc1dd3df2c17c8ab93f67fc15c..0000000000000000000000000000000000000000 --- a/20211202/quadrocopter.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/quadrocopter.jpg \ No newline at end of file diff --git a/20211202/rp6.jpg b/20211202/rp6.jpg deleted file mode 120000 index 2a0ecff23845770c3a98178eca6dce3ec73aca58..0000000000000000000000000000000000000000 --- a/20211202/rp6.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/rp6.jpg \ No newline at end of file diff --git a/20211202/task-modes.h b/20211202/task-modes.h deleted file mode 100644 index 47f5cbac5dd2676cfbc961da0234617e32cb7a00..0000000000000000000000000000000000000000 --- a/20211202/task-modes.h +++ /dev/null @@ -1,5 +0,0 @@ -#define TASK_RUNNING 0 -#define TASK_INTERRUPTIBLE 1 -#define TASK_UNINTERRUPTIBLE 2 -#define TASK_ZOMBIE 3 -#define TASK_STOPPED 4 diff --git a/20211202/xbee.jpg b/20211202/xbee.jpg deleted file mode 120000 index ff0adff2eadf3d9b775d03cea8cf1f118534e2b9..0000000000000000000000000000000000000000 --- a/20211202/xbee.jpg +++ /dev/null @@ -1 +0,0 @@ -../common/xbee.jpg \ No newline at end of file diff --git a/20211209/crash-0.c b/20211209/crash-0.c deleted file mode 100644 index 62d224512d44d55d34a532eb9fcc9ea14e443368..0000000000000000000000000000000000000000 --- a/20211209/crash-0.c +++ /dev/null @@ -1 +0,0 @@ -main(){puts(0);} diff --git a/20211209/crash-1.c b/20211209/crash-1.c deleted file mode 100644 index d4f8b191d6d4491df2661046ce99c21ec2045a60..0000000000000000000000000000000000000000 --- a/20211209/crash-1.c +++ /dev/null @@ -1,7 +0,0 @@ -#include <stdio.h> - -int main (void) -{ - printf (42); - return 0; -} diff --git a/20211209/crash-2.c b/20211209/crash-2.c deleted file mode 100644 index c0d5c0f5670234c45fa925a5b1d56e97b9de7a11..0000000000000000000000000000000000000000 --- a/20211209/crash-2.c +++ /dev/null @@ -1,9 +0,0 @@ -#include <stdio.h> - -int main (void) -{ - printf ("Vor printf()\n"); - printf (42); - printf ("Nach printf()\n"); - return 0; -} diff --git a/20211209/crash-3.c b/20211209/crash-3.c deleted file mode 100644 index 570685e33b61ac0ffdf4a38b8630b42759f325b1..0000000000000000000000000000000000000000 --- a/20211209/crash-3.c +++ /dev/null @@ -1,13 +0,0 @@ -#include <stdio.h> - -void print_answer (int answer) -{ - printf ("Die Antwort lautet: "); - printf (answer); -} - -int main (void) -{ - print_answer (42); - return 0; -} diff --git a/20211209/crash-4.c b/20211209/crash-4.c deleted file mode 100644 index 76ed93c6d097343be8c2f7f5591f8ec76892efd9..0000000000000000000000000000000000000000 --- a/20211209/crash-4.c +++ /dev/null @@ -1,18 +0,0 @@ -#include <stdio.h> - -void print_answer (int answer) -{ - if (answer < 256) - { - printf ("Die Antwort lautet: "); - printf (answer); - } - else - printf ("Die Antwort ist zu kompliziert."); -} - -int main (void) -{ - print_answer (42); - return 0; -} diff --git a/20211209/crash-5.c b/20211209/crash-5.c deleted file mode 100644 index 00e06ed3dbaaabb4ca5c935b3b1f4740354700ea..0000000000000000000000000000000000000000 --- a/20211209/crash-5.c +++ /dev/null @@ -1,19 +0,0 @@ -#include <stdio.h> - -void print_answer (int answer) -{ - if (answer == 42) - { - printf ("Die Antwort lautet: "); - printf (answer); - } - else - printf ("Die Antwort ist zu kompliziert.\n"); -} - -int main (void) -{ - for (int a = 0; a < 1000; a++) - print_answer (a); - return 0; -} diff --git a/20211209/crash-6.c b/20211209/crash-6.c deleted file mode 100644 index 5f14383fe67e482aee32bb7d8f3f0345a894fef9..0000000000000000000000000000000000000000 --- a/20211209/crash-6.c +++ /dev/null @@ -1,23 +0,0 @@ -#include <stdio.h> - -int s = 0; - -void print_answer (int answer) -{ - s += answer; - if (answer == 42) - { - printf ("Die Antwort lautet: "); - printf (answer); - } - else - printf ("Die Antwort ist zu kompliziert.\n"); -} - -int main (void) -{ - for (int a = 0; a < 1000; a++) - print_answer (a); - printf ("Die Summe der Antworten lautet: %d\n", s); - return 0; -} diff --git a/20211209/es-20211209.txt b/20211209/es-20211209.txt deleted file mode 100644 index 9971aaf4ae6c29d300f478ad75390a30ad8b8eb0..0000000000000000000000000000000000000000 --- a/20211209/es-20211209.txt +++ /dev/null @@ -1,8 +0,0 @@ -GNU-Debugger, 09.12.2021, 15:45:26 -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - Original-Dokumentation: - https://www.sourceware.org/gdb/documentation/ - - - Tutorial: - https://www.tutorialspoint.com/gnu_debugger/ - oder: Web-Suche nach: "gdb" "tutorial" diff --git a/20211216/c b/20211216/c deleted file mode 100755 index d67edecd3df1bf6abb6b9a0d927d172d984f2646..0000000000000000000000000000000000000000 --- a/20211216/c +++ /dev/null @@ -1,14 +0,0 @@ -case "$1" in - p) v4l2-ctl -d /dev/video0 --set-ctrl=zoom_absolute=800 - v4l2-ctl -d /dev/video0 --set-ctrl=pan_absolute=84500 - v4l2-ctl -d /dev/video0 --set-ctrl=tilt_absolute=46000 - ;; - s) v4l2-ctl -d /dev/video0 --set-ctrl=zoom_absolute=800 - v4l2-ctl -d /dev/video0 --set-ctrl=pan_absolute=84500 - v4l2-ctl -d /dev/video0 --set-ctrl=tilt_absolute=31000 - ;; - t) v4l2-ctl -d /dev/video0 --set-ctrl=zoom_absolute=0 - v4l2-ctl -d /dev/video0 --set-ctrl=pan_absolute=-8000 - v4l2-ctl -d /dev/video0 --set-ctrl=tilt_absolute=40000 - ;; -esac diff --git a/20211007/csa2.jpg b/20220928/csa2.jpg similarity index 100% rename from 20211007/csa2.jpg rename to 20220928/csa2.jpg diff --git a/20211007/es-20211007.pdf b/20220928/es-20220928.pdf similarity index 99% rename from 20211007/es-20211007.pdf rename to 20220928/es-20220928.pdf index 0e14f013014ba2247cd3feb6c6b8335e283294f5..a8252993542e2dbbf1c8f39e15d999c341851d94 100644 Binary files a/20211007/es-20211007.pdf and b/20220928/es-20220928.pdf differ diff --git a/20211007/es-20211007.tex b/20220928/es-20220928.tex similarity index 98% rename from 20211007/es-20211007.tex rename to 20220928/es-20220928.tex index 8aae189276ee1dc31c839d7a93257f6e55fa2ba4..2c077746ecd01b687c5710718850c15938883f77 100644 --- a/20211007/es-20211007.tex +++ b/20220928/es-20220928.tex @@ -1,5 +1,5 @@ -% es-20211007.pdf - Lecture Slides on Embedded Systems -% Copyright (C) 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Peter Gerwinski +% es-20220928.pdf - Lecture Slides on Embedded Systems +% Copyright (C) 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Peter Gerwinski % % This document is free software: you can redistribute it and/or % modify it either under the terms of the Creative Commons @@ -36,7 +36,7 @@ \title{Eingebettete Systeme} \author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski} -\date{7.\ Oktober 2021} +\date{28.\ September 2022} \newcommand{\greyurl}[1]{\href{#1}{\color{gray}\nolinkurl{#1}}} \newcommand{\ItwoC}{I\raisebox{0.5ex}{\footnotesize 2}C} @@ -49,7 +49,7 @@ \else -\begin{frame}[plain] +\begin{frame}[plain,fragile] \vspace*{8cm} \begin{picture}(0,0) @@ -75,6 +75,9 @@ \begin{picture}(0,0) \put(0.2,-1.1){\makebox(0,0)[bl]{\bf\color{gray}\shortstack[l]{\insertauthor\\[\smallskipamount]\insertdate}}} \put(12.4,-1.1){\makebox(0,0)[r]{\greyurl{https://www.peter.gerwinski.de/}}} + \put(4.35,-0.9){\only<2->{\makebox(0,0)[br]{\tikz{\draw[-latex,red](0,0)--(-1.55,0.3);}}}} + \put(4.0,-0.8){\only<2->{\makebox(0,0)[tl]{\footnotesize\color{red}\shortstack{% + \emph{rerum naturalium}\\der Naturwissenschaften}}}} \end{picture} \end{frame} diff --git a/20211007/floppys.jpg b/20220928/floppys.jpg similarity index 100% rename from 20211007/floppys.jpg rename to 20220928/floppys.jpg diff --git a/20211007/logo-hochschule-bochum-cvh-text-v2.pdf b/20220928/logo-hochschule-bochum-cvh-text-v2.pdf similarity index 100% rename from 20211007/logo-hochschule-bochum-cvh-text-v2.pdf rename to 20220928/logo-hochschule-bochum-cvh-text-v2.pdf diff --git a/20211007/logo-hochschule-bochum.pdf b/20220928/logo-hochschule-bochum.pdf similarity index 100% rename from 20211007/logo-hochschule-bochum.pdf rename to 20220928/logo-hochschule-bochum.pdf diff --git a/20211007/pgslides.sty b/20220928/pgslides.sty similarity index 100% rename from 20211007/pgslides.sty rename to 20220928/pgslides.sty diff --git a/20211007/wetterstation.jpg b/20220928/wetterstation.jpg similarity index 100% rename from 20211007/wetterstation.jpg rename to 20220928/wetterstation.jpg diff --git a/README.md b/README.md index ff8ffcf4aa66ed6341ffd4fdd9d7b17816dff463..4e857f2b3aacfa2fe4d137c57206b659d8453bfa 100644 --- a/README.md +++ b/README.md @@ -1,58 +1,50 @@ Eingebettete Systeme ==================== -Lehrveranstaltung im Wintersemester 2021/22 +Lehrveranstaltung im Wintersemester 2022/23 Hochschule Bochum, Campus Velbert/Heiligenhaus Prof. Dr. rer. nat. Peter Gerwinski -Copyright © 2012–2021 Peter Gerwinski +Copyright © 2012–2022 Peter Gerwinski **Diese Lehrmaterialien sind freie Software.** Sie dürfen diese gemäß den jeweils angegebenen Lizenzen -([CC-BY-SA 3.0](https://gitlab.cvh-server.de/pgerwinski/es/raw/2021ws/common/CC-BY-SA-3.0), -[GNU GPL 3+](https://gitlab.cvh-server.de/pgerwinski/es/raw/2021ws/common/GNU-GPL-3), -[modified BSD License](https://gitlab.cvh-server.de/pgerwinski/es/raw/2021ws/common/BSD-MODIFIED)) +([CC-BY-SA 3.0](https://gitlab.cvh-server.de/pgerwinski/es/raw/2022ws/common/CC-BY-SA-3.0), +[GNU GPL 3+](https://gitlab.cvh-server.de/pgerwinski/es/raw/2022ws/common/GNU-GPL-3), +[modified BSD License](https://gitlab.cvh-server.de/pgerwinski/es/raw/2022ws/common/BSD-MODIFIED)) studieren, kopieren, modifizieren und/oder weitergeben. -Für Details siehe [common/README](https://gitlab.cvh-server.de/pgerwinski/es/raw/2021ws/common/README). +Für Details siehe [common/README](https://gitlab.cvh-server.de/pgerwinski/es/raw/2022ws/common/README). Vortragsfolien: --------------- - * [07.10.2021: Einführung: eingebettete Systeme, Unix-Kommandozeile](https://gitlab.cvh-server.de/pgerwinski/es/raw/2021ws/20211007/es-20211007.pdf) - * [14.10.2021: Unix-Kommandozeile: Links, Ein- und Ausgabeströme, Pipes](https://gitlab.cvh-server.de/pgerwinski/es/raw/2021ws/20211014/es-20211014.pdf) - * [21.10.2021: GNU Screen](https://gitlab.cvh-server.de/pgerwinski/es/raw/2021ws/20211021/es-20211021.pdf) - * [28.10.2021: TCP/IP in der Praxis](https://gitlab.cvh-server.de/pgerwinski/es/raw/2021ws/20211028/es-20211028.pdf) - * [04.11.2021: Netzwerkanalyse, VNC, Netzwerk-Programmierung](https://gitlab.cvh-server.de/pgerwinski/es/raw/2021ws/20211104/es-20211104.pdf) - * [11.11.2021: Bus-Systeme](https://gitlab.cvh-server.de/pgerwinski/es/raw/2021ws/20211111/es-20211111.pdf) - * [18.11.2021: Echtzeit: Definition, Echtzeitprogrammierung](https://gitlab.cvh-server.de/pgerwinski/es/raw/2021ws/20211118/es-20211118.pdf) - * [25.11.2021: Echtzeit: Multitasking, Ressourcen](https://gitlab.cvh-server.de/pgerwinski/es/raw/2021ws/20211125/es-20211125.pdf) - * [02.12.2021: Echtzeit: Scheduler, Semaphor, Mutex, Spinlock,Verklemmungen](https://gitlab.cvh-server.de/pgerwinski/es/raw/2021ws/20211202/es-20211202.pdf) - * [alle in 1 Datei](https://gitlab.cvh-server.de/pgerwinski/es/raw/2021ws/es-slides-2021ws.pdf) + * [28.09.2022: Einführung: eingebettete Systeme, Unix-Kommandozeile](https://gitlab.cvh-server.de/pgerwinski/es/raw/2022ws/20220928/es-20220928.pdf) + * [alle in 1 Datei](https://gitlab.cvh-server.de/pgerwinski/es/raw/2022ws/es-slides-2022ws.pdf) Original-Materialien einschließlich Beispiel-Programme und LaTeX-Quelltexte: ---------------------------------------------------------------------------- - * [common – gemeinsame Dateien für Skript und Vortragsfolien](https://gitlab.cvh-server.de/pgerwinski/es/tree/2021ws/common) - * [202????? – Vortragsfolien und Beispiele](https://gitlab.cvh-server.de/pgerwinski/es/tree/2021ws) - * [branch 2020ws – vollständige Lehrmaterialien vom Wintersemester 2020/21](https://gitlab.cvh-server.de/pgerwinski/es/tree/2019ws) + * [common – gemeinsame Dateien für Skript und Vortragsfolien](https://gitlab.cvh-server.de/pgerwinski/es/tree/2022ws/common) + * [202????? – Vortragsfolien und Beispiele](https://gitlab.cvh-server.de/pgerwinski/es/tree/2022ws) + * [branch 2021ws – vollständige Lehrmaterialien vom Wintersemester 2021/21](https://gitlab.cvh-server.de/pgerwinski/es/tree/2019ws) Embedded Systems ================ -Course in winter semester 2021-22 +Course in winter semester 2022-23 Bochum University of Applied Sciences, Campus Velbert/Heiligenhaus Prof. Dr. rer. nat. Peter Gerwinski -Copyright © 2012–2021 Peter Gerwinski +Copyright © 2012–2022 Peter Gerwinski **These teaching materials are Free Software.** You may study, copy, modify, and/or distribute them according to their respective licences -([CC-BY-SA 3.0](https://gitlab.cvh-server.de/pgerwinski/es/raw/2021ws/common/CC-BY-SA-3.0), -[GNU GPL 3+](https://gitlab.cvh-server.de/pgerwinski/es/raw/2021ws/common/GNU-GPL-3), -[modified BSD License](https://gitlab.cvh-server.de/pgerwinski/es/raw/2021ws/common/BSD-MODIFIED)). -See the file [common/README](https://gitlab.cvh-server.de/pgerwinski/es/raw/2021ws/common/README) for details. - - * [common – common files for lecture notes and slides](https://gitlab.cvh-server.de/pgerwinski/es/tree/2021ws/common) - * [202????? – slides and examples](https://gitlab.cvh-server.de/pgerwinski/es/tree/2021ws) - * [es-slides-2021ws.pdf – all slides in 1 file](https://gitlab.cvh-server.de/pgerwinski/es/raw/2021ws/es-slides-2021ws.pdf) - * [branch 2020ws – complete teaching materials from winter semester 2020–21](https://gitlab.cvh-server.de/pgerwinski/es/tree/2019ws) +([CC-BY-SA 3.0](https://gitlab.cvh-server.de/pgerwinski/es/raw/2022ws/common/CC-BY-SA-3.0), +[GNU GPL 3+](https://gitlab.cvh-server.de/pgerwinski/es/raw/2022ws/common/GNU-GPL-3), +[modified BSD License](https://gitlab.cvh-server.de/pgerwinski/es/raw/2022ws/common/BSD-MODIFIED)). +See the file [common/README](https://gitlab.cvh-server.de/pgerwinski/es/raw/2022ws/common/README) for details. + + * [common – common files for lecture notes and slides](https://gitlab.cvh-server.de/pgerwinski/es/tree/2022ws/common) + * [202????? – slides and examples](https://gitlab.cvh-server.de/pgerwinski/es/tree/2022ws) + * [es-slides-2022ws.pdf – all slides in 1 file](https://gitlab.cvh-server.de/pgerwinski/es/raw/2022ws/es-slides-2022ws.pdf) + * [branch 2021ws – complete teaching materials from winter semester 2021–22](https://gitlab.cvh-server.de/pgerwinski/es/tree/2019ws) diff --git a/es-slides-2021ws.pdf b/es-slides-2021ws.pdf deleted file mode 100644 index a0dbde3642ce737aa54d2fcff50c3825a6defc72..0000000000000000000000000000000000000000 Binary files a/es-slides-2021ws.pdf and /dev/null differ diff --git a/es-slides-2022ws.pdf b/es-slides-2022ws.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ac83168c3aca051ad83fd91763fa4cf884acf594 Binary files /dev/null and b/es-slides-2022ws.pdf differ diff --git a/update b/update index 1af9f59870c95fb6616ba82af2ed3c7ec261992f..d20ebcc85e54a75bb10033ed7eabdbfee3885eea 100755 --- a/update +++ b/update @@ -1,9 +1,9 @@ #!/bin/bash -sem=2021ws +sem=2022ws course=es -date_mask="202[01][01][0-9][0-3][0-9]" +date_mask="202[23][01][0-9][0-3][0-9]" time_mask="[0-2][0-9][0-5][0-9][0-5][0-9]" base_url="https://gitlab.cvh-server.de/pgerwinski/$course/raw/$sem/" pattern="README:" @@ -54,11 +54,11 @@ cat > $readme << EOF Eingebettete Systeme ==================== -Lehrveranstaltung im Wintersemester 2021/22 +Lehrveranstaltung im Wintersemester 2022/23 Hochschule Bochum, Campus Velbert/Heiligenhaus Prof. Dr. rer. nat. Peter Gerwinski -Copyright © 2012–2021 Peter Gerwinski +Copyright © 2012–2022 Peter Gerwinski **Diese Lehrmaterialien sind freie Software.** Sie dürfen diese gemäß den jeweils angegebenen Lizenzen @@ -93,17 +93,17 @@ Original-Materialien einschließlich Beispiel-Programme und LaTeX-Quelltexte: ---------------------------------------------------------------------------- * [common – gemeinsame Dateien für Skript und Vortragsfolien](https://gitlab.cvh-server.de/pgerwinski/es/tree/$sem/common) * [202????? – Vortragsfolien und Beispiele](https://gitlab.cvh-server.de/pgerwinski/es/tree/$sem) - * [branch 2020ws – vollständige Lehrmaterialien vom Wintersemester 2020/21](https://gitlab.cvh-server.de/pgerwinski/es/tree/2019ws) + * [branch 2021ws – vollständige Lehrmaterialien vom Wintersemester 2021/21](https://gitlab.cvh-server.de/pgerwinski/es/tree/2019ws) Embedded Systems ================ -Course in winter semester 2021-22 +Course in winter semester 2022-23 Bochum University of Applied Sciences, Campus Velbert/Heiligenhaus Prof. Dr. rer. nat. Peter Gerwinski -Copyright © 2012–2021 Peter Gerwinski +Copyright © 2012–2022 Peter Gerwinski **These teaching materials are Free Software.** You may study, copy, modify, and/or distribute them @@ -116,7 +116,7 @@ See the file [common/README](https://gitlab.cvh-server.de/pgerwinski/es/raw/$sem * [common – common files for lecture notes and slides](https://gitlab.cvh-server.de/pgerwinski/es/tree/$sem/common) * [202????? – slides and examples](https://gitlab.cvh-server.de/pgerwinski/es/tree/$sem) * [es-slides-$sem.pdf – all slides in 1 file](https://gitlab.cvh-server.de/pgerwinski/es/raw/$sem/es-slides-$sem.pdf) - * [branch 2020ws – complete teaching materials from winter semester 2020–21](https://gitlab.cvh-server.de/pgerwinski/es/tree/2019ws) + * [branch 2021ws – complete teaching materials from winter semester 2021–22](https://gitlab.cvh-server.de/pgerwinski/es/tree/2019ws) EOF if diff -wu $readme_old $readme; then