Selasa, 22 Mei 2012

MANAJEMEN FILE LINUX


MANAJEMEN FILE LINUX

Ikhtisar


·        File sistem Linux
·         Linux virtual file sistem
·         Direktori yang umum terdapat dalam instalasi linux
·         Macam-macam File sistem di Linux
·         Pembagian file sistem secara ortogonal
·         Operasi-operasi dalam inode

·        Penyimpanan File pada Disk di Sistem Operasi Linux

·        Mekanisme membuka file pada Linux
·         Struktur File
·         Administrasi Membuka File
·         Proses Membuka File
·         Cache Directory-entry
·         Directory-entries:least-recently used list


·        Representasi File Sistem di Kernel
      Struktur umum File Sistem dari VFS
·   Struktur Superblock
·   Operasi pada Superblock
·   Struktur iaatr
·   Struktur inode
·   Struktur List of Inode
·   Operasi pada Inode
·   Struktur file
·   Operasi pada file
·   Struktur cache direktori










uFile sistem Linux

     File sistem pada linux dapat dilihat seperti struktur pohon, yang dapat dimulai dari root direktory yang dinyatakan dengan simbol ‘/ ‘ pada bagian atas dan terus kebawah. Driver untuk mengakses file sistem root harus berada dalam kernel.
Setiap direktori dan file didaftar  pada induk direktori. Pada root direktori, parent itu adalah root itu sendiri. Suatu direktori adalah  suatu file yang berisi daftar tabel dari isi file itu sendiri, yang diberikan nama pada sejumlah inode dalam daftar. Inode adalah file khusus yang didisain untuk dibaca oleh kernel untuk dipelajari informasi dari masing-masing file.  Inode sangat spesifik karena memiliki izin untuk file, pemakai, tanggal dibuat dan terakhir akses/perubahan serta lokasi fisik dari blok data pada disk yang berisi file tersebut.

Tabel  Perintah manajemen file
Perintah
Keterangan
cat
Menampilkan isi file.
cp
Menyalin satu atau beberapa file.
find
Mencari file tertentu pada suatu direktori.
ls
Menampilkan informasi dari file.
more
Menampilkan isi suatu file teks per layar.
mv
Memindahkan suatu file ke direktori lain atau mengubah nama file.
pg
Menampilkan isi suatu file teks per layar.
rm
Menghapus file.

Tabel  Perintah manajemen direktori
Perintah
Keterangan
cd
Mengaktifkan suatu direktori sebagai direktori kerja.
copy
Menyalin seluruh struktur direktori (termasuk file dan subdirektori).
mkdir
Membuat direktori baru.
pwd
Menampilkan nama direktori kerja.
rmdir
Menghapus direktori.
mv
Mengubah nama direktori.

Tabel  Perintah untuk mengatur akses file
Perintah
Keterangan
chgrp
Mengubah group dari suatu file atau direktori.
chmod
Mengubah permisi dari suatu file atau direktori.
chown
Mengubah pemilik dari suatu file atau direktori.





Linux virtual file sistem

Objek dasar dalam layer-layer virtual file system

