Flash_D Acewell

"Jangan pernah berhenti bermimpi dan berusahalah agar mimpi itu tercapai"

Konsep Dasar

Seperti yang telah kita ketahui, komputer dapat menyimpan informasi ke beberapa media penyimpanan yang berbeda, seperti magnetic disks, magnetic tapes, dan optical disks. Agar komputer dapat digunakan dengan nyaman, sistem operasi menyediakan sistem penyimpanan dengan sistematika yang seragam. Sistem Operasi mengabstraksi properti fisik dari media penyimpanannya dan mendefinisikan unit penyimpanan logis, yaitu berkas. Berkas dipetakan ke media fisik oleh sistem operasi. Media penyimpanan ini umumnya bersifat nonvolatile , sehingga kandungan di dalamnya tidak akan hilang jika terjadi gagal listrik maupun system reboot.
Berkas adalah kumpulan informasi berkait yang diberi nama dan direkam pada penyimpanan sekunder. Dari sudut pandang pengguna, berkas merupakan bagian terkecil dari penyimpanan logis, artinya data tidak dapat ditulis ke penyimpanan sekunder kecuali jika berada di dalam berkas. Biasanya berkas merepresentasikan program(baik source maupun bentuk objek) dan data. Data dari berkas dapat bersifat numerik, alfabetik, alfanumerik, ataupun biner. Format berkas juga bisa bebas, misalnya berkas teks, atau dapat juga diformat pasti. Secara umum, berkas adalah urutan bit, byte, baris, atau catatan yang didefinisikan oleh pembuat berkas dan pengguna.
Informasi dalam berkas ditentukan oleh pembuatnya. Ada banyak beragam tipe informasi yang dapat disimpan dalam berkas. Hal ini disebabkan oleh struktur tertentu yang dimiliki oleh berkas, sesuai dengan tipenya masing-masing. Contohnya:
  • Text file; yaitu urutan karakter yang disusun ke dalam baris-baris.
  • Source file; yaitu urutan subroutine dan fungsi, yang nantinya akan dideklarasikan.
  • Object file; merupakan urutan byte yang diatur ke dalam blok-blok yang dikenali oleh linker dari sistem.
  • Executable file; adalah rangkaian code section yang dapat dibawa loader ke dalam memori dan dieksekusi.

Atribut Pada Berkas

Berkas diberi nama, untuk kenyamanan bagi pengguna, dan untuk acuan bagi data yang terkandung di dalamnya. Nama berkas biasanya berupa string atau karakter. Beberapa sistem membedakan penggunaan huruf besar dan kecil dalam penamaan sebuah berkas, sementara sistem yang lain menganggap kedua hal di atas sama.Ketika berkas diberi nama, maka berkas tersebut akan menjadi mandiri terhadap proses, pengguna, bahkan sistem yang membuatnya.
Atribut berkas terdiri dari:
  • Nama; merupakan satu-satunya informasi yang tetap dalam bentuk yang bisa dibaca oleh manusia (human-readable form)
  • Type; dibutuhkan untuk sistem yang mendukung beberapa type berbeda
  • Lokasi; merupakan pointer ke device dan ke lokasi berkas pada device tersebut
  • Ukuran(size); yaitu ukuran berkas pada saat itu, baik dalam byte, huruf, ataupun block
  • Proteksi; adalah informasi mengenai kontrol akses, misalnya siapa saja yang boleh membaca, menulis, dan mengeksekusi berkas
  • Waktu, tanggal dan identifikasi pengguna; informasi ini biasanya disimpan untuk:
    • pembuatan berkas
    • modifikasi terakhir yang dilakukan pada berkas, dan
    • penggunaan terakhir berkas
Data-data tersebut dapat berguna untuk proteksi, keamanan, dan monitoring penggunaan dari berkas.
Informasi tentang seluruh berkas disimpan dalam struktur direktori yang terdapat pada penyimpanan sekunder. Direktori, seperti berkas, harus bersifat nonvolatile , sehingga keduanya harus disimpan pada sebuah device dan baru dibawa bagian per bagian ke memori pada saat dibutuhkan.

Operasi Pada Berkas

