18.07.2013 Views

download dengan klik link ini - Komputasi

download dengan klik link ini - Komputasi

download dengan klik link ini - Komputasi

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Pengantar Sistem<br />

Operasi: Sebuah<br />

Pendekatan Praktis<br />

Dengan Menggunakan<br />

Proyek OpenSolaris<br />

Buku Pedoman Siswa<br />

Qui ckTi m e and a<br />

de com p re ssor<br />

are needed to see thi s pi cture.<br />

SunMicrosystems,Inc.<br />

4150NetworkCircle SantaClara,CA95054<br />

USA


Copyright 2007 SunMicrosystems, Inc. 4150Network Circle, Santa Clara,<br />

CA 95054 U.S.A. All rights reserved.<br />

SunMicrosystems, Inc. has intellectual property rights relating to<br />

technology embodied in the product that is described in this document.<br />

In particular, and without limitation, these intellectual property<br />

rights may include one or more U.S. patents or pending patent<br />

applications in the U.S. and in other countries.<br />

U.S. Government Rights – Commercial software. Government users are<br />

subject to the SunMicrosystems, Inc. standard license agreement and<br />

applicable provisions of the FAR and its supplements.<br />

This distribution may include materials developed by third parties.<br />

Parts of the product may be derived from Berkeley BSD systems, licensed<br />

from the University of California. UNIX is a registered trademark in<br />

the U.S. and other countries, exclusively licensed through X/Open<br />

Company, Ltd.<br />

Sun, SunMicrosystems, the Sun logo, the Solaris logo, the Java Coffee<br />

Cup logo, docs.sun.com, Java, and Solaris are trademarks or registered<br />

trademarks of SunMicrosystems, Inc. in the U.S. and other countries.<br />

All SPARC trademarks are used under license and are trademarks or<br />

registered trademarks of SPARC International, Inc. in the U.S. and<br />

other countries. Products bearing SPARC trademarks are based upon an<br />

architecture developed by Sun Microsystems, Inc.<br />

TheOPEN LOOK and SunTM Graphical User Interface was developed by<br />

SunMicrosystems, Inc. for its users and licensees. Sun acknowledges the<br />

pioneering efforts of Xerox in researching and developing the concept<br />

of visual or graphical user interfaces for the computer industry. Sun<br />

holds a non-exclusive license from Xerox to the Xerox Graphical User<br />

Interface, which license also covers Sun's licensees who implementOPEN<br />

LOOK GUIs and otherwise comply with Sun's written license agreements.<br />

Products covered by and information contained in this publication are<br />

controlled by U.S. Export Control laws and may be subject to the export<br />

or import laws in other countries.Nuclear, missile, chemical or<br />

biological weapons or nuclear maritime end uses or end users, whether<br />

direct or indirect, are strictly prohibited. Export or reexport to<br />

countries subject to U.S. embargo or to entities identified on U.S.<br />

export exclusion lists, including, but not limited to, the denied<br />

persons and specially designated nationals lists is strictly prohibited.<br />

DOCUMENTATIONIS PROVIDED “AS IS” AND ALL EXPRESSOR IMPLIED CONDITIONS,<br />

REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED WARRANTYOF<br />

MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSEORNON-INFRINGEMENT,<br />

ARE DISCLAIMED, EXCEPT TO THE EXTENT THAT SUCHDISCLAIMERS ARE HELD TO<br />

BE LEGALLY INVALID.<br />

Copyright 2007 SunMicrosystems, Inc. 4150Network Circle, Santa Clara,<br />

CA 95054 U.S.A. Tous droits réservés. SunMicrosystems, Inc. détient les<br />

droits de propriété intellectuelle relatifs à la technologie incorporée<br />

dans le produit qui est décrit dans ce document. En particulier, et ce<br />

sans limitation, ces droits de propriété intellectuelle peuvent inclure<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

i


un ou plusieurs brevets américains ou des applications de brevet en<br />

attente aux Etats-Unis et dans d'autres pays.<br />

Cette distribution peut comprendre des composants développés par des<br />

tierces personnes.<br />

Certaines composants de ce produit peuvent être dérivées du logiciel<br />

Berkeley BSD, licenciés par l'Université de Californie. UNIX est une<br />

marque déposée aux Etats-Unis et dans d'autres pays; elle est licenciée<br />

exclusivement par X/Open Company, Ltd.<br />

Sun, SunMicrosystems, le logo Sun, le logo Solaris, le logo Java Coffee<br />

Cup, docs.sun.com, Java et Solaris sont des marques de fabrique ou des<br />

marques déposées de SunMicrosystems, Inc. aux Etats-Unis et dans<br />

d'autres pays. Toutes les marques SPARC sont utilisées sous licence et<br />

sont des marques de fabrique ou des marques déposées de SPARC<br />

International, Inc. aux Etats-Unis et dans d'autres pays. Les produits<br />

portant les marques SPARC sont basés sur une architecture développée<br />

par SunMicrosystems, Inc.<br />

L'interface d'utilisation graphiqueOPEN LOOK et Sun a été développée<br />

par SunMicrosystems, Inc. pour ses utilisateurs et licenciés. Sun<br />

reconnaît les efforts de pionniers de Xerox pour la recherche et le<br />

développement du concept des interfaces d'utilisation visuelle ou<br />

graphique pour l'industrie de l'informatique. Sun détient une licence<br />

non exclusive de Xerox sur l'interface d'utilisation graphique Xerox,<br />

cette licence couvrant également les licenciés de Sun qui mettent en<br />

place l'interface d'utilisation graphiqueOPEN LOOK et qui, en outre, se<br />

conforment aux licences écrites de Sun.<br />

Les produits qui font l'objet de cette publication et les informations<br />

qu'il contient sont régis par la legislation américaine en matière de<br />

contrôle des exportations et peuvent être soumis au droit d'autres pays<br />

dans le domaine des exportations et importations. Les utilisations<br />

finales, ou utilisateurs finaux, pour des armes nucléaires, des<br />

missiles, des armes chimiques ou biologiques ou pour le nucléaire<br />

maritime, directement ou indirectement, sont strictement interdites.<br />

Les exportations ou réexportations vers des pays sous embargo des<br />

Etats-Unis, ou vers des entités figurant sur les listes d'exclusion<br />

d'exportation américaines, y compris, mais de manière non exclusive, la<br />

liste de personnes qui font objet d'un ordre de ne pas participer,<br />

d'une façon directe ou indirecte, aux exportations des produits ou des<br />

services qui sont régis par la legislation américaine en matière de<br />

contrôle des exportations et la liste de ressortissants spécifiquement<br />

designés, sont rigoureusement interdites.<br />

LADOCUMENTATIONEST FOURNIE "EN L'ETAT" ET TOUTES AUTRES CONDITIONS,<br />

DECLARATIONS ET GARANTIES EXPRESSESOUTACITES SONT FORMELLEMENT<br />

EXCLUES,DANS LA MESURE AUTORISEE PAR LA LOI APPLICABLE, Y<br />

COMPRISNOTAMMENT TOUTE GARANTIE IMPLICITE RELATIVE A<br />

LAQUALITEMARCHANDE, A L'APTITUDE A UNE UTILISATIONPARTICULIEREOUA<br />

L'ABSENCEDE CONTREFACON.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

ii


Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

iii


Daftar Isi<br />

Daftar Isi .....................................iii<br />

Apa itu Proyek OpenSolaris? ......................1<br />

Portal Regional..................................3<br />

Situs-Situs OpenSolaris..........................4<br />

Diskusi........................................5<br />

Komunitas......................................6<br />

Proyek.........................................8<br />

Repositori Kode Pemograman.....................9<br />

OpenGrok......................................10<br />

Advokasi OpenSolaris.............................11<br />

Mengapa Menggunakan OpenSolaris?................12<br />

Harga.........................................13<br />

Fitur-fitur Inti Yang Inovatif................14<br />

Kompatibilitas Balik..........................15<br />

Netralitas Platform Perangkat Keras...........16<br />

Piranti Pengembangan..........................17<br />

Pernyatan Tanda Terima Kasih....................19<br />

Mempersiapkan Lingkungan Kerja OpenSolaris......20<br />

Konfigurasi Perangkat Keras dan Perangkat Lunak.22<br />

Jaringan........................................26<br />

Daemon Auto-Configuration Jaringan..............27<br />

Tinjauan Umum Zona..............................28<br />

Adm<strong>ini</strong>strasi Zona...............................29<br />

Memulai Adm<strong>ini</strong>strasi Zona.....................31<br />

Virtualisasi Server Web <strong>dengan</strong> Zona.............35<br />

Pembuatan Zona Non-Global.....................36<br />

Pembuatan Pool Penyimpan Data dan Sistem File ZFS<br />

................................................41<br />

Membuat Pool Penyimpan Data ZFS Ter-mirror......42<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

iii


Membuat Sistem File ZFS Sebagai Direktori Kerja<br />

Pengguna........................................44<br />

Membuat Konfigurasi RAID-Z .....................48<br />

Konsolidasi Area Pengguna........................50<br />

Konsolisidasi Area Pengguna dan Deskripsinya....51<br />

Fitur Inti Sistem Operasi Solaris ...............53<br />

Proses Pengembangan dan Metode Penulisan Kode...54<br />

Tinjauan .......................................60<br />

FireEngine......................................61<br />

Sinkronisasi .................................62<br />

TCP, IP, dan UDP..............................63<br />

GLDv3.........................................64<br />

Virtualisasi..................................65<br />

Least Privilege (Hak Istimewa Terbatas).........66<br />

Filtrasi Paket..................................67<br />

Filter IP.....................................68<br />

Mengaktifkan Filtrasi Paket Sederhana.........69<br />

Beberapa Contoh Kaidah Filtrasi Paket.........70<br />

Zona (Zones)....................................73<br />

Zona Bertanda-identitas (Branded Zones - BrandZ)<br />

................................................76<br />

Jaringan Didalam Zona...........................79<br />

Identitas Zona, Akses terhadap CPU dan Instalasi<br />

Paket.........................................81<br />

Perangkat Didalam Zones.......................82<br />

Prakiraan Penyembuhan-Diri (Predictive Self-<br />

Healing)........................................83<br />

Arsitektur Manajemen Kegagalan (Fault Management<br />

Architecture - FMA)...........................84<br />

Fasilitas Manajemen Layanan (Services Management<br />

Facility - SMF)...............................86<br />

Perunut Dinamis (Dynamic Tracing - DTrace)......87<br />

Pen-debug Modular (Modular Debugger - MDB)......88<br />

Sistem File ZFS.................................89<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

iv


Penggunaan Checksum dan Perbaikan Data........90<br />

RAID-Z........................................91<br />

Konsep Pemograman................................92<br />

Manajemen Proses dan Sistem.....................93<br />

Pemograman Thread...............................96<br />

Sinkronisasi..................................99<br />

Penjadwalan CPU................................101<br />

Tinjauan Umum Kernel...........................105<br />

Perbedaan Antara Eksekusi Modul Kernel dan<br />

Program Pengguna.............................106<br />

Perbedaan Struktural antara Modul Kernel Modules<br />

dan Program Pengguna.........................108<br />

Men-debug Proses...............................110<br />

Memulai Penggunaan DTrace.......................112<br />

Mengaktifkan Probe DTrace Sederhana............113<br />

Menampilkan Probe Perunut......................116<br />

Pemograman Bahasa D............................120<br />

Men-debug Aplikasi <strong>dengan</strong> DTrace................124<br />

Mengaktifkan Probe Didalam Moda Pengguna.......125<br />

Merunut Aplikasi Dengan DTrace.................126<br />

Men-debug Aplikasi C++ <strong>dengan</strong> DTrace............131<br />

Menggunakan DTrace Untuk Men-debug dan Membuat<br />

Profil Sebuah Program C++ .....................132<br />

Manajemen Memori <strong>dengan</strong> DTrace dan MDB..........147<br />

Perangkat lunak Untuk Manajemen Memori.........148<br />

Pengujian Memori Virtual <strong>dengan</strong> DTrace dan MDB.149<br />

Men-debug Program Penggerak Perangkat Dengan DTrace<br />

................................................173<br />

Memindahkan Program Penggerak smbfs Dari Linux Ke<br />

Solaris OS.....................................174<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

v


Sumber Bacaan Tambahan OpenSolaris..............186<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

vi


Tujuan<br />

1M O D U L<br />

Apa itu Proyek OpenSolaris?<br />

Tujuan umum dari pelatihan <strong>ini</strong> adalah agar peserta<br />

memperoleh pengetahuan tentang Sistem Operasi<br />

sebagai bagian dari sistem komputasi <strong>dengan</strong><br />

memanfaatkan kode pemograman Sistem Operasi Solaris<br />

yang secara bebas bisa diperoleh melalui proyek<br />

OpenSolaris.<br />

Tip - Lakukan pendaftaran di Internet melalui situs<br />

http://get.opensolaris.org, agar secara gratis<br />

dapat menerima OpenSolaris Starter Kit yang terdiri<br />

dari materi-materi pelatihan, kode pemograman dan<br />

piranti untuk pengembangan.<br />

Di bagian awal peserta diperkenalkan bagaimana<br />

mengakses kelompok pengguna (user group), situssitus<br />

dan dokumentasi yang berhubungan <strong>dengan</strong><br />

OpenSolaris sehingga peserta dapat segera mengenal<br />

komputasi berbasis UNIX.<br />

Berikutnya disajikan dimana peserta bisa mengakses<br />

lebih jauh informasi-informasi lain yang<br />

berhubungan <strong>dengan</strong> Proyek OpenSolaris seperti kode<br />

pemograman (source code), komunitas, proyek-proyek<br />

yang sedang berjalan dan penjelajah kode pemograman<br />

(source browser).<br />

Langkah selanjutnya, peserta diperlihatkan<br />

bagaimana mengkonfigurasi zonas, ZFS, jaringan dan<br />

beberapa fitur lain. Di bagian akhir, terdapat<br />

latihan-latihan bagi peserta untuk dapat<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

1


mempelajari bagaimana menggunakan DTrace untuk mendebug<br />

proses, aplikasi, kegagalan halaman memori<br />

(page faults), dan program penggerak perangkat<br />

(drivers).<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

2


Apa itu Proyek OpenSolaris?<br />

Proyek OpenSolaris diluncurkan pada tanggal 14 Juni<br />

2005 untuk menghasilkan sebuah upaya membangun<br />

komunitas <strong>dengan</strong> menggunakan kode pemograman<br />

Solaris sebagai langkah awalnya. Proyek <strong>ini</strong><br />

merupakan sebuah tempat dimana upaya pengembangan<br />

komunitas saling terkait, tempat dimana para<br />

kontributor dari Sun dan siapa pun dapat<br />

berkolaborasi demi perkembangan dan kemajuan<br />

teknologi Sistem Operasi.<br />

Ketersediaan kode pemograman OpenSolaris dapat<br />

dimanfaatkan untuk banyak hal antara lain sebagai<br />

dasar untuk versi mendatang produk Sistem Operasi<br />

Solaris, proyek-proyek Sistem Operasi lainnya,<br />

produk pabrikan pihak-ketiga dan distribusidistribusi<br />

aplikasi yang diminati oleh komunitas.<br />

Hingga saat <strong>ini</strong>, Sun Microsystems, Inc. yang<br />

mensponsori proyek <strong>ini</strong>.<br />

Hingga 2 tahun pertama, lebih dari 60.000 peserta<br />

telah terdaftar sebagai anggota. Komunitas para<br />

rekayasawan <strong>ini</strong> terus bertumbuh dan berubah untuk<br />

memenuhi kebutuhan para pengembang perangkat lunak,<br />

sistem adm<strong>ini</strong>strator dan pengguna Sistem Operasi<br />

Solaris.<br />

Pembelajaran Sistem Operasi <strong>dengan</strong> proyek<br />

OpenSolaris memiliki banyak keuntungan dibandingkan<br />

pembelajaran instruksional:<br />

Mendapatkan akses ke kode pemograman dari Sistem<br />

Operasi Solaris 10 yang revolusioner.<br />

Mendapatkan akses ke kode pemograman dari Sistem<br />

Operasi komersial yang digunakan secara luas di<br />

banyak lingkungan bisnis kecil dan besar.<br />

Keunggulan perangkat lunak untuk melakukan<br />

observasi dan debug.<br />

Dukungan perangkat keras yang meliputi arsitektur<br />

SPARC, x86 dan x64.<br />

Kepemimpinan Solaris di lingkungan komputasi 64-<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

1


Apa itu Proyek OpenSolaris?<br />

bit.<br />

Pemanfaatan perangkat lunak tak terbatas secara<br />

gratis.<br />

Kode pemograman yang menantang, inovatif,<br />

lengkap, konsisten, tangguh dan bisa diperoleh<br />

secara bebas.<br />

Adanya CommonDevelopment and Distribution License<br />

(CDDL), sebuah aturan lisensi yang disetujui oleh<br />

OSI, yang membolehkan pemanfaatan yang bebas<br />

royaliti, modifikasi dan kegiatan ikutan lainnya<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

2


Portal Regional<br />

Portal Regional<br />

Komunitas Internationalization and Localization<br />

sebagian bagian dari Proyek OpenSolaris adalah<br />

komunitas yang bertugas membantu untuk<br />

menerjemahkan situs OpenSolaris yang berbahasa<br />

Inggris kedalam bahasa-bahasa yang lain. Sejauh<br />

<strong>ini</strong>, terdapat 8 portal <strong>dengan</strong> bahasa pengantar<br />

lokal yang masih terus dikembangkan:<br />

Portal India – http://in.opensolaris.org<br />

Portal Cina – http://cn.opensolaris.org<br />

Portal Jepang – http://jp.opensolaris.org<br />

Portal Polandia – http://pl.opensolaris.org<br />

Portal Perancis – http://fr.opensolaris.org<br />

Portal Brasil –<br />

http://opensolaris.org/os/project/br<br />

Portal Spanyol –<br />

http://opensolaris.org/os/project/es<br />

Portal berbahasa pengantar Jerman, Rusia, Repulik<br />

Czech, Spanyol, Korea dan Meksiko masih dalam<br />

status perencanaan. Kunjungi portal OpenSolaris<br />

untuk bisa ikut berpartisipasi, atau chat di salah<br />

satu dari tujuh fasiltas chat OpenSolaris <strong>dengan</strong><br />

menggunakan IRC di irc.freenode.net. Kunjungi<br />

http://opensolaris.org/os/chat/untuk informasi<br />

lebih lanjut.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

3


Situs-situs OpenSolaris<br />

Situs-Situs OpenSolaris<br />

Untuk men<strong>download</strong> kode pemograman OpenSolaris,<br />

membaca lisensi dan mengakses petunjuk bagaimana<br />

mengkonstruksi kode pemograman (building source)<br />

dan menginstal salinan file-file biner prakonstruksi<br />

yang terkompresi (arsip prakonstruksi/pre-built<br />

archive) kunjungi situs:<br />

http://www.opensolaris.org/os/<strong>download</strong>s.<br />

Ikon-ikon di kanan-atas halaman situs OpenSolaris<br />

menyediakan akses ke halaman diskusi, komunitas,<br />

proyek, <strong>download</strong>, dan penjelajah kode pemograman.<br />

Selain itu, situs OpenSolaris juga tersedia<br />

fasilitas pencarian isi situs dan kumpulan blog.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

4


Situs-situs OpenSolaris<br />

Diskusi<br />

Halaman Diskusi menyediakan akses untuk<br />

berkomunikasi <strong>dengan</strong> para ahli yang berkecimpung<br />

<strong>dengan</strong> teknlogi kode pemograman terbuka (open<br />

source). Halaman Diskusi juga menyediakan pencarian<br />

arsip dari diskusi-diskusi yang pernah dilakukan<br />

sebelumnya untuk topik tertentu.<br />

Kunjungi http://www.opensolaris.org/os/discussions<br />

untuk mendapatkan daftar lengkap forum yang akan<br />

dipilih untuk berlangganan.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

5


Situs-situs OpenSolaris<br />

Komunitas<br />

Halaman komunitas merupakan tempat dimana<br />

pengunjung <strong>dengan</strong> minat tertentu yang sama terhadap<br />

proyek OpenSolaris bisa saling terhubung. Halaman<br />

komunitas merupakan gabungan dari kelompok peminat<br />

teknologi, dukungan, piranti, and kelompok<br />

pengguna:<br />

Lembaga Akademik dan Penelitian:<br />

http://www.opensolaris.org/os/community/edu<br />

DTrace: http://<br />

www.opensolaris.org/os/community/dtrace<br />

ZFS:<br />

http://www.opensolaris.org/os/community/zfs<br />

Jaringan:<br />

http://www.opensolaris.org/os/community/networkin<br />

g<br />

Zona:<br />

http://www.opensolaris.org/os/community/zones<br />

Dokumentasi:<br />

http://www.opensolaris.org/os/community/documenta<br />

tion<br />

Penggerak Perangkat: http://www.opensolaris.org/<br />

os/community/device_drivers<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

6


Situs-situs OpenSolaris<br />

Piranti:<br />

http://www.opensolaris.org/os/community/tools<br />

Advokasi:<br />

http://www.opensolaris.org/os/community/advocacy<br />

Keamanan:<br />

http://www.opensolaris.org/os/community/security<br />

Kinerja:<br />

http://www.opensolaris.org/os/community/performan<br />

ce<br />

Penyimpan Data:<br />

http://www.opensolaris.org/os/community/storage<br />

Adm<strong>ini</strong>strasi Sistem:<br />

http://www.opensolaris.org/os/community/sysadmin<br />

Terdapat sekitas 30 komunitas yang berjalan secara<br />

aktif di OpenSolaris. Kunjungi<br />

http://www.opensolaris.org/os/communities untuk<br />

informasi lengkap.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

7


Situs-situs OpenSolaris<br />

Proyek<br />

Proyek-proyek yang ada di situs<br />

http://www.opensolaris.org/ merupakan upaya<br />

kerjasama yang menghasilkan obyek seperti perubahan<br />

kode pemograman, dokumen, grafik atau produk<br />

gabungan berapa pengembang perangkat lunak. Proyek<br />

memiliki repositori dan komisi yang menguji dan<br />

menyetujui kode pemograman. Proyek bisa berasal<br />

dari komunitas atau berdiri sendiri di luar<br />

komunitas.<br />

Proyek baru diajukan oleh para peminatnya <strong>dengan</strong><br />

mengajukan permintaan melalui fasilitas diskusi.<br />

Proyek yang diajukan dan diterima oleh setidaknya<br />

satu peminat lain di dalam komunitas yang<br />

mensposorinya akan disediakan ruang untuk halaman<br />

proyek sehingga proyek dapat dimulai. Kunjungi<br />

http://www.opensolaris.org/os/projects untuk<br />

melihat daftar proyek-proyek yang sedang berjalan.<br />

Piranti Visualisasi Harmonik untuk DTrace :<br />

http://www.opensolaris.org/ os/project/dtracechime<br />

Kode Google Summer:<br />

http://www.opensolaris.org/os/project/powerPC<br />

Indiana:<br />

http://www.opensolaris.org/os/project/indiana<br />

OpenGrok:<br />

http://www.opensolaris.org/ os/project/opengrok<br />

Kontes Pemograman:<br />

http://www.opensolaris.org/os/project/contest<br />

Starter Kit:<br />

http://www.opensolaris.org/ os/project/starterkit<br />

Solaris iSCSI Target:<br />

http://www.opensolaris.org/ os/project/iscsitgt<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

8


Situs-situs OpenSolaris<br />

Repositori Kode Pemograman<br />

Repositori kode pemograman yang terpusat dan<br />

terdistribusi tersedia di situs opensolaris.org.<br />

Model manajemen kode pemograman terpusat <strong>ini</strong><br />

menggunakan program manajemen yang disebut<br />

Subversion (SVN) source control. Sedangkan<br />

manajemen repositori terdistribusi menggunakan<br />

program manajemen yang disebut kontrol kode<br />

pemograman Mercurial (hg).<br />

Pembuatan repositori kode pemograman di<br />

opensolaris.org dilakukan oleh Pemimpin Proyek di<br />

halaman proyek yang bersangkutan. Pengembang <strong>dengan</strong><br />

hak commit bisa mengakses repositori <strong>dengan</strong><br />

menggunakan akun yang terdaftar di opensolaris.org.<br />

Hak commit sendiri diatur oleh Pemimpin Proyek.<br />

Untuk mengakses repositori <strong>dengan</strong> hak commit selain<br />

memiliki akun juga diperlukan kunci publik Secure<br />

Shell (SSH). Akun bisa diperoleh setelah melakukan<br />

pendaftaran terlebih dahulu. Kunjungi halaman<br />

komunitas piranti di<br />

http://opensolaris.org/os/community/tools untuk<br />

mendapat informasi terbaru tentang kontrol terhadap<br />

kode pemograman, <strong>download</strong> dan petunjuk-petunjuk<br />

lainya.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

9


Situs-situs OpenSolaris<br />

OpenGrok<br />

OpenGrok TM adalah mesin pencari kode pemograman dan<br />

referensi silang yang cepat dan praktis yang<br />

digunakan oleh OpenSolaris. Kunjungi<br />

http://cvs.opensolaris.org/sourceuntuk mencobanya.<br />

OpenGrok adalah proyek yang pertama kali ada di<br />

opensolaris.org. Kunjungi<br />

http://www.opensolaris.org/os/project/opengrok<br />

untuk mengetahui perkembangan lanjutan proyek <strong>ini</strong>.<br />

Coba gunakan perangkat lunak <strong>ini</strong> dan temukan begitu<br />

rapinya kode pemograman tertulis, penuh <strong>dengan</strong><br />

deskripsi seolah seperti membaca sebuah buku. Jika<br />

tertarik berpartisipasi mengembangkan proyek<br />

OpenSolaris, silakan men<strong>download</strong> kode pemograman<br />

lengkapnya. Jika hanya sekedar ingin mengetahui<br />

cara kerja fitur tertentu Solaris, piranti<br />

alternatif lebih nyaman digunakan adalah penjelajah<br />

kode pemograman.<br />

OpenGrok memahami berbagai format file program dan<br />

version control history seperti SCCS, RCS, and CVS<br />

sehingga memudahkan pemahaman terhadap prinsipprinsip<br />

kode pemograman terbuka.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

10


Tujuan<br />

2M O D U L<br />

Advokasi OpenSolaris<br />

Keberadaan Komunitas Advokat bertujuan untuk<br />

membantu berbagai kalangan dari penjuru dunia untuk<br />

ikut berpartisipasi dalam Komunitas OpenSolaris.<br />

Komunitas <strong>ini</strong> terbuka bagi semua orang dari semua<br />

bahasa dan kebudayaan dan mereka <strong>dengan</strong> latar<br />

belakang teknis ataupun tidak. Setiap orang<br />

memiliki sesuatu untuk ikut berkontribusi.<br />

Kunjungi<br />

http://opensolaris.org/os/community/advocacy/<br />

Di dalam komunitas Advokat bisa ditemui proyekproyek<br />

dari kelompok pengguna yang berdiri sendiri,<br />

presentasi, berita, artikel, blog, halaman yang<br />

berisi informasi teknis & non-teknis, video dan<br />

podcast, seminar dan konferensi. Tersedia juga<br />

berbagai proyek untuk keperluan promosi seperti<br />

atribut komunitas, pernak-pernik, lencana, pin dan<br />

lain-lain.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

11


Mengapa Menggunakan OpenSolaris?<br />

Mengapa Menggunakan OpenSolaris?<br />

Bagian <strong>ini</strong> menjelaskan alasan-alasan praktis yang<br />

menjadi pertimbangan pemilihan OpenSolaris sebagai<br />

platform pengembangan perangkat lunak.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

12


Mengapa Menggunakan OpenSolaris?<br />

Harga<br />

Popularitas Sistem Operasi Solaris 10 meledak sejak<br />

ketersediaannya di bulan Januari 2005. Hingga Juli<br />

2007, sudah terdaftar lebih dari 8.7 juta salinan,<br />

<strong>ini</strong> jauh lebih besar dibandingkan gabungan versiversi<br />

Solaris sebelumnya. Kondisi <strong>ini</strong> makin terpicu<br />

<strong>dengan</strong> diluncurkannya OpenSolaris pada bulan Juni<br />

2005. Lonjakan luar biasa jumlah pengguna Solaris<br />