1.      File
File adalah sesuatu yang dapat dibaca dan ditulis. File ditempatkan pada memori. Penempatan pada memori tersebut sesuai dengan konsep file deskriptor yang dimiliki linux.
2.      Inode
Inode merepresentasikan objek dasar dalam file sistem. Inode bisa saja file biasa, direktori, simbolik link dan lain sebagainya. Virtual file sistem tidak memiliki perbedaan yang jelas di antara objek, tetapi mengacu kepada implementasi file sistem yang menyediakan perilaku yang sesuai. Kernel tingkat tinggi menangani objek yang berbeda secara tidak sama.
File dan inode hampir mirip diantara keduanya. Tetapi terdapat perbedaan yang penting diantara keduanya. Ada sesuatu yang memiliki inode tetapi tidak memiliki file, contohnya adalah simbolik link. Ada juga file yang tidak memiliki inode seperti pipes dan socket.
3.      File sistem
File sistem adalah kumpulan dari inode dengan satu inode pembeda yaitu root. Inode lainnya diakses mulai dari root inode dan pencarian nama file untuk menuju ke inode lainnya.
File sistem mempunyai beberapa karakteristik yang mencakup seluruh inode dalam file sistem. Salah satu yang terpenting adalah blocksize.
4.      Nama inode
Semua inode dalam file sistem diakses melalui namanya. Walaupun pencarian nama inode bisa menjadi terlalu berat untuk beberapa sistem, virtual file sistem pada linux tetap memantau cache dan nama inode yang baru saja terpakai agar kinerja meningkat. Cache terdapat di memori sebagai tree, ini berarti jika sembarang inode dari file terdapat di dalam cache, maka parent dari inode tersebut juga terdapat di dalam cache.
Virtual file system layer menangani semua pengaturan nama path dari file dan mengubahnya menjadi masukan di dalam cache sebelum mengijinkan file sistem untuk mengaksesnya. Ada pengecualian pada target dari simbolik link, akan diakses file sistem secara langsung. File sistem diharapkan untuk menginterpretasikannya.
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. Direktor /dev/pts digunakan sebagai pendukung terminal semu. Seperti yang digambarkan pada standar Open Group’s Unix98.

Direktori yang umum terdapat dalam instalasi linux
1. Direktori root
Direktori ini terletak pada level teratas dari struktur direktori linux. Biasanya direktori root ini diberi tanda / atau slash. Direktori ini biasanya hanya terdiri dari direktori-direktori lainnya yang terletak pada level dibawah level direktori root. Sekumpulan file dapat disimpan pada direktori root tetapi usahakan tidak menyimpan file biasa sehingga direktori ini tetap terjaga keteraturannya.
Perubahan penamaan direktori - direktori yang ada pada direktori root akan menyebabkan sebagian besar dari sistem menjadi tidak berguna.Karena sebagian besar dari direktori-direktori ini berisi fungsi-fungsi yang sifatnya kritikal yang dimana sistem operasi dan semua aplikasi memerlukan direktori -direktori ini dengan nama yang sudah diberikan pada awal instalasi. Tetapi kita bisa membuat direktori lain pada level ini. Direktori home juga bisa ditemukan pada level ini hasil pembuatan oleh administrator sistem.
2. Direktori bin
Direktori ini berisi program-program yang esensial agar sistem operasi dapat bekerja dengan benar. Dalam direktori ini dapat ditemukan perintah - perintah navigasi, program - program shell, perintah pencarian dan lain-lainnya. bin adalah singkatan dari kata binary. Di linux, sebuah binary adalah file yang dapat dieksekusi. Sebagian besar dari perintah dalam linux merupakan binary, perintah - perintah tersebut merupakan program -program kecil yang dapat dieksekusi oleh pengguna. Ada beberapa perintah yang disebut perintah built-in dimana fungsi mereka dikendalikan oleh program shell sehingga mereka tidak beroperasi sebagai binary yang terpisah.
Terkadang direktori bin terhubung ke direktori lain yang dinamakan /usr/bin. Direktori /usr/bin biasanya adalah lokasi sebenarnya dari kumpulan binary pengguna disimpan.Dalam hal ini, /bin adalah gerbang untuk mencapai /usr/bin.
3. Direktori dev
Direktori ini berisi kumpulan file alat atau alat I/O. Sistem linux menganggap semua hal sebagai file. Hal-hal seperti monitor, CD-ROM , printer dan lain-lainnya dianggap hanya sebagai file saja oleh sistem operasi. Jika linux memerlukan perangkat-perangkat tersebut maka linux akan mencarinya ke direktori dev.
4. Direktori etc
Direktori ini berisi beberapa konfigurasi file pengguna dan sistem, dan file yang ditunjuk sistem sebagai operasi normal seperti file kata sandi, pesan untuk hari ini, dan lain- lainnya.
5. Direktori lib
Direktori ini berisi pustaka-pustaka (libraries ) yang dibagi (shared). Pustaka ini adalah rutin perangkat lunak (software routines) yang digunakan lebih dari satu bagian dari sistem operasi. Ketika kita menginstalasi perangkat lunak yang baru maka ada pustaka-pustaka baru yang ditambahkan ke direktori lib. Jika pada waktu berusaha menjalankan aplikasi terdapat pesan error, hal ini diakibatkan ada pustaka yang hilang dari direktori lib. Aplikasi-aplikasi di linux biasanya memeriksa lib ketika menginstalasi untuk memeriksa apakah pustaka-pustaka yang diperlukan oleh aplikasi sudah tersedia atau belum. Jika sudah tersedia, linux biasanya tidak menimpa pustaka tersebut.
6. Direktori sbin
Direktori ini berisi binary-binary juga seperti pada direktori bin.Tetapi,bedanya adalah binary-binary pada direktori ini berhubungan dengan fungsi-fungsi sistem administrasi pada sistem operasi linux. Binary-binary ini bukan yang biasa digunakan oleh pengguna tetapi digunakan agar komputer dapat beroperasi secara efisien.
7. Direktori usr
Direktori ini terdiri dari banyak direktori seperti pada direktori root. Direktori ini berisi kumpulan file yang dapat diakses oleh para pengguna biasa. Struktur dari direktori ini mirip dengan struktur direktori /. Beberapa direktori yang terdapat dalam direktori ini berhubungan dengan direktori yang ada di direktori /.
8. Direktori var
Direktori ini berisi data yang bermacam - macam (vary). Perubahan data dalam sistem yang aktif sangatlah cepat. Data - data seperti ini ada dalam waktu yang singkat. Karena sifatnya yang selalu berubah tidak memungkinkan disimpan dalam direktori seperti /etc. Oleh karena itu, data-data seperti ini disimpan di direktori var.

