download dengan klik link ini - Komputasi
download dengan klik link ini - Komputasi
download dengan klik link ini - Komputasi
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