Sebuah berkas adalah tipe data abstrak. Untuk mendefinisikan berkas secara tepat, kita perlu melihat operasi yang dapat dilakukan pada berkas tersebut. Sistem operasi menyediakan system calls untuk membuat, membaca, menulis, mencari, menghapus, dan sebagainya. Berikut dapat kita lihat apa yang harus dilakukan sistem operasi pada keenam operasi dasar pada berkas.
  • Membuat sebuah berkas: Ada dua cara dalam membuat berkas. Pertama, tempat baru di dalam sistem berkas harus di alokasikan untuk berkas yang akan dibuat. Kedua, sebuah direktori harus mempersiapkan tempat untuk berkas baru, kemudian direktori tersebut akan mencatat nama berkas dan lokasinya pada sistem berkas.
  • Menulis pada sebuah berkas: Untuk menulis pada berkas, kita menggunakan system call beserta nama berkas yang akan ditulisi dan informasi apa yang akan ditulis pada berkas. Ketika diberi nama berkas, sistem mencari ke direktori untuk mendapatkan lokasi berkas. Sistem juga harus menyimpan penunjuk tulis pada berkas dimana penulisan berikut akan ditempatkan. Penunjuk tulis harus diperbaharui setiap terjadi penulisan pada berkas.
  • Membaca sebuah berkas: Untuk dapat membaca berkas, kita menggunakan system call beserta nama berkas dan di blok memori mana berkas berikutnya diletakkan. Sama seperti menulis, direktori mencari berkas yang akan dibaca, dan sistem menyimpan penunjuk baca pada berkas dimana pembacaan berikutnya akan terjadi. Ketika pembacaan dimulai, penunjuk baca harus diperbaharui. Sehingga secara umum, suatu berkas ketika sedang dibaca atau ditulis, kebanyakan sistem hanya mempunyai satu penunjuk, baca dan tulis menggunakan penunjuk yang sama, hal ini menghemat tempat dan mengurangi kompleksitas sistem.
  • Menempatkan kembali sebuah berkas: Direktori yang bertugas untuk mencari berkas yang bersesuaian, dan mengembalikan lokasi berkas pada saat itu. Menempatkan berkas tidak perlu melibatkan proses I/O. Operasi sering disebut pencarian berkas.
  • Menghapus sebuah berkas: Untuk menghapus berkas kita perlu mencari berkas tersebut di dalam direktori. Setelah ditemukan kita membebaskan tempat yang dipakai berkas tersebut (sehingga dapat digunakkan oleh berkas lain) dan menghapus tempatnya di direktori.
  • Memendekkan berkas: Ada suatu keadaan dimana pengguna menginginkan atribut dari berkas tetap sama tetapi ingin menghapus isi dari berkas tersebut. Fungsi ini mengijinkan semua atribut tetap sama tetapi panjang berkas menjadi nol, hal ini lebih baik dari pada memaksa pengguna untuk menghapus berkas dan membuatnya lagi.
Enam operasi dasar ini sudah mencakup operasi minimum yang di butuhkan. Operasi umum lainnya adalah menyambung informasi baru di akhir suatu berkas, mengubah nama suatu berkas, dan lain-lain. Operasi dasar ini kemudian digabung untuk melakukan operasi lainnya. Sebagai contoh misalnya kita menginginkan salinan dari suatu berkas, atau menyalin berkas ke peralatan I/O lainnya seperti printer, dengan cara membuat berkas lalu membaca dari berkas lama dan menulis ke berkas yang baru.
Hampir semua operasi pada berkas melibatkan pencarian berkas pada direktori. Untuk menghindari pencarian yang lama, kebanyakan sistem akan membuka berkas apabila berkas tersebut digunakan secara aktif. Sistem operasi akan menyimpan tabel kecil yang berisi informasi semua berkas yang dibuka yang disebut “tabel berkas terbuka”. Ketika berkas sudah tidak digunakan lagi dan sudah ditutup oleh yang menggunakan, maka sistem operasi mengeluarkan berkas tersebut dari tabel berkas terbuka.
Beberapa sistem terkadang langsung membuka berkas ketika berkas tersebut digunakan dan otomatis menutup berkas tersebut jika program atau pemakainya dimatikan. Tetapi pada sistem lainnya terkadang membutuhkan pembukaan berkas secara tersurat dengan system call (open) sebelum berkas dapat digunakan.
Implementasi dari buka dan tutup berkas dalam lingkungan dengan banyak perngguna seperti UNIX, lebih rumit. Dalam sistem seperti itu pengguna yang membuka berkas mungkin lebih dari satu dan pada waktu yang hampir bersamaan. Umumnya sistem operasi menggunakan tabel internal dua level. Ada tabel yang mendata proses mana saja yang membuka berkas tersebut, kemudian tabel tersebut menunjuk ke tabel yang lebih besar yang berisi informasi yang berdiri sendiri seperti lokasi berkas pada disk, tanggal akses dan ukuran berkas. Biasanya tabel tersebut juga memiliki data berapa banyak proses yang membuka berkas tersebut.
Jadi, pada dasarnya ada beberapa informasi yang terkait dengan pembukaan berkas yaitu:
  • Penunjuk Berkas: Pada sistem yang tidak mengikutkan batas berkas sebagai bagian dari system call baca dan tulis, sistem tersebut harus mengikuti posisi dimana terakhir proses baca dan tulis sebagai penunjuk. Penunjuk ini unik untuk setiap operasi pada berkas, maka dari itu harus disimpan terpisah dari atribut berkas yang ada pada disk.
  • Penghitung berkas yang terbuka: Setelah berkas ditutup, sistem harus mengosongkan kembali tabel berkas yang dibuka yang digunakan oleh berkas tadi atau tempat di tabel akan habis. Karena mungkin ada beberapa proses yang membuka berkas secara bersamaan dan sistem harus menunggu sampai berkas tersebut ditutup sebelum mengosongkan tempatnya di tabel. Penghitung ini mencatat banyaknya berkas yang telah dibuka dan ditutup, dan menjadi nol ketika yang terakhir membaca berkas menutup berkas tersebut barulah sistem dapat mengosongkan tempatnya di tabel.
  • Lokasi berkas pada disk: Kebanyakan operasi pada berkas memerlukan sistem untuk mengubah data yang ada pada berkas. Informasi mengenai lokasi berkas pada disk disimpan di memori agar menghindari banyak pembacaan pada disk untuk setiap operasi.