Macam-macam File sistem di Linux

Secara garis besar, file sistem di sistem linux terbagi menjadi dua, yaitu file sistem dengan fasilitas journaling dan yang tidak memiliki fasilitas tersebut. Dibawah ini adalah beberapa file sistem yang digunakan dalam sistem linux pada umumnya :

·         EXT2 file sistem

a.       Keterangan
EXT2 adalah file sistem yang ampuh di linux. EXT2 juga merupakan salah satu file sistem yang paling ampuh dan menjadi dasar dari segala distribusi linux. Pada EXT2 file sistem, file data disimpan sebagai data blok. Data blok ini mempunyai panjang yang sama dan meskipun panjangnya bervariasi diantara EXT2 file sistem, besar blok tersebut ditentukan pada saat file sistem dibuat dengan perintah mk2fs. Jika besar blok adalah 1024 byte, maka file dengan besar 1025 byte akan memakai 2 blok. Ini berarti kita membuang setengah blok tiap file.
EXT2 mendefinisikan topologi file sistem dengan memberikan arti bahwa setiap file pada sistem diasosiasiakan dengan struktur data inode. Sebuah inode menunjukkan blok mana dalam suatu file tentang hak akses setiap file, waktu modifikasi file, dan tipe file. Setiap file dalam EXT2 file sistem terdiri dari inode tunggal dan setiap inode mempunyai nomor identifikasi yang unik. Kumpulan inode file sistem disimpan dalam tabel inode. Direktori dalam EXT2 file sistem adalah file khusus yang mengandung pointer ke inode masing-masing isi direktori tersebut.
gambar struktur ext2 file sistem
b.      Inode dalam EXT2
gambar ext2 inode
Inode adalah kerangka dasar yang membangun EXT2. Inode dari setiap kumpulan blok disimpan dalam tabel inode bersama dengan peta bit yang menyebabkan sistem dapat mengetahui inode mana yang telah teralokasi dana inode mana yang belum. MODE: mengandung 2 informasi, inode apa dan ijin akses yang dimiliki user. OWNER INFO: user atau group yang memiliki file atau direktori SIZE: besar file dalam bytes TIMESTAMPS: kapan waktu pembuatan inode dan waktu terakhir dimodifikasi. DATABLOKS: pointer ke blok yang mengandung data.
EXT2 inode juga dapat menunjuk pada device khusus, yang mana device khusus ini bukan merupakan file, tetapi dapat menangani program sehingga program dapat mengakses ke device. Semua file device di dalam drektori /dev dapat membantu program mengakses device.
c.       Superblok dalam EXT2
Superblok mengandung informasi tentang ukuran dasar dan bentuk file sistem. Informasi di dalamnya memungkinkan file sistem manager untuk menggunakan dan merawat file sistem. Biasanya, hanya superblok di blok group 0 saat file sistem mengalami mount tetapi setiap blok grup mengandung duplikatnya untuk menjaga jika file sistem menjadi rusak. Informasi yang dikandung adalah:
a.       Magic Number
meyakinkan software bahwa ini adalah superblok dari EXT2 file sistem.
b.      Revision Level
menunjukkan revisi mayor dan minor dari file sistem.
c.       Mount Count dan Maksimum Mount Count
menunjukkan pada sistem jika harus dilakukan pengecekan dan maksimum mount yang diijikan sebelum e2fsck dijalankan.
d.      Blocks per Size
besar blok dalam file sistem, contohnya 1024 bytes.
e.       Blocks per Group
benyaknya blok per group.
f.       Block Group Number
nomor blok group yang mengadung copy dari superblok.
g.      Free Blocks
banyaknya blok yang kosong dalam file sistem.
h.      Free Inode
banyak inode kosong dalam file sistem.
i.        First Inode
nomor inode dalam inode pertama dalam file sistem, inode pertama dalam EXT2 root file sistem adalah direktori "/".

