<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://so.v2.cs.unibo.it/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Renzo</id>
	<title>Sistemi Operativi - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://so.v2.cs.unibo.it/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Renzo"/>
	<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php/Special:Contributions/Renzo"/>
	<updated>2026-04-25T23:17:17Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.5</generator>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Esempio_didattico_sul_file_system_ext2_(2026)&amp;diff=3110</id>
		<title>Esempio didattico sul file system ext2 (2026)</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Esempio_didattico_sul_file_system_ext2_(2026)&amp;diff=3110"/>
		<updated>2026-04-09T08:47:37Z</updated>

		<summary type="html">&lt;p&gt;Renzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
truncate -s 128K disk&lt;br /&gt;
/sbin/mkfs.ext2 disk&lt;br /&gt;
hexdump -C disk&lt;br /&gt;
&lt;br /&gt;
documento con spiegazioni: https://dondi.lmu.build/share/os/ext2-walkthrough.pdf&lt;br /&gt;
&lt;br /&gt;
disco immagine di prova e tool sperimentale per facilitare la lettura:&lt;br /&gt;
https://www.cs.unibo.it/~renzo/so/ext2test.tgz&lt;br /&gt;
&lt;br /&gt;
Il disco immagine è stato creato con questi comandi:&lt;br /&gt;
&lt;br /&gt;
mount /tmp/disk /mnt&lt;br /&gt;
ls /mnt&lt;br /&gt;
mkdir /mnt/dir&lt;br /&gt;
echo ciao mare &amp;gt; /mnt/ciao&lt;br /&gt;
ln /mnt/ciao /mnt/dir/ciao2&lt;br /&gt;
echo addio &amp;gt; /mnt/dir/bye&lt;br /&gt;
ln -s /mnt/dir/bye /mnt/symlink&lt;br /&gt;
umount /mnt&lt;br /&gt;
&lt;br /&gt;
bvi&lt;br /&gt;
:set cm=32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aiuti per la lettura del dump esadecimale:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Blocchi:&lt;br /&gt;
00000000 0 -&amp;gt; boot block&lt;br /&gt;
00000400 1 superblocco&lt;br /&gt;
00000800 2 blockgroup&lt;br /&gt;
00000C00 3 BitMap blocchi&lt;br /&gt;
00001000 4 BitMap inode&lt;br /&gt;
00001400 5 area inode (vedi oltre)&lt;br /&gt;
...&lt;br /&gt;
00002400 9 inizio area dati, il blocco 9 e' la directory /&lt;br /&gt;
00002800 A ... fino a 00005400 15 e' la dir  lost+found&lt;br /&gt;
00005c00 17 dati file ciao (detto anche dir/ciao2)&lt;br /&gt;
00006000 18 dati file bye&lt;br /&gt;
0001fc00 7F directory dir&lt;br /&gt;
&lt;br /&gt;
Inode:&lt;br /&gt;
00001400 inode 1 (riservato)&lt;br /&gt;
00001500 inode 2 directory /&lt;br /&gt;
00001600 inode 3 &lt;br /&gt;
00001e00 inode B lost+found&lt;br /&gt;
00001f00 inode C directory dir&lt;br /&gt;
00002000 inode D file ciao (dir/ciao2)&lt;br /&gt;
00002100 inode E file bye&lt;br /&gt;
00002200 inode F symlink&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
esempi di uso del tool e2exp:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dump di un blocco (con indirizzo hex): &lt;br /&gt;
./e2exp disk dump 0x400&lt;br /&gt;
00000400  10 00 00 00 80 00 00 00  06 00 00 00 66 00 00 00  |............f...|&lt;br /&gt;
00000410  01 00 00 00 01 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;
00000420  00 20 00 00 00 20 00 00  10 00 00 00 71 54 d3 69  |. ... ......qT.i|&lt;br /&gt;
00000430  94 54 d3 69 01 00 ff ff  53 ef 01 00 01 00 00 00  |.T.i....S.......|&lt;br /&gt;
....&lt;br /&gt;
&lt;br /&gt;
dump di un blocco (con numero blocco):&lt;br /&gt;
./e2exp disk ddump 1&lt;br /&gt;
00000400  10 00 00 00 80 00 00 00  06 00 00 00 66 00 00 00  |............f...|&lt;br /&gt;
00000410  01 00 00 00 01 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;
00000420  00 20 00 00 00 20 00 00  10 00 00 00 71 54 d3 69  |. ... ......qT.i|&lt;br /&gt;
....&lt;br /&gt;
&lt;br /&gt;
dump di alcuni campi del superblock:&lt;br /&gt;
 ./e2exp disk super 400&lt;br /&gt;
00000400  10 00 00 00 --&amp;gt; 16 s_inodes_count&lt;br /&gt;
00000404  80 00 00 00 --&amp;gt; 128 s_blocks_count&lt;br /&gt;
0000040c  66 00 00 00 --&amp;gt; 102 s_free_blocks_count&lt;br /&gt;
00000410  01 00 00 00 --&amp;gt; 1 s_free_inodes_count&lt;br /&gt;
00000414  01 00 00 00 --&amp;gt; 1 s_first_data_block&lt;br /&gt;
00000418  00 00 00 00 --&amp;gt; 0 s_log_block_size&lt;br /&gt;
00000438  53 ef --&amp;gt; 61267 s_magic&lt;br /&gt;
&lt;br /&gt;
dump di alcuni dati del blockgroup:&lt;br /&gt;
./e2exp disk group 800&lt;br /&gt;
00000800  03 00 00 00 --&amp;gt; 3 bg_block_bitmap&lt;br /&gt;
00000804  04 00 00 00 --&amp;gt; 4 bg_inode_bitmap&lt;br /&gt;
00000808  05 00 00 00 --&amp;gt; 5 bg_inode_table&lt;br /&gt;
0000080c  66 00 --&amp;gt; 102 bg_free_blocks_count&lt;br /&gt;
0000080e  01 00 --&amp;gt; 1 bg_free_inodes_count&lt;br /&gt;
00000810  03 00 --&amp;gt; 3 bg_used_dirs_count&lt;br /&gt;
&lt;br /&gt;
dump parziale bitmap allocazione blocchi:&lt;br /&gt;
 ./e2exp disk bmb c00&lt;br /&gt;
00000c00  ff ff ff 00 00 00 00 00&lt;br /&gt;
  0000000000000000000000000000000000000000000000000000000000000000|&lt;br /&gt;
  0000000000000000111111111111111122222222222222223333333333333333|&lt;br /&gt;
  0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef|&lt;br /&gt;
  XXXXXXXXXXXXXXXXXXXXXXXX----------------------------------------&lt;br /&gt;
00000c08  00 00 00 00 00 00 00 c0&lt;br /&gt;
  0000000000000000000000000000000000000000000000000000000000000000|&lt;br /&gt;
  4444444444444444555555555555555566666666666666667777777777777777|&lt;br /&gt;
  0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef|&lt;br /&gt;
  --------------------------------------------------------XX------&lt;br /&gt;
&lt;br /&gt;
dump parziale bitmap allocazione ino:&lt;br /&gt;
 ./e2exp disk bmi 1000&lt;br /&gt;
00001000  ff 7f ff ff ff ff ff ff&lt;br /&gt;
  0000000000000000000000000000000000000000000000000000000000000000|&lt;br /&gt;
  0000000000000000111111111111111122222222222222223333333333333333|&lt;br /&gt;
  0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef|&lt;br /&gt;
  XXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&lt;br /&gt;
00001008  ff ff ff ff ff ff ff ff&lt;br /&gt;
  0000000000000000000000000000000000000000000000000000000000000000|&lt;br /&gt;
  4444444444444444555555555555555566666666666666667777777777777777|&lt;br /&gt;
  0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef|&lt;br /&gt;
  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&lt;br /&gt;
&lt;br /&gt;
dump di dati di un inode:&lt;br /&gt;
./e2exp disk inode 1400+2&lt;br /&gt;
00001500  ed 41 --&amp;gt; 4 (S_IFDIR) ---RWXR-XR-X&lt;br /&gt;
00001502  00 00 --&amp;gt; 0 i_uid&lt;br /&gt;
00001504  00 04 00 00 --&amp;gt; 1024 i_size&lt;br /&gt;
00001508  78 54 d3 69 --&amp;gt; 1775457400 i_atime&lt;br /&gt;
0000150c  8f 54 d3 69 --&amp;gt; 1775457423 i_ctime&lt;br /&gt;
00001510  8f 54 d3 69 --&amp;gt; 1775457423 i_mtime&lt;br /&gt;
00001518  00 00 --&amp;gt; 0 i_gid&lt;br /&gt;
0000151a  04 00 --&amp;gt; 4 i_links_count&lt;br /&gt;
0000151c  02 00 00 00 --&amp;gt; 2 i_blocks&lt;br /&gt;
00001528  09 00 00 00 --&amp;gt; [0] 9 i_block&lt;br /&gt;
0000152c  00 00 00 00 --&amp;gt; [1] 0 i_block&lt;br /&gt;
00001530  00 00 00 00 --&amp;gt; [2] 0 i_block&lt;br /&gt;
00001534  00 00 00 00 --&amp;gt; [3] 0 i_block&lt;br /&gt;
00001538  00 00 00 00 --&amp;gt; [4] 0 i_block&lt;br /&gt;
0000153c  00 00 00 00 --&amp;gt; [5] 0 i_block&lt;br /&gt;
00001540  00 00 00 00 --&amp;gt; [6] 0 i_block&lt;br /&gt;
00001544  00 00 00 00 --&amp;gt; [7] 0 i_block&lt;br /&gt;
00001548  00 00 00 00 --&amp;gt; [8] 0 i_block&lt;br /&gt;
0000154c  00 00 00 00 --&amp;gt; [9] 0 i_block&lt;br /&gt;
00001550  00 00 00 00 --&amp;gt; [10] 0 i_block&lt;br /&gt;
00001554  00 00 00 00 --&amp;gt; [11] 0 i_block&lt;br /&gt;
00001558  00 00 00 00 --&amp;gt; [12] 0 i_block&lt;br /&gt;
0000155c  00 00 00 00 --&amp;gt; [13] 0 i_block&lt;br /&gt;
00001560  00 00 00 00 --&amp;gt; [14] 0 i_block&lt;br /&gt;
&lt;br /&gt;
Scansione di una dir:&lt;br /&gt;
./e2exp disk dir 02400&lt;br /&gt;
00002400  02 00 00 00 --&amp;gt; 2 inode&lt;br /&gt;
00002404  0c 00 --&amp;gt; 12 rec_len (next 0x240c)&lt;br /&gt;
00002406  01 --&amp;gt; 1 name_len&lt;br /&gt;
00002407  02 --&amp;gt; 2 file_type&lt;br /&gt;
00002408  2e --&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
./e2exp disk dir 0240c&lt;br /&gt;
0000240c  02 00 00 00 --&amp;gt; 2 inode&lt;br /&gt;
00002410  0c 00 --&amp;gt; 12 rec_len (next 0x2418)&lt;br /&gt;
00002412  02 --&amp;gt; 2 name_len&lt;br /&gt;
00002413  02 --&amp;gt; 2 file_type&lt;br /&gt;
00002414  2e 2e --&amp;gt; ..&lt;br /&gt;
&lt;br /&gt;
./e2exp disk dir 02418&lt;br /&gt;
00002418  0b 00 00 00 --&amp;gt; 11 inode&lt;br /&gt;
0000241c  14 00 --&amp;gt; 20 rec_len (next 0x242c)&lt;br /&gt;
0000241e  0a --&amp;gt; 10 name_len&lt;br /&gt;
0000241f  02 --&amp;gt; 2 file_type&lt;br /&gt;
00002420  6c 6f 73 74 2b 66 6f 75 6e 64 --&amp;gt; lost+found&lt;br /&gt;
&lt;br /&gt;
./e2exp disk dir 0242c&lt;br /&gt;
0000242c  0c 00 00 00 --&amp;gt; 12 inode&lt;br /&gt;
00002430  0c 00 --&amp;gt; 12 rec_len (next 0x2438)&lt;br /&gt;
00002432  03 --&amp;gt; 3 name_len&lt;br /&gt;
00002433  02 --&amp;gt; 2 file_type&lt;br /&gt;
00002434  64 69 72 --&amp;gt; dir&lt;br /&gt;
&lt;br /&gt;
./e2exp disk dir 02438&lt;br /&gt;
00002438  0d 00 00 00 --&amp;gt; 13 inode&lt;br /&gt;
0000243c  0c 00 --&amp;gt; 12 rec_len (next 0x2444)&lt;br /&gt;
0000243e  04 --&amp;gt; 4 name_len&lt;br /&gt;
0000243f  01 --&amp;gt; 1 file_type&lt;br /&gt;
00002440  63 69 61 6f --&amp;gt; ciao&lt;br /&gt;
&lt;br /&gt;
./e2exp disk dir 02444&lt;br /&gt;
00002444  0f 00 00 00 --&amp;gt; 15 inode&lt;br /&gt;
00002448  bc 03 --&amp;gt; 956 rec_len (next 0x2800)&lt;br /&gt;
0000244a  07 --&amp;gt; 7 name_len&lt;br /&gt;
0000244b  07 --&amp;gt; 7 file_type&lt;br /&gt;
0000244c  73 79 6d 6c 69 6e 6b --&amp;gt; symlink&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Esempio_didattico_sul_file_system_ext2_(2026)&amp;diff=3109</id>
		<title>Esempio didattico sul file system ext2 (2026)</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Esempio_didattico_sul_file_system_ext2_(2026)&amp;diff=3109"/>
		<updated>2026-04-09T08:30:02Z</updated>

		<summary type="html">&lt;p&gt;Renzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
truncate -s 128K disk&lt;br /&gt;
/sbin/mkfs.ext2 disk&lt;br /&gt;
hexdump -C disk&lt;br /&gt;
&lt;br /&gt;
documento con spiegazioni: https://dondi.lmu.build/share/os/ext2-walkthrough.pdf&lt;br /&gt;
&lt;br /&gt;
disco immagine di prova e tool sperimentale per facilitare la lettura:&lt;br /&gt;
https://www.cs.unibo.it/~renzo/so/ext2test.tgz&lt;br /&gt;
&lt;br /&gt;
Il disco immagine è stato creato con questi comandi:&lt;br /&gt;
&lt;br /&gt;
mount /tmp/disk /mnt&lt;br /&gt;
ls /mnt&lt;br /&gt;
mkdir /mnt/dir&lt;br /&gt;
echo ciao mare &amp;gt; /mnt/ciao&lt;br /&gt;
ln /mnt/ciao /mnt/dir/ciao2&lt;br /&gt;
echo addio &amp;gt; /mnt/dir/bye&lt;br /&gt;
ln -s /mnt/dir/bye /mnt/symlink&lt;br /&gt;
umount /mnt&lt;br /&gt;
&lt;br /&gt;
bvi&lt;br /&gt;
:set cm=32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aiuti per la lettura del dump esadecimale:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Blocchi:&lt;br /&gt;
00000000 0 -&amp;gt; boot block&lt;br /&gt;
00000400 1 superblocco&lt;br /&gt;
00000800 2 blockgroup&lt;br /&gt;
00000C00 3 BitMap blocchi&lt;br /&gt;
00001000 4 BitMap inode&lt;br /&gt;
00001400 5 area inode (vedi oltre)&lt;br /&gt;
...&lt;br /&gt;
00002400 9 inizio area dati, il blocco 9 e' la directory /&lt;br /&gt;
00002800 A ... fino a 00005400 15 e' la dir  lost+found&lt;br /&gt;
00005c00 17 dati file ciao (detto anche dir/ciao2)&lt;br /&gt;
00006000 18 dati file bye&lt;br /&gt;
0001fc00 7F directory dir&lt;br /&gt;
&lt;br /&gt;
Inode:&lt;br /&gt;
00001400 inode 1 (riservato)&lt;br /&gt;
00001500 inode 2 directory /&lt;br /&gt;
00001600 inode 3 &lt;br /&gt;
00001e00 inode B lost+found&lt;br /&gt;
00001f00 inode C directory dir&lt;br /&gt;
00002000 inode D file ciao (dir/ciao2)&lt;br /&gt;
00002100 inode E file bye&lt;br /&gt;
00002200 inode F symlink&lt;br /&gt;
&lt;br /&gt;
esempi di uso del tool e2exp:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Esempio_didattico_sul_file_system_ext2_(2026)&amp;diff=3108</id>
		<title>Esempio didattico sul file system ext2 (2026)</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Esempio_didattico_sul_file_system_ext2_(2026)&amp;diff=3108"/>
		<updated>2026-04-09T08:23:35Z</updated>

		<summary type="html">&lt;p&gt;Renzo: Created page with &amp;quot;&amp;lt;pre&amp;gt; truncate -s 128K disk /sbin/mkfs.ext2 disk hexdump -C disk  https://dondi.lmu.build/share/os/ext2-walkthrough.pdf  mount /tmp/disk /mnt ls /mnt mkdir /mnt/dir echo ciao...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
truncate -s 128K disk&lt;br /&gt;
/sbin/mkfs.ext2 disk&lt;br /&gt;
hexdump -C disk&lt;br /&gt;
&lt;br /&gt;
https://dondi.lmu.build/share/os/ext2-walkthrough.pdf&lt;br /&gt;
&lt;br /&gt;
mount /tmp/disk /mnt&lt;br /&gt;
ls /mnt&lt;br /&gt;
mkdir /mnt/dir&lt;br /&gt;
echo ciao mare &amp;gt; /mnt/ciao&lt;br /&gt;
ln /mnt/ciao /mnt/dir/ciao2&lt;br /&gt;
echo addio &amp;gt; /mnt/dir/bye&lt;br /&gt;
ln -s /mnt/dir/bye /mnt/symlink&lt;br /&gt;
umount /mnt&lt;br /&gt;
&lt;br /&gt;
bvi&lt;br /&gt;
:set cm=32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aiuti per la lettura del dump esadecimale:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Blocchi:&lt;br /&gt;
00000000 0 -&amp;gt; boot block&lt;br /&gt;
00000400 1 superblocco&lt;br /&gt;
00000800 2 blockgroup&lt;br /&gt;
00000C00 3 BitMap blocchi&lt;br /&gt;
00001000 4 BitMap inode&lt;br /&gt;
00001400 5 area inode (vedi oltre)&lt;br /&gt;
...&lt;br /&gt;
00002400 9 inizio area dati, il blocco 9 e' la directory /&lt;br /&gt;
00002800 A ... fino a 00005400 15 e' la dir  lost+found&lt;br /&gt;
00005c00 17 dati file ciao (detto anche dir/ciao2)&lt;br /&gt;
00006000 18 dati file bye&lt;br /&gt;
0001fc00 7F directory dir&lt;br /&gt;
&lt;br /&gt;
Inode:&lt;br /&gt;
00001400 inode 1 (riservato)&lt;br /&gt;
00001500 inode 2 directory /&lt;br /&gt;
00001600 inode 3 &lt;br /&gt;
00001e00 inode B lost+found&lt;br /&gt;
00001f00 inode C directory dir&lt;br /&gt;
00002000 inode D file ciao (dir/ciao2)&lt;br /&gt;
00002100 inode E file bye&lt;br /&gt;
00002200 inode F symlink&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2025/26&amp;diff=3107</id>
		<title>Esempi, Esercizi ed Esperimenti 2025/26</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2025/26&amp;diff=3107"/>
		<updated>2026-04-09T08:23:22Z</updated>

		<summary type="html">&lt;p&gt;Renzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[prin_C_ples]]&lt;br /&gt;