Beberapa sistem operasi menyediakan fasilitas untuk memetakan berkas ke dalam memori pada virtual-memory systems . Hal tersebut mengijinkan bagian dari berkas ditempatkan pada suatu alamat di virtual memory . Operasi baca dan tulis pada memori dengan alamat tersebut dianggap sebagai operasi baca dan tulis pada berkas yang ada di alamat tersebut. Menutup berkas mengakibatkan semua data yang ada pada alamat memori tersebut dikembalikan ke disk dan dihilangkan dari virtual memory yang digunakan oleh proses.

Tipe Berkas

Pertimbangan utama dalam perancangan sistem berkas dan seluruh sistem operasi, apakah sistem operasi harus mengenali dan mendukung tipe berkas. Jika suatu sistem operasi mengenali tipe dari berkas, maka ia dapat mengoperasikan berkas tersebut. Contoh apabila pengguna mencoba mencetak berkas yang merupakan kode biner dari program yang pasti akan menghasilkan sampah, hal ini dapat dicegah apabila sistem operasi sudah diberitahu bahwa berkas tersebut merupakan kode biner.
Teknik yang umum digunakan dalam implementasi tipe berkas adalah menambahkan tipe berkas dalam nama berkas. Nama dibagi dua, nama dan akhiran (ekstensi), biasanya dipisahkan dengan karakter titik. Sistem menggunakan akhiran tersebut untuk mengindikasikan tipe berkas dan tipe operasi yang dapat dilakukan pada berkas tersebut. Sebagai contoh hanya berkas yang berakhiran .bat , .exe atau .com yang bisa dijalankan (eksekusi). Program aplikasi juga menggunakan akhiran tersebut untuk mengenal berkas yang dapat dioperasikannya. Akhiran ini dapat ditimpa atau diganti jika diperbolehkan oleh sistem operasi.
Beberapa sistem operasi menyertakan dukungan terhadap akhiran, tetapi beberapa menyerahkan kepada aplikasi untuk mengatur akhiran berkas yang digunakan, sehingga tipe dari berkas dapat menjadi petunjuk aplikasi apa yang dapat mengoperasikannya.
Sistem UNIX tidak dapat menyediakan dukungan untuk akhiran berkas karena menggunakan angka-angkaajaib yang disimpan di depan berkas untuk mengenali tipe berkas. Tidak semua berkas memiliki angka ini, jadi sistem tidak bisa bergantung pada informasi ini. Tetapi UNIX memperbolehkan akhiran berkas tetapi hal ini tidak dipaksakan atau tergantung sistem operasi, kebanyakan hanya untuk membantu pengguna mengenali tipe isi dari suatu berkas.
Tabel 5-1. Tabel Tipe Berkas

berkas1.JPG

Struktur Berkas