·         EXT3 file sistem

EXT3 adalah peningkatan dari EXT2 file sistem. Peningkatan ini memiliki beberapa keuntungan, diantaranya:
a.       Setelah kegagalan sumber daya, unclean shutdown, atau kerusakan sistem, EXT2 file sistem harus melalui proses pengecekan dengan program e2fsck. Proses ini dapat membuang waktu sehingga proses booting menjadi sangat lama, khususnya untuk disk besar yang mengandung banyak sekali data. Dalam proses ini, semua data tidak dapat diakses.
Jurnal yang disediakan oleh EXT3 menyebabkan tidak perlu lagi dilakukan pengecekan data setelah kegagalan sistem. EXT3 hanya dicek bila ada kerusakan hardware seperti kerusakan hard disk, tetapi kejadian ini sangat jarang. Waktu yang diperlukan EXT3 file sistem setelah terjadi unclean shutdown tidak tergantung dari ukuran file sistem atau banyaknya file, tetapi tergantung dari besarnya jurnal yang digunakan untuk menjaga konsistensi. Besar jurnal default memerlukan waktu kira-kira sedetik untuk pulih, tergantung kecepatan hardware.
b.      Integritas data
EXT3 menjamin adanya integritas data setelah terjadi kerusakan atau unclean shutdown. EXT3 memungkinkan kita memilih jenis dan tipe proteksi dari data.
c.       Kecepatan
Daripada menulis data lebih dari sekali, EXT3 mempunyai throughput yang lebih besar daripada EXT2 karena EXT3 memaksimalkan pergerakan head hard disk. Kita bisa memilih tiga jurnal mode untuk memaksimalkan kecepatan, tetapi integritas data tidak terjamin.
d.      Mudah dilakukan migrasi
Kita dapat berpindah dari EXT2 ke sistem EXT3 tanpa melakukan format ulang.

·         Reiser file sistem

Reiser file sistem memiliki jurnal yang cepat. Ciri-cirinya mirip EXT3 file sistem. Reiser file sistem dibuat berdasarkan balance tree yang cepat. Balance tree unggul dalam hal kinerja, dengan algoritma yang lebih rumit tentunya.
Reiser file sistem lebih efisien dalam pemenfaatan ruang disk. Jika kita menulis file 100 bytes, hanya ditempatkan dalam satu blok. File sistem lain menempatkannya dalam 100 blok. Reiser file sistem tidak memiliki pengalokasian yang tetap untuk inode. Resier file sistem dapat menghemat disk sampai dengan 6 persen.

·         X file sistem

X file sistem juga merupakan jurnaling file sistem. X file sistem dibuat oleh SGI dan digunakan di sistem operasi SGI IRIX. X file sistem juga tersedia untuk linux dibawah lisensi GPL. X file sistem mengunakan B-tree untuk menangani file yang sangat banyak. X file sistem digunakan pada server-server besar.