<strong>ini</strong>, membuat semakin banyak pengembang perangkat<br />

lunak (komersial atau kode pemograman terbuka)<br />

melirik Sistem Operasi Solaris sebagai sasaran yang<br />

berkelanjutan bagi perangkat lunak mereka.<br />

Salah satu alasan Sistem Operasi Solaris mengalami<br />

percepatan popularitas yang luar biasa adalah<br />

karena harganya: $ 0 untuk setiap orang,<br />

pemanfaatan apa pun (komersial atau non-komersial),<br />

di semua platform (SPARC atau x86). Alasan lain<br />

adalah jaminan Sun (dan Sun melaksanakan jaminan<br />

<strong>ini</strong>) untuk membuat kode pemograman OpenSolaris<br />

tersedia bagi publik dibawah lisensi<br />

CommonDevelopment and Distribution License (CDDL).<br />

CDDL sendiri adalah sebuah pengaturan lisensi kode<br />

pemograman terbuka yang telah mendapat persetujuan<br />

OSI.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

13


Mengapa Menggunakan OpenSolaris?<br />

Fitur-fitur Inti Yang Inovatif<br />

Sebenarnya, alasan terpenting bagi naik popularitas<br />

Solaris adalah kekayaan tak terbatas dari fiturfitur<br />

yang ditawarkannya. Fitur-fitur tersebut<br />

adalah:<br />

Zona Solaris – Menawarkan kemampuan untuk<br />

mempartisi sebuah komputer menjadi beberapa<br />

sistem komputasi virtual, yang masing-masing<br />

saling terisolasi.<br />

DTrace – Sebuah perangkat perunut (tracing) yang<br />

dinamis dan komprehensif untuk menginvestigasi<br />

perilaku system dan aman untuk digunakan<br />

lingkungan produksi<br />

Tumpukan IP (IP stacks) Baru – Menyediakan<br />

peningkatan kinerja yang luar biasa<br />

ZFS – Sebuah pencapaian tertinggi bagi sistem<br />

file 128 bit, <strong>dengan</strong> deteksi dan koreksi<br />

kesalahan end-to-end, antar muka perintah-baris<br />

yang sederhana dan secara virtual kapasitas<br />

penyimpan yang tidak terbatas.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

14


Mengapa Menggunakan OpenSolaris?<br />

Kompatibilitas Balik<br />

Semua fitur-fitur baru <strong>ini</strong> di kembangkan di atas<br />

platform yang telah lama dinantikan oleh para<br />

pengguna Sistem Operasi Solaris <strong>dengan</strong><br />

karakteristik: stabilitas yang tangguh,<br />

skalabilitas yang besar, kinerja tinggi, dan<br />

jaminan kompatibilitas balik. Kompatibilitas balik<br />

merupakan hal penting terutama bagi pengembang<br />

perangkat lunak komersial karena menjaga<br />

kontinuitas perangkat lunak memerlukan biaya<br />

tinggi. Dengan jaminan kompatibilitas balik,<br />

pabrikan perangkat lunak mengetahui bahwa perangkat<br />

lunak (<strong>dengan</strong> menggunakan API yang dirilis) yang<br />

dibuat untuk Solaris ke-N akan berjalan mulus di<br />

Solaris ke-N+1 dan versi-versi berikutnya.<br />

Berbeda <strong>dengan</strong> beberapa Sistem Operasi lain, dimana<br />

perubahan-perubahan yang tidak kompatibel pada<br />

komponen sistem – misalnya, libraries – dibuat<br />

tanpa mempertimbankan efek samping pada applikasi.<br />

Efek keseluruhan adalah kerusakan aplikasi yang<br />

menyebabkan tinggi biaya untuk menjaga kontinuitas<br />

perangkat lunak dan rasa frustasi bagi pabrikan dan<br />

pengguna.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

15


Mengapa Menggunakan OpenSolaris?<br />

Netralitas Platform Perangkat Keras<br />

Paragraf sebelumnya menjelaskan beberapa alasan<br />

mengapa kita seharusnya mengembangkan Sistem<br />

Operasi Solaris, tetapi masih ada alasan-alasan<br />

lain untuk melakukan pengembangkan platform<br />

Solaris. Salah satunya adalah bahwa Solaris adalah<br />

Sistem Operasi multi-platform, mendukung baik<br />

arsitektur SPARC dan x86 (sebuah port ke Power yang<br />

dimotori oleh sebuah komunitas masih berjalan).<br />

Meskipun dulu beberapa tahun yang lalu muncul<br />

keraguan berkaitan Solaris untuk platform x86, pada<br />

kenyataanya sekarang Sun telah memperkenalkan<br />

jajaran server dan workstation berbasis AMD yang<br />

membuktikan kesungguhan Sun terhadap teknologi x86.<br />

Dari sudut pandang para pengembang perangkat lunak,<br />

versi Solaris untuk platform SPARC dan x85 memilki<br />

himpunan fitur dan API yang sama. Ini artinya para<br />

pengembang dapat lebih berkonsentrai <strong>dengan</strong> isu-isu<br />

lain untuk memperluas pengembangan antar-platform,<br />

seperti CPU endianness.<br />

Platform SPARC adalah big-endian dan x86 adalah<br />

little-endian sehingga sebuah aplikasi yang<br />

dikembangkan dan ditest diatas platform Solaris<br />

memiliki kemungkinan besar untuk terbebas masalah<br />

yang berhubungan endian. Solaris juga mendukung<br />

aplikasi 32 bit dan 64 bits di kedua platform<br />

tersebut, sehingga membantui menghilangkan bugs<br />

akibat asumsi-asumsi sekitar ukuran word.<br />

Mungkin alasan yang paling tak terbantahkan untuk<br />

mengembangkan perangkat lunak di Solaris adalah<br />

tersedianya piranti pengembangan perangkat lunak<br />

yang profesional.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

16


Mengapa Menggunakan OpenSolaris?<br />

Piranti Pengembangan<br />

Salah satu fitur terpenting sebuah Sistem Operasi<br />

dari sudut pandang pengembang perangkat lunak<br />

adalah tersedianya piranti pengembang perangkat<br />

lunak yang beragam dan berkualitas.<br />

Pengkompilasi/Compiler dan pen-debug/debugger<br />

adalah contoh yang paling lazim dari piranti<br />

seperti <strong>ini</strong>, selain pengetest kode pemograman/code<br />

checkers (untuk memastikan kode pemograman terbebas<br />

dari kesalahan yang tidak bisa ditemukan oleh<br />

compiler), pembangkit referensi-silang/crossreference<br />

generators (untuk melihat fungsi mana<br />

yang mereferesensi ke fungsi lain atau), dan<br />

penganalisa kinerja/performance analyzers.<br />

Sun Studio telah menjadi produk plihan bagi<br />

pengembang Solaris. Tersedia untuk diunduh secara<br />

gratis dari situs http://developers.sun.com,<br />

perangkat lunak Sun Studio adalah gabungan dari<br />

pengkompilasi dan piranti lain yang berkualitas<br />

profesional. Lengkapnya terdiri dari pengkompilasi<br />

C, C++, and FORTRAN; piranti penganalisa kode<br />

pemograman; sebuah antar muka lingkungan<br />

pengembangan terintegrasi (integrated development<br />

environment, IDE); dbx sebuah pen-debug di tingkat<br />

kode pemograman; dan program pengolah teks<br />

(editors).<br />

Piranti lain yang tergabung dalam Sun Studio adalah<br />

cscope (penjelajah kode pemograman interaktif), ctrace<br />

(piranti untuk membangkitkan self-tracing version<br />

dari sebuah program), cxref (program pembangkit<br />

referensi-silang C), dmake (program bantu untuk<br />

mengkonstruksi kode pemograman secara paralel dan<br />

terdistribusi), and lint (pemeriksa program C).<br />

Solaris dilengkapi <strong>dengan</strong> pengkompilasi GNU C , gcc,<br />

and pelengkap berupa pen-debug di tingkat kode<br />

pemograman, gdb. Solaris juga dilengkapi <strong>dengan</strong> pen-<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

17


Mengapa Menggunakan OpenSolaris?<br />

debug modular yang sangat berguna, mdb. Namun, mdb<br />

bukan pen-debug di tingkat kode pemograman. Piranti<br />

<strong>ini</strong> sangat berguna untuk men-debug kode kernel,<br />

atau melakukan analisa gejala tertentu yang<br />

mengikuti sebuah peristiwa pada sebuah program yang<br />

biasanya tidak tersedia pada level kode pemograman.<br />

Informasi lebih lengkap tentang mdb tersedia di buku<br />

Solaris Modular Debugger Guide and Solaris<br />

Performance and Tools yang ditulis oleh McDougall,<br />

Mauro dan Gregg.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

18


Pernyataan Tanda Terima Kasih<br />

Pernyatan Tanda Terima Kasih<br />

Anggota-anggota Komunitas OpenSolaris berikut <strong>ini</strong><br />

telah mengevaluasi dan memberikan saran perbaikan<br />

untuk dokumen <strong>ini</strong>:<br />

Boyd Adamson<br />

PradhapDevarajan<br />

Alan Coopersmith<br />

Brian Gupta<br />

RainerHeilke<br />

Eric Lowe<br />

Ben Rockwood<br />

Cindy Swearingen<br />

Anggota-anggota Komunitas OpenSolaris berikut <strong>ini</strong><br />

telah menyumbangkan materi baru yang luar biasa:<br />

Dong-HaiHan<br />

Narayana Janga<br />

Shivani Khosa<br />

Rich Teer<br />

Sunay Tripathi<br />

Yifan Xu<br />

Ucapan terima kasih juga kepada Steven Cogorno,<br />

David Comay, Teresa Giacom<strong>ini</strong>, StephenHahn, Patrick<br />

Finch, and Sue Weber atas kerja kerasnya yang<br />

memungkinkan lahirnya versi awal dokumen <strong>ini</strong>.<br />

Untuk berpartisipasi melakukan evaluasi mendatang<br />

terhadap dokumen <strong>ini</strong>, lakukan instruksi-instruksi<br />

seperti terdapat di situs:<br />

http://www.opensolaris.org/os/community/documentati<br />

on/reviews<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

19


Tujuan<br />

3M O D U L<br />

Mempersiapkan Lingkungan<br />

Kerja OpenSolaris<br />

Tujuan dari modul <strong>ini</strong> adalah agar peserta memahami<br />

kebutuah sistem, informasi pendukung, dokumentasi<br />

yang tersedia ketika melakukan instalasi dan<br />

konfigurasi proyek OpenSolaris.<br />

Sumber Bacaan<br />

Lain<br />

Solaris Express Developer Edition Installation<br />

Guide: Laptop Installations. Sun Microsystems,<br />

Inc., 2007.<br />

Sumber Bacaan untuk menjalankan Solaris OS di<br />

laptop:<br />

http://www.sun.com/bigadmin/features/articles/lap<br />

top_resources.html<br />

Komunitas Laptop OpenSolaris:<br />

http://opensolaris.org/os/community/laptop<br />

OpenSolaris Starter Kit:<br />

http://opensolaris.org/os/project/starterkit<br />

System Adm<strong>ini</strong>stration Guide: IP Services,<br />

SunMicrosystems, Inc., 2007<br />

Komunitas Jaringan OpenSolaris:<br />

http://www.opensolaris.org/os/community/networkin<br />

g<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

20


Adm<strong>ini</strong>strasi ZFS dan halaman manual:<br />

http://opensolaris.org/os/community/zfs/docs<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

21


Konfigurasi Perangkat Keras dan Perangkat Lunak<br />

Konfigurasi Perangkat Keras dan<br />

Perangkat Lunak<br />

Mendapatkan pengalaman praktis secara langsung<br />

untuk mempelajari kode pemograman Sistem Operasi<br />

dan akses langsung modul-modul kernel merupakan hal<br />

yang tidak tergantikan. Bagaimana memenuhi<br />

tantangan unik pengembangan kernel dan mendapatkan<br />

hak akses root ke sebuah sistem telah dibuat lebih<br />

mudah oleh piranti, forum dan dokumentasi yang<br />

disediakan oleh proyek OpenSolaris.<br />

Tip - Lakukan pendaftaran di Internet melalui situs<br />

http://get.opensolaris.org, agar secara gratis<br />

dapat menerima OpenSolaris Starter Kit yang terdiri<br />

dari materi-materi pelatihan, kode pemograman dan<br />

piranti untuk pengembangan.<br />

Pertimbangkan fitur-fitur OpenSolaris berikut <strong>ini</strong><br />

ketika mempersiapkan perangkat keras dan perangkat<br />

lunak:<br />

Tabel 3-1 Konfigurasi Pendukung Komponen Lab<br />

Komponen Dukungan Dari Proyek OpenSolaris<br />

Perangkat<br />

Keras<br />

File Kode<br />

Pemograman<br />

Instalasi<br />

Sistem<br />

OpenSolaris mendukung sistem <strong>dengan</strong><br />

jajaran prosesor berarstitektur SPARC dan<br />

x86: UltraSPARC®, SPARC64, AMD64, Pentium,<br />

and Xeon EM64T.<br />

Daftar sistem yang didukung, bisa<br />

didapatkan pada Solaris OS Hardware<br />

Compatibility List di<br />

http://www.sun.com/bigadmin/hcl<br />

Kunjungi<br />

http://opensolaris.org/os/<strong>download</strong>s untuk<br />

instruksi lengkap bagaiman mengkonstruksi<br />

kode pemograman<br />

Distibusi Pre-built OpenSolaris hanya<br />

dapat digunakan di Solaris Express:<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

22


Konfigurasi Perangkat Keras dan Perangkat Lunak<br />

Operasi Community Edition [DVD Version], Build 32<br />

atau lebih, Solaris Express: Developer<br />

Edition, Nexenta, Schillix, Martux and<br />

Belenix.<br />

Untuk kernel OpenSolaris kernel <strong>dengan</strong><br />

lingkungan pengguna GNU, tersedia di<br />

http://www.gnusolaris.org/gswiki/Downloadform<br />

Tabel 3-1 Konfigurasi Pendukung Komponen Lab<br />

(Lanjutan)<br />

Komponen Dukungan Dari Proyek OpenSolaris<br />

BFU<br />

File on-bfu-DATE.PLATFORM.tar.bz2 tersedia jika ingin men<br />

archives dari arsip pra-konstruksi.<br />

Build tools File SUNWonbld-DATE.PLATFORM.tar.bz2 tersedia jika akan<br />

mengkonstruksi dari kode pemograman sumbernya.<br />

Compilers Pengkompilasi dan piranti lain Sun Studio 11 terse<br />

and tools digunakan secara bebas oleh pengembang OpenSolaris<br />

http://www.opensolaris.org/os/community/tools/sun_<br />

untuk instruksi bagaimana mengunduh dan menginstal<br />

terbarunya. Untuk komunitas gcc, kunjungi<br />

http://www.opensolaris.org/os/community/tools/gcc<br />