Kita juga dapat menggunakan tipe berkas untuk mengidentifikasi struktur dalam dari berkas. Berkas berupa source dan objek memiliki struktur yang cocok dengan harapan program yang membaca berkas tersebut. Suatu berkas harus memiliki struktur yang dikenali oleh sistem operasi. Sebagai contoh, sistem operasi menginginkan suatu berkas yang dapat dieksekusi memiliki struktur tertentu agar dapat diketahui dimana berkas tersebut akan ditempatkan di memori dan di mana letak instruksi pertama berkas tersebut. Beberapa sistem operasi mengembangkan ide ini sehingga mendukung beberapa struktur berkas, dengan beberapa operasi khusus untuk memanipulasi berkas dengan struktur tersebut.
Kelemahan memiliki dukungan terhadap beberapa struktur berkas adalah: Ukuran dari sistem operasi dapat menjadi besar, jika sistem operasi mendefinisikan lima struktur berkas yang berbeda maka ia perlu menampung kode untuk yang diperlukan untuk mendukung semuanya. Setiap berkas harus dapat menerapkan salah satu struktur berkas tersebut. Masalah akan timbul ketika terdapat aplikasi yang membutuhkan struktur informasi yang tidak didukung oleh sistem operasi tersebut.
Beberapa sistem operasi menerapkan dan mendukung struktur berkas sedikit struktur berkas. Pendekatan ini digunakan pada MS-DOS dan UNIX. UNIX menganggap setiap berkas sebagai urutan 8-bit byte, tidak ada interpretasi sistem operasi terhadap dari bit-bit ini. Skema tersebut menawarkan fleksibilitas tinggi tetapi dukungan yang terbatas. Setiap aplikasi harus menambahkan sendiri kode untuk menerjemahkan berkas masukan ke dalam struktur yang sesuai. Walau bagaimana pun juga sebuah sistem operasi harus memiliki minimal satu struktur berkas yaitu untuk berkas yang dapat dieksekusi sehingga sistem dapat memuat berkas dalam memori dan menjalankannya.
Sangat berguna bagi sistem operasi untuk mendukung struktur berkas yang sering digunakan karena akan menghemat pekerjaan pemrogram. Terlalu sedikit struktur berkas yang didukung akan mempersulit pembuatan program, terlalu banyak akan membuat sistem operasi terlalu besar dan pemrogram akan bingung.

Struktur Berkas Pada Disk

Menempatkan batas dalam berkas dapat menjadi rumit bagi sistem operasi. Sistem disk biasanya memiliki ukuran blok yang sudah ditetapkan dari ukuran sektor. Semua I/O dari disk dilakukan dalam satuan blok dan semua blok (‘physical record’) memiliki ukuran yang sama. Tetapi ukuran dari ‘physical record’ tidak akan sama dengan ukuran ‘logical record’. Ukuran dari ‘logical record’ akan bervariasi. Memuatkan beberapa ‘logical record’ ke dalam ‘physical record’ merupakan solusi umum dari masalah ini.
Sebagai contoh pada sistem operasi UNIX, semua berkas didefinisikan sebagai kumpulan byte. Setiap byte dialamatkan menurut batasnya dari awal berkas sampai akhir. Pada kasus ini ukuran ‘logical record’ adalah 1 byte. Sistem berkas secara otomatis memuatkan byte-byte tersebut kedalam blok pada disk.
Ukuran ‘logical record’, ukuran blok pada disk, dan teknik untuk memuatkannya menjelaskan berapa banyak ‘logical record’ dalam tiap- tiap ‘physical record’. Teknik memuatkan dapat dilakukan oleh aplikasi pengguna atau oleh sistem operasi.
Berkas juga dapat dianggap sebagai urutan dari beberapa blok pada disk. Konversi dari ‘logical record’ ke ‘physical record’ merupakan masalah perangkat lunak.
Tempat pada disk selalu berada pada blok, sehingga beberapa bagian dari blok terakhir yang ditempati berkas dapat terbuang. Jika setiap blok berukuran 512 byte, sebuah berkas berukuran 1.949 byte akan menempati empat blok (2.048 byte) dan akan tersisa 99 byte pada blok terakhir. Byte yang terbuang tersebut dipertahankan agar ukuran dari unit tetap blok bukan byte disebut fragmentasi dalam disk. Semua sistem berkas pasti mempunyai fragmentasi dalam disk, semakin besar ukuran blok akan semakin besar fragmentasi dalam disknya.

Penggunaan Berkas Secara Bersama-sama

Konsistensi semantik adalah parameter yang penting untuk evaluasi sistem berkas yang mendukung penggunaan berkas secara bersama. Hal ini juga merupakan karakterisasi dari sistem yang menspesifikasi semantik dari banyak pengguna yang mengakses berkas secara bersama-sama. Lebih khusus, semantik ini seharusnya dapat menspesifikasi kapan suatu modifikasi suatu data oleh satu pengguna dapat diketahui oleh pengguna lain. Terdapat beberapa macam konsistensi semantik. Di bawah ini akan dijelaskan kriteria yang digunakan dalam UNIX.
Berkas sistem UNIX mengikuti konsistensi semantik :
  • Penulisan ke berkas yang dibuka oleh pengguna dapat dilihat langsung oleh pengguna lain yang sedang mengakses ke berkas yang sama.
  • Terdapat bentuk pembagian dimana pengguna membagi pointer lokasi ke berkas tersebut. Sehingga perubahan pointer satu pengguna akan mempengaruhi semua pengguna sharingnya.