·         Proc file sistem

proc file sistem menunjukkan bagaimana hebatnya virtual file sistem yang ada pada linux. Proc file sistem sebenarnya tidak ada secara fisik, baik subdirektorinya, maupun file-file yang ada di dalamnya. Proc file sistem mengalami register oleh linux virtual file sistem, jika virtual file sistem memanggilnya dan meminta inode-inode dan file-file, proc file sistem membuat file tersebut dengan informasi yang ada di dalam kernel. Contohnya, /proc/devices milik kernel dibuat dari data struktur kernel yang menjelaskan device tersebut.

Pembagian file sistem secara ortogonal

Shareable dan Unshareable
1.      Shareable
Isinya dapat di-share (digunakan bersama) dengan sistem lain, gunanya untuk menghemat tempat.
2.      Unshareable
Isinya tidak dapat di-share(digunakan bersama) dengan sistem lain, biasanya untuk alasan keamanan.
Variabel dan Static
1.      Variabel
Isinya sering berubah-ubah.
2.      Static
Sekali dibuat, kecil kemungkinan isinya akan berubah. Bisa berubah jika ada campur tangan sistem admin.

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 child-nya. Yang menarik dari cache locking adalah proses rename, karena mengubah 2 entri dalam sekali operasi.

uPenyimpanan File pada Disk di Sistem Operasi Linux
File sistem pada disk (tanpa bergantung pada tipenya) selalu berisi :
·         Superblok
Superblok dapat mendiskripsikan karakteristik dari file sistem seperti tipe, jumlah inode (total dan free), jumlah blok data (total dan free), status file sistem, dll.
·         Inode
Sebuah inode mendeskripsikan karakteristik dari sebuah file, seperti tipe, ukuran dalam byte, time-stamp, ijin akses, referensi pada blok data, dll. Nama file tidak tersimpan pada inode. Setiap inode mempunyai nomor sekuensial yang dimulai dari 1, dan inode dikonvensi oleh inode direktori root.
·         Blok Data
Blok data berisi data dari file, setiap blok data mempunyai nomor sekuensial yang unik mulai dari 1.

uMekanisme membuka file pada Linux
Struktur File
Struktur file dialokasikan setiap open() dari sebuah file, menangani open-mode, open-flags, current-offset, dll. Struktur file yang sudah tidak dipakai selalu dimasukkan ke dalam unused list.
Strategi alokasi :
1.      Fetch struktur file yang bebas dari unused list.
2.      Jika unused list telah penuh, maka akan mengalokasikan struktur file baru

Administrasi Membuka File
Untuk setiap membuka file oleh sebuah proses (system call open), kernel mengalokasikan struktur file baru. File ini mendeskripsikan request dari open-mode, current byte-offset dalam file yang diinisialisasi dengan nol, open-flags (seperti 0-APPEND, 0-SYNC, dll). Ketika sebuah file ditutup, maka struktur file akan dihapus oleh kernel dan dimasukkan dalam unused list file-structures dimana bisa digunakan kembali.