* [[Esempi sulla rappresentazione dei dati]]&lt;br /&gt;
* [[Linguaggio C, libreria C, sistema operativo]]&lt;br /&gt;
* [[Esperimenti sugli algoritmi di Dekker e Peterson]]&lt;br /&gt;
* [[Tool per semafori e monitor]]&lt;br /&gt;
* [[Il ''catalogo'' delle System Call]]&lt;br /&gt;
* [[Syscall per file system: equivalenza comandi]]&lt;br /&gt;
* [[fork_vs_exec]]&lt;br /&gt;
* [[Compilazione kernel, busybox e macchine virtuali 2026]]&lt;br /&gt;
* [[Esperimenti con RAID6 (2026)]]&lt;br /&gt;
* [[Esempio didattico sul file system ext2 (2026)]]&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2025/26&amp;diff=3106</id>
		<title>Esempi, Esercizi ed Esperimenti 2025/26</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2025/26&amp;diff=3106"/>
		<updated>2026-04-06T07:11:22Z</updated>

		<summary type="html">&lt;p&gt;Renzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[prin_C_ples]]&lt;br /&gt;
* [[Esempi sulla rappresentazione dei dati]]&lt;br /&gt;
* [[Linguaggio C, libreria C, sistema operativo]]&lt;br /&gt;
* [[Esperimenti sugli algoritmi di Dekker e Peterson]]&lt;br /&gt;
* [[Tool per semafori e monitor]]&lt;br /&gt;
* [[Il ''catalogo'' delle System Call]]&lt;br /&gt;
* [[Syscall per file system: equivalenza comandi]]&lt;br /&gt;
* [[fork_vs_exec]]&lt;br /&gt;
* [[Compilazione kernel, busybox e macchine virtuali 2026]]&lt;br /&gt;
* [[Esperimenti con RAID6 (2026)]]&lt;br /&gt;
* [[Esempio didattico sul file system ext2]]&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Esperimenti_con_RAID6_(2026)&amp;diff=3105</id>
		<title>Esperimenti con RAID6 (2026)</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Esperimenti_con_RAID6_(2026)&amp;diff=3105"/>
		<updated>2026-03-17T12:09:26Z</updated>

		<summary type="html">&lt;p&gt;Renzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Il codice python che segue consente di provare sperimentalemnte le metodologie di fault tolerance descritte nell'articolo&lt;br /&gt;
[http://www.cs.unibo.it/~renzo//doc/papers/p245-blaum.pdf&amp;quot;EVENODD: An Optimal Scheme for Tolerating Double Disk Failures&amp;quot;] di Mario Blaurn et al.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
#!/usr/bin/env python3&lt;br /&gt;
&lt;br /&gt;
def print_table(tab, nrow, ncol):&lt;br /&gt;
	for i in range(nrow):&lt;br /&gt;
		for j in range(ncol):&lt;br /&gt;
			print(tab[i][j], end=&amp;quot; &amp;quot;)&lt;br /&gt;
		print()&lt;br /&gt;
	print()&lt;br /&gt;
	&lt;br /&gt;
# delete a column&lt;br /&gt;
def fail(tab, nrow, f):&lt;br /&gt;
	for i in range(nrow):&lt;br /&gt;
		tab[i][f] = 'x'&lt;br /&gt;
&lt;br /&gt;
# compute row parity&lt;br /&gt;
def compute_parity(tab, nrow, ncol):&lt;br /&gt;
	for i in range(nrow):&lt;br /&gt;
		p = 0&lt;br /&gt;
		for j in range(ncol):&lt;br /&gt;
			p ^= tab[i][j]&lt;br /&gt;
		tab[i][ncol] = p&lt;br /&gt;
&lt;br /&gt;
# compute diagonal parity&lt;br /&gt;
def compute_dparity(tab, nrow, ncol):&lt;br /&gt;
	p = [0] * ncol&lt;br /&gt;
	for i in range(nrow):&lt;br /&gt;
		for j in range(ncol):&lt;br /&gt;
			p[(i+j) % ncol] ^= tab[i][j]&lt;br /&gt;
#	print(p): the last parity is encoded&lt;br /&gt;
# if s negate all the diag parity values&lt;br /&gt;
	s = p[ncol - 1]&lt;br /&gt;
	for i in range(nrow):&lt;br /&gt;
		tab[i][ncol + 1] = p[i] ^ s&lt;br /&gt;
&lt;br /&gt;
# restore row parity&lt;br /&gt;
def restorep(tab, nrow, ncol, f):&lt;br /&gt;
	for i in range(nrow):&lt;br /&gt;
		p = tab[i][ncol]&lt;br /&gt;
		for j in range(ncol):&lt;br /&gt;
			if j != f:&lt;br /&gt;
				p ^= tab[i][j]&lt;br /&gt;
		tab[i][f] = p&lt;br /&gt;
&lt;br /&gt;
# restore diagonal parity&lt;br /&gt;
def restored(tab, nrow, ncol, f):&lt;br /&gt;
	p = [tab[i][ncol + 1] for i in range(nrow)] + [0]&lt;br /&gt;
	for i in range(nrow):&lt;br /&gt;
		for j in range(ncol):&lt;br /&gt;
			if j != f:&lt;br /&gt;
				p[(i+j) % ncol] ^= tab[i][j]&lt;br /&gt;
# the last parity is encoded&lt;br /&gt;
# if s negate all the diag parity values&lt;br /&gt;
	s = p[(f - 1) % ncol]&lt;br /&gt;
#	print(p, s)&lt;br /&gt;
	for i in range(nrow):&lt;br /&gt;
		tab[i][f] = s ^ p[(f + i) % ncol]&lt;br /&gt;
&lt;br /&gt;
# restore 2 data columns&lt;br /&gt;
def restore2(tab, nrow, ncol, f1, f2):&lt;br /&gt;
	s = 0&lt;br /&gt;
	for i in range(nrow):&lt;br /&gt;
		s ^= tab[i][ncol] ^ tab[i][ncol + 1]&lt;br /&gt;
	p = [s ^ tab[i][ncol + 1] for i in range(nrow)] + [s]&lt;br /&gt;
#	print(s, p)&lt;br /&gt;
	nindex = (nrow + f2) % ncol&lt;br /&gt;
	for _ in range(nrow):&lt;br /&gt;
		v = p[nindex]&lt;br /&gt;
#		print(nindex, (nindex + 1) % ncol)&lt;br /&gt;
		for i in range(nrow):&lt;br /&gt;
			j = (nindex - i) % ncol&lt;br /&gt;
			if j != f1:&lt;br /&gt;
				v ^= tab[i][j]&lt;br /&gt;
			else:&lt;br /&gt;
				row = i&lt;br /&gt;
#		print(row)&lt;br /&gt;
		tab[row][f1] = v&lt;br /&gt;
		nindex = (row + f2) % ncol&lt;br /&gt;
		v = tab[row][ncol]&lt;br /&gt;
		for j in range(ncol):&lt;br /&gt;
			if j != f2:&lt;br /&gt;
				v ^= tab[row][j]&lt;br /&gt;
			tab[row][f2] = v&lt;br /&gt;
&lt;br /&gt;
# MAIN&lt;br /&gt;
def main():&lt;br /&gt;
# input the table&lt;br /&gt;
	tab=[]&lt;br /&gt;
	while True:&lt;br /&gt;
		line = input(&amp;quot;&amp;quot;)&lt;br /&gt;
		if len(line) &amp;lt;= 1:&lt;br /&gt;
			break&lt;br /&gt;
		tab.append([int(x) for x in line.split()] + [0, 0])&lt;br /&gt;
	nrow = len(tab)&lt;br /&gt;
	ncol = len(tab[0]) - 2&lt;br /&gt;
# add parities row + diag&lt;br /&gt;
	compute_parity(tab, nrow, ncol)&lt;br /&gt;
	compute_dparity(tab, nrow, ncol)&lt;br /&gt;
	print_table(tab, nrow, ncol + 2)&lt;br /&gt;
&lt;br /&gt;
	savetab = tab&lt;br /&gt;
&lt;br /&gt;
	while True:&lt;br /&gt;
		line = input(&amp;quot;failure &amp;quot;)&lt;br /&gt;
		s = line.split()&lt;br /&gt;
# failures: 1 or 2 columns&lt;br /&gt;
		if len(s) == 2:&lt;br /&gt;
			f1, f2 = int(s[0]), int(s[1])&lt;br /&gt;
		elif len(s) == 1:&lt;br /&gt;
			f1 = f2 = int(s[0])&lt;br /&gt;
		else:&lt;br /&gt;
			return&lt;br /&gt;
	&lt;br /&gt;
		fail(tab, nrow, f1)&lt;br /&gt;
		fail(tab, nrow, f2)&lt;br /&gt;
		print_table(tab, nrow, ncol + 2)&lt;br /&gt;
		if f1 == f2:&lt;br /&gt;
			print(&amp;quot;1 faulty&amp;quot;, f1)&lt;br /&gt;
# missing row parity&lt;br /&gt;
			if f1 == ncol:&lt;br /&gt;
				compute_parity(tab, nrow, ncol)&lt;br /&gt;
# missing diag parity&lt;br /&gt;
			elif (f1 == ncol + 1):&lt;br /&gt;
				compute_dparity(tab, nrow, ncol)&lt;br /&gt;
# missing data &lt;br /&gt;
			else:&lt;br /&gt;
				restorep(tab, nrow, ncol, f1)&lt;br /&gt;
		else:&lt;br /&gt;
			if f1 &amp;gt; f2:&lt;br /&gt;
				f1, f2 = f2, f1&lt;br /&gt;
			print(&amp;quot;2 faulty&amp;quot;, f1, f2)&lt;br /&gt;
			if f1 == ncol:&lt;br /&gt;
# missind both parities&lt;br /&gt;
				compute_parity(tab, nrow, ncol)&lt;br /&gt;
				compute_dparity(tab, nrow, ncol)&lt;br /&gt;
# missind data + row parity&lt;br /&gt;
			elif f2 == ncol + 1:&lt;br /&gt;
				restorep(tab, nrow, ncol, f1)&lt;br /&gt;
				compute_dparity(tab, nrow, ncol)&lt;br /&gt;
# missind data + diag parity&lt;br /&gt;
			elif f2 == ncol:&lt;br /&gt;
				restored(tab, nrow, ncol, f1)&lt;br /&gt;
				compute_parity(tab, nrow, ncol)&lt;br /&gt;
				pass&lt;br /&gt;
# missing two data columns&lt;br /&gt;
			else:&lt;br /&gt;
				restore2(tab, nrow, ncol, f1, f2)&lt;br /&gt;
		print_table(tab, nrow, ncol + 2)&lt;br /&gt;
		if tab == savetab:&lt;br /&gt;
			print('OK')&lt;br /&gt;
		else:&lt;br /&gt;
			print('ERR!!!!')&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
	main()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Esperimenti_con_RAID6_(2026)&amp;diff=3104</id>
		<title>Esperimenti con RAID6 (2026)</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Esperimenti_con_RAID6_(2026)&amp;diff=3104"/>
		<updated>2026-03-17T12:05:48Z</updated>

		<summary type="html">&lt;p&gt;Renzo: Created page with &amp;quot;Il codice python che segue consente di provare sperimentalemnte le metodologie di fault tolerance descritte nell'articolo &amp;quot;EVENODD: An Optimal Scheme for Tolerating Double Dis...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Il codice python che segue consente di provare sperimentalemnte le metodologie di fault tolerance descritte nell'articolo &amp;quot;EVENODD: An Optimal Scheme for Tolerating Double Disk Failures&amp;quot; di Mario Blaurn et al.&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2025/26&amp;diff=3103</id>
		<title>Esempi, Esercizi ed Esperimenti 2025/26</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2025/26&amp;diff=3103"/>
		<updated>2026-03-17T12:05:00Z</updated>

		<summary type="html">&lt;p&gt;Renzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[prin_C_ples]]&lt;br /&gt;
* [[Esempi sulla rappresentazione dei dati]]&lt;br /&gt;
* [[Linguaggio C, libreria C, sistema operativo]]&lt;br /&gt;
* [[Esperimenti sugli algoritmi di Dekker e Peterson]]&lt;br /&gt;
* [[Tool per semafori e monitor]]&lt;br /&gt;
* [[Il ''catalogo'' delle System Call]]&lt;br /&gt;
* [[Syscall per file system: equivalenza comandi]]&lt;br /&gt;
* [[fork_vs_exec]]&lt;br /&gt;
* [[Compilazione kernel, busybox e macchine virtuali 2026]]&lt;br /&gt;
* [[Esperimenti con RAID6 (2026)]]&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Compilazione_kernel,_busybox_e_macchine_virtuali_2026&amp;diff=3102</id>
		<title>Compilazione kernel, busybox e macchine virtuali 2026</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Compilazione_kernel,_busybox_e_macchine_virtuali_2026&amp;diff=3102"/>
		<updated>2026-02-20T18:29:27Z</updated>

		<summary type="html">&lt;p&gt;Renzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;questa è una versione commentata dei comandi digitati nella lezione del 26 febbraio 2026&lt;br /&gt;
&lt;br /&gt;
in una directory vuota di una partizione con spazio sufficiente (1G per stare dalla parte dei bottoni) si fa download dei sorgenti del kernel.&lt;br /&gt;
oggi l'ultima versione e' 6.19.3 (sul web www.kernel.org si decide quale versione scaricare) &lt;br /&gt;
  wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.19.3.tar.xz&lt;br /&gt;
&lt;br /&gt;
si scompattano i sorgenti e si entra nella dir scompattata&lt;br /&gt;
  tar xf linux-6.19.3.tar.xz&lt;br /&gt;
  cd linux-6.19.3&lt;br /&gt;