read more "Mengenal Sistem Berkas (Media Penyimpanan) Bag. 1"

I. Array
Array/Larik adalah struktur data yang mengacu pada sebuah/sekumpulan elemen yang diakses melalui indeks dan merupakan tipe terstruktur yang mempunyai komponen jumlah yang tetap dan setiap komponen mempunyai tipe data yang sama. Posisi masing-masing komponen dalam larik dinyatakan sebagai nomor index.
Setiap elemen larik dapat diakses melalui indeksnya, misalnya mengisi elemen larik yang ke 3 dengan nilai 100, maka cara mengisinya adalah  A[3] ← 100. Contoh Larik bernama A dengan 8 buah elemen dapat dilihat pada gambar berikut ini :
1 2 3 4 5 6 7 8
Elemen Larik : A[1], A[2], A[3], A[4], A[5], A[6], A[7], A[8]
Indeks Larik : 1, 2, 3, 4, 5, 6, 7, 8
Mengisi elemen larik : A[3] ← 100
Keuntungan struktur data larik adalah :
1. Paling mudah pengoperasiannya
2. Ekonomis dalam pemakaian memori, bila semua elemen terisi
3. Akses ke setiap elemen memerlukan waktu yang sama
Bentuk umum dari deklarasi tipe larik adalah :
type pengenal = array [tipe_index] of tipe;
dengan pengenal : nama tipe data
tipe_index : tipe data untuk nomor index
tipe : tipe data komponen
Parameter  tipe_index menentukan banyaknya komponen larik tersebut. Parameter ini boleh berupa sembarang tipe ordinal kecuali longint dan subjangkauan dari longint. Sebelum elemen larik dapat dipergunakan, perlu didefinisikan dahulu pada kamus data sebagai sebagai berikut :
Nama  : array [1..400] of string {larik dengan tipe data string}
Panjang : array [a..e] of real {larik dengan tipe data real}
Type TITIK: record
Kurva : array [0..30] of Titik {larik dengan tipe data record}
Hal-hal yang perlu diperhatikan bahwa : Elemen larik harus memiliki tipe data yang sama atau sejenis (homogen), seperti integer, real, char, string, boolean, record. Artinya larik tersebut didefinisikan sebagai integer maka nilai yang boleh masuk ke dalam elemen larik harus bertipe integer. Dan indeks larik harus memiliki tipe data yang menyatakan keterurutan, seperti integer atau karakter. Sebagai contoh, deklarasi :
type Vek = array [1..100] of integer;
Menunjukkan bahwa Vek adalah tipe data yang berupa larik yang komponennya bertipe integer dan banyaknya 100 buah. Deklarasi yang demikian ini disebut deklarasi larik dimensi satu, yang dalam hal ini dapat disebut vektor. Jika tipe komponen juga berupa sebuah larik lain, akan kita peroleh larik dimensi banyak. Sebagai contoh, deklarasi :
type Tbl = array [1..100] of array [1..5] of real ;
Menunjukkan bahwa Tbl adalah vektor yang terdiri dari 100 komponen, dengan tipe komponennya adalah sebuah vektor lain yang mempunyai 5 komponen dan bertipe real. Bentuk ini juga disebut dengan larik dimensi dua, yang dalam hal ini dapat disebut sebagai  tabel atau matrix. Deklarasi diatas bisa disingkat menjadi :
type Tbl = array [1..100 , 1..5] of real ;
Contoh lain misalnya :
type Ngawur  = array [boolean, 1..100, 1..5] of char;
Deklarasi diatas disebut deklarasi larik dimensi 3. Ada beberapa pemrosesan yang dapat dilakukan terhadap larik. Algoritma yang paling mudah untuk melakukan pemrosesan yaitu dengan menggunakan bentuk pengulangan For-todo dengan alasan bahwa elemen larik memiliki indeks yang terurut. Berikut salah satu pola untuk memproses larik. Program Proses_Larik
Const : N =10  {jumlah elemen larik}
Indeks : Integer
A : array [1..N] of integer {deklarasi larik A dengan tipe data integer}
For Indeks ← 1 to N do
PROSES LARIK
Proses Larik bisa diganti dengan proses lainnya, misal :
1.        Mengisi elemen larik dengan 0 (inisialisasi)
2.        Mengisi elemen larik dari piranti masukan
3.       Mencetak elemen larik ke piranti keluaran
Proses Larik dapat dimodifikasi untuk proses berikut, misal :
1.       Mencari bilangan maksimum/minimum pada larik
2.       Menjumlahkan nilai seluruh elemen larik
3.       Membuat rata-rata nilai seluruh elemen larik
4.       Mencari nilai tertentu pada larik
Untuk mengetahui jumlah elemen suatu larik dapat dihitung dengan rumus sebagai berikut :
Panjang = UB – LB + 1
dimana ;
UB : Upper Bound (indeks terbesar)
LB : Lower Bound (indeks terkecil)
Penyimpanan elemen larik di dalam memori komputer disusun berurutan sehingga komputer tidak perlu menentukan setiap elemen larik tetapi cukup menyimpan alamat awal/pertamanya. Berikut ini cara menentukan lokasi/alamat elemen larik dengan indeks tertentu :
LOK(LA[K]) = Awal(LA) + W(K-LB)
dimana;
LOK(LA[K])  : lokasi elemen larik dengan indeks K, yang dicari
K : Indeks larik yang dicari
Awal (LA) : Lokasi awal dari larik
W : Jumlah byte untuk menyimpan 1 elemen larik
LB : Lower Bound / Batas bawah
II. Record
Sama halnya dengan larik, rekaman  (record) adalah kumpulan data. Perbedaan antara larik dengan rekaman adalah bahwa dalam larik semua elemennya harus bertipe sama. Tetapi dalam rekaman setiap elemen bisa mempunyai tipe data yang berbeda satu sama lain. Dalam aktivitas sehari-hari pemakaian rekaman lebih banyak digunakan dibanding dengan larik. Beberapa contoh pemakaian misalnya rekaman data akademis mahasiswa, rekaman gaji pegawai, persediaan barang dalam gudang dan lain-lain.
Rekaman dapat muncul dalam berbagai bentuk, misalnya informasi yang tertulis pada kartu dan tersimpan dalam sebuah kotak; sebagai informasi yang diketikkan lewat terminal komputer dan tersimpan dalam  harddisk. Biasanya rekaman-rekaman dalam komputer tersimpan dalam bentuk berkas (file) yang tak gayut terhadap program yang menggunakannya.
Bentuk umum deklarasi rekaman adalah :
type pengenal = record
medan1  : tipe1;
medan2  : tipe2;
.
.
.
medan3  : tipen
                       end;