Proses Membuka File
Penjelasan gambar :
1.  Full Row
a. Ketika  sebuah file sistem megalami mount, superblok dibaca di memori. Setiap superblok disimpan dalam sebuah struktur dan dihapus ketika sebuah file sistem mengalami unmount.
b. Ketika proses membuka file pada sebuah file sistem, struktur inode dari file tersebut dibaca di memori. Inode ini berisi referensi ke struktur superblok yang merepresentasikan dari mana inode di-load.
c. Sebuah file dibuka berdasarkan nama file. Nama file dalam bentuk string disimpan di memori dalam struktur dentry. Struktur ini berisi referensi ke inode mana yang berhubungan.
d. Ketika sebuah proses membuka file, open-mode harus dijaga (jika open-mode adalah read-only dan issue proses dari system call adalah write, maka kernel harus menolaknya) sebagai flag dan current byte-offset (seek-pointer) dalam file. Informasi ini disimpan dalam sebuah struktur file.
2. Jika beberapa file (inode, bukan nama file) dibuka dalam sebuah file sistem, beberapa inode akan mengalami mount dalam sebuah file sistem.
3. Satu inode dalam sebuah file sistem dapat mereferensikan beberapa nama. Jika inode yang sama membuka dua nama yang berbeda, maka beberapa struktur dentry akan mengacu pada inode yang sama.
4. Jika file yang sama dibuka dalam dua proses dengan nama file yang sama, maka beberapa struktur file mengacu pada dentry yang sama.
5. Jika sebuah file dibuka dengan sebuah proses dan proses mengunakan system call fork, maka akan terbentuk proses anak yang membuka file dari proses parent. Hal ini mengimplikasikan bahwa parent dan proses anak memakai bersama open-mode yang sama dan current offset dalam file, sehingga jika keduanya mulai membaca setelah fork maka keduanya tidak akan pernah membaca byte yang sama (sebuah system call membaca secara implisit pertambahan dari current offset).
Sebuah superblok terbentuk di memori ketika file sistem mengalami mount dan penghapusan dari memori ketika file sistem mengalami unmount. Tetapi ketika entitas lain dihapus, maka superblok akan terhapus ketika tidak ada lagi yang diacu. Karena itu struktur inode, dentry dan file berisi reference-count. Ketika nilai ini menjadi nol maka entitas dapat dihapus, kecuali ada alasan yang baik untuk memasukannya ke dalam cache untuk penggunaan selanjutnya (seperti pada struktur dentry).   

Cache Directory-entry
Fungsi kernel namei mentransformasikan nama masukan yang berupa string menjadi inode. Setiap nama file recently-used disimpan dalam sebuah struktur yang disebut dentry. Pencarian nama file (pathname-component) dalam cache dentry dikelola oleh hashtable. Sebuah formula digunakan untuk mengkalkulasi nilai antara nol dan elemen yang lebih tinggi (ukuran tabel dideterminasi oleh jumlah dari memori fisik) dari hashtable, formula ini menggunakan jumlah karakter nama file sebagai nilai numerik yang dikombinasi dengan alamat dari parent dentry. Nama file yang sama dapat ada lebih dari satu dalam hashtable.  Dentry untuk nama file mengacu pada inode dari file yang bersangkutan, jika alamat inode ini adalah nol (dentry negatif) berarti tidak ada inode yang bersangkutan (bahkan di disk pun tidak ada). Jadi apabila ada pengaksesan terhadap file ini maka nama file ini masih disimpan dalam cache dentry dengan alamat inode 00000000.
Directory-entries:least-recently used list
Setiap dentry berhubungan dengan sebuah open file yang mempunyai link ke proses dengan menggunakan struktur file, dentry tidak dihapus dari memori selama file diakses (reference-counter lebih dari 0). Setiap dentry berhubungan dengan closed file yang mempunyai link ke unused list. Dentry ini mempunyai reference-counter 0. Setiap sebuah nama digunakan (melalui dentry-cache) maka referenced flag akan diset dan (jika dentry adalah bagian dari unused list) dentry akan ditransfer ke head dari unused list (most recently used), ini berarti bahwa yang paling lama tidak digunakan akan berada pada tail dari unused list. Pada saat itu jika memory management subsytem mendeteksi bahwa tidak ada free memory page yang cukup maka akan dicoba mengosongkan cache dentry. Banyaknya isi pada cache akan dihapus bergantung pada kebutuhan dari free memory page saat itu. Dentry akan menghapus jika referenced flag tidak diset. Dengan kata lain flag ini direset dan dentry tetap berada dalam unused list. Jika nama masukan tidak diacu sebelum request selanjutnya, maka akan terjadi penghapusan.
Ada alasan lain yang dapat menghapus dentry dari unused list seperti nama file yang berhubungan dengan file sistem dihapus karena adanya proses unmount dari file sistem tersebut atau dihapus karena adanya proses penghapusan pada file.









uRepresentasi File Sistem di Kernel
Struktur umum File Sistem dari VFS
struct file_system_type {
struct super_block *(*read_super) (struct super_block*, void*, int);
char *name;
int requires_dev;
struct file_system_type *next;
} *file_system = NULL;