Kebutuhan Kebutuhan Memori: 256M m<strong>ini</strong>mum (mode teks instal<br />

Memori/Disk<br />

1GB direkomendasikan<br />

Lingkungan<br />

OS Virtual<br />

Kebutuhan Memory : 768M m<strong>ini</strong>mum untuk instalasi<br />

Express Developer Edition<br />

Kebutuhan ruang Disk: 350M bytes<br />

Zona and Zona Bertanda-identitas di OpenSolaris me<br />

lingkungan Sistem Operasi yang virtual dan terlind<br />

sebuah instan Solaris. Ini memungkinkan satu atau<br />

berjalan secara terisolasi dari aktifitas proses y<br />

system.<br />

Open Solaris mendukung XEN, sebuah pemonitor syste<br />

virtual dari komunitas kode pemograman terbuka yan<br />

dikembangkan oleh tim XEN dari Laboratorium Komput<br />

Universitas Cambridge. Kunjungi<br />

http://www.opensolaris.org/os/community/xen/ untuk<br />

informasi lebih lanjut tentang proyek XEN.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

23


Konfigurasi Perangkat Keras dan Perangkat Lunak<br />

OpenSolaris juga dapat diinstall dalam lingkungan<br />

kunjungi http://www.opensolaris.org/os/project/con<br />

mendapat artikel terbaru bagaimana melakukannya.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

24


Konfigurasi Perangkat Keras dan Perangkat Lunak<br />

Lihat di Modul 4 untuk informasi lebih lanjut<br />

bagaimana Zona and Zona Bertanda-identitas<br />

memungkinkan pengembangan Solaris kernel atau user<br />

mode dan aplikasi Linux dapat dilakukan tanpa<br />

mempengaruhi pengembang yang bekerja di zona yang<br />

terpisah.<br />

Dengan berpartisipasi menggunakan proyek<br />

OpenSolaris akan memperbaiki kinerja keseluruhan<br />

sistem dan jaringan <strong>dengan</strong> teknologi terbaru.<br />

Lingkungan lab menjadi lebih menguntungkan <strong>dengan</strong><br />

menggunakan OpenSolaris karena sistem selalu berada<br />

di lingkungan komputasi termutakhir dan luar biasa.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

25


Konfigurasi Perangkat Keras dan Perangkat Lunak<br />

Jaringan<br />

Proyek OpenSolaris memenuhi tantangan masa depan<br />

teknologi jaringan <strong>dengan</strong> secara radikal<br />

memperbaiki performa jaringan tanpa memerlukan<br />

perubahan-perubahan terhadap aplikasi yang sudah<br />

ada.<br />

Kenaikan kinerja aplikasi hingga 50% <strong>dengan</strong><br />

melakukan perbaikan lapisan TCP/IP<br />

Dukungan terhadap banyak teknologi jaringan<br />

mutakhir, seperti 10 Gigabit Ethernet, jaringan<br />

nir-kabel dan hardware offloading<br />

Mengakomodasi fitur jaringan seperti highavailability,<br />

streaming, and Voice over IP (VoIP)<br />

melalui dukungan extended routing dan protocol.<br />

Dukungan terhadap spesifikasi IPv6 terbaru.<br />

Informasi lebih lanjut tentang pengembangan<br />

teknologi jaringan di komunitas OpenSolaris dapat<br />

dilihat di:<br />

http://www.opensolaris.org/os/community/networking.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

26


Daemon Auto-Configuration Jaringan<br />

Daemon Auto-Configuration Jaringan<br />

Proses boot pada rilis Solaris Express Developer<br />

Edition 5/07 menjalankan sebuah daemon baru,<br />

disebut nwamd. Daemon <strong>ini</strong> merupakan instan<br />

alternatif dari layanan SMF, svc:/network/physical, yang<br />

memungkinkan pengkonfigurasian jaringan secara<br />

otomatis <strong>dengan</strong> intervensi m<strong>ini</strong>mal.<br />

Daemon nwamd memonitor port Ethernet dan secara<br />

otomatis mengkonfigurasi kartu jaringan <strong>dengan</strong><br />

DHCP. Jika kabel Ethernet tidak terpasang ke<br />

jaringan kabel, daemon nwamd melakukan pemindaian<br />

jaringan nirkabel dan mengirimkan permintaan untuk<br />

terhubung <strong>dengan</strong> titik akses WiFi.<br />

Tidak perlu lagi membuang banyak waktu untuk<br />

mengkonfigurasi kartu jaringan Ethernet secara<br />

manual. Konfigurasi otomatis juga sangat<br />

mempermudah adm<strong>ini</strong>strasi karena pengkonfigurasianulang<br />

alamat-alamat jaringan bisa dilakukan <strong>dengan</strong><br />

intervensi m<strong>ini</strong>mal.<br />

Untuk melihat status NWAM, ketikan perintah berikut<br />

di jendela terminal.<br />

# svcs nwam<br />

STATE STIME FMRI<br />

online 11:29:50 svc:/network/physical:nwam<br />

Di halaman Network Auto-Magic Phase 0 pada situs<br />

OpenSolaris dan manual nwamd terdapat keterangan<br />

lebih rinci, termasuk bagaimana mematikan mematikan<br />

nwamd. Untuk informasi lebih jauh dan <strong>link</strong> ke<br />

halaman manual nwamd(1M), kunjungi<br />

http://www.opensolaris.org/os/project/nwam.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

27


Tinjauan Umum Zone<br />

Tinjauan Umum Zona<br />

Zona dapat dibayangkan seperti sebuah wadah dimana<br />

didalamnya satu atau lebih aplikasi berjalan secara<br />

terisolasi dari semua aplikasi yang ada di sistem.<br />

Semua perangkat lunak yang berjalan di OpenSolaris<br />

bisa berjalan, tanpa dimodifikasi, didalam zona.<br />

Karena zona tidak tidak mengubah OpenSolaris<br />

Application Programming Interface (APIs) or<br />

Application Binary Interface (ABI) maka aplikasi<br />

tidak perlu dikompilasi ulang agar bisa berjalan<br />

didalam zona.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

28


Adm<strong>ini</strong>strasi Zone<br />

Adm<strong>ini</strong>strasi Zona<br />

Adm<strong>ini</strong>strasi zona terdiri dari perintah-perintah<br />

berikut:<br />

zonecfg – Membuat zona, mengkonfigurasi zona<br />

(menambah sumber daya dan properti), menyimpan<br />

konfigurasi zona didalam per-zona file XML yang<br />

ada di /etc/zones.<br />

zoneadm – Melakukan langkah-langkah adm<strong>ini</strong>stratif<br />

untuk zona seperti: menampilkan, menginstal,<br />

(re)boot dan halt.<br />

zlogin – Memungkinkan pengguna log in kedalam zona<br />

untuk melakukan tugas-tugas adm<strong>ini</strong>strasi.<br />

zonename – Menampilkan nama zona dimana user<br />

berada.<br />

Berikut adalah properti-properti <strong>dengan</strong> lingkup<br />

global yang digunakan <strong>dengan</strong> didalam konfigurasi<br />

zona:<br />

zonepath – Lokasi direktori didalam zona global<br />

yang menjadi direktori root dimana zona akan<br />

diinstall<br />

autoboot – Menentukan apakah sebuah zona ikut boot<br />

atau tidak ketika zona global boot<br />

pool – Menentukan pool sumber daya yang diberikan<br />

untuk sebuah zona<br />

Sumber Daya dapat digolongkan sebagai berikut:<br />

fs – sistem file<br />

Inherit-pkg-dir – Direktori-direktori didalam zona<br />

yang memiliki keterterkaitan <strong>dengan</strong> paket yang<br />

berasal dari zona global<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

29


Adm<strong>ini</strong>strasi Zone<br />

net – Perangkat jaringan<br />

device – Perangkat-perangkat<br />

<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

30


Memulai Adm<strong>ini</strong>strasi Zone<br />

Memulai Adm<strong>ini</strong>strasi Zona<br />

Pada latihan lab berikut diperkenalkan proses<br />

pembuatan zona.<br />

Ringkasan<br />

Latihan berikut, menggunakan contoh-contoh yang<br />

rinci sehingga diharapkan mempercepat pemahaman<br />

proses pembuatan, instalasi dan boot zona.<br />

Catatan – Prosedur berikut tidak dapat digunakan<br />

untuk zona <strong>dengan</strong> atribut lx (BrandZ)<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

31


Memulai Adm<strong>ini</strong>strasi Zone<br />

Membuat, Menginstal dan Boot<br />

Zona<br />

1.Gunakan perintah berikut <strong>ini</strong> untuk<br />

mengkonfigurasikan sebuah zona baru:<br />

Catatan – Contoh di bawah <strong>ini</strong> menggunakan tumpukan<br />

IP-berbagi, <strong>ini</strong> adalah standar untuk sebuah zona.<br />

# zonecfg -z Apache<br />

Apache: No such zone configured<br />

Use ’create’ to begin configuring a new zone.<br />

zonecfg:Apache> create<br />

zonecfg:Apache> set zonepath=/export/home/Apache<br />

zonecfg:Apache> add net<br />

zonecfg:Apache:net> set address=192.168.0.50<br />

zonecfg:Apache:net> set physical=bge0<br />

zonecfg:Apache:net> end<br />

zonecfg:Apache> verify<br />

zonecfg:Apache> commit<br />

zonecfg:Apache> exit<br />

2.Gunakan perintah berikut <strong>ini</strong> untuk menginstall<br />

dan boot zona yang telah terkonfigurasikan:<br />

# zoneadm -z Apache install<br />

Preparing to install zone .<br />

Creating list of files to copy from the global zone.<br />

Copying files to the zone.<br />

Initializing zone product registry.<br />

Determ<strong>ini</strong>ng zone package <strong>ini</strong>tialization order.<br />

Preparing to <strong>ini</strong>tialize packages on the zone.<br />

Initialized packages on zone.<br />

Zone is <strong>ini</strong>tialized.<br />

Installation of these packages generated warnings: ....<br />

The file<br />

<br />

contains a log of the zone installation.<br />

The necessary directories are created. The zone is ready for<br />

booting.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

32


Memulai Adm<strong>ini</strong>strasi Zone<br />

3.Lihat isi root direktori-nya:<br />

# ls /export/home/Apache/root<br />

bin etc home mnt platform sbin<br />

tmp var dev export lib opt<br />

proc system usr<br />

Paket-paket berikut tidak diinstall-ulang.<br />

# /etc/mount<br />

/export/home/Apache/root/lib on /lib read only<br />

/export/home/Apache/root/platform on /platform read only<br />

/export/home/Apache/root/sbin on /sbin read only<br />

/export/home/Apache/root/usr on /usr read only<br />

/export/home/Apache/root/proc on proc<br />

read/write/setuid/nodevices/zone=Apache<br />

4.Boot zona-nya.<br />

# ifconfig -a<br />

lo0:<br />

flags=2001000849<br />

mtu 8232 index 1 inet 127.0.0.1 netmask ff000000<br />

bge0:<br />

flags=1004803 mtu 1500 index 2<br />

inet 192.168.0.4 netmask ffffff00 broadcast 192.168.0.255<br />

ether 0:c0:9f:61:88:c9<br />

# zoneadm -z Apache boot<br />

# ifconfig -a<br />

lo0:<br />

flags=2001000849<br />

mtu 8232 index 1 inet 127.0.0.1 netmask ff000000<br />

lo0:1:<br />

flags=2001000849<br />

mtu 8232 index 1 zone Apache inet 127.0.0.1<br />

bge0: flags=1004803 inet 192.168.0.4 netmask ffffff00 broadcast<br />

192.168.0.255 ether 0:c0:9f:61:88:c9<br />

bge0:1: flags=1000803mtu 1500 index 2 zone Apache inet<br />

192.168.0.50 netmask ffffff00 broadcast 192.168.0.255<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

33


Memulai Adm<strong>ini</strong>strasi Zone<br />

5.Buat konfigurasi zona dan login:<br />

# zlogin -C Apache<br />

[Connected to zone ’Apache’ pts/5]<br />

# ifconfig -a<br />

lo0:2: flags=2001000849 mtu 8232 index 1 inet 127.0.0.1<br />

netmask ff000000<br />

bge0:2: flags=1000803 inet 192.168.0.50 netmask ffffff00<br />

broadcast 192.168.0.255<br />

# ping -s 192.168.0.50<br />

64 bytes from 192.168.0.50: icmp_seq=0. time=0.146 ms<br />

# exit<br />

[Connection to zone ’Apache’ pts/5 closed]<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

34


Virtualisasi Server Web <strong>dengan</strong> Zone<br />

Virtualisasi Server Web <strong>dengan</strong> Zona<br />

Setiap zona memiliki karakteristik tersendiri,<br />

contohnya, nama zona, alamat IP, nama komputer,<br />

naming services, akun root dan non-root. Sesuai<br />

standarnya, Sistem Operasi berjalan didalam zona<br />

global. Adm<strong>ini</strong>strator dapat memvirtualisasikan<br />

lingkungan eksekusi aplikasi <strong>dengan</strong> mendif<strong>ini</strong>sikan<br />

satu satu lebih zona non-global. Layanan-layanan<br />

jaringan dapat dijalankan untuk membatasi kerusakan<br />

yang terjadi akibat kejadian serangan keamanan.<br />

Karena zona diimplementasikan di dalam perangkat<br />

lunak, zona tidak dibatasi granularitasnya<br />

berdasarkan batasan-batasan yang didef<strong>ini</strong>sikan oleh<br />

perangkat keras. Tetapi sebaliknya zona menawarkan<br />

granularitas sub-CPU.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

35


Pembuatan Zone Non-Global<br />

Pembuatan Zona Non-Global<br />

Latihan lab berikut <strong>ini</strong> mendemostrasikan bagaimana<br />

membuat dua kelompok pengguna server web yang<br />

berbeda dalam satu sistem komputer.<br />

Ringkasan<br />

Akses secara bersamaan ke kedua server web tersebut<br />

dikonfigurasikan sedemikan rupa sehingga masingmasing<br />

server web dan sistem akan terlindungi<br />

meskipun salah satunya telah mendapat serangan<br />

keamanan.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

36


Pembuatan Zone Non-Global<br />

Membuat Dua Zona Non-<br />

Global<br />

1.Membuat zona non-global Apache1:<br />

# zonecfg -z Apache1 info<br />

zonepath: /export/home/Apache1<br />

autoboot: false<br />

pool:<br />

inherit-pkg-dir: dir: /lib<br />

inherit-pkg-dir: dir: /platform<br />

inherit-pkg-dir: dir: /sbin<br />

inherit-pkg-dir: dir: /usr<br />

net: address: 192.168.0.100/24<br />

physical: bge0<br />

2.Membuat zona non-global Apache2:<br />

# zonecfg -z Apache2 info<br />

zonepath: /export/home/Apache2<br />

autoboot: false<br />

pool:<br />

inherit-pkg-dir: dir: /lib<br />

inherit-pkg-dir: dir: /platform<br />

inherit-pkg-dir: dir: /sbin<br />

inherit-pkg-dir: dir: /usr<br />

net: address: 192.168.0.200/24<br />

physical: bge0<br />

3.Log in ke Apache1 dan menginstall aplikasinya:<br />

# zlogin Apache1<br />

# zonename<br />

Apache1<br />

# ls /Apachedir<br />

apache_1.3.9 apache_1.3.9-i86pc-sun-solaris2.270.tar<br />

# cd /Apachedir/apache_1.3.9; ./install-bindist.sh /local<br />

Sekarang server Apache HTTP 1.3.9 sudah<br />

terinstall.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

37


Pembuatan Zone Non-Global<br />

4.Log in ke Apache2 dan menginstall aplikasinya:<br />

# zlogin Apache2<br />

# zonename<br />

Apache2<br />

# ls /Apachedir<br />

httpd-2.0.50 httpd-2.0.50-i386-pc-solaris2.8.tar<br />

# cd /Apachedir/httpd-2.0.50; ./install-bindist.sh /local<br />

You now have successfully installed the Apache 2.0.50 HTTP<br />

server.<br />

5.Jalankan aplikasi Apache1:<br />

# zonename<br />

Apache1<br />

# hostname<br />

Apache1zone<br />

# /local/bin/apachectl start<br />

/local/bin/apachectl start: httpd started<br />

6.Jalankan aplikasi Apache2:<br />

# zonename<br />

Apache2<br />

# hostname<br />

Apache2zone<br />

# /local/bin/apachectl start<br />

/local/bin/apachectl start: httpd started<br />

7.Didalam zona global , edit /etc/hosts file:<br />

# cat /etc/hosts<br />

#<br />

# Internet host table<br />

#<br />

127.0.0.1 localhost<br />

192.168.0.1 loghost<br />

192.168.0.100 Apache1zone<br />

192.168.0.200 Apache2zone<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

38


Pembuatan Zone Non-Global<br />

8.Buka penjelajah web dan and kunjungi URL berikut:<br />

http://apache1zone/manual/index.html<br />

Server web Apache1 aktif dan jalan.<br />

9.Buka penjelajah web dan and kunjungi URL berikut:<br />

http://apache2zone/manual/<br />

Server web Apache2 aktif dan jalan.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

39


Pembuatan Zone Non-Global<br />

Diskusi<br />

Pengguna melihat masing-masing zona sebagai sistem<br />

yang berbeda. Masing-masing server web memiliki<br />

name services masing-masing:<br />

File /etc/nsswitch.conf<br />

File /etc/resolv.conf<br />

Serangan jahat terhadap server web dibatasi hanya<br />

terjadi didalam zona. Konflik port juga tidak<br />

pernah terjadi!<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

40


Pembuatan Pool Penyimpan Data dan Sistem File ZFS<br />

Pembuatan Pool Penyimpan Data dan<br />

Sistem File ZFS<br />

Masing-masing pool penyimpan data ZFS terdiri dari<br />

satu atau lebih perangkat virtual, yang<br />

menggambarkan susunan fisik penyimpan data dan<br />

karakteristik penanganan kegagalannya.<br />

Dalam modul <strong>ini</strong>, pembahasan dimulai <strong>dengan</strong><br />

mempelajari konfigurasi pool penyimpan data termirror.<br />

Kemudian, akan diperlihatkan bagaimana<br />

membuat konfigurasi sebuah pool RAID-Z.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

41


Membuat Storage Pool ZFS Mirrored<br />

Membuat Pool Penyimpan Data ZFS Termirror<br />

Tujuan latihan lab <strong>ini</strong> adalah untuk membuat dan<br />

menampilkan pool penyimpan data ter-mirror <strong>dengan</strong><br />

perintah zpool.<br />

Untuk mendapatkan informasi, bagaimana memilih<br />

antara pool penyimpan data ZFS <strong>dengan</strong> konfigurasi<br />

ter-mirror atau RAID-Z yang sesuai <strong>dengan</strong><br />

lingkungan komputasi tertentu, kunjungi:<br />

http://www.solarisinternals.com/wiki/index.php/ZFS_<br />

Best_Practices_Guide<br />

Ringkasan<br />

ZFS adalah mudah, mulailah mencobanya!<br />

Sekarang waktunya membuat pool untuk pertama kali.<br />

.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

42


Membuat Storage Pool ZFS Mirrored<br />

Membuat Pool Penyimpan Data Termirror<br />

1.Buka jendela terminal<br />

2.Buatlah sebuah pool penyimpan data ter-mirror<br />

bernama tank. Kemudian tampilkan informasi pool<br />

penyimpan data tersebut:<br />

# zpool create tank mirror c1t1d0 c2t2d0<br />

# zpool status tank<br />

pool: tank<br />

state: ONLINE<br />

scrub: none requested<br />

config:<br />

NAME STATE READ WRITE CKSUM<br />

tank ONLINE 0 0 0<br />

mirror ONLINE 0 0 0<br />

c1t1d0 ONLINE 0 0 0<br />

c2t2d0 ONLINE 0 0 0<br />

errors: No known data errors<br />

Kapasitas disk c1t1d0 dan c2t2d0 masing-masing<br />

adalah 36 Gbytes each. Karena kedua disk tersebut<br />

di-mirror, maka kapasitas total pool<br />

merefleksikan kurang lebih ukuran salah satu<br />

disknya. Metadata untuk pool menghabiskan ruang<br />

disk <strong>dengan</strong> jumlah yang kecil.<br />

Sebagai contoh:<br />

# zpool list<br />

NAME SIZE USED AVAIL CAP HEALTH ALTROOT<br />

tank 33.8G 89K 33.7G 0% ONLINE –<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

43


Membuat Sistem File ZFS Sebagai Direktori Kerja Pengguna<br />

Membuat Sistem File ZFS Sebagai<br />

Direktori Kerja Pengguna<br />

Tujuan dari latihan lab <strong>ini</strong> adalah untuk<br />

mempelajari bagaimana membuat sebuah sistem file<br />

ZFS sebagai beberapa direktori kerja (home<br />

directory) pengguna.<br />

Dengan menggunakan fitur sistem file ZFS, yang<br />

tersedia di proyek OpenSolaris, memungkinkan<br />

dilakukannya penyederhanaan proses pengembangan<br />

kernel <strong>dengan</strong> memanfaatkan fitur snapshots dan<br />

rollback.<br />

Ringkasan<br />

Didalam lab <strong>ini</strong>, digunakan perintah zfs untuk<br />

membuat sebuah sistem file ZFS dan menentukan<br />

direktori aksesnya (mount point).<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

44


Membuat Sistem File ZFS Sebagai Direktori Kerja Pengguna<br />

Membuat Sistem File ZFS Sebagai<br />

Direktori Kerja Pengguna<br />

1.Tampilkan file sistem standar yang telah dibuat<br />

secara otomatis ketika pool penyimpan data<br />

dibuat.<br />

# zfs list<br />

NAME USED AVAIL REFER MOUNTPOINT<br />

tank 86K 33.2G 24.5K /tank<br />

2.Buat sistem file tank/home:<br />

# zfs create tank/home<br />

3.Kemudian, ubah direktori akses sistem file<br />

tank/home seperti berikut <strong>ini</strong>:<br />

# zfs set mountpoint=/export/home tank/home<br />

4.Kemudian, buat sistem file – sistem file tank/home<br />

untuk beberapa pengguna:<br />

# zfs create tank/home/developer1<br />

# zfs create tank/home/developer2<br />

# zfs create tank/home/developer3<br />

# zfs create tank/home/developer4<br />

Properti mountpoint akan digunakan secara<br />

berkelanjutan untuk menentukan awalan nama<br />

direktori (pathname prefix). Sehingga direktori<br />

akses tank/home/developer1 secara otomatis akan<br />

menjadi /export/home/developer1 karena direktori akses<br />

tank/home telah diubah menjadi /export/home.<br />

5.Periksa apakah sistem file ZFS telah dibuat:<br />

# zfs list<br />

NAME USED AVAIL REFER MOUNTPOINT<br />

tank 246K 33.2G 26.5K /tank<br />

tank/home 128K 33.2G 29.5K /export/home<br />

tank/home/developer1 24.5K 33.2G 24.5K /export/home/developer1<br />

tank/home/developer2 24.5K 33.2G 24.5K /export/home/developer2<br />

tank/home/developer3 24.5K 33.2G 24.5K /export/home/developer3<br />

tank/home/developer4 24.5K 33.2G 24.5K /export/home/developer4<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

45


Membuat Sistem File ZFS Sebagai Direktori Kerja Pengguna<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

46


Membuat Sistem File ZFS Sebagai Direktori Kerja Pengguna<br />

Lakukan snapshot secara rekursif untuk sistem file<br />

tank/home. Kemudian, tampilkan informasi snapshot<br />

tersebut:<br />

# zfs snapshot -r tank/home@today<br />

# zfs list<br />

NAME USED AVAIL REFER MOUNTPOINT<br />

tank 252K 33.2G 26.5K /tank<br />

tank/home 128K 33.2G 29.5K /tank/home<br />

tank/home@today 0 - 29.5K -<br />

tank/home/developer1 24.5K 33.2G 24.5K /tank/home/developer1<br />

tank/home/developer1@today 0 - 24.5K -<br />

tank/home/developer2 24.5K 33.2G 24.5K /tank/home/developer2<br />

tank/home/developer2@today 0 - 24.5K -<br />

tank/home/developer3 24.5K 33.2G 24.5K /tank/home/developer3<br />

tank/home/developer3@today 0 - 24.5K -<br />

tank/home/developer4 24.5K 33.2G 24.5K /tank/home/developer4<br />

tank/home/developer4@today 0 - 24.5K -<br />

Untuk informasi lebih lanjut, lihat zfs.1m.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

47


Membuat Konfigurasi RAID-Z<br />

Membuat Konfigurasi RAID-Z<br />

Tujuan dari latihan lab <strong>ini</strong> adalah sebagai<br />

pengenalan terhadap konfigurasi RAID-Z.<br />

Ringkasan<br />

Konfigurasi RAID-Z dibuat sebagai konfigurasi<br />

alternatif terhadap konfigurasi pool penyimpan data<br />

ter-mirror untuk kebutuhan memaksimalkan ruang<br />

disk.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

48


Membuat Konfigurasi RAID-Z<br />

Membuat Konfigrurasi RAID-Z<br />

1.Buka jendela terminal.<br />

2.Buat sebuah pool <strong>dengan</strong> sebuah perangkat tunggal<br />

RAID-Z yang terdiri dari 5 disk. Kemudian,<br />

perlihatkan informasi tentang pool penyimpan data<br />

tersebut.<br />

# zpool create tank raidz c1t1d0 c2t2d0 c3t3d0 c4t4d0 c5t5d0<br />

# zpool status tank<br />

pool: tank<br />

state: ONLINE<br />

scrub: none requested<br />

config:<br />

NAME STATE READ WRITE CKSUM<br />

tank ONLINE 0 0 0<br />

raidz1 ONLINE 0 0 0<br />

c1t1d0 ONLINE 0 0 0<br />

c2t2d0 ONLINE 0 0 0<br />

c3t3d0 ONLINE 0 0 0<br />

c4t4d0 ONLINE 0 0 0<br />

c5t5d0 ONLINE 0 0 0<br />

errors: No known data errors<br />

Disk bisa diakses <strong>dengan</strong> nama pendek atau nama<br />

lengkapnya. Contohnya, /dev/dsk/c4t4d0 adalah identik<br />

<strong>dengan</strong> c4t4d0.<br />

Dimungkinkan juga untuk menggunakan partisi disk<br />

sebagai pool penyimpan data ter-mirror dan RAID-Z,<br />

tapi konfigurasi seperti <strong>ini</strong> tidak direkomendasikan<br />

untuk lingkungan produksi. Untuk informasi lebih<br />

lanjut tentang penggunaan ZFS di lingkungan<br />

produksi, kunjungi:<br />

http://www.solarisinternals.com/wiki/index.php/ZFS_<br />

Best_Practices_Guide.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

49


Tujuan<br />

4M O D U L<br />

Konsolidasi Area Pengguna<br />

Tujuan modul <strong>ini</strong> adalah untuk memperkenalkan<br />

konsolidasi area pengguna (userland consolidations)<br />

dari OpenSolaris. Secara umum, konsolidasi area<br />

pengguna dapat dianggap sebagai kumpulan perangkat<br />

lunak yang berada diluar kernel dan sebagai<br />

komponen dimana <strong>dengan</strong>ya pengguna berinteraksi.<br />

Masing-masing konsolidasi mendistribusikan filefile<br />

kode pemogramannya ke situs opensolaris.org or<br />

sentra <strong>download</strong> Sun. Untuk mengakses masing-masing<br />

konsolidasi, kunjung URL berikut:<br />

http://opensolaris.org/os/<strong>download</strong>s/.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

50


Konsolidasi Area Pengguna dan Deskripsinya<br />

Konsolisidasi Area Pengguna dan<br />

Deskripsinya<br />

Server Applikasi Server Aplikasi Glassfish<br />

Piranti Pengembangan<br />

Produk (DevPro)<br />

Librari matematika,<br />

library media, librari<br />

microtasking, librari<br />

SCCS, make, dan C++<br />

runtime.<br />

Dokumentasi (Docs) Dokumentasi teknis<br />

pengembangan dan<br />

adm<strong>ini</strong>strasi.<br />

Dukungan Globalisasi<br />

(G11N)<br />

Dukungan Instalasi<br />

(Install)<br />

Dukungan<br />

Internationalisasi and<br />

lokalisasi.<br />

Dukungan instalasi and<br />

piranti pembuat paket.<br />

Solusi JavaDesktop (JDS). Perangkat lunak desktop<br />

korporat yang aman dan<br />

komprehensif.<br />

Java Platform, Standard<br />

Edition (Java SE)<br />

Distribusi<br />

JavaDevelopment Kit (JDK)<br />

and Java Runtime<br />

Environment (JRE).<br />

Halaman Manual Kode pemograman untuk<br />

Halaman Manual Referensi<br />

SunOS.<br />

Message Queue. Sun Java SystemMessage<br />

Queue<br />

Penyimpan Data dalam<br />

Jaringan (NWS)<br />

Dukungan perangkat<br />

penyimpan data dalam<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

51


Konsolidasi Area Pengguna dan Deskripsinya<br />

jaringan.<br />

SFW (Solaris FreeWare) Perangkat lunak <strong>dengan</strong><br />

kode pemograman terbuka<br />

yang tersedia di Solaris/<br />

OpenSolaris.<br />

Dukungan Grafik SPARC Konsolidasi grafik SPARC<br />

memiliki file-file biner<br />

untuk penggeraknya.<br />

Test Piranti dan kumpulan<br />

perangkat lunak pengujian<br />

OpenSolaris.<br />

X Window System (X11) Perangkat lunak X11<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

52


Tujuan<br />

5M O D U L<br />

Fitur Inti Sistem Operasi<br />

Solaris<br />

Tujuan dari modul <strong>ini</strong> adalah untuk memberikan<br />

gambaran fitur utama dari Solaris dan bagaimana<br />

fitur-fitur tersebut secarna fundamental telah<br />

mengubah komputasi Sistem Operasi<br />

Sumber Bacaan<br />

Lain<br />

Proses Pengembangna OpenSolaris;<br />

http://www.opensolaris.org/os/community/onnv/os_d<br />

ev_process/<br />

Standarisasi C Style dan Penulisan Kode untuk<br />

SunOS;<br />

http://www.opensolaris.org/os/community/documenta<br />

tion/getting_started_docs/<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

53


Proses Pengembangan dan Metode Penulisan Kode<br />

Proses Pengembangan dan Metode<br />

Penulisan Kode<br />

Langkah-langkah proses pengembangan dan metode<br />

penulisan kode (coding style), yang digunakan oleh<br />

konsolidasi OS/Net (ON), dibuat untuk<br />

mendistribusikan komponen utama Sistem Operasi dan<br />

komponen Jaringan.<br />

Komponen Operating System and Networking terdiri<br />

dari kode pemograman kernel untuk semua platform<br />

(untuk semua arsitektur), sekumpulan kode<br />

pemograman penggerak perangkat, sistem file,<br />

librari utama dan perintah dasar yang biasa<br />

terdapat di sistem Solaris.<br />

Proses pengembangan proyek OpenSolaris mematuhi<br />

langkah-langkah umum berikut:<br />

1.Ide<br />

Pertama, seseorang yang memiliki sebuah ide untuk<br />

perbaikan /penambahan atau memiliki<br />

ketidaknyamanan akibat adanya cacat. Lakukan<br />

pencarian informasi terlebih dahulu untuk<br />

kemungkinan keberdaan bug tersebut atau<br />

mengajukan sebagai kasus bug baru atau meminta<br />

request for enhancement (RFE) <strong>dengan</strong> menggunakan<br />

fasilitas yang ada di halaman<br />

http://bugs.opensolaris.org/. Berikutnya,<br />

mengumumkan hal tersebut kepada pengembangpengembang<br />

lain melalui E-mail list. Penyebaran<br />

pengumuman <strong>ini</strong> memiliki keuntungan-keuntungan<br />

sebagai berikut:<br />

Memicu <strong>dengan</strong> segera adanya diskusi untuk<br />

pengubahan atau perbaikan<br />

Menentukan kompleksitas dari pengubahanpengubahan<br />

yang diajukan<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

54


Proses Pengembangan dan Metode Penulisan Kode<br />

Memperkirakan ketertarikan komunitas<br />

Mengidentikasikan calon anggota tim yang<br />

potensial<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

55


Proses Pengembangan dan Metode Penulisan Kode<br />

2.Desain<br />

Fase desain menentukan apakah diperlukan atau<br />

tidak adanya tinjauan desain secara formal. Jika<br />

diperlukan tinjauan desain secara formal, maka<br />

lengkapi langkah-langkah berikut <strong>ini</strong>:<br />

Mengidentifikasi peninjau (reviewers) bagi<br />

desain dan arsitektur yang akan diajukan<br />

Membuat dokumen desain<br />

Membuat rencana pengujian<br />

Melakukan tinjauan desain dan meminta<br />

persetujuan <strong>dengan</strong> benar<br />

3.Implementasi<br />

Fase implementasi terdiri dari hal-hal berikut:<br />

Menuliskan kode yang akan menjadi solusi sesuai<br />

<strong>dengan</strong> ketentuan dan standar. Unduh Standar C<br />

Style and Coding untuk SunOS dis<strong>ini</strong>:<br />

http://www.opensolaris.org/os/community/documen<br />

tation/getting_started_docs/.<br />

Membuat kumpulan pengujian<br />

Melewati dan lulus berbagai unit and praintegrasi<br />

pengujian<br />

Menuliskan atau memperbaharui dokumentasi<br />

pengguna, jika diperlukan<br />

Mengindentifikasi peninjau kode pemograman<br />

dalam rangka persiapan untuk integrasi<br />

4.Integrasi<br />

Integrasi terjadi setelah semua peninjau telah<br />

menyelesaiakan proses penijauan dan izin untuk<br />

melakukan integrasi telah diberikan.<br />

Fase integrasi diperlukan untuk memastikan bahwa<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

56


Proses Pengembangan dan Metode Penulisan Kode<br />

semua prosedur telah dipenuhi; memiliki fakta yang<br />

lengkap yang artinya telah ditinjau kode<br />

pemograman-nya, dokumentasi dan kelengkapannya.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

57


Proses Pengembangan dan Metode Penulisan Kode<br />

Dokumen proses resmi untuk OpenSolaris menjelaskan<br />

langkah-langkah diatas lebih r<strong>ini</strong>ci, disertai<br />

diagram alir yang mengilustrasikan setiap fase-fase<br />

pengembangan. Dokumen tersebut juga menjelaskan<br />

secara rinci prinsip-prinsip desain dan nilai-nilai<br />

utama yang diterapkan terhadap pengembangan kode<br />

pemograman untuk proyek OpenSolaris:<br />

Kehandalan – OpenSolaris harus melakukan<br />

fungsinya secara benar, menyediakan hasil kerja<br />

yang akurat tanpa kehilangan data atau<br />

terkorupsi.<br />

Ketersediaan – Layanan-layanan harus didisain<br />

<strong>dengan</strong> kemampuan distart-ulang jika terjadi<br />

kegagalan aplikasi dan OpenSolaris sendiri harus<br />

berkemampuan memulihkan diri dari kegagalan<br />

perangkat keras yang tidak fatal<br />

Kemampuan Servis – Kemampuan untuk mendiagnosa<br />

baik masalah-masalah yang fatal dan transien dan<br />

jika memungkinkan, mengotomasasi diagnosanya.<br />

Keamanan – Keamanan OpenSolaris harus didisain<br />

sebagai bagian dari Sistem Operasi <strong>dengan</strong><br />

menyediakan mekanisme agar dapat melakukan audit<br />

terhadap perubahan-perubahan yang dilakukan di<br />

sistem dan siapa yang melakukannya.<br />

Kinerja – Kinerja OpenSolaris harus yang teratas<br />

dibandingkan Sistem Operasi lain yang berjalan di<br />

lingkungan yang sama.<br />

Kemudahan Manajemen – Manejemen komponen individu<br />

perangkat keras atau perangkat lunak yang<br />

konsisten dan cara yang mudah.<br />

Kompatibilitas – Sub-sistem dan antar-muka baru<br />

harus bisa diperluas dan dibuatkan versi<br />

terbarunya agar memungkinkan perbaikan atau<br />

perubahan di masa mendatang tanpa mengkuatirkan<br />

kompatibilitas.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

58


Proses Pengembangan dan Metode Penulisan Kode<br />

Kemudahan Perawatan – OpenSolaris harus<br />

berarsitektur sedemikian rupa sehingga subrutinsubrutin<br />

umum dapat dikombinasikan kedalam<br />

librari atau modul kernel yang kemudian dapat<br />

digunakan sebanyak-banyaknya pengguna.<br />

Netralitas Platform –OpenSolaris harus tetap<br />

netral terhadap semua platform perangkat keras<br />

dan abstraksi level bawah harus selalu didisain<br />

<strong>dengan</strong> pertimbangan sebagai Sistem Operasi untuk<br />

banyak platform dan platform masa depan.<br />

Kunjungi<br />

http://www.opensolaris.org/os/community/onnv/os_dev<br />

_process/ untuk informasi lebih detail tentang<br />

bagaimana proses yang digunakan untuk pengembangan<br />

secara kolektif kode pemograman OpenSolaris.<br />

Seperti proyek-proyek lainnya, Open Solaris<br />

mengatur secara ketat metode penulisan kode untuk<br />

kode pemograman yang didistribusikan, darimana pun<br />

sumbernya. Hal <strong>ini</strong> dijelaskan secara rinci di situs<br />

http://opensolaris.org/os/community/onnv/.<br />

Ada 2 piranti untuk pengecekan elemen-elemen dari<br />

metode penulisan kode yang tersedia sebagai bagian<br />

dari distribusi OpenSolaris. Piranti tersebut<br />

adalah cstyle(1) untuk melakukan verifikasi kepatuhan<br />

sebuah kode pemograman terhadap pedoman metode<br />

penulisan kode umum, dan hdrchk(1) untuk pengecekan<br />

metode penulisan header C dan C++.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

59


Tinjauan<br />

Tinjauan<br />

Setelah mengenal lingkungan pengembangan, tahaptahap<br />

pengembangan dan prinsip-prinsip yang<br />

diterapkan oleh pengembang OpenSolaris, berikutnya<br />

dibahas lebih dalam fitur-fitur Sistem Operasi<br />

OpenSolaris untuk membuktikan keunggulannya dari<br />

sisi kinerja, keamanan, kemampuan servis dan<br />

kemudahan manajemen:<br />

Kinerja<br />

FireEngine<br />

Nemo<br />

Crossbow<br />

Keamanan<br />

Least Privilege<br />

Packet Filtering<br />

Zones<br />

Branded Zones (BrandZ)<br />

Kemampuan Servis<br />

Predictive Self-Healing<br />

Dynamic Tracing Facility (DTrace)<br />

ModularDebugger (MDB)<br />

Kemudahan Manajemen<br />

ServicesManagement Facility (SMF)<br />

ZFS<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

60


Tinjauan<br />

FireEngine<br />

Fitur "FireEngine" yang ada di Solaris 10 adalah<br />

sebuah pendekatan yang menggabungkan semua lapisan<br />

protokol TCP/IP kedalam satu modul STREAMS yang<br />

secara penuh multithread. Didalam module yang<br />

tergabung <strong>ini</strong>, dibandingkan metode penguncian perstruktur<br />

data, sebuah mekanisme sinkronisasi per-<br />

CPU yang disebut “perimeter vertikal” (vertical<br />

perimeter) digunakan.<br />

Mekanisme perimeter vertikal diimplementasikan<br />

<strong>dengan</strong> menggunakan abstraksi antrian secara serial<br />

yang disebut "squeue." Masing-masing squeue<br />

dilekatkan ke sebuah CPU, dan masing-masing koneksi<br />

secara bergantian dilekatkan ke sebuah squeue yang<br />

menyediakan metode sinkronisasi dan mutual<br />

exclusion yang diperlukan oleh struktur data perkoneksi.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

61


Tinjauan<br />

Sinkronisasi<br />

Karena lapisan TCP/IP secara penuh adalah<br />

multithread (dimana hanya serialiasasi per-CPU yang<br />

dilakukan oleh sebuah perimeter vertikal), metode<br />

<strong>ini</strong> menggunakan skema berbasiskan-referensi untuk<br />

memastikan bahwa instan koneksi selalu tersedia<br />

ketika diperlukan. Untuk koneksi TCP yang terjadi,<br />

tiga referensi diberikan kepadanya.<br />

Masing-masing lapisan protokol memiliki sebuah<br />

referensi untuk setiap instan koneksi (satu untuk<br />

lapisan TCP dan satu untuk lapisan IP) dan<br />

classifier sendiri memiliki satu referensi karena<br />

classifier berfungsi mewakili setiap koneksi yang<br />

telah dibuat. Setiap kali sebuah paket datang untuk<br />

koneksi tertentu dan classifier mencari instan<br />

koneksinya, sebuah referensi tambahan ditempatkan,<br />

yang kemudian referensi tersebut dibuang ketika<br />

lapisan protokol selesai memproses paket tersebut.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

62


Tinjauan<br />

TCP, IP, dan UDP<br />

Solaris 10 OS menyediakan sudut pandang yang sama<br />

terhadap TCP seperti terdapat pada versi-versi<br />

sebelumnya – yaitu TCP muncul sebagai sebuah<br />

perangkat terduplikasi (clone device) meskipun<br />

sebenarnya TCP adalah sebuah gabungan (composite),<br />

dimana kode TCP and IP dileburkan kedalam satu<br />

modul D_MP STREAMS.<br />

Bagian operasional TCP dilindungi secara penuh oleh<br />

perimeter vertical yang dimasukan melalui primitif<br />

squeue. FireEngine mengubah antar-muka antara TCP<br />

dan IP dari antar-muka yang ada sekarang yaitu<br />

penerusan pesan berbasiskan-STREAMS (STREAMS-based<br />

message passing) menjadi sebuah antar-muka<br />

berbasiskan-panggilan fungsional (functional callbased),<br />

baik untuk pengiriman informasi kontrol dan<br />

data.<br />

Terdapat juga modul UDP yang secara penuh<br />

multithread, yang berjalan dibawah domain<br />

perlindungan yang sama seperti IP. Meskipun UDP and<br />

IP berjalan didalam domain perlindungan yang sama,<br />

keduanya tetap merupakan modul-modul STREAMS yang<br />

terpisah. Sehingga, penempatan STREAMS secara<br />

vertikal (STREAMS plumbing) tetap tidak berubah dan<br />

sebuah instan modul UDP selalu didorong diatas<br />

modul IP. Platform Solaris 10 menyediakan dua mode<br />

penempatan secara vertikal (plumb modes) sebagai<br />

berikut:<br />

Normal – IP dibuka terlebih dahulu kemudian UDP<br />

didorong secara langsung diatasnya. Ini adalah<br />

aksi standar yang terjadi ketika sebuah soket UDP<br />

atau perangkat dibuka.<br />

SNMP – UDP didorong diatas modul selain IP.<br />

Ketika <strong>ini</strong> terjadi, hanya semantik SNMP yang akan<br />

didukung.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

63


Tinjauan<br />

GLDv3<br />

Solaris 10 memperkenalkan sebuah kerangka kerja<br />

baru untuk program penggerak perangkat (new device<br />

driver framework) disebut GLDv3 disertai <strong>dengan</strong><br />

lapisan fungsional baru. Sebagian besar program<br />

penggerak perangkat utama sudah menggunakan ke<br />

struktur <strong>ini</strong>, dan semua program penggerak perangkat<br />

masa depan dan perangkat jaringan 10 Gb akan<br />

berdasarkan kerangka <strong>ini</strong>. Kerangka kerja <strong>ini</strong> juga<br />

menyediakan sebuah lapisan DLPI berbasiskan-STREAMS<br />

untuk kompatibilitas balik, sehingga modul-modul<br />

ekstenal dan modul non-IP dapat terus bekerja.<br />

Arsitektur GLDv3 mem-virtulisasikan lapisan kedua<br />

dari lapisan protokol jaringan. Korespondesi satulawan-satu<br />

antara antar-muka jaringan dan lapisan<br />

fungsional perangkat diatasnya tidak diperlukan<br />

lagi.<br />

Kunjungi Proyek Nemo di situs opensolaris.org untuk<br />

informasi lebih lanjut yang berkaitan <strong>dengan</strong><br />

kerangka kerja <strong>ini</strong> , modul layanan MAC, modul Data-<br />

Link Services.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

64


Tinjauan<br />

Virtualisasi<br />

Proyek Crossbow merupakan sebuah proyek yang<br />

bertujuan untuk membuat lapisan protokol virtual<br />

dari semua layanan jaringan (HTTP, HTTPS, FTP, NFS,<br />

dsb), protokol utama (TCP, UDP, SCTP, dsb.), atau<br />

Teknologi Kontainer Solaris.<br />

Lapisan protokol virtual <strong>ini</strong> dipisahkan berdasarkan<br />

klasifikasi perangkat keras artinya trafik untuk<br />

satu lapisan protokol tertentu tidak akan<br />

mempengaruhi lapisan protokol virtual yang lain.<br />

Masing-masing lapisan protokol virtual <strong>ini</strong> dapat<br />

diberikan prioritas dan lebarpita yang berbeda<br />

meskipun hanya menggunakan satu kartu Ethernet<br />

tanpa menimbulkan penurunan kinerja terhadap sistem<br />

atau layanan/kontainer.<br />

Aristektur <strong>ini</strong> secara dinamis mengatur prioritas<br />

dan alokasi lebar-pita, selain itu juga menyediakan<br />

pertahanan yang lebih baik terhadap serangan<br />

denial-of-service yang ditujukan kepada layanan<br />

atau kontainer tertentu; yaitu <strong>dengan</strong> pengisolasian<br />

dampak serangan hanya pada layanan atau kontainer<br />

tersebut.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

65


Tinjauan<br />

Least Privilege (Hak Istimewa<br />

Terbatas)<br />

Dari sejak dulu, UNIX memiliki model hak istimewa<br />

didalam sistem yang bersifat “berikan semuanya atau<br />

tidak sama sekali” (all-or-nothing) yang memaksakan<br />

pembatasan-pembatasan berikut:<br />

Hak istimewa root tidak dapat dibatasi<br />

Pengguna non-root tidak bisa melakukan kegiatan<br />

adm<strong>ini</strong>stratif terhadap sistem yang memerlukan hak<br />

istimewa karena tidak cara untuk membagi hak<br />

istimewa ke pengguna non-root<br />

Aplikasi yang sebenarnya hanya memerlukan sedikit<br />

kegiatan <strong>dengan</strong> hak istimewa harus dijalankan<br />

sebagai root<br />

Sangat sedikit hal yang bisa dipercaya <strong>dengan</strong><br />

hak-hak istimewa root dan secara virtual tidak ada<br />

pengguna non-root yang begitu sangat dipercaya.<br />

Di dalam Solaris OS telah dikembangkan fine-grained<br />

privileges. Fine-grained privileges memungkinkan<br />

aplikasi dan proses login users untuk berjalan<br />

hanya <strong>dengan</strong> hak-hak istimewa yang mereka butuhkan.<br />

Sebagai ilustrasi, hak istimewa terbatas<br />

memungkinkan mahasiswa untuk diberikan hak-hak<br />

istimewa terbatas yang mereka butuhkan untuk<br />

menyelesaikan kuliah mereka, berpartisipasi dalam<br />

riset dan melakukan perawatan sebagian dari<br />

infrastruktur kampus atau departemen.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

66


Tinjauan<br />

Filtrasi Paket<br />

Solaris IP Filter berfungsi menyediakan stateful<br />

packet filtering and network address translation<br />

(NAT). Solaris IP Filter berasal dari perangkat<br />

lunak kode pemograman terbuka IP Filter.<br />

IP Filter dapat menyaring paket berdasarkan alamat<br />

IP, port, protokol, atau antarmuka jaringan<br />

berdasarkan kaidah-kaidah filter tertentu.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

67


Tinjauan<br />

Filter IP<br />

Packet Filtering Hooks (PFHooks) API telah<br />

diperkenalkan sejak Solaris 10 Update 4, untuk<br />

menggantikan implementasi berbasiskan-STREAMS dari<br />

IP Filter. Dengan menggunakan kerangka kerja<br />

PFHooks, kinerja perangkat lunak firewall seperti<br />

IP Filter secara luar biasa mengalami peningkatan.<br />

PFhooks juga menyediakan kemampuan untuk mencegat<br />

trafik loopback dan inter-zona. Perangkat lunak<br />

firewall pihak ketiga dikembangkan dan diregistrasi<br />

<strong>dengan</strong> PFHooks API menggunakan the<br />

net_register_hook(info, event, hook); hook.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

68


Tinjauan<br />

Mengaktifkan Filtrasi Paket<br />

Sederhana<br />

Tujuan latihan <strong>ini</strong> untuk mempelajari filtrasi<br />

paket. Solaris IP Filter telah terinstall didalam<br />

Sistem Operasi Solaris, namun, sesuai standarnya<br />

filtrasi paket tidak diaktifkan. IP Filter dapat<br />

mem-filter berdasarkan alamat IP, port, protokol,<br />

atau antar muka jaringan berdasarkan kaidah-kaidah<br />

filter tertentu. Berikut <strong>ini</strong> adalah sebuah contoh<br />

kaidah filter:<br />

block in on ce0 proto tcp from 192.168.0.0/16 to any port = 23<br />

Untuk menggunakan Solaris IP Filter, caranya<br />

sederhana yaitu <strong>dengan</strong> memasukan kaidah filter<br />

kedalam file /etc/ipf/ipf.conf. Kemudian, aktifkan dan<br />

start-ulang layanan svc:network/ipfilter <strong>dengan</strong><br />

perintah svcadm.<br />

Catatan – Perintah ipf juga dapat digunakan untuk<br />

membuat kaidah-kaidah IPFilter.<br />

Solaris IP Filter dapat melakukan juga<br />

pengkonversian alamat jaringan (NAT, Network<br />

Address Translation) untuk sebuah alamat IP<br />

pengirim atau sebuah alamat IP tujuan berdasarkan<br />

kaidah NAT. Berikut adalah sebuah contoh kaidah<br />

NAT:<br />

map ce0 192.168.1.0/24 -> 10.1.0.0/16<br />

Agar dapat melakukan pengkonversian alamat<br />

jaringan, simpan kaidah-kaidah NAT kedalam file<br />

/etc/ipf/ipnat.conf. Kemudian aktifkan dan start-ulang<br />

layanan svc:/network/ipfilter <strong>dengan</strong> perintah svcadm.<br />

Catatan – Perintah ipnat juga dapat digunakan untuk<br />

membuat kaidah-kaidah NAT.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

69


Tinjauan<br />

Beberapa Contoh Kaidah Filtrasi<br />

Paket<br />

Pada bagian <strong>ini</strong> diberikan beberapa contoh kaidah<br />

pembentukan filter. Mengaktifkan kaidah filter<br />

adalah <strong>dengan</strong> menambahkanya kedalam file<br />

/etc/ipf/ipf.conf. Kemudian, aktifkan Solaris IP Filter<br />

and reboot komputer seperti dijelaskan secara<br />

detail pada latihan sebelumnya.<br />

Me-log semua paket masuk di le0 <strong>dengan</strong> opsi IP<br />

aktif.<br />

log in on le0 from any to any with ipopts<br />

Memblokir semua paket masuk di le0 yang terfragment<br />

dan terlalu pendek untuk dilakukan perbandingan<br />

tertentu. Ini sebenarnya hanya bisa diterapkan<br />

untuk paket TCP yang bisa mengalami kehilangan<br />

flag/port (tergantung kondisi fragment yang<br />

terlihat).<br />

block in log quick on le0 from any to any with short frag<br />

Me-log semua paket masuk TCP hanya jika bendera SYN<br />

aktif.<br />

Catatan – Jika paket masuk TCP memiliki bendera SYN<br />

yang aktif dan memiliki opsi IP yang aktif maka<br />

kaidah <strong>ini</strong> menyebabkan paket di-log sebanyak dua<br />

kali.<br />

log in on le0 proto tcp from any to any flags S/SA<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

70


Tinjauan<br />

Memblokir dan me-log semua paket masuk ICMP<br />

unreachable:<br />

block in log on le0 proto icmp from any to any icmp-type unreach<br />

Memblokir dan me-log semua paket masuk UDP di le0<br />

yang menuju ke port 2049 (portnya NFS):<br />

block in log on le0 proto udp from any to any port = 2049<br />

Segera membolehkan semua paket ke/dari sebuah<br />

pasangan komputer tertentu:<br />

pass in quick from any to 10.1.3.2/32:<br />

pass in quick from any to 10.1.0.13/32<br />

pass in quick from 10.1.3.2/32 to any<br />

pass in quick from 10.1.0.13/32 to any<br />

Memblokir (dan berhenti mencari kaidah lain yang<br />

cocok) semua paket <strong>dengan</strong> opsi IP aktif:<br />

block in quick on le0 from any to any with ipopts<br />

Meneruskan semua paket yang lewat:<br />

pass in from any to any<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

71


Tinjauan<br />

Memblokir semua paket masuk UDP yang ditujukan ke<br />

subnet tertentu:<br />

block in on le0 proto udp from any to 10.1.3.0/24<br />

block in on le0 proto udp from any to 10.1.1.0/24<br />

block in on le0 proto udp from any to 10.1.2.0/24<br />

Memblokir semua paket masuk TCP jika hanya bendera<br />

SYN aktif dan ditujukan ke subnet-subnet berikut:<br />

block in on le0 proto tcp from any to 10.1.3.0/24 flags S/SA<br />

block in on le0 proto tcp from any to 10.1.2.0/24 flags S/SA<br />

block in on le0 proto tcp from any to 10.1.1.0/24 flags S/SA<br />

Memblokir semua paket masuk ICMP yang ditujukan ke<br />

subnet-subnet berikut:<br />

block in on le0 proto icmp from any to 10.1.3.0/24<br />

block in on le0 proto icmp from any to 10.1.1.0/24<br />

block in on le0 proto icmp from any to 10.1.2.0/24<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

72


Tinjauan<br />

Zona (Zones)<br />

Zona adalah sebuah abstraksi Sistem Operasi virtual<br />

yang menyediakan lingkungan komputasi terproteksi<br />

dimana didalamnya aplikasi dapat berjalan. Didalam<br />

zona, aplikasi tertentu diproteksi dari aplikasi<br />

lainnya untuk menyediakan isolasi terhadap<br />

kegagalan perangkat lunak.<br />

Untuk memudahkan pekerjaan mengontrol banyak<br />

aplikasi dan lingkunganya, semua aplikasi berjalan<br />

bersaman dalam satu Sistem Operasi, dan biasanya<br />

dikontrol sebagai satu unit.<br />

Sejumlah kecil aplikasi yang biasanya dijalankan<br />

sebagai root proses atau <strong>dengan</strong> hak-hak istimewa<br />

tertentu tidak diperbolehkan untuk berjalan didalam<br />

zona jika aplikasi-aplikasi tersebut berkemampuan<br />

mengakses atau mengubah sumber daya global. Sebagai<br />

contoh, kemampuan untuk mengubah penghitung waktu<br />

harian sistem. Aplikasi-aplikasi seperti <strong>ini</strong><br />

sebaiknya tetap digunakan hanya didalam zona global<br />

tetapi jika diperlukan berjalan didalam zona nonglobal<br />

maka harus dikonfigurasikan <strong>dengan</strong> sangat<br />

hati-hati.<br />

Berikut beberapa pedoman:<br />

Aplikasi yang mengakses layanan jaringan, filefile<br />

tertentu dan tidak melakukan aktivitas I/O<br />

yang lain, seharusnya dapat bekerja <strong>dengan</strong> benar<br />

didalam zona.<br />

Aplikasi yang memerlukan akses langsung ke<br />

perangkat tertentu, contohnya: sebuah partisi<br />

disk, dapat dilakukan jika zona tersebut<br />

dikonfigurasikan <strong>dengan</strong> benar. Namun demikian,<br />

dalam kasus-kasus tertentu hal <strong>ini</strong> meningkatkan<br />

resiko gangguan keamanan.<br />

Aplikasi yang memerlukan akses langsung perangkat<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

73


Tinjauan<br />

tertentu seperti berikut <strong>ini</strong> mungkin perlu<br />

dimodifikasi untuk dapat berfungsi secara benar.<br />

Sebagai contoh, /dev/kmem, atau perangkat jaringan.<br />

Aplikasi seharusnya hanya menggunakan satu<br />

layanan IP dalam setiap zona.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

74


Tinjauan<br />

Zona dapat dikombinasikan <strong>dengan</strong> fasilitas<br />

manajemen sumber daya yang tersedia di OpenSolaris<br />

untuk menyediakan lingkungan komputasi yang lebih<br />

lengkap dan terisolasi. Berbeda <strong>dengan</strong> zona yang<br />

lebih berfungsi menyediakan keamanan, isolasi<br />

identitas dan isolasi kegagalan, fasilitas<br />

manajemen sumber daya digunakan untuk mencegah<br />

proses yang ada didalam sebuah zona menghabiskan<br />

terlalu banyak sumber daya atau untuk menjamin agar<br />

proses mendapatkan sumber daya sesuai <strong>dengan</strong><br />

tingkat layanan yang diinginkannya. Zona dan<br />

manajement sumber daya keduanya sering disebut<br />

sebagai kontainer.<br />

Kunjungi http://opensolaris.org/os/community/zones/<br />

faq untuk mendapatkan jawaban dari pertanyaanpertanyaan<br />

umum tentang zona dan alamat-alamat<br />

situs lain menyimpan dokumentasi terbarunya.<br />

Zona menyediakan lingkungan komputasi yang<br />

terlindungi bagi aplikasi-aplikasi Solaris.<br />

Sedangkan untuk lingkungan komputasi non-Solaris<br />

yang terlindungi dan terpisah tersedia melalui<br />

proyek OpenSolaris lain yang disebut BrandZ .<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

75


Tinjauan<br />

Zona Bertanda-identitas (Branded<br />

Zones - BrandZ)<br />

BrandZ merupakan sebuah kerangka kerja yang<br />

memperluas infrastrukur zona yang ada sekarang<br />

untuk menciptakan Zona Bertanda-identitas, yang<br />

merupakan zona <strong>dengan</strong> lingkungan komputasi non-<br />

Solaris ada didalamnya.<br />

Zona Bertanda-identitas bisa berupa lingkungan<br />

komputasi sederhana dimana didalamnya perintahperintah<br />

standar Solaris digantikan oleh perintah<br />

GNU yang sama tanpa dimodifikasi, atau lingkungan<br />

yang kompleks berupa lingkungan pengguna Linux<br />

lengkap.<br />

BrandZ memperluas infrastruktur Zona di tingkat<br />

lingkungan pengguna <strong>dengan</strong> beberapa cara berikut<br />

<strong>ini</strong>:<br />

Sebuah tanda-identitas adalah sebuah atribut yang<br />

melekat pada sebuah zona, diberikan pada saat<br />

mengkonfigurasi zona.<br />

Setiap tanda-identitas menyediakan program dan<br />

prosedur instalasi sendiri, sehingga memiliki<br />

kemampuan untuk menginstal perangkat lunak apa<br />

pun didalam zona bertanda-identitas.<br />

Masing-masing tanda-identitas menyediakan skrip<br />

pra-boot dan pasca-boot untuk keperluan<br />

penyelesaian pengaturan atau konfigurasi pada<br />

saat boot.<br />

Perintah zonecfg dan zoneadm dapat digunakan untuk<br />

pengaturan dan memberikan informasi tipe tandaidentitas<br />

sebuah zona.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

76


Tinjauan<br />

BrandZ menyediakan beberapa titik inter-posisi<br />

dalam lingkungan kernel:<br />

Titik <strong>ini</strong> berada di jalur syscall, jalur pemuatan<br />

proses dan jalur penciptaan thread, dll.<br />

Titik inter-posisi hanya diterapkan terhadap<br />

proses-proses didalam zona Bertanda-identitas.<br />

Di titik <strong>ini</strong>, sebuah tanda-identitas dapat<br />

memilih untuk memodifikasi atau mengganti<br />

perilaku standar Solaris OS.<br />

Pada dasarnya setiap tanda-identitas yang berbeda<br />

memerlukan titik inter-posisi baru.<br />

Tanda-identitas “lx” memungkinkan aplikasi biner<br />

Linux dapat dijalankan tanpa dimodifikasi diatas<br />

Solairs, didalam zona yang menjalankan lingkungan<br />

penggunak Linux lengkap. Tanda-identitas lx<br />

memungkinakn perangkat lunak Linux di tingkatpengguna<br />

dapat berjalan <strong>dengan</strong> kernel OpenSolaris<br />

kernel, dan termasuk didalamnya adalah piranti yang<br />

diperluka untuk menginstal distribusi Linux CentOS<br />

atau RedHat Enterprise didalam zona diatas sistem<br />

Solaris.<br />

Tanda-identitas lx berjalan di sistem x86/x64 dan<br />

boot <strong>dengan</strong> kernel 32-bit atau 64-bit. Tetapi hanya<br />

aplikasi Linux 32-bit bisa berjalan. Hingga<br />

sekarang, fitur <strong>ini</strong> baru tersedia untuk arsitektur<br />

x86 dan AMDx64. Namun, memindahkannya ke sistem<br />

berarsitektur SPARC mungkin bisa menjadi proyek<br />

komunitas yang menarik karena BrandZ lx masih terus<br />

dikembangkan.<br />

Kunjungi<br />

http://opensolaris.org/os/community/brandz/installu<br />

ntuk mendapatkan informasi kebutuhan instalasi dan<br />

petunjunknya<br />

Proyek OpenSolaris memang ditujukan untuk mencari<br />

tantangan unik dalam pengembangan Sistem Operasi<br />

dan pengujian kinerja aplikasi yang menggunakan<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

77


Tinjauan<br />

fitur tertentu misalnya zona.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

78


Tinjauan<br />

Jaringan Didalam Zona<br />

Berdasarkan cara yang dipilih untuk memberikan<br />

alamat IP pada sebuah zona Solaris maka zona<br />

terbagi sebagai berikut:<br />

Zona <strong>dengan</strong> IP-Eksklusif<br />

Zona <strong>dengan</strong> IP-Berbagi<br />

Zona <strong>dengan</strong> IP-Eksklusif memiliki lapisan<br />

fungsional IP mandiri, antarmuka jaringan fisik<br />

mandiri dan antarmuka VLAN mandiri. Konfigurasi<br />

jaringan zona <strong>dengan</strong> IP-Eksklusif identik <strong>dengan</strong><br />

konfigurasi jaringan komputer fisik.<br />

Zona <strong>dengan</strong> IP-Berbagi berbagi lapisan fungsional<br />

IP <strong>dengan</strong> zona global, sehingga tertutup dari<br />

rincian konfigurasi perangkat jaringan, rute<br />

jaringan dan sebagainya. Masing-masing zona IPberbagi<br />

dapat diberikan alamat IPv4/IPv6. Meskipun<br />

berbagi lapisan fungsional IP, masing-masing zona<br />

IP-berbagi memiliki ketersediaan port yang mandiri.<br />

Aplikasi dapat mengikat diri ke INADDR_ANY dan hanya<br />

menerima lalulintas data yang ditujukan ke zona<br />

tersebut.<br />

Di dalam kedua tipe zona <strong>ini</strong>, pengamatan terhadap<br />

lalulintas data milik sebuah zona yang lain tidak<br />

dapat dilakukan. Paket yang berasal dari sebuah<br />

zona akan memiliki alamat IP pengirim yang dimiliki<br />

zona tersebut. Zona <strong>dengan</strong> IP-berbagi hanya dapat<br />

mengirim paket melalui antarmuka <strong>dengan</strong> alamat IP<br />

yang diberikan kepada zona tersebut. Zona <strong>dengan</strong><br />

IP-berbagi hanya bisa menggunakan router default<br />

jika router tersebut dapat dijangkau secara<br />

langsung dari zona. Router default harus berada<br />

dalam sub-jaringan yang sama <strong>dengan</strong> zona-nya.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

79


Tinjauan<br />

Zona IP-berbagi tidak dapat mengubah konfigurasi<br />

jaringan atau tabel informasi rute dan tidak dapat<br />

mengakses konfigurasi jaringan milik zona yang<br />

lain. Perangkat logis /dev/ip tidak tersedia didalam<br />

zona IP-berbagi. Sebagai akibatnya agen SNMP harus<br />

mengakses /dev/arp bukan /dev/ip. Beberapa zona IPberbagi<br />

secara bersamaan dapat berbagi alamat IP<br />

broadcast dan bergabung di group multicast yang<br />

sama.<br />

Zona IP-berbagi juga memiliki keterbatasan<br />

kemampuan jaringan yang lain, seperti:<br />

Ketersediaan antarmuka jaringan fisik didalam<br />

zona tidak dimungkinkan<br />

IPFilter tidak dapat digunakan untuk menyaring<br />

paket diantara dua atau lebih zona<br />

Pemberian alamat IP untuk zona tidak bisa<br />

menggunakan DHCP<br />

Routing secara dinamis tidak dapat dilakukan<br />

Zona <strong>dengan</strong> IP-eksklusif tidak memiliki<br />

keterbatasan seperti diatas, dan dapat mengubah<br />

konfigurasi jaringan atau tabel informasi rute.<br />

Perangkat logis /dev/ip tersedia didalam zona <strong>dengan</strong><br />

IP-eksklusif.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

80


Tinjauan<br />

Identitas Zona, Akses terhadap CPU<br />

dan Instalasi Paket<br />

Masing-masing zona mengontrol sendiri nama<br />

komputer, zona waktu dan layanan identitas seperti<br />

LDAP dan NIS. Program sysidtool yang dapat melakukan<br />

<strong>ini</strong> semua. Terpisahnya file /etc/passwd memungkinkan<br />

hak-hak khusus root didelegasikan ke masing-masing<br />

zona. Nomor ID pengguna yang sama dapat digunakan<br />

oleh nama pengguna yang berbeda ketika mereka ada<br />

di domain yang berbeda.<br />

Berdasarkan standar, semua zona bisa mengakses<br />

semua sumber daya CPU. Pembatasan akses terhadap<br />

sumber daya secara otomatis dilakukan ketika pool<br />

sumber daya dibuat.<br />

Didalam zona dapat diinstal paket hanya didalam<br />

zona yang bersangkutan. Patch juga dapat diinstall<br />

untuk paket tersebut.<br />

Patch Sistem diinstal didalam zona global.<br />

Kemudian, di dalam zona non-global secara otomatis<br />

dilakukan boot -s agar patchnya dapat berfungsi.<br />

Parameter paket SUNW_PKG_ALLZONES sebaiknya digunakan<br />

secara konsisten diantara zona global dan semua<br />

zona non-global.<br />

Parameter SUNW_PKG_HOLLOW menyebabkan nama paket<br />

muncul didalam zona non-global (NGZ) tetapi hanya<br />

untuk kelengkapan informasi ketergantungan paket<br />

karena sebenarnya paket tersebut tidak terinstal.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

81


Tinjauan<br />

Perangkat Didalam Zones<br />

Masing-masing zona memiliki akses ke perangkat<br />

masing-masing yang berbeda. Setiap zona memiliki<br />

akses terhadap sekumpulan bagian dari perangkat<br />

pseudo didalam direktori /dev. Aplikasi mengakses<br />

nama perangkat logis berdasarkan perangkatperangkat<br />

yang disajikan didalam direktori /dev.<br />

Direktori /dev tersedia didalam masing-masing zona<br />

non-global, tetapi direktori /devices tidak ada.<br />

Ketersediaan perangkat seperti random, console, and<br />

null dibolehkan jika tersedia didalam zona tetapi<br />

yang lainnya seperti /dev/kmem tidak dianjurkan dapat<br />

diakses dari zona non-global.<br />

Didalam zona izin akses terhadap perangkat dapat<br />

dimodifikasi tetapi perangkat baru tidak dapat<br />

dibuat, misalnya <strong>dengan</strong> fungsi mknod(2).<br />

Ketersediaan akses secara raw terhadap disk didalam<br />

zona harus dilakukan <strong>dengan</strong> hati-hati. Berbagi<br />

perangkat diantara beberapa zona juga bisa<br />

dilakukan tetapi tetap <strong>dengan</strong> mempertimbangan<br />

keamanan.<br />

Sebagai contoh, diasumsikan akses ke beberapa<br />

perangkat tertentu telah diberikan ke beberapa zona<br />

sekaligus. Dengan mengizinkan pengguna biasa<br />

mengakses secara block terhadap disk memungkinkan<br />

terjadinya panik sistem, ter-resetnya bus atau efek<br />

merugikan lainnya.<br />

Dengan penempatan sebuah perangkat fisik yang sama<br />

didalam beberapa zona, sebuah saluran koneksi<br />

tersembunyi dapat dibuat antara zona-zona yang<br />

bersangkutan. Aplikasi di zona global yang juga<br />

mengakses perangkat yang sama memiliki resiko<br />

datanya terubah atau rusak akibat serangan dari<br />

zona non-global.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

82


Tinjauan<br />

Prakiraan Penyembuhan-Diri<br />

(Predictive Self-Healing)<br />

Pra-kiraan Penyembuhan-Diri diimplementasi menjadi<br />

2 bagian di dalam Solaris 10 yaitu Arsitektur<br />

Manajemen Kegagalan dan Fasilitas Manajemen<br />

Layanan.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

83


Tinjauan<br />

Arsitektur Manajemen Kegagalan<br />

(Fault Management Architecture -<br />

FMA)<br />

Sistem Operasi Solaris menyediakan arsitektur baru,<br />

FMA, untuk menciptakan mekanisme penanganan<br />

kegagalan yang fleksibel, telemetri kegagalan,<br />

diagnosa perangkat lunak secara otomatis, agen yang<br />

akan bertindak jika terjadi kesalahan, dan model<br />

yang konsisten terhadap kegagalan sistem di setiap<br />

tingkat manajemen.<br />

Banyak komponen dari Solaris yang sudah terlibat<br />

kedalam FMA, termasuk diantaranya penangan<br />

kegagalan CPU dan Memori untuk UltraSPARC III dan<br />

IV; kartu antarmuka PCI untuk UltraSPARC dan<br />

Opteron. Berbagai proyek juga sedang berjalan,<br />

antara lain untuk dukungan penuh terhadap kegagalan<br />

CPU, Memori, and I/O di lingkungan komputasi<br />

Opteron, konversi penggerak perangkat utama dan<br />

integrasi <strong>dengan</strong> berbagai tingkat manajemen.<br />

Ketika sebuah subsistem dikonversikan agar bisa<br />

terlibat dalam Manajemen Kegagalan, mekanisme<br />

penanganan kegagalannya dibuat secara fleksibel<br />

sehingga sistem dapat dapat terus bekerja meskipun<br />

beberapa kegagalan ditingkat bawah terjadi, dan<br />

sebuah kejadian telemetri dibuat untuk memicu<br />

diagnosa dan tanggapan perbaikan secara otomatis.<br />

Piranti dan arsitektur Manajemen Kegagalan<br />

memungkinkan dikembangkannya mekanisme penyembuhandiri<br />

terhadap kegagalan perangkat lunak dan<br />

perangkat keras, baik untuk sumber daya yang<br />

berskala mikro atau makro, semuanya <strong>dengan</strong> sudut<br />

pandang yang seragam dan sederhana bagi<br />

adm<strong>ini</strong>strator dan perangkat lunak manajemen sistem.<br />

Kunjungi http://opensolaris.org/os/community/fm<br />

untuk mendapatkan informasi agar bisa<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

84


Tinjauan<br />

berpartisipasi dalam komunitas Manajemen Kegagalan<br />

atau mengunduh MIB unutk Manajemen Kegagalan yang<br />

hingga sekarang masih terus disempurnakan.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

85


Tinjauan<br />

Fasilitas Manajemen Layanan<br />

(Services Management Facility -<br />

SMF)<br />

SMF menciptakan sebuah model yang terintegrasi dan<br />

terus berkembang untuk kemudahan manajemen layananlayanan<br />

yang jumlahnya semakin besar di proyek<br />

OpenSolaris. Layanan-layanan tersebut antara lain:<br />

pengiriman surat elektronik, permintaan ftp dan<br />

eksekusi perintah secara remote. Kerangka kerja<br />

smf(5) menggantikan mekanisme startup <strong>ini</strong>t.d(4) yang<br />

ada sekarang dan termasuk juga perbaikan fitur<br />

inetd(1M).<br />

Bagi pengembang, SMF menyediakan keuntungan<br />

berikut:<br />

Secara otomatis me-restart layanan sesuai <strong>dengan</strong><br />

urutan saling ketergantungannya. Banyak hal yang<br />

menyebabkan layanan berhenti antara lain:<br />

kegagalan adm<strong>ini</strong>stratif, kegagalan perangkat<br />

lunak atau kerusakah perangkat keras yang<br />

permanen.<br />

API yang sama untuk kebutuhan manajemen layanan,<br />

konfigurasi dan observasi<br />

Akses terhadap manajemen sumber daya yang<br />

berbasiskan layanan<br />

Men-debug proses boot menjadi lebih mudah<br />

Kunjungi<br />

http://opensolaris.org/os/community/smf/scfdot<br />

untuk melihat grafik layanan-layanan SMF dan<br />

ketergantungannya pada sebuah sistem x86 yang baru<br />

saja terinstal Sistem Operasi Solaris Nevada.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

86


Tinjauan<br />

Perunut Dinamis (Dynamic Tracing -<br />

DTrace)<br />

DTrace menyediakan sebuah infrastruktur kokoh yang<br />

dapat digunakan oleh adm<strong>ini</strong>strator, pengembang dan<br />

teknisi operasional untuk secara cepat menjawab<br />

berbagai pertanyaan tentang perilaku Sistem Operasi<br />

dan program pengguna.<br />

DTrace memiliki kemampuan seperti berikut <strong>ini</strong>:<br />

Secara dinamis mengaktifkan dan mengatur ribuan<br />

probe<br />

Secara dinamis menghubungkan predikat dan aksi<br />

<strong>dengan</strong> probe<br />

Secara dinamis mengatur kapasitas penyangga saat<br />

merunut dan beban kerja probe Menguji data hasil<br />

merunut yang diperoleh dari sistem secara<br />

langsung atau dari file yang tersimpan setelah<br />

sistem mengalami kegagalan ditingkat kernel<br />

(system crash dump)<br />

Mengimplementasikan penyedia data tambahan untuk<br />

perunutan baru yang dipasangkan kedalam DTrace<br />

Mengimplementasi konsumen data hasil merunut yang<br />

akan menyajikan data<br />

Mengimplementasikan piranti untuk mengkonfigurasi<br />

probe DTrace<br />

Temukan situs komunitas DTrace di<br />

http://opensolaris.org/os/community/dtrace.<br />

Selain DTrace, proyek OpenSolaris juga menyediakan<br />

fasilitas pen-debug untuk pengembangan perangkat<br />

lunak di tingkat-bawah, misalnya pengembangan<br />

penggerak perangkat.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

87


Tinjauan<br />

Pen-debug Modular (Modular Debugger<br />

- MDB)<br />

MDB adalah sebuah pen-debug yang dirancang untuk<br />

menyediakan analisa masalah perangkat lunak yang<br />

memerlukan fasilitas pen-debug-an di tingkat-bawah,<br />

misalnya pengujian file core; dan pengetahuan<br />

tentang bahasa assembly diperlukan agar bisa<br />

melakukan diagnosa dan memperbaikinya. Umumnya,<br />

para pengembang kernel dan perangkat mengandalkan<br />

mdb untuk mencari jawaban mengapa dan dimana terjadi<br />

kesalahan pada kode pemograman mereka.<br />

MDB tersedia dalam dua perintah berbeda yaitu mdb<br />

dan kmdb, namun keduanya memiliki beberapa kesamaan<br />

fitur umum. Perintah mdb digunakan secara interaktif<br />

atau didalam skrip untuk mendebug proses di tingkat<br />

pengguna yang sedang berjalan, file core dari<br />

proses di tingkat pengguna, kernel crash dump, file<br />

object Sistem Operasi yang sedang berjalan dan file<br />

lainnya. Sedangkan kmdb digunakan untuk men-debug<br />

proses di tingkat kernel dan penggerak perangkat<br />

yang sedang berjalan, juga diperlukan untuk<br />

mengontrol dan menghentikan eksekusi intruksi<br />

didalam kernel.<br />

Terdapat komunitas yang aktif mendiskusikan MDB<br />

sebagai tempat untuk bertanya kepada para pakar<br />

atau melihat berbagai percakapan dan pertanyaan<br />

yang pernah disampaikan sebelumnya. Kunjungi<br />

http://opensolaris.org/os/community/mdb<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

88


Tinjauan<br />

Sistem File ZFS<br />

Sistem file ZFS merupakan sistem file yang tidak<br />

dibatasi oleh perangkat keras tertentu, sehingga<br />

begitu mudah dan cepat untuk dibuat seperti membuat<br />

sebuah direktori, dan sistem file <strong>ini</strong> bertambah<br />

kapasitasnya secara otomatis sesuai <strong>dengan</strong><br />

kapasitas maksimum yang dialokasikan didalam pool<br />

penyimpan datanya.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

89


Tinjauan<br />

Penggunaan Checksum dan Perbaikan<br />

Data<br />

Dengan ZFS, semua data dan metadata diproteksi dari<br />

kesalahan <strong>dengan</strong> checksum dimana algoritma yang<br />

akan digunakannya bisa dipilih. Semua perhitungan<br />

checksum dan perbaikan kesalahan data dilakukan di<br />

level sistem file dan semuanya transparan bagi<br />

aplikasi. Selain itu, ZFS juga berkemampuan<br />

memperbaiki-sendiri data dari kerusakan. ZFS<br />

mendukung pool penyimpan data berkemampuan<br />

redundansi data yaitu mirror dan sebuah variasi<br />

RAID-5. Ketika terdeteksi sebuah data blok rusak<br />

maka ZFS mengambil data yang masih utuh dari lokasi<br />

lain yang berisi data yang sama kemudian<br />

memperbaiki data blok yang rusak tersebut yaitu<br />

<strong>dengan</strong> menggantinya oleh data blok yang masih utuh.<br />

ZFS menyajikan model pool penyimpan data dimana<br />

model <strong>ini</strong> membuang konsep volume beserta<br />

masalahnya. Masalah-masalah tersebut meliputi:<br />

perlunya mempartisi, melakukan provision, kinerja<br />

yang tidak maksimal dan pemakaian kapasitas<br />

penyimpan yang tidak optimal<br />

Gabungan kapasitas I/O dari semua perangkat keras<br />

di dalam pool tersedia untuk untuk semua sistem<br />

file sepanjang waktu.<br />

Masing-masing pool penyimpan data terdiri dari satu<br />

atau lebih perangkat virtual yang menggambarkan<br />

disain penyimpan data fisiknya dan karakteristik<br />

kemampuan bertahan terhadap kerusakan. Kunjungi<br />

http://opensolaris.org/os/community/zfs/demos/basic<br />

s untuk menyaksikan demo adm<strong>ini</strong>strasi sistem file<br />

ZFS yang berjudul “100 Mirrored Filesystems in 5<br />

Minutes”.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

90


Tinjauan<br />

RAID-Z<br />

Selain konfigurasi penyimpanan data tunggal dalam<br />

sebuah pool, ZFS juga menyediakan konfigurasi<br />

penyimpanan data redundansi ter-mirror dan<br />

redundansi RAID-Z yang memberikan perlindungan<br />

sangat baik terhadap kehilangan data. Konfigurasi<br />

RAID-Z merupakan perangkat penyimpan data virtual<br />

yang menyimpan data dan pariti secara tersebar di<br />

banyak disk sekaligus, mirip <strong>dengan</strong> RAID-5.<br />

Berbeda <strong>dengan</strong> RAID-5, RAID-Z menggunakan ukuran<br />

RAID stripe yang tidak tetap sehingga setiap<br />

operasi tulis selalu menjad operasi tulis fullstripe.<br />

Fitur <strong>ini</strong> hanya ada di ZFS karena ZFS<br />

mengintegrasikan manajemen sistem file dan<br />

perangkat keras. Pengintegrasian <strong>ini</strong> menyediakan<br />

suatu cara dimana metadata dari sistem file selalu<br />

memiliki cukup informasi tentang pondasi dari model<br />

replikasi datanya untuk menangani ukuran RAID<br />

stripe yang tidak tetap. RAID-Z merupakan solusi<br />

berbasis perangkat lunak pertama yang mengatasi<br />

kelemahan operasi tulis dari RAID-5.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

91


Tujuan<br />

6M O D U L<br />

Konsep Pemograman<br />

Modul <strong>ini</strong> menyajikan deskripsi umum tentang konsepkonsep<br />

dasar lingkungan pemograman OpenSolaris,<br />

yang meliputi:<br />

Manajemen Proses dan Sistem<br />

Pemograman Thread<br />

Fungsi-fungsi Dasar Kernel<br />

Penjadwalan CPU<br />

Men-debug Proses<br />

Sumber Bacaan<br />

Lain<br />

Solaris Internals (2nd Edition), PrenticeHall PTR<br />

(May 12, 2006) by Jim Mauro and RichardMcDougall<br />

Solaris Systems Programming, PrenticeHall PTR<br />

(August 19, 2004), by Rich Teer<br />

Multithreaded Programming Guide. SunMicrosystems,<br />

Inc., 2005.<br />

STREAMS Programming Guide. SunMicrosystems, Inc.,<br />

2005.<br />

Solaris 64-bit Developer’s Guide.<br />

SunMicrosystems, Inc., 2005.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

92


Manajemen Proses dan Sistem<br />

Manajemen Proses dan Sistem<br />

Unit dasar beban kerja sistem komputasi adalah<br />

proses. Setiap proses diberi tanda pengenal berupa<br />

nomor identifikasi proses (PID), nomor <strong>ini</strong> dibuat<br />

secara berurutan didalam sistem. Sesuai standarnya,<br />

setiap setiap pengguna akan diberikan sebuah proyek<br />

oleh sistem adm<strong>ini</strong>strator, proyek merupakan sebuah<br />

identitas adm<strong>ini</strong>stratif yang bersifat global.<br />

Setiap login ke sebuah proyek akan menciptakan<br />

sebuah tugas (task), tugas merupakan mekanisme<br />

pengelompokan proses. Sebuah tugas terdiri dari<br />

proses login dan anak proses lain yang<br />

mengikutinya.<br />

Fasilitas pool sumber-daya menggabungkan beberapa<br />

sumber-daya yang tersedia bagi proses kedalam<br />

sebuah abstraksi umum disebut pool. Himpunan<br />

prosesor dan sumber-daya lain dikonfigurasikan,<br />

dikelompokan dan diberi label sedemikian rupa<br />

sehingga menjadi komponen beban-kerja yang terkait<br />

sebagai himpunan bagian dari total sumber-daya yang<br />

dimiliki sistem.<br />

Jika fasilitas pool tidak aktif maka semua proses<br />

akan dimiliki oleh pool yang sama yaitu<br />

pool_default, dan himpunan prosesor diatur melalui<br />

panggilan fungsi sistem pset(). Ketika fasilitas<br />

pool diaktifkan, himpunan proses harus diatur<br />

<strong>dengan</strong> menggunakan fasilitas pool. Sebuah pool baru<br />

diciptakan dan dilekatkan <strong>dengan</strong> himpunan prosesor<br />

tertentu. Berikutnya, proses dilekatkan <strong>dengan</strong> pool<br />

yang memiliki himpunan sumber-daya tertentu.<br />

Dengan menggunakan OpenGrok untuk melihat sumber<br />

kode pemograman pool.c, dapt dilihat komentar yang<br />

menjelaskan hubungan antara tugas, pool, proyek dan<br />

proses, seperti berikut <strong>ini</strong>:<br />

“Tindakan untuk melekatkan tugas dan proyek <strong>dengan</strong><br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

93


Manajemen Proses dan Sistem<br />

pool bersifat atomik. Artinya, baik itu semua<br />

proses yang ada didalam sebuah tugas atau proyek<br />

akan dilekatkan ke sebuah pool baru, atau tetap<br />

melekat di pool sebelumnya (jika terjadi<br />

kegagalan). Proses yang ada didalam sebuah tugas<br />

atau proyek hanya bisa dilekatkan ke pool yang<br />

berbeda jika proses-proses tersebut masing-masing<br />

dilekatkan-ulang satu-persatu sebagai proses<br />

tunggal.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

94


Manajemen Proses dan Sistem<br />

Threads atau LWPs dari proses yang sama bukan<br />

merupakan obyek yang dilekatkan pada sebuah pool,<br />

dan keduanya dilekatkan <strong>dengan</strong> himpunan sumber-daya<br />

yang sama yang terkait <strong>dengan</strong> pool sumber-daya dari<br />

proses yang bersangkutan.<br />

Proses dapat juga dijalankan didalam zona. Zona<br />

diciptakan oleh adminstrator sistem, biasanya untuk<br />

alasan keamanan, agar dapat mengisolasi sekelompok<br />

pengguna atau proses dari yang lainnya.”<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

95


Manajemen Proses dan Sistem<br />

Pemograman Thread<br />

Sejauh <strong>ini</strong> telah dipelajari proses dalam konteksnya<br />

<strong>dengan</strong> tugas, proyek, pool sumber daya, zona dan<br />

zona bertanda-identitas, berikutnya akan dipelajari<br />

proses dalam konteksnya <strong>dengan</strong> thread.<br />

UNIX sejak dulu sudah mendukung konsep thread.<br />

Masing-masing proses memiliki setidaknya satu<br />

thread, sehingga pemograman <strong>dengan</strong> banyak proses<br />

berarti pemograman <strong>dengan</strong> banyak thread. Tetapi,<br />

proses juga memerlukan area alamat memori, sehingga<br />

penciptaan sebuah proses berarti juga melibatkan<br />

penciptaan sebuah area alamat memori baru.<br />

Komunikasi antar thread dalam satu proses merupakan<br />

komunikasi yang sederhana karena semua thread<br />

berbagi banyak hal, termasuk area alamat memori dan<br />

deskriptor file terbuka yang sama. Sehingga data<br />

yang dihasilkan oleh satu thread <strong>dengan</strong> segera<br />

tersedia untuk diakses oleh thread yang lain.<br />

File librari yang tersedia untuk permograman<br />

banyak-thread (Multithreading) yaitu libpthread untuk<br />

thread POSIX dan libthread untuk thread OpenSolaris.<br />

Pemograman banyak-thread menyediakan fleksibilitas<br />

<strong>dengan</strong> memisahkan sumber daya di tingkat-kernel<br />

<strong>dengan</strong> sumber daya di tingkat-pengguna. Di<br />

OpenSolaris, pemograman banyak-thread mendukung<br />

himpunan antarmuka yang disediakan oleh librari C<br />

standar.<br />

Gunakan fungsi pthread_create(3C) untuk menambahkan<br />

thread pengontrol baru kedalam sebuah proses.<br />

int pthread_create(pthread_t *tid, const pthread_attr_t *tattr,<br />

void*(*start_routine)(void *), void *arg);<br />

Fungsi pthread_create() dipanggil <strong>dengan</strong> attr yang<br />

telah memiliki kondisi status yang diperlukan.<br />

Fungsi start_routine merupakan fungsi yang berfungsi<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

96


Manajemen Proses dan Sistem<br />

untuk memacu sebuah thread baru untuk memulai<br />

eksekusi. Ketika fungsi start_routine selesai<br />

dipanggil, thread tersebut keluar <strong>dengan</strong> status<br />

keluaran yang ditentukan oleh nilai-balik yang<br />

dikembalikan oleh fungsi start_routine.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

97


Manajemen Proses dan Sistem<br />

Fungsi pthread_create() menghasilkan nilai-balik nol<br />

jika panggilan fungsi tersebut berhasil<br />

diselesaikan tanpa kesalahan. Nilai-balik selain<br />

nol menandakan adanya kesalahan. Lihat informasi<br />

yang tersedia di /on/usr/src/lib/libc/spec/threads.spec<br />

<strong>dengan</strong> OpenGrok untuk mendapat daftar lengkap<br />

fungsi-fungsi pthread dan cara deklarasinya.<br />

Sinkronisasi thread diperlukan untuk mengontrol<br />

aliran program dan akses ke data yang digunakan<br />

secara bersamaan oleh beberapa thread yang sedang<br />

dieksekusi. Ada empat metode sinkronisasi obyek<br />

yaitu penguncian mutex, penguncian baca/tulis,<br />

variabel kondisi, and penghitungan tanda bendera.<br />

Penguncian mutex (Mutex locks) mengizinkan hanya<br />

satu thread pada saat tertentu mengeksekusi area<br />

kode tertentu atau mengakses data tertentu.<br />

Penguncian baca/tulis (Read/write locks)<br />

mengizinkan pembacaan data secara bersamaan<br />

tetapi penulisan data diberikan secara eksklusif<br />

terhadap sumber daya terproteksi yang digunakan<br />

secara bersama. Agar dapat melakukan penulisan<br />

data, sebuah thread harus mendapatkan dulu<br />

pengunci penulisan eksklusif. Pengunci penulisan<br />

eksklusif tidak akan diberikan lagi sampai semua<br />

kunci pembacaan telah dilepaskan oleh thread yang<br />

lain.<br />

Variabel kondisi (Condition variables) memblokir<br />

thread hingga kondisi tertentu memiliki nila<br />

benar.<br />

Penghintungan tanda bendera (Counting semaphores)<br />

biasanya digunakan untuk mengkoordinasikan akses<br />

sebuah sumber daya. Penghitungan tanda bendera<br />

akan menentukan batas berapa banyak thread dapat<br />

memiliki akses ke sebuah tanda bendera. Ketika<br />

limit penghitungan tercapai; thread lain yang<br />

mencoba mengakses sumber daya akan diblokir.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

98


Manajemen Proses dan Sistem<br />

Sinkronisasi<br />

Obyek sinkronisasi merupakan variabel didalam<br />

memori yang dapat diakses datanya. Thread yang<br />

berasal dari proses yang berbeda dapat saling<br />

berkomu-nikasi melalui obyek sinkronisasi yang<br />

tersimpan didalam memori-bersama yang terkontrol<br />

oleh masing-masing thread.<br />

Thread dapat saling berkomunikasi meskipun<br />

sebenarnya thread yang berasal dari proses yang<br />

berbeda secara umum tidak saling terlihat. Obyek<br />

sinkroniasi juga dapat disimpan dalam file. Obyek<br />

sinkronisasi dapat memiliki waktu hidup yang lebih<br />

lama daripada waktu hidup penciptaan proses.<br />

Gunakan OpenGrok untuk menemukan kode pemograman<br />

libthread dan informasi penting lain didalam<br />

mutex.c, perhatikan juga informasi berikut yang<br />

diambil dari sebagian komentar sebuah kode<br />

pemogramman:<br />

Implementation of all threads interfaces between ld.so.1 and<br />

libthread. In a non-threaded environment all thread interfaces<br />

are vectored to noops. When called via _ld_concurrency() from<br />

libthread these vectors are reassigned to real threads<br />

interfaces.<br />

Two models are supported:<br />

TI_VERSION == 1 Under this model libthread provides<br />

rw_rwlock/rw_unlock, through which we vector all<br />

rt_mutex_lock/rt_mutex_unlock calls. Under lib/libthread these<br />

interfaces provided _sigon/_sigoff (unlike lwp/libthread that<br />

provided signal blocking via bind_guard/bind_clear.<br />

TI_VERSION == 2 Under this model only libthreads<br />

bind_guard/bind_clear and thr_self interfaces are used. Both<br />

libthreads block signals under the bind_guard/bind_clear<br />

interfaces. Lower level locking is derived from internally bound<br />

_lwp_ interfaces. This removes recursive problems encountered<br />

when obta<strong>ini</strong>ng locking interfaces from libthread. The use of<br />

mutexes over reader/writer locks also enables the use of<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

99


Manajemen Proses dan Sistem<br />

condition variables for controlling thread concurrency (allows<br />

access to objects only after their .<strong>ini</strong>t has completed).<br />

Setelah memahami bagaimana obyek sinkronisasi<br />

didef<strong>ini</strong>sikan dalam pemograman banyak-thread,<br />

berikutnya dijelaskan bagaimana obyek-obyek <strong>ini</strong><br />

diatur <strong>dengan</strong> kelas-kelas penjadwalan.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

100


Manajemen Proses dan Sistem<br />

Penjadwalan CPU<br />

Proses dieksekusi didalam sebuah kelas penjadwalan<br />

tertentu yang masing-masing memiliki kebijakan<br />

penjadwalan yang berbeda, seperit dijelaskan<br />

berikut <strong>ini</strong>:<br />

Realtime (RT) – Kelas penjadwalan <strong>dengan</strong><br />

prioritas tertinggi yang menyediakan kebijakan<br />

penjadwalan untuk proses yang memerlukan<br />

tanggapan cepat dan pengontrolan prioritas<br />

penjadwalan secara mutlak oleh pengguna atau<br />

aplikasi. Penjadwalan RT dapat diberikan kepada<br />

seluruh proses atau kepada satu atau lebih<br />

lightweight processes (LWPs) dari sebuah proses.<br />

Diperlukan hak istimewa proc_priocntl untuk dapat<br />

menggunakan kelas Realtime. Informasi lebih<br />

lanjut dapat diperoleh di manual privileges (5).<br />

System (SYS) – Kelas penjadwlan <strong>dengan</strong> prioritas<br />

menengah, kelas <strong>ini</strong> tidak dapat diberikan kepada<br />

proses pengguna.<br />

Timeshare (TS) – Kelas penjadwalan <strong>dengan</strong><br />

prioritas terendah dan menjadi kelas standar<br />

untuk proses pengguna. Kebijakan TS adalah<br />

mendistribusikan sumber daya CPU secara merata<br />

diantara proses-proses <strong>dengan</strong> karakteristik<br />

konsumsi CPU yang berbeda. Proses-proses lain<br />

milik Kernel dapat memonopoli prosesor dalam<br />

jangka waktu yang singkat tanpa menyebabkan<br />

penurunan waktu-tanggap yang dirasakan oleh<br />

pengguna.<br />

Inter-Active (IA) – Kebijakan IA adalah selain<br />

mendistribusikan sumber daya CPU secara merata<br />

diantara proses-proses <strong>dengan</strong> karakteristik<br />

konsumsi CPU yang berbeda tetapi juga menyediakan<br />

waktu-tanggap yang baik untuk berinteraksi <strong>dengan</strong><br />

pengguna.<br />

Fair Share (FSS) – Kebijakan FSS adalah<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

101


Manajemen Proses dan Sistem<br />

mendistribusikan sumber daya CPU secara merata<br />

diantara beberapa proyek, tidak tergantung jumlah<br />

proses yang dimiliki proyek bersangkutan. Setiap<br />

proyek mendapatkan besar presentase tertentu<br />

untuk mengontrol hak pemanfaatan sumber daya CPU.<br />

Besarnya pemanfaatan sumber daya CPU selalu<br />

dicatat setiap waktu, sehingga jatah hak<br />

pemanfaatannya semakin dikurangi untuk proyek<br />

yang <strong>dengan</strong> pemakaian CPU besar dan akan<br />

ditambahkankan untuk proyek <strong>dengan</strong> pemakaian CPU<br />

kecil.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

102


Manajemen Proses dan Sistem<br />

Fixed-Priority (FX) – Kebijakan FX menyediakan<br />

penjadwalan preemptive <strong>dengan</strong> prioritas tetap<br />

bagi proses yang memerlukan prioritas penjadwalan<br />

yang tidak secara dinamis disesuaikan oleh sistem<br />

dan pengguna atau aplikasi yang bisa mengontrol<br />

sendiri prioritas penjadwalannya. Kelas <strong>ini</strong> dapat<br />

digunakan untuk memulai pengubahan kebijakan<br />

pengalokasian CPU.<br />

Kelas penjadwalan diberikan kepada masing-masing<br />

LWP. Setiap thread mendapatkan kelas penjadwalan<br />

dan prioritas dari LWP dimana thread tersebut<br />

berasal. Masing-masing LWP dalam sebuah proses<br />

dapat memiliki kelas penjadwalan dan prioritas unik<br />

yang diperlakukan berbeda oleh kernel. Prioritas<br />

thread akan menentukan persaingan untuk mendapatkan<br />

obyek sinkronisasi.<br />

Kelas penjadwalan RT dan TS keduanya memanggil<br />

fungsi priocntl(2) untuk menentukan tingkat prioritas<br />

sebuah proses atau LWP dalam sebuah proses. Gunakan<br />

OpenGrok mencari dasar kode pemograman fungsi<br />

priocntl, dari file rtsched.c dapat diketahui variabelvariabel<br />

yang digunakan oleh kelas penjadwalan RT<br />

and TS sebagai berikut:<br />

27 #pragma ident "@(#)rtsched.c 1.10 05/06/08 SMI"<br />

28<br />

29 #include "lint.h"<br />

30 #include "thr_uberdata.h"<br />

31 #include <br />

32 #include <br />

33 #include <br />

34 #include <br />

35 #include <br />

36 #include <br />

37<br />

38 /*<br />

39 * The following variables are used for caching information<br />

40 * for priocntl TS and RT scheduling classs.<br />

41 */<br />

42 struct pcclass ts_class, rt_class;<br />

43<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

103


Manajemen Proses dan Sistem<br />

44 static rtdpent_t *rt_dptbl; /* RT class parameter table */<br />

45 static int rt_rrmin;<br />

46 static int rt_rrmax;<br />

47 static int rt_fifomin;<br />

48 static int rt_fifomax;<br />

49 static int rt_othermin;<br />

50 static int rt_othermax;<br />

Dengan mengetikan perintah man priocntl di sebuah<br />

jendela terminal, diperlihatkan rincian informasi<br />

yang berhubungan <strong>dengan</strong> masing-masing kelas<br />

penjadwalan, atribut, dan pemakaiannya.<br />

% man priocntl<br />

Reformatting page. Please Wait... done<br />

User Commands priocntl(1)<br />

NAME<br />

priocntl - display or set scheduling parameters of specified<br />

process(es)<br />

SYNOPSIS<br />

priocntl -l<br />

priocntl -d [-i idtype] [idlist]<br />

priocntl -s [-c class] [ class-specific options] [-i<br />

idtype] [idlist]<br />

priocntl -e [-c class] [ class-specific options] command<br />

[argument(s)]<br />

DESCRIPTION<br />

The priocntl command displays or sets scheduling parameters of<br />

the specified process(es). It can also be used to display the<br />

current configuration information for the system’s process<br />

scheduler or execute a command with specified scheduling<br />

parameters.<br />

Processes fall into distinct classes with a separate scheduling<br />

policy applied to each class. The process classes currently<br />

supported are the real-time class, time-sharing class,<br />

interactive class, fair-share class, and the fixed priority<br />

class. The characteristics of these classes and the classspecific<br />

options they accept are described below in the USAGE<br />

section under the headings Real-Time Class, Time- Sharing<br />

Class, Inter-Active Class, Fair-Share Class, and<br />

--More--(4%)<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

104


Manajemen Proses dan Sistem<br />

Tinjauan Umum Kernel<br />

Setelah memiliki pemahaman di tingkat-atas tentang<br />

proses, thread dan penjadwalan, berikutnya akan<br />

disajikan penjelasan tentang kernel dan bagaimana<br />

modul kernel berbeda <strong>dengan</strong> program pengguna.<br />

Kernel Solaris berperan melakukan hal-hal berikut:<br />

Manajemen sumber daya sistem, termasuk<br />

diantaranya sistem file, proses dan perangkat<br />

keras.<br />

Menyediakan layanan sistem kepada aplikasi<br />

seperti manajemen I/O, memori virtual dan<br />

penjadwalan.<br />

Mengkoordinasikan interaksi antara proses<br />

pengguna dan sumber daya sistem.<br />

Memberikan prioritas, melayani permintaan atas<br />

sumber daya, melayani interupsi perangkat keras<br />

dan eksepsi.<br />

Menjadwalkan dan mengganti thread, area memori<br />

dan men-swap proses.<br />

Pada bagian berikut <strong>ini</strong> dijelaskan beberapa<br />

perbedaan penting antara modul kernel dan program<br />

pengguna.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

105


Manajemen Proses dan Sistem<br />

Perbedaan Antara Eksekusi Modul<br />

Kernel dan Program Pengguna<br />

Berikut adalah karakteristik-karakteristik modul<br />

kernel yang membedakannya <strong>dengan</strong> program pengguna<br />

pada saat dieksekusi:<br />

Modul kernel memiliki area alamat memori yang<br />

terpisah. Sebuah modul berjalan di area kernel.<br />

Aplikasi berjalan di area pengguna. Perangkat<br />

lunak sistem diproteksi dari program pengguna.<br />

Area kernel dan area pengguna masing-masing<br />

memiliki area alamat memori sendiri.<br />

Modul kernel memiliki hak eksekusi lebih tinggi.<br />

Kode pemograman yang berjalan di area kernel<br />

memiliki lebih banyak hak istimewa daripada kode<br />

pemograman yang berjalan di area kernel.<br />

Modul kernel tidak dieksekusi secara berurutan.<br />

Program pengguna biasanya dieksekusi secara<br />

berurutan dan melakukan satu tugas tunggal sejak<br />

awal hingga berhenti. Modul kernel tidak<br />

dieksekusi secara berurutan. Modul kernel<br />

mendaftarkan diri sebagai komponen kernel agar<br />

bisa melayani permintaan layanan yang akan<br />

datang.<br />

Modul kernel dapat diinterupsi. Bebarapa proses<br />

dapat secara bersamaan mengirimkan permintaan<br />

kepada sebuah modul kernel. Contohnya, sebuah<br />

program kernel bertugas menangani interupsi bisa<br />

saja mengirimkan permintaan kepada sebuah modul<br />

kernel yang sedang melayani panggilan sistem pada<br />

saat yang sama. Didalam sistem berprosesor-banyak<br />

simetrik (Symmetric Multiprocessor, SMP), sebuah<br />

modul kernel dapat dieksekusi secara bersamaan<br />

oleh beberapa CPU.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

106


Manajemen Proses dan Sistem<br />

Modul kernel harus bersifat preemptive. Meskipun<br />

sebuah program penggerak tidak dapat memblokir<br />

sebuah modul kernel, <strong>ini</strong> tidak berarti kernel<br />

modul <strong>ini</strong> aman. Rancanglah sebuah program<br />

penggerak <strong>dengan</strong> asumsi bahwa kernel modul yang<br />

bersangkutan bersifat preemptive.<br />

Modul kernel dapat berbagi data. Thread yang<br />

berbeda dari sebuah program aplikasi tidak perlu<br />

untuk berbagi data. Berlawanan <strong>dengan</strong> struktur<br />

data dan kode pemograman rutin sebagai komponen<br />

program penggerak yang digunakan secara bersamaan<br />

oleh semua thread yang ada dalam program<br />

penggereak tersebut. Sebuah program penggerak<br />

harus dapat menangani masalah perebutan sumber<br />

daya sebagai akibat permintaan yang banyak.<br />

Rancanglah struktur data program penggerak <strong>dengan</strong><br />

penuh pertimbangan untuk menjaga agar beberapa<br />

thread tetap dieksekusi secara terpisah.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

107


Manajemen Proses dan Sistem<br />

Perbedaan Struktural antara Modul<br />

Kernel Modules dan Program Pengguna<br />

Berikut adalah karakteristik-karakteristik struktur<br />

modul kernel yang membedakannya <strong>dengan</strong> struktur<br />

program pengguna:<br />

Modul kernel tidak mendef<strong>ini</strong>sikan program utama.<br />

Modul kernel, termasuk program penggerak<br />

perangkat tidak memiliki fungsi rutin utama<br />

main(). Sebaliknya, modul kernel merupakan<br />

kumpulan fungsi sub-rutin dan data.<br />

Modul kernel hanya di-<strong>link</strong> ke komponen librari<br />

kernel. Modul kernel tidak di-<strong>link</strong> ke librari<br />

yang digunakan oleh program pengguna. Kernel<br />

module hanya bisa memanggil fungsi-fungsi yang<br />

telah dieksport oleh kernel.<br />

Modul kernel menggunakan file header yang<br />

berbeda. Modul kernel memerlukan himpunan file<br />

header yang berbeda <strong>dengan</strong> file header yang<br />

diperlukan oleh program pengguna. Daftar file<br />

header yang diperlukan dapat dilihat di halaman<br />

manual masing-masing fungsi. Modul kernel bisa<br />

saja mengikutkan file header yang digunakan<br />

bersama oleh program pengguna jika antarmuka<br />

antara kode di area user dan area kernel didalam<br />

header file tersebut didef<strong>ini</strong>sikan secara<br />

kondisional <strong>dengan</strong> makro _KERNEL.<br />

Modul kernel sebaiknya menghindari pemakaian<br />

variabel global. Penghindaran variabel global<br />

didalam kernel modul jauh lebih penting<br />

dibandingkan penghindaran variabel global didalam<br />

program pengguna. Sebisa mungkin, deklarasikan<br />

simbol sebagai statik. Ketika penggunaan simbol<br />

global tidak dapat dihindari, tambahkan prefix ke<br />

nama simbol global tersebut agar unik didalam<br />

kernel. Penggunan prefix untuk simbol private<br />

dalam modul juga merupakan kebiasaan yang baik.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

108


Manajemen Proses dan Sistem<br />

Modul kernel dapat dibuat berdasarkan kebutuhan<br />

spesifik perangkat keras. Modul kernel dapat<br />

menggunakn register proses secara khusus hanya<br />

untuk melakukan fungsi yang specifik. Modul<br />

kernel dapat dioptimalisasikan untuk jenis<br />

prosesor tertentu. Librari juga dapat dibuat<br />

berdasarkan kebutuhan spesifik tertentu, seperti<br />

di OpenSolaris memiliki librari untuk sistem x86/<br />

x64 and UltraSPARC. Jadi, jika kernel dapat<br />

menggunakan register untuk fungsi tertentu maka<br />

kode pemograman dapat dibuat sesuai kebutuhan<br />

kernel dan pengguna/librari.<br />

Modul kernel dapat dimuatkan dan dibongkarmuatkan<br />

sesuai permintaan. Kumpulan fungsi sub-rutin dan<br />

data yang merupakan bagian program penggerak<br />

perangkat dapat dikompilasi menjadi sebuah kode<br />

obyek dari sebuah module tunggal yang dapat<br />

dimuatkan. Modul <strong>ini</strong> berikutnya dapat secara<br />

dinamis atau statik di-<strong>link</strong> kedalam kernel dan<br />

di-un<strong>link</strong> dari kernel. Penambahan fungsi baru<br />

kedalam kernel dapat dilakukan pada saat kernel<br />

aktif dan berjalan. Pengujian versi terbaru<br />

sebuah program penggerak dapat dilakukan tanpa<br />

me-reboot sistem.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

109


Manajemen Proses dan Sistem<br />

Men-debug Proses<br />

Men-debug proses pada semua tingkat dari tahap<br />

pengembangannya merupakan bagian kunci dari<br />

pembuatan modul kernel.<br />

Pencarian kode pemograman libthread <strong>dengan</strong><br />

OpenGrok, mengarahkan kita ke file mdb_tdb.c yang<br />

menjelaskan hubungan antara multi-threaded<br />

debugging dan bagaimana mdb bekerja:<br />

In order to properly debug multi-threaded programs, the proc<br />

target must be able to query and modify information such as a<br />

thread’s register set using either the native LWP services<br />

provided by libproc (if the process is not <strong>link</strong>ed with<br />

libthread), or using the services provided by libthread_db (if<br />

the process is <strong>link</strong>ed with libthread).<br />

Additionally, a process may begin life as a single-threaded<br />

process and then later dlopen() libthread, so we must be<br />

prepared to switch modes on-the-fly. There are also two possible<br />

libthread implementations (one in /usr/lib and one in<br />

/usr/lib/lwp) so we cannot <strong>link</strong> mdb against libthread_db<br />

directly; instead, we must dlopen the appropriate libthread_db<br />

on-the-fly based on which libthread.so the victim process has<br />

open. Finally, mdb is designed so that multiple targets can be<br />

active simultaneously, so we could even have *both*<br />

libthread_db’s open at the same time.<br />

This might happen if you were looking at two multi-threaded user<br />

processes inside of a crash dump, one using<br />

/usr/lib/libthread.so and the other using<br />

/usr/lib/lwp/libthread.so. To meet these requirements, we<br />

implement a libthread_db "cache" in this file. The proc target<br />

calls mdb_tdb_load() with the pathname of a libthread_db to<br />

load, and if it is not already open, we dlopen() it, look up the<br />

symbols we need to reference, and fill in an ops vector which we<br />

return to the caller.<br />

Once an object is loaded, we don’t bother unloading it unless<br />

the entire cache is explicitly flushed. This mechanism also has<br />

the nice property that we don’t bother loading libthread_db<br />

until we need it, so the debugger starts up faster.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

110


Manajemen Proses dan Sistem<br />

Perintah-perintah mdb berikut dapat digunakan untuk<br />

mengakses LWP dari sebuah progarm <strong>dengan</strong> banyakthread:<br />

$l Menampilkan LWP ID dari thread representatif<br />

jika targetnya adalah proses pengguna.<br />

$L Menampilan LWP ID dari masin-masing LWP<br />

didalam target jika targetnya adalah proses<br />

pengguna.<br />

pid::attach Melekatkan ke sebuah proses <strong>dengan</strong><br />

menggunakan ID prosesnya, pid<br />

::release Melepaskan proses atau file core yang<br />

sebelumnya dilekatkan. Proses masih dapat<br />

melanjutkan eksekusinya <strong>dengan</strong> menggunakan prun(1)<br />

atau MDB atau pen-debug yang lain.<br />

address::context Melakukan context switch terhadap<br />

proses yang ditentukan. Perintah <strong>ini</strong> menetapkan<br />

conditional breakpoints yang seringkali berguna.<br />

[ addr ] ::bp [+/-dDestT] [-c cmd] [-n count] sym ...<br />

Menentukan breakpoint pada lokasi tertentu.<br />

addr ::delete [id | all] Menghapus event specifiers<br />

<strong>dengan</strong> nomor ID tertentu<br />

Probe DTrace juga dikonstruksikan <strong>dengan</strong> cara yang<br />

sama seperti MDB. Pada halaman berikutnya terdapat<br />

latihan lab menggunakan DTrace kemudian MDB ketika<br />

men-debug semakin sulit dan kompleks.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

111


Tujuan<br />

7M O D U L<br />

Memulai Penggunaan DTrace<br />

Tujuan dari latihan lab <strong>ini</strong> adalah untuk<br />

memperkenalkan DTrace <strong>dengan</strong> menggunakan skrip<br />

probe untuk sebuah system call <strong>dengan</strong> DTrace.<br />

Sumber Bacaan<br />

Lain<br />

Solaris Dynamic Tracing Guide. SunMicrosystems,<br />

Inc., 2007.<br />

DTrace User Guide, SunMicrosystems, Inc., 2006<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

112


Mengaktifkan Probe DTrace Sederhana<br />

Mengaktifkan Probe DTrace Sederhana<br />

Setelah menyelesaikan latihan-latihan di modul <strong>ini</strong><br />

diharapkan peserta memiliki pemahaman dasar tentang<br />

probe-probe didalam DTrace.<br />

Ringkasan<br />

Pembelajaran DTrace dimulai <strong>dengan</strong> membuat<br />

permintaan yang sangat sederhana yaitu menggunakan<br />

probe yang bernama BEGIN; probe <strong>ini</strong> akan terpicu<br />

(aktif) satu kali setiap ada permintaan merunut<br />

baru. Kita dapat menggunakan opsi –n dari perintah<br />

dtrace(1M) untuk mengaktifkan sebuah probe <strong>dengan</strong><br />

menggunakan nama string-nya.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

113


Mengaktifkan Probe DTrace Sederhana<br />

Mengaktifkan Probe DTrace<br />

Sederhana<br />

1.Buka jendela terminal<br />

2.Mengaktifkan sebuah probe:<br />

# dtrace -n BEGIN<br />

Setelah jeda beberapa saat, dapat disaksikan<br />

dtrace menyatakan bahwa sebuah probe diaktifkan<br />

dan sebaris informasi keluaran muncul<br />

mengindikasi probe BEGIN sudah dipicu.<br />

Setelah muncul keluaran <strong>ini</strong>, dtrace tetap menunggu<br />

probe yang lain untuk memicu. Karena kita tidak<br />

akan mengaktifkan probe yang lain dan probe BEGIN<br />

cukup hanya diaktifkan satu kali, tekan Control-C<br />

untuk keluar dari dtrace dan kembali ke prompt<br />

shell:<br />

3.Kembali ke shell prompt <strong>dengan</strong> menekan Control-C:<br />

# dtrace -n BEGIN<br />

dtrace: description ’BEGIN’ matched 1 probe<br />

CPU ID FUNCTION:NAME<br />

0 1 :BEGIN<br />

^C<br />

#<br />

Keluaran <strong>ini</strong> menjelaskan bahwa probe bernama<br />

BEGIN dipicu satu kali dan baik nama dan nomor<br />

ID, 1 ditampilkan. Perhatikan bahwa berdasarkan<br />

standar, nomor CPU dimana probe dipicu yang akan<br />

ditampilkan. Dalam contoh <strong>ini</strong>, kolom CPU<br />

mengindikasinya bahwa perintah dtrace dieksekusi<br />

pada CPU 0 ketika probenya dipicu.<br />

Permintaan DTrace dapat dikonstruksi <strong>dengan</strong><br />

menggunakan berapapun jumlah probe dan aksi.<br />

Berikutnya, buat lagi sebuah permintaan sederhana<br />

menggunakan dua probe yaitu <strong>dengan</strong> penambahan<br />

probe END pada contoh perintah sebelumnya. Probe<br />

END memicu satu kali ketika merunut telah<br />

lengkap.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

114


Mengaktifkan Probe DTrace Sederhana<br />

4.Tambahkan probe END:<br />

# dtrace -n BEGIN -n END<br />

dtrace: description ’BEGIN’ matched 1 probe<br />

dtrace: description ’END’ matched 1 probe<br />

CPU ID FUNCTION:NAME<br />

0 1 :BEGIN<br />

^C<br />

0 2 :END<br />

#<br />

Probe END memicu satu kali ketika merunut telah<br />

lengkap. Seperti diperlihatkan, <strong>dengan</strong> menekan<br />

Control-C untuk keluar DTrace akan membangkitkan<br />

probe END. DTrace menampilkan informasi bahwa<br />

probe <strong>ini</strong> memicu sebelum keluar.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

115


Menampilkan Traceable Probes<br />

Menampilkan Probe Perunut<br />

Tujuan dari lab <strong>ini</strong> adalah untuk mengenal probe<br />

lebih jauh dan memperlihatkan bagaimana menampilkan<br />

probe yang ada dalam sebuah sistem.<br />

Ringkasan<br />

Pada contoh-contoh sebelumnya, telah dipelajari 2<br />

probe sederhana bernama BEGIN dan END. Tetapi<br />

darimana kedua probe <strong>ini</strong> sebenarnya berasal? Probe<br />

DTrace berasal dari himpunan modul-modul kernel<br />

yang disebut penyedia (provider), dimana masingmasing<br />

penyedia melakukan suatu bentuk<br />

instrumentasi tertentu untuk membuat probe. Sebagai<br />

contoh, penyedia syscall menyediakan probe untuk<br />

setiap panggilan system( system call) and the<br />

penyedia fbt menyediakan probe untuk setiap fungsi<br />

yang ada didalam kernel.<br />

Ketika menggunakan DTrace, setiap penyedia<br />

diberikan kesempatan untuk mempublikasikan setiap<br />

probe yang ada yang di kerangka kerja DTrace.<br />

Berikutnya setiap probe yang telah dipublikasikan<br />

dapat diaktifkan dan dilekatkan aksi perunut.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

116


Menampilkan Traceable Probes<br />

Menampilkan Probe Perunut<br />

1.Buka jendela terminal.<br />

2.Ketikan perintah berikut.:<br />

# dtrace<br />

Opsi-opsi yang ada perintah dtrace ditampilkan.<br />

3.Ketikan perintah dtrace <strong>dengan</strong> opsi –l :<br />

# dtrace -l | more<br />

ID PROVIDER MODULE FUNCTION NAME<br />

1 dtrace BEGIN<br />

2 dtrace END<br />

3 dtrace ERROR<br />

4 lockstat genunix mutex_enter adaptiveacquire<br />

5 lockstat genunix mutex_enter adaptiveblock<br />

6 lockstat genunix mutex_enter adaptive-spin<br />

7 lockstat genunix mutex_exit adaptiverelease<br />

--More--<br />

Probe-probe yang tersedia di sistem ditampilkan<br />

dalam lima kolom informasi sebagai berikut:<br />

ID – Nomor urut identifikasi internal dari<br />

probe yang ditampilkan<br />

Provider – Nama Penyedia. Penyedia digunakan<br />

untuk mengklasifikasikan probe. Ini juga<br />

digunakan sebagai metode instrumentasinya.<br />

Module – Nama modul Unix atau librari aplikasi<br />

dari probe yang bersangkutan<br />

Function – Nama fungsi dimana sebuah probe<br />

berasal.<br />

Name – Nama probe<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

117


Menampilkan Traceable Probes<br />

4.Gunakan simbol pipa untuk meneruskan keluaran<br />

dari perintah sebelumnya kedalam perintah wc<br />

untuk menghitung jumlah total probe yang ada di<br />

sistem:<br />

# dtrace -l | wc -l<br />

30122<br />

Jumlah probe yang diketahui oleh sistem<br />

ditampilkan sebagai keluarannya. Jumlah <strong>ini</strong> bisa<br />

berbeda tergantung tipe sistemnya.<br />

5.Tambahkan opsi-opsi berikut untum mem-filter<br />

tampilannya:<br />

-P untuk penyedia<br />

-m for modul<br />

-f untuk fungsi<br />

-n untuk name<br />

Perhatikan contoh-contoh berikut:<br />

# dtrace -l -P lockstat<br />

ID PROVIDER MODULE FUNCTION NAME<br />

4 lockstat genunix mutex_enter adaptive-acquire<br />

5 lockstat genunix mutex_enter adaptive-block<br />

6 lockstat genunix mutex_enter adaptive-spin<br />

7 lockstat genunix mutex_exit adaptive-release<br />

Hanya probe-probe yang ada didalam penyedia<br />

lockstat yang ditampilkan<br />

# dtrace -l -m ufs<br />

ID PROVIDER MODULE FUNCTION NAME<br />

15 sysinfo ufs ufs_idle_free ufsinopage<br />

16 sysinfo ufs ufs_iget_internal ufsiget<br />

356 fbt ufs allocg entry<br />

Hanya probe-probe yang ada di modul UFS yang<br />

ditampikan.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

118


Menampilkan Traceable Probes<br />

# dtrace -l -f open<br />

ID PROVIDER MODULE FUNCTION NAME<br />

4 syscall open entry<br />

5 syscall open return<br />

116 fbt genunix open entry<br />

117 fbt genunix open return<br />

Hanya probe-probe <strong>dengan</strong> name fungsi open yang<br />

ditampilkan.<br />

# dtrace -l -n start<br />

ID PROVIDER MODULE FUNCTION NAME<br />

506 proc unix lwp_rtt_<strong>ini</strong>tial start<br />

2766 io genunix default_physio start<br />

2768 io genunix aphysio start<br />

5909 io nfs nfs4_bio start<br />

Perintah diatas menampilkan semua probe yang<br />

memiliki nama probe start.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

119


Pemograman Bahasa D<br />

Pemograman Bahasa D<br />

Setelah memiliki sedikit pemahaman tentang<br />

penamaan, mengaktifkan dan menampilkan probe,<br />

langkah berikutnya diharapkan peserta bisa<br />

menuliskan sebuah versi program DTrace sederhana,<br />

"Hello, World."<br />

Ringkasan<br />

Lab <strong>ini</strong> mendemonstrasikan bahwa DTrce dapat<br />

dituliskan dalam sebuah teks file <strong>dengan</strong> mengunakan<br />

bahasa pemograman D, selain mengkonstruksinya<br />

<strong>dengan</strong> perintah baris.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

120


Pemograman Bahasa D<br />

Menuliskan Program DTrace<br />

1.Buka jendela terminal.<br />

2.Gunakat editor teks, buat sebuah file baru<br />

bernama hello.d.<br />

3.Ketikan sebuah program D:<br />

BEGIN<br />

{<br />

trace("hello, world");<br />

exit(0);<br />

}<br />

4.Simpan file the hello.d.<br />

5.Jalankan program tersebut menggunakan opsi dtrace –<br />

s:<br />

# dtrace -s hello.d<br />

dtrace: script ’hello.d’ matched 1 probe<br />

CPU ID FUNCTION:NAME<br />

0 1 :BEGIN hello, world<br />

#<br />

Seperti diperlihat diatas, dtrace menampilkan<br />

keluaran yang sama seperti sebelumnya kemudian<br />

diikuti teks “hello, world”. Tidak seperti contoh<br />

sebelumnya, tidak diperlukan waktu untuk menunggu<br />

ataupun menekan Control-C.<br />

Perubahan <strong>ini</strong> merupakan efek dari aksi yang<br />

dimiliki oleh probe BEGIN didalam hello.d. Di<br />

halaman berikut, akan digali lebih dalam struktur<br />

program D untuk memahami apa yang sebenarnya<br />

terjadi.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

121


Pemograman Bahasa D<br />

Diskusi<br />

Setiap program D terdiri atas sebuah urutan klausaklausa,<br />

masing-masing klausa menggambarkan satu<br />

atau lebih probe yang akan diaktifkan, dan<br />

sekumpulan aksi opsional yang akan dilakukan ketika<br />

probe terpicu. Aksi sendiri ditampilkan sebagai<br />

kumpulan urutan pernyataan yang diapit tanda kurung<br />

{ } setelah nama probe. Setiap pernyataan diakhiri<br />

oleh sebuah tanda titik-koma (;).<br />

Pernyataan pertama menggunakan fungsi trace() yang<br />

menandakan bahwa DTrace seharusnya merekam arguman<br />

yang diberikan, string “hello, world”, ketika BEGIN<br />

probe terpicu dan menampilkannya ke monitor.<br />

Pernyataan kedua menggunakan fungsi exit() untuk<br />

menandakan bahwa DTrace seharusnya menghentikan<br />

proses merunut dan keluar dari perintah dtrace.<br />

DTrace menyediakan sekumpulan fungsi – fungsi yang<br />

sangat berguna seperti trace() and exit() untuk<br />

digunakan didalam progam D. Untuk memanggil sebuah<br />

fungsi, spesifikasikan namanya diikuti oleh<br />

argumen-argumennya didalam tanda kurung. Daftar<br />

lengkap fungsi-fungsi D dijelaskan dalam Solaris<br />

Dynamic Tracing Guide.<br />

Sampai dis<strong>ini</strong>, mereka yang terbiasa <strong>dengan</strong> bahasa<br />

pemograman C, akan menyadari dari nama fungsi dan<br />

contoh-contoh diatas bahwa bahasa pemograman D yang<br />

digunakan oleh DTrace sangat mirip <strong>dengan</strong> C dan<br />

awk(1). Pada kenyataannya, bahasa D memang berasal<br />

dari sebagian besar sub-bagian bahasa C yang<br />

dikombinasikan <strong>dengan</strong> kumpulan fungsi-fungsi dan<br />

variabel khusus sehingga membantu memudahkan proses<br />

merunut.<br />

Mereka yang sebelumnya pernah membuat program C,<br />

akan <strong>dengan</strong> segera mentransfer sebagian besar<br />

pengetahuan tentang C untuk membuat program tracing<br />

dalam bahasa D. Untuk mereka yang tidak mengenal<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

122


Pemograman Bahasa D<br />

bahasa C, mempelajari bahasa D tetap sangat mudah.<br />

Langkah pertama yang harus dilakukan adalah<br />

memahami <strong>dengan</strong> benar kaidah-kaidahnya dan<br />

mempelajari lebih dalam bagaimana DTrace bekerja,<br />

kemudian mempelajari bagaimana membuat program D<br />

yang lebih menarik<br />

.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

123


Tujuan<br />

8M O D U L<br />

Men-debug Aplikasi <strong>dengan</strong><br />

DTrace<br />

Tujuan dari modul <strong>ini</strong> adalah untuk menggunakan<br />

DTrace untum memonitor kejadian-kejadian tertentu<br />

dari sebuah aplikasi.<br />

Sumber Bacaan<br />

Lain<br />

Application Packaging Developer’s Guide.<br />

SunMicrosystems, Inc., 2005.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

124


Mengaktifkan Probe Didalam Moda Pengguna<br />

Mengaktifkan Probe Didalam Moda<br />

Pengguna<br />

DTrace memungkinkan juga untuk secara dinamis<br />

menambah probe-probe kedalam fungsi-fungsi di<br />

tingkat pengguna. Kode program pengguna tidak perlu<br />

untuk dikompilasi-ulang, bendera khusus, atau<br />

distart-ulang. Probe-probe DTrace dapat dinyalakan<br />

hanya <strong>dengan</strong> pemanggilan penyedianya.<br />

Sebuah deskripsi probe memili kaidah sebagai<br />

berikut:<br />

pid:mod:function:name<br />

pid: format pid processid (contoh pid 5234)<br />

mod: nama librari atau a.out (biner tereksekusi)<br />

function: nama fungsi<br />

name: entry for function entry return for function<br />

return<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

125


Merunut Aplikasi Dengan DTrace<br />

Merunut Aplikasi Dengan DTrace<br />

Didalam latihan <strong>ini</strong> akan dipelajari bagaimana<br />

memanfaatkan DTrace untuk merunut sebuah aplikasi.<br />

Ringkasan<br />

Lab <strong>ini</strong> dibuat <strong>dengan</strong> menggunakan nomor ID proses<br />

di dalam deskripsi probe untuk merunut aplikasi<br />

tertentu. Langkah-langkahnya semakin kompleks di<br />

bagian akhir latihan <strong>ini</strong>, <strong>dengan</strong> menambahkan jumlah<br />

dan kedalaman informasi dari perilaku aplikasi yang<br />

teramati.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

126


Merunut Aplikasi Dengan DTrace<br />

Merunut gcalctool <strong>dengan</strong><br />

DTrace<br />

1.Dari menu Application atau Program, jalankan<br />

program kalkulator.<br />

2.Temukan nomor ID prosesnya.<br />

# pgrep gcalctool<br />

8198<br />

Angka <strong>ini</strong> adalah nomor ID proses gcalctool,<br />

selanjutnya akan disebut procid.<br />

3.Ikuti langkah-langkah berikut untuk membuat skrip<br />

D yang akan menghitung berapa kali fungsi-fungsi<br />

tertentu di dalam gcalctool dipanggil.<br />

a.Dengan editor teks, buat sebuah file bernama<br />

proc_func.d.<br />

b.Gunakan pid$1:::entry sebagai deskripsi-probe.<br />

$1 adalah argumen pertama yang yang diterima oleh<br />

skrip, biarkan bagian predikat tetap kosong.<br />

c.Dibagian aksi, tambahkan sebuah fungsi<br />

pengkumulatif untuk menghitung jumlah total<br />

berapa kali fungsi-fungsi tertentu dipanggil<br />

<strong>dengan</strong> menggunakan aggregate statement<br />

@[probefunc]=count().<br />

pid$1:::entry<br />

{<br />

@[probefunc]=count();<br />

}<br />

d.Jalankan skrip yang baru dituliskan tadi.<br />

# dtrace -qs proc_func.d procid<br />

Ganti procid <strong>dengan</strong> nomor ID proses gcalctool<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

127


Merunut Aplikasi Dengan DTrace<br />

e.Lakukan sebuah penghitungan di program<br />

kalkulator.<br />

f.Tekan Control+C didalam jendela dimana skrip D<br />

dijalankan.<br />

Catatan – Skrip DTrace mengumpulkan data secara<br />

terus menerus hingga diberhentikan <strong>dengan</strong> menekan<br />

Control+C. Jika tidak diperlukan untuk menampilkan<br />

jumlah data total yang dikumpulkan, DTrace tetap<br />

akan menampilkannya.<br />

4.Sekarang, modifikasi skripnya sehingga hanya<br />

menghitung fungsi-fungsi dari librari libc.<br />

a. Salin file proc_func.d ke proc_libc.d.<br />

b. Modifikasi deskripsi probe didalam file<br />

proc_libc.d menjadi seperti berikut:<br />

pid$1:libc::entry<br />

c. Skrip barunya akan terlihat seperti<br />

<strong>ini</strong>:<br />

pid$1:libc::entry<br />

{ @[probefunc]=count();<br />

}<br />

5.Sekarang jalankan skripnya<br />

# dtrace -qs proc_libc.d procid<br />

Ganti procid <strong>dengan</strong> nomor ID proses gcalctool<br />

a. Lakukan sebuah perhitungan di kalkulator<br />

b. Tekan Control+C didalam jendela dimana<br />

skrip D dijalankan untuk melihat keluarannya.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

128


Merunut Aplikasi Dengan DTrace<br />

6.Terakhir, modifikasi skripnya untuk mengetahui<br />

berapa lama waktu yang diperlukan oleh masingmasing<br />

fungsi.<br />

a. Buat sebuah file bernama func_time.d.<br />

Gunakan dua deskripsi probe didalam func_time.d.<br />

b. Tuliskan probe pertama seperti berikut:<br />

pid$1:::entry<br />

c. Tuliskan probe kedua seperti berikut:<br />

pid$1:::return<br />

d. Di bagian aksi dari probe pertama, simpan<br />

timestamp didalam variabel ts.<br />

Timestamp adalah sebuah variable yang secara<br />

internal tersedia (built-in) di DTrace dan<br />

berfungsi untuk menghitung berapa nanoseconds<br />

waktu yang diperlukan dari titik tertentu yang<br />

lampau.<br />

e. Dibagian aksi dari probe kedua hitung<br />

berapa nanosecond waktu total yang terlewati:<br />

@[probefunc]=sum(timestamp - ts)<br />

f. Skrip func_time.d akan sama <strong>dengan</strong> yang<br />

berikut <strong>ini</strong>:<br />

pid$1:::entry<br />

{ ts = timestamp;<br />

}<br />

pid$1:::return /ts/<br />

{ @[probefunc]=sum(timestamp - ts);<br />

}<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

129


Merunut Aplikasi Dengan DTrace<br />

7.Jalankan skrip func_time.d:<br />

# dtrace -qs func_time.d procid<br />

Ganti procid <strong>dengan</strong> ID prosesnya gcalctool<br />

a. Lakukan perhitungan <strong>dengan</strong> kalkulator.<br />

b. Tekan Control+C di dalam terminal dimana<br />

skrip D dijalankan untuk melihat keluaran<br />

perintahnya:<br />

^C<br />

gdk_xid__equal 2468<br />

_XSetLastRequestRead 2998<br />

_XDeq 3092<br />

...<br />

Kolom kiri meperlihatkan nama fungsi dan kolom<br />

kanan memperlihatkan on waktu yang diperlukan untuk<br />

fungsi tersebut. Satuan waktunya adalah nano<br />

seconds.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

130


Tujuan<br />

9M O D U L<br />

Men-debug Aplikasi C++ <strong>dengan</strong><br />

DTrace<br />

Contoh-contoh yang terdapat dalam modul <strong>ini</strong><br />

mendemonstrasikan pemanfaatan DTrace untuk<br />

mendiagnosa kesalahan-kesalahan pada aplikasi C++.<br />

Contoh-contoh <strong>ini</strong> juga digunakan untuk<br />

membandingkan DTrace <strong>dengan</strong> peranti pen-debug<br />

aplikasi yang lain, termasuk perangkat lunak Sun<br />

Studio 10 dan mdb.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

131


Menggunakan DTrace Untuk Men-debug dan Membuat Profil<br />

Sebuah Program C++<br />

Menggunakan DTrace Untuk Men-debug<br />

dan Membuat Profil Sebuah Program C+<br />

+<br />

Sebuah program sampel CCtest dibuat untuk<br />

mendemostrasikan sebuah kesalahan yang lazim<br />

terjadi di aplikasi C++ yaitu ketidakcukupan<br />

memori. Dalam banyak hal, ketidakcukupan memori<br />

terjadi ketika sebuah obyek dibuat tetapi tidak<br />

pernah dimusnahkan, dan kasus seperti <strong>ini</strong> yang ada<br />

didalam sampel program di modul <strong>ini</strong>.<br />

Ketika men-debug sebuah program C++ program,<br />

perhatikan bahwa kompiler mengkonversi beberapa<br />

nama dalam C++ menjadi kumpulan karakter dan<br />

bilangan yang kompleks dan agak susah dipahami.<br />

Nama-nama yang kompleks <strong>ini</strong> merupakan sebuah<br />

rincian implementasi yang diperlukan untuk<br />

mendukung C++ pemuatan-berlebih (overloading)<br />

fungsi, untuk menyediakan nama eksternal yang<br />

berlaku untuk nama fungsi C++ yang terdiri<br />

karakter-karakter khusus, dan untuk membedakan<br />

fungsi dan variabel <strong>dengan</strong> nama yang sama<br />

dideklarasikan di ruang nama dan kelas yang<br />

berbeda.<br />

Contohnya, gunakan nm untuk mengekstraksi tabel<br />

simbol dari sebuah sampel program yang bernama<br />

CCtest menampikan keluaran sebagai berikut:<br />

# /usr/ccs/bin/nm CCtest<br />

...<br />

[61] | 134549248| 53|FUNC |GLOB |0 |9 |__1cJTestClass2T5B6M_v_<br />

[85] | 134549301| 47|FUNC |GLOB |0 |9 |__1cJTestClass2T6M_v_<br />

[76] | 134549136| 37|FUNC |GLOB |0 |9 |__1cJTestClass2t5B6M_v_<br />

[62] | 134549173| 71|FUNC |GLOB |0 |9 |__1cJTestClass2t5B6Mpc_v_<br />

[64] | 134549136| 37|FUNC |GLOB |0 |9 |__1cJTestClass2t6M_v_<br />

[89] | 134549173| 71|FUNC |GLOB |0 |9 |__1cJTestClass2t6Mpc_v_<br />

[80] | 134616000| 16|OBJT |GLOB |0 |18 |__1cJTestClassG__vtbl_<br />

[91] | 134549348| 16|FUNC |GLOB |0 |9 |<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

132


Menggunakan DTrace Untuk Men-debug dan Membuat Profil<br />

Sebuah Program C++<br />

__1cJTestClassJClassName6kM_pc_<br />

...<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

133


Menggunakan DTrace Untuk Men-debug dan Membuat Profil<br />

Sebuah Program C++<br />

Catatan – Kode pemograman dan makefile untuk CCtest<br />

tersedia di halaman akhir modul <strong>ini</strong>.<br />

Dari keluaran <strong>ini</strong>, dapat diasumsikan bahwa sejumlah<br />

simbol-simbol acak yang muncul ketika mendebug<br />

berhubungan <strong>dengan</strong> sebuah bernama TestClass, tetapi<br />

tidak dapat ditentukan apakah simbol-simbol <strong>ini</strong><br />

berhubungan <strong>dengan</strong> konstruktor, destruktor, or<br />

fungsi-fungsi kelas.<br />

Kompiler Sun Studio memasukan piranti berikut, yang<br />

dapat digunakan untuk menerjemahkan simbo-simbol<br />

acak <strong>ini</strong> menjadi simbol-simbol C++ pasangannya,<br />

yaitu: nm -C, dem, dan c++ filt.<br />

Catatan – Perangkat lunak Sun Studio 10 digunakan<br />

dis<strong>ini</strong>, tetapi contoh-contoh dalam modul <strong>ini</strong> juga<br />

telah ditest oleh Sun Studio 9 and 10.<br />

Jika aplikasi C++ dikompilasi <strong>dengan</strong> gcc/g++,<br />

terdapat pilihan piranti lain untuk menerjemahkan<br />

symbol-simbol acak dari sebuah aplikasi yang<br />

dikenali baik oleh Sun Studio dan nama-nama simbol<br />

GNU, yaitu: gc++filt yang tersedia di /usr/sfw/bin dapat<br />

digunakan untuk menerjemahkan simbol-simbol yang<br />

terdapat didalam aplikasi g++.<br />

Contoh:<br />

Simbol-simbol Sun Studio tanpa c++filt:<br />

# nm CCtest | grep TestClass<br />

[65] | 134549280| 37|FUNC |GLOB |0 |9 |__1cJTestClass2t6M_v_<br />

[56] | 134549352| 54|FUNC |GLOB |0 |9 |__1cJTestClass2t6Mi_v_<br />

[92] | 134549317| 35|FUNC |GLOB |0 |9 |__1cJTestClass2t6Mpc_v_<br />

...<br />

Simbol-simbol Sun Studio <strong>dengan</strong> c++filt:<br />

# nm CCtest | grep TestClass | c++filt<br />

[65]|134549280| 37|FUNC |GLOB |0 |9 |TestClass::TestClass()<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

134


Menggunakan DTrace Untuk Men-debug dan Membuat Profil<br />

Sebuah Program C++<br />

[56]|134549352| 54|FUNC |GLOB |0 |9 |TestClass::TestClass(int)<br />

[92]|134549317| 35|FUNC |GLOB |0 |9 |TestClass::TestClass(char*)<br />

...<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

135


Menggunakan DTrace Untuk Men-debug dan Membuat Profil<br />

Sebuah Program C++<br />

simbol-simbol g++ tanpa gc++filt:<br />

[86] | 134550070| 41|FUNC |GLOB |0 |12 |_ZN9TestClassC1EPc<br />

[110] | 134550180| 68|FUNC |GLOB |0 |12 |_ZN9TestClassC1Ei<br />

[114] | 134549984| 43|FUNC |GLOB |0 |12 |_ZN9TestClassC1Ev<br />

...<br />

simbol-simbol g++ <strong>dengan</strong> gc++filt:<br />

# nm gCCtest | grep TestClass | gc++filt<br />

[86] |134550070|41|FUNC|GLOB |0 |12|TestClass::TestClass(char*)<br />

[110]|134550180|68|FUNC|GLOB |0 |12|TestClass::TestClass(int)<br />

[114]|134549984|43|FUNC|GLOB |0 |12|TestClass::TestClass()<br />

...<br />

Dan akhirnya, <strong>dengan</strong> nm –C untuk menampilkan simbolsimbol:<br />

[64]|134549344|71|FUNC|GLOB|0|9|TestClass::TestClass()<br />

[__1cJTestClass2t6M_v_]<br />

[87]|134549424|70|FUNC|GLOB|0|9|TestClass::TestClass(const char*)<br />

[__1cJTestClass2t6Mpkc_v_]<br />

[57]|134549504|95|FUNC|GLOB|0|9|TestClass::TestClass(int)<br />

[__1cJTestClass2t6Mi_v_]<br />

Berdasarkan informasi-informasi <strong>ini</strong> bisa dibuatkan<br />

skrip DTrace untuk melakukan pengumpulan informasi<br />

(aggregation) terhadap panggilan-panggilan obyek<br />

yang terkait <strong>dengan</strong> test program kita. Kita dapat<br />

menggunakan penyedia pid DTrace untuk mengaktifkan<br />

probe-probe yang berkaitan <strong>dengan</strong> simbol-simbol C+<br />

+.<br />

Untuk membuktikan teori konstruktor/destruktor,<br />

kita mulai <strong>dengan</strong> menghitung hal-hal berikut:<br />

Jumlah obyek yang dibuat -- jumlah panggilan ke<br />

fungsi new()<br />

Jumlah obyek yang dimusnahkan – jumlah pnggilan<br />

ke fungsi delete()<br />

Dengan menggunakan perintah dibawah <strong>ini</strong>, kita bisa<br />

mengekstrak simbol-simbol yang berkaitan <strong>dengan</strong><br />

fungsi new() and delete() dari program CCtest:<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

136


Menggunakan DTrace Untuk Men-debug dan Membuat Profil<br />

Sebuah Program C++<br />

# dem ‘nm CCtest | awk -F\| ’{ print $NF; }’‘ | egrep "new|<br />

delete"<br />

__1c2k6Fpv_v_ == void operator delete(void*)<br />

__1c2n6FI_pv_ == void*operator new(unsigned)<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

137


Menggunakan DTrace Untuk Men-debug dan Membuat Profil<br />

Sebuah Program C++<br />

Skrip DTrace <strong>dengan</strong> kegunaan yang sama dapat<br />

digunakan untuk mengaktifkan probe terhadap fungsi<br />

new() dan delete(), skripnya bernama CCagg.d:<br />

#!/usr/sbin/dtrace -s<br />

pid$1::__1c2n6FI_pv_:<br />

{<br />

@n[probefunc] = count();<br />

}<br />

pid$1::__1c2k6Fpv_v_:<br />

{<br />

@d[probefunc] = count();<br />

}<br />

END<br />

{<br />

printa(@n);<br />

printa(@d);<br />

}<br />

Jalankan program CCtest didalam sebuah jendela,<br />

kemudian eksekusi skrip CCagg.d di jendela yang lain<br />

seperti diperlihatkan berikut <strong>ini</strong>:<br />

# dtrace -s ./CCagg.d ‘pgrep CCtest‘ | c++filt<br />

Keluaran DTrace diteruskan dan menjadi masukan bagi<br />

c++filt untuk diterjemahkan menjadi simbol-simbol C+<br />

+, tetapi gunakan perintah <strong>ini</strong> <strong>dengan</strong> hati-hati<br />

seperti tertulis dalam peringatan berikut <strong>ini</strong>.<br />

Perhatian – Jangan gunakan ^C untuk keluar dari<br />

perintah DTrace seperti yang biasa dilakukan karena<br />

hal <strong>ini</strong> menyebabkan c++filt ikut berhenti bersama<br />

<strong>dengan</strong> DTrace sehingga tidak ada keluaran yang<br />

ditampilkan.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

138


Menggunakan DTrace Untuk Men-debug dan Membuat Profil<br />

Sebuah Program C++<br />

Untuk menampilkan keluaran perintah <strong>ini</strong>, buka<br />

jendela baru dan ketikan perintah:<br />

# pkill dtrace<br />

Gunakan urutan langkah-langkah berikut sebagai<br />

lanjutan latihan <strong>ini</strong>:<br />

Jendela 1:<br />

# ./CCtest<br />

Jendela 2:<br />

# dtrace -s scriptname | c++filt<br />

Jendela 3:<br />

# pkill dtrace<br />

Keluaran di jendela 2 menampilkan jumlah total<br />

panggilan terhadap fungsi new() dan delete()<br />

seperti berikut <strong>ini</strong>:<br />

void*operator new(unsigned) 12<br />

void operator delete(void*) 8<br />

Dari pengamatan keluaran diatas, terlihat memang<br />

benar dugaan bahwa lebih banyak obyek-obyek yang<br />

dibuat daripada yang dihapus.<br />

Berikutnya adalah memeriksa alamat memori obyek<br />

tersebut dan dan mencoba untuk mencocokannya <strong>dengan</strong><br />

setiap keberadaan fungsi new() and delete(). Variabel<br />

argumen DTrace digunakan untuk menampilkan setiap<br />

alamat yang berkaitan <strong>dengan</strong> obyek.<br />

Karena sebuah pointer ke obyek tertentu terdapat<br />

didalam nilai balik fungsi new(), seharusnya akan<br />

terdapat nilai pointer yang sama sebagai arg0 dalam<br />

panggilan terhadap fungsi delete().<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

139


Menggunakan DTrace Untuk Men-debug dan Membuat Profil<br />

Sebuah Program C++<br />

Dengan sedikit modifikasi pada skrip sebelumnya,<br />

jadilah sebuah skrip baru bernama CCaddr.d:<br />

#!/usr/sbin/dtrace -s<br />

#pragma D option quiet<br />

/*<br />

__1c2k6Fpv_v_ == void operator delete(void*)<br />

__1c2n6FI_pv_ == void*operator new(unsigned)<br />

*/<br />

/* return from new() */<br />

pid$1::__1c2n6FI_pv_:return<br />

{<br />

printf("%s: %x\n", probefunc, arg1);<br />

}<br />

/* call to delete() */ pid$1::__1c2k6Fpv_v_:entry<br />

{<br />

printf("%s: %x\n", probefunc, arg0);<br />

}<br />

Eksekusi skrip <strong>ini</strong>:<br />

# dtrace -s ./CCaddr.d ‘pgrep CCtest‘ | c++filt<br />

Tunggu sejenak, kemudian ketikan perintah berikut<br />

didalam jendela 3:<br />

# pkill dtrace<br />

Keluarannya memperlihatkan sebuah pola berulang<br />

berikut, sebanyak tiga panggilan terhadap fungsi<br />

new() dan dua panggilan terhadap fungsi delete():<br />

void*operator new(unsigned): 809e480<br />

void*operator new(unsigned): 8068a70<br />

void*operator new(unsigned): 809e4a0<br />

void operator delete(void*): 8068a70<br />

void operator delete(void*): 809e4a0<br />

Dari hasil pengamatan terhadap keluaran yang<br />

berulang <strong>ini</strong>, sebuah pola menarik muncul. Terlihat<br />

bahwa setiap panggilan pertama terhadap fungsi new()<br />

tidak memiliki panggilan delete() yang terkaitnya.<br />

Dis<strong>ini</strong> sekarang sumber penyebab ketidakcukupan<br />

memori dapat teridentifikasi!<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

140


Menggunakan DTrace Untuk Men-debug dan Membuat Profil<br />

Sebuah Program C++<br />

Dengan melanjutkan pengamatan menggunakan DTrace,<br />

informasi lain masih dapat diperoleh. Dengan<br />

memodifikasi skrip sebelumnya, dapat diketahui tipe<br />

kelas yang berkaitan <strong>dengan</strong> obyek yang dibuat di<br />

alamat 809e480 dan panggilan terhadap ustack() untuk<br />

fungsi new(). Skrip hasil modifikasi <strong>ini</strong> bernama<br />

CCstack.d:<br />

#!/usr/sbin/dtrace -s<br />

#pragma D option quiet<br />

/*<br />

__1c2k6Fpv_v_ == void operator delete(void*)<br />

__1c2n6FI_pv_ == void*operator new(unsigned)<br />

*/<br />

pid$1::__1c2n6FI_pv_:entry<br />

{<br />

ustack();<br />

}<br />

pid$1::__1c2n6FI_pv_:return<br />

{<br />

printf("%s: %x\n", probefunc, arg1);<br />

}<br />

pid$1::__1c2k6Fpv_v_:entry<br />

{<br />

printf("%s: %x\n", probefunc, arg0);<br />

}<br />

Eksekusi CCstack.d di jendela 2, kemudian ketikan<br />

pkill dtrace di jendela 3 untuk menampilkan keluaran<br />

berikut:<br />

# dtrace -s ./CCstack.d ‘pgrep CCtest‘ | c++filt<br />

libCrun.so.1‘void*operator new(unsigned)<br />

CCtest‘main+0x19<br />

CCtest‘0x8050cda<br />

void*operator new(unsigned): 80a2bd0<br />

libCrun.so.1‘void*operator new(unsigned)<br />

CCtest‘main+0x57<br />

CCtest‘0x8050cda<br />

void*operator new(unsigned): 8068a70<br />

libCrun.so.1‘void*operator new(unsigned)<br />

CCtest‘main+0x9a<br />

CCtest‘0x8050cda<br />

void*operator new(unsigned): 80a2bf0<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

141


Menggunakan DTrace Untuk Men-debug dan Membuat Profil<br />

Sebuah Program C++<br />

void operator delete(void*): 8068a70<br />

void operator delete(void*): 80a2bf0<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

142


Menggunakan DTrace Untuk Men-debug dan Membuat Profil<br />

Sebuah Program C++<br />

Berdasarkan data dari fungsi ustack() diperoleh<br />

informasi bahwa fungsi new() dipanggil dari main+0x19,<br />

main+0x57, dan main+0x9a. Pengamatan berikutnya lebih<br />

ditujukan pada obyek yang berkaitan <strong>dengan</strong><br />

panggilan pertama terhadap fungsi new() di main+0x19.<br />

Untuk menentukan tipe konstruktor yang dipanggil di<br />

main+0x19, manfaatkan mdb seperti berikut <strong>ini</strong>:<br />

# gcore ‘pgrep CCtest‘<br />

gcore: core.1478 dumped<br />

# mdb core.1478<br />

Loading modules: [ libc.so.1 ld.so.1 ]<br />

> main::dis<br />

main: pushl %ebp<br />

main+1: movl %esp,%ebp<br />

main+3: subl $0x38,%esp<br />

main+6: movl %esp,-0x2c(%ebp)<br />

main+9: movl %ebx,-0x30(%ebp)<br />

main+0xc: movl %esi,-0x34(%ebp)<br />

main+0xf: movl %edi,-0x38(%ebp)<br />

main+0x12: pushl $0x8<br />

main+0x14: call -0x2e4 <br />

main+0x19: addl $0x4,%esp<br />

main+0x1c: movl %eax,-0x10(%ebp)<br />

main+0x1f: movl -0x10(%ebp),%eax<br />

main+0x22: pushl %eax<br />

main+0x23: call +0x1d5 <br />

...<br />

Sebuah konstruktor dipanggil setelah panggilan<br />

terhadap fungsi new(), di alamat main+0x23. Panggilan<br />

<strong>ini</strong> teridentifikasi sebagai panggilan terhadap<br />

konstruktor __1cJTestClass2t5B6M_v_ dan panggilan <strong>ini</strong><br />

tidak pernah dimusnahkan. Manfaatkan dem untuk<br />

menerjemahkan simbol <strong>ini</strong>:<br />

# dem __1cJTestClass2t5B6M_v_<br />

__1cJTestClass2t5B6M_v_ == TestClass::TestClass #Nvariant 1()<br />

Dapat disimpulkan bahwa panggilan terhadap<br />

TestClass() baru di main+0x19 adalah penyebab<br />

terjadinya kekurangcukupan memori.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

143


Menggunakan DTrace Untuk Men-debug dan Membuat Profil<br />

Sebuah Program C++<br />

Pengamatan terhadap file kode pemograman CCtest.cc<br />

memperlihatkan:<br />

...<br />

t = new TestClass();<br />

cout ClassName();<br />

t = new TestClass((const char *)"Hello.");<br />

cout ClassName();<br />

tt = new TestClass((const char *)"Goodbye.");<br />

cout ClassName();<br />

delete(t);<br />

delete(tt);<br />

...<br />

Jelas terlihat bahwa pemakaian pertama kali<br />

variabel t = new TestClass(); ditulis-ulangkan oleh<br />

pemakain kedua: t = new TestClass((const char *)"Hello.");.<br />

Ketidakcukupan memori telah teridentifikasi dan<br />

perbaikan bisa diimplementasikan.<br />

Penyedia pid DTrace pid memungkinkan pengaktifan<br />

probe terhadap sembarang instruksi yang berkaitan<br />

<strong>dengan</strong> sebuah proses yang akan diamati. Contoh <strong>ini</strong><br />

ditujukan untuk membuat sebuah model pendekatan<br />

DTrace untuk secara interaktif men-debug proses.<br />

Fitur-fitur DTrace yang digunakan dalam contoh <strong>ini</strong><br />

meliputi: pengumpulan informasi (aggregations),<br />

menampilkan argumen-arguman fungsi dan nilai balik<br />

dan mengamati tumpukan panggilan pengguna (user<br />

call stack).<br />

Penggunaan perintah c++filt dari perangkat lunak Sun<br />

Studio dan gc++filt dari gcc adalah untuk mengekstrak<br />

probe-probe fungsi dari tabel simbol sebuah program<br />

dan menampilkan keluaran DTrace dalam format yang<br />

sesuai <strong>dengan</strong> kode pemogramannya.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

144


Menggunakan DTrace Untuk Men-debug dan Membuat Profil<br />

Sebuah Program C++<br />

File-file kode pemograman yang dibuat untuk contoh<br />

<strong>ini</strong> adalah sebagai berikut:<br />

CONTOH 9–1 TestClass.h<br />

class TestClass<br />

{<br />

public:<br />

TestClass();<br />

TestClass(const char *name);<br />

TestClass(int i);<br />

virtual ~TestClass();<br />

virtual char *ClassName() const;<br />

private:<br />

char *str;<br />

};<br />

TestClass.cc:<br />

#include <br />

#include <br />

#include <br />

#include <br />

#include "TestClass.h"<br />

TestClass::TestClass() {<br />

str=strdup("empty.");<br />

}<br />

TestClass::TestClass(const char *name) {<br />

str=strdup(name);<br />

}<br />

TestClass::TestClass(int i) {<br />

str=(char *)malloc(128);<br />

sprintf(str, "Integer = %d", i);<br />

}<br />

TestClass::~TestClass() {<br />

if ( str )<br />

free(str);<br />

}<br />

char *TestClass::ClassName() const {<br />

return str;<br />

}<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

145


Menggunakan DTrace Untuk Men-debug dan Membuat Profil<br />

Sebuah Program C++<br />

CONTOH 9–2 CCtest.cc<br />

#include <br />

#include <br />

#include <br />

#include <br />

#include "TestClass.h"<br />

int main(int argc, char **argv)<br />

{<br />

TestClass *t;<br />

TestClass *tt;<br />

while (1) {<br />

t = new TestClass();<br />

cout ClassName();<br />

t = new TestClass((const char *)"Hello.");<br />

cout ClassName();<br />

tt = new TestClass((const char *)"Goodbye.");<br />

cout ClassName();<br />

delete(t);<br />

delete(tt);<br />

sleep(1);<br />

}<br />

}<br />

CONTOH 9–3 Makefile<br />

OBJS=CCtest.o TestClass.o<br />

PROGS=CCtest<br />

CC=CC<br />

all: $(PROGS)<br />

echo "Done."<br />

clean:<br />

rm $(OBJS) $(PROGS)<br />

CCtest: $(OBJS)<br />

$(CC) -o CCtest $(OBJS)<br />

.cc.o:<br />

$(CC) $(CFLAGS) -c $<<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

146


Tujuan<br />

1M O D U L<br />

Manajemen Memori <strong>dengan</strong><br />

DTrace dan MDB<br />

Didalam module <strong>ini</strong> akan dibahas bagaimana kita<br />

dapat menyusun kembali pengetahuan yang telah<br />

diperoleh tentang pengamatan proses <strong>dengan</strong> DTrace<br />

untuk melakukan pengujian kegagalan halaman memori<br />

(page fault). Kemudian pengujian <strong>ini</strong> diteruskan<br />

<strong>dengan</strong> menggunakan MDB. MDB merupakan piranti pendebug<br />

tingkat-dasar yang memungkinkan untuk<br />

pencarian kesalahan hingga ke tingkat kode<br />

pemogramannya.<br />

Sumber Bacaan<br />

Lain<br />

SolarisModular Debugger Guide SunMicrosystems,<br />

Inc., 2007.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

147


Perangkat Lunak Untuk Manajemen Memori<br />

Perangkat lunak Untuk Manajemen<br />

Memori<br />

Manajemen memori di OpenSolaris menggunakan suatu<br />

konstruksi perangkat lunak yang disebut segmen<br />

untuk menangani memori virtual sebuah proses juga<br />

kernel. Sebagian besar struktur data yang digunakan<br />

oleh perangkat lunak manajemen memori <strong>ini</strong><br />

didef<strong>ini</strong>sikan di /usr/include/vm/*.h. Di dalam modul<br />

<strong>ini</strong>, akan dipelajari kode pemograman dan struktur<br />

data yang digunakan untuk menangani kegagalan<br />

halaman memori.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

148


Pengujian Memori Virtual <strong>dengan</strong> DTrace dan MDB<br />

Pengujian Memori Virtual <strong>dengan</strong><br />

DTrace dan MDB<br />

Tujuan dari lab <strong>ini</strong> adalah untuk menguji kegagalan<br />

halaman memori <strong>dengan</strong> menggunakan DTrace dan MDB.<br />

Ringkasan<br />

Pertama, skrip DTrace digunakan untuk merunut aksiaksi<br />

dari sebuah kegagalan halaman memori tunggal<br />

untuk sebuah proses. Skrip <strong>ini</strong> menampilkan alamat<br />

memori virtual yang menyebabkan suatu kegagalan,<br />

dan kemudian merunut setiap fungsi yang dipanggil<br />

terhitung dari waktu kegagalan halaman memori<br />

terjadi hingga program kernel yang berfungsi<br />

menangani kegagalan virtual memori (fault handler)<br />

kembali. Dari pengamatan terhadap keluaran skrip<br />

<strong>ini</strong> dapat ditentukan bagian mana dari sumber kode<br />

pemograman yang harus diperiksa lebih lanjut.<br />

Catatan- Didalam modul <strong>ini</strong>, telah ditambahkan teks<br />

informasi keterangan dari keluaran skrip DTrace,<br />

yang sebagian besar berupa kode-kode, untuk<br />

membimbing latihan <strong>ini</strong>. Perhatikan simbol


Pengujian Memori Virtual <strong>dengan</strong> DTrace dan MDB<br />

Pengujian Kegagalan Halaman<br />

Memori Dari Sebuah Proses<br />

Dengan DTrace<br />

1.Buka sebuah jendela terminal<br />

2.Buatlah sebuah skrip DTrace bernama pagefault.d<br />

seperti berikut <strong>ini</strong>:<br />

#!/usr/sbin/dtrace -s<br />

#pragma D option flowindent<br />

pagefault:entry<br />

/execname == $$1/<br />

{<br />

printf("fault occurred on address = %p\n", args[0]);<br />

self->in = 1;<br />

}<br />

pagefault:return<br />

/self->in == 1/<br />

{<br />

self->in = 0;<br />

exit(0);<br />

}<br />

entry<br />

/self->in == 1/<br />

{<br />

}<br />

return<br />

/self->in == 1/<br />

{<br />

}<br />

3.Jalan skrip <strong>ini</strong> <strong>dengan</strong> Mozilla sebagai<br />

argumennya.<br />

Catatan – File yang dieksekusi untuk menjalankan<br />

Mozilla adalah mozilla-bin bukan mozilla.<br />

Pernyataan <strong>dengan</strong> penekanan tertentu juga<br />

digunakan untuk menampilkan berbagai macam<br />

panggilan, sebagai contoh adalah panggilan<br />

terhadap mutex_owner(), <strong>dengan</strong> menggunakan<br />

ASSERT().Pernyataan <strong>dengan</strong> penekanan tertentu hanya<br />

digunakan untuk men-debug kernel.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

150


Pengujian Memori Virtual <strong>dengan</strong> DTrace dan MDB<br />

# ./pagefault.d mozilla-bin<br />

dtrace: script ’./pagefault.d’ matched 42626 probes<br />

CPU FUNCTION<br />

0 -> pagefault fault occurred on address = fb985ea2<br />

0 | pagefault:entry as_fault as_segat<br />

0 -> avl_find as_segcompar


Pengujian Memori Virtual <strong>dengan</strong> DTrace dan MDB<br />

0 -> hat_probe hat_kpm_pfn2va<br />

0


Pengujian Memori Virtual <strong>dengan</strong> DTrace dan MDB<br />

0 -> fop_getpage ufs_getpage bmap_has_holes


Pengujian Memori Virtual <strong>dengan</strong> DTrace dan MDB<br />

0


Pengujian Memori Virtual <strong>dengan</strong> DTrace dan MDB<br />

0 -> lufs_read_strategy bdev_strategy cmdkstrategy<br />


Pengujian Memori Virtual <strong>dengan</strong> DTrace dan MDB<br />

(thread<br />

0


Pengujian Memori Virtual <strong>dengan</strong> DTrace dan MDB<br />

0 -> pageio_done


Pengujian Memori Virtual <strong>dengan</strong> DTrace dan MDB<br />

#<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

158


Pengujian Memori Virtual <strong>dengan</strong> DTrace dan MDB<br />

Perhatikan bahwa keluaran diatas sebenarnya sudah<br />

diperpendek untuk kemudahan pemahaman. Pada<br />

tingkat atas, ketika terjadi kegagalan halaman<br />

memori hal-hal berikut akan terjadi:<br />

Rutin pagefault() dipanggil untuk menangani<br />

kegagalan halaman memori s.<br />

Rutin pagefault() memanggil as_fault() untuk<br />

menangani kegagalan pada sebuah alamat<br />

memori<br />

Rutin as_fault() menyusuri susunan AVL dari<br />

struktur seg untuk melakukan pencarian segmen<br />

<strong>dengan</strong> alamat yang salah. Jika tidak<br />

ditemukan segmen seperti <strong>ini</strong>, proses yang<br />

bersangkutan akan mengirimkan sebuah sinyal<br />

SIGSEGV (segmentation violation).<br />

Jika segmen <strong>dengan</strong> alamat yang salah<br />

ditemukan, sebuah program kernel fault<br />

handler yang spesifik segmen dipanggil. Nama<br />

fault handler <strong>ini</strong> adalah segvn_fault() yang<br />

digunakan oleh sebagian besar segmen.<br />

segvn_fault() mencari apakah lokasi memori yang<br />

salah telah dipakai sebelumnya oleh proses<br />

yang bersangkutan. Jika data dilokasi memori<br />

tersebut masih ada (tetapi sudah dinyatakan<br />

bebas oleh pemindai halaman memori - memori<br />

page scanner), lokasi tersebut akan “diklaim<br />

ulang” sehingga dikeluarkan daftar lokasi<br />

yang bebas. Jika lokasi di memori beserta<br />

datanya sudah tidak ditemukan lagi maka akan<br />

dipanggil ufs_getpage().<br />

ufs_getpage() berusaha menemukan nomor blok<br />

didalam sistem file dari data yang semula<br />

ada di lokasi memori <strong>dengan</strong> memanggil<br />

bmap_read().<br />

Selanjutnya dipanggil rutin strategi program<br />

penggerak perangkat untuk menentukan rutin<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

159


Pengujian Memori Virtual <strong>dengan</strong> DTrace dan MDB<br />

strategi apa yang akan dilakukan, lihat<br />

lebih lanjut dimanual strategy(9E).<br />

Selama lokasi memori sedang dibaca, thread<br />

yang menyebabkan kegagalan halaman memori<br />

blocks akan di-switch out melalui panggilan<br />

swtch(). Ini memberi kesempatan thread yang<br />

lain untuk aktif.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

160


Pengujian Memori Virtual <strong>dengan</strong> DTrace dan MDB<br />

Ketika paging I/O telah lengkap, interrupt<br />

handler dari penggerak disk akan<br />

membangunkan thread mozilla-bin yang semula<br />

terblok.<br />

Program penggerak disk kembali melalui kode<br />

sistem file kepada segvn_fault().<br />

segvn_fault() kemudian memanggil segvn_faultpage().<br />

segvn_faultpage() memanggil lapisan HAT<br />

(Hardware Address Translation) untuk mengisi<br />

page table entry(s) (PTE)s dari lokasi<br />

memori tadi.<br />

Sampai dis<strong>ini</strong>, alamat memori virtual yang<br />

menyebabkan kegagalan halaman memori<br />

sekarang sudah dipetakan kembali <strong>dengan</strong><br />

lokasi fisik memori yang benar. Ketika<br />

pagefault() kembali, instruksi-instruksi yang<br />

semula menyebabkan kegagalan halaman memori<br />

akan dijalankan ulang dan seharusnya akan<br />

diselesaikan <strong>dengan</strong> benar.<br />

4.Memanfaatkan mdb untuk mengamati struktur data<br />

kernel dan menentukan lokasi memori fisik yang<br />

berhubungan <strong>dengan</strong> terjadinya kegagalan halaman<br />

memori di memori virtual:<br />

a.Bukan jendela terminal<br />

b.Hitung banyaknya segmen yang digunakan oleh<br />

mozilla menggunakan perintah pmap seperti<br />

berikut <strong>ini</strong>:<br />

# pmap -x ‘pgrep mozilla-bin‘ | wc<br />

368 2730 23105<br />

#<br />

Keluarannya memperlihatkan terdapat 368 segmen.<br />

Catatan – Dari pencarian terhadap segmen yang<br />

mengandung kegagalan alamat memori ditemukan<br />

segmen-segmen yang benar setelah 8 segmen.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

161


Pengujian Memori Virtual <strong>dengan</strong> DTrace dan MDB<br />

Perhatikan panggilan ke as_segcompar dari keluaran DTrace<br />

diatas. Terbukti, penggunaan struktur AVL dapat<br />

mempersingkat pencarian!<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

162


Pengujian Memori Virtual <strong>dengan</strong> DTrace dan MDB<br />

c.Gunakan mdb untuk menemukan lokasi segmen<br />

<strong>dengan</strong> fault address.<br />

Catatan – Jika diinginkan untuk menyimpan setiap<br />

aktivitas didalam mdb, gunakan perintah: ::log<br />

/tmp/logfile diikuti oleh perintah !vi /tmp/logfile<br />

untuk memulai menyimpannya. Jika tidak, jalankan<br />

jalankan saja mdb didalam penyangga editor.<br />

# mdb -k<br />

Loading modules: [ unix krtld genunix specfs dtrace<br />

ufs ip sctp usba random fctl s1394<br />

nca lofs crypto nfs audiosup sppp cpc fcip ptm ipc ]<br />

> ::ps !grep mozilla-bin ffffffff81d6a040::print proc_t p_as | ::walk seg | ::print<br />

struct seg<br />

<br />

{<br />

s_base = 0xfb800000


Pengujian Memori Virtual <strong>dengan</strong> DTrace dan MDB<br />

}<br />

s_data = 0xffffffff82d85070<br />

<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

164


Pengujian Memori Virtual <strong>dengan</strong> DTrace dan MDB<br />

> ffffffff82d85070::print segvn_data_t


Pengujian Memori Virtual <strong>dengan</strong> DTrace dan MDB<br />

> ffffffff82f9e480::print vnode_t v_path<br />

v_path = 0xffffffff82f71090<br />

"/usr/sfw/lib/mozilla/components/libgklayout.so"<br />

> fb985ea2-fb800000=K


Pengujian Memori Virtual <strong>dengan</strong> DTrace dan MDB<br />

> ffffffff82f9e480::walk page | ::print page_t


Pengujian Memori Virtual <strong>dengan</strong> DTrace dan MDB<br />

<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

168


Pengujian Memori Virtual <strong>dengan</strong> DTrace dan MDB<br />

> bd62*1000=K


Pengujian Memori Virtual <strong>dengan</strong> DTrace dan MDB<br />

> ffffffff81d6a040::context fb985ea2,10/ai ffffffff81d6a040::print proc_t p_as fb985ea2::vtop -a ffffffff828b61d0


Pengujian Memori Virtual <strong>dengan</strong> DTrace dan MDB<br />

sesuai<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

171


Pengujian Memori Virtual <strong>dengan</strong> DTrace dan MDB<br />

Begitu segmen yang mengalami kegagalan ditemukan,<br />

isi struktur data segvn_data langsung ditampilkan.<br />

Didalam segmen <strong>ini</strong>, sebuah vnode_t memetakan data<br />

segmennya. Dilanjutkan <strong>dengan</strong> pencarian lokasi<br />

halaman memori yang berhubungan <strong>dengan</strong> alamat<br />

didalam segmen tersebut.<br />

Begitu lokasi page_t ditemukan, sebuah nomor frame<br />

halaman diperoleh. Kemudian nomor page frame<br />

dikonversikan menjadi sebuah alamat fisik diikuti<br />

<strong>dengan</strong> pengujian beberapa data di alamat fisik<br />

tersebut. Berikutnya mengeluarkan data <strong>ini</strong><br />

sebagai kode. Terakhir melakukan pengecekan<br />

terhadap alamat fisik <strong>dengan</strong> perintah mdb bernama<br />

vtop (virtual-to-physical).<br />

d.Keuntungan tambahan: <strong>dengan</strong> menyusuri table<br />

page dari suatu proses dapat dilihat bagaimana<br />

sebuah alamat virtual diterjemahkan ke alamat<br />

fisiknya.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

172


Tujuan<br />

1M O D U L<br />

Men-debug Program Penggerak<br />

Perangkat Dengan DTrace<br />

Tujuan dari modul <strong>ini</strong> adalah untuk mempelajari<br />

bagaimana menggunakan DTrace untuk men-debug proyek<br />

pengembangan program penggerak perangkat tertentu<br />

<strong>dengan</strong> menggunakan sebuah studi kasus.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

173


Membuat Program Penggerak smbfs dari Linux ke Solaris OS<br />

Memindahkan Program Penggerak smbfs<br />

Dari Linux Ke Solaris OS<br />

Studi kasus <strong>ini</strong> memfokuskan pada pemakaian secara<br />

optimal kemampuan DTrace unutk membantu<br />

pengembangan program penggerak perangkat.<br />

Jauh sebelum ada DTrace, untuk men-debug program<br />

penggerak perangkat seorang pengembang menggunakan<br />

panggilan fungsi seperti cmn_err() yang akan me-log<br />

informasi diagnosa ke file /var/adm/messages.<br />

Proses yang merepotkan <strong>ini</strong> bersifat spekulatif,<br />

memerlukan kompilasi ulang dan reboot sistem untuk<br />

menemukan kesalahan kode pemograman sebuah<br />

perangkat lunak. Pengembang <strong>dengan</strong> bakat bahasa<br />

assembler-nya dapat menggunakan adb dan membuat<br />

modul mdb yang diperlukan dalam bahasa C untuk<br />

mendiagnosa kesalahan perangkat lunak. Namun,<br />

pendekatan lama untuk pengembangan dan men-debug<br />

kernel seperti <strong>ini</strong> menghabiskan waktu yang cukup<br />

lama.<br />

DTrace menyediakan sebuah cara diagnosa yang<br />

praktis. Daripada melakukan penulusuran file<br />

/var/adm/messages atau informasi keluaran perintah<br />

truss, DTrace dapat digunakan untuk menangkap<br />

informasi hanya untuk kejadian tertentu yang ingin<br />

diamati oleh pengembang. Seberapa besar manfaat<br />

yang bisa diperoleh dari penggunaan DTrace bisa<br />

dibuktikan melalui beberapa contoh yang sederhana<br />

berikut.<br />

Program penggerak yang digunakan sebagai materi<br />

studi kasus dalam modul <strong>ini</strong> adalah program<br />

penggerak smbfs yang telah dibuat berdasarkan model<br />

program penggerak nfs milik Sun. Diasumsikan program<br />

penggerak telah berhasil dikompilasi, langkah<br />

berikutnya adalah melakukan pengujian apakah<br />

program penggerak tersebut bisa dimuat dan<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

174


Membuat Program Penggerak smbfs dari Linux ke Solaris OS<br />

dibongkar-muat secara benar. Hal pertama yang harus<br />

dilakukan adalah menyalin program penggerak<br />

tersebut ke /usr/kernel/fs dan cobalah memuatnya<br />

secara manual <strong>dengan</strong> perintah modload:<br />

# modload /usr/kernel/fs/smbfs<br />

can’t load module: Out of memory or no room in system tables<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

175


Membuat Program Penggerak smbfs dari Linux ke Solaris OS<br />

Dan di dalam file /var/adm/messages terdapat informasi:<br />

genunix: [ID 104096 kern.warning] WARNING: system call missing<br />

from bind file<br />

Setelah pencarian informasi lebih lanjut dari pesan<br />

kesalahan “system call missing”, disimpulkan bahwa<br />

pesan kesalahan <strong>ini</strong> muncul karena fungsi<br />

mod_getsysent() didalam file modconf.c gagal memanggil<br />

fungsi mod_getsysnum.<br />

Daripada secara manual mengikuti alur program dari<br />

fungsi mod_getsysnum() dari satu file kode pemograman<br />

ke file kode pemograman yang lain, skrip DTrace<br />

yang sederhana berikut <strong>ini</strong> digunakan untuk<br />

mengaktifkan semua informasi dan kejadian balik<br />

dari penyedia fbt (Function Boundary Tracing) setiap<br />

kali mod_getsynum() dipanggil.<br />

#!/usr/sbin/dtrace -s<br />

#pragma D option flowindent<br />

fbt::mod_getsysnum:entry<br />

/execname == "modload"/<br />

{<br />

self->follow = 1;<br />

}<br />

fbt::mod_getsysnum:return<br />

{<br />

self->follow = 0;<br />

trace(arg1);<br />

}<br />

fbt:::entry<br />

/self->follow/<br />

{<br />

}<br />

fbt:::return<br />

/self->follow/<br />

{<br />

trace(arg1);<br />

}<br />

Catatan – trace(arg1) menampilkan nilai balik dari<br />

sebuah fungsi tertentu.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

176


Membuat Program Penggerak smbfs dari Linux ke Solaris OS<br />

Dengan mengeksekusi skrip <strong>ini</strong> dan menjalankan<br />

perintah modload di jendela yang lain diperoleh<br />

keluaran sebagai berikut:<br />

# ./mod_getsysnum.d<br />

dtrace: script ’./mod_getsysnum.d’ matched 35750 probes<br />

CPU FUNCTION<br />

0 -> mod_getsysnum<br />

0 -> find_mbind<br />

0 -> nm_hash<br />

0 strcmp<br />

0 strcmp<br />

0


Membuat Program Penggerak smbfs dari Linux ke Solaris OS<br />

Berikut adalah hasil keluarannya setelah dicoba<br />

lagi untuk memuat program penggerak smbfs:<br />

# ./mod_getsysnum.d<br />

dtrace: script ’./mod_getsysnum.d’ matched 35751 probes<br />

CPU FUNCTION<br />

0 -> mod_getsysnum<br />

0 -> find_mbind<br />

0 -> nm_hash<br />

0 strcmp<br />

0 | strcmp:entry name:smbfs,<br />

hash:timer_getoverrun<br />

0 strcmp<br />

0 | strcmp:entry name:smbfs,<br />

hash:lwp_sema_post<br />

0


Membuat Program Penggerak smbfs dari Linux ke Solaris OS<br />

Berikutnya tambahkan isian baru di file<br />

/etc/name_to_sysnum seperti berikut <strong>ini</strong> dan kemudian<br />

lakukan reboot.<br />

’smbfs 177’<br />

Catatan - Fungsi read_binding_file() hanya membaca<br />

sekali saja file konfigurasi tersebut pada saat<br />

boot.<br />

Setelah proses reboot selesai program penggerak<br />

smbfs berhasil dimuatkan.<br />

# modload /usr/kernel/fs/smbfs<br />

Periksa lagi apakah program penggerak tersebut<br />

telah dimuat <strong>dengan</strong> perintah modinfo:<br />

# modinfo | grep smbfs<br />

160 feb21a58 351ac 177 1 smbfs (SMBFS syscall,client,comm)<br />

160 feb21a58 351ac 24 1 smbfs (network filesystem)<br />

160 feb21a58 351ac 25 1 smbfs (network filesystem version 2)<br />

160 feb21a58 351ac 26 1 smbfs (network filesystem version 3)<br />

Catatan – Diingatkan kembali bahwa program<br />

penggerak <strong>ini</strong> dibuat <strong>dengan</strong> meniru model program<br />

penggerak nfs, <strong>ini</strong> menjelaskan mengapa keluarannya<br />

menjadi seperti diatas.<br />

Lanjutkan, <strong>dengan</strong> mencoba untuk membongkat-muat<br />

modul tersebut:<br />

# modunload -i 160<br />

can’t unload the module: Device busy<br />

Nampaknya kesalahan <strong>ini</strong> disebabkan oleh adanya<br />

nilai balik errno EBUSY. Pengamatan menjadi lebih<br />

mudah karena program penggerak smbfs adalah sebuah<br />

modul yang telah termuat sehingga semua fungsi<br />

smbfs dapat diakses:<br />

# dtrace -l fbt:smbfs:: | wc -l<br />

1002<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

179


Membuat Program Penggerak smbfs dari Linux ke Solaris OS<br />

Ini luar biasa! Tanpa menggunakan kode pemograman<br />

khusus sebanyak 1002 fungsi dan kejadian balik<br />

dalam sebuah program penggerak dapat diakses.<br />

Dengan memanfaatkan akses fungsi sebanyak 1002 <strong>ini</strong><br />

pekerjaan men-debug program penggerak dapat<br />

dilakukan tanpa memerlukan versi 'kode<br />

terinstrumentasi' khusus!<br />

Dengan menggunakan skrip DTrace sederhana berikut<br />

<strong>ini</strong>, pengamatan terhadap semua panggilan smbfs<br />

ketika perintah modunload dijalankan dapat dilakukan:<br />

#!/usr/sbin/dtrace -s<br />

#pragma D option flowindent<br />

fbt:smbfs::entry<br />

{<br />

}<br />

fbt:smbfs::return<br />

{<br />

trace(arg1);<br />

}<br />

Nampaknya kode-kode smbfs tidak dapat diakses oleh<br />

modunload. Berikutnya, gunakan skrip DTrace berikut<br />

<strong>ini</strong> untuk pengamatan terhadap modunload:<br />

#!/usr/sbin/dtrace -s<br />

#pragma D option flowindent<br />

fbt::modunload:entry<br />

{<br />

self->follow = 1;<br />

trace(execname);<br />

trace(arg0);<br />

}<br />

fbt::modunload:return<br />

{<br />

self->follow = 0;<br />

trace(arg1);<br />

}<br />

fbt:::entry<br />

/self->follow/<br />

{<br />

}<br />

fbt:::return<br />

/self->follow/<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

180


Membuat Program Penggerak smbfs dari Linux ke Solaris OS<br />

{<br />

trace(arg1);<br />

}<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

181


Membuat Program Penggerak smbfs dari Linux ke Solaris OS<br />

Keluaran skrip <strong>ini</strong> adalah sebagai berikut:<br />

# ./modunload.d<br />

dtrace: script ’./modunload.d’ matched 36695 probes<br />

CPU FUNCTION<br />

0 -> modunload modunload 160<br />

0 | modunload:entry<br />

0 -> mod_hold_by_id<br />

0 -> mod_circdep<br />

0 mod_hold_by_modctl<br />

0 mod_release<br />

0 mod_nenabled != 0)<br />

return (EBUSY);<br />

2. if ( detach_driver(mp->mod_modname) != 0 ) return (EBUSY);<br />

3. if ( kobj_lookup(mp->mod_mp, "_f<strong>ini</strong>") == NULL )<br />

4. A failed call to smbfs _f<strong>ini</strong>() routine<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

182


Membuat Program Penggerak smbfs dari Linux ke Solaris OS<br />

Akses langsung ke semua kemungkinan lokasi <strong>ini</strong><br />

tidak dapat dilakukan, tetapi pendekatan terhadap<br />

lokasi-lokasi <strong>ini</strong> dapat dilakukan <strong>dengan</strong> sebuah<br />

proses pengeliminasian. Dengan skrip berikut <strong>ini</strong><br />

dapat ditampilkan isi dari berbagai struktur dan<br />

nilai balik didalam moduninstall:<br />

#!/usr/sbin/dtrace -s<br />

#pragma D option flowindent<br />

fbt::moduninstall:entry<br />

{<br />

self->follow = 1;<br />

printf("mod_prim:%d\n",<br />

((struct modctl *)arg0)->mod_prim);<br />

printf("mod_ref:%d\n",<br />

((struct modctl *)arg0)->mod_ref);<br />

printf("mod_nenabled:%d\n",<br />

((struct modctl *)arg0)->mod_nenabled);<br />

printf("mod_loadflags:%d\n",<br />

((struct modctl *)arg0)->mod_loadflags);<br />

}<br />

fbt::moduninstall:return<br />

{<br />

self->follow = 0;<br />

trace(arg1);<br />

}<br />

fbt::kobj_lookup:entry<br />

/self->follow/<br />

{<br />

}<br />

fbt::kobj_lookup:return<br />

/self->follow/<br />

{<br />

trace(arg1);<br />

}<br />

fbt::detach_driver:entry<br />

/self->follow/<br />

{<br />

}<br />

fbt::detach_driver:return<br />

/self->follow/<br />

{<br />

trace(arg1);<br />

}<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

183


Membuat Program Penggerak smbfs dari Linux ke Solaris OS<br />

Skrip <strong>ini</strong> menghasilkan keluaran seperti berikut<br />

<strong>ini</strong>:<br />

# ./moduninstall.d<br />

dtrace: script ’./moduninstall.d’ matched 6 probes<br />

CPU FUNCTION<br />

0 -> moduninstall<br />

mod_prim:0<br />

mod_ref:0<br />

mod_nenabled:0<br />

mod_loadflags:1<br />

0 -> detach_driver<br />

0 kobj_lookup<br />

0


Membuat Program Penggerak smbfs dari Linux ke Solaris OS<br />

satu dari sekian banyak penyedia DTrace.<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

185


A<br />

A<br />

AA P P E N D I X<br />

Sumber Bacaan Tambahan<br />

OpenSolaris<br />

Untuk mendapat informasi lebih lanjut, dukungan dan<br />

tra<strong>ini</strong>ng manfaatkan situs-situs berikut <strong>ini</strong>:<br />

Dokumentasi Komunitas —http://opensolaris.org/os/<br />

community/documentation<br />

Dokumentasi Sun —<br />

http://www.sun.com/documentation<br />

Dukungan Sun — http://www.sun.com/support<br />

Pelatihan Sun — Sun menawarkan berbagai pelatihan<br />

Solaris profesional <strong>dengan</strong> cakupan yang lengkap<br />

dan pilihan sertifikasi untuk membantu anda<br />

mengaplikasi platform yang bertenaga <strong>ini</strong> demi<br />

kesuksekan yang lebih besar kegiatan anda. Untuk<br />

mendapat informasi lebih lanjut tentang pelatihan<br />

Solaris, kunjungi situs <strong>ini</strong>:<br />

http://www.sun.com/tra<strong>ini</strong>ng/catalog/operating_sys<br />

tems/index.xml<br />

Pengantar Sistem Operasi: Sebuah Pendekatan Praktis<br />

<strong>dengan</strong> Menggunakan Proyek OpenSolaris – Agustus 2007<br />

186

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!