dengan  pengenal : pengenal yang menunjukkan tipe data yang akan dideklarasikan medan1, … , medann : nama medan yang akan digunakan tipe1, … , tipen : sembarang tipe data yang telah dideklarasikan sebelumnya. Berikut adalah contoh deklarasi rekaman.
Type Tgl_kalender = record
Tanggal :  1..31;
Bulan  :  1..12;
Tahun  :  1900..2000
     end;
      Siswa = record
Nama  : string [25] ;
Alamat : string [35] ;
Kelamin : (L,P) ;
Kelas : 1..6
        end;
Dalam contoh-contoh di atas, rekaman mempunyai medan-medan yang tetap. Ada kalanya diperlukan suatu bentuk rekaman yang salah satu medannya bisa bervariasi tergantung dari kebutuhan. Rekaman yang demikian disebut dengan rekaman bebas (variant record).
Bentuk umum rekaman bebas adalah :
Type pengenal = record
{* bagian tetap *}
Medan1 : tipe1;
Medan2 : tipe2;
.
.
.
Medann : tipen;
{* bagian bebas *}
Case tag : tipe_tag of
Label1 : (medan : tipe:
. 
. 
. 
  medan : tipe);
Label2 : (medan : tipe:
. 
. 
. 
  medan : tipe);
Label3 : (medan : tipe:
. 
. 
. 
  medan : tipe);