Struktur Superblock
struct super_block {
dev_t s_dev; /* nama device untuk filesystem */
unsigned long s_blocksize; /* ukuran block */
unsigned char s_blocksize_bits; /* id (ukuran block) */
unsigned char s_lock; /* penguncian superblock */
unsigned char s_rd_only; /* tidak dipakai (=0) */
unsigned char s_dirt; /* penanda jika superblock berubah */
struct file_system_type *s_type; /* tipe filesystem */
struct super_operations *s_op; /* operasi terhadap filesystem */
unsigned long s_flags; /* flags */
unsigned long s_magic; /* identifier filesystem */
unsigned long s_time; /* waktu modifikasi terakhir */
struct inode *s_covered; /* direktori tujuan mount */
struct inode *s_mounted; /* inode dari root */
struct wait_queue * s_wait; /* antrian dari s_lock */
union {
struct minix_sb_info minix_sb;
...
void *generic_sdp;
} u; /* informasi khusus untuk filesystem */
};

Operasi pada Superblock,
mencakup mambaca dan menulis sebuah individual inode, membaca informasi sistem file,
menulis Superblock itu sendiri.
struct super_operations {
void (*read inode) (struct inode *);
int (notify_change) (struct inode *, struct iattr *);
void (*write_inode) (struct inode *);
void (*put_inode) (struct inode *);
void (*put_super) (struct superblock *);
void (*write_super) (struct superblock *);
void (*statfs) (struct superblock *, struct statfs *);
int (*remount_fs) (struct super_block *, int *, char *);
};

Struktur iaatr,
berisi perubahan-perubahan yang terjadi pada inode melalui system call.
struct iattr {
unsigned int ia_valid; /* penanda komponen yg berubah */
umode_t ia_mode; /* hak akses baru */
uid_t ia_uid; /* user baru */
gid_t ia_gid; /* group baru */
off_t ia_size; /* ukuran file baru */
time_t ia_atime; /* waktu pengaksesan terakhir */
time_t ia_mtime; /* waktu perubahan terakhir */
time_t ia_ctime; /* waktu file dibuat */
};

Struktur inode,
sebuah struktur yang berisi struktur data di kernel, dan struktur data di hard disk, yang
kedua struktur ini dapat menggambarkan file. Hanya terdapat tepat satu buah entri inode di
kernel untuk setiap file yang digunakan dalam sistem.
struct inode {
dev_t i_dev; /* nomor device file */
unsigned long i_ino; /* nomor inode */
umode_t i_mode; /* tipe file dan hak akses */
nlink_t i_nlink; /* jumlah hard-links */
uid_t i_uid; /* id pemilik */
gid_t i_gid; /* id group pemilik */
dev_t i_rdiv; /* devicenya, jika merupakan file device */
off_t i_size; /* ukuran file */
time_t u_atime; /* waktu pengaksesan terakhir */
time_t u_mtime; /* waktu perubahan terakhir */
time_t u_ctime; /* waktu file dibuat */
unsigned long i_blksize; /* ukuran blok */
unsigned long i_blocks; /* jumlah blok */
unsigned long i_version; /* versi Dcache */
struct semaphore i_sem; /* kontrol akses */
struct inode_operations * i_op; /* operasi inode */
struct super_block * i_sb; /* pointer ke superblock */
struct wait_queue * i_wait; /* antrian tunggu */
struct file_lock * i_flock; /* penguncian file */
struct vm_area_struct * i_mmap; /* area memori */
struct inode * i_next, * i_prev; /* inode-linking */
struct inode * i_hash_next, * i_hash_prev;
struct inode * i_bound_to, * i_bound_by;
struct inode * i_mount; /* inode yg sedang di-mount */
struct socket * i_socket; /* manajemen socket */
unsigned short i_count; /* counter jumlah referensi */
unsigned short i_wcount; /* nomor persetujuan aksi tulis */
unsigned short i_flags; /* flags (= i_sb->s_flags) */
unsigned char i_lock; /* penguncian */
unsigned char i_dirt; /* penanda jika inode mengalami perubahan */
unsigned char i_pipe; /* penanda jika inode merepresentasikan pipe */
unsigned char i_sock; /* penanda jika inode merepresentasikan socket */
unsigned char i_seek; /* tidak dipakai */
unsigned char i_update; /* apakah inode adalah inode aktif? */
union {
struct pipe_inode_info pipe_i;
struct minix_inode_info minix_i;
...
void *generic_ip;
} u; /* informasi khusus untuk filesystem */
};

