Senin, 27 Oktober 2008

Program List Dengan Array

/*Program List Dengan Array*/
#include
#include
#define max 12
#define true 1
#define false 0
typedef struct {int info;
int next;
}typenode;

typenode elemen[max];
int list,akhirlist,kosong,akhirkosong;
int listkosong();
void buatlist();
void sisipnode(int IB);
void hapusnode(int IH);
void cetaklist();

void main()
{
buatlist();
cetaklist();
getche();
sisipnode(7);
cout << "\n\n Sisip 7 \n\n";
cetaklist();
getche();
sisipnode(30);
cout << "\n\n sisip 30 \n\n";
cetaklist();
getche();
hapusnode(7);
cout << "\n\n hapus 7 \n\n";
cetaklist();
getche();

}
void buatlist()
{ list=5;
kosong=3;
akhirlist=10;
akhirkosong=4;
elemen[1].info=25; elemen[1].next=8;
elemen[2].info=0 ; elemen[2].next=9;
elemen[3].info=0; elemen[3].next=6;
elemen[4].info=0; elemen[4].next=0;
elemen[5].info=10; elemen[5].next=7;
elemen[6].info=0; elemen[6].next=2;
elemen[7].info=15; elemen[7].next=1;
elemen[8].info=40; elemen[8].next=10;
elemen[9].info=0; elemen[9].next=4;
elemen[10].info=60; elemen[10].next=0;
}

int listkosong()
{ if (list==0)
return(true);
else
return(false);
}

void sisipnode(int IB)
{ int listbaru,k,m,n,x;
//-------------------------- sisip di awal
if(IB {listbaru=kosong;
kosong=elemen[kosong].next;
elemen[listbaru].info=IB;
elemen[listbaru].next=list;
list=listbaru;
}
else
//-------------------------sisip di akhir
if(IB>elemen[akhirlist].info)
{listbaru=kosong;
kosong=elemen[kosong].next;
elemen[listbaru].info=IB;
elemen[listbaru].next=0;
elemen[akhirlist].next=listbaru;
akhirlist=listbaru;
}
else
//--------------------------sisip di tengah
{n=list;
x=elemen[n].info;
while(IB>x)
{m=n;
n=elemen[n].next;
x=elemen[n].info;
}
k=elemen[kosong].next;
elemen[m].next=kosong;
elemen[kosong].info=IB;
elemen[kosong].next=n;
kosong=k;
}
}
void cetaklist()
{ int n,m;
n=list;
m=kosong;
cout << "isi list : \n";
do{
cout << elemen[n].info << " ";
n=elemen[n].next;
}while (elemen[n].next!=0);
cout << " "<< elemen[akhirlist].info < cout << "\nIndex tempat-tempat kosong: \n";
do
{cout << m << " ";
m=elemen[m].next;
}while(elemen[m].next!=0);
cout << " " << akhirkosong;
}

void hapusnode(int IH)
{int listbaru,k;
//------------------------ hapus di awal
if(IH=elemen[list].info)
{listbaru=elemen[list].next;
k=kosong;
kosong=list;
list=listbaru;
elemen[kosong].next=k;
}
}

Minggu, 12 Oktober 2008

Sistem Berkas

SISTEM BERKAS
Oleh : La Ode Abdul Jumar

Berkas

Berkas(file) adalah kumpulan sejumlah komponen yang bertipe data sama,
yang jumlahnya tidak tertentu. Banyaknya data dalam berkas dapat ditambah jika
diperlukan. Dalam pascal berkas menyediakan data yang nantinya akan digunakan
oleh suatu program. Berkas dapat berupa disk file yang media penyimpanannya
berupa cakram magnetis, kartu plong, dan sejenisnya atau berupa piranti logika yang
sering digunakan.
Satu aspek penting dari berkas adalah bahwa data yang ada didalam berkas
bisa digunakan oleh sembarang program yang tipe datanya disesuaikan dengan
kebutuhan. Berkas tersusun dari sejumlah rekaman dimana masing-masing rekaman
tersusun atas sejumlah medan. Hubungan antara medan,rekaman dan berkas :
Dalam pascal, berkas mempunyai sifat sebagai berkas berurutan (sequential
file) dimana untuk membaca file ke 10 maka pembacaan dilakukan dari nomor ke 1,
2,3 dan seterusnya. Dalam pascal juga ada fasilitas untuk pembacaan berkas secara
acak(random file).

MENDEKLARASIKAN BERKAS
Deklarasi berkas bisa ditempatkan pada bagian deklarasi type atau pada
deklarasi var. Deklarasi berkas bisa dipastikan diwali dengan deklarasi rekaman,
bentuk umum deklarasi rekaman :
Type Pengenal = File of Pengenal1;
Jika ditempatkan dalam deklarasi Var, maka bentuknya adalah :
Var Pengenal : File of Pegenal1;
Dengan File of : Kata baku yang menunjukan bahwa pengenal adalah
bertipe data berkas (File);
Pengenal : Nama peubah yang akan dinyatakan sebagai bertipe
data File
Pegenal1 : Tipe data Komponen berkas.
Parameter Pegenal1 yang menunjukan tipe data komponen berkas disebut
tipe dasar (Base type) dari berkas.

NETWORK FILE SYSTEM

NETWORK FILE SYSTEM

Iman Triwahyudi

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.

Sistem File

SISTEM FILE

Pada proses penyimpanan dan pembacaan data bisa timbul masalah:

1. Kapasitas media penyimpanan tidak cukup (terbatas).

2. Ketika proses dihentikan, data hilang.

3. Kebutuhan mengakses data atau sebagiannya dalam waktu bersamaan.

Oleh karena itu diperlukan media penyimpanan yang :

1. Mampu menyimpan data yang besar.

2. Mampu menjaga data walaupun proses yang mengaksesnya dihentikan.

3. Proses yang bersamaan dapat mengakses data secara bersama-sama, tanpa ada yang terganggu.

Solusi untuk semua masalah tsb adalah dengan menyimpan data pada disk atau media lain dalam bentuk unit-unit yang disebut FILE. Data yang disimpan dalam bentuk file harus tetap tidak berubah ketika proses dibentuk atau dihentikan. File bisa hilang hanya ketika dihapus saja.

Sistem File adalah bagian sistem operasi yang menangani masalah file.