NETWORK FILE SYSTEM
Iman Triwahyudi 
132 93 042

Protokol NFS
	Jika Anda menggunakan UNIX workstation, Anda akan memerlukan NFS untuk menghubungkan File system-files system yang ada. Sistem Solaris 2.5 mendukung dua versi protokol NFS. Versi 2 NFS di implementasikan pada tahun 1984 dan direlease pada SunOS 2.0. Versi 3 dibuat tahun 1992 ketika beberapa grup bergabung untuk membuatnya, dan diumumkan pada tahun 1994 pada konferensi USENIX di Boston. 
	Versi 3 ini masih baru untuk beberapa mesin, Jadi pilihannya tergantung pada pemakai, jika tidak dapat menggunakan Versi 3, maka sebagai default digunakan versi 2. 
	Ide dasar NFS cukup sederhana. Ketika kita menambahkan suatu disk pada sistem UNIX, maka kita menggabungkan disk itu pada file system yang sudah ada dengan menggunakanperintah mount. Disk yang baru membentuk cabang baru dari tiga struktur. Kita dapat berpindah ke dalamnya dengan perintah cd dan mengakses file-filenya. Dengan NFS Kita melakukan hal yang sama. Kita sebagai client, memberikan perintah mount  yang dikirimkan ke remote server, dan bagian dari struktur file system menggabungkan lokal file system. Server sekarang mempunyai daftar mesin yang diijinkan mengakses file system tersebut.
	Pada SunOS, daftar tersebut terdapat pada file yang bernama /etc/exports. Pada Solaris, daftar dikontrol  oleh perintah share, yang dapat ditemukan pada /etc/dfs/dfstab. Ketika proses pada client mengakses remote file dengan membaca system, sebagai contoh, maka panggilan sistem tersebut akan dikembalikan ke network dengan menggunakna protokol NFS. Server mengecek validitas dari request, dan menampilkan operasi yang diinginkan. 
	Sekali kita telah me-mount remote file system pada satu struktur file, kapanpun kita menginginkan file pada tempat kita melakukan mount,  sytem akan menerjemahkan perintah itu ke dalam NFS request dan mengirimkan ke network dari server. Server akan mengeksekusi permintaan tersebut dan akan mengembalikan kepada kernel. Sebagai balasannya, kernel akan memberikan resume ke proses jika permintaan itu dilayani oleh local disk.
	NFS protokol mengasumsikan bahwa server tidak menahan kondisi apapun dari client. Sebagai contoh, UNIX yang normal membaca panggilan sistem mengingan seberapa jauh proses yang berbeda harus membaca suatu file yang ditulis. Panggilan yang berurut dapat digunakan suatu file dari awal hingga akhir.  NFS akan memberikan “ dimana kita sekarang “ pada satu client, dan ketika menscan suatu file, ini merupakan kerjaan client untuk mengirimkan perintah-perintah membaca dan masing-masingnya berisi posisi dan ukuran informasi.
	Jadi dalam hal ini server tidak cerdas. Ia tidak tahu menahu tentang apa-apa ynag dilakukan user. Client melakukan beberapa hal untuk efisiensi, yaitu : mengingan posisi, dan menyimpan informasi sehingga tidak harus mengulang dengan menelusuri jaringan kembali. 
	Tujuan awal dari desain NFS serndiri adalah agar remote file system tidak harus terikat pada UNIX, sehingga tidak kaku untuk menggunakan UNIX file system. Maka tujuan untuk membuat suatu system yang  dapat mensupport berbagai tipe file sisyem yang ada telah terlaksana. 
	NFS server stateless. Karena secara sedern\hana ia mengirimkan permintaan transaksi dan melakukan proses. Setiap permintaan adalah kejadian yang independent dan secara teori, pengapdate-an file dapat terjadi dalam berbagai cara. Statelessness merupakan criteria desain asli dari NFS yang dapat mencegah dari crash recovery. Ketika server crash, client cukup menunggu sampai server kembali jalan dan meneruskan operasi. 

NFS versi 3
	Masalah terbesar dari NFS versi 2 adalah kebutuhan server NFS untuk melakukan penulisan secara sinkron. Ketika satu client memberikan permintaan untuk menulis, ia mengirimkan satu RPC yang mengatakan “ Tulis data ini pada posisi ini dan ini pada file. Server tidak dapat membalas RPC ini dengan menjawab “dane” sampay data benar-benar telah tersimpan pada media penyimpanan yang aman, antara lain Hardisk ataupun magnetik disk.  Jika dikatakan “OK” ketika ia masih ada di memory dan tiba-tiba sistem crash. sebelum sempat menulisnya ke dalam media penyimpanan, maka kemudian file berada dalam kondisi yang tidak konsisten karena client mengira bahwa ia menulis data yang sebenarnya tidak ada pada disk. Server harus melakukan penulisan  dan tidak mengembalikan hasilnya sampai data benar-benar telah tertulis pada disk. Client harus menunggu sampai operasi write telah selesai. 
	Hal ini menghasilkan bottle neck  untuk pengimplementasian NFS. Beberapa sistem memberikan kondisi tidak aman untuk mode menulis dimana data ditahan pada memori server dan harapan client untuk tidak sering terjadi crash. 
	Saat ini data ditulis pada disk. Sehingga jika sistem crash sistem akan menuliskan data yang belum senpat di save sebelum melakukan bootstraping. 
	Versi 3 meningkatkan performansi dengan mengijinkan client untuk memilih transaksi asyncronous dan kemudian mengirimkan perintah yang mengatakan “ ok dan tulis data pada disk”. Operasinya dipenuhi dengan “ write verifier” . 
	Versi 3 mengijinkan NFS menggunakan hubungan TCP/IP pada remote machine dibandingkan dengan menggunakan UDP. Penggunaan UDP justru kemunduran karena kelambatannya. Pemikiran bahwa TCP/IP menyebabkan terlalu banyak protokol yang tidak digunakna dan otomatis akan menurunkan kecepatan operasi NFS. dDisainer NFS kemudian menemukan bahwa ada kebutuhan untuk memberikan banyak layanan dari TCP/IP, seperti reliability, error recovery, congestion control, timeout dan seterusnya. Kode UDP menjadi dapat diimplementasikan pada aspek tertentu dari TCP/IP. Agar adil, kecepatan meningkat dengan meningkatnya kecepatan prosesor dimana disain NFS yang asli membuat protokol TCP semakin efisien.
	Versi 3 memiliki tambahan performansi dengan mengurangi protokol yang menganggur ketika mengembalikan informasi direktori. Tujuannya adalah untuk mendukung pada kondisi yang sering terjadi. 
	Versi 3 menyediakan beberapa  help untuk client untuk mempunyai cache informasi yang disimpan pada server.
	Akhirnya Versi 3 support file 64-bit.
	Oleh karena itu, gunakan versi 3 jika dapat, karena keuntungan diatas, dan tentu saja semampuan internetwork pada implementasi sebelumnya juga menjadi salah satu tujuan pendesainannya.