Struktur List of Inode,
struct inode * inode, * next;
next = first_inode;
for(i = nr_inodes; i>0; i--){
inode = next;
next = inode->i_next;
...
}
inline struct inode * iget(struct super_block *sb, int nr)
{
return __iget(sb, nr, 1);
}
struct inode *__iget(struct super_block * sb, int nr, int crossmntp);
void iput(struct inode * inode);

Operasi pada Inode,
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**);
int (*bmap) (struct inode *, int);
void (*truncate) (struct inode *);
int (*permission) (struct inode *, int);
int )*smap) (struct inode *, int);
);

Struktur file,
berisi gambaran dari proses pada file (yang ditunjukkan oleh inode), termasuk mode yang
bisa digunakan untuk mengkases file, atau operasi I/O yang terjadi pada file.
struct file {
mode_t f_mode; /* tipe akses */
loff_t f_pos; /* posisi file */
unsigned short f_flags; /* flags open() */
unsigned short f_count; /* referensi counter */
off_t f_reada; /* membaca flag depan */
struct file *f_next,*f_prev; /* link-link */
int f_owner; /* PID atau –PGRP untuk SIG10 */
struct inode *f_inode; /* inode yang terkait */
struct file_operations *f_op; /* operasi file */


unsigned long f_version; /* manajemen versi Dcache */
void *private_data; /* dibutuhkan untuk driver tty*/
};

Operasi pada file,
merupakan interface umum untuk bekerja pada file dan berisi fungsi-fungsi untuk
membuka, menutup, membaca, maupun menulis ke file. Operasi-operasi ini tidak
disertakan dalam struktur inode_operation, tapi dibuat struktur tersendiri karena
operasi-operasi ini membuat perubahan pada struktur file.
struct file_operations {
int (*lseek) (struct inode *, struct file *, off_t, int);
int (*read) (struct inode *, struct file *, off_t, int);
int (*write) (struct inode *, struct file *, off_t, int);
int (*readdir) (struct inode *, struct file *, struct dirent *, int);
int (*select) (struct inode *, struct file *, int, select_table *);
int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);
int (*mmap) (struct inode *, struct file *, struct vm_area_struct *);
int (*open) (struct inode *, struct file *);
int (*release) (struct inode *, struct file *);
int (*fsync) (struct inode *, struct file *);
int (*fasync) (struct inode *, struct file *, int);
int (*check_media_change) (dev_t);
int (*revalidate) (dev_t);
};

Struktur cache direktori,
berasal dari file sistem Ext2, sejak LINUX versi 1.1.37, ini menjadi bagian dari VFS, dan
bisa digunakan pada semua file sistem. Cache ini mengurusi entri direktori yang membantu
mempercepat akses ketika membaca direktori yang diperlukan ketika membaca file.
struct dir_cache_entry {
struct hash_list h; /* manajemen hash list */
unsigned long dev; /* nomor device */
unsigned long dir; /* nomor direktori inode */
unsigned long version; /* versi dari direktori */
unsigned long ino; /* nomor inode dari file */
unsigned char name_len; /* panjang direktori masukan */
char name[DCACHE_NAME_LEN]; /* direktori masukan */
struct dir_cache_entry ** lru_head; /* pointer ke head dari list */
struct dir_cache_entry * next_lru,
* prev_lru; /* link dalam bentuk list */
};





DAFTAR PUSTAKA
Langeveld, Gerlof . 2003. Linux Kernel Internals : The File Subsystem. Nijemegen : AT Computing.
Gabungan Kelompok Kerja 21–28 IKI-20230. 2003. Sistem Operasi. Jakarta : Fasilkom UI.
Bar, Moshe. 2001. Linux File System. McGraw – Hill.
Introduction to Linux. www.faqs.org/docs/linux_intro.

0 komentar:

Posting Komentar