dengan medan, medan1, medan2, …: nama medan rekaman.
tipe, tipe1, tipe2, … : tipe data medan.
tag : pengenal untuk pemilihan kasus.
tipe_tag : tipe data dari pengenal untuk pemilihan kasus
label1, label2, label3, … : nama label yang menunjukkan kasus yang dipilih.
Dari bentuk umum di atas bisa anda lihat bahwa rekaman bebas terbagi menjadi dua bagian, yaitu bagian tetap dan bagian bebas, yaitu bagian yang akan dipilih sesuai dengan kasus yang dihadapi. Medan dalam bagian bebas sering disebut dengan tag field.
Untuk  tag field dari bentuk umum di atas, yang diawali dengan kata baku  case, ada beberapa aturan yang perlu diikuti, yaitu :
1.        Nilai dari tag field diantara case dan of menentukan struktur yang akan digunakan untuk keseluruhan rekaman. Tag field mempunyai dua komponen, yaitu pengenal medan yang menyimpan nilai  tag field dan tipe data yang menunjukkan semua kemungkinan nilai tag field.
2.        Semua kemungkinan nilai  tag digunakan sebagai label dalam bagian statemen case. Jika terdapat beberapa label maka dipisah dengan tanda koma. Struktur rekaman yang akan dipilih tergantung dari nilai tag.
3.        Setiap struktur bebas harus ditulis di dalam tanda kurung. Semua yang ditulis di dalam tanda kurung menggunakan aturan yang sama seperti halnya pada bagian tetap. Juga dimungkinkan adanya bagian bebas dalam bagian bebas yang lain (nested variant).
4.       Sebuah statemen end menutup bagian tetap dan bagian bebas dari definisi rekaman bebas.
Contoh rekaman bebas misalnya :
type Status = (T,P,J);
       Gaji = record
Nama_Pegawai :  string[25];
Nomor_Identitas:  string[10];
Bagian :  string[15];
case Stat_Peg : Status of
T : (Gaji :  integer);
P : (Gaji_Per_Jam, Jumlah_Jam_Lembur, Max_Jam_Minggu, Lembur : integer);
J : (Upah_Per_Jam, Jumlah_Jam_Kerja, Jam_Lembur : integer);
                 end;
Deklarasi di atas juga bisa ditulis sebagai :
type Gaji = record
Nama_Pegawai :  string[25];
Nomor_Identitas :  string[10];
Bagian :  string[15];
case Stat_Peg : (T,P,J) of
.
.
.
Perhatikan bahwa tipe data tag bisa langsung ditulis di belakang nama tag field. Untuk memanipulasi medan pada suatu rekaman, harus ditulis dengan menggunakan bentuk umum :
nama_rekaman.nama_medan
Notasi di atas disebut penanda medan  (field designator). Sebagai contoh, untuk rekaman bertipe Siswa yang dideklarasikan pada contoh di atas dan deklarasi :
Var Murid : Siswa;
Kita bisa membaca medan Nama dan Alamat menggunakan statemen ;
readln (Murid.Nama) ;
readln (Murid.Alamat) ;
Ada cara yang lebih singkat dari cara di atas, khususnya jika harus mengakses sejumlah medan dalam saat yang bersamaan. Untuk itu kita bisa menggunakan statemen with. Bentuk umum statemen with adalah :
with nama_rekaman do
dengan nama_rekaman adalah nama rekaman yang akan diakses.
Dengan menggunakan deklarasi rekaman bertipe Siswa, dan statemen with, maka kita bisa mengakses rekaman murid sebagai berikut :
with Murid do
begin
readln (Nama);
readln (Alamat);
readln (Kelas);
readln (Kode_Sex);
if Kode_Sex = 1 then Kelamin := L
else Kelamin := P
end;
Cara di atas akan sama hasilnya jika ditulis secara lengkap sebagai berikut :
readln (Murid.Nama);
readln (Murid.Alamat);
readln (Murid.Kelas);
readln (Kode_Sex);
if Kode_Sex = 1 then Murid.Kelamin := L
else Murid.Kelamin := P
read more "ARRAY dan RECORD"

SMK DARUT TAQWA 2011

 $ mkdir /home/smkdt/repo
Copikan isi folder i586 ke /home/smkdt/repo
 $ su
pasword: 123456
 yast => software => software repositories => /home/smkdt/repo

IP ADDRESS

 yast => network devices => network settings => overview
IP Address              Subnet Mask        Hostname
192.168.2.18           /24                      kira.com
IP Address              Subnet Mask        Hostname
192.168.3.18          /24                       kira.com
routing
Default Gateway
192.168.2.1
 # vi /etc/resolv.conf
tambah di bawah sendiri !
Nameserver 192.168.2.1
Nameserver 202.134.1.10
Nameserver 202.134.0.155
:wq
# rcnetwork restart
cek dengan perintah :
# ping 192.168.2.18
# ping 192.168.3.18
# ping kira.com
# ping 202.134.1.10

DNS SERVER

 # yast --r bind [Alt+A => enter]
 # yast -i bind
 # vi /etc/named.conf
zone "kira.com" in {
type master;
file "kira.com";
};
#Include “/etc/named.conf.include”;
:wq
# rcnamed restart
# vi /etc/named.conf
Include “/etc/named.conf.include”;
:wq
 # cd /var/lib/named
 # cp localhost.zone kira.com
 # vi kira.com
