This shows you the differences between two versions of the page.
so2:laboratoare:lab08 [2018/04/18 00:22] anda.nicolae [Funcția fill_super] |
so2:laboratoare:lab08 [2018/04/18 00:39] (current) anda.nicolae [Resurse utile] |
||
---|---|---|---|
Line 54: | Line 54: | ||
Localizare: | Localizare: | ||
* În cazul sistemelor de fișiere pentru discuri, superblocul are un corespondent în primul bloc al acestora (Filesystem Control Block). | * În cazul sistemelor de fișiere pentru discuri, superblocul are un corespondent în primul bloc al acestora (Filesystem Control Block). | ||
- | * În **VFS**, toate superbloc-urile sistemelor de fișiere sunt reținute într-o listă de structuri [[http://lxr.free-electrons.com/source/include/linux/fs.h?v=4.9#L1338 | struct super_block]] și metodele în [[http://lxr.free-electrons.com/source/include/linux/fs.h?v=4.9#L1786 | struct super_operations ]] | + | * În **VFS**, toate superbloc-urile sistemelor de fișiere sunt reținute într-o listă de structuri [[https://elixir.bootlin.com/linux/v4.15/source/include/linux/fs.h#L1337 | struct super_block]] și metodele în [[https://elixir.bootlin.com/linux/v4.15/source/include/linux/fs.h#L1803 | struct super_operations ]] |
==== inode ==== | ==== inode ==== | ||
Line 67: | Line 67: | ||
<note> | <note> | ||
- | În general, inode-ul nu deține numele fișierului. Numele este reținut de entitatea [[http://lxr.free-electrons.com/source/include/linux/dcache.h?v=4.9#L83 | dentry]]. Astfel, un inode poate avea mai multe nume (hardlink-uri). | + | În general, inode-ul nu deține numele fișierului. Numele este reținut de entitatea [[https://elixir.bootlin.com/linux/v4.15/source/include/linux/dcache.h#L90 | dentry]]. Astfel, un inode poate avea mai multe nume (hardlink-uri). |
</note> | </note> | ||
Localizare: | Localizare: | ||
- | * La fel ca și superblocul, inode-ul are un corespondent pe disc. inode-urile de pe disc sunt, în general, grupate într-o zonă specializată (zonă de inode-uri), separată de zona de blocuri de date; în unele sisteme de fișiere, structurile echivalente inode-urilor sunt răspândite în structura sistemului de fișiere ([[http://lxr.free-electrons.com/source/fs/fat/?v=4.9 | FAT]]); | + | * La fel ca și superblocul, inode-ul are un corespondent pe disc. inode-urile de pe disc sunt, în general, grupate într-o zonă specializată (zonă de inode-uri), separată de zona de blocuri de date; în unele sisteme de fișiere, structurile echivalente inode-urilor sunt răspândite în structura sistemului de fișiere ([[http://lxr.free-electrons.com/source/fs/fat/?v=4.15 | FAT]]); |
- | * ca entitate **VFS**, inode-ul este reprezentat de structura [[http://lxr.free-electrons.com/source/include/linux/fs.h?v=4.9#L604 | struct inode]] și de operațiile cu aceasta definite în structura [[http://lxr.free-electrons.com/source/include/linux/fs.h?v=4.9#L1736| struct inode_operations]]. | + | * ca entitate **VFS**, inode-ul este reprezentat de structura [[https://elixir.bootlin.com/linux/v4.15/source/include/linux/fs.h#L565 | struct inode]] și de operațiile cu aceasta definite în structura [[https://elixir.bootlin.com/linux/v4.15/source/include/linux/fs.h#L1733| struct inode_operations]]. |
Fiecare inode este în general identificat de un număr. Pe Linux, argumentul ''-i'' la comanda ''ls'' precizează numărului inode-ului asociat fișierului: | Fiecare inode este în general identificat de un număr. Pe Linux, argumentul ''-i'' la comanda ''ls'' precizează numărului inode-ului asociat fișierului: | ||
Line 94: | Line 94: | ||
Localizare: | Localizare: | ||
- | * Structura [[http://lxr.free-electrons.com/source/include/linux/fs.h?v=4.9#L880 | struct file]] reprezintă entitatea VFS asociată, iar structura [[http://lxr.free-electrons.com/source/include/linux/fs.h?v=4.9#L1696 | struct file_operations]] operațiile cu aceasta. | + | * Structura [[https://elixir.bootlin.com/linux/v4.15/source/include/linux/fs.h#L852 | struct file]] reprezintă entitatea VFS asociată, iar structura [[https://elixir.bootlin.com/linux/v4.15/source/include/linux/fs.h#L1692 | struct file_operations]] operațiile cu aceasta. |
==== dentry ==== | ==== dentry ==== | ||
Line 108: | Line 108: | ||
* dentry are un corespondent pe disc, dar corespondența nu este directă deoarece fiecare sistem de fișiere păstrează dentry-urile într-un mod specific | * dentry are un corespondent pe disc, dar corespondența nu este directă deoarece fiecare sistem de fișiere păstrează dentry-urile într-un mod specific | ||
- | * în VFS, entitatea dentry este reprezentată de structura [[http://lxr.free-electrons.com/source/include/linux/dcache.h?v=4.9#L83 | struct dentry]] și de operațiile cu aceasta definite în structura [[http://lxr.free-electrons.com/source/include/linux/dcache.h?v=4.9#L129 | struct dentry_operations]]. | + | * în VFS, entitatea dentry este reprezentată de structura [[https://elixir.bootlin.com/linux/v4.15/source/include/linux/dcache.h#L90 | struct dentry]] și de operațiile cu aceasta definite în structura [[hhttps://elixir.bootlin.com/linux/v4.15/source/include/linux/dcache.h#L136 | struct dentry_operations]]. |
===== Înregistrarea și deînregistrarea sistemelor de fișiere ===== | ===== Înregistrarea și deînregistrarea sistemelor de fișiere ===== | ||
Line 182: | Line 182: | ||
* [[https://elixir.bootlin.com/linux/v4.15/source/include/linux/fs.h#L2152 | mount_pseudo]], o funcție ajutătoare pentru pseudo-sistemele de fișiere (''sockfs'', ''pipefs'', în general sisteme de fișiere care nu pot fi montate) | * [[https://elixir.bootlin.com/linux/v4.15/source/include/linux/fs.h#L2152 | mount_pseudo]], o funcție ajutătoare pentru pseudo-sistemele de fișiere (''sockfs'', ''pipefs'', în general sisteme de fișiere care nu pot fi montate) | ||
- | Aceste funcții primesc ca parametru un pointer spre o funcție [[http://lxr.free-electrons.com/source/security/inode.c?v=4.9#L28 | fill_super]] care va fi apelată după inițializarea superblocului pentru terminarea inițializării acestuia de către driver. Un exemplu de o astfel de funcție găsiți în [[#functia_fill_super |secțiunea fill_super]]. | + | Aceste funcții primesc ca parametru un pointer spre o funcție [[https://elixir.bootlin.com/linux/v4.15/source/security/inode.c#L42 | fill_super]] care va fi apelată după inițializarea superblocului pentru terminarea inițializării acestuia de către driver. Un exemplu de o astfel de funcție găsiți în [[#functia_fill_super |secțiunea fill_super]]. |
La demontare nucleul apelează [[https://elixir.bootlin.com/linux/v4.15/source/include/linux/fs.h#L2081 | kill_sb]], care face operații de tip cleanup și apelează una din funcțiile: | La demontare nucleul apelează [[https://elixir.bootlin.com/linux/v4.15/source/include/linux/fs.h#L2081 | kill_sb]], care face operații de tip cleanup și apelează una din funcțiile: | ||
Line 372: | Line 372: | ||
- [[http://lxr.free-electrons.com/source/Documentation/filesystems/vfs.txt|Documentation/filesystems/vfs.txt]] | - [[http://lxr.free-electrons.com/source/Documentation/filesystems/vfs.txt|Documentation/filesystems/vfs.txt]] | ||
- [[http://lxr.free-electrons.com/source/fs/|Sursele sistemelor de fișiere]] | - [[http://lxr.free-electrons.com/source/fs/|Sursele sistemelor de fișiere]] | ||
- | * [[http://lxr.free-electrons.com/source/fs/proc/?v=4.9 | procfs]] (//Process File System//) - [[http://lxr.free-electrons.com/source/fs/proc/?v=4.9|sursele sistemului de fișiere procfs]] și [[http://lxr.free-electrons.com/source/Documentation/filesystems/proc.txt?v=4.9|documentația]] | + | * [[http://lxr.free-electrons.com/source/fs/proc/?v=4.15 | procfs]] (//Process File System//) - [[http://lxr.free-electrons.com/source/fs/proc/?v=4.15|sursele sistemului de fișiere procfs]] și [[http://lxr.free-electrons.com/source/Documentation/filesystems/proc.txt?v=4.15|documentația]] |
- | * [[http://lxr.free-electrons.com/source/fs/ramfs/?v=4.9 | ramfs]] (//Random Access Memory Filing System//) - [[http://lxr.free-electrons.com/source/fs/ramfs/?v=4.9|sursele sistemului de fișiere ramfs]] și [[http://lxr.free-electrons.com/source/Documentation/filesystems/ramfs-rootfs-initramfs.txt?v=4.9|documentația]] | + | * [[http://lxr.free-electrons.com/source/fs/ramfs/?v=4.15 | ramfs]] (//Random Access Memory Filing System//) - [[http://lxr.free-electrons.com/source/fs/ramfs/?v=4.15|sursele sistemului de fișiere ramfs]] și [[http://lxr.free-electrons.com/source/Documentation/filesystems/ramfs-rootfs-initramfs.txt?v=4.15|documentația]] |
- | * [[http://en.wikipedia.org/wiki/Romfs|romfs]] (//Read-Only Memory File System//) - [[http://lxr.free-electrons.com/source/fs/romfs/?v=4.9|sursele sistemului de fișiere romfs]] și [[http://lxr.free-electrons.com/source/Documentation/filesystems/romfs.txt?v=4.9|documentația]] | + | * [[http://en.wikipedia.org/wiki/Romfs|romfs]] (//Read-Only Memory File System//) - [[http://lxr.free-electrons.com/source/fs/romfs/?v=4.15|sursele sistemului de fișiere romfs]] și [[http://lxr.free-electrons.com/source/Documentation/filesystems/romfs.txt?v=4.15|documentația]] |
- | * [[http://lxr.free-electrons.com/source/fs/minix/?v=4.9 | minix]] - [[http://lxr.free-electrons.com/source/fs/minix/?v=4.9|sursele sistemului de fișiere minix]] și informații: [[http://www.minix3.org/index.html|Minix Homepage]], Operating Systems Design and Implementation, Third Edition - Chapter 5. File Systems | + | * [[http://lxr.free-electrons.com/source/fs/minix/?v=4.15 | minix]] - [[http://lxr.free-electrons.com/source/fs/minix/?v=4.15|sursele sistemului de fișiere minix]] și informații: [[http://www.minix3.org/index.html|Minix Homepage]], Operating Systems Design and Implementation, Third Edition - Chapter 5. File Systems |
- | * [[http://en.wikipedia.org/wiki/Boot_File_System|bfs]] (//UnixWare Boot FileSystem//)- [[http://lxr.free-electrons.com/source/fs/bfs/?v=4.9|sursele sistemului de fișiere bfs]], [[http://lxr.free-electrons.com/source/Documentation/filesystems/bfs.txt|documentația]] și informații: [[http://www.nondot.org/sabre/os/files/FileSystems/bfs-structure.html|The BFS filesystem structure]], [[http://tldp.org/LDP/lki/lki-3.html#ss3.7|Linux Kernel 2.4 Internals - 3.7. Example Disk Filesystem: BFS]] | + | * [[http://en.wikipedia.org/wiki/Boot_File_System|bfs]] (//UnixWare Boot FileSystem//)- [[http://lxr.free-electrons.com/source/fs/bfs/?v=4.15|sursele sistemului de fișiere bfs]], [[http://lxr.free-electrons.com/source/Documentation/filesystems/bfs.txt|documentația]] și informații: [[http://www.nondot.org/sabre/os/files/FileSystems/bfs-structure.html|The BFS filesystem structure]], [[http://tldp.org/LDP/lki/lki-3.html#ss3.7|Linux Kernel 2.4 Internals - 3.7. Example Disk Filesystem: BFS]] |