&lt;br /&gt;
Ho preparato un file di configurazione minimale per qemu, potete prenderlo via web. Lo scarico in /tmp:&lt;br /&gt;
  (cd /tmp; wget https://www.cs.unibo.it/~renzo/vsd/config4QEMU.2026.01.01)&lt;br /&gt;
e lo copio come .config nella dir base dei sorgenti del kernel&lt;br /&gt;
  cp /tmp/config4QEMU.2026.01.01 .config&lt;br /&gt;
chiamo menuconfig per configurare il kernel&lt;br /&gt;
  make menuconfig&lt;br /&gt;
potete configurare il kernel (o lasciare tutto invariato, e' stata caricata la cofigurazione minimale)&lt;br /&gt;
alla fine uscite salvando. A questo punto si puo' compilare il kernel. (mettete il numero dei processoti del&lt;br /&gt;
vostro sistema coma parametro -j di make)&lt;br /&gt;
  make -j 8&lt;br /&gt;
A seconda di quante opzioni avete abilitato e quanto potente e' la macchina usata potete prendere un caffe'&lt;br /&gt;
o andare a dormire. Dopo un congruo tempo il kernel sara' pronto)&lt;br /&gt;
&lt;br /&gt;
Spostiamolo il /tmp/vmlinuz&lt;br /&gt;
  cp arch/x86_64/boot/bzImage /tmp/vmlinuz&lt;br /&gt;
  cd ..&lt;br /&gt;
A questo punto possiamo attivare il kernel che partira' regolarmente...&lt;br /&gt;
  qemu-system-x86_64 -kernel /tmp/vmlinuz -monitor stdio&lt;br /&gt;
Ma si blocchera' perche' una volta attivo non sa cosa fare, manca un init da lanciare.&lt;br /&gt;
Possiamo prendere una immagine minimale di file system che contenga init.&lt;br /&gt;
Per esempio una simie immagine puo' essere creata usando busybox (che fara' da solo init, shell e tool&lt;br /&gt;
di utilita')&lt;br /&gt;
&lt;br /&gt;
Scarichiamo e decomprimiamo l'immagine&lt;br /&gt;
  Wget https://www.cs.unibo.it/~renzo/virtualsquare/tutorial_resources/BusyBox-1.21.1-amd64-root_fs.bz2&lt;br /&gt;
  bzip2 -d BusyBox-1.21.1-amd64-root_fs.bz2&lt;br /&gt;
&lt;br /&gt;
Lanciamo la macchina virtuale, ed ora il sistema sara' attivo:&lt;br /&gt;
  qemu-system-x86_64 -hda BusyBox-1.21.1-amd64-root_fs -kernel /tmp/bzImage -append root=/dev/sda -monitor stdio -k en-us -m 1G&lt;br /&gt;
&lt;br /&gt;
Dentro la macchina virtuale potete &amp;quot;gironzolare&amp;quot; a guardare cosa c'e'.&lt;br /&gt;
Da notare : &lt;br /&gt;
  ls -l /bin &lt;br /&gt;
mostra come tutti i comandi siano realizati come link simbolici a busybox.&lt;br /&gt;
  uname -a &lt;br /&gt;
mostra la cersione e la data di compilazione del kernel, potete verificare che e' proprio&lt;br /&gt;
il kernel appena compilato che sta coordinando le attivita; del sistema.&lt;br /&gt;
  poweroff&lt;br /&gt;
spegne la macchina virtuale.&lt;br /&gt;
&lt;br /&gt;
Le macchine virtuali possono operare anche a livello di processo. Qemu per esempio ha comandi distinti per operare come VM di sistema&lt;br /&gt;
(qemu-system-...) e di processo (qemu-...).&lt;br /&gt;
Per fare questa prova facciamo download dei  binari di busybox per diverse architetture:&lt;br /&gt;
  wget https://busybox.net/downloads/binaries/1.21.1/busybox-binaries.tar.bz2&lt;br /&gt;
e decomprimiamo l'archivio&lt;br /&gt;
  tar xf busybox-binaries.tar.bz2&lt;br /&gt;
&lt;br /&gt;
Nella dir busybox ci sono gli eseguibili.&lt;br /&gt;
  cd busybox/&lt;br /&gt;
Quello per la architettura corrente (x86_64 nella macchina usata in aula) funziona&lt;br /&gt;
  ./busybox-x86_64 ls&lt;br /&gt;
Gli altri dorebbero fallire (se non falliscono e' perche' c'e' un automatisco attivo che chiama qemu)&lt;br /&gt;
  ./busybox-mips ls&lt;br /&gt;
Possiamo comunque vedere qemu richiamato in modo esplicito che e' in grado di eseguire il binario busybox-mips (virtualizzando la CPU) ma&lt;br /&gt;
richiama le system call del sistema host.&lt;br /&gt;
  qemu-mips busybox-mips ls&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Compilazione_kernel,_busybox_e_macchine_virtuali_2026&amp;diff=3101</id>
		<title>Compilazione kernel, busybox e macchine virtuali 2026</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Compilazione_kernel,_busybox_e_macchine_virtuali_2026&amp;diff=3101"/>
		<updated>2026-02-20T18:28:01Z</updated>

		<summary type="html">&lt;p&gt;Renzo: Created page with &amp;quot;questa è una versione commentata dei comandi digitati nella lezione del 26 febbraio 2026  in una directory vuota di una partizione con spazio sufficiente (1G per stare dalla...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;questa è una versione commentata dei comandi digitati nella lezione del 26 febbraio 2026&lt;br /&gt;
&lt;br /&gt;
in una directory vuota di una partizione con spazio sufficiente (1G per stare dalla parte dei bottoni) si fa download dei sorgenti del kernel.&lt;br /&gt;
oggi l'ultima versione e' 6.19.3 (sul web www.kernel.org si decide quale versione scaricare) &lt;br /&gt;
  wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.19.3.tar.xz&lt;br /&gt;
&lt;br /&gt;
si scompattano i sorgenti e si entra nella dir scompattata&lt;br /&gt;
  tar xf linux-6.19.3.tar.xz&lt;br /&gt;
  cd linux-6.19.3&lt;br /&gt;
&lt;br /&gt;
Ho preparato un file di configurazione minimale per qemu, potete prenderlo via web. Lo scarico in /tmp:&lt;br /&gt;
  (cd /tmp; wget https://www.cs.unibo.it/~renzo/vsd/config4QEMU.2026.01.01)&lt;br /&gt;
e lo copio come .config nella dir base dei sorgenti del kernel&lt;br /&gt;
  cp /tmp/config4QEMU.2026.01.01 .config&lt;br /&gt;
chiamo menuconfig per configurare il kernel&lt;br /&gt;
  make menuconfig&lt;br /&gt;
potete configurare il kernel (o lasciare tutto invariato, e' stata caricata la cofigurazione minimale)&lt;br /&gt;
alla fine uscite salvando. A questo punto si puo' compilare il kernel. (mettete il numero dei processoti del&lt;br /&gt;
vostro sistema coma parametro -j di make)&lt;br /&gt;
  make -j 8&lt;br /&gt;
A seconda di quante opzioni avete abilitato e quanto potente e' la macchina usata potete prendere un caffe'&lt;br /&gt;
o andare a dormire. Dopo un congruo tempo il kernel sara' pronto)&lt;br /&gt;
&lt;br /&gt;
Spostiamolo il /tmp/vmlinuz&lt;br /&gt;
  cp arch/x86_64/boot/bzImage /tmp/vmlinuz&lt;br /&gt;
  cd ..&lt;br /&gt;
A questo punto possiamo attivare il kernel che partira' regolarmente...&lt;br /&gt;
  qemu-system-x86_64 -kernel /tmp/vmlinuz -monitor stdio&lt;br /&gt;
Ma si blocchera' perche' una volta attivo non sa cosa fare, manca un init da lanciare.&lt;br /&gt;
Possiamo prendere una immagine minimale di file system che contenga init.&lt;br /&gt;
Per esempio una simie immagine puo' essere creata usando busybox (che fara' da solo init, shell e tool&lt;br /&gt;
di utilita')&lt;br /&gt;
&lt;br /&gt;
Scarichiao e decomprimiamo l'immagine&lt;br /&gt;
  wget http://fs.devloop.org.uk/filesystems/BusyBox-1.13.2/BusyBox-1.13.2-amd64-root_fs.bz2&lt;br /&gt;
  bzip2 -d BusyBox-1.13.2-amd64-root_fs.bz2&lt;br /&gt;
&lt;br /&gt;
Lanciamo la macchina virtuale, ed ora il sistema sara' attivo:&lt;br /&gt;
  qemu-system-x86_64 -hda BusyBox-1.13.2-amd64-root_fs -kernel /tmp/bzImage -append root=/dev/sda -monitor stdio -k en-us -m 1G&lt;br /&gt;
&lt;br /&gt;
Dentro la macchina virtuale potete &amp;quot;gironzolare&amp;quot; a guardare cosa c'e'.&lt;br /&gt;
Da notare : &lt;br /&gt;
  ls -l /bin &lt;br /&gt;
mostra come tutti i comandi siano realizati come link simbolici a busybox.&lt;br /&gt;
  uname -a &lt;br /&gt;
mostra la cersione e la data di compilazione del kernel, potete verificare che e' proprio&lt;br /&gt;
il kernel appena compilato che sta coordinando le attivita; del sistema.&lt;br /&gt;
  poweroff&lt;br /&gt;
spegne la macchina virtuale.&lt;br /&gt;
&lt;br /&gt;
Le macchine virtuali possono operare anche a livello di processo. Qemu per esempio ha comandi distinti per operare come VM di sistema&lt;br /&gt;
(qemu-system-...) e di processo (qemu-...).&lt;br /&gt;
Per fare questa prova facciamo download dei  binari di busybox per diverse architetture:&lt;br /&gt;
  wget https://busybox.net/downloads/binaries/1.21.1/busybox-binaries.tar.bz2&lt;br /&gt;
e decomprimiamo l'archivio&lt;br /&gt;
  tar xf busybox-binaries.tar.bz2&lt;br /&gt;
&lt;br /&gt;
Nella dir busybox ci sono gli eseguibili.&lt;br /&gt;
  cd busybox/&lt;br /&gt;
Quello per la architettura corrente (x86_64 nella macchina usata in aula) funziona&lt;br /&gt;
  ./busybox-x86_64 ls&lt;br /&gt;
Gli altri dorebbero fallire (se non falliscono e' perche' c'e' un automatisco attivo che chiama qemu)&lt;br /&gt;
  ./busybox-mips ls&lt;br /&gt;
Possiamo comunque vedere qemu richiamato in modo esplicito che e' in grado di eseguire il binario busybox-mips (virtualizzando la CPU) ma&lt;br /&gt;
richiama le system call del sistema host.&lt;br /&gt;
  qemu-mips busybox-mips ls&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Compilazione_kernel,_busybox_e_macchine_virtuali&amp;diff=3100</id>
		<title>Compilazione kernel, busybox e macchine virtuali</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Compilazione_kernel,_busybox_e_macchine_virtuali&amp;diff=3100"/>
		<updated>2026-02-20T18:27:02Z</updated>

		<summary type="html">&lt;p&gt;Renzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;questa è una versione commentata dei comandi digitati nella lezione del 27 febbario 2019&lt;br /&gt;
&lt;br /&gt;
in una directory vuota di una partizione con spazio sufficiente (1G per stare dalla parte dei bottoni) si fa download dei sorgenti del kernel.&lt;br /&gt;
oggi l'ultima versione e' 5.0-rc8 (sul web www.kernel.org si decide quale versione scaricare) &lt;br /&gt;
  wget https://git.kernel.org/torvalds/t/linux-5.0-rc8.tar.gz&lt;br /&gt;
si scompattano i sorgenti e si entra nella dir scompattata&lt;br /&gt;
  tar xf linux-5.0-rc8.tar.gz &lt;br /&gt;
  cd linux-5.0-rc8&lt;br /&gt;
&lt;br /&gt;
Ho preparato un file di configurazione minimale per qemu, potete prenderlo via web. Lo scarico in /tmp:&lt;br /&gt;
  (cd /tmp; wget http://www.cs.unibo.it/~renzo/vsd/linux-config)&lt;br /&gt;
e lo copio come .config nella dir base dei sorgenti del kernel&lt;br /&gt;
  cp /tmp/linux-config .config&lt;br /&gt;
chiamo menuconfig per configurare il kernel&lt;br /&gt;
  make menuconfig&lt;br /&gt;
potete configurare il kernel (o lasciare tutto invariato, e' stata caricata la cofigurazione minimale)&lt;br /&gt;
alla fine uscite salvando. A questo punto si puo' compilare il kernel.&lt;br /&gt;
  make -j 5&lt;br /&gt;
A seconda di quante opzioni avete abilitato e quanto potente e' la macchina usata potete prendere un caffe'&lt;br /&gt;
o andare a dormire. Dopo un congruo tempo il kernel sara' pronto)&lt;br /&gt;
&lt;br /&gt;
Spostiamolo il /tmp/vmlinuz&lt;br /&gt;
  cp arch/x86_64/boot/bzImage /tmp/vmlinuz&lt;br /&gt;
  cd ..&lt;br /&gt;
A questo punto possiamo attivare il kernel che partira' regolarmente...&lt;br /&gt;
  qemu-system-x86_64 -kernel /tmp/vmlinuz -monitor stdio&lt;br /&gt;
Ma si blocchera' perche' una volta attivo non sa cosa fare, manca un init da lanciare.&lt;br /&gt;
Possiamo prendere una immagine minimale di file system che contenga init.&lt;br /&gt;
Per esempio una simie immagine puo' essere creata usando busybox (che fara' da solo init, shell e tool&lt;br /&gt;
di utilita')&lt;br /&gt;
&lt;br /&gt;
Scarichiao e decomprimiamo l'immagine&lt;br /&gt;
  Wget https://www.cs.unibo.it/~renzo/virtualsquare/tutorial_resources/BusyBox-1.21.1-amd64-root_fs.bz2&lt;br /&gt;
  bzip2 -d BusyBox-1.21.1-amd64-root_fs.bz2&lt;br /&gt;
&lt;br /&gt;
Lanciamo la macchina virtuale, ed ora il sistema sara' attivo:&lt;br /&gt;
  qemu-system-x86_64 -hda BusyBox-1.21.1-amd64-root_fs -kernel /tmp/bzImage -append root=/dev/sda -monitor stdio -k en-us -m 1G&lt;br /&gt;
&lt;br /&gt;
Dentro la macchina virtuale potete &amp;quot;gironzolare&amp;quot; a guardare cosa c'e'.&lt;br /&gt;
Da notare : &lt;br /&gt;
  ls -l /bin &lt;br /&gt;
mostra come tutti i comandi siano realizati come link simbolici a busybox.&lt;br /&gt;
  uname -a &lt;br /&gt;
mostra la cersione e la data di compilazione del kernel, potete verificare che e' proprio&lt;br /&gt;
il kernel appena compilato che sta coordinando le attivita; del sistema.&lt;br /&gt;
  poweroff&lt;br /&gt;
spegne la macchina virtuale.&lt;br /&gt;
&lt;br /&gt;
Le macchine virtuali possono operare anche a livello di processo. Qemu per esempio ha comandi distinti per operare come VM di sistema&lt;br /&gt;
(qemu-system-...) e di processo (qemu-...).&lt;br /&gt;
Per fare questa prova facciamo download dei  binari di busybox per diverse architetture:&lt;br /&gt;
  wget https://busybox.net/downloads/binaries/1.21.1/busybox-binaries.tar.bz2&lt;br /&gt;
e decomprimiamo l'archivio&lt;br /&gt;
  tar xf busybox-binaries.tar.bz2&lt;br /&gt;
&lt;br /&gt;
Nella dir busybox ci sono gli eseguibili.&lt;br /&gt;
  cd busybox/&lt;br /&gt;
Quello per la architettura corrente (x86_64 nella macchina usata in aula) funziona&lt;br /&gt;
  ./busybox-x86_64 ls&lt;br /&gt;
Gli altri dorebbero fallire (se non falliscono e' perche' c'e' un automatisco attivo che chiama qemu)&lt;br /&gt;
  ./busybox-mips ls&lt;br /&gt;
Possiamo comunque vedere qemu richiamato in modo esplicito che e' in grado di eseguire il binario busybox-mips (virtualizzando la CPU) ma&lt;br /&gt;
richiama le system call del sistema host.&lt;br /&gt;
  qemu-mips busybox-mips ls&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2025/26&amp;diff=3099</id>
		<title>Esempi, Esercizi ed Esperimenti 2025/26</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2025/26&amp;diff=3099"/>
		<updated>2026-02-20T18:16:40Z</updated>

		<summary type="html">&lt;p&gt;Renzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[prin_C_ples]]&lt;br /&gt;
* [[Esempi sulla rappresentazione dei dati]]&lt;br /&gt;
* [[Linguaggio C, libreria C, sistema operativo]]&lt;br /&gt;
* [[Esperimenti sugli algoritmi di Dekker e Peterson]]&lt;br /&gt;
* [[Tool per semafori e monitor]]&lt;br /&gt;
* [[Il ''catalogo'' delle System Call]]&lt;br /&gt;
* [[Syscall per file system: equivalenza comandi]]&lt;br /&gt;
* [[fork_vs_exec]]&lt;br /&gt;
* [[Compilazione kernel, busybox e macchine virtuali 2026]]&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Syscall_per_file_system:_equivalenza_comandi&amp;diff=3098</id>
		<title>Syscall per file system: equivalenza comandi</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Syscall_per_file_system:_equivalenza_comandi&amp;diff=3098"/>
		<updated>2025-11-13T10:56:24Z</updated>

		<summary type="html">&lt;p&gt;Renzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
tutte queste syscall restituiscono il valore 0 se l'operazione ha                                                                                                      &lt;br /&gt;
successo o -1 in caso di errore (il tipo di errore lo si legge nella                                                                                                   &lt;br /&gt;
                &amp;quot;variabile&amp;quot; errno).                                                                                                                                    &lt;br /&gt;
Le system call indicate con (R!) possono essere eseguite solo da                                                                                                       &lt;br /&gt;
utenti privilegiati (root)                                                                                                                                             &lt;br /&gt;
&lt;br /&gt;
// change working directory                                                                                                                                            &lt;br /&gt;
chdir(&amp;quot;/home/user&amp;quot;)                      cd /home/user                                                                                                                 &lt;br /&gt;
&lt;br /&gt;
// create directory                                                                                                                                         &lt;br /&gt;
mkdir(&amp;quot;/tmp/mydir&amp;quot;, 0755)                mkdir -m 755 /tmp/mydir                                                                                                       &lt;br /&gt;
&lt;br /&gt;
// remove (empty) directory                                                                                                                                            &lt;br /&gt;
rmdir(&amp;quot;/tmp/olddir&amp;quot;)                     rmdir /tmp/olddir                                                                                                             &lt;br /&gt;
&lt;br /&gt;
// create (hard) link:                                                                                                                                                 &lt;br /&gt;
// add one more name to a file                                                                                                                                         &lt;br /&gt;
link(&amp;quot;vecchio&amp;quot;, &amp;quot;/tmp/nuovo&amp;quot;)            ln vecchio /tmp/nuovo                                                                                                         &lt;br /&gt;
&lt;br /&gt;
// create symbolic link                                                                                                                                                &lt;br /&gt;
symlink(&amp;quot;vecchio&amp;quot;, &amp;quot;/tmp/nuovolink&amp;quot;)        ln -s vecchio /tmp/nuovolink                                                                                                  &lt;br /&gt;
&lt;br /&gt;
// delete one name of a file,                                                                                                                                          &lt;br /&gt;
// removed it when it has no more names                                                                                                                                &lt;br /&gt;
unlink(&amp;quot;/tmp/dacancellare&amp;quot;)              rm /tmp/dacancellare                                                                                                          &lt;br /&gt;
&lt;br /&gt;
// rename a file (atomically!)                                                                                                                                         &lt;br /&gt;
rename(&amp;quot;vecchionome&amp;quot;, &amp;quot;nuovonome&amp;quot;)       rename vecchionome nuovonome                                                                                                  &lt;br /&gt;
&lt;br /&gt;
// get file info (show i-node data)                                                                                                                                    &lt;br /&gt;
struct stat buf;                                                                                                                                &lt;br /&gt;
stat(&amp;quot;/tmp/symlink&amp;quot;, &amp;amp;buf)               stat -f /tmp/symlink                                                                                                          &lt;br /&gt;
/* le info vengono scritte in buf */                                                                                                                                   &lt;br /&gt;
&lt;br /&gt;
// get file info                                                                                                                                &lt;br /&gt;
// (do not follow symbolic links)                                                                                                                                      &lt;br /&gt;
struct stat buf;                                                                                                                                &lt;br /&gt;
lstat(&amp;quot;/tmp/symlink&amp;quot;, &amp;amp;buf)               stat /tmp/symlink                                                                                                            &lt;br /&gt;
/* le info vengono scritte in buf */                                                                                                                                   &lt;br /&gt;
&lt;br /&gt;
// change file permissions                                                                                                                                             &lt;br /&gt;
chmod(&amp;quot;/tmp/miofile&amp;quot;, 0750)               chmod 0750 /tmp/miofile                                                                                                      &lt;br /&gt;
&lt;br /&gt;
// change file ownership (R!)&lt;br /&gt;
chown(&amp;quot;/tmp/miofile&amp;quot;, 1000, 1000)         chown 1000:1000 /tmp/miofile&lt;br /&gt;
/* il primo 1000 è l'user-id (uid),&lt;br /&gt;
         il secondo è il group-id (gid) */&lt;br /&gt;
&lt;br /&gt;
// change file ownership (R!)&lt;br /&gt;
// (do not follow symbolic links)&lt;br /&gt;
lchown(&amp;quot;/tmp/miofile&amp;quot;, 1000, 1000)         chown -P 1000:1000 /tmp/miofile&lt;br /&gt;
/* il primo 1000 è l'user-id (uid),&lt;br /&gt;
         il secondo è il group-id (gid) */&lt;br /&gt;
&lt;br /&gt;
// truncate the contents of a file to a specific length&lt;br /&gt;
truncate(&amp;quot;/tmp/file&amp;quot;, 420)                 truncate -s 420 /tmp/file&lt;br /&gt;
&lt;br /&gt;
// get info of a mounted file system&lt;br /&gt;
struct statfs buf;&lt;br /&gt;
statfs(&amp;quot;/&amp;quot;, &amp;amp;buf)                          statfs /&lt;br /&gt;
/* le info vengono scritte in buf */&lt;br /&gt;
&lt;br /&gt;
// change root directory (R!)&lt;br /&gt;
chroot(&amp;quot;/tmp/newroot&amp;quot;)                     chroot /tmp/newroot&lt;br /&gt;
&lt;br /&gt;
// mount a filesystem (R!)&lt;br /&gt;
mount(&amp;quot;/dev/hda0&amp;quot;, &amp;quot;/mnt&amp;quot;, &amp;quot;ext4&amp;quot;, MS_RDONLY, &amp;quot;&amp;quot;)&lt;br /&gt;
                                           mount -o ro -t ext4 /dev/hda0 /mnt&lt;br /&gt;
&lt;br /&gt;
// umount a filesystem (R!)&lt;br /&gt;
umount(&amp;quot;/mnt&amp;quot;)                             umount /mnt&lt;br /&gt;
&lt;br /&gt;
// create a special file&lt;br /&gt;
mknod(&amp;quot;tmp/myfifo&amp;quot;, S_IFIFO | 0770, 0)     mkfifo -m 770 /tmp/myfifo&lt;br /&gt;
&lt;br /&gt;
// create a special file (device) (R!)&lt;br /&gt;
// major number = 1, minor number = 7&lt;br /&gt;
mknod(&amp;quot;/tmp/mydev&amp;quot;, S_IFCHR | 0660,        mknod -m 660 /tmp/mydev c 1 7&lt;br /&gt;
                makedev(1, 7));&lt;br /&gt;
&lt;br /&gt;
// change access/modification time&lt;br /&gt;
struct utimbuf ut = {time(NULL), time(NULL)};&lt;br /&gt;
utime(&amp;quot;/tmp/myfile&amp;quot;, &amp;amp;ut);&lt;br /&gt;
                                           touch /tm/myfile&lt;br /&gt;
&lt;br /&gt;
------------&lt;br /&gt;
// get the urrent working directory&lt;br /&gt;
// the glibc wrapper function returns&lt;br /&gt;
// a string&lt;br /&gt;
#include &amp;lt;linux/limits.h&amp;gt;                  readlink /tmp/symlink&lt;br /&gt;
...&lt;br /&gt;
char path[PATH_MAX];                       pwd&lt;br /&gt;
if (getcwd(path, PATH_MAX) == NULL)&lt;br /&gt;
        /* error management */ &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// read the value of a symbolic link &lt;br /&gt;
#include &amp;lt;linux/limits.h&amp;gt;                  readlink /tmp/symlink&lt;br /&gt;
...&lt;br /&gt;
char path[PATH_MAX];                      &lt;br /&gt;
ssize_t pathlen = &lt;br /&gt;
  readlink(&amp;quot;/tmp/symlink&amp;quot;, path, PATH_MAX);&lt;br /&gt;
if (pathlen == -1) /* error management */ ;&lt;br /&gt;
else&lt;br /&gt;
        path[pathlen] = 0;&lt;br /&gt;
&lt;br /&gt;
// test if a file exists, or is readable/writable/executable&lt;br /&gt;
// the return value of access is 0=true (success), -1=false (failure)&lt;br /&gt;
// the exit value of the test command is 0=true, 1=false&lt;br /&gt;
&lt;br /&gt;
access(&amp;quot;/tmp/file&amp;quot;, F_OK)   ↔  test -e /tmp/file&lt;br /&gt;
access(&amp;quot;/tmp/file&amp;quot;, R_OK)   ↔  test -r /tmp/file&lt;br /&gt;
access(&amp;quot;/tmp/file&amp;quot;, W_OK)   ↔  test -w /tmp/file&lt;br /&gt;
access(&amp;quot;/tmp/file&amp;quot;, X_OK)   ↔  test -x /tmp/file&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Fork_vs_exec&amp;diff=3097</id>
		<title>Fork vs exec</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Fork_vs_exec&amp;diff=3097"/>
		<updated>2025-11-11T17:04:23Z</updated>

		<summary type="html">&lt;p&gt;Renzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== FORK ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+------------------------------------+-----------+----------------------------------------------+&lt;br /&gt;
| Categoria                          | Ereditato | Dettagli                                     |&lt;br /&gt;
+------------------------------------+-----------+----------------------------------------------+&lt;br /&gt;
| Spazio di memoria (code, dati)     |    Sì     | Copiato (copy-on-write)                      |&lt;br /&gt;
| Registri CPU                       |    Sì     | Copiati, tranne valore di ritorno di fork()  |&lt;br /&gt;
| File descriptor aperti             |    Sì     | Stessi oggetti kernel, stesso offset         |&lt;br /&gt;
| File offset                        |    Sì     | Condiviso tra padre e figlio                 |&lt;br /&gt;
| File status flags (O_APPEND, ecc.) |    Sì     | Condivisi                                    |&lt;br /&gt;
| UID, GID, EUID, EGID               |    Sì     | Copiati                                      |&lt;br /&gt;
| Directory corrente / root          |    Sì     | Copiate                                      |&lt;br /&gt;
| Maschera umask                     |    Sì     | Copiata                                      |&lt;br /&gt;
| Segnali bloccati / maschera segn.  |    Sì     | Copiata (ma segnali pendenti esclusi)        |&lt;br /&gt;
| Handler dei segnali                |    Sì     | Copiati                                      |&lt;br /&gt;
| Memory mapping (mmap)              |    Sì     | MAP_PRIVATE copiati, MAP_SHARED condivisi    |&lt;br /&gt;
| Pipe, socket, FIFO                 |    Sì     | Stesso endpoint kernel                       |&lt;br /&gt;
| flock() locks                      | Parziale  | Condivisi finché entrambi tengono il file    |&lt;br /&gt;
| Variabili d’ambiente               |    Sì     | Copiate                                      |&lt;br /&gt;
| argv / envp                        |    Sì     | Copiati                                      |&lt;br /&gt;
| Process group / sessione           |    Sì     | Copiati                                      |&lt;br /&gt;
| File locks fcntl()                 | Parziale  | Associati al processo, validi finché no exec |&lt;br /&gt;
+------------------------------------+-----------+----------------------------------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cosa non viene ereditato&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+------------------------------------+-----------+----------------------------------------------+&lt;br /&gt;
| Categoria                          | Ereditato | Dettagli                                     |&lt;br /&gt;
+------------------------------------+-----------+----------------------------------------------+&lt;br /&gt;
| PID                                |    No     | Nuovo PID per il figlio                      |&lt;br /&gt;
| Parent PID (getppid)               |    No     | È il PID del padre                           |&lt;br /&gt;
| Segnali pendenti                   |    No     | Non copiati                                  |&lt;br /&gt;
| Timer, alarm                       |    No     | Azzerati                                     |&lt;br /&gt;
| Thread (pthread)                   |    No     | Solo il thread chiamante sopravvive          |&lt;br /&gt;
| Mutex / semafori non-shared        |    No     | Stato indefinito se erano bloccati           |&lt;br /&gt;
| File locks fcntl() dopo exec()     |    No     | Decadono dopo exec()                         |&lt;br /&gt;
| Code di messaggi / IPC System V    |    No     | Non duplicate                                |&lt;br /&gt;
+------------------------------------+-----------+----------------------------------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== EXECVE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+-------------------------------------------+--------------+-------------------------------------------------------------+&lt;br /&gt;
| Categoria                                 | Mantenuto?   | Dettagli                                                    |&lt;br /&gt;
+-------------------------------------------+--------------+-------------------------------------------------------------+&lt;br /&gt;
| PID                                       |   Sì         | Il processo resta lo stesso, cambia solo il programma.      |&lt;br /&gt;
| PPID (Parent PID)                         |   Sì         | Rimane invariato.                                           |&lt;br /&gt;
| UID, GID, EUID, EGID                      |   Sì         | Mantenuti, salvo eseguibili setuid/setgid.                  |&lt;br /&gt;
| File descriptor aperti                    |   Sì/No      | Mantenuti se flag FD_CLOEXEC **non** impostato.             |&lt;br /&gt;
| File offset                               |   Sì         | Conservato per i file descriptor mantenuti.                 |&lt;br /&gt;
| File locks (fcntl/flock)                  |   Parziale   | Mantengono validità per i fd ancora aperti.                 |&lt;br /&gt;
| Signal dispositions: ignorati             |   Sì         | I segnali impostati su SIG_IGN restano tali.                |&lt;br /&gt;
| Signal dispositions: handler custom       |   No         | Resettati a default (SIG_DFL).                              |&lt;br /&gt;
| Signal mask / pending signals             |   No         | Maschera resettata, pending signals persi.                  |&lt;br /&gt;
| Process group e sessione                  |   Sì         | Invariati.                                                  |&lt;br /&gt;
| Directory corrente                        |   Sì         | Non cambia.                                                 |&lt;br /&gt;
| Root directory (chroot)                   |   Sì         | Non cambia.                                                 |&lt;br /&gt;
| Umask                                     |   Sì         | Invariato.                                                  |&lt;br /&gt;
| Variabili d’ambiente                      |   Da execve  | Rimpiazzate dal nuovo `envp` passato alla execve.           |&lt;br /&gt;
| Argomenti (`argv`)                        |   Da execve  | Impostati dai nuovi parametri.                              |&lt;br /&gt;
| Memory mappings (vecchio programma)       |   No         | Tutto lo spazio di memoria del vecchio programma è distrutto|&lt;br /&gt;
| Thread                                    |   No         | Tutti i thread terminano, resta solo il nuovo programma.    |&lt;br /&gt;
| Pending I/O                               |   No         | Eventuali buffer non flushati nel vecchio proc. si perdono. |&lt;br /&gt;
+-------------------------------------------+-------------+--------------------------------------------------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Fork_vs_exec&amp;diff=3096</id>
		<title>Fork vs exec</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Fork_vs_exec&amp;diff=3096"/>
		<updated>2025-11-11T17:03:40Z</updated>

		<summary type="html">&lt;p&gt;Renzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--- FORK ---&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+------------------------------------+-----------+----------------------------------------------+&lt;br /&gt;
| Categoria                          | Ereditato | Dettagli                                     |&lt;br /&gt;
+------------------------------------+-----------+----------------------------------------------+&lt;br /&gt;
| Spazio di memoria (code, dati)     |    Sì     | Copiato (copy-on-write)                      |&lt;br /&gt;
| Registri CPU                       |    Sì     | Copiati, tranne valore di ritorno di fork()  |&lt;br /&gt;
| File descriptor aperti             |    Sì     | Stessi oggetti kernel, stesso offset         |&lt;br /&gt;
| File offset                        |    Sì     | Condiviso tra padre e figlio                 |&lt;br /&gt;
| File status flags (O_APPEND, ecc.) |    Sì     | Condivisi                                    |&lt;br /&gt;
| UID, GID, EUID, EGID               |    Sì     | Copiati                                      |&lt;br /&gt;
| Directory corrente / root          |    Sì     | Copiate                                      |&lt;br /&gt;
| Maschera umask                     |    Sì     | Copiata                                      |&lt;br /&gt;
| Segnali bloccati / maschera segn.  |    Sì     | Copiata (ma segnali pendenti esclusi)        |&lt;br /&gt;
| Handler dei segnali                |    Sì     | Copiati                                      |&lt;br /&gt;
| Memory mapping (mmap)              |    Sì     | MAP_PRIVATE copiati, MAP_SHARED condivisi    |&lt;br /&gt;
| Pipe, socket, FIFO                 |    Sì     | Stesso endpoint kernel                       |&lt;br /&gt;
| flock() locks                      | Parziale  | Condivisi finché entrambi tengono il file    |&lt;br /&gt;
| Variabili d’ambiente               |    Sì     | Copiate                                      |&lt;br /&gt;
| argv / envp                        |    Sì     | Copiati                                      |&lt;br /&gt;
| Process group / sessione           |    Sì     | Copiati                                      |&lt;br /&gt;
| File locks fcntl()                 | Parziale  | Associati al processo, validi finché no exec |&lt;br /&gt;
+------------------------------------+-----------+----------------------------------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cosa non viene ereditato&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+------------------------------------+-----------+----------------------------------------------+&lt;br /&gt;
| Categoria                          | Ereditato | Dettagli                                     |&lt;br /&gt;
+------------------------------------+-----------+----------------------------------------------+&lt;br /&gt;
| PID                                |    No     | Nuovo PID per il figlio                      |&lt;br /&gt;
| Parent PID (getppid)               |    No     | È il PID del padre                           |&lt;br /&gt;
| Segnali pendenti                   |    No     | Non copiati                                  |&lt;br /&gt;
| Timer, alarm                       |    No     | Azzerati                                     |&lt;br /&gt;
| Thread (pthread)                   |    No     | Solo il thread chiamante sopravvive          |&lt;br /&gt;
| Mutex / semafori non-shared        |    No     | Stato indefinito se erano bloccati           |&lt;br /&gt;
| File locks fcntl() dopo exec()     |    No     | Decadono dopo exec()                         |&lt;br /&gt;
| Code di messaggi / IPC System V    |    No     | Non duplicate                                |&lt;br /&gt;
+------------------------------------+-----------+----------------------------------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--- EXECVE ---&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+-------------------------------------------+--------------+-------------------------------------------------------------+&lt;br /&gt;
| Categoria                                 | Mantenuto?   | Dettagli                                                    |&lt;br /&gt;
+-------------------------------------------+--------------+-------------------------------------------------------------+&lt;br /&gt;
| PID                                       |   Sì         | Il processo resta lo stesso, cambia solo il programma.      |&lt;br /&gt;
| PPID (Parent PID)                         |   Sì         | Rimane invariato.                                           |&lt;br /&gt;
| UID, GID, EUID, EGID                      |   Sì         | Mantenuti, salvo eseguibili setuid/setgid.                  |&lt;br /&gt;
| File descriptor aperti                    |   Sì/No      | Mantenuti se flag FD_CLOEXEC **non** impostato.             |&lt;br /&gt;
| File offset                               |   Sì         | Conservato per i file descriptor mantenuti.                 |&lt;br /&gt;
| File locks (fcntl/flock)                  |   Parziale   | Mantengono validità per i fd ancora aperti.                 |&lt;br /&gt;
| Signal dispositions: ignorati             |   Sì         | I segnali impostati su SIG_IGN restano tali.                |&lt;br /&gt;
| Signal dispositions: handler custom       |   No         | Resettati a default (SIG_DFL).                              |&lt;br /&gt;
| Signal mask / pending signals             |   No         | Maschera resettata, pending signals persi.                  |&lt;br /&gt;
| Process group e sessione                  |   Sì         | Invariati.                                                  |&lt;br /&gt;
| Directory corrente                        |   Sì         | Non cambia.                                                 |&lt;br /&gt;
| Root directory (chroot)                   |   Sì         | Non cambia.                                                 |&lt;br /&gt;
| Umask                                     |   Sì         | Invariato.                                                  |&lt;br /&gt;
| Variabili d’ambiente                      |   Da execve  | Rimpiazzate dal nuovo `envp` passato alla execve.           |&lt;br /&gt;
| Argomenti (`argv`)                        |   Da execve  | Impostati dai nuovi parametri.                              |&lt;br /&gt;
| Memory mappings (vecchio programma)       |   No         | Tutto lo spazio di memoria del vecchio programma è distrutto|&lt;br /&gt;
| Thread                                    |   No         | Tutti i thread terminano, resta solo il nuovo programma.    |&lt;br /&gt;
| Pending I/O                               |   No         | Eventuali buffer non flushati nel vecchio proc. si perdono. |&lt;br /&gt;
+-------------------------------------------+-------------+--------------------------------------------------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Fork_vs_exec&amp;diff=3095</id>
		<title>Fork vs exec</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Fork_vs_exec&amp;diff=3095"/>
		<updated>2025-11-11T17:02:45Z</updated>

		<summary type="html">&lt;p&gt;Renzo: Created page with &amp;quot;FORK &amp;lt;pre&amp;gt; +------------------------------------+-----------+----------------------------------------------+ | Categoria                          | Ereditato | Dettagli...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FORK&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+------------------------------------+-----------+----------------------------------------------+&lt;br /&gt;
| Categoria                          | Ereditato | Dettagli                                     |&lt;br /&gt;
+------------------------------------+-----------+----------------------------------------------+&lt;br /&gt;
| Spazio di memoria (code, dati)     |    Sì     | Copiato (copy-on-write)                      |&lt;br /&gt;
| Registri CPU                       |    Sì     | Copiati, tranne valore di ritorno di fork()  |&lt;br /&gt;
| File descriptor aperti             |    Sì     | Stessi oggetti kernel, stesso offset         |&lt;br /&gt;
| File offset                        |    Sì     | Condiviso tra padre e figlio                 |&lt;br /&gt;
| File status flags (O_APPEND, ecc.) |    Sì     | Condivisi                                    |&lt;br /&gt;
| UID, GID, EUID, EGID               |    Sì     | Copiati                                      |&lt;br /&gt;
| Directory corrente / root          |    Sì     | Copiate                                      |&lt;br /&gt;
| Maschera umask                     |    Sì     | Copiata                                      |&lt;br /&gt;
| Segnali bloccati / maschera segn.  |    Sì     | Copiata (ma segnali pendenti esclusi)        |&lt;br /&gt;
| Handler dei segnali                |    Sì     | Copiati                                      |&lt;br /&gt;
| Memory mapping (mmap)              |    Sì     | MAP_PRIVATE copiati, MAP_SHARED condivisi    |&lt;br /&gt;
| Pipe, socket, FIFO                 |    Sì     | Stesso endpoint kernel                       |&lt;br /&gt;
| flock() locks                      | Parziale  | Condivisi finché entrambi tengono il file    |&lt;br /&gt;
| Variabili d’ambiente               |    Sì     | Copiate                                      |&lt;br /&gt;
| argv / envp                        |    Sì     | Copiati                                      |&lt;br /&gt;
| Process group / sessione           |    Sì     | Copiati                                      |&lt;br /&gt;
| File locks fcntl()                 | Parziale  | Associati al processo, validi finché no exec |&lt;br /&gt;
+------------------------------------+-----------+----------------------------------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cosa non viene ereditato&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+------------------------------------+-----------+----------------------------------------------+&lt;br /&gt;
| Categoria                          | Ereditato | Dettagli                                     |&lt;br /&gt;
+------------------------------------+-----------+----------------------------------------------+&lt;br /&gt;
| PID                                |    No     | Nuovo PID per il figlio                      |&lt;br /&gt;
| Parent PID (getppid)               |    No     | È il PID del padre                           |&lt;br /&gt;
| Segnali pendenti                   |    No     | Non copiati                                  |&lt;br /&gt;
| Timer, alarm                       |    No     | Azzerati                                     |&lt;br /&gt;
| Thread (pthread)                   |    No     | Solo il thread chiamante sopravvive          |&lt;br /&gt;
| Mutex / semafori non-shared        |    No     | Stato indefinito se erano bloccati           |&lt;br /&gt;
| File locks fcntl() dopo exec()     |    No     | Decadono dopo exec()                         |&lt;br /&gt;
| Code di messaggi / IPC System V    |    No     | Non duplicate                                |&lt;br /&gt;
+------------------------------------+-----------+----------------------------------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
EXECVE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+-------------------------------------------+--------------+-------------------------------------------------------------+&lt;br /&gt;
| Categoria                                 | Mantenuto?   | Dettagli                                                    |&lt;br /&gt;
+-------------------------------------------+--------------+-------------------------------------------------------------+&lt;br /&gt;
| PID                                       |   Sì         | Il processo resta lo stesso, cambia solo il programma.      |&lt;br /&gt;
| PPID (Parent PID)                         |   Sì         | Rimane invariato.                                           |&lt;br /&gt;
| UID, GID, EUID, EGID                      |   Sì         | Mantenuti, salvo eseguibili setuid/setgid.                  |&lt;br /&gt;
| File descriptor aperti                    |   Sì/No      | Mantenuti se flag FD_CLOEXEC **non** impostato.             |&lt;br /&gt;
| File offset                               |   Sì         | Conservato per i file descriptor mantenuti.                 |&lt;br /&gt;
| File locks (fcntl/flock)                  |   Parziale   | Mantengono validità per i fd ancora aperti.                 |&lt;br /&gt;
| Signal dispositions: ignorati             |   Sì         | I segnali impostati su SIG_IGN restano tali.                |&lt;br /&gt;
| Signal dispositions: handler custom       |   No         | Resettati a default (SIG_DFL).                              |&lt;br /&gt;
| Signal mask / pending signals             |   No         | Maschera resettata, pending signals persi.                  |&lt;br /&gt;
| Process group e sessione                  |   Sì         | Invariati.                                                  |&lt;br /&gt;
| Directory corrente                        |   Sì         | Non cambia.                                                 |&lt;br /&gt;
| Root directory (chroot)                   |   Sì         | Non cambia.                                                 |&lt;br /&gt;
| Umask                                     |   Sì         | Invariato.                                                  |&lt;br /&gt;
| Variabili d’ambiente                      |   Da execve  | Rimpiazzate dal nuovo `envp` passato alla execve.           |&lt;br /&gt;
| Argomenti (`argv`)                        |   Da execve  | Impostati dai nuovi parametri.                              |&lt;br /&gt;
| Memory mappings (vecchio programma)       |   No         | Tutto lo spazio di memoria del vecchio programma è distrutto|&lt;br /&gt;
| Thread                                    |   No         | Tutti i thread terminano, resta solo il nuovo programma.    |&lt;br /&gt;
| Pending I/O                               |   No         | Eventuali buffer non flushati nel vecchio proc. si perdono. |&lt;br /&gt;
+-------------------------------------------+-------------+--------------------------------------------------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Syscall_per_file_system:_equivalenza_comandi&amp;diff=3094</id>
		<title>Syscall per file system: equivalenza comandi</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Syscall_per_file_system:_equivalenza_comandi&amp;diff=3094"/>
		<updated>2025-11-11T16:59:17Z</updated>

		<summary type="html">&lt;p&gt;Renzo: Created page with &amp;quot;&amp;lt;pre&amp;gt; tutte queste syscall restituiscono il valore 0 se l'operazione ha                                                                                                       s...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
tutte queste syscall restituiscono il valore 0 se l'operazione ha                                                                                                      &lt;br /&gt;
successo o -1 in caso di errore (il tipo di errore lo si legge nella                                                                                                   &lt;br /&gt;
                &amp;quot;variabile&amp;quot; errno).                                                                                                                                    &lt;br /&gt;
Le system call indicate con (R!) possono essere eseguite solo da                                                                                                       &lt;br /&gt;
utenti privilegiati (root)                                                                                                                                             &lt;br /&gt;
&lt;br /&gt;
// change working directory                                                                                                                                            &lt;br /&gt;
chdir(&amp;quot;/home/user&amp;quot;)                      cd /home/user                                                                                                                 &lt;br /&gt;
&lt;br /&gt;
// create directory                                                                                                                                         &lt;br /&gt;
mkdir(&amp;quot;/tmp/mydir&amp;quot;, 0755)                mkdir -m 755 /tmp/mydir                                                                                                       &lt;br /&gt;
&lt;br /&gt;
// remove (empty) directory                                                                                                                                            &lt;br /&gt;
rmdir(&amp;quot;/tmp/olddir&amp;quot;)                     rmdir /tmp/olddir                                                                                                             &lt;br /&gt;
&lt;br /&gt;
// create (hard) link:                                                                                                                                                 &lt;br /&gt;
// add one more name to a file                                                                                                                                         &lt;br /&gt;
link(&amp;quot;vecchio&amp;quot;, &amp;quot;/tmp/nuovo&amp;quot;)            ln vecchio /tmp/nuovo                                                                                                         &lt;br /&gt;
&lt;br /&gt;
// create symbolic link                                                                                                                                                &lt;br /&gt;
link(&amp;quot;vecchio&amp;quot;, &amp;quot;/tmp/nuovolink&amp;quot;)        ln -s vecchio /tmp/nuovolink                                                                                                  &lt;br /&gt;
&lt;br /&gt;
// delete one name of a file,                                                                                                                                          &lt;br /&gt;
// removed it when it has no more names                                                                                                                                &lt;br /&gt;
unlink(&amp;quot;/tmp/dacancellare&amp;quot;)              rm /tmp/dacancellare                                                                                                          &lt;br /&gt;
&lt;br /&gt;
// rename a file (atomically!)                                                                                                                                         &lt;br /&gt;
rename(&amp;quot;vecchionome&amp;quot;, &amp;quot;nuovonome&amp;quot;)       rename vecchionome nuovonome                                                                                                  &lt;br /&gt;
&lt;br /&gt;
// get file info (show i-node data)                                                                                                                                    &lt;br /&gt;
struct stat buf;                                                                                                                                &lt;br /&gt;
stat(&amp;quot;/tmp/symlink&amp;quot;, &amp;amp;buf)               stat -f /tmp/symlink                                                                                                          &lt;br /&gt;
/* le info vengono scritte in buf */                                                                                                                                   &lt;br /&gt;
&lt;br /&gt;
// get file info                                                                                                                                &lt;br /&gt;
// (do not follow symbolic links)                                                                                                                                      &lt;br /&gt;
struct stat buf;                                                                                                                                &lt;br /&gt;
lstat(&amp;quot;/tmp/symlink&amp;quot;, &amp;amp;buf)               stat /tmp/symlink                                                                                                            &lt;br /&gt;
/* le info vengono scritte in buf */                                                                                                                                   &lt;br /&gt;
&lt;br /&gt;
// change file permissions                                                                                                                                             &lt;br /&gt;
chmod(&amp;quot;/tmp/miofile&amp;quot;, 0750)               chmod 0750 /tmp/miofile                                                                                                      &lt;br /&gt;
&lt;br /&gt;
// change file ownership (R!)&lt;br /&gt;
chown(&amp;quot;/tmp/miofile&amp;quot;, 1000, 1000)         chown 1000:1000 /tmp/miofile&lt;br /&gt;
/* il primo 1000 è l'user-id (uid),&lt;br /&gt;
         il secondo è il group-id (gid) */&lt;br /&gt;
&lt;br /&gt;
// change file ownership (R!)&lt;br /&gt;
// (do not follow symbolic links)&lt;br /&gt;
lchown(&amp;quot;/tmp/miofile&amp;quot;, 1000, 1000)         chown -P 1000:1000 /tmp/miofile&lt;br /&gt;
/* il primo 1000 è l'user-id (uid),&lt;br /&gt;
         il secondo è il group-id (gid) */&lt;br /&gt;
&lt;br /&gt;
// truncate the contents of a file to a specific length&lt;br /&gt;
truncate(&amp;quot;/tmp/file&amp;quot;, 420)                 truncate -s 420 /tmp/file&lt;br /&gt;
&lt;br /&gt;
// get info of a mounted file system&lt;br /&gt;
struct statfs buf;&lt;br /&gt;
statfs(&amp;quot;/&amp;quot;, &amp;amp;buf)                          statfs /&lt;br /&gt;
/* le info vengono scritte in buf */&lt;br /&gt;
&lt;br /&gt;
// change root directory (R!)&lt;br /&gt;
chroot(&amp;quot;/tmp/newroot&amp;quot;)                     chroot /tmp/newroot&lt;br /&gt;
&lt;br /&gt;
// mount a filesystem (R!)&lt;br /&gt;
mount(&amp;quot;/dev/hda0&amp;quot;, &amp;quot;/mnt&amp;quot;, &amp;quot;ext4&amp;quot;, MS_RDONLY, &amp;quot;&amp;quot;)&lt;br /&gt;
                                           mount -o ro -t ext4 /dev/hda0 /mnt&lt;br /&gt;
&lt;br /&gt;
// umount a filesystem (R!)&lt;br /&gt;
umount(&amp;quot;/mnt&amp;quot;)                             umount /mnt&lt;br /&gt;
&lt;br /&gt;
// create a special file&lt;br /&gt;
mknod(&amp;quot;tmp/myfifo&amp;quot;, S_IFIFO | 0770, 0)     mkfifo -m 770 /tmp/myfifo&lt;br /&gt;
&lt;br /&gt;
// create a special file (device) (R!)&lt;br /&gt;
// major number = 1, minor number = 7&lt;br /&gt;
mknod(&amp;quot;/tmp/mydev&amp;quot;, S_IFCHR | 0660,        mknod -m 660 /tmp/mydev c 1 7&lt;br /&gt;
                makedev(1, 7));&lt;br /&gt;
&lt;br /&gt;
// change access/modification time&lt;br /&gt;
struct utimbuf ut = {time(NULL), time(NULL)};&lt;br /&gt;
utime(&amp;quot;/tmp/myfile&amp;quot;, &amp;amp;ut);&lt;br /&gt;
                                           touch /tm/myfile&lt;br /&gt;
&lt;br /&gt;
------------&lt;br /&gt;
// get the urrent working directory&lt;br /&gt;
// the glibc wrapper function returns&lt;br /&gt;
// a string&lt;br /&gt;
#include &amp;lt;linux/limits.h&amp;gt;                  readlink /tmp/symlink&lt;br /&gt;
...&lt;br /&gt;
char path[PATH_MAX];                       pwd&lt;br /&gt;
if (getcwd(path, PATH_MAX) == NULL)&lt;br /&gt;
        /* error management */ &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// read the value of a symbolic link &lt;br /&gt;
#include &amp;lt;linux/limits.h&amp;gt;                  readlink /tmp/symlink&lt;br /&gt;
...&lt;br /&gt;
char path[PATH_MAX];                      &lt;br /&gt;
ssize_t pathlen = &lt;br /&gt;
  readlink(&amp;quot;/tmp/symlink&amp;quot;, path, PATH_MAX);&lt;br /&gt;
if (pathlen == -1) /* error management */ ;&lt;br /&gt;
else&lt;br /&gt;
        path[pathlen] = 0;&lt;br /&gt;
&lt;br /&gt;
// test if a file exists, or is readable/writable/executable&lt;br /&gt;
// the return value of access is 0=true (success), -1=false (failure)&lt;br /&gt;
// the exit value of the test command is 0=true, 1=false&lt;br /&gt;
&lt;br /&gt;
access(&amp;quot;/tmp/file&amp;quot;, F_OK)   ↔  test -e /tmp/file&lt;br /&gt;
access(&amp;quot;/tmp/file&amp;quot;, R_OK)   ↔  test -r /tmp/file&lt;br /&gt;
access(&amp;quot;/tmp/file&amp;quot;, W_OK)   ↔  test -w /tmp/file&lt;br /&gt;
access(&amp;quot;/tmp/file&amp;quot;, X_OK)   ↔  test -x /tmp/file&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2025/26&amp;diff=3093</id>
		<title>Esempi, Esercizi ed Esperimenti 2025/26</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2025/26&amp;diff=3093"/>
		<updated>2025-11-11T16:57:49Z</updated>

		<summary type="html">&lt;p&gt;Renzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[prin_C_ples]]&lt;br /&gt;
* [[Esempi sulla rappresentazione dei dati]]&lt;br /&gt;
* [[Linguaggio C, libreria C, sistema operativo]]&lt;br /&gt;
* [[Esperimenti sugli algoritmi di Dekker e Peterson]]&lt;br /&gt;
* [[Tool per semafori e monitor]]&lt;br /&gt;
* [[Il ''catalogo'' delle System Call]]&lt;br /&gt;
* [[Syscall per file system: equivalenza comandi]]&lt;br /&gt;
* [[fork_vs_exec]]&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Il_%27%27catalogo%27%27_delle_System_Call&amp;diff=3092</id>
		<title>Il ''catalogo'' delle System Call</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Il_%27%27catalogo%27%27_delle_System_Call&amp;diff=3092"/>
		<updated>2025-11-08T11:01:12Z</updated>

		<summary type="html">&lt;p&gt;Renzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fra parentesi le chiamate raramente usate direttamente, in ''italico'' le chiamate obsolete.&lt;br /&gt;
' indica che l'interfaccia fornita dalla libreria C non coincide con quella della system call.&lt;br /&gt;
&lt;br /&gt;
Per studiare l'evoluzione di UNIX nel tempo, [http://man.cat-v.org/ questo sito web] fornisce un archivio delle pagine di manuale a partire dalle prime versioni.&lt;br /&gt;
&lt;br /&gt;
== gestione processi ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/fork/ fork], [http://www.unix.com/man-page/Linux/2/vfork/ ''vfork'']&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/clone/ (clone')]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/exit/ _exit]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/wait/ wait], [http://www.unix.com/man-page/Linux/2/waitpid/ waitpid], [http://www.unix.com/man-page/Linux/2/wait3/ wait3], [http://www.unix.com/man-page/Linux/2/wait4/ wait4]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/nice/ nice]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/getpriority/ getpriority], [http://www.unix.com/man-page/Linux/2/setpriority/ setpriority]&lt;br /&gt;
&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/getpid/ getpid], [http://www.unix.com/man-page/Linux/2/getppid/ getppid]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/getpgid/ getpgid], [http://www.unix.com/man-page/Linux/2/setpgid/ setpgid]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/getsid/ getsid]&lt;br /&gt;
&lt;br /&gt;
== gestione file ==&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/open/ open], [http://www.unix.com/man-page/Linux/2/creat/ ''creat''], [http://www.unix.com/man-page/Linux/2/openat/ openat]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/read/ read], [http://www.unix.com/man-page/Linux/2/write/ write]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/readv/ readv], [http://www.unix.com/man-page/Linux/2/writev/ writev]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/pread/ pread], [http://www.unix.com/man-page/Linux/2/pwrite/ pwrite]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/lseek/ lseek]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/close/ close]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/fcntl/ fcntl]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/ioctl/ ioctl]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/dup/ dup], [http://www.unix.com/man-page/Linux/2/dup2/ dup2]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/sendfile/ sendfile]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/flock/ flock]&lt;br /&gt;
&lt;br /&gt;
== gestione file system ==&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/chdir/ chdir], [http://www.unix.com/man-page/Linux/2/fchdir/ fchdir]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/mkdir/ mkdir], [http://www.unix.com/man-page/Linux/2/rmdir/ rmdir]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/getcwd/ getcwd']&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/link/ link], [http://www.unix.com/man-page/Linux/2/symlink/ symlink], [http://www.unix.com/man-page/Linux/2/readlink/ readlink], [http://www.unix.com/man-page/Linux/2/unlink/ unlink], [http://www.unix.com/man-page/Linux/2/rename/ rename]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/stat/ stat], [http://www.unix.com/man-page/Linux/2/lstat/ lstat], [http://www.unix.com/man-page/Linux/2/fstat/ fstat]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/mknod/ mknod]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/chown/ chown], [http://www.unix.com/man-page/Linux/2/fchown/ fchown], [http://www.unix.com/man-page/Linux/2/lchown/ lchown]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/chmod/ chmod], [http://www.unix.com/man-page/Linux/2/fchmod/ fchmod], ([http://www.unix.com/man-page/Linux/2/lchmod/ lchmod], non esiste in Linux)&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/access/ access]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/mount/ mount], [http://www.unix.com/man-page/Linux/2/umount/ ''umount''], [http://www.unix.com/man-page/Linux/2/umount2/ umount2]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/sync/ sync]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/utime/ utime]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/umask/ umask]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/chroot/ chroot]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/ustat/ ustat]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/truncate/ truncate], [http://www.unix.com/man-page/Linux/2/ftruncate/ ftruncate]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/statfs/ statfs], [http://www.unix.com/man-page/Linux/2/fstatfs/ fstatfs]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/getfsuid/ getfsuid], [http://www.unix.com/man-page/Linux/2/setfsuid/ setfsuid]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/getdents/ (getdents)]&lt;br /&gt;
&lt;br /&gt;
at calls:&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/mkdirat/ mkdirat], [http://www.unix.com/man-page/Linux/2/mknodat/ mknodat], [http://www.unix.com/man-page/Linux/2/fchownat/ fchownat], [http://www.unix.com/man-page/Linux/2/futimesat/ futimesat], [http://www.unix.com/man-page/Linux/2/fstatat/ fstatat], [http://www.unix.com/man-page/Linux/2// ][http://www.unix.com/man-page/Linux/2/unlinkat/ unlinkat], [http://www.unix.com/man-page/Linux/2/renameat/ renameat], [http://www.unix.com/man-page/Linux/2/linkat/ linkat], [http://www.unix.com/man-page/Linux/2/symlinkat/ symlinkat], [http://www.unix.com/man-page/Linux/2// ][http://www.unix.com/man-page/Linux/2/readlinkat/ readlinkat], [http://www.unix.com/man-page/Linux/2/fchmodat/ fchmodat], [http://www.unix.com/man-page/Linux/2/faccessat/ faccessat]&lt;br /&gt;
&lt;br /&gt;
== gestione utenti ==&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/getuid/ getuid], [http://www.unix.com/man-page/Linux/2/setuid/ setuid]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/getgid/ getgid], [http://www.unix.com/man-page/Linux/2/setgid/ setgid]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/geteuid/ geteuid], [http://www.unix.com/man-page/Linux/2/seteuid/ seteuid]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/getegid/ getegid], [http://www.unix.com/man-page/Linux/2/setegid/ setegid]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/getresuid/ getresuid], [http://www.unix.com/man-page/Linux/2/setresuid/ setresuid]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/getresgid/ getresgid], [http://www.unix.com/man-page/Linux/2/setresgid/ setresgid]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/getgroups/ getgroups], [http://www.unix.com/man-page/Linux/2/setgroups/ setgroups]&lt;br /&gt;
&lt;br /&gt;
== debug/profiling ==&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/ptrace/ ptrace]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/process_vm_readv/ process_vm_readv], [http://www.unix.com/man-page/Linux/2/process_vm_writev/ process_vm_writev]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/times/ times]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/acct/ acct]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/getrlimit/ getrlimit], [http://www.unix.com/man-page/Linux/2/setrlimit/ setrlimit], [http://www.unix.com/man-page/Linux/2/getrusage/ getrusage]&lt;br /&gt;
&lt;br /&gt;
== segnali ==&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/kill/ kill]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/signal/ signal]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/alarm/ alarm]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/pause/ pause]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/sigaction/ sigaction]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/sigprocmask/ sigprocmask]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/sigsuspend/ sigsuspend]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/sigpending/ sigpending]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/getitimer/ getitimer], [http://www.unix.com/man-page/Linux/2/setitimer/ setitimer]&lt;br /&gt;
&lt;br /&gt;
== attesa eventi ==&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/select/ select]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/poll/ poll]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/pselect/ pselect]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/ppoll/ ppoll]&lt;br /&gt;
&lt;br /&gt;
== comunicazione ==&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/pipe/ pipe]&lt;br /&gt;
&lt;br /&gt;
== memoria ==&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/execve/ execve]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/brk/ (brk)]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/mmap/ mmap], [http://www.unix.com/man-page/Linux/2/munmap/ munmap]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/mprotect/ mprotect]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/mremap/ mremap]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/msync/ msync]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/madvise/ madvise]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/getpagesize/ getpagesize]&lt;br /&gt;
&lt;br /&gt;
== tempo ==&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/time/ time]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/gettimeofday/ gettimeofday], [http://www.unix.com/man-page/Linux/2/settimeofday/ settimeofday]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/adjtimex/ adjtimex]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/nanosleep/ nanosleep]&lt;br /&gt;
&lt;br /&gt;
== misc ==&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/gethostname/ gethostname], [http://www.unix.com/man-page/Linux/2/sethostname/ sethostname]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/getdomainname/ getdomainname], [http://www.unix.com/man-page/Linux/2/setdomainname/ setdomainname]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/sched_yield/ sched_yield]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/reboot/ reboot]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/sysinfo/ sysinfo], [http://www.unix.com/man-page/Linux/2/uname/ uname]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/capget/ capget], [http://www.unix.com/man-page/Linux/2/capset/ capset]&lt;br /&gt;
&lt;br /&gt;
== sysV IPC ==&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/shmget/ ''shmget], [http://www.unix.com/man-page/Linux/2/shmat/ shmat], [http://www.unix.com/man-page/Linux/2/shmdt/ shmdt], [http://www.unix.com/man-page/Linux/2/shmctl/ shmctl'']&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/semget/ ''semget], [http://www.unix.com/man-page/Linux/2/semop/ semop], [http://www.unix.com/man-page/Linux/2/semctl/ semctl'']&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/msgget/ ''msgget], [http://www.unix.com/man-page/Linux/2/msgsnd/ msgsnd], [http://www.unix.com/man-page/Linux/2/msgrcv/ msgrcv], [http://www.unix.com/man-page/Linux/2/msgctl/ msgctl'']&lt;br /&gt;
&lt;br /&gt;
== Berkeley socket ==&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/socket/ socket]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/bind/ bind]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/listen/ listen]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/accept/ accept]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/connect/ connect]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/sendto/ sendto], [http://www.unix.com/man-page/Linux/2/recvfrom/ recvfrom]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/sendmsg/ sendmsg], [http://www.unix.com/man-page/Linux/2/recvmsg/ recvmsg]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/sengmmsg/ sengmmsg], [http://www.unix.com/man-page/Linux/2/recvmmsg/ recvmmsg]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/shutdown/ shutdown]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/getsockname/ getsockname], [http://www.unix.com/man-page/Linux/2/getpeername/ getpeername]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/socketpair/ socketpair]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/getsockopt/ getsockopt], [http://www.unix.com/man-page/Linux/2/setsockopt/ setsockopt]&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Il_%27%27catalogo%27%27_delle_System_Call&amp;diff=3091</id>
		<title>Il ''catalogo'' delle System Call</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Il_%27%27catalogo%27%27_delle_System_Call&amp;diff=3091"/>
		<updated>2025-11-08T09:18:01Z</updated>

		<summary type="html">&lt;p&gt;Renzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fra parentesi le chiamate raramente usate direttamente, in ''italico'' le chiamate obsolete.&lt;br /&gt;
' indica che l'interfaccia fornita dalla libreria C non coincide con quella della system call.&lt;br /&gt;
&lt;br /&gt;
Per studiare l'evoluzione di UNIX nel tempo, [http://man.cat-v.org/ questo sito web] fornisce un archivio delle pagine di manuale a partire dalle prime versioni.&lt;br /&gt;
&lt;br /&gt;
== gestione processi ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/fork/ fork], [http://www.unix.com/man-page/Linux/2/vfork/ ''vfork'']&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/clone/ (clone')]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/exit/ _exit]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/wait/ wait], [http://www.unix.com/man-page/Linux/2/waitpid/ waitpid], [http://www.unix.com/man-page/Linux/2/wait3/ wait3], [http://www.unix.com/man-page/Linux/2/wait4/ wait4]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/nice/ nice]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/getpriority/ getpriority], [http://www.unix.com/man-page/Linux/2/setpriority/ setpriority]&lt;br /&gt;
&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/getpid/ getpid], [http://www.unix.com/man-page/Linux/2/getppid/ getppid]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/getpgid/ getpgid], [http://www.unix.com/man-page/Linux/2/setpgid/ setpgid]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/getsid/ getsid]&lt;br /&gt;
&lt;br /&gt;
== gestione file ==&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/open/ open], [http://www.unix.com/man-page/Linux/2/creat/ ''creat''], [http://www.unix.com/man-page/Linux/2/openat/ openat]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/read/ read], [http://www.unix.com/man-page/Linux/2/write/ write]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/readv/ readv], [http://www.unix.com/man-page/Linux/2/writev/ writev]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/pread/ pread], [http://www.unix.com/man-page/Linux/2/pwrite/ pwrite]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/lseek/ lseek]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/close/ close]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/fcntl/ fcntl]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/ioctl/ ioctl]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/dup/ dup], [http://www.unix.com/man-page/Linux/2/dup2/ dup2]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/sendfile/ sendfile]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/flock/ flock]&lt;br /&gt;
&lt;br /&gt;
== gestione file system ==&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/chdir/ chdir], [http://www.unix.com/man-page/Linux/2/fchdir/ fchdir]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/mkdir/ mkdir], [http://www.unix.com/man-page/Linux/2/rmdir/ rmdir]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/getcwd/ getcwd']&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/link/ link], [http://www.unix.com/man-page/Linux/2/symlink/ symlink], [http://www.unix.com/man-page/Linux/2/readlink/ readlink], [http://www.unix.com/man-page/Linux/2/unlink/ unlink], [http://www.unix.com/man-page/Linux/2/rename/ rename]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/stat/ stat], [http://www.unix.com/man-page/Linux/2/lstat/ lstat], [http://www.unix.com/man-page/Linux/2/fstat/ fstat]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/mknod/ mknod]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/chown/ chown], [http://www.unix.com/man-page/Linux/2/fchown/ fchown], [http://www.unix.com/man-page/Linux/2/lchown/ lchown]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/chmod/ chmod], [http://www.unix.com/man-page/Linux/2/fchmod/ fchmod], ([http://www.unix.com/man-page/Linux/2/lchmod/ lchmod], non esiste in Linux)&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/access/ access]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/mount/ mount], [http://www.unix.com/man-page/Linux/2/umount/ ''umount''], [http://www.unix.com/man-page/Linux/2/umount2/ umount2]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/sync/ sync]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/utime/ utime]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/umask/ umask]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/chroot/ chroot]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/ustat/ ustat]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/truncate/ truncate], [http://www.unix.com/man-page/Linux/2/ftruncate/ ftruncate]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/statfs/ statfs], [http://www.unix.com/man-page/Linux/2/fstatfs/ fstatfs]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/getfsuid/ getfsuid], [http://www.unix.com/man-page/Linux/2/setfsuid/ setfsuid]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/getdents/ (getdents)]&lt;br /&gt;
&lt;br /&gt;
at calls:&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/mkdirat/ mkdirat], [http://www.unix.com/man-page/Linux/2/mknodat/ mknodat], [http://www.unix.com/man-page/Linux/2/fchownat/ fchownat], [http://www.unix.com/man-page/Linux/2/futimesat/ futimesat], [http://www.unix.com/man-page/Linux/2/fstatat/ fstatat], [http://www.unix.com/man-page/Linux/2// ][http://www.unix.com/man-page/Linux/2/unlinkat/ unlinkat], [http://www.unix.com/man-page/Linux/2/renameat/ renameat], [http://www.unix.com/man-page/Linux/2/linkat/ linkat], [http://www.unix.com/man-page/Linux/2/symlinkat/ symlinkat], [http://www.unix.com/man-page/Linux/2// ][http://www.unix.com/man-page/Linux/2/readlinkat/ readlinkat], [http://www.unix.com/man-page/Linux/2/fchmodat/ fchmodat], [http://www.unix.com/man-page/Linux/2/faccessat/ faccessat]&lt;br /&gt;
&lt;br /&gt;
== gestione utenti ==&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/getuid/ getuid], [http://www.unix.com/man-page/Linux/2/setuid/ setuid]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/getgid/ getgid], [http://www.unix.com/man-page/Linux/2/setgid/ setgid]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/geteuid/ geteuid], [http://www.unix.com/man-page/Linux/2/seteuid/ seteuid]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/getreiud/ getreiud], [http://www.unix.com/man-page/Linux/2/setreuid/ setreuid]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/getresuid/ getresuid], [http://www.unix.com/man-page/Linux/2/setresuid/ setresuid]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/getresgid/ getresgid], [http://www.unix.com/man-page/Linux/2/setresgid/ setresgid]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/getgroups/ getgroups], [http://www.unix.com/man-page/Linux/2/setgroups/ setgroups]&lt;br /&gt;
&lt;br /&gt;
== debug/profiling ==&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/ptrace/ ptrace]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/process_vm_readv/ process_vm_readv], [http://www.unix.com/man-page/Linux/2/process_vm_writev/ process_vm_writev]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/times/ times]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/acct/ acct]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/getrlimit/ getrlimit], [http://www.unix.com/man-page/Linux/2/setrlimit/ setrlimit], [http://www.unix.com/man-page/Linux/2/getrusage/ getrusage]&lt;br /&gt;
&lt;br /&gt;
== segnali ==&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/kill/ kill]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/signal/ signal]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/alarm/ alarm]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/pause/ pause]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/sigaction/ sigaction]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/sigprocmask/ sigprocmask]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/sigsuspend/ sigsuspend]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/sigpending/ sigpending]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/getitimer/ getitimer], [http://www.unix.com/man-page/Linux/2/setitimer/ setitimer]&lt;br /&gt;
&lt;br /&gt;
== attesa eventi ==&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/select/ select]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/poll/ poll]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/pselect/ pselect]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/ppoll/ ppoll]&lt;br /&gt;
&lt;br /&gt;
== comunicazione ==&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/pipe/ pipe]&lt;br /&gt;
&lt;br /&gt;
== memoria ==&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/execve/ execve]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/brk/ (brk)]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/mmap/ mmap], [http://www.unix.com/man-page/Linux/2/munmap/ munmap]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/mprotect/ mprotect]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/mremap/ mremap]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/msync/ msync]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/madvise/ madvise]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/getpagesize/ getpagesize]&lt;br /&gt;
&lt;br /&gt;
== tempo ==&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/time/ time]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/gettimeofday/ gettimeofday], [http://www.unix.com/man-page/Linux/2/settimeofday/ settimeofday]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/adjtimex/ adjtimex]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/nanosleep/ nanosleep]&lt;br /&gt;
&lt;br /&gt;
== misc ==&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/gethostname/ gethostname], [http://www.unix.com/man-page/Linux/2/sethostname/ sethostname]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/getdomainname/ getdomainname], [http://www.unix.com/man-page/Linux/2/setdomainname/ setdomainname]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/sched_yield/ sched_yield]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/reboot/ reboot]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/sysinfo/ sysinfo], [http://www.unix.com/man-page/Linux/2/uname/ uname]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/capget/ capget], [http://www.unix.com/man-page/Linux/2/capset/ capset]&lt;br /&gt;
&lt;br /&gt;
== sysV IPC ==&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/shmget/ ''shmget], [http://www.unix.com/man-page/Linux/2/shmat/ shmat], [http://www.unix.com/man-page/Linux/2/shmdt/ shmdt], [http://www.unix.com/man-page/Linux/2/shmctl/ shmctl'']&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/semget/ ''semget], [http://www.unix.com/man-page/Linux/2/semop/ semop], [http://www.unix.com/man-page/Linux/2/semctl/ semctl'']&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/msgget/ ''msgget], [http://www.unix.com/man-page/Linux/2/msgsnd/ msgsnd], [http://www.unix.com/man-page/Linux/2/msgrcv/ msgrcv], [http://www.unix.com/man-page/Linux/2/msgctl/ msgctl'']&lt;br /&gt;
&lt;br /&gt;
== Berkeley socket ==&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/socket/ socket]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/bind/ bind]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/listen/ listen]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/accept/ accept]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/connect/ connect]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/sendto/ sendto], [http://www.unix.com/man-page/Linux/2/recvfrom/ recvfrom]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/sendmsg/ sendmsg], [http://www.unix.com/man-page/Linux/2/recvmsg/ recvmsg]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/sengmmsg/ sengmmsg], [http://www.unix.com/man-page/Linux/2/recvmmsg/ recvmmsg]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/shutdown/ shutdown]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/getsockname/ getsockname], [http://www.unix.com/man-page/Linux/2/getpeername/ getpeername]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/socketpair/ socketpair]&lt;br /&gt;
* [http://www.unix.com/man-page/Linux/2/getsockopt/ getsockopt], [http://www.unix.com/man-page/Linux/2/setsockopt/ setsockopt]&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2025/26&amp;diff=3090</id>
		<title>Esempi, Esercizi ed Esperimenti 2025/26</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2025/26&amp;diff=3090"/>
		<updated>2025-10-23T10:02:24Z</updated>

		<summary type="html">&lt;p&gt;Renzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[prin_C_ples]]&lt;br /&gt;
* [[Esempi sulla rappresentazione dei dati]]&lt;br /&gt;
* [[Linguaggio C, libreria C, sistema operativo]]&lt;br /&gt;
* [[Esperimenti sugli algoritmi di Dekker e Peterson]]&lt;br /&gt;
* [[Tool per semafori e monitor]]&lt;br /&gt;
* [[Il ''catalogo'' delle System Call]]&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2025/26&amp;diff=3089</id>
		<title>Esempi, Esercizi ed Esperimenti 2025/26</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2025/26&amp;diff=3089"/>
		<updated>2025-10-14T09:35:53Z</updated>

		<summary type="html">&lt;p&gt;Renzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[prin_C_ples]]&lt;br /&gt;