$TTL 1W
@ IN        SOA    www.kira.com.    root.kira.com.  (
42 ; serial (d. adams)
2D ; refresh
4H ; retry
6W ; expiry
1W ) ; minimum
                         IN   NS    192.168.2.18
                        IN   A      192.168.2.18
www                 IN   A      192.168.2.18
ftp                    IN   A      192.168.2.18
mail                 IN   A      192.168.2.18
kira.com.        IN   NS    mail.kira.com.
kira.com.         IN   MX  10 mail.kira.com.
zimbra             IN   CNAME   mail
:wq
# rcnamed restart
# nslookup www.kira.com
# ping mail.kira.com

WEB SERVER

 # yast --r apache2 [centang salah satu=>OK=> Ctrl+A=>OK]
 # yast -i apache2
 # vi /etc/apache2/default-server.conf
[ ganti Option None menjadi Option All ]
:wq
 # cd /etc/apache2/vhost.d
 # cp vhost.template www.kira.com.conf
[ ganti *:80 menjadi 192.168.2.18 ] => baris 15
[ ganti dummy-host.example.com menjadi www.kira.com ] => baris 17
[ ganti DocumentRoot dan DirectoryRoot menjadi /home/smkdt/public_html ] => baris 22 Dan => baris 93
:wq
# vi /home/smkdt/public_html/index.html
[ ketik teks yang diinginkan!! ]
:wq
# rcapache2 restart

FTP SERVER

# yast --r vsftpd [Alt+A => enter]
# yast -i vsftpd
# vi /etc/vsftpd.conf
# write_enable=YES => write_enable=YES
# ftp_banner=”Welcome...” => ftp_banner=”ketik teks terserah...”
# local_enable=YES => local_enable=YES
anonymous_enable=YES => anonymous_enable=NO
[ tambahkan teks berikut pada baris paling akhir: ]
local_root=/home/smkdt/pub
:wq
# mkdir /home/smkdt/pub
[bila muncul “/home/smkdt/pub” File exists itu artinya folder sudah ada untuk menghapusnya dengan rmdir /home/smkdt/pub dan ulangi langkah diatas]
# chmod 777 /home/smkdt/pub
# rcvsftpd restart
username: smkdt
pasword: 123456
ftp> mkdir f@ishol
ftp> ls [periksa apa sudah ada folder yang kita buat!]
ftp> quit

PROXY SERVER

# yast --r squid [Alt+A => enter]
# yast -i squid
# vi /etc/squid/squid.conf
kira2 baris (592) dan di bawah # tambah :
acl local1 src 192.168.2.0/24
acl local2 src 192.168.3.0/24
di bawah acl CONNECT method CONNECT tambah : [baris 605]
acl blok url_regex -i facebook jorok haram [situs yang di blok]
kira2 (baris 664) dan di bawah # INSERT YOUR OWN RULE(S) tambahkan :
http_access allow local1 local2
http_access deny blok
http_port 3128 => http_port 3128 transparent 
cache_mgr kira@smkdt.com
visible_hostname www.smkdt.com
:wq
# vi /usr/share/squid/errors/English/ERR_ACCESS_DENIED
ganti Access denied. Dengan dilarang mengunjungi situs ini! [baris 17]
:wq
# rcsquid restart
# rcsquid stop
# squid –z

IPTABLES

# yast --r iptables [Alt+A => enter]
# yast -i iptables
# iptables -t nat -A POSTROUTING -s 192.168.3.0/24 -j MASQUERADE
# iptables -t nat -A PREROUTING -s 192.168.3.0/24 -p tcp --dport 80 -j REDIRECT --to-port 3128
# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables-save
# rcsquid start
# squid -k reconfigure

ZIMBRA

# copy zimbra-suse dan auto di =>home =>smkdt
# [mode GUI] Computer =>yast =>123456 =>software =>software management =>network =>Ctrl+A =>Install =>tekan tombol arah kebawah terus =>Apply
# [mode text] cd /home/smkdt/zimbra-suse [penulisan zimbra suse tergantung nama folder, ada yang zimbra-suse & zimbra_Suse10]
# ./install.sh -u [utk menghapus] lalu tekan Y
# ./install.sh --platform-override [utk instal] enter utk terus
=> Y => Y => Y => Y => Y => Y => Y => Y => Y => Y
# cd ..
# cd zimbra-auto
# ./setup.id.sh
=> Y => Y => kira.com => enter => 3 => 4 => 123456 => r => a => Y => Y => Y => n => enter
# zmtlsctl https
# zmcontrol stop
# zmcontrol start
# exit
read more "Panduan Konfigurasi PC Router Dengan SUSE 11.1"