TUGAS IF-3191 SISTEM OPERASI LINUX FILE MANAGEMENT (DRAFT RESUME) Oleh : Rahadian Bayu P. : 13501003 A Ais Prayogi : 13501035 Gede Serikastawan : 13501063 Program Studi Informatika Departemen Teknik Informatika Institut Teknologi Bandung 2003 Linux File Management 1. File System File System adalah suatu cara operating system untuk menyimpan dan membaca data dari hard disk. Pada file system, disimpan beberapa macam objek. Objek yang tersimpan dalam file system dan terlihat oleh user biasa adalah file. Objek yang tak terlihat antara lain inode dan superblock. File system ada bermacam macam antara lain FAT32, DOS, ext2, ext3, NTFS, dan OS / 2 HPFS. Pada kernel Linux, telah dikembangkan cara untuk berinteraksi antar jenis file system ini. Cara itu adalah Virtual File System (VFS). Dengan VFS, pengguna Linux dapat menggunakan data pada format bermacam-macam file system. VFS menangani semua system call yang ada pada file system. VFS menggunakan Common file tipe sebagai representasi dari data file system. Common file tipe terdiri dari beberapa tipe objek, yaitu : 1. Objek Super-Blok Tipe ini menyimpan informasi yang berhubungan dengan file system yang dimount. Bagi file system yang berbasis disk, objek ini biasanya sesuai dengan filesystem control block yang tersimpan dalam disk. Struktur data super-blok adalah sebagai berikut : Field / Variabel Type Field Deskripsi s_list struct list_ahead Pointer untuk list superblock s_dev kdev_t identifier device s_blocksize unsigned long ukuran block dalam byte s_blocksize_bits unsigned char ukuran block dalam ukuran bit s_lock unsigned char lock flag s_rd_only unsigned char flag read-only s_dirt unsigned char modified (dirty) flag s_type struct file_system_type * tipe file system 1 s_op struct super_operations * metode superblock dq_op struct dquot_operations * metode disk quota s_flags unsigned long mount flags s_magic unsigned long file system magic number s_time unsigned long waktu terakhir superblock berubah s_root struct dentry * objek dentry dari direktori yang ter-mount s_wait struct wait_queue * mount wait queue s_ibasket struct inode * masih dalam pengembangan s_ibasket_ count short int masih dalam pengembangan s_ibasket_ max short int masih dalam pengembangan s_dirty struct list_ahead list inode yang dimodifikasi u union informasi filesystem 2. Objek Inode Tipe ini menyimpan informasi umum tentang file khusus. Bagi file system berbasis disk, objek ini biasanya sesuai dengan file control block yang tersimpan dalam disk. Masing – masing objek inode diasosiasikan dengan nomor inode, yang secara unik mengidentifikasikan file didalam file system. Untuk struktur datanya akan dijelaskan khusus dibagian inode. 3. Objek file Tipe ini menyimpan informasi tentang interaksi antara file yang dibuka dengan proses. Informasi ini eksis hanya di memori kernel selama masing – masing proses mengakses sebuah file. Untuk struktur datanya akan dijelaskan khusus dibagian file. 4. Objek dentry Tipe ini menyimpan informasi tentang linking entri direktori yang sesuai dengan file. Masing – masing file system menyimpan informasi ini dengan cara mereka masing – masing dalam disk. Untuk struktur datanya akan dijelaskan khusus dibagian direktori. 2 File system yang dikenali oleh VFS terbagi dalam 3 jenis yaitu : 1. Disk Based filesystem Tipe file ini memanage space memori yang bisa digunakan pada partisi disk local. Tipe file ini yang lumrah adalah Ext2. Tipe lain yang dikenal dengan baik oleh VFS adalah : 1. File system bagi varian Unix seperti system V dan BSD. 2. Microsoft filesystem seperti MS-DOS, VFAT (Windows 98) dan NTFS (Windows NT). 3. File system ISO96660 CD-ROM. 4. File system lain seperti HPFS (IBM’s, OS/2), HFS (Apple Machintosh), FFS (Amiga’s Fast Filesystem) dan ADFS (Acorn’s machines). 2. Network Filesystem Tipe ini memungkinkan akses yang mudah ke suatu file yang terdapat pada jaringan komputer lain. Beberapa filesystem jenis ini yang dikenal dengan baik oleh VFS adalah : NFS, Coda, AFS (Andrews Filesystem), SMB (Microsoft’s Windows dan IBM’s OS/2 LAN Manager) dan NCP (Novell’s NetWare Core Protocol). 3. Special Filesystem Tipe ini tidak mengijinkan mengatur space disk. Pada direktori /proc menyediakan interface yang mengijinkan user untuk mengakses struktur data kernel. Direktori /dev/pts digunakan sebagai pendukung terminal semu. Seperti yang digambarkan pada standar Open Group’s Unix98. Agar file system dapat digunakan di Linux, perlu dilakukan proses yang disebut mounting. Proses ini memberikan lokasi (direktori) untuk file system yang di-mount. Setiap file system yang di-mount direpresentasikan oleh struktur super_block. Agar penggunaan data / file pada file system optimal maka bisa dilakukan beberapa langkah optimasi, antara lain : 1. Kurangi jumlah I/O yang mengakses strorage device sebanyak mungkin. 2. Kelompokkan I/O menjadi kelompok yang besar. 3 3. Optimasi pola pencarian blok data sehingga mengurangi seek time. 4. Masukkan data ke dalam cache sebanyak mungkin yang kita perlukan sehingga tidak membebani kerja perangkat I/O Setelah suatu file sistem berhasil di-mount, kita dapat mengakses file-file yang terdapat di dalamnya. Proses yang dilakukan untuk mengakses suatu file yang terdapat pada suatu file sistem adalah pertama mencari inode yang mengacu ke file yang kita kehendaki lalu mengakses inode tersebut. 2. File File adalah sebuah kumpulan elemen yang terurut. Elemen yang dimaksud bisa bahasa mesin, karakter, heksadesimal ataupun bit, tergantung implementasinya. Pada sistem operasi berbasis Unix, file system tidak diijinkan untuk melihat ataupun mengatur format dari file. Pengaturan format diserahkan pada user atau program tertentu. Struktur file dalam linux diimplementasikan sebagai berikut : struct fown_struct { int pid /* pid or –pgrpp where SIGIO should be sent */ uid_t uid,euid /* uid/euid of process setting the owner */ int signum /* posix.1b rt signal to be delivered */ }; struct file { struct list_head struct dentry struct file_operations atomic_t unsigned int mode_t loff_t unsigned long struct fown_struct unsigned int int unsigned long f_list; *f_dentry; *f_op; f_count; f_flags; f_mode; f_pos; f_reada,f_ramax,f_raend, f_ralen,f_rawin; f_owner; f_uid,f_gid; f_error; f_version; /* needed for tty driver and maybe others */ void *private_data; }; Penjelasan dari struktur data yang digunakan • f_list : menyambungkan semua file ke dalam beberapa list • f_dentry : pointer yang menunjuk pada objek dentry yang berkaitan • f_op : pointer yang menunjuk pada tabel operasi tabel • f_mode : mode proses akses 4 • • • • • • • • • • • • f_pos f_count f_flags f_reada f_ramax f_raend f_ralen f_rawin f_owner f_uid f_gid f_error : current file offset (pointer file) : counter penggunaan obyek file : flag yang dibuat saat file dibuka : flag yang digunakan untuk read head : jumlah maksimum page yang akan di-read ahead : pointer file setelah read ahead terakhir : jumlah byte yang di-read ahead : jumlah page yang di-read ahead : data untuk I/O asynchronous melalui signal : ID user pemilik file : ID grup user pemilik file : kode kesalahan untuk operasi write network Sedangkan untuk fungsi-fungsi yang untuk file, didefinisikan sebagai berikut : typedef int (*filldir_t)(void *, const char *, int,off_t,ino_t); struct file_operations { loff_t (*lseek) (struct file *, loff_t,int); ssize_t (*read) (struct file *, char *, size_t, loff_t *); int (*readdir) (struct file *, void *, filldir_t); unsigned int (*poll) (struct file *, struct poll_table_struct *); int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long); int (*mmap) (struct file *, struct vm_area_struct *); int (*open) (struct inode *, struct file *); int (*flush) (struct file *); int (*release) (struct inode *, struct file *); int (*fsync) (struct file * struct dentry *); int (*check_media_change) (kdev_t dev); int (*revalidate) (kdev_t dev); int (*lock) (struct file *, int, struct file_lock *); }; Penjelasan beberapa fungsi yang digunakan dalam struktur file : • llseek (file, offset, whence) : mengupdate pointer file • read (file, buf, count, offset) : membaca sebanyak count byte dari sebuah file dimulai dari posisi offset (yang merupakan sebuah pointer file). Kemudian nilai offset di-increment • write (file, buf, count, offset) : menulis sebanyak count byte pada sebuah (yang merupakan sebuah pointer file). Kemudian nilai offset diincrement • readdir (dir, dirent, filldir) : mengembalikan entri direktori berikutnya dari sebuah direktori dalam dirent, 5 Penamaan File Setiap file mempunyai nama. Untuk menghindari penamaan yang kacau, disarankan untuk menggunakan karakter-karakter berikut: • Huruf besar(A sampai Z) • Huruf kecil (A sampai Z) • Nomor (0 sampai 9) • Garis bawah ( _ ) • Titik ( . ) • Koma ( , ) Ada perkecualian untuk root directory, yang selalu menggunakan nama / dan selalu diacu dengan karakter / ini. Pada direktori yang sama tidak boleh ada dua file yang mempunyai nama sama. Pada pemberian nama file, ekstensi suatu file membantu untuk mengenali isi suatu file. Kita diberi kebebasan dalam memberi ektensi sebuah file, tetapi gunakan ekstensi yang mempermudah pengertian isi file. Ada beberapa file dalam LINUX yang tidak terlihat saat kita memanggil dengan ls saja. Untuk memanggil file yang tersembunyi kita gunakan command ls –a. File-file tersembunyi itu biasanya startup file. Sebagian besar file, hanya merupakan file biasa yang disebut file regular yang berisi data biasa sebagai contoh file text, file executable, atau program, input atau output dari program dan lainnya. Terdapat file khusus selain file – file biasa, seperti : • Special files: mekanisme yang digunakan untuk input dan output. Sebagian besar terdapat pada direktori /dev. • Links: Sistem untuk membuat file atau direktori dapat terlihat di banayk bagian dari pohon file sistem. • (Domain) sockets: Jenis file khusus, mirip dengan soket TCP/IP, yang menyediakan jaringan antar proses yang terproteksi oleh file system's access control. • Named pipes: berfungsi kurang lebih seperti soket dan membentuk jalur untuk proses komunikasi. 6 3. Gambaran Umum Ext2 Linux versi pertama berbasiskan filesystem Minix. Kemudian seiring dengan berkembangnya Linux, Extended Filesystem (Ext FS) diperkenalkan dengan beberapa kelebihannya, namun hasilnya tidak memuaskan. Pada tahun 1994 The Second Extended Filesystem (Ext2) diperkenalkan, termasuk beberapa fitur baru yang disediakan. Filesystem ini efisien, handal, fleksibel dan menjadi file system yang paling banyak digunakan oleh Linux. Fitur – fitur yang menunjang efisiensi, kehandalan dan fleksibilitas dari Ext2 : • Pada saat membuat file system Ext2 (pengformatan lojik), system administrator dapat memilih ukuran blok yang optimum. • Pada saat membuat file system Ext2, system administrator dapat memilih jumlah inode yang diperlukan untuk sebuah partisi dengan ukuran tertentu. • Filesystem membagi disk block ke dalam group–group. Setiap group terdiri atas data block dan inode yang disimpan dalam track yang berdekatan. • Strategi peng-update-an yang aman dapat meminimasi dampak dari system crash. • Mendukung pengecekan kekonsistensian secara otomatis pada status filesystem saat waktu booting. • Mendukung immutable file (file yang tidak dapat di modifikasi) dan append-only file (file yang isinya hanya dapat ditambahkan pada akhir file tersebut). Blok pertama dalam partisi Ext2 tidak pernah dikelola oleh Ext2 file system, karena blok tersebut disediakan untuk bagian boot sector. Sisanya dibagi kedalam block group, dimana block group mempunyai susunan seperti gambar berikut : Semua block group dalam filesystem mempunyai ukuran yang sama dan disimpan secara berurutan sehingga kernel dapat mengacu lokasi dari block group dengan mudah berdasarkan index bilangan bulatnya. Setiap block dalam sebuah block group mengandung salah satu dari informasi berikut : 7 • salinan dari superblock filesystem • salinan dari kumpulan block group descriptor • data block bitmap Jika sebuah block tidak mengandung salah satu dari informasi tersebut, maka block tersebut dikatakan free. Penjelasan informasi-informasi di atas adalah sebagai berikut : 8 Superblock Superblock pada Ext2 disimpan dalam struktur ext2_super_block. Field dari struktur tersebut adalah sebagai berikut : 9 Group Descriptor dan Bitmap Setiap block group mempunyai group descriptor masing-masing. Group descriptor disimpan dalam bentuk ext2_group_desc. Field dari struktur tersebut adalah sebagai berikut : Inode Table Inode table terdiri dari kumpulan block yang berurutan yang masing-masing block tersebut mengandung sejumlah inode yang telah terdefinisi sebelumnya. Semua inode mempunyai ukuran yang sama yaitu 128 bytes. Setiap Ext2 inode mempunyai struktur ext2_inode. Field dari struktur tersebut adalah sebagai berikut : Pada ext2, tipe file yang berbeda menggunakan data block dengan cara yang berbeda pula. Beberapa file tidak menyimpan data sama sekali sehingga tidak membutuhkan data block sama sekali. 10 Membaca dan Menulis File Reguler Ext2 Metode read Ext2 diimplementasi oleh fungsi generic_file_read(). Metode write pada Ext2 diimplementasi oleh fungsi ext2_file_write(). Fungsi ini bekerja dengan empat parameter: • fd yaitu file descriptor dari file yang ditulis. • buf yaitu alamat dari area memori yang berisi data yang sedang ditulis. • count yaitu banyaknya bytes yang ditulis. • ppos yaitu pointer ke variabel yang menyimpan file offset dimana data harus ditulis. 15 Fungsi write melakukan aksi-aksi berikut: 1. Menghapus hak istimewa superuser dari file. 2. Jika file pernah dibuka dengan O_APPEND flag set, ubah file offset dimana data harus ditulis pada akhir file. 3. jika file pernah dibuka pada mode sinkronisasi (O_SYNC flag set), ubah i_osync field pada struktur ext2_inode_info dalam disk inode ke langkah 1. 4. Hitung ukuran blok dari file offset dan sistem file. 5. Untuk setiap blok yang akan ditulisi, lakukan langkah-langkah berikut : a. Panggil ext2_getblk() untuk mengambil blok data dari disk, alokasikan bila perlu b. Jika blok harus ditulis ulang secara terpisah dan buffer tidak up-to-date, panggil 11_rw_block() dan tunggu sampai operasi read selesai. c. Salin bytes yang akan ditulisi ke dalam blok dari proses address space ke dalam buffer dan beri tanda buffer sebagai dirty. d. Panggil update_vm_cache() untuk sinkronisasi isi dari page cache dengan buffer cache. e. Jika file pernah dibuka pada mode sinkronisasi, sisipkan buffer ke dalam array local. Jika array terisi, panggil 11_rw_block() untuk memulai operasi write dan menunggu sampai selesai. 6. Jika file pernah dibuka pada mode sinkronisasi, kosongkan flag i_osync dari disk inode, panggil juga 11_rw_block() untuk memulai operasi write untuk setiap buffer 11 yang masih berada pada array lokal dan tunggu sampai I/O selesai mengeksekusi. 7. Lakukan update untuk field i_size dari inode object. 8. Ubah field i_ctime dan i_mtime dari inode object ke xtime.tv_sec dan tandai inode sebagai dirty. 9. Lakukan update variabel *ppos untuk menyimpan file offset dimana data telah ditulis. 10. Kembalikan nomor dari bytes yang dituliskan ke dalam file. 4. Inode Setiap file dan direktori di dalam Linux mempunyai identifier unik masing-masing yang disebut inode. Inode ini menyimpan informasi mengenai file yang bersangkutan seperti jenis file, nama file sampai kedudukan data file tersebut pada disk. Inode ini disimpan pada sebuah table yang disebut inode-table. Setiap partisi atau physical disk mempunyai inode-table sendiri. Inode-table ini terbentuk ketika partisi ini terbentuk (diformat). Untuk direktori root yang merupakan direktori tertinggi dalam Linux, diberikan inode dengan nomor satu. Hal ini berhubungan dengan cara penyimpanan data / file di Linux yang menyerupai pohon (tree). Dengan penggunaan inode ini, bisa memudahkan dalam pencarian suatu file atau direktori dengan cara menelusurinya melalui pohon file Linux sesuai dengan inode-nya. Informasi yang terdapat dalam inode suatu file : 1) Device tempat inode berada 2) Mode file 3) Type file 4) Locking information 5) Ukuran file 6) Jumlah link yang mengacu ke file 7) Id pemilik file dan grup-nya 8) Access privileges 9) Waktu pengaksesan terakhir 10) Waktu terakhir inode tersebut dimodifikasi 11) Waktu terakhir file dimodifikasi 12) Alamat block yang menyimpan data file pada disk. 12 Struktur inode dalam Linux diimplementasikan sebagai berikut : struct inode { struct list_head struct list_head struct list_head i_hash; i_list; i_dentry; unsigned long unsigned int kdev_t umode_t nlink_t uid_t gid_t kdev_t off_t time_t time_t time_t unsigned long unsigned long unsigned long unsigned long struct semaphore struct inode_operations struct super_block wait_queue_head_t struct file_lock struct vm_area_struct struct page spinlock_t struct dquot struct pipe_inode_info i_ino; i_count; i_dev; i_mode; i_nlink; i_uid; i_gid; i_rdev; i_size; i_atime; i_mtime; i_ctime; i_blksize; i_blocks; i_version; i_nrpages; i_sem; *i_op; *i-sb; i_wait; *i_flock; *i_mmap; *i_pages; i_shaerd_lock; *i_dquot(MAXQUOTAS); *i_pipe; unsigned long i_state; unsigned long unsigned char i_flags; i_sock; atomic_t unsigned int _u32 i_writecount; i_attr_flags; i_generation; union { ... struct extfs_inode_info ... struct socket void }u; ext2_i; socket_i; *generic)ip; }; 13 Operasi-operasi dalam inode Linux menyimpan cache dari inode aktif maupun dari inode yang telah terakses sebelumnya. Ada 2 path dimana inode ini dapat diakses. Yang pertama telah disebutkan sebelumnya, setiap entri dalam cache menunjuk pada suatu inode dan menjaga inode tetap dalam cache. Yang kedua melalui inode hash table. Setiap inode mempunyai alamat 8 bit sesuai dengan alamat dari file sistem superblok dan nomor inode. Inode dengan nilai hash yang sama kemudian dirangkai di doubly linked list. Perubahan pada cache melibatkan penambahan dan penghapusan entri-entri dari cache itu sendiri. Entri-entri yang tidak dibutuhkan lagi akan di unhash sehingga tidak akan tampak dalam pencarian berikutnya. Operasi diperkirakan akan mengubah struktur cache harus dikunci selama melakukan perubahan. Unhash tidak memerlukan semaphore karena ini bisa dilakukan secara atomik dalam kernel lock. Banyak operasi file memerlukan 2 langkah proses. Yang pertama adalah melakukan pencarian nama di dalam direktori. Langkah kedua adalah melakukan operasi pada file yang telah ditemukan. Untuk menjamin tidak terdapatnya proses yang tidak kompatibel diantara kedua proses itu, setelah proses kedua, virtual file sistem protokol harus memeriksa bahwa parent entry tetap menjadi parent dari entri childnya. Yang menarik dari cache locking adalah proses rename, karena mengubah 2 entri dalam sekali operasi. Struktur data dari operasi inode bisa digambarkan sebagai berukut. struct inode_operations { struct file_operations * default_file_ops;p int (*create) (struct inode *, const char *, int, int, struct inode **); int (*lookup) (struct inode *, const char *, int, struct inode **); int (*link) (struct inode *, struct inode *, const char *,int); int (*unlink) (struct inode *, const char *,int); int (*symlink) (struct inode *, const char *,int, const char); int (*mkdir) (struct inode *, const char *,int,int); int (*rmdir) (struct inode *, const char *,int); int (*mknod) (struct inode *, const char *,int,int,int); int (*rename) (struct inode *, const char *,int,struct inode *, const char *,int); int (*readlink) (struct inode *, char *,int); int (*follow_link) (struct inode *, struct inode*, int,int, struct inode**); 14 int (*bmap) (struct inode *, int); void (*truncate) (struct inode *); int (*permission) (struct inode *, int); int )*smap) (struct inode *, int); ); 5. Direktori Direktori adalah sekumpulan file dan/atau sekumpulan direktori dari file – file yang terasosiasi secara logis. Direktori merupakan mekanisme yang digunakan manusia / user untuk mengorganisasi sekumpulan file pada keseluruhan sistem. Directori merupakan container logika dari sekumpulan file atau mungkin directori bersarang (nested directory). Secara harfiah direktori adalah file khusus yang dibuat oleh file system untuk memuat entry-entry. Entry-entry yang termuat dalam direktori ini yang kemudian oleh user tampak sebagai daftar file-file dalam suatu direktori. Bentuk dari entry-entry ini adalah pointer. Jenis pointer yang digunakan sebagai entry ini ada dua jenis yaitu pointer yang menunjuk ke suatu file dalam direktori tersebut (bisa saja file tersebut adalah sebuah direktori) atau pointer yang menunjuk ke suatu inode lain baik itu terletak pada direktori yang sama maupun berbeda direktori. Untuk pointer yang menunjuk ke inode pada direktori yang berbeda, disebut link. Dengan link, kita bisa mendapatkan informasi mengenai pointer yang digunakan oleh inode yang ditunjuk link tersebut. Dengan link, kita bisa memperoleh akses pada file yang ditunjuk oleh entry yang ditunjuk link. Pada jumlah link yang terhubung pada suatu file dapat diketahui melalui inode-table. Link terbagi menjadi dua jenis yaitu ordinary link dan symbolic link. Ordinary link adalah kumpulan entry pada suatu direktori yang menunjuk pada inode yang sama. Sedangkan symbolic link adalah link yang mengacu pada suatu inode (tidak harus lebih dari satu). Perbedaan antara symbolic link dan ordinary link adalah pada ordinary link jika inode (file) yang diacu dihapus, maka data file tersebut masih tetap dipertahankan sampai tidak ada lagi link yang mengacu padanya. Sedangkan pada symbolic link, jika file yang diacu oleh link dihapus, maka semua link yang mengacu padanya juga harus ikut dihapus. Struktur direktori pada Linux pada umumnya bisa digambarkan sebagai berikut : 15 Penjelasan isi masing-masing direktori Direktori /bin Isi Direktori Program umum, yang dapat digunakan oleh sistem, administrator dan para pengguna system File-file startup files dan kernel, vmlinuz. Dalam distribusi - distribusi /boot linux yang terbaru direktori juga berisi data grub. Grub yang merupakan akronim dari GRand Unified Boot loader, merupakan suatu suatu jenis boot loader yang digunakan secara umum pada Linux /dev /etc Referensi yang menunjuk pada semua hardware periperal CPU yang direpresentasikan sebagai file dengan properti khusus File konfigurasi sistem yang sangat penting. Direktori ini berisi data yang mirip dengan yang ada dalam Control Panel milik Windows. /home Direktori home untuk para pengguna umum. /initrd Informasi untuk booting /lib File pustaka, termasuk file-file yang dibutuhkan oleh semua jenis program yang dibutuhkan oleh sistem dan para pengguna. Setiap partisi mempunyai direktori dalam dalam direktori teratasnya. /lost+found File-file yang yang sedang disimpan ketika terjadi failure disimpan di sini. /misc /mnt Digunakan untuk berbagai macam keperluan. Mount point standard untuk file sistem eksternal seperti CDROM atau kamera digital. /opt Biasanya berisi software pihak ketiga dan software extra /proc Virtual file system yang mengandung informasi tentang sumber daya 16 Direktori Isi Direktori sistem. /root Direktori home untuk superuser atau adminstrator sistem /sbin Program yang digunakan oleh sistem dan adminstrator sistem. /tmp Ruang untuk file yang bersifat temporer untuk kepantingan sistem /usr Program, pustaka, dokumentasi dan file-file lain yang digunakan oleh program 0- program yang berkaitan dengan pengguna. Tempat penyimpanan untuk file variabel dan file temporer yang /var diciptakan oleh userm seperti file log, tempat penyimpanan sementara untuk file yang didownload dari internet atau untuk menyimpan image dari sebuah CD sebelum CD trersebut dibakar. Direktori pada Linux adalah berupa graph yang asiklik. Oleh karena itu Linux mengijinkan sebuah file untuk muncul pada lebih dari satu direktori. Linux juga menggunakan nama path secara relatif maupun absolut. Jadi nama file yang diawali dengan “/” adalah nama file absolut yang menggambarkan nama direktori sepanjang path dari root sampai file yang diinginkan. Tetapi Linux tidak mengijinkan spesifikasi dari nama device seperti yang dilakukan oleh DOS. Absolut nama file seperti /usr/gjn/books/opsys/chap13 mengindikasikan bahwa direktori root berisi entri yang menggambarkan direktori yang bernama usr, yang berisi directori bernama gjn, dan seterusnya melalui direktori books dan opsys sampai nama file chap13. Jika direktori basis adalah /usr/gjn maka file yang sama bisa diacu dengan nama file relatif books/ /opsys/chap13. Atau jika direktori kerja adalah usr/gjn/books/, kemudian kita ingin mengacu kepada file prime.c yang terletak pada direktori programs yang terletak pada direktori usr/gjn/, maka caranya adalah ../programs/prime.c. File manager menyediakan user dengan berbagai perintah untuk mengatur file dan/atau direktori, beberapa diantaranya yaitu : 1. ls : mengembalikan sebuah list dari semua file dan direktori bersarang yang diacu oleh direktori yang diidentifikasi. Perintah ini juga digunakan untuk mengembalikan isi file's descriptor kepada user interface atau ke program. 17 2. cp : menciptakan duplikat dari file yang sudah ada. 3. mv : merubah nama simbolik dari file yang sudah ada. 4. rm : menghapus file yang diidentifikasi dari direktori dan menghancurkannya dengan membebaskan semua blok pada file termasuk file descriptor. 5. cd : berpindah dari direktori satu ke direktori yang lain. Dalam Linux, direktori entry yang telah dibaca ke dalam memori akan diubah ke dalam obyek dentry berbasiskan struktur dentry. Sebuah obyek dentry akan diciptakan oleh kernel untuk setiap komponen dari pathname. Contohnya : pada saat kita melihat isi direktori /tmp/test, maka kernel akan menciptakan 3 buah obyek dentry yaitu masing untuk direktori /, direktori tmp dan direktori test dari direktori tmp. Struktur data dari dentry dalam Linux diimplementasikan sebagai berikut : struct dentry { atomic_t d_count; unsigned int d_flags; struct inode * d_inode; /* Where the name belongs to NULL is negative */ struct dentry * d_parent; /* parent directory */ struct list_head d_hash; /* lookup hash list */ struct list_head d_lru; /* d_count = 0 LRU list */ struct list_head d_child; /* child of parent list */ struct list_head d_subdirs; /* our children */ struct list_head d_alias; /* inode alias list */ int d_mounted; struct qstr d_name; unsigned long d_time; /* used by d_revalidate */ struct dentry_operations *d_op; struct super_block * d_sb; /* The root of the dentry tree */ unsigned long d_vfs_flags; void * d_fsdata; /* fs-specific data */ void * d_extra_attributes; /* TUX-specific data */ unsigned char d_iname[DNAME_INLINE_LEN]; /* small names */ struct dcookie_struct * d_cookie; /* cookie, if any */ }; Sedangkan fungsi-fungsi yang terdefinisi pada dentry diimplementasikan sebagai berikut : struct dentry_operations { int (*d_revalidate)(struct dentry *, int); int (*d_hash) (struct dentry *, struct qstr *); int (*d_compare) (struct dentry *, struct qstr *, struct qstr *); int (*d_delete)(struct dentry *); void (*d_release)(struct dentry *); 18 void (*d_iput)(struct dentry *, struct inode *); }; 6. Jenis Alokasi a) Extent-Based Allocation Pada proses pengalokasian ini, blok-blok pada disk dibagi menjadi extent-extent. Extent adalah kumpulan blok - blok yang kontigu dan mempunyai identifier yang terdiri dari logical offset, panjang / length, dan physical offset. Setiap kali file diciptakan, maka akan tercipta extent baru. Pengalokasian untuk file terjadi secara sekuensial. Selain itu, proses pembacaan (read) dan penulisan (write) juga terjadi secara sekuensial. Dalam pengaksesan data, hanya diperlukan posisi awal data dan panjang data. Pengalokasian jenis ini sangat cocok digunakan untuk pengaksesan secara sekuensial karena algoritma pengalokasiannya bisa mempersingkat proses pencarian pada disk (seek time). Tetapi tipe pengalokasian ini sangat jelek jika digunakan untuk pengaksesan secara random. Tipe pengalokasian ini digunakan oleh file system jenis Veritas VxFS, reiserFS dan JFS IBM. b) Block-Based Allocation Ini adalah tipe pengalokasian yang sering digunakan oleh file system Unix. Tipe ini pada awalnya mengalokasikan space untuk file secara random. Tetapi kemudian diketahui bahwa pengalokasian secara random dapat memperbesar seek time. Lalu digunakan algoritma untuk mengalokasikan secara sekuensial. Pengalokasian secara sekuensial ini juga bisa membuat fragmentasi pada disk. Untuk mengatasi hal ini digunakan meta-data. Meta-data adalah informasi control blok dari file system (file system block control structure information). Metadata ini berguna jika terjadi pengalokasian secara random. Pada tipe pengalokasian Extent-Based Allocation dibutuhkan sedikit meta-data atau bahkan tidak sama sekali karena pengalokasiaannya secara sekuensial. Sedangkan pada Block-Based Allocation meta-data sangat diperlukan. Tipe pengalokasian jenis ini digunakan oleh file system ext yang biasa digunakan oleh kebanyakan distro Linux. 19 DAFTAR PUSTAKA Nutt, Gary. “Operating Systems : A Modern Perspective” . Addison – Wesley. 2000. Bar, Moshe. “Linux File System”. McGraw – Hill. 2001. Tackert Jr., Jack. Steve Burnett.”Special Edition Using Linux Fourth Edition”.Que .1999. 20