* [[Esempi sulla rappresentazione dei dati]]&lt;br /&gt;
* [[Linguaggio C, libreria C, sistema operativo]]&lt;br /&gt;
* [[Esperimenti sugli algoritmi di Dekker e Peterson]]&lt;br /&gt;
* [[Tool per semafori e monitor]]&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2025/26&amp;diff=3088</id>
		<title>Esempi, Esercizi ed Esperimenti 2025/26</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2025/26&amp;diff=3088"/>
		<updated>2025-10-01T05:50:29Z</updated>

		<summary type="html">&lt;p&gt;Renzo: Created page with &amp;quot;* prin_C_ples * Esempi sulla rappresentazione dei dati * Linguaggio C, libreria C, sistema operativo * Esperimenti sugli algoritmi di Dekker e Peterson&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[prin_C_ples]]&lt;br /&gt;
* [[Esempi sulla rappresentazione dei dati]]&lt;br /&gt;
* [[Linguaggio C, libreria C, sistema operativo]]&lt;br /&gt;
* [[Esperimenti sugli algoritmi di Dekker e Peterson]]&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Main_Page&amp;diff=3087</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Main_Page&amp;diff=3087"/>
		<updated>2025-09-22T16:39:22Z</updated>

		<summary type="html">&lt;p&gt;Renzo: /* ANNO ACCADEMICO 2024/25 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Questo &amp;amp;egrave; il Wiki del Corso di [http://www.cs.unibo.it/~renzo/so Sistemi Operativi] della LT in Informatica dell'[https://www.unibo.it/it Università di Bologna].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ANNO ACCADEMICO 2025/26 ==&lt;br /&gt;
&lt;br /&gt;
=== Materiale didattico ===&lt;br /&gt;
* [[Documenti 2025/26]]&lt;br /&gt;
* [[Esempi, Esercizi ed Esperimenti 2025/26]]&lt;br /&gt;
* [[Decalogo di Programmazione Concorrente]]: suggerimenti e regole di massima per non scrivere programmi concorrenti sicuramente sbagliati&lt;br /&gt;
&lt;br /&gt;
== ANNI PRECEDENTI ==&lt;br /&gt;
* [[Materiale dell'AA 2024-25]]&lt;br /&gt;
* [[Materiale dell'AA 2023-24]]&lt;br /&gt;
* [[Materiale dell'AA 2022-23]]&lt;br /&gt;
* [[Materiale dell'AA 2021-22]]&lt;br /&gt;
* [[Materiale dell'AA 2020-21]]&lt;br /&gt;
* [[Materiale dell'AA 2019-20]]&lt;br /&gt;
* [[Materiale dell'AA 2018-19]]&lt;br /&gt;
* [[Materiale dell'AA 2017-18]]&lt;br /&gt;
* [[Materiale dell'AA 2016-17]]&lt;br /&gt;
* [[Materiale dell'AA 2015-16]]&lt;br /&gt;
* [[Materiale dell'AA 2014-15]]&lt;br /&gt;
* [[Materiale dell'AA 2013-14]]&lt;br /&gt;
&lt;br /&gt;
== ISCRIZIONE AL WIKI ==&lt;br /&gt;
Quando viene richiesto di risolvere un semplice calcolo aritmetico per creare un account occorre ricordare quanto scritto [[qui]].&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Main_Page&amp;diff=3086</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Main_Page&amp;diff=3086"/>
		<updated>2025-09-22T16:39:08Z</updated>

		<summary type="html">&lt;p&gt;Renzo: /* Materiale didattico */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Questo &amp;amp;egrave; il Wiki del Corso di [http://www.cs.unibo.it/~renzo/so Sistemi Operativi] della LT in Informatica dell'[https://www.unibo.it/it Università di Bologna].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ANNO ACCADEMICO 2024/25 ==&lt;br /&gt;
&lt;br /&gt;
=== Materiale didattico ===&lt;br /&gt;
* [[Documenti 2025/26]]&lt;br /&gt;
* [[Esempi, Esercizi ed Esperimenti 2025/26]]&lt;br /&gt;
* [[Decalogo di Programmazione Concorrente]]: suggerimenti e regole di massima per non scrivere programmi concorrenti sicuramente sbagliati&lt;br /&gt;
&lt;br /&gt;
== ANNI PRECEDENTI ==&lt;br /&gt;
* [[Materiale dell'AA 2024-25]]&lt;br /&gt;
* [[Materiale dell'AA 2023-24]]&lt;br /&gt;
* [[Materiale dell'AA 2022-23]]&lt;br /&gt;
* [[Materiale dell'AA 2021-22]]&lt;br /&gt;
* [[Materiale dell'AA 2020-21]]&lt;br /&gt;
* [[Materiale dell'AA 2019-20]]&lt;br /&gt;
* [[Materiale dell'AA 2018-19]]&lt;br /&gt;
* [[Materiale dell'AA 2017-18]]&lt;br /&gt;
* [[Materiale dell'AA 2016-17]]&lt;br /&gt;
* [[Materiale dell'AA 2015-16]]&lt;br /&gt;
* [[Materiale dell'AA 2014-15]]&lt;br /&gt;
* [[Materiale dell'AA 2013-14]]&lt;br /&gt;
&lt;br /&gt;
== ISCRIZIONE AL WIKI ==&lt;br /&gt;
Quando viene richiesto di risolvere un semplice calcolo aritmetico per creare un account occorre ricordare quanto scritto [[qui]].&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Materiale_dell%27AA_2024-25&amp;diff=3085</id>
		<title>Materiale dell'AA 2024-25</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Materiale_dell%27AA_2024-25&amp;diff=3085"/>
		<updated>2025-09-22T16:38:20Z</updated>

		<summary type="html">&lt;p&gt;Renzo: Created page with &amp;quot;== ANNO ACCADEMICO 2024/25 ==  === Materiale didattico === * Documenti 2024/25 * Esempi, Esercizi ed Esperimenti 2024/25 * Decalogo di Programmazione Concorrente:...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ANNO ACCADEMICO 2024/25 ==&lt;br /&gt;
&lt;br /&gt;
=== Materiale didattico ===&lt;br /&gt;
* [[Documenti 2024/25]]&lt;br /&gt;
* [[Esempi, Esercizi ed Esperimenti 2024/25]]&lt;br /&gt;
* [[Decalogo di Programmazione Concorrente]]: suggerimenti e regole di massima per non scrivere programmi concorrenti sicuramente sbagliati&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Main_Page&amp;diff=3084</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Main_Page&amp;diff=3084"/>
		<updated>2025-09-22T16:37:45Z</updated>

		<summary type="html">&lt;p&gt;Renzo: /* ANNI PRECEDENTI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Questo &amp;amp;egrave; il Wiki del Corso di [http://www.cs.unibo.it/~renzo/so Sistemi Operativi] della LT in Informatica dell'[https://www.unibo.it/it Università di Bologna].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ANNO ACCADEMICO 2024/25 ==&lt;br /&gt;
&lt;br /&gt;
=== Materiale didattico ===&lt;br /&gt;
* [[Documenti 2024/25]]&lt;br /&gt;
* [[Esempi, Esercizi ed Esperimenti 2024/25]]&lt;br /&gt;
* [[Decalogo di Programmazione Concorrente]]: suggerimenti e regole di massima per non scrivere programmi concorrenti sicuramente sbagliati&lt;br /&gt;
&lt;br /&gt;
== ANNI PRECEDENTI ==&lt;br /&gt;
* [[Materiale dell'AA 2024-25]]&lt;br /&gt;
* [[Materiale dell'AA 2023-24]]&lt;br /&gt;
* [[Materiale dell'AA 2022-23]]&lt;br /&gt;
* [[Materiale dell'AA 2021-22]]&lt;br /&gt;
* [[Materiale dell'AA 2020-21]]&lt;br /&gt;
* [[Materiale dell'AA 2019-20]]&lt;br /&gt;
* [[Materiale dell'AA 2018-19]]&lt;br /&gt;
* [[Materiale dell'AA 2017-18]]&lt;br /&gt;
* [[Materiale dell'AA 2016-17]]&lt;br /&gt;
* [[Materiale dell'AA 2015-16]]&lt;br /&gt;
* [[Materiale dell'AA 2014-15]]&lt;br /&gt;
* [[Materiale dell'AA 2013-14]]&lt;br /&gt;
&lt;br /&gt;
== ISCRIZIONE AL WIKI ==&lt;br /&gt;
Quando viene richiesto di risolvere un semplice calcolo aritmetico per creare un account occorre ricordare quanto scritto [[qui]].&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Main_Page&amp;diff=3083</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Main_Page&amp;diff=3083"/>
		<updated>2025-09-22T16:37:27Z</updated>

		<summary type="html">&lt;p&gt;Renzo: /* ANNI PRECEDENTI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Questo &amp;amp;egrave; il Wiki del Corso di [http://www.cs.unibo.it/~renzo/so Sistemi Operativi] della LT in Informatica dell'[https://www.unibo.it/it Università di Bologna].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ANNO ACCADEMICO 2024/25 ==&lt;br /&gt;
&lt;br /&gt;
=== Materiale didattico ===&lt;br /&gt;
* [[Documenti 2024/25]]&lt;br /&gt;
* [[Esempi, Esercizi ed Esperimenti 2024/25]]&lt;br /&gt;
* [[Decalogo di Programmazione Concorrente]]: suggerimenti e regole di massima per non scrivere programmi concorrenti sicuramente sbagliati&lt;br /&gt;
&lt;br /&gt;
== ANNI PRECEDENTI ==&lt;br /&gt;
* [[Materiale dell'AA 2023-24]]&lt;br /&gt;
* [[Materiale dell'AA 2023-24]]&lt;br /&gt;
* [[Materiale dell'AA 2022-23]]&lt;br /&gt;
* [[Materiale dell'AA 2021-22]]&lt;br /&gt;
* [[Materiale dell'AA 2020-21]]&lt;br /&gt;
* [[Materiale dell'AA 2019-20]]&lt;br /&gt;
* [[Materiale dell'AA 2018-19]]&lt;br /&gt;
* [[Materiale dell'AA 2017-18]]&lt;br /&gt;
* [[Materiale dell'AA 2016-17]]&lt;br /&gt;
* [[Materiale dell'AA 2015-16]]&lt;br /&gt;
* [[Materiale dell'AA 2014-15]]&lt;br /&gt;
* [[Materiale dell'AA 2013-14]]&lt;br /&gt;
&lt;br /&gt;
== ISCRIZIONE AL WIKI ==&lt;br /&gt;
Quando viene richiesto di risolvere un semplice calcolo aritmetico per creare un account occorre ricordare quanto scritto [[qui]].&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Esempio_didattico_sul_file_system_ext2&amp;diff=3082</id>
		<title>Esempio didattico sul file system ext2</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Esempio_didattico_sul_file_system_ext2&amp;diff=3082"/>
		<updated>2025-04-22T10:27:00Z</updated>

		<summary type="html">&lt;p&gt;Renzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
truncate -s 128K disk&lt;br /&gt;
/sbin/mkfs.ext2 disk&lt;br /&gt;
hexdump -C disk&lt;br /&gt;
&lt;br /&gt;
https://dondi.lmu.build/share/os/ext2-walkthrough.pdf&lt;br /&gt;
&lt;br /&gt;
mount /tmp/disk /mnt&lt;br /&gt;
ls /mnt&lt;br /&gt;
mkdir /mnt/dir&lt;br /&gt;
echo ciao mare &amp;gt; /mnt/ciao&lt;br /&gt;
ln /mnt/ciao /mnt/dir/ciao2&lt;br /&gt;
echo addio &amp;gt; /mnt/dir/bye&lt;br /&gt;
ln -s /mnt/dir/bye /mnt/symlink&lt;br /&gt;
umount /mnt&lt;br /&gt;
&lt;br /&gt;
bvi&lt;br /&gt;
:set cm=32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aiuti per la lettura del dump esadecimale:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Blocchi:&lt;br /&gt;
00000000 0 -&amp;gt; boot block&lt;br /&gt;
00000400 1 superblocco&lt;br /&gt;
00000800 2 blockgroup&lt;br /&gt;
00000C00 3 BitMap blocchi&lt;br /&gt;
00001000 4 BitMap inode&lt;br /&gt;
00001400 5 area inode (vedi oltre)&lt;br /&gt;
...&lt;br /&gt;
00002400 9 inizio area dati, il blocco 9 e' la directory /&lt;br /&gt;
00002800 A ... fino a 00005400 15 e' la dir  lost+found&lt;br /&gt;
00005c00 17 dati file ciao (detto anche dir/ciao2)&lt;br /&gt;
00006000 18 dati file bye&lt;br /&gt;
0001fc00 7F directory dir&lt;br /&gt;
&lt;br /&gt;
Inode:&lt;br /&gt;
00001400 inode 1 (riservato)&lt;br /&gt;
00001500 inode 2 directory /&lt;br /&gt;
00001600 inode 3 &lt;br /&gt;
00001e00 inode B lost+found&lt;br /&gt;
00001f00 inode C directory dir&lt;br /&gt;
00002000 inode D file ciao (dir/ciao2)&lt;br /&gt;
00002100 inode E file bye&lt;br /&gt;
00002200 inode F symlink&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2024/25&amp;diff=3081</id>
		<title>Esempi, Esercizi ed Esperimenti 2024/25</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2024/25&amp;diff=3081"/>
		<updated>2025-04-22T07:54:40Z</updated>

		<summary type="html">&lt;p&gt;Renzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[prin_C_ples]]&lt;br /&gt;
* [[Esempi sulla rappresentazione dei dati]]&lt;br /&gt;
* [[Linguaggio C, libreria C, sistema operativo]]&lt;br /&gt;
* [[Esperimenti sugli algoritmi di Dekker e Peterson]]&lt;br /&gt;
* [[Esercizi di &amp;quot;lettura&amp;quot; programmi in C]]&lt;br /&gt;
* [[Il ''catalogo'' delle System Call]]&lt;br /&gt;
* [[Fork-exec: cosa viene ereditato e cosa no]]&lt;br /&gt;
* [[Esempi didattici in Python]]&lt;br /&gt;
* [[Esercizi di &amp;quot;lettura&amp;quot; programmi in Python]]&lt;br /&gt;
* [[Esempio didattico su RAID6]]&lt;br /&gt;
* [[Esempio didattico sul file system ext2]]&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Fork-exec:_cosa_viene_ereditato_e_cosa_no&amp;diff=3080</id>
		<title>Fork-exec: cosa viene ereditato e cosa no</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Fork-exec:_cosa_viene_ereditato_e_cosa_no&amp;diff=3080"/>
		<updated>2024-12-11T19:57:16Z</updated>

		<summary type="html">&lt;p&gt;Renzo: Created page with &amp;quot;Proprietà che il processo child eredita dal processo parent: * real uid, real gid, effective uid, effective gid * gids supplementari * id del gruppo di processi * session ID...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Proprietà che il processo child eredita dal processo parent:&lt;br /&gt;
* real uid, real gid, effective uid, effective gid&lt;br /&gt;
* gids supplementari&lt;br /&gt;
* id del gruppo di processi&lt;br /&gt;
* session ID&lt;br /&gt;
* terminale di controllo&lt;br /&gt;
* directory corrente&lt;br /&gt;
* directory root&lt;br /&gt;
* maschera di creazione file (umask)&lt;br /&gt;
* maschera dei segnali&lt;br /&gt;
* flag close-on-exec per tutti i descrittori aperti&lt;br /&gt;
* environment&lt;br /&gt;
&lt;br /&gt;
Proprietà che il processo child non eredita dal processo parent:&lt;br /&gt;
* valore di ritorno di fork&lt;br /&gt;
* process ID&lt;br /&gt;
* process ID del processo parent&lt;br /&gt;
* file locks&lt;br /&gt;
* l’insieme dei segnali in attesa viene svuotato&lt;br /&gt;
&lt;br /&gt;
Cosa viene ereditato da exec?&lt;br /&gt;
* process ID e parent process ID&lt;br /&gt;
* real uid e real gid&lt;br /&gt;
* supplementary gid&lt;br /&gt;
* process group ID&lt;br /&gt;
* session ID&lt;br /&gt;
* terminale di controllo&lt;br /&gt;
* current working directory&lt;br /&gt;
* root directory&lt;br /&gt;
* maschera creazione file (umask)&lt;br /&gt;
* file locks&lt;br /&gt;
* maschera dei segnali&lt;br /&gt;
* segnali in attesa&lt;br /&gt;
&lt;br /&gt;
Cosa non viene ereditato da exec?&lt;br /&gt;
* effective user id e effective group id&lt;br /&gt;
* vengono settati in base ai valori dei bit di protezione&lt;br /&gt;
&lt;br /&gt;
Cosa succede ai file aperti?&lt;br /&gt;
* Dipende dal flag close-on-exec che è associato ad ogni descrittore&lt;br /&gt;
* Se close-on-exec è true, vengono chiusi&lt;br /&gt;
* Altrimenti, vengono lasciati aperti (comportamento di default)&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2024/25&amp;diff=3079</id>
		<title>Esempi, Esercizi ed Esperimenti 2024/25</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2024/25&amp;diff=3079"/>
		<updated>2024-12-11T19:56:05Z</updated>

		<summary type="html">&lt;p&gt;Renzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[prin_C_ples]]&lt;br /&gt;
* [[Esempi sulla rappresentazione dei dati]]&lt;br /&gt;
* [[Linguaggio C, libreria C, sistema operativo]]&lt;br /&gt;
* [[Esperimenti sugli algoritmi di Dekker e Peterson]]&lt;br /&gt;
* [[Esercizi di &amp;quot;lettura&amp;quot; programmi in C]]&lt;br /&gt;
* [[Il ''catalogo'' delle System Call]]&lt;br /&gt;
* [[Fork-exec: cosa viene ereditato e cosa no]]&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2024/25&amp;diff=3078</id>
		<title>Esempi, Esercizi ed Esperimenti 2024/25</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2024/25&amp;diff=3078"/>
		<updated>2024-11-08T10:02:31Z</updated>

		<summary type="html">&lt;p&gt;Renzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[prin_C_ples]]&lt;br /&gt;
* [[Esempi sulla rappresentazione dei dati]]&lt;br /&gt;
* [[Linguaggio C, libreria C, sistema operativo]]&lt;br /&gt;
* [[Esperimenti sugli algoritmi di Dekker e Peterson]]&lt;br /&gt;
* [[Esercizi di &amp;quot;lettura&amp;quot; programmi in C]]&lt;br /&gt;
* [[Il ''catalogo'' delle System Call]]&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2024/25&amp;diff=3077</id>
		<title>Esempi, Esercizi ed Esperimenti 2024/25</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2024/25&amp;diff=3077"/>
		<updated>2024-10-05T10:39:52Z</updated>

		<summary type="html">&lt;p&gt;Renzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[prin_C_ples]]&lt;br /&gt;
* [[Esempi sulla rappresentazione dei dati]]&lt;br /&gt;
* [[Linguaggio C, libreria C, sistema operativo]]&lt;br /&gt;
* [[Esperimenti sugli algoritmi di Dekker e Peterson]]&lt;br /&gt;
* [[Esercizi di &amp;quot;lettura&amp;quot; programmi in C]]&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2024/25&amp;diff=3076</id>
		<title>Esempi, Esercizi ed Esperimenti 2024/25</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2024/25&amp;diff=3076"/>
		<updated>2024-09-15T16:44:46Z</updated>

		<summary type="html">&lt;p&gt;Renzo: Created blank page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Documenti_2024/25&amp;diff=3075</id>
		<title>Documenti 2024/25</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Documenti_2024/25&amp;diff=3075"/>
		<updated>2024-09-15T16:44:31Z</updated>

		<summary type="html">&lt;p&gt;Renzo: Created blank page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Main_Page&amp;diff=3074</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Main_Page&amp;diff=3074"/>
		<updated>2024-09-15T16:44:16Z</updated>

		<summary type="html">&lt;p&gt;Renzo: /* ANNO ACCADEMICO 2023/24 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Questo &amp;amp;egrave; il Wiki del Corso di [http://www.cs.unibo.it/~renzo/so Sistemi Operativi] della LT in Informatica dell'[https://www.unibo.it/it Università di Bologna].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ANNO ACCADEMICO 2024/25 ==&lt;br /&gt;
&lt;br /&gt;
=== Materiale didattico ===&lt;br /&gt;
* [[Documenti 2024/25]]&lt;br /&gt;
* [[Esempi, Esercizi ed Esperimenti 2024/25]]&lt;br /&gt;
* [[Decalogo di Programmazione Concorrente]]: suggerimenti e regole di massima per non scrivere programmi concorrenti sicuramente sbagliati&lt;br /&gt;
&lt;br /&gt;
== ANNI PRECEDENTI ==&lt;br /&gt;
* [[Materiale dell'AA 2023-24]]&lt;br /&gt;
* [[Materiale dell'AA 2022-23]]&lt;br /&gt;
* [[Materiale dell'AA 2021-22]]&lt;br /&gt;
* [[Materiale dell'AA 2020-21]]&lt;br /&gt;
* [[Materiale dell'AA 2019-20]]&lt;br /&gt;
* [[Materiale dell'AA 2018-19]]&lt;br /&gt;
* [[Materiale dell'AA 2017-18]]&lt;br /&gt;
* [[Materiale dell'AA 2016-17]]&lt;br /&gt;
* [[Materiale dell'AA 2015-16]]&lt;br /&gt;
* [[Materiale dell'AA 2014-15]]&lt;br /&gt;
* [[Materiale dell'AA 2013-14]]&lt;br /&gt;
&lt;br /&gt;
== ISCRIZIONE AL WIKI ==&lt;br /&gt;
Quando viene richiesto di risolvere un semplice calcolo aritmetico per creare un account occorre ricordare quanto scritto [[qui]].&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Materiale_dell%27AA_2023-24&amp;diff=3073</id>
		<title>Materiale dell'AA 2023-24</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Materiale_dell%27AA_2023-24&amp;diff=3073"/>
		<updated>2024-09-15T16:43:17Z</updated>

		<summary type="html">&lt;p&gt;Renzo: Created page with &amp;quot;=== Materiale didattico === * Documenti 2023/24 * Esempi, Esercizi ed Esperimenti 2023/24 * Decalogo di Programmazione Concorrente: suggerimenti e regole di massim...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Materiale didattico ===&lt;br /&gt;
* [[Documenti 2023/24]]&lt;br /&gt;
* [[Esempi, Esercizi ed Esperimenti 2023/24]]&lt;br /&gt;
* [[Decalogo di Programmazione Concorrente]]: suggerimenti e regole di massima per non scrivere programmi concorrenti sicuramente sbagliati&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Main_Page&amp;diff=3072</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Main_Page&amp;diff=3072"/>
		<updated>2024-09-15T16:41:08Z</updated>

		<summary type="html">&lt;p&gt;Renzo: /* ANNI PRECEDENTI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Questo &amp;amp;egrave; il Wiki del Corso di [http://www.cs.unibo.it/~renzo/so Sistemi Operativi] della LT in Informatica dell'[https://www.unibo.it/it Università di Bologna].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ANNO ACCADEMICO 2023/24 ==&lt;br /&gt;
&lt;br /&gt;
=== Materiale didattico ===&lt;br /&gt;
* [[Documenti 2023/24]]&lt;br /&gt;
* [[Esempi, Esercizi ed Esperimenti 2023/24]]&lt;br /&gt;
* [[Decalogo di Programmazione Concorrente]]: suggerimenti e regole di massima per non scrivere programmi concorrenti sicuramente sbagliati&lt;br /&gt;
&lt;br /&gt;
== ANNI PRECEDENTI ==&lt;br /&gt;
* [[Materiale dell'AA 2023-24]]&lt;br /&gt;
* [[Materiale dell'AA 2022-23]]&lt;br /&gt;
* [[Materiale dell'AA 2021-22]]&lt;br /&gt;
* [[Materiale dell'AA 2020-21]]&lt;br /&gt;
* [[Materiale dell'AA 2019-20]]&lt;br /&gt;
* [[Materiale dell'AA 2018-19]]&lt;br /&gt;
* [[Materiale dell'AA 2017-18]]&lt;br /&gt;
* [[Materiale dell'AA 2016-17]]&lt;br /&gt;
* [[Materiale dell'AA 2015-16]]&lt;br /&gt;
* [[Materiale dell'AA 2014-15]]&lt;br /&gt;
* [[Materiale dell'AA 2013-14]]&lt;br /&gt;
&lt;br /&gt;
== ISCRIZIONE AL WIKI ==&lt;br /&gt;
Quando viene richiesto di risolvere un semplice calcolo aritmetico per creare un account occorre ricordare quanto scritto [[qui]].&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Esempio_didattico_sul_file_system_ext2&amp;diff=3071</id>
		<title>Esempio didattico sul file system ext2</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Esempio_didattico_sul_file_system_ext2&amp;diff=3071"/>
		<updated>2024-04-11T08:12:28Z</updated>

		<summary type="html">&lt;p&gt;Renzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
truncate -s 128K disk&lt;br /&gt;
/sbin/mkfs.ext2 disk&lt;br /&gt;
hexdump -C disk&lt;br /&gt;
&lt;br /&gt;
https://dondi.lmu.build/share/os/ext2-walkthrough.pdf&lt;br /&gt;
&lt;br /&gt;
mount /tmp/disk /mnt&lt;br /&gt;
ls /mnt&lt;br /&gt;
mkdir /mnt/dir&lt;br /&gt;
echo ciao mare &amp;gt; /mnt/ciao&lt;br /&gt;
ln /mnt/ciao /mnt/dir/ciao2&lt;br /&gt;
echo addio &amp;gt; /mnt/dir/bye&lt;br /&gt;
ln -s /mnt/dir/bye /mnt/symlink&lt;br /&gt;
umount /mnt&lt;br /&gt;
&lt;br /&gt;
bvi&lt;br /&gt;
:set cm=32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Esempio_didattico_sul_file_system_ext2&amp;diff=3070</id>
		<title>Esempio didattico sul file system ext2</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Esempio_didattico_sul_file_system_ext2&amp;diff=3070"/>
		<updated>2024-04-11T08:12:00Z</updated>

		<summary type="html">&lt;p&gt;Renzo: Created page with &amp;quot;truncate -s 128K disk /sbin/mkfs.ext2 disk hexdump -C disk  https://dondi.lmu.build/share/os/ext2-walkthrough.pdf  mount /tmp/disk /mnt ls /mnt mkdir /mnt/dir echo ciao mare &amp;gt;...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;truncate -s 128K disk&lt;br /&gt;
/sbin/mkfs.ext2 disk&lt;br /&gt;
hexdump -C disk&lt;br /&gt;
&lt;br /&gt;
https://dondi.lmu.build/share/os/ext2-walkthrough.pdf&lt;br /&gt;
&lt;br /&gt;
mount /tmp/disk /mnt&lt;br /&gt;
ls /mnt&lt;br /&gt;
mkdir /mnt/dir&lt;br /&gt;
echo ciao mare &amp;gt; /mnt/ciao&lt;br /&gt;
ln /mnt/ciao /mnt/dir/ciao2&lt;br /&gt;
echo addio &amp;gt; /mnt/dir/bye&lt;br /&gt;
ln -s /mnt/dir/bye /mnt/symlink&lt;br /&gt;
umount /mnt&lt;br /&gt;
&lt;br /&gt;
bvi&lt;br /&gt;
:set cm=32&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2023/24&amp;diff=3069</id>
		<title>Esempi, Esercizi ed Esperimenti 2023/24</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2023/24&amp;diff=3069"/>
		<updated>2024-04-11T08:10:07Z</updated>

		<summary type="html">&lt;p&gt;Renzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[prin_C_ples]]&lt;br /&gt;
* [[Esempi sulla rappresentazione dei dati]]&lt;br /&gt;
* [[Linguaggio C, libreria C, sistema operativo]]&lt;br /&gt;
* [[Esperimenti sugli algoritmi di Dekker e Peterson]]&lt;br /&gt;
* [[Esercizi di &amp;quot;lettura&amp;quot; programmi in C]]&lt;br /&gt;
* [[Tool per semafori e monitor]]&lt;br /&gt;
* [http://www.cs.unibo.it/~renzo/so/misc/maketest.tgz maketest.tgz: esempio di uso di make/cmake/autotools]&lt;br /&gt;
* [[Il ''catalogo'' delle System Call]]&lt;br /&gt;
* [[Esperimenti con message passing in C]]&lt;br /&gt;
* [[Esempi didattici in Python]]&lt;br /&gt;
* [[Esercizi di &amp;quot;lettura&amp;quot; programmi in Python]]&lt;br /&gt;
* [[Esempio didattico su RAID6]]&lt;br /&gt;
* [[Esempio didattico sul file system ext2]]&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2023/24&amp;diff=3068</id>
		<title>Esempi, Esercizi ed Esperimenti 2023/24</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2023/24&amp;diff=3068"/>
		<updated>2024-03-20T07:34:30Z</updated>

		<summary type="html">&lt;p&gt;Renzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[prin_C_ples]]&lt;br /&gt;
* [[Esempi sulla rappresentazione dei dati]]&lt;br /&gt;
* [[Linguaggio C, libreria C, sistema operativo]]&lt;br /&gt;
* [[Esperimenti sugli algoritmi di Dekker e Peterson]]&lt;br /&gt;
* [[Esercizi di &amp;quot;lettura&amp;quot; programmi in C]]&lt;br /&gt;
* [[Tool per semafori e monitor]]&lt;br /&gt;
* [http://www.cs.unibo.it/~renzo/so/misc/maketest.tgz maketest.tgz: esempio di uso di make/cmake/autotools]&lt;br /&gt;
* [[Il ''catalogo'' delle System Call]]&lt;br /&gt;
* [[Esperimenti con message passing in C]]&lt;br /&gt;
* [[Esempi didattici in Python]]&lt;br /&gt;
* [[Esercizi di &amp;quot;lettura&amp;quot; programmi in Python]]&lt;br /&gt;
* [[Esempio didattico su RAID6]]&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2023/24&amp;diff=3061</id>
		<title>Esempi, Esercizi ed Esperimenti 2023/24</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2023/24&amp;diff=3061"/>
		<updated>2023-10-31T10:06:40Z</updated>

		<summary type="html">&lt;p&gt;Renzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[prin_C_ples]]&lt;br /&gt;
* [[Esempi sulla rappresentazione dei dati]]&lt;br /&gt;
* [[Linguaggio C, libreria C, sistema operativo]]&lt;br /&gt;
* [[Esperimenti sugli algoritmi di Dekker e Peterson]]&lt;br /&gt;
* [[Esercizi di &amp;quot;lettura&amp;quot; programmi in C]]&lt;br /&gt;
* [[Tool per semafori e monitor]]&lt;br /&gt;
* [http://www.cs.unibo.it/~renzo/so/misc/maketest.tgz maketest.tgz: esempio di uso di make/cmake/autotools]&lt;br /&gt;
* [[Il ''catalogo'' delle System Call]]&lt;br /&gt;
* [[Esperimenti con message passing in C]]&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2023/24&amp;diff=3060</id>
		<title>Esempi, Esercizi ed Esperimenti 2023/24</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2023/24&amp;diff=3060"/>
		<updated>2023-10-31T10:03:20Z</updated>

		<summary type="html">&lt;p&gt;Renzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[prin_C_ples]]&lt;br /&gt;
* [[Esempi sulla rappresentazione dei dati]]&lt;br /&gt;
* [[Linguaggio C, libreria C, sistema operativo]]&lt;br /&gt;
* [[Esperimenti sugli algoritmi di Dekker e Peterson]]&lt;br /&gt;
* [[Esercizi di &amp;quot;lettura&amp;quot; programmi in C]]&lt;br /&gt;
* [[Tool per semafori e monitor]]&lt;br /&gt;
* [http://www.cs.unibo.it/~renzo/so/misc/maketest.tgz maketest.tgz: esempio di uso di make/cmake/autotools]&lt;br /&gt;
* [[Il ''catalogo'' delle System Call]]&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2023/24&amp;diff=3059</id>
		<title>Esempi, Esercizi ed Esperimenti 2023/24</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2023/24&amp;diff=3059"/>
		<updated>2023-10-23T07:26:23Z</updated>

		<summary type="html">&lt;p&gt;Renzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[prin_C_ples]]&lt;br /&gt;
* [[Esempi sulla rappresentazione dei dati]]&lt;br /&gt;
* [[Linguaggio C, libreria C, sistema operativo]]&lt;br /&gt;
* [[Esperimenti sugli algoritmi di Dekker e Peterson]]&lt;br /&gt;
* [[Esercizi di &amp;quot;lettura&amp;quot; programmi in C]]&lt;br /&gt;
* [[Tool per semafori e monitor]]&lt;br /&gt;
* [http://www.cs.unibo.it/~renzo/so/misc/maketest.tgz maketest.tgz: esempio di uso di make/cmake/autotools]&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2023/24&amp;diff=3058</id>
		<title>Esempi, Esercizi ed Esperimenti 2023/24</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2023/24&amp;diff=3058"/>
		<updated>2023-10-09T09:37:13Z</updated>

		<summary type="html">&lt;p&gt;Renzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[prin_C_ples]]&lt;br /&gt;
* [[Esempi sulla rappresentazione dei dati]]&lt;br /&gt;
* [[Linguaggio C, libreria C, sistema operativo]]&lt;br /&gt;
* [[Esperimenti sugli algoritmi di Dekker e Peterson]]&lt;br /&gt;
* [[Esercizi di &amp;quot;lettura&amp;quot; programmi in C]]&lt;br /&gt;
* [[Tool per semafori e monitor]]&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2023/24&amp;diff=3057</id>
		<title>Esempi, Esercizi ed Esperimenti 2023/24</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2023/24&amp;diff=3057"/>
		<updated>2023-10-01T14:25:38Z</updated>

		<summary type="html">&lt;p&gt;Renzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[prin_C_ples]]&lt;br /&gt;
* [[Esempi sulla rappresentazione dei dati]]&lt;br /&gt;
* [[Linguaggio C, libreria C, sistema operativo]]&lt;br /&gt;
* [[Esperimenti sugli algoritmi di Dekker e Peterson]]&lt;br /&gt;
* [[Esercizi di &amp;quot;lettura&amp;quot; programmi in C]]&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2023/24&amp;diff=3056</id>
		<title>Esempi, Esercizi ed Esperimenti 2023/24</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Esempi,_Esercizi_ed_Esperimenti_2023/24&amp;diff=3056"/>
		<updated>2023-09-28T21:12:09Z</updated>

		<summary type="html">&lt;p&gt;Renzo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[prin_C_ples]]&lt;br /&gt;
* [[Esempi sulla rappresentazione dei dati]]&lt;br /&gt;
* [[Linguaggio C, libreria C, sistema operativo]]&lt;br /&gt;
* [[Esperimenti sugli algoritmi di Dekker e Peterson]]&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Linguaggio_C,_libreria_C,_sistema_operativo&amp;diff=3055</id>
		<title>Linguaggio C, libreria C, sistema operativo</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Linguaggio_C,_libreria_C,_sistema_operativo&amp;diff=3055"/>
		<updated>2023-09-23T16:41:51Z</updated>

		<summary type="html">&lt;p&gt;Renzo: Created page with &amp;quot;La history è stata modificata per rendere replicabili gli esperimenti (per quanto possibile) &amp;lt;pre&amp;gt; # hello_world.c e' il solito hello world gcc -o hello_world hello_world.c...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La history è stata modificata per rendere replicabili gli esperimenti (per quanto possibile)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# hello_world.c e' il solito hello world&lt;br /&gt;
gcc -o hello_world hello_world.c &lt;br /&gt;
./hello_world&lt;br /&gt;
# funziona ...  ma gcc non e' il compilatore, invoca l'intera toolchain&lt;br /&gt;
# preprocessore - compilatore - ottimizzatore - assemblatore - linker&lt;br /&gt;
# cosi' si vedono i passi&lt;br /&gt;
  gcc -v -o hello_world hello_world.c &lt;br /&gt;
# ma i comandi hanno tantissimi parametri non si capisce&lt;br /&gt;
# la regola e' che gcc puo' interrompere la catena di tool con un parametro.&lt;br /&gt;
# -E esegue solo il preprocessore (e manda l'output in stdout)&lt;br /&gt;
  $  gcc -E hello_world.c&lt;br /&gt;
# -S genera i ferma dopo il compilatore e l'ottimizzatore, quindi produce assembler&lt;br /&gt;
  $  gcc -S hello_world.c&lt;br /&gt;
# ecco l'assembler&lt;br /&gt;
  $  cat hello_world.s&lt;br /&gt;
# -c non chiama il linker quindi genera il file oggetto .o&lt;br /&gt;
  $  gcc -c hello_world.c&lt;br /&gt;
# cosi' si vedono i tipi dei file&lt;br /&gt;
  $  file hello_world*&lt;br /&gt;
# per completare il percorso di compilazioone a partire da un risultato intermedio&lt;br /&gt;
        basta dare in input un file col suffisso giusto&lt;br /&gt;
# questo genera l'eseguibile a partire dal sogente assembler&lt;br /&gt;
  $  gcc hello_world.s&lt;br /&gt;
# funziona&lt;br /&gt;
  $  ./a.out&lt;br /&gt;
# cancelliamo a.out&lt;br /&gt;
        $  rm a.out&lt;br /&gt;
# questo chiama solo in linker:&lt;br /&gt;
  $  gcc hello_world.o&lt;br /&gt;
  $  ./a.out&lt;br /&gt;
&lt;br /&gt;
######## proviamo a fare a meno della libreria&lt;br /&gt;
42.c contiene:&lt;br /&gt;
        int main() {&lt;br /&gt;
                return 42;&lt;br /&gt;
        }&lt;br /&gt;
########&lt;br /&gt;
  $  gcc -o 42 42.c &lt;br /&gt;
  $  ./42&lt;br /&gt;
#funziona ma sembra non far nulla&lt;br /&gt;
  $  echo $?&lt;br /&gt;
# ecco dove e' finito, viene assegnato a una variabile della shell&lt;br /&gt;
# aggiungiamo 2 righe a 42.c&lt;br /&gt;
        int main() {&lt;br /&gt;
                int i;&lt;br /&gt;
                for (i = 0; i&amp;lt; 1000000000; i++)&lt;br /&gt;
                        ;&lt;br /&gt;
                return 42;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
  $  gcc -o 42 42.c &lt;br /&gt;
  $  ./42&lt;br /&gt;
# ora aspetta un po'.&lt;br /&gt;
  $  gcc -S 42.c&lt;br /&gt;
  $  cat 42.s&lt;br /&gt;
# si vede nell'assembler il loop di attesa&lt;br /&gt;
  $  ls&lt;br /&gt;
# chiediamo all'ottimizzatore di eliminare il codice inutile.&lt;br /&gt;
  $  gcc -O2 -o 42 42.c &lt;br /&gt;
  $  ./42&lt;br /&gt;
# ora e' velocissimo&lt;br /&gt;
  $  gcc -O2 -S 42.c &lt;br /&gt;
  $  cat 42.s&lt;br /&gt;
#infatti nell'assembler e' sparito il loop&lt;br /&gt;
  $  gcc -O2 -S 42.c &lt;br /&gt;
  $  cat 42.s&lt;br /&gt;
# se vogliamo che il compilatore mantenga il loop anche ottimizzando il codice dobbiamo&lt;br /&gt;
# dire che non puo' fare assunzioni sulla variabile i che puo' essere modificata da agenti&lt;br /&gt;
# esterni, fuori dalla portata del codice generato dal compilatore... quindi la variabile i&lt;br /&gt;
# deve essere definita: &amp;quot;volatile int i:&amp;quot;. Se lo si fa:&lt;br /&gt;
  $  gcc -O2 -S 42.c &lt;br /&gt;
  $  cat 42.s&lt;br /&gt;
# ora il loop e' rimasto (ma altre parti con codice inutile sarebbero state ottimizzate,&lt;br /&gt;
# quindi spetta al programmatore dire al compilatore cosa puo' essere ottimizzato e cosa no.&lt;br /&gt;
        $ gcc 42.c&lt;br /&gt;
        $ a.out&lt;br /&gt;
# l'attesa c'e'&lt;br /&gt;
# ora pero' vi faccio vedere che la libreria c'e' anche se non la usiamo.&lt;br /&gt;
# compiliamo in modo statico (senza librerie dinamiche)&lt;br /&gt;
  $  gcc -static 42.c&lt;br /&gt;
        $  ls -l a.out&lt;br /&gt;
# gia' la ampiezza del file fa presagire che non c'e' solo un loop e un return.&lt;br /&gt;
# con nm si vedono i simboli contenuti&lt;br /&gt;
  $  nm a.out&lt;br /&gt;
# infatti ce ne sono tanatissimi compresi printf e scanf che non abbiamo utilizzato.&lt;br /&gt;
# se proviamo a compilare e linkare &amp;quot;a mano&amp;quot;&lt;br /&gt;
  $  gcc -c 42.c&lt;br /&gt;
  $  ld 42.o&lt;br /&gt;
#l'errore che otteniamo e' che manca &amp;quot;_start&amp;quot;. Per Linux il progrmma principale e' _start &lt;br /&gt;
# e non main... la libreria C fra le altre cose implementa uno start che chiama main e&lt;br /&gt;
# quando main ritorna il controllo chiama la system call exit (infatti i processi&lt;br /&gt;
# non muoiono mai di morte naturale, o vengono uccisi o si suicidano).&lt;br /&gt;
# ho preparato un esempio di codice start in assembler:&lt;br /&gt;
  $  cat &amp;gt; crt0r.S&lt;br /&gt;
# o in altro modo generiamo il file crt0r.S col contenuto seguente&lt;br /&gt;
---------------&lt;br /&gt;
.text&lt;br /&gt;
  &lt;br /&gt;
.globl _start&lt;br /&gt;
&lt;br /&gt;
_start: # _start is the entry point known to the linker&lt;br /&gt;
        xor %ebp, %ebp            # effectively RBP := 0, mark the end of stack frames&lt;br /&gt;
        mov (%rsp), %edi          # get argc from the stack (implicitly zero-extended to 64-bit)&lt;br /&gt;
        lea 8(%rsp), %rsi         # take the address of argv from the stack&lt;br /&gt;
        lea 16(%rsp,%rdi,8), %rdx # take the address of envp from the stack&lt;br /&gt;
        xor %eax, %eax            # per ABI and compatibility with icc&lt;br /&gt;
        call main                 # %edi, %rsi, %rdx are the three args (of which first two are C standard) to main&lt;br /&gt;
&lt;br /&gt;
        xor  %rdi, %rdi   # clean rdi&lt;br /&gt;
        mov  %eax, %edi   # copy eax to edi (syscall first arg)&lt;br /&gt;
        mov  $60, %eax    # exit&lt;br /&gt;
        syscall&lt;br /&gt;
---------------&lt;br /&gt;
# cancelliamo a.out&lt;br /&gt;
  $  rm a.out&lt;br /&gt;
# usiamo l'assemblatore per generare l'oggetto&lt;br /&gt;
  $  as -o crt0r.o crt0r.S&lt;br /&gt;
  $  ld -o a.out crt0r.o 42.o&lt;br /&gt;
  $  ./a.out&lt;br /&gt;
  $  echo $?&lt;br /&gt;
# sembra funzionare&lt;br /&gt;
#ora la libc non c'e'&lt;br /&gt;
  $  nm a.out&lt;br /&gt;
# start definisce _start ma ha necessita' (U-ndefined) main&lt;br /&gt;
  $  nm crt0r.o &lt;br /&gt;
# e in 42.o c'e' main&lt;br /&gt;
  $  nm 42.o&lt;br /&gt;
# ora facciamo una prova col file hw6 che contiene:&lt;br /&gt;
--------------------&lt;br /&gt;
long mystrlen(char *s) {   // lunghezza di una stringa&lt;br /&gt;
        long len;&lt;br /&gt;
        for (len = 0; *s != 0; len++)&lt;br /&gt;
                s++;&lt;br /&gt;
        return len;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
long mywrite(char *s) { //stampa una stringa&lt;br /&gt;
        long addr = (long) s; //addr e' l'indirizzo della stringa&lt;br /&gt;
        long len = mystrlen(s); // e len e' la lunghezza&lt;br /&gt;
        register long r_syscallno asm(&amp;quot;rax&amp;quot;) = 1; // mette nel registro rax il numero della syscall 1=write&lt;br /&gt;
                                                  // l'elenco completo in /usr/include/x86_64-linux-gnu/asm/unistd_64.h&lt;br /&gt;
                                                  // mutatis mutandis se usare un'altra architetttura di processore&lt;br /&gt;
        register long r_arg1 asm(&amp;quot;rdi&amp;quot;) = 1;      // da &amp;quot;man 2 write&amp;quot; si vede che il 1' paramentro e' il fd. 1 e' stdout&lt;br /&gt;
        register long r_arg2 asm(&amp;quot;rsi&amp;quot;) = addr;   // secondo parametro l'indirizzo del buffer da mettere in output&lt;br /&gt;
        register long r_arg3 asm(&amp;quot;rdx&amp;quot;) = len;    // terzo parametro e' la lunghezza&lt;br /&gt;
        register long r_retvalue asm(&amp;quot;rax&amp;quot;);      // chiamo r_retvalue il registro rax, dove le syscall mettono il valore di rit.&lt;br /&gt;
        asm(&amp;quot;syscall&amp;quot;);                           // genera la trap per &amp;quot;svegliare&amp;quot; il kernel&lt;br /&gt;
        return r_retvalue;                        // restituisco il valore di ritorno&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void myexit(long value) {                   // termina il chiamante&lt;br /&gt;
        register long r_syscallno asm(&amp;quot;rax&amp;quot;) = 60;  // la ssytem call 60 e' _exit&lt;br /&gt;
        register long r_arg1 asm(&amp;quot;rdi&amp;quot;) = value;   // ed ha un solo parametro: il valore di ritorno&lt;br /&gt;
        asm(&amp;quot;syscall&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void _start(void) {&lt;br /&gt;
        long retvalue;&lt;br /&gt;
        retvalue = mywrite(&amp;quot;hello world\n&amp;quot;); // stampa la famosa stringa&lt;br /&gt;
        myexit(retvalue);                    // e resituisci come exit status il valore di ritorno della write&lt;br /&gt;
                                             // e' il numero dei caratteri stampati (o il codice di erroe in negativo).&lt;br /&gt;
}&lt;br /&gt;
  $  gcc -c hw6.c&lt;br /&gt;
  $  ld hw6.o&lt;br /&gt;
# ora non e' servito nulla&lt;br /&gt;
  $  ./a.out&lt;br /&gt;
  $  echo $?&lt;br /&gt;
# e funziona&lt;br /&gt;
&lt;br /&gt;
# ora facciamo un altro esperimento. scriviamo questo programma che chiamiano noSO.c:&lt;br /&gt;
-----------------&lt;br /&gt;
typedef unsigned char uint8_t;&lt;br /&gt;
#define DDRC (*(volatile uint8_t *) 0x27)&lt;br /&gt;
#define PORTC (*(volatile uint8_t *) 0x28)&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
        volatile int i;&lt;br /&gt;
        DDRC |= 1 &amp;lt;&amp;lt; 5;&lt;br /&gt;
        for (;;) {&lt;br /&gt;
                for (i=0; i &amp;lt; 32767; i++)&lt;br /&gt;
                        ;&lt;br /&gt;
                PORTC ^= 1 &amp;lt;&amp;lt; 5;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
-----------------&lt;br /&gt;
Convertendo interi (0x27 e' il numero 27 esadecimale, cioè 39) in puntatori&lt;br /&gt;
accediamo alle periferiche (memoria o altro) &amp;quot;sparando&amp;quot; sul bus indirizzi ciò che piu' ci piace.&lt;br /&gt;
&lt;br /&gt;
# proviamo a compilarlo&lt;br /&gt;
 $ gcc noSO.c&lt;br /&gt;
 $ ./a.out&lt;br /&gt;
# il risultato e' segmentation fault, perché gli indirizzi non sono legali per un processo in esecuzione in linux.&lt;br /&gt;
# compiliamolo per l'architetture avr atmel/atmega: (occorre il compilatore)&lt;br /&gt;
 $ avr-gcc -mmcu=atmega168 -Os -o noSO noSO.c&lt;br /&gt;
# l'eseguibile ottenurto non e' per intel:&lt;br /&gt;
  $  file noSO&lt;br /&gt;
# generiamo il file .hex (perché l'utility di trasferimento lo vuole così)&lt;br /&gt;
  $ avr-objcopy -O ihex noSO noSO.hex&lt;br /&gt;
# ... carichiamo il file sul microcontrollore atmega168&lt;br /&gt;
        $ avrdude -p m168 -c stk500v2 -P /dev/ttyUSB0 -U flash:w:noSO.hex &lt;br /&gt;
# (occorre il chip, il programmatore ed un circuito quale quello descritto qui:&lt;br /&gt;
# http://tuxgraphics.org/electronics/200904/avr-c-programming.shtml&lt;br /&gt;
&lt;br /&gt;
# il led lampeggia. potere del software.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
</feed>