--- tags: cours, gaby, sys2, ing1 author: Robin 'Pachichi' BOUCHER date: 22/03/2019 title: SYS2 --- ++Inode++: un inode représente un fichier on ne met pas le nom du fichier dans l'inode on y met la taille ++Filesystem++: on va monter un filesystem dans le /root avec ==mount()== qqsoit le filesystem, ça s'utilise de la même façon ==V-tables== (or virtual tables) are how most C++ implementations do ==polymorphism==. For each concrete implementation of a class, there is a table of function pointers to all the virtual methods. A pointer to this table (called the virtual table) exists as a data member in all the objects. When one calls a virtual method, we lookup the object's v-table and call the appropriate derived class method. ```c struct foo { struct foo_ops *ops; }; struct foo_ops { int (*f)(); }; struct foo t; t.ops = func; struct file_operations; /* * operations sur les fichiers: * open * read * write * stat (ou fstat) * mmap * sendfile * close * ioctl * release * * check include/linux/fs.h */ ``` virtual filesystem (VFS): -> filesystem -> namei (pour name inode), c'est cette partie là qui s'occupe de faire le caching -> open => vfs_open -> read => vfs_read stat (ou fstat) Factory (?) read(fd, ++buf++, *82*) <- ++buf++ est une ++dentry \*++ variantes de read: pread && readv Comment changer la sémantique de read() pour que ça ait du sens ? *(début de parenthèses du cours* ```c struct iovec { void *ptr; size_t len; }; ``` *reverse proxy fin de parenthèses du cours)* getdent use sendfile to recreate cp (man sendfile) En C++, pour les functions qui ont `virtual`, on a besoin d'implémenter le destructeur. Pour les shared_ptr -> ref_count pour éviter les types d'erreurs suivantes: * `use after free` * `leak memory` les fichiers de ==devices==, y en a 2 types: * char dev (devices) (utiliser pour faire des terminaux) * block dev (devices) (comme char dev, mais uniquement pour des disques) Major number -> quel est le driver associé au device ? Minor number -> quelle est l'instance du device ?