Post on 04-Mar-2019
Qui ckTi m e™ and a de com p re ssor
are needed to see thi s pi cture.
SunMicrosystems,Inc. 4150NetworkCircle SantaClara,CA95054USA
Buku Pedoman Siswa
Pengantar SistemOperasi: SebuahPendekatan PraktisDengan MenggunakanProyek OpenSolaris
Copyright 2007 SunMicrosystems, Inc. 4150Network Circle, Santa Clara,CA 95054 U.S.A. All rights reserved.
SunMicrosystems, Inc. has intellectual property rights relating totechnology embodied in the product that is described in this document.In particular, and without limitation, these intellectual propertyrights may include one or more U.S. patents or pending patentapplications in the U.S. and in other countries.
U.S. Government Rights – Commercial software. Government users aresubject to the SunMicrosystems, Inc. standard license agreement andapplicable provisions of the FAR and its supplements.
This distribution may include materials developed by third parties.
Parts of the product may be derived from Berkeley BSD systems, licensedfrom the University of California. UNIX is a registered trademark inthe U.S. and other countries, exclusively licensed through X/OpenCompany, Ltd.Sun, SunMicrosystems, the Sun logo, the Solaris logo, the Java CoffeeCup logo, docs.sun.com, Java, and Solaris are trademarks or registeredtrademarks of SunMicrosystems, Inc. in the U.S. and other countries.All SPARC trademarks are used under license and are trademarks orregistered trademarks of SPARC International, Inc. in the U.S. andother countries. Products bearing SPARC trademarks are based upon anarchitecture developed by Sun Microsystems, Inc.
TheOPEN LOOK and SunTM Graphical User Interface was developed bySunMicrosystems, Inc. for its users and licensees. Sun acknowledges thepioneering efforts of Xerox in researching and developing the conceptof visual or graphical user interfaces for the computer industry. Sunholds a non-exclusive license from Xerox to the Xerox Graphical UserInterface, which license also covers Sun's licensees who implementOPENLOOK GUIs and otherwise comply with Sun's written license agreements.
Products covered by and information contained in this publication arecontrolled by U.S. Export Control laws and may be subject to the exportor import laws in other countries.Nuclear, missile, chemical orbiological weapons or nuclear maritime end uses or end users, whetherdirect or indirect, are strictly prohibited. Export or reexport tocountries subject to U.S. embargo or to entities identified on U.S.export exclusion lists, including, but not limited to, the deniedpersons and specially designated nationals lists is strictly prohibited.
DOCUMENTATIONIS PROVIDED “AS IS” AND ALL EXPRESSOR IMPLIED CONDITIONS,REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED WARRANTYOFMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSEORNON-INFRINGEMENT,ARE DISCLAIMED, EXCEPT TO THE EXTENT THAT SUCHDISCLAIMERS ARE HELD TOBE LEGALLY INVALID.
Copyright 2007 SunMicrosystems, Inc. 4150Network Circle, Santa Clara,CA 95054 U.S.A. Tous droits réservés. SunMicrosystems, Inc. détient lesdroits de propriété intellectuelle relatifs à la technologie incorporéedans le produit qui est décrit dans ce document. En particulier, et cesans limitation, ces droits de propriété intellectuelle peuvent inclure
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
i
un ou plusieurs brevets américains ou des applications de brevet enattente aux Etats-Unis et dans d'autres pays.
Cette distribution peut comprendre des composants développés par destierces personnes.
Certaines composants de ce produit peuvent être dérivées du logicielBerkeley BSD, licenciés par l'Université de Californie. UNIX est unemarque déposée aux Etats-Unis et dans d'autres pays; elle est licenciéeexclusivement par X/Open Company, Ltd.
Sun, SunMicrosystems, le logo Sun, le logo Solaris, le logo Java CoffeeCup, docs.sun.com, Java et Solaris sont des marques de fabrique ou desmarques déposées de SunMicrosystems, Inc. aux Etats-Unis et dansd'autres pays. Toutes les marques SPARC sont utilisées sous licence etsont des marques de fabrique ou des marques déposées de SPARCInternational, Inc. aux Etats-Unis et dans d'autres pays. Les produitsportant les marques SPARC sont basés sur une architecture développéepar SunMicrosystems, Inc.
L'interface d'utilisation graphiqueOPEN LOOK et Sun a été développéepar SunMicrosystems, Inc. pour ses utilisateurs et licenciés. Sunreconnaît les efforts de pionniers de Xerox pour la recherche et ledéveloppement du concept des interfaces d'utilisation visuelle ougraphique pour l'industrie de l'informatique. Sun détient une licencenon exclusive de Xerox sur l'interface d'utilisation graphique Xerox,cette licence couvrant également les licenciés de Sun qui mettent enplace l'interface d'utilisation graphiqueOPEN LOOK et qui, en outre, seconforment aux licences écrites de Sun.
Les produits qui font l'objet de cette publication et les informationsqu'il contient sont régis par la legislation américaine en matière decontrôle des exportations et peuvent être soumis au droit d'autres paysdans le domaine des exportations et importations. Les utilisationsfinales, ou utilisateurs finaux, pour des armes nucléaires, desmissiles, des armes chimiques ou biologiques ou pour le nucléairemaritime, directement ou indirectement, sont strictement interdites.Les exportations ou réexportations vers des pays sous embargo desEtats-Unis, ou vers des entités figurant sur les listes d'exclusiond'exportation américaines, y compris, mais de manière non exclusive, laliste de personnes qui font objet d'un ordre de ne pas participer,d'une façon directe ou indirecte, aux exportations des produits ou desservices qui sont régis par la legislation américaine en matière decontrôle des exportations et la liste de ressortissants spécifiquementdesignés, sont rigoureusement interdites.
LADOCUMENTATIONEST FOURNIE "EN L'ETAT" ET TOUTES AUTRES CONDITIONS,DECLARATIONS ET GARANTIES EXPRESSESOUTACITES SONT FORMELLEMENTEXCLUES,DANS LA MESURE AUTORISEE PAR LA LOI APPLICABLE, YCOMPRISNOTAMMENT TOUTE GARANTIE IMPLICITE RELATIVE ALAQUALITEMARCHANDE, A L'APTITUDE A UNE UTILISATIONPARTICULIEREOUAL'ABSENCEDE CONTREFACON.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
ii
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
iii
Daftar Isi
Daftar Isi .....................................iii
Apa itu Proyek OpenSolaris? ......................1Portal Regional..................................3
Situs-Situs OpenSolaris..........................4Diskusi........................................5Komunitas......................................6Proyek.........................................8Repositori Kode Pemograman.....................9OpenGrok......................................10
Advokasi OpenSolaris.............................11Mengapa Menggunakan OpenSolaris?................12Harga.........................................13Fitur-fitur Inti Yang Inovatif................14Kompatibilitas Balik..........................15Netralitas Platform Perangkat Keras...........16Piranti Pengembangan..........................17
Pernyatan Tanda Terima Kasih....................19
Mempersiapkan Lingkungan Kerja OpenSolaris......20Konfigurasi Perangkat Keras dan Perangkat Lunak.22
Jaringan........................................26
Daemon Auto-Configuration Jaringan..............27
Tinjauan Umum Zona..............................28
Administrasi Zona...............................29Memulai Administrasi Zona.....................31
Virtualisasi Server Web dengan Zona.............35Pembuatan Zona Non-Global.....................36
Pembuatan Pool Penyimpan Data dan Sistem File ZFS................................................41
Membuat Pool Penyimpan Data ZFS Ter-mirror......42
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
iii
Membuat Sistem File ZFS Sebagai Direktori KerjaPengguna........................................44
Membuat Konfigurasi RAID-Z .....................48
Konsolidasi Area Pengguna........................50Konsolisidasi Area Pengguna dan Deskripsinya....51
Fitur Inti Sistem Operasi Solaris ...............53Proses Pengembangan dan Metode Penulisan Kode...54
Tinjauan .......................................60
FireEngine......................................61Sinkronisasi .................................62TCP, IP, dan UDP..............................63GLDv3.........................................64Virtualisasi..................................65
Least Privilege (Hak Istimewa Terbatas).........66
Filtrasi Paket..................................67Filter IP.....................................68Mengaktifkan Filtrasi Paket Sederhana.........69Beberapa Contoh Kaidah Filtrasi Paket.........70
Zona (Zones)....................................73
Zona Bertanda-identitas (Branded Zones - BrandZ)................................................76
Jaringan Didalam Zona...........................79Identitas Zona, Akses terhadap CPU dan InstalasiPaket.........................................81Perangkat Didalam Zones.......................82
Prakiraan Penyembuhan-Diri (Predictive Self-Healing)........................................83Arsitektur Manajemen Kegagalan (Fault ManagementArchitecture - FMA)...........................84Fasilitas Manajemen Layanan (Services ManagementFacility - SMF)...............................86
Perunut Dinamis (Dynamic Tracing - DTrace)......87
Pen-debug Modular (Modular Debugger - MDB)......88
Sistem File ZFS.................................89
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
iv
Penggunaan Checksum dan Perbaikan Data........90RAID-Z........................................91
Konsep Pemograman................................92Manajemen Proses dan Sistem.....................93
Pemograman Thread...............................96Sinkronisasi..................................99
Penjadwalan CPU................................101
Tinjauan Umum Kernel...........................105Perbedaan Antara Eksekusi Modul Kernel danProgram Pengguna.............................106Perbedaan Struktural antara Modul Kernel Modulesdan Program Pengguna.........................108
Men-debug Proses...............................110
Memulai Penggunaan DTrace.......................112Mengaktifkan Probe DTrace Sederhana............113
Menampilkan Probe Perunut......................116
Pemograman Bahasa D............................120
Men-debug Aplikasi dengan DTrace................124Mengaktifkan Probe Didalam Moda Pengguna.......125
Merunut Aplikasi Dengan DTrace.................126
Men-debug Aplikasi C++ dengan DTrace............131Menggunakan DTrace Untuk Men-debug dan MembuatProfil Sebuah Program C++ .....................132
Manajemen Memori dengan DTrace dan MDB..........147Perangkat lunak Untuk Manajemen Memori.........148
Pengujian Memori Virtual dengan DTrace dan MDB.149
Men-debug Program Penggerak Perangkat Dengan DTrace................................................173Memindahkan Program Penggerak smbfs Dari Linux KeSolaris OS.....................................174
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
v
Sumber Bacaan Tambahan OpenSolaris..............186
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
vi
Apa itu Proyek OpenSolaris?
Tujuan umum dari pelatihan ini adalah agar pesertamemperoleh pengetahuan tentang Sistem Operasisebagai bagian dari sistem komputasi denganmemanfaatkan kode pemograman Sistem Operasi Solarisyang secara bebas bisa diperoleh melalui proyekOpenSolaris.
Tip - Lakukan pendaftaran di Internet melalui situshttp://get.opensolaris.org, agar secara gratisdapat menerima OpenSolaris Starter Kit yang terdiridari materi-materi pelatihan, kode pemograman danpiranti untuk pengembangan.
Di bagian awal peserta diperkenalkan bagaimanamengakses kelompok pengguna (user group), situs-situs dan dokumentasi yang berhubungan denganOpenSolaris sehingga peserta dapat segera mengenalkomputasi berbasis UNIX.
Berikutnya disajikan dimana peserta bisa mengakseslebih jauh informasi-informasi lain yangberhubungan dengan Proyek OpenSolaris seperti kodepemograman (source code), komunitas, proyek-proyekyang sedang berjalan dan penjelajah kode pemograman(source browser).
Langkah selanjutnya, peserta diperlihatkanbagaimana mengkonfigurasi zonas, ZFS, jaringan danbeberapa fitur lain. Di bagian akhir, terdapatlatihan-latihan bagi peserta untuk dapat
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
1 M O D U L
Tujuan
1
mempelajari bagaimana menggunakan DTrace untuk men-debug proses, aplikasi, kegagalan halaman memori(page faults), dan program penggerak perangkat(drivers).
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
2
Apa itu Proyek OpenSolaris?
Proyek OpenSolaris diluncurkan pada tanggal 14 Juni2005 untuk menghasilkan sebuah upaya membangunkomunitas dengan menggunakan kode pemogramanSolaris sebagai langkah awalnya. Proyek inimerupakan sebuah tempat dimana upaya pengembangankomunitas saling terkait, tempat dimana parakontributor dari Sun dan siapa pun dapatberkolaborasi demi perkembangan dan kemajuanteknologi Sistem Operasi.
Ketersediaan kode pemograman OpenSolaris dapatdimanfaatkan untuk banyak hal antara lain sebagaidasar untuk versi mendatang produk Sistem OperasiSolaris, proyek-proyek Sistem Operasi lainnya,produk pabrikan pihak-ketiga dan distribusi-distribusi aplikasi yang diminati oleh komunitas.Hingga saat ini, Sun Microsystems, Inc. yangmensponsori proyek ini.
Hingga 2 tahun pertama, lebih dari 60.000 pesertatelah terdaftar sebagai anggota. Komunitas pararekayasawan ini terus bertumbuh dan berubah untukmemenuhi kebutuhan para pengembang perangkat lunak,sistem administrator dan pengguna Sistem OperasiSolaris.
Pembelajaran Sistem Operasi dengan proyekOpenSolaris memiliki banyak keuntungan dibandingkanpembelajaran instruksional:
Mendapatkan akses ke kode pemograman dari SistemOperasi Solaris 10 yang revolusioner.
Mendapatkan akses ke kode pemograman dari SistemOperasi komersial yang digunakan secara luas dibanyak lingkungan bisnis kecil dan besar.
Keunggulan perangkat lunak untuk melakukanobservasi dan debug.
Dukungan perangkat keras yang meliputi arsitekturSPARC, x86 dan x64.
Kepemimpinan Solaris di lingkungan komputasi 64-
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
1
Apa itu Proyek OpenSolaris?
bit.
Pemanfaatan perangkat lunak tak terbatas secaragratis.
Kode pemograman yang menantang, inovatif,lengkap, konsisten, tangguh dan bisa diperolehsecara bebas.
Adanya CommonDevelopment and Distribution License(CDDL), sebuah aturan lisensi yang disetujui olehOSI, yang membolehkan pemanfaatan yang bebasroyaliti, modifikasi dan kegiatan ikutan lainnya
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
2
Portal Regional
Portal RegionalKomunitas Internationalization and Localizationsebagian bagian dari Proyek OpenSolaris adalahkomunitas yang bertugas membantu untukmenerjemahkan situs OpenSolaris yang berbahasaInggris kedalam bahasa-bahasa yang lain. Sejauhini, terdapat 8 portal dengan bahasa pengantarlokal yang masih terus dikembangkan:
Portal India – http://in.opensolaris.org
Portal Cina – http://cn.opensolaris.org
Portal Jepang – http://jp.opensolaris.org
Portal Polandia – http://pl.opensolaris.org
Portal Perancis – http://fr.opensolaris.org
Portal Brasil –http://opensolaris.org/os/project/br
Portal Spanyol –http://opensolaris.org/os/project/es
Portal berbahasa pengantar Jerman, Rusia, RepulikCzech, Spanyol, Korea dan Meksiko masih dalamstatus perencanaan. Kunjungi portal OpenSolarisuntuk bisa ikut berpartisipasi, atau chat di salahsatu dari tujuh fasiltas chat OpenSolaris denganmenggunakan IRC di irc.freenode.net. Kunjungihttp://opensolaris.org/os/chat/untuk informasilebih lanjut.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
3
Situs-situs OpenSolaris
Situs-Situs OpenSolarisUntuk mendownload kode pemograman OpenSolaris,membaca lisensi dan mengakses petunjuk bagaimanamengkonstruksi kode pemograman (building source)dan menginstal salinan file-file biner pra-konstruksi yang terkompresi (arsip pra-konstruksi/pre-built archive) kunjungi situs:
http://www.opensolaris.org/os/downloads.
Ikon-ikon di kanan-atas halaman situs OpenSolarismenyediakan akses ke halaman diskusi, komunitas,proyek, download, dan penjelajah kode pemograman.Selain itu, situs OpenSolaris juga tersediafasilitas pencarian isi situs dan kumpulan blog.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
4
Situs-situs OpenSolaris
DiskusiHalaman Diskusi menyediakan akses untukberkomunikasi dengan para ahli yang berkecimpungdengan teknlogi kode pemograman terbuka (opensource). Halaman Diskusi juga menyediakan pencarianarsip dari diskusi-diskusi yang pernah dilakukansebelumnya untuk topik tertentu.
Kunjungi http://www.opensolaris.org/os/discussionsuntuk mendapatkan daftar lengkap forum yang akandipilih untuk berlangganan.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
5
Situs-situs OpenSolaris
KomunitasHalaman komunitas merupakan tempat dimanapengunjung dengan minat tertentu yang sama terhadapproyek OpenSolaris bisa saling terhubung. Halamankomunitas merupakan gabungan dari kelompok peminatteknologi, dukungan, piranti, and kelompokpengguna:
Lembaga Akademik dan Penelitian:http://www.opensolaris.org/os/community/edu
DTrace: http://www.opensolaris.org/os/community/dtrace
ZFS:http://www.opensolaris.org/os/community/zfs
Jaringan:http://www.opensolaris.org/os/community/networking
Zona:http://www.opensolaris.org/os/community/zones
Dokumentasi:http://www.opensolaris.org/os/community/documentation
Penggerak Perangkat: http://www.opensolaris.org/os/community/device_drivers
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
6
Situs-situs OpenSolaris
Piranti:http://www.opensolaris.org/os/community/tools
Advokasi:http://www.opensolaris.org/os/community/advocacy
Keamanan:http://www.opensolaris.org/os/community/security
Kinerja:http://www.opensolaris.org/os/community/performance
Penyimpan Data:http://www.opensolaris.org/os/community/storage
Administrasi Sistem:http://www.opensolaris.org/os/community/sysadmin
Terdapat sekitas 30 komunitas yang berjalan secaraaktif di OpenSolaris. Kunjungihttp://www.opensolaris.org/os/communities untukinformasi lengkap.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
7
Situs-situs OpenSolaris
ProyekProyek-proyek yang ada di situshttp://www.opensolaris.org/ merupakan upayakerjasama yang menghasilkan obyek seperti perubahankode pemograman, dokumen, grafik atau produkgabungan berapa pengembang perangkat lunak. Proyekmemiliki repositori dan komisi yang menguji danmenyetujui kode pemograman. Proyek bisa berasaldari komunitas atau berdiri sendiri di luarkomunitas.
Proyek baru diajukan oleh para peminatnya denganmengajukan permintaan melalui fasilitas diskusi.Proyek yang diajukan dan diterima oleh setidaknyasatu peminat lain di dalam komunitas yangmensposorinya akan disediakan ruang untuk halamanproyek sehingga proyek dapat dimulai. Kunjungihttp://www.opensolaris.org/os/projects untukmelihat daftar proyek-proyek yang sedang berjalan.
Piranti Visualisasi Harmonik untuk DTrace :http://www.opensolaris.org/ os/project/dtrace-chime
Kode Google Summer:http://www.opensolaris.org/os/project/powerPC
Indiana:http://www.opensolaris.org/os/project/indiana
OpenGrok:http://www.opensolaris.org/ os/project/opengrok
Kontes Pemograman:http://www.opensolaris.org/os/project/contest
Starter Kit:http://www.opensolaris.org/ os/project/starterkit
Solaris iSCSI Target:http://www.opensolaris.org/ os/project/iscsitgt
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
8
Situs-situs OpenSolaris
Repositori Kode PemogramanRepositori kode pemograman yang terpusat danterdistribusi tersedia di situs opensolaris.org.Model manajemen kode pemograman terpusat inimenggunakan program manajemen yang disebutSubversion (SVN) source control. Sedangkanmanajemen repositori terdistribusi menggunakanprogram manajemen yang disebut kontrol kodepemograman Mercurial (hg).
Pembuatan repositori kode pemograman diopensolaris.org dilakukan oleh Pemimpin Proyek dihalaman proyek yang bersangkutan. Pengembang denganhak commit bisa mengakses repositori denganmenggunakan akun yang terdaftar di opensolaris.org.Hak commit sendiri diatur oleh Pemimpin Proyek.
Untuk mengakses repositori dengan hak commit selainmemiliki akun juga diperlukan kunci publik SecureShell (SSH). Akun bisa diperoleh setelah melakukanpendaftaran terlebih dahulu. Kunjungi halamankomunitas piranti dihttp://opensolaris.org/os/community/tools untukmendapat informasi terbaru tentang kontrol terhadapkode pemograman, download dan petunjuk-petunjuklainya.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
9
Situs-situs OpenSolaris
OpenGrokOpenGrokTM adalah mesin pencari kode pemograman danreferensi silang yang cepat dan praktis yangdigunakan oleh OpenSolaris. Kunjungihttp://cvs.opensolaris.org/sourceuntuk mencobanya.
OpenGrok adalah proyek yang pertama kali ada diopensolaris.org. Kunjungihttp://www.opensolaris.org/os/project/opengrokuntuk mengetahui perkembangan lanjutan proyek ini.
Coba gunakan perangkat lunak ini dan temukan begiturapinya kode pemograman tertulis, penuh dengandeskripsi seolah seperti membaca sebuah buku. Jikatertarik berpartisipasi mengembangkan proyekOpenSolaris, silakan mendownload kode pemogramanlengkapnya. Jika hanya sekedar ingin mengetahuicara kerja fitur tertentu Solaris, pirantialternatif lebih nyaman digunakan adalah penjelajahkode pemograman.
OpenGrok memahami berbagai format file program danversion control history seperti SCCS, RCS, and CVSsehingga memudahkan pemahaman terhadap prinsip-prinsip kode pemograman terbuka.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
10
Advokasi OpenSolaris
Keberadaan Komunitas Advokat bertujuan untukmembantu berbagai kalangan dari penjuru dunia untukikut berpartisipasi dalam Komunitas OpenSolaris.Komunitas ini terbuka bagi semua orang dari semuabahasa dan kebudayaan dan mereka dengan latarbelakang teknis ataupun tidak. Setiap orangmemiliki sesuatu untuk ikut berkontribusi.
Kunjungihttp://opensolaris.org/os/community/advocacy/
Di dalam komunitas Advokat bisa ditemui proyek-proyek dari kelompok pengguna yang berdiri sendiri,presentasi, berita, artikel, blog, halaman yangberisi informasi teknis & non-teknis, video danpodcast, seminar dan konferensi. Tersedia jugaberbagai proyek untuk keperluan promosi sepertiatribut komunitas, pernak-pernik, lencana, pin danlain-lain.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
2 M O D U L
Tujuan
11
Mengapa Menggunakan OpenSolaris?
Mengapa Menggunakan OpenSolaris?Bagian ini menjelaskan alasan-alasan praktis yangmenjadi pertimbangan pemilihan OpenSolaris sebagaiplatform pengembangan perangkat lunak.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
12
Mengapa Menggunakan OpenSolaris?
HargaPopularitas Sistem Operasi Solaris 10 meledak sejakketersediaannya di bulan Januari 2005. Hingga Juli2007, sudah terdaftar lebih dari 8.7 juta salinan,ini jauh lebih besar dibandingkan gabungan versi-versi Solaris sebelumnya. Kondisi ini makin terpicudengan diluncurkannya OpenSolaris pada bulan Juni2005. Lonjakan luar biasa jumlah pengguna Solarisini, membuat semakin banyak pengembang perangkatlunak (komersial atau kode pemograman terbuka)melirik Sistem Operasi Solaris sebagai sasaran yangberkelanjutan bagi perangkat lunak mereka.
Salah satu alasan Sistem Operasi Solaris mengalamipercepatan popularitas yang luar biasa adalahkarena harganya: $ 0 untuk setiap orang,pemanfaatan apa pun (komersial atau non-komersial),di semua platform (SPARC atau x86). Alasan lainadalah jaminan Sun (dan Sun melaksanakan jaminanini) untuk membuat kode pemograman OpenSolaristersedia bagi publik dibawah lisensiCommonDevelopment and Distribution License (CDDL).CDDL sendiri adalah sebuah pengaturan lisensi kodepemograman terbuka yang telah mendapat persetujuanOSI.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
13
Mengapa Menggunakan OpenSolaris?
Fitur-fitur Inti Yang InovatifSebenarnya, alasan terpenting bagi naik popularitasSolaris adalah kekayaan tak terbatas dari fitur-fitur yang ditawarkannya. Fitur-fitur tersebutadalah:
Zona Solaris – Menawarkan kemampuan untukmempartisi sebuah komputer menjadi beberapasistem komputasi virtual, yang masing-masingsaling terisolasi.
DTrace – Sebuah perangkat perunut (tracing) yangdinamis dan komprehensif untuk menginvestigasiperilaku system dan aman untuk digunakanlingkungan produksi
Tumpukan IP (IP stacks) Baru – Menyediakanpeningkatan kinerja yang luar biasa
ZFS – Sebuah pencapaian tertinggi bagi sistemfile 128 bit, dengan deteksi dan koreksikesalahan end-to-end, antar muka perintah-barisyang sederhana dan secara virtual kapasitaspenyimpan yang tidak terbatas.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
14
Mengapa Menggunakan OpenSolaris?
Kompatibilitas BalikSemua fitur-fitur baru ini di kembangkan di atasplatform yang telah lama dinantikan oleh parapengguna Sistem Operasi Solaris dengankarakteristik: stabilitas yang tangguh,skalabilitas yang besar, kinerja tinggi, danjaminan kompatibilitas balik. Kompatibilitas balikmerupakan hal penting terutama bagi pengembangperangkat lunak komersial karena menjagakontinuitas perangkat lunak memerlukan biayatinggi. Dengan jaminan kompatibilitas balik,pabrikan perangkat lunak mengetahui bahwa perangkatlunak (dengan menggunakan API yang dirilis) yangdibuat untuk Solaris ke-N akan berjalan mulus diSolaris ke-N+1 dan versi-versi berikutnya.
Berbeda dengan beberapa Sistem Operasi lain, dimanaperubahan-perubahan yang tidak kompatibel padakomponen sistem – misalnya, libraries – dibuattanpa mempertimbankan efek samping pada applikasi.Efek keseluruhan adalah kerusakan aplikasi yangmenyebabkan tinggi biaya untuk menjaga kontinuitasperangkat lunak dan rasa frustasi bagi pabrikan danpengguna.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
15
Mengapa Menggunakan OpenSolaris?
Netralitas Platform Perangkat KerasParagraf sebelumnya menjelaskan beberapa alasanmengapa kita seharusnya mengembangkan SistemOperasi Solaris, tetapi masih ada alasan-alasanlain untuk melakukan pengembangkan platformSolaris. Salah satunya adalah bahwa Solaris adalahSistem Operasi multi-platform, mendukung baikarsitektur SPARC dan x86 (sebuah port ke Power yangdimotori oleh sebuah komunitas masih berjalan).
Meskipun dulu beberapa tahun yang lalu munculkeraguan berkaitan Solaris untuk platform x86, padakenyataanya sekarang Sun telah memperkenalkanjajaran server dan workstation berbasis AMD yangmembuktikan kesungguhan Sun terhadap teknologi x86.
Dari sudut pandang para pengembang perangkat lunak,versi Solaris untuk platform SPARC dan x85 memilkihimpunan fitur dan API yang sama. Ini artinya parapengembang dapat lebih berkonsentrai dengan isu-isulain untuk memperluas pengembangan antar-platform,seperti CPU endianness.
Platform SPARC adalah big-endian dan x86 adalahlittle-endian sehingga sebuah aplikasi yangdikembangkan dan ditest diatas platform Solarismemiliki kemungkinan besar untuk terbebas masalahyang berhubungan endian. Solaris juga mendukungaplikasi 32 bit dan 64 bits di kedua platformtersebut, sehingga membantui menghilangkan bugsakibat asumsi-asumsi sekitar ukuran word.
Mungkin alasan yang paling tak terbantahkan untukmengembangkan perangkat lunak di Solaris adalahtersedianya piranti pengembangan perangkat lunakyang profesional.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
16
Mengapa Menggunakan OpenSolaris?
Piranti PengembanganSalah satu fitur terpenting sebuah Sistem Operasidari sudut pandang pengembang perangkat lunakadalah tersedianya piranti pengembang perangkatlunak yang beragam dan berkualitas.Pengkompilasi/Compiler dan pen-debug/debuggeradalah contoh yang paling lazim dari pirantiseperti ini, selain pengetest kode pemograman/codecheckers (untuk memastikan kode pemograman terbebasdari kesalahan yang tidak bisa ditemukan olehcompiler), pembangkit referensi-silang/cross-reference generators (untuk melihat fungsi manayang mereferesensi ke fungsi lain atau), danpenganalisa kinerja/performance analyzers.
Sun Studio telah menjadi produk plihan bagipengembang Solaris. Tersedia untuk diunduh secaragratis dari situs http://developers.sun.com,perangkat lunak Sun Studio adalah gabungan daripengkompilasi dan piranti lain yang berkualitasprofesional. Lengkapnya terdiri dari pengkompilasiC, C++, and FORTRAN; piranti penganalisa kodepemograman; sebuah antar muka lingkunganpengembangan terintegrasi (integrated developmentenvironment, IDE); dbx sebuah pen-debug di tingkatkode pemograman; dan program pengolah teks(editors).
Piranti lain yang tergabung dalam Sun Studio adalahcscope (penjelajah kode pemograman interaktif), ctrace(piranti untuk membangkitkan self-tracing versiondari sebuah program), cxref (program pembangkitreferensi-silang C), dmake (program bantu untukmengkonstruksi kode pemograman secara paralel danterdistribusi), and lint (pemeriksa program C).
Solaris dilengkapi dengan pengkompilasi GNU C , gcc,and pelengkap berupa pen-debug di tingkat kodepemograman, gdb. Solaris juga dilengkapi dengan pen-
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
17
Mengapa Menggunakan OpenSolaris?
debug modular yang sangat berguna, mdb. Namun, mdbbukan pen-debug di tingkat kode pemograman. Pirantiini sangat berguna untuk men-debug kode kernel,atau melakukan analisa gejala tertentu yangmengikuti sebuah peristiwa pada sebuah program yangbiasanya tidak tersedia pada level kode pemograman.Informasi lebih lengkap tentang mdb tersedia di bukuSolaris Modular Debugger Guide and SolarisPerformance and Tools yang ditulis oleh McDougall,Mauro dan Gregg.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
18
Pernyataan Tanda Terima Kasih
Pernyatan Tanda Terima KasihAnggota-anggota Komunitas OpenSolaris berikut initelah mengevaluasi dan memberikan saran perbaikanuntuk dokumen ini:
Boyd Adamson
PradhapDevarajan
Alan Coopersmith
Brian Gupta
RainerHeilke
Eric Lowe
Ben Rockwood
Cindy Swearingen
Anggota-anggota Komunitas OpenSolaris berikut initelah menyumbangkan materi baru yang luar biasa:
Dong-HaiHan
Narayana Janga
Shivani Khosa
Rich Teer
Sunay Tripathi
Yifan Xu
Ucapan terima kasih juga kepada Steven Cogorno,David Comay, Teresa Giacomini, StephenHahn, PatrickFinch, and Sue Weber atas kerja kerasnya yangmemungkinkan lahirnya versi awal dokumen ini.
Untuk berpartisipasi melakukan evaluasi mendatangterhadap dokumen ini, lakukan instruksi-instruksiseperti terdapat di situs:
http://www.opensolaris.org/os/community/documentation/reviews
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
19
Mempersiapkan LingkunganKerja OpenSolaris
Tujuan dari modul ini adalah agar peserta memahamikebutuah sistem, informasi pendukung, dokumentasiyang tersedia ketika melakukan instalasi dankonfigurasi proyek OpenSolaris.
Solaris Express Developer Edition InstallationGuide: Laptop Installations. Sun Microsystems,Inc., 2007.
Sumber Bacaan untuk menjalankan Solaris OS dilaptop:http://www.sun.com/bigadmin/features/articles/laptop_resources.html
Komunitas Laptop OpenSolaris:http://opensolaris.org/os/community/laptop
OpenSolaris Starter Kit:http://opensolaris.org/os/project/starterkit
System Administration Guide: IP Services,SunMicrosystems, Inc., 2007
Komunitas Jaringan OpenSolaris:http://www.opensolaris.org/os/community/networking
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
3 M O D U L
Tujuan
20
Sumber BacaanLain
Administrasi ZFS dan halaman manual:http://opensolaris.org/os/community/zfs/docs
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
21
Konfigurasi Perangkat Keras dan Perangkat Lunak
Konfigurasi Perangkat Keras danPerangkat Lunak
Mendapatkan pengalaman praktis secara langsunguntuk mempelajari kode pemograman Sistem Operasidan akses langsung modul-modul kernel merupakan halyang tidak tergantikan. Bagaimana memenuhitantangan unik pengembangan kernel dan mendapatkanhak akses root ke sebuah sistem telah dibuat lebihmudah oleh piranti, forum dan dokumentasi yangdisediakan oleh proyek OpenSolaris.
Tip - Lakukan pendaftaran di Internet melalui situshttp://get.opensolaris.org, agar secara gratisdapat menerima OpenSolaris Starter Kit yang terdiridari materi-materi pelatihan, kode pemograman danpiranti untuk pengembangan.
Pertimbangkan fitur-fitur OpenSolaris berikut iniketika mempersiapkan perangkat keras dan perangkatlunak:
Tabel 3-1 Konfigurasi Pendukung Komponen Lab
Komponen Dukungan Dari Proyek OpenSolarisPerangkatKeras
OpenSolaris mendukung sistem denganjajaran prosesor berarstitektur SPARC danx86: UltraSPARC®, SPARC64, AMD64, Pentium,and Xeon EM64T.Daftar sistem yang didukung, bisadidapatkan pada Solaris OS HardwareCompatibility List di http://www.sun.com/bigadmin/hcl
File KodePemograman
Kunjungihttp://opensolaris.org/os/downloads untukinstruksi lengkap bagaiman mengkonstruksikode pemograman
InstalasiSistem
Distibusi Pre-built OpenSolaris hanyadapat digunakan di Solaris Express:
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
22
Konfigurasi Perangkat Keras dan Perangkat Lunak
Operasi Community Edition [DVD Version], Build 32atau lebih, Solaris Express: DeveloperEdition, Nexenta, Schillix, Martux andBelenix.Untuk kernel OpenSolaris kernel denganlingkungan pengguna GNU, tersedia dihttp://www.gnusolaris.org/gswiki/Download-form
Tabel 3-1 Konfigurasi Pendukung Komponen Lab(Lanjutan)
Komponen Dukungan Dari Proyek OpenSolarisBFUarchives
File on-bfu-DATE.PLATFORM.tar.bz2 tersedia jika ingin menginstalldari arsip pra-konstruksi.
Build tools File SUNWonbld-DATE.PLATFORM.tar.bz2 tersedia jika akanmengkonstruksi dari kode pemograman sumbernya.
Compilersand tools
Pengkompilasi dan piranti lain Sun Studio 11 tersedia untukdigunakan secara bebas oleh pengembang OpenSolaris. Kunjungihttp://www.opensolaris.org/os/community/tools/sun_studio_tools/untuk instruksi bagaimana mengunduh dan menginstall versiterbarunya. Untuk komunitas gcc, kunjungihttp://www.opensolaris.org/os/community/tools/gcc
KebutuhanMemori/Disk
Kebutuhan Memori: 256M minimum (mode teks instalasi),
1GB direkomendasikan
Kebutuhan Memory : 768M minimum untuk instalasi SolarisExpress Developer Edition
Kebutuhan ruang Disk: 350M bytes
LingkunganOS Virtual
Zona and Zona Bertanda-identitas di OpenSolaris menyediakanlingkungan Sistem Operasi yang virtual dan terlindungi dalamsebuah instan Solaris. Ini memungkinkan satu atau lebih prosesberjalan secara terisolasi dari aktifitas proses yang lain disystem.
Open Solaris mendukung XEN, sebuah pemonitor system komputasivirtual dari komunitas kode pemograman terbuka yangdikembangkan oleh tim XEN dari Laboratorium KomputerUniversitas Cambridge. Kunjungihttp://www.opensolaris.org/os/community/xen/ untuk mendapatkaninformasi lebih lanjut tentang proyek XEN.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
23
Konfigurasi Perangkat Keras dan Perangkat Lunak
OpenSolaris juga dapat diinstall dalam lingkungan VMWarekunjungi http://www.opensolaris.org/os/project/contentmendapat artikel terbaru bagaimana melakukannya.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
24
Konfigurasi Perangkat Keras dan Perangkat Lunak
Lihat di Modul 4 untuk informasi lebih lanjutbagaimana Zona and Zona Bertanda-identitasmemungkinkan pengembangan Solaris kernel atau usermode dan aplikasi Linux dapat dilakukan tanpamempengaruhi pengembang yang bekerja di zona yangterpisah.
Dengan berpartisipasi menggunakan proyekOpenSolaris akan memperbaiki kinerja keseluruhansistem dan jaringan dengan teknologi terbaru.Lingkungan lab menjadi lebih menguntungkan denganmenggunakan OpenSolaris karena sistem selalu beradadi lingkungan komputasi termutakhir dan luar biasa.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
25
Konfigurasi Perangkat Keras dan Perangkat Lunak
JaringanProyek OpenSolaris memenuhi tantangan masa depanteknologi jaringan dengan secara radikalmemperbaiki performa jaringan tanpa memerlukanperubahan-perubahan terhadap aplikasi yang sudahada.
Kenaikan kinerja aplikasi hingga 50% denganmelakukan perbaikan lapisan TCP/IP
Dukungan terhadap banyak teknologi jaringanmutakhir, seperti 10 Gigabit Ethernet, jaringannir-kabel dan hardware offloading
Mengakomodasi fitur jaringan seperti high-availability, streaming, and Voice over IP (VoIP)melalui dukungan extended routing dan protocol.
Dukungan terhadap spesifikasi IPv6 terbaru.
Informasi lebih lanjut tentang pengembanganteknologi jaringan di komunitas OpenSolaris dapatdilihat di:http://www.opensolaris.org/os/community/networking.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
26
Daemon Auto-Configuration Jaringan
Daemon Auto-Configuration JaringanProses boot pada rilis Solaris Express DeveloperEdition 5/07 menjalankan sebuah daemon baru,disebut nwamd. Daemon ini merupakan instanalternatif dari layanan SMF, svc:/network/physical, yangmemungkinkan pengkonfigurasian jaringan secaraotomatis dengan intervensi minimal.
Daemon nwamd memonitor port Ethernet dan secaraotomatis mengkonfigurasi kartu jaringan denganDHCP. Jika kabel Ethernet tidak terpasang kejaringan kabel, daemon nwamd melakukan pemindaianjaringan nirkabel dan mengirimkan permintaan untukterhubung dengan titik akses WiFi.
Tidak perlu lagi membuang banyak waktu untukmengkonfigurasi kartu jaringan Ethernet secaramanual. Konfigurasi otomatis juga sangatmempermudah administrasi karena pengkonfigurasian-ulang alamat-alamat jaringan bisa dilakukan denganintervensi minimal.
Untuk melihat status NWAM, ketikan perintah berikutdi jendela terminal.
# svcs nwamSTATE STIME FMRIonline 11:29:50 svc:/network/physical:nwam
Di halaman Network Auto-Magic Phase 0 pada situsOpenSolaris dan manual nwamd terdapat keteranganlebih rinci, termasuk bagaimana mematikan mematikannwamd. Untuk informasi lebih jauh dan link kehalaman manual nwamd(1M), kunjungihttp://www.opensolaris.org/os/project/nwam.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
27
Tinjauan Umum Zone
Tinjauan Umum ZonaZona dapat dibayangkan seperti sebuah wadah dimanadidalamnya satu atau lebih aplikasi berjalan secaraterisolasi dari semua aplikasi yang ada di sistem.Semua perangkat lunak yang berjalan di OpenSolarisbisa berjalan, tanpa dimodifikasi, didalam zona.Karena zona tidak tidak mengubah OpenSolarisApplication Programming Interface (APIs) orApplication Binary Interface (ABI) maka aplikasitidak perlu dikompilasi ulang agar bisa berjalandidalam zona.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
28
Administrasi Zone
Administrasi ZonaAdministrasi zona terdiri dari perintah-perintahberikut:
zonecfg – Membuat zona, mengkonfigurasi zona(menambah sumber daya dan properti), menyimpankonfigurasi zona didalam per-zona file XML yangada di /etc/zones.
zoneadm – Melakukan langkah-langkah administratifuntuk zona seperti: menampilkan, menginstal,(re)boot dan halt.
zlogin – Memungkinkan pengguna log in kedalam zonauntuk melakukan tugas-tugas administrasi.
zonename – Menampilkan nama zona dimana userberada.
Berikut adalah properti-properti dengan lingkupglobal yang digunakan dengan didalam konfigurasizona:
zonepath – Lokasi direktori didalam zona globalyang menjadi direktori root dimana zona akandiinstall
autoboot – Menentukan apakah sebuah zona ikut bootatau tidak ketika zona global boot
pool – Menentukan pool sumber daya yang diberikanuntuk sebuah zona
Sumber Daya dapat digolongkan sebagai berikut:
fs – sistem file
Inherit-pkg-dir – Direktori-direktori didalam zonayang memiliki keterterkaitan dengan paket yangberasal dari zona global
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
29
Administrasi Zone
net – Perangkat jaringan
device – Perangkat-perangkat
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
30
Memulai Administrasi Zone
Memulai Administrasi ZonaPada latihan lab berikut diperkenalkan prosespembuatan zona.
Latihan berikut, menggunakan contoh-contoh yangrinci sehingga diharapkan mempercepat pemahamanproses pembuatan, instalasi dan boot zona.
Catatan – Prosedur berikut tidak dapat digunakanuntuk zona dengan atribut lx (BrandZ)
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
31
Ringkasan
Memulai Administrasi Zone
1.Gunakan perintah berikut ini untukmengkonfigurasikan sebuah zona baru:
Catatan – Contoh di bawah ini menggunakan tumpukanIP-berbagi, ini adalah standar untuk sebuah zona.
# zonecfg -z ApacheApache: No such zone configuredUse ’create’ to begin configuring a new zone.zonecfg:Apache> createzonecfg:Apache> set zonepath=/export/home/Apachezonecfg:Apache> add netzonecfg:Apache:net> set address=192.168.0.50zonecfg:Apache:net> set physical=bge0zonecfg:Apache:net> endzonecfg:Apache> verifyzonecfg:Apache> commitzonecfg:Apache> exit
2.Gunakan perintah berikut ini untuk menginstalldan boot zona yang telah terkonfigurasikan:# zoneadm -z Apache installPreparing to install zone <Apache>.Creating list of files to copy from the global zone.Copying <6029> files to the zone.Initializing zone product registry.Determining zone package initialization order.Preparing to initialize <1038> packages on the zone.Initialized <1038> packages on zone.Zone <Apache> is initialized.Installation of these packages generated warnings: ....The file</export/home/Apache/root/var/sadm/system/logs/install_log>contains a log of the zone installation.The necessary directories are created. The zone is ready forbooting.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
32
Membuat, Menginstal dan BootZona
Memulai Administrasi Zone
3.Lihat isi root direktori-nya:# ls /export/home/Apache/rootbin etc home mnt platform sbintmp var dev export lib optproc system usr
Paket-paket berikut tidak diinstall-ulang.
# /etc/mount/export/home/Apache/root/lib on /lib read only/export/home/Apache/root/platform on /platform read only/export/home/Apache/root/sbin on /sbin read only/export/home/Apache/root/usr on /usr read only/export/home/Apache/root/proc on procread/write/setuid/nodevices/zone=Apache
4.Boot zona-nya.# ifconfig -alo0:flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL>mtu 8232 index 1 inet 127.0.0.1 netmask ff000000
bge0: flags=1004803<UP,BROADCAST,MULTICAST,DHCP,IPv4> mtu 1500 index 2inet 192.168.0.4 netmask ffffff00 broadcast 192.168.0.255ether 0:c0:9f:61:88:c9
# zoneadm -z Apache boot
# ifconfig -alo0:flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL>mtu 8232 index 1 inet 127.0.0.1 netmask ff000000
lo0:1:flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL>mtu 8232 index 1 zone Apache inet 127.0.0.1
bge0: flags=1004803 inet 192.168.0.4 netmask ffffff00 broadcast192.168.0.255 ether 0:c0:9f:61:88:c9
bge0:1: flags=1000803mtu 1500 index 2 zone Apache inet192.168.0.50 netmask ffffff00 broadcast 192.168.0.255
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
33
Memulai Administrasi Zone
5.Buat konfigurasi zona dan login:# zlogin -C Apache[Connected to zone ’Apache’ pts/5]
# ifconfig -alo0:2: flags=2001000849 mtu 8232 index 1 inet 127.0.0.1netmask ff000000
bge0:2: flags=1000803 inet 192.168.0.50 netmask ffffff00broadcast 192.168.0.255
# ping -s 192.168.0.5064 bytes from 192.168.0.50: icmp_seq=0. time=0.146 ms
# exit[Connection to zone ’Apache’ pts/5 closed]
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
34
Virtualisasi Server Web dengan Zone
Virtualisasi Server Web dengan ZonaSetiap zona memiliki karakteristik tersendiri,contohnya, nama zona, alamat IP, nama komputer,naming services, akun root dan non-root. Sesuaistandarnya, Sistem Operasi berjalan didalam zonaglobal. Administrator dapat memvirtualisasikanlingkungan eksekusi aplikasi dengan mendifinisikansatu satu lebih zona non-global. Layanan-layananjaringan dapat dijalankan untuk membatasi kerusakanyang terjadi akibat kejadian serangan keamanan.
Karena zona diimplementasikan di dalam perangkatlunak, zona tidak dibatasi granularitasnyaberdasarkan batasan-batasan yang didefinisikan olehperangkat keras. Tetapi sebaliknya zona menawarkangranularitas sub-CPU.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
35
Pembuatan Zone Non-Global
Pembuatan Zona Non-GlobalLatihan lab berikut ini mendemostrasikan bagaimanamembuat dua kelompok pengguna server web yangberbeda dalam satu sistem komputer.
Akses secara bersamaan ke kedua server web tersebutdikonfigurasikan sedemikan rupa sehingga masing-masing server web dan sistem akan terlindungimeskipun salah satunya telah mendapat serangankeamanan.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
36
Ringkasan
Pembuatan Zone Non-Global
1.Membuat zona non-global Apache1:# zonecfg -z Apache1 infozonepath: /export/home/Apache1autoboot: falsepool:inherit-pkg-dir: dir: /libinherit-pkg-dir: dir: /platforminherit-pkg-dir: dir: /sbininherit-pkg-dir: dir: /usrnet: address: 192.168.0.100/24physical: bge0
2.Membuat zona non-global Apache2:# zonecfg -z Apache2 infozonepath: /export/home/Apache2autoboot: falsepool:inherit-pkg-dir: dir: /libinherit-pkg-dir: dir: /platforminherit-pkg-dir: dir: /sbininherit-pkg-dir: dir: /usrnet: address: 192.168.0.200/24physical: bge0
3.Log in ke Apache1 dan menginstall aplikasinya:# zlogin Apache1
# zonename Apache1
# ls /Apachedir apache_1.3.9 apache_1.3.9-i86pc-sun-solaris2.270.tar
# cd /Apachedir/apache_1.3.9; ./install-bindist.sh /local
Sekarang server Apache HTTP 1.3.9 sudahterinstall.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
37
Membuat Dua Zona Non-Global
Pembuatan Zone Non-Global
4.Log in ke Apache2 dan menginstall aplikasinya:# zlogin Apache2
# zonename Apache2
# ls /Apachedir httpd-2.0.50 httpd-2.0.50-i386-pc-solaris2.8.tar
# cd /Apachedir/httpd-2.0.50; ./install-bindist.sh /local
You now have successfully installed the Apache 2.0.50 HTTPserver.
5.Jalankan aplikasi Apache1:# zonename Apache1
# hostname Apache1zone
# /local/bin/apachectl start /local/bin/apachectl start: httpd started
6.Jalankan aplikasi Apache2:# zonename Apache2
# hostname Apache2zone
# /local/bin/apachectl start /local/bin/apachectl start: httpd started
7.Didalam zona global , edit /etc/hosts file:# cat /etc/hosts## Internet host table#127.0.0.1 localhost192.168.0.1 loghost192.168.0.100 Apache1zone192.168.0.200 Apache2zone
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
38
Pembuatan Zone Non-Global
8.Buka penjelajah web dan and kunjungi URL berikut:http://apache1zone/manual/index.html
Server web Apache1 aktif dan jalan.
9.Buka penjelajah web dan and kunjungi URL berikut:http://apache2zone/manual/
Server web Apache2 aktif dan jalan.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
39
Pembuatan Zone Non-Global
Pengguna melihat masing-masing zona sebagai sistemyang berbeda. Masing-masing server web memilikiname services masing-masing:
File /etc/nsswitch.conf
File /etc/resolv.conf
Serangan jahat terhadap server web dibatasi hanyaterjadi didalam zona. Konflik port juga tidakpernah terjadi!
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
40
Diskusi
Pembuatan Pool Penyimpan Data dan Sistem File ZFS
Pembuatan Pool Penyimpan Data danSistem File ZFS
Masing-masing pool penyimpan data ZFS terdiri darisatu atau lebih perangkat virtual, yangmenggambarkan susunan fisik penyimpan data dankarakteristik penanganan kegagalannya.
Dalam modul ini, pembahasan dimulai denganmempelajari konfigurasi pool penyimpan data ter-mirror. Kemudian, akan diperlihatkan bagaimanamembuat konfigurasi sebuah pool RAID-Z.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
41
Membuat Storage Pool ZFS Mirrored
Membuat Pool Penyimpan Data ZFS Ter-mirror
Tujuan latihan lab ini adalah untuk membuat danmenampilkan pool penyimpan data ter-mirror denganperintah zpool.
Untuk mendapatkan informasi, bagaimana memilihantara pool penyimpan data ZFS dengan konfigurasiter-mirror atau RAID-Z yang sesuai denganlingkungan komputasi tertentu, kunjungi:
http://www.solarisinternals.com/wiki/index.php/ZFS_Best_Practices_Guide
ZFS adalah mudah, mulailah mencobanya!
Sekarang waktunya membuat pool untuk pertama kali.
.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
42
Ringkasan
Membuat Storage Pool ZFS Mirrored
1.Buka jendela terminal 2.Buatlah sebuah pool penyimpan data ter-mirror
bernama tank. Kemudian tampilkan informasi poolpenyimpan data tersebut:# zpool create tank mirror c1t1d0 c2t2d0
# zpool status tank pool: tank state: ONLINE scrub: none requested config:
NAME STATE READ WRITE CKSUM tank ONLINE 0 0 0 mirror ONLINE 0 0 0 c1t1d0 ONLINE 0 0 0 c2t2d0 ONLINE 0 0 0
errors: No known data errors
Kapasitas disk c1t1d0 dan c2t2d0 masing-masingadalah 36 Gbytes each. Karena kedua disk tersebutdi-mirror, maka kapasitas total poolmerefleksikan kurang lebih ukuran salah satudisknya. Metadata untuk pool menghabiskan ruangdisk dengan jumlah yang kecil.
Sebagai contoh:
# zpool listNAME SIZE USED AVAIL CAP HEALTH ALTROOTtank 33.8G 89K 33.7G 0% ONLINE –
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
43
Membuat Pool Penyimpan Data Ter-mirror
Membuat Sistem File ZFS Sebagai Direktori Kerja Pengguna
Membuat Sistem File ZFS SebagaiDirektori Kerja Pengguna
Tujuan dari latihan lab ini adalah untukmempelajari bagaimana membuat sebuah sistem fileZFS sebagai beberapa direktori kerja (homedirectory) pengguna.
Dengan menggunakan fitur sistem file ZFS, yangtersedia di proyek OpenSolaris, memungkinkandilakukannya penyederhanaan proses pengembangankernel dengan memanfaatkan fitur snapshots danrollback.
Didalam lab ini, digunakan perintah zfs untukmembuat sebuah sistem file ZFS dan menentukandirektori aksesnya (mount point).
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
44
Ringkasan
Membuat Sistem File ZFS Sebagai Direktori Kerja Pengguna
1.Tampilkan file sistem standar yang telah dibuatsecara otomatis ketika pool penyimpan datadibuat.# zfs listNAME USED AVAIL REFER MOUNTPOINTtank 86K 33.2G 24.5K /tank
2.Buat sistem file tank/home:# zfs create tank/home
3.Kemudian, ubah direktori akses sistem filetank/home seperti berikut ini:# zfs set mountpoint=/export/home tank/home
4.Kemudian, buat sistem file – sistem file tank/homeuntuk beberapa pengguna:# zfs create tank/home/developer1# zfs create tank/home/developer2# zfs create tank/home/developer3# zfs create tank/home/developer4
Properti mountpoint akan digunakan secaraberkelanjutan untuk menentukan awalan namadirektori (pathname prefix). Sehingga direktoriakses tank/home/developer1 secara otomatis akanmenjadi /export/home/developer1 karena direktori aksestank/home telah diubah menjadi /export/home.
5.Periksa apakah sistem file ZFS telah dibuat:# zfs listNAME USED AVAIL REFER MOUNTPOINTtank 246K 33.2G 26.5K /tanktank/home 128K 33.2G 29.5K /export/hometank/home/developer1 24.5K 33.2G 24.5K /export/home/developer1tank/home/developer2 24.5K 33.2G 24.5K /export/home/developer2tank/home/developer3 24.5K 33.2G 24.5K /export/home/developer3tank/home/developer4 24.5K 33.2G 24.5K /export/home/developer4
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
45
Membuat Sistem File ZFS SebagaiDirektori Kerja Pengguna
Membuat Sistem File ZFS Sebagai Direktori Kerja Pengguna
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
46
Membuat Sistem File ZFS Sebagai Direktori Kerja Pengguna
Lakukan snapshot secara rekursif untuk sistem filetank/home. Kemudian, tampilkan informasi snapshottersebut:
# zfs snapshot -r tank/home@today# zfs listNAME USED AVAIL REFER MOUNTPOINTtank 252K 33.2G 26.5K /tanktank/home 128K 33.2G 29.5K /tank/home tank/home@today 0 - 29.5K -tank/home/developer1 24.5K 33.2G 24.5K /tank/home/developer1tank/home/developer1@today 0 - 24.5K -tank/home/developer2 24.5K 33.2G 24.5K /tank/home/developer2tank/home/developer2@today 0 - 24.5K -tank/home/developer3 24.5K 33.2G 24.5K /tank/home/developer3tank/home/developer3@today 0 - 24.5K -tank/home/developer4 24.5K 33.2G 24.5K /tank/home/developer4tank/home/developer4@today 0 - 24.5K -
Untuk informasi lebih lanjut, lihat zfs.1m.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
47
Membuat Konfigurasi RAID-Z
Membuat Konfigurasi RAID-Z Tujuan dari latihan lab ini adalah sebagaipengenalan terhadap konfigurasi RAID-Z.
Konfigurasi RAID-Z dibuat sebagai konfigurasialternatif terhadap konfigurasi pool penyimpan datater-mirror untuk kebutuhan memaksimalkan ruangdisk.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
48
Ringkasan
Membuat Konfigurasi RAID-Z
1.Buka jendela terminal.2.Buat sebuah pool dengan sebuah perangkat tunggal
RAID-Z yang terdiri dari 5 disk. Kemudian,perlihatkan informasi tentang pool penyimpan datatersebut.# zpool create tank raidz c1t1d0 c2t2d0 c3t3d0 c4t4d0 c5t5d0
# zpool status tankpool: tankstate: ONLINEscrub: none requestedconfig:
NAME STATE READ WRITE CKSUM tank ONLINE 0 0 0 raidz1 ONLINE 0 0 0 c1t1d0 ONLINE 0 0 0 c2t2d0 ONLINE 0 0 0 c3t3d0 ONLINE 0 0 0 c4t4d0 ONLINE 0 0 0 c5t5d0 ONLINE 0 0 0
errors: No known data errors
Disk bisa diakses dengan nama pendek atau namalengkapnya. Contohnya, /dev/dsk/c4t4d0 adalah identikdengan c4t4d0.
Dimungkinkan juga untuk menggunakan partisi disksebagai pool penyimpan data ter-mirror dan RAID-Z,tapi konfigurasi seperti ini tidak direkomendasikanuntuk lingkungan produksi. Untuk informasi lebihlanjut tentang penggunaan ZFS di lingkunganproduksi, kunjungi:http://www.solarisinternals.com/wiki/index.php/ZFS_Best_Practices_Guide.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
49
Membuat Konfigrurasi RAID-Z
Konsolidasi Area Pengguna
Tujuan modul ini adalah untuk memperkenalkankonsolidasi area pengguna (userland consolidations)dari OpenSolaris. Secara umum, konsolidasi areapengguna dapat dianggap sebagai kumpulan perangkatlunak yang berada diluar kernel dan sebagaikomponen dimana denganya pengguna berinteraksi.
Masing-masing konsolidasi mendistribusikan file-file kode pemogramannya ke situs opensolaris.org orsentra download Sun. Untuk mengakses masing-masingkonsolidasi, kunjung URL berikut:http://opensolaris.org/os/downloads/.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
4 M O D U L
Tujuan
50
Konsolidasi Area Pengguna dan Deskripsinya
Konsolisidasi Area Pengguna danDeskripsinya
Server Applikasi Server Aplikasi Glassfish
Piranti PengembanganProduk (DevPro)
Librari matematika,library media, librarimicrotasking, librariSCCS, make, dan C++runtime.
Dokumentasi (Docs) Dokumentasi teknispengembangan danadministrasi.
Dukungan Globalisasi(G11N)
DukunganInternationalisasi andlokalisasi.
Dukungan Instalasi(Install)
Dukungan instalasi andpiranti pembuat paket.
Solusi JavaDesktop (JDS). Perangkat lunak desktopkorporat yang aman dankomprehensif.
Java Platform, StandardEdition (Java SE)
DistribusiJavaDevelopment Kit (JDK)and Java RuntimeEnvironment (JRE).
Halaman Manual Kode pemograman untukHalaman Manual ReferensiSunOS.
Message Queue. Sun Java SystemMessageQueue
Penyimpan Data dalamJaringan (NWS)
Dukungan perangkatpenyimpan data dalam
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
51
Konsolidasi Area Pengguna dan Deskripsinya
jaringan.
SFW (Solaris FreeWare) Perangkat lunak dengankode pemograman terbukayang tersedia di Solaris/OpenSolaris.
Dukungan Grafik SPARC Konsolidasi grafik SPARCmemiliki file-file bineruntuk penggeraknya.
Test Piranti dan kumpulanperangkat lunak pengujianOpenSolaris.
X Window System (X11) Perangkat lunak X11
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
52
Fitur Inti Sistem OperasiSolaris
Tujuan dari modul ini adalah untuk memberikangambaran fitur utama dari Solaris dan bagaimanafitur-fitur tersebut secarna fundamental telahmengubah komputasi Sistem Operasi
Proses Pengembangna OpenSolaris;
http://www.opensolaris.org/os/community/onnv/os_dev_process/
Standarisasi C Style dan Penulisan Kode untukSunOS;http://www.opensolaris.org/os/community/documentation/getting_started_docs/
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
5 M O D U L
Tujuan
53
Sumber BacaanLain
Proses Pengembangan dan Metode Penulisan Kode
Proses Pengembangan dan MetodePenulisan Kode
Langkah-langkah proses pengembangan dan metodepenulisan kode (coding style), yang digunakan olehkonsolidasi OS/Net (ON), dibuat untukmendistribusikan komponen utama Sistem Operasi dankomponen Jaringan.
Komponen Operating System and Networking terdiridari kode pemograman kernel untuk semua platform(untuk semua arsitektur), sekumpulan kodepemograman penggerak perangkat, sistem file,librari utama dan perintah dasar yang biasaterdapat di sistem Solaris.
Proses pengembangan proyek OpenSolaris mematuhilangkah-langkah umum berikut:
1.Ide
Pertama, seseorang yang memiliki sebuah ide untukperbaikan /penambahan atau memilikiketidaknyamanan akibat adanya cacat. Lakukanpencarian informasi terlebih dahulu untukkemungkinan keberdaan bug tersebut ataumengajukan sebagai kasus bug baru atau memintarequest for enhancement (RFE) dengan menggunakanfasilitas yang ada di halamanhttp://bugs.opensolaris.org/. Berikutnya,mengumumkan hal tersebut kepada pengembang-pengembang lain melalui E-mail list. Penyebaranpengumuman ini memiliki keuntungan-keuntungansebagai berikut:
Memicu dengan segera adanya diskusi untukpengubahan atau perbaikan
Menentukan kompleksitas dari pengubahan-pengubahan yang diajukan
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
54
Proses Pengembangan dan Metode Penulisan Kode
Memperkirakan ketertarikan komunitas
Mengidentikasikan calon anggota tim yangpotensial
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
55
Proses Pengembangan dan Metode Penulisan Kode
2.Desain
Fase desain menentukan apakah diperlukan atautidak adanya tinjauan desain secara formal. Jikadiperlukan tinjauan desain secara formal, makalengkapi langkah-langkah berikut ini:
Mengidentifikasi peninjau (reviewers) bagidesain dan arsitektur yang akan diajukan
Membuat dokumen desain
Membuat rencana pengujian
Melakukan tinjauan desain dan memintapersetujuan dengan benar
3.Implementasi
Fase implementasi terdiri dari hal-hal berikut:
Menuliskan kode yang akan menjadi solusi sesuaidengan ketentuan dan standar. Unduh Standar CStyle and Coding untuk SunOS disini:http://www.opensolaris.org/os/community/documentation/getting_started_docs/.
Membuat kumpulan pengujian
Melewati dan lulus berbagai unit and pra-integrasi pengujian
Menuliskan atau memperbaharui dokumentasipengguna, jika diperlukan
Mengindentifikasi peninjau kode pemogramandalam rangka persiapan untuk integrasi
4.Integrasi
Integrasi terjadi setelah semua peninjau telahmenyelesaiakan proses penijauan dan izin untukmelakukan integrasi telah diberikan.
Fase integrasi diperlukan untuk memastikan bahwa
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
56
Proses Pengembangan dan Metode Penulisan Kode
semua prosedur telah dipenuhi; memiliki fakta yanglengkap yang artinya telah ditinjau kodepemograman-nya, dokumentasi dan kelengkapannya.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
57
Proses Pengembangan dan Metode Penulisan Kode
Dokumen proses resmi untuk OpenSolaris menjelaskanlangkah-langkah diatas lebih rinici, disertaidiagram alir yang mengilustrasikan setiap fase-fasepengembangan. Dokumen tersebut juga menjelaskansecara rinci prinsip-prinsip desain dan nilai-nilaiutama yang diterapkan terhadap pengembangan kodepemograman untuk proyek OpenSolaris:
Kehandalan – OpenSolaris harus melakukanfungsinya secara benar, menyediakan hasil kerjayang akurat tanpa kehilangan data atauterkorupsi.
Ketersediaan – Layanan-layanan harus didisaindengan kemampuan distart-ulang jika terjadikegagalan aplikasi dan OpenSolaris sendiri harusberkemampuan memulihkan diri dari kegagalanperangkat keras yang tidak fatal
Kemampuan Servis – Kemampuan untuk mendiagnosabaik masalah-masalah yang fatal dan transien danjika memungkinkan, mengotomasasi diagnosanya.
Keamanan – Keamanan OpenSolaris harus didisainsebagai bagian dari Sistem Operasi denganmenyediakan mekanisme agar dapat melakukan auditterhadap perubahan-perubahan yang dilakukan disistem dan siapa yang melakukannya.
Kinerja – Kinerja OpenSolaris harus yang teratasdibandingkan Sistem Operasi lain yang berjalan dilingkungan yang sama.
Kemudahan Manajemen – Manejemen komponen individuperangkat keras atau perangkat lunak yangkonsisten dan cara yang mudah.
Kompatibilitas – Sub-sistem dan antar-muka baruharus bisa diperluas dan dibuatkan versiterbarunya agar memungkinkan perbaikan atauperubahan di masa mendatang tanpa mengkuatirkankompatibilitas.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
58
Proses Pengembangan dan Metode Penulisan Kode
Kemudahan Perawatan – OpenSolaris harusberarsitektur sedemikian rupa sehingga subrutin-subrutin umum dapat dikombinasikan kedalamlibrari atau modul kernel yang kemudian dapatdigunakan sebanyak-banyaknya pengguna.
Netralitas Platform –OpenSolaris harus tetapnetral terhadap semua platform perangkat kerasdan abstraksi level bawah harus selalu didisaindengan pertimbangan sebagai Sistem Operasi untukbanyak platform dan platform masa depan.
Kunjungihttp://www.opensolaris.org/os/community/onnv/os_dev_process/ untuk informasi lebih detail tentangbagaimana proses yang digunakan untuk pengembangansecara kolektif kode pemograman OpenSolaris.
Seperti proyek-proyek lainnya, Open Solarismengatur secara ketat metode penulisan kode untukkode pemograman yang didistribusikan, darimana punsumbernya. Hal ini dijelaskan secara rinci di situshttp://opensolaris.org/os/community/onnv/.
Ada 2 piranti untuk pengecekan elemen-elemen darimetode penulisan kode yang tersedia sebagai bagiandari distribusi OpenSolaris. Piranti tersebutadalah cstyle(1) untuk melakukan verifikasi kepatuhansebuah kode pemograman terhadap pedoman metodepenulisan kode umum, dan hdrchk(1) untuk pengecekanmetode penulisan header C dan C++.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
59
Tinjauan
Tinjauan Setelah mengenal lingkungan pengembangan, tahap-tahap pengembangan dan prinsip-prinsip yangditerapkan oleh pengembang OpenSolaris, berikutnyadibahas lebih dalam fitur-fitur Sistem OperasiOpenSolaris untuk membuktikan keunggulannya darisisi kinerja, keamanan, kemampuan servis dankemudahan manajemen:
Kinerja
FireEngine
Nemo
Crossbow Keamanan
Least Privilege
Packet Filtering
Zones
Branded Zones (BrandZ) Kemampuan Servis
Predictive Self-Healing
Dynamic Tracing Facility (DTrace)
ModularDebugger (MDB)
Kemudahan Manajemen
ServicesManagement Facility (SMF)
ZFS
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
60
Tinjauan
FireEngineFitur "FireEngine" yang ada di Solaris 10 adalahsebuah pendekatan yang menggabungkan semua lapisanprotokol TCP/IP kedalam satu modul STREAMS yangsecara penuh multithread. Didalam module yangtergabung ini, dibandingkan metode penguncian per-struktur data, sebuah mekanisme sinkronisasi per-CPU yang disebut “perimeter vertikal” (verticalperimeter) digunakan.
Mekanisme perimeter vertikal diimplementasikandengan menggunakan abstraksi antrian secara serialyang disebut "squeue." Masing-masing squeuedilekatkan ke sebuah CPU, dan masing-masing koneksisecara bergantian dilekatkan ke sebuah squeue yangmenyediakan metode sinkronisasi dan mutualexclusion yang diperlukan oleh struktur data per-koneksi.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
61
Tinjauan
Sinkronisasi Karena lapisan TCP/IP secara penuh adalahmultithread (dimana hanya serialiasasi per-CPU yangdilakukan oleh sebuah perimeter vertikal), metodeini menggunakan skema berbasiskan-referensi untukmemastikan bahwa instan koneksi selalu tersediaketika diperlukan. Untuk koneksi TCP yang terjadi,tiga referensi diberikan kepadanya.
Masing-masing lapisan protokol memiliki sebuahreferensi untuk setiap instan koneksi (satu untuklapisan TCP dan satu untuk lapisan IP) danclassifier sendiri memiliki satu referensi karenaclassifier berfungsi mewakili setiap koneksi yangtelah dibuat. Setiap kali sebuah paket datang untukkoneksi tertentu dan classifier mencari instankoneksinya, sebuah referensi tambahan ditempatkan,yang kemudian referensi tersebut dibuang ketikalapisan protokol selesai memproses paket tersebut.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
62
Tinjauan
TCP, IP, dan UDPSolaris 10 OS menyediakan sudut pandang yang samaterhadap TCP seperti terdapat pada versi-versisebelumnya – yaitu TCP muncul sebagai sebuahperangkat terduplikasi (clone device) meskipunsebenarnya TCP adalah sebuah gabungan (composite),dimana kode TCP and IP dileburkan kedalam satumodul D_MP STREAMS.
Bagian operasional TCP dilindungi secara penuh olehperimeter vertical yang dimasukan melalui primitifsqueue. FireEngine mengubah antar-muka antara TCPdan IP dari antar-muka yang ada sekarang yaitupenerusan pesan berbasiskan-STREAMS (STREAMS-basedmessage passing) menjadi sebuah antar-mukaberbasiskan-panggilan fungsional (functional call-based), baik untuk pengiriman informasi kontrol dandata.
Terdapat juga modul UDP yang secara penuhmultithread, yang berjalan dibawah domainperlindungan yang sama seperti IP. Meskipun UDP andIP berjalan didalam domain perlindungan yang sama,keduanya tetap merupakan modul-modul STREAMS yangterpisah. Sehingga, penempatan STREAMS secaravertikal (STREAMS plumbing) tetap tidak berubah dansebuah instan modul UDP selalu didorong diatasmodul IP. Platform Solaris 10 menyediakan dua modepenempatan secara vertikal (plumb modes) sebagaiberikut:
Normal – IP dibuka terlebih dahulu kemudian UDPdidorong secara langsung diatasnya. Ini adalahaksi standar yang terjadi ketika sebuah soket UDPatau perangkat dibuka.
SNMP – UDP didorong diatas modul selain IP.Ketika ini terjadi, hanya semantik SNMP yang akandidukung.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
63
Tinjauan
GLDv3Solaris 10 memperkenalkan sebuah kerangka kerjabaru untuk program penggerak perangkat (new devicedriver framework) disebut GLDv3 disertai denganlapisan fungsional baru. Sebagian besar programpenggerak perangkat utama sudah menggunakan kestruktur ini, dan semua program penggerak perangkatmasa depan dan perangkat jaringan 10 Gb akanberdasarkan kerangka ini. Kerangka kerja ini jugamenyediakan sebuah lapisan DLPI berbasiskan-STREAMSuntuk kompatibilitas balik, sehingga modul-modulekstenal dan modul non-IP dapat terus bekerja.
Arsitektur GLDv3 mem-virtulisasikan lapisan keduadari lapisan protokol jaringan. Korespondesi satu-lawan-satu antara antar-muka jaringan dan lapisanfungsional perangkat diatasnya tidak diperlukanlagi.
Kunjungi Proyek Nemo di situs opensolaris.org untukinformasi lebih lanjut yang berkaitan dengankerangka kerja ini , modul layanan MAC, modul Data-Link Services.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
64
Tinjauan
VirtualisasiProyek Crossbow merupakan sebuah proyek yangbertujuan untuk membuat lapisan protokol virtualdari semua layanan jaringan (HTTP, HTTPS, FTP, NFS,dsb), protokol utama (TCP, UDP, SCTP, dsb.), atauTeknologi Kontainer Solaris.
Lapisan protokol virtual ini dipisahkan berdasarkanklasifikasi perangkat keras artinya trafik untuksatu lapisan protokol tertentu tidak akanmempengaruhi lapisan protokol virtual yang lain.Masing-masing lapisan protokol virtual ini dapatdiberikan prioritas dan lebarpita yang berbedameskipun hanya menggunakan satu kartu Ethernettanpa menimbulkan penurunan kinerja terhadap sistematau layanan/kontainer.
Aristektur ini secara dinamis mengatur prioritasdan alokasi lebar-pita, selain itu juga menyediakanpertahanan yang lebih baik terhadap serangandenial-of-service yang ditujukan kepada layananatau kontainer tertentu; yaitu dengan pengisolasiandampak serangan hanya pada layanan atau kontainertersebut.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
65
Tinjauan
Least Privilege (Hak IstimewaTerbatas)
Dari sejak dulu, UNIX memiliki model hak istimewadidalam sistem yang bersifat “berikan semuanya atautidak sama sekali” (all-or-nothing) yang memaksakanpembatasan-pembatasan berikut:
Hak istimewa root tidak dapat dibatasi
Pengguna non-root tidak bisa melakukan kegiatanadministratif terhadap sistem yang memerlukan hakistimewa karena tidak cara untuk membagi hakistimewa ke pengguna non-root
Aplikasi yang sebenarnya hanya memerlukan sedikitkegiatan dengan hak istimewa harus dijalankansebagai root
Sangat sedikit hal yang bisa dipercaya denganhak-hak istimewa root dan secara virtual tidak adapengguna non-root yang begitu sangat dipercaya.
Di dalam Solaris OS telah dikembangkan fine-grainedprivileges. Fine-grained privileges memungkinkanaplikasi dan proses login users untuk berjalanhanya dengan hak-hak istimewa yang mereka butuhkan.Sebagai ilustrasi, hak istimewa terbatasmemungkinkan mahasiswa untuk diberikan hak-hakistimewa terbatas yang mereka butuhkan untukmenyelesaikan kuliah mereka, berpartisipasi dalamriset dan melakukan perawatan sebagian dariinfrastruktur kampus atau departemen.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
66
Tinjauan
Filtrasi PaketSolaris IP Filter berfungsi menyediakan statefulpacket filtering and network address translation(NAT). Solaris IP Filter berasal dari perangkatlunak kode pemograman terbuka IP Filter.
IP Filter dapat menyaring paket berdasarkan alamatIP, port, protokol, atau antarmuka jaringanberdasarkan kaidah-kaidah filter tertentu.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
67
Tinjauan
Filter IPPacket Filtering Hooks (PFHooks) API telahdiperkenalkan sejak Solaris 10 Update 4, untukmenggantikan implementasi berbasiskan-STREAMS dariIP Filter. Dengan menggunakan kerangka kerjaPFHooks, kinerja perangkat lunak firewall sepertiIP Filter secara luar biasa mengalami peningkatan.
PFhooks juga menyediakan kemampuan untuk mencegattrafik loopback dan inter-zona. Perangkat lunakfirewall pihak ketiga dikembangkan dan diregistrasidengan PFHooks API menggunakan thenet_register_hook(info, event, hook); hook.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
68
Tinjauan
Mengaktifkan Filtrasi PaketSederhanaTujuan latihan ini untuk mempelajari filtrasipaket. Solaris IP Filter telah terinstall didalamSistem Operasi Solaris, namun, sesuai standarnyafiltrasi paket tidak diaktifkan. IP Filter dapatmem-filter berdasarkan alamat IP, port, protokol,atau antar muka jaringan berdasarkan kaidah-kaidahfilter tertentu. Berikut ini adalah sebuah contohkaidah filter:
block in on ce0 proto tcp from 192.168.0.0/16 to any port = 23
Untuk menggunakan Solaris IP Filter, caranyasederhana yaitu dengan memasukan kaidah filterkedalam file /etc/ipf/ipf.conf. Kemudian, aktifkan danstart-ulang layanan svc:network/ipfilter denganperintah svcadm.
Catatan – Perintah ipf juga dapat digunakan untukmembuat kaidah-kaidah IPFilter.
Solaris IP Filter dapat melakukan jugapengkonversian alamat jaringan (NAT, NetworkAddress Translation) untuk sebuah alamat IPpengirim atau sebuah alamat IP tujuan berdasarkankaidah NAT. Berikut adalah sebuah contoh kaidahNAT:
map ce0 192.168.1.0/24 -> 10.1.0.0/16
Agar dapat melakukan pengkonversian alamatjaringan, simpan kaidah-kaidah NAT kedalam file/etc/ipf/ipnat.conf. Kemudian aktifkan dan start-ulanglayanan svc:/network/ipfilter dengan perintah svcadm.
Catatan – Perintah ipnat juga dapat digunakan untukmembuat kaidah-kaidah NAT.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
69
Tinjauan
Beberapa Contoh Kaidah FiltrasiPaketPada bagian ini diberikan beberapa contoh kaidahpembentukan filter. Mengaktifkan kaidah filteradalah dengan menambahkanya kedalam file/etc/ipf/ipf.conf. Kemudian, aktifkan Solaris IP Filterand reboot komputer seperti dijelaskan secaradetail pada latihan sebelumnya.
Me-log semua paket masuk di le0 dengan opsi IPaktif.
log in on le0 from any to any with ipopts
Memblokir semua paket masuk di le0 yang terfragmentdan terlalu pendek untuk dilakukan perbandingantertentu. Ini sebenarnya hanya bisa diterapkanuntuk paket TCP yang bisa mengalami kehilanganflag/port (tergantung kondisi fragment yangterlihat).
block in log quick on le0 from any to any with short frag
Me-log semua paket masuk TCP hanya jika bendera SYNaktif.
Catatan – Jika paket masuk TCP memiliki bendera SYNyang aktif dan memiliki opsi IP yang aktif makakaidah ini menyebabkan paket di-log sebanyak duakali.
log in on le0 proto tcp from any to any flags S/SA
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
70
Tinjauan
Memblokir dan me-log semua paket masuk ICMPunreachable:
block in log on le0 proto icmp from any to any icmp-type unreach
Memblokir dan me-log semua paket masuk UDP di le0yang menuju ke port 2049 (portnya NFS):
block in log on le0 proto udp from any to any port = 2049
Segera membolehkan semua paket ke/dari sebuahpasangan komputer tertentu:
pass in quick from any to 10.1.3.2/32:pass in quick from any to 10.1.0.13/32pass in quick from 10.1.3.2/32 to anypass in quick from 10.1.0.13/32 to any
Memblokir (dan berhenti mencari kaidah lain yangcocok) semua paket dengan opsi IP aktif:
block in quick on le0 from any to any with ipopts
Meneruskan semua paket yang lewat:
pass in from any to any
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
71
Tinjauan
Memblokir semua paket masuk UDP yang ditujukan kesubnet tertentu:
block in on le0 proto udp from any to 10.1.3.0/24block in on le0 proto udp from any to 10.1.1.0/24block in on le0 proto udp from any to 10.1.2.0/24
Memblokir semua paket masuk TCP jika hanya benderaSYN aktif dan ditujukan ke subnet-subnet berikut:
block in on le0 proto tcp from any to 10.1.3.0/24 flags S/SAblock in on le0 proto tcp from any to 10.1.2.0/24 flags S/SAblock in on le0 proto tcp from any to 10.1.1.0/24 flags S/SA
Memblokir semua paket masuk ICMP yang ditujukan kesubnet-subnet berikut:
block in on le0 proto icmp from any to 10.1.3.0/24block in on le0 proto icmp from any to 10.1.1.0/24block in on le0 proto icmp from any to 10.1.2.0/24
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
72
Tinjauan
Zona (Zones)Zona adalah sebuah abstraksi Sistem Operasi virtualyang menyediakan lingkungan komputasi terproteksidimana didalamnya aplikasi dapat berjalan. Didalamzona, aplikasi tertentu diproteksi dari aplikasilainnya untuk menyediakan isolasi terhadapkegagalan perangkat lunak.
Untuk memudahkan pekerjaan mengontrol banyakaplikasi dan lingkunganya, semua aplikasi berjalanbersaman dalam satu Sistem Operasi, dan biasanyadikontrol sebagai satu unit.
Sejumlah kecil aplikasi yang biasanya dijalankansebagai root proses atau dengan hak-hak istimewatertentu tidak diperbolehkan untuk berjalan didalamzona jika aplikasi-aplikasi tersebut berkemampuanmengakses atau mengubah sumber daya global. Sebagaicontoh, kemampuan untuk mengubah penghitung waktuharian sistem. Aplikasi-aplikasi seperti inisebaiknya tetap digunakan hanya didalam zona globaltetapi jika diperlukan berjalan didalam zona non-global maka harus dikonfigurasikan dengan sangathati-hati.
Berikut beberapa pedoman:
Aplikasi yang mengakses layanan jaringan, file-file tertentu dan tidak melakukan aktivitas I/Oyang lain, seharusnya dapat bekerja dengan benardidalam zona.
Aplikasi yang memerlukan akses langsung keperangkat tertentu, contohnya: sebuah partisidisk, dapat dilakukan jika zona tersebutdikonfigurasikan dengan benar. Namun demikian,dalam kasus-kasus tertentu hal ini meningkatkanresiko gangguan keamanan.
Aplikasi yang memerlukan akses langsung perangkat
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
73
Tinjauan
tertentu seperti berikut ini mungkin perludimodifikasi untuk dapat berfungsi secara benar.Sebagai contoh, /dev/kmem, atau perangkat jaringan.Aplikasi seharusnya hanya menggunakan satulayanan IP dalam setiap zona.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
74
Tinjauan
Zona dapat dikombinasikan dengan fasilitasmanajemen sumber daya yang tersedia di OpenSolarisuntuk menyediakan lingkungan komputasi yang lebihlengkap dan terisolasi. Berbeda dengan zona yanglebih berfungsi menyediakan keamanan, isolasiidentitas dan isolasi kegagalan, fasilitasmanajemen sumber daya digunakan untuk mencegahproses yang ada didalam sebuah zona menghabiskanterlalu banyak sumber daya atau untuk menjamin agarproses mendapatkan sumber daya sesuai dengantingkat layanan yang diinginkannya. Zona danmanajement sumber daya keduanya sering disebutsebagai kontainer.
Kunjungi http://opensolaris.org/os/community/zones/faq untuk mendapatkan jawaban dari pertanyaan-pertanyaan umum tentang zona dan alamat-alamatsitus lain menyimpan dokumentasi terbarunya.
Zona menyediakan lingkungan komputasi yangterlindungi bagi aplikasi-aplikasi Solaris.Sedangkan untuk lingkungan komputasi non-Solarisyang terlindungi dan terpisah tersedia melaluiproyek OpenSolaris lain yang disebut BrandZ .
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
75
Tinjauan
Zona Bertanda-identitas (BrandedZones - BrandZ)
BrandZ merupakan sebuah kerangka kerja yangmemperluas infrastrukur zona yang ada sekaranguntuk menciptakan Zona Bertanda-identitas, yangmerupakan zona dengan lingkungan komputasi non-Solaris ada didalamnya.
Zona Bertanda-identitas bisa berupa lingkungankomputasi sederhana dimana didalamnya perintah-perintah standar Solaris digantikan oleh perintahGNU yang sama tanpa dimodifikasi, atau lingkunganyang kompleks berupa lingkungan pengguna Linuxlengkap.
BrandZ memperluas infrastruktur Zona di tingkatlingkungan pengguna dengan beberapa cara berikutini:
Sebuah tanda-identitas adalah sebuah atribut yangmelekat pada sebuah zona, diberikan pada saatmengkonfigurasi zona.
Setiap tanda-identitas menyediakan program danprosedur instalasi sendiri, sehingga memilikikemampuan untuk menginstal perangkat lunak apapun didalam zona bertanda-identitas.
Masing-masing tanda-identitas menyediakan skrippra-boot dan pasca-boot untuk keperluanpenyelesaian pengaturan atau konfigurasi padasaat boot.
Perintah zonecfg dan zoneadm dapat digunakan untukpengaturan dan memberikan informasi tipe tanda-identitas sebuah zona.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
76
Tinjauan
BrandZ menyediakan beberapa titik inter-posisidalam lingkungan kernel:
Titik ini berada di jalur syscall, jalur pemuatanproses dan jalur penciptaan thread, dll.
Titik inter-posisi hanya diterapkan terhadapproses-proses didalam zona Bertanda-identitas.
Di titik ini, sebuah tanda-identitas dapatmemilih untuk memodifikasi atau menggantiperilaku standar Solaris OS.
Pada dasarnya setiap tanda-identitas yang berbedamemerlukan titik inter-posisi baru.
Tanda-identitas “lx” memungkinkan aplikasi binerLinux dapat dijalankan tanpa dimodifikasi diatasSolairs, didalam zona yang menjalankan lingkunganpenggunak Linux lengkap. Tanda-identitas lxmemungkinakn perangkat lunak Linux di tingkat-pengguna dapat berjalan dengan kernel OpenSolariskernel, dan termasuk didalamnya adalah piranti yangdiperluka untuk menginstal distribusi Linux CentOSatau RedHat Enterprise didalam zona diatas sistemSolaris.
Tanda-identitas lx berjalan di sistem x86/x64 danboot dengan kernel 32-bit atau 64-bit. Tetapi hanyaaplikasi Linux 32-bit bisa berjalan. Hinggasekarang, fitur ini baru tersedia untuk arsitekturx86 dan AMDx64. Namun, memindahkannya ke sistemberarsitektur SPARC mungkin bisa menjadi proyekkomunitas yang menarik karena BrandZ lx masih terusdikembangkan.
Kunjungihttp://opensolaris.org/os/community/brandz/installuntuk mendapatkan informasi kebutuhan instalasi danpetunjunknya
Proyek OpenSolaris memang ditujukan untuk mencaritantangan unik dalam pengembangan Sistem Operasidan pengujian kinerja aplikasi yang menggunakan
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
77
Tinjauan
fitur tertentu misalnya zona.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
78
Tinjauan
Jaringan Didalam ZonaBerdasarkan cara yang dipilih untuk memberikanalamat IP pada sebuah zona Solaris maka zonaterbagi sebagai berikut:
Zona dengan IP-Eksklusif
Zona dengan IP-Berbagi
Zona dengan IP-Eksklusif memiliki lapisanfungsional IP mandiri, antarmuka jaringan fisikmandiri dan antarmuka VLAN mandiri. Konfigurasijaringan zona dengan IP-Eksklusif identik dengankonfigurasi jaringan komputer fisik.
Zona dengan IP-Berbagi berbagi lapisan fungsionalIP dengan zona global, sehingga tertutup daririncian konfigurasi perangkat jaringan, rutejaringan dan sebagainya. Masing-masing zona IP-berbagi dapat diberikan alamat IPv4/IPv6. Meskipunberbagi lapisan fungsional IP, masing-masing zonaIP-berbagi memiliki ketersediaan port yang mandiri.Aplikasi dapat mengikat diri ke INADDR_ANY dan hanyamenerima lalulintas data yang ditujukan ke zonatersebut.
Di dalam kedua tipe zona ini, pengamatan terhadaplalulintas data milik sebuah zona yang lain tidakdapat dilakukan. Paket yang berasal dari sebuahzona akan memiliki alamat IP pengirim yang dimilikizona tersebut. Zona dengan IP-berbagi hanya dapatmengirim paket melalui antarmuka dengan alamat IPyang diberikan kepada zona tersebut. Zona denganIP-berbagi hanya bisa menggunakan router defaultjika router tersebut dapat dijangkau secaralangsung dari zona. Router default harus beradadalam sub-jaringan yang sama dengan zona-nya.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
79
Tinjauan
Zona IP-berbagi tidak dapat mengubah konfigurasijaringan atau tabel informasi rute dan tidak dapatmengakses konfigurasi jaringan milik zona yanglain. Perangkat logis /dev/ip tidak tersedia didalamzona IP-berbagi. Sebagai akibatnya agen SNMP harusmengakses /dev/arp bukan /dev/ip. Beberapa zona IP-berbagi secara bersamaan dapat berbagi alamat IPbroadcast dan bergabung di group multicast yangsama.
Zona IP-berbagi juga memiliki keterbatasankemampuan jaringan yang lain, seperti:
Ketersediaan antarmuka jaringan fisik didalamzona tidak dimungkinkan
IPFilter tidak dapat digunakan untuk menyaringpaket diantara dua atau lebih zona
Pemberian alamat IP untuk zona tidak bisamenggunakan DHCP
Routing secara dinamis tidak dapat dilakukan
Zona dengan IP-eksklusif tidak memilikiketerbatasan seperti diatas, dan dapat mengubahkonfigurasi jaringan atau tabel informasi rute.Perangkat logis /dev/ip tersedia didalam zona denganIP-eksklusif.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
80
Tinjauan
Identitas Zona, Akses terhadap CPUdan Instalasi PaketMasing-masing zona mengontrol sendiri namakomputer, zona waktu dan layanan identitas sepertiLDAP dan NIS. Program sysidtool yang dapat melakukanini semua. Terpisahnya file /etc/passwd memungkinkanhak-hak khusus root didelegasikan ke masing-masingzona. Nomor ID pengguna yang sama dapat digunakanoleh nama pengguna yang berbeda ketika mereka adadi domain yang berbeda.
Berdasarkan standar, semua zona bisa mengaksessemua sumber daya CPU. Pembatasan akses terhadapsumber daya secara otomatis dilakukan ketika poolsumber daya dibuat.
Didalam zona dapat diinstal paket hanya didalamzona yang bersangkutan. Patch juga dapat diinstalluntuk paket tersebut.
Patch Sistem diinstal didalam zona global.Kemudian, di dalam zona non-global secara otomatisdilakukan boot -s agar patchnya dapat berfungsi.Parameter paket SUNW_PKG_ALLZONES sebaiknya digunakansecara konsisten diantara zona global dan semuazona non-global.
Parameter SUNW_PKG_HOLLOW menyebabkan nama paketmuncul didalam zona non-global (NGZ) tetapi hanyauntuk kelengkapan informasi ketergantungan paketkarena sebenarnya paket tersebut tidak terinstal.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
81
Tinjauan
Perangkat Didalam ZonesMasing-masing zona memiliki akses ke perangkatmasing-masing yang berbeda. Setiap zona memilikiakses terhadap sekumpulan bagian dari perangkatpseudo didalam direktori /dev. Aplikasi mengaksesnama perangkat logis berdasarkan perangkat-perangkat yang disajikan didalam direktori /dev.Direktori /dev tersedia didalam masing-masing zonanon-global, tetapi direktori /devices tidak ada.Ketersediaan perangkat seperti random, console, andnull dibolehkan jika tersedia didalam zona tetapiyang lainnya seperti /dev/kmem tidak dianjurkan dapatdiakses dari zona non-global.
Didalam zona izin akses terhadap perangkat dapatdimodifikasi tetapi perangkat baru tidak dapatdibuat, misalnya dengan fungsi mknod(2).
Ketersediaan akses secara raw terhadap disk didalamzona harus dilakukan dengan hati-hati. Berbagiperangkat diantara beberapa zona juga bisadilakukan tetapi tetap dengan mempertimbangankeamanan.
Sebagai contoh, diasumsikan akses ke beberapaperangkat tertentu telah diberikan ke beberapa zonasekaligus. Dengan mengizinkan pengguna biasamengakses secara block terhadap disk memungkinkanterjadinya panik sistem, ter-resetnya bus atau efekmerugikan lainnya.
Dengan penempatan sebuah perangkat fisik yang samadidalam beberapa zona, sebuah saluran koneksitersembunyi dapat dibuat antara zona-zona yangbersangkutan. Aplikasi di zona global yang jugamengakses perangkat yang sama memiliki resikodatanya terubah atau rusak akibat serangan darizona non-global.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
82
Tinjauan
Prakiraan Penyembuhan-Diri(Predictive Self-Healing)
Pra-kiraan Penyembuhan-Diri diimplementasi menjadi2 bagian di dalam Solaris 10 yaitu ArsitekturManajemen Kegagalan dan Fasilitas ManajemenLayanan.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
83
Tinjauan
Arsitektur Manajemen Kegagalan(Fault Management Architecture -FMA)Sistem Operasi Solaris menyediakan arsitektur baru,FMA, untuk menciptakan mekanisme penanganankegagalan yang fleksibel, telemetri kegagalan,diagnosa perangkat lunak secara otomatis, agen yangakan bertindak jika terjadi kesalahan, dan modelyang konsisten terhadap kegagalan sistem di setiaptingkat manajemen.
Banyak komponen dari Solaris yang sudah terlibatkedalam FMA, termasuk diantaranya penangankegagalan CPU dan Memori untuk UltraSPARC III danIV; kartu antarmuka PCI untuk UltraSPARC danOpteron. Berbagai proyek juga sedang berjalan,antara lain untuk dukungan penuh terhadap kegagalanCPU, Memori, and I/O di lingkungan komputasiOpteron, konversi penggerak perangkat utama danintegrasi dengan berbagai tingkat manajemen.
Ketika sebuah subsistem dikonversikan agar bisaterlibat dalam Manajemen Kegagalan, mekanismepenanganan kegagalannya dibuat secara fleksibelsehingga sistem dapat dapat terus bekerja meskipunbeberapa kegagalan ditingkat bawah terjadi, dansebuah kejadian telemetri dibuat untuk memicudiagnosa dan tanggapan perbaikan secara otomatis.
Piranti dan arsitektur Manajemen Kegagalanmemungkinkan dikembangkannya mekanisme penyembuhan-diri terhadap kegagalan perangkat lunak danperangkat keras, baik untuk sumber daya yangberskala mikro atau makro, semuanya dengan sudutpandang yang seragam dan sederhana bagiadministrator dan perangkat lunak manajemen sistem.
Kunjungi http://opensolaris.org/os/community/fmuntuk mendapatkan informasi agar bisa
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
84
Tinjauan
berpartisipasi dalam komunitas Manajemen Kegagalanatau mengunduh MIB unutk Manajemen Kegagalan yanghingga sekarang masih terus disempurnakan.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
85
Tinjauan
Fasilitas Manajemen Layanan(Services Management Facility -SMF)SMF menciptakan sebuah model yang terintegrasi danterus berkembang untuk kemudahan manajemen layanan-layanan yang jumlahnya semakin besar di proyekOpenSolaris. Layanan-layanan tersebut antara lain:pengiriman surat elektronik, permintaan ftp daneksekusi perintah secara remote. Kerangka kerjasmf(5) menggantikan mekanisme startup init.d(4) yangada sekarang dan termasuk juga perbaikan fiturinetd(1M).
Bagi pengembang, SMF menyediakan keuntunganberikut:
Secara otomatis me-restart layanan sesuai denganurutan saling ketergantungannya. Banyak hal yangmenyebabkan layanan berhenti antara lain:kegagalan administratif, kegagalan perangkatlunak atau kerusakah perangkat keras yangpermanen.
API yang sama untuk kebutuhan manajemen layanan,konfigurasi dan observasi
Akses terhadap manajemen sumber daya yangberbasiskan layanan
Men-debug proses boot menjadi lebih mudah
Kunjungihttp://opensolaris.org/os/community/smf/scfdotuntuk melihat grafik layanan-layanan SMF danketergantungannya pada sebuah sistem x86 yang barusaja terinstal Sistem Operasi Solaris Nevada.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
86
Tinjauan
Perunut Dinamis (Dynamic Tracing -DTrace)
DTrace menyediakan sebuah infrastruktur kokoh yangdapat digunakan oleh administrator, pengembang danteknisi operasional untuk secara cepat menjawabberbagai pertanyaan tentang perilaku Sistem Operasidan program pengguna.
DTrace memiliki kemampuan seperti berikut ini:
Secara dinamis mengaktifkan dan mengatur ribuanprobe
Secara dinamis menghubungkan predikat dan aksidengan probe
Secara dinamis mengatur kapasitas penyangga saatmerunut dan beban kerja probe Menguji data hasilmerunut yang diperoleh dari sistem secaralangsung atau dari file yang tersimpan setelahsistem mengalami kegagalan ditingkat kernel(system crash dump)
Mengimplementasikan penyedia data tambahan untukperunutan baru yang dipasangkan kedalam DTrace
Mengimplementasi konsumen data hasil merunut yangakan menyajikan data
Mengimplementasikan piranti untuk mengkonfigurasiprobe DTrace
Temukan situs komunitas DTrace di
http://opensolaris.org/os/community/dtrace.
Selain DTrace, proyek OpenSolaris juga menyediakanfasilitas pen-debug untuk pengembangan perangkatlunak di tingkat-bawah, misalnya pengembanganpenggerak perangkat.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
87
Tinjauan
Pen-debug Modular (Modular Debugger- MDB)
MDB adalah sebuah pen-debug yang dirancang untukmenyediakan analisa masalah perangkat lunak yangmemerlukan fasilitas pen-debug-an di tingkat-bawah,misalnya pengujian file core; dan pengetahuantentang bahasa assembly diperlukan agar bisamelakukan diagnosa dan memperbaikinya. Umumnya,para pengembang kernel dan perangkat mengandalkanmdb untuk mencari jawaban mengapa dan dimana terjadikesalahan pada kode pemograman mereka.
MDB tersedia dalam dua perintah berbeda yaitu mdbdan kmdb, namun keduanya memiliki beberapa kesamaanfitur umum. Perintah mdb digunakan secara interaktifatau didalam skrip untuk mendebug proses di tingkatpengguna yang sedang berjalan, file core dariproses di tingkat pengguna, kernel crash dump, fileobject Sistem Operasi yang sedang berjalan dan filelainnya. Sedangkan kmdb digunakan untuk men-debugproses di tingkat kernel dan penggerak perangkatyang sedang berjalan, juga diperlukan untukmengontrol dan menghentikan eksekusi intruksididalam kernel.
Terdapat komunitas yang aktif mendiskusikan MDBsebagai tempat untuk bertanya kepada para pakaratau melihat berbagai percakapan dan pertanyaanyang pernah disampaikan sebelumnya. Kunjungihttp://opensolaris.org/os/community/mdb
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
88
Tinjauan
Sistem File ZFSSistem file ZFS merupakan sistem file yang tidakdibatasi oleh perangkat keras tertentu, sehinggabegitu mudah dan cepat untuk dibuat seperti membuatsebuah direktori, dan sistem file ini bertambahkapasitasnya secara otomatis sesuai dengankapasitas maksimum yang dialokasikan didalam poolpenyimpan datanya.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
89
Tinjauan
Penggunaan Checksum dan PerbaikanDataDengan ZFS, semua data dan metadata diproteksi darikesalahan dengan checksum dimana algoritma yangakan digunakannya bisa dipilih. Semua perhitunganchecksum dan perbaikan kesalahan data dilakukan dilevel sistem file dan semuanya transparan bagiaplikasi. Selain itu, ZFS juga berkemampuanmemperbaiki-sendiri data dari kerusakan. ZFSmendukung pool penyimpan data berkemampuanredundansi data yaitu mirror dan sebuah variasiRAID-5. Ketika terdeteksi sebuah data blok rusakmaka ZFS mengambil data yang masih utuh dari lokasilain yang berisi data yang sama kemudianmemperbaiki data blok yang rusak tersebut yaitudengan menggantinya oleh data blok yang masih utuh.
ZFS menyajikan model pool penyimpan data dimanamodel ini membuang konsep volume besertamasalahnya. Masalah-masalah tersebut meliputi:perlunya mempartisi, melakukan provision, kinerjayang tidak maksimal dan pemakaian kapasitaspenyimpan yang tidak optimal
Gabungan kapasitas I/O dari semua perangkat kerasdi dalam pool tersedia untuk untuk semua sistemfile sepanjang waktu.
Masing-masing pool penyimpan data terdiri dari satuatau lebih perangkat virtual yang menggambarkandisain penyimpan data fisiknya dan karakteristikkemampuan bertahan terhadap kerusakan. Kunjungihttp://opensolaris.org/os/community/zfs/demos/basics untuk menyaksikan demo administrasi sistem fileZFS yang berjudul “100 Mirrored Filesystems in 5Minutes”.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
90
Tinjauan
RAID-ZSelain konfigurasi penyimpanan data tunggal dalamsebuah pool, ZFS juga menyediakan konfigurasipenyimpanan data redundansi ter-mirror danredundansi RAID-Z yang memberikan perlindungansangat baik terhadap kehilangan data. KonfigurasiRAID-Z merupakan perangkat penyimpan data virtualyang menyimpan data dan pariti secara tersebar dibanyak disk sekaligus, mirip dengan RAID-5.
Berbeda dengan RAID-5, RAID-Z menggunakan ukuranRAID stripe yang tidak tetap sehingga setiapoperasi tulis selalu menjad operasi tulis full-stripe. Fitur ini hanya ada di ZFS karena ZFSmengintegrasikan manajemen sistem file danperangkat keras. Pengintegrasian ini menyediakansuatu cara dimana metadata dari sistem file selalumemiliki cukup informasi tentang pondasi dari modelreplikasi datanya untuk menangani ukuran RAIDstripe yang tidak tetap. RAID-Z merupakan solusiberbasis perangkat lunak pertama yang mengatasikelemahan operasi tulis dari RAID-5.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
91
Konsep Pemograman
Modul ini menyajikan deskripsi umum tentang konsep-konsep dasar lingkungan pemograman OpenSolaris,yang meliputi:
Manajemen Proses dan Sistem
Pemograman Thread
Fungsi-fungsi Dasar Kernel
Penjadwalan CPU
Men-debug Proses
Solaris Internals (2nd Edition), PrenticeHall PTR(May 12, 2006) by Jim Mauro and RichardMcDougall
Solaris Systems Programming, PrenticeHall PTR(August 19, 2004), by Rich Teer
Multithreaded Programming Guide. SunMicrosystems,Inc., 2005.
STREAMS Programming Guide. SunMicrosystems, Inc.,2005.
Solaris 64-bit Developer’s Guide.SunMicrosystems, Inc., 2005.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
6 M O D U L
Tujuan
92
Sumber BacaanLain
Manajemen Proses dan Sistem
Manajemen Proses dan SistemUnit dasar beban kerja sistem komputasi adalahproses. Setiap proses diberi tanda pengenal berupanomor identifikasi proses (PID), nomor ini dibuatsecara berurutan didalam sistem. Sesuai standarnya,setiap setiap pengguna akan diberikan sebuah proyekoleh sistem administrator, proyek merupakan sebuahidentitas administratif yang bersifat global.Setiap login ke sebuah proyek akan menciptakansebuah tugas (task), tugas merupakan mekanismepengelompokan proses. Sebuah tugas terdiri dariproses login dan anak proses lain yangmengikutinya.
Fasilitas pool sumber-daya menggabungkan beberapasumber-daya yang tersedia bagi proses kedalamsebuah abstraksi umum disebut pool. Himpunanprosesor dan sumber-daya lain dikonfigurasikan,dikelompokan dan diberi label sedemikian rupasehingga menjadi komponen beban-kerja yang terkaitsebagai himpunan bagian dari total sumber-daya yangdimiliki sistem.
Jika fasilitas pool tidak aktif maka semua prosesakan dimiliki oleh pool yang sama yaitupool_default, dan himpunan prosesor diatur melaluipanggilan fungsi sistem pset(). Ketika fasilitaspool diaktifkan, himpunan proses harus diaturdengan menggunakan fasilitas pool. Sebuah pool barudiciptakan dan dilekatkan dengan himpunan prosesortertentu. Berikutnya, proses dilekatkan dengan poolyang memiliki himpunan sumber-daya tertentu.
Dengan menggunakan OpenGrok untuk melihat sumberkode pemograman pool.c, dapt dilihat komentar yangmenjelaskan hubungan antara tugas, pool, proyek danproses, seperti berikut ini:
“Tindakan untuk melekatkan tugas dan proyek dengan
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
93
Manajemen Proses dan Sistem
pool bersifat atomik. Artinya, baik itu semuaproses yang ada didalam sebuah tugas atau proyekakan dilekatkan ke sebuah pool baru, atau tetapmelekat di pool sebelumnya (jika terjadikegagalan). Proses yang ada didalam sebuah tugasatau proyek hanya bisa dilekatkan ke pool yangberbeda jika proses-proses tersebut masing-masingdilekatkan-ulang satu-persatu sebagai prosestunggal.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
94
Manajemen Proses dan Sistem
Threads atau LWPs dari proses yang sama bukanmerupakan obyek yang dilekatkan pada sebuah pool,dan keduanya dilekatkan dengan himpunan sumber-dayayang sama yang terkait dengan pool sumber-daya dariproses yang bersangkutan.
Proses dapat juga dijalankan didalam zona. Zonadiciptakan oleh adminstrator sistem, biasanya untukalasan keamanan, agar dapat mengisolasi sekelompokpengguna atau proses dari yang lainnya.”
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
95
Manajemen Proses dan Sistem
Pemograman ThreadSejauh ini telah dipelajari proses dalam konteksnyadengan tugas, proyek, pool sumber daya, zona danzona bertanda-identitas, berikutnya akan dipelajariproses dalam konteksnya dengan thread.
UNIX sejak dulu sudah mendukung konsep thread.Masing-masing proses memiliki setidaknya satuthread, sehingga pemograman dengan banyak prosesberarti pemograman dengan banyak thread. Tetapi,proses juga memerlukan area alamat memori, sehinggapenciptaan sebuah proses berarti juga melibatkanpenciptaan sebuah area alamat memori baru.
Komunikasi antar thread dalam satu proses merupakankomunikasi yang sederhana karena semua threadberbagi banyak hal, termasuk area alamat memori dandeskriptor file terbuka yang sama. Sehingga datayang dihasilkan oleh satu thread dengan segeratersedia untuk diakses oleh thread yang lain.
File librari yang tersedia untuk permogramanbanyak-thread (Multithreading) yaitu libpthread untukthread POSIX dan libthread untuk thread OpenSolaris.Pemograman banyak-thread menyediakan fleksibilitasdengan memisahkan sumber daya di tingkat-kerneldengan sumber daya di tingkat-pengguna. DiOpenSolaris, pemograman banyak-thread mendukunghimpunan antarmuka yang disediakan oleh librari Cstandar.
Gunakan fungsi pthread_create(3C) untuk menambahkanthread pengontrol baru kedalam sebuah proses.
int pthread_create(pthread_t *tid, const pthread_attr_t *tattr,void*(*start_routine)(void *), void *arg);
Fungsi pthread_create() dipanggil dengan attr yangtelah memiliki kondisi status yang diperlukan.Fungsi start_routine merupakan fungsi yang berfungsi
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
96
Manajemen Proses dan Sistem
untuk memacu sebuah thread baru untuk memulaieksekusi. Ketika fungsi start_routine selesaidipanggil, thread tersebut keluar dengan statuskeluaran yang ditentukan oleh nilai-balik yangdikembalikan oleh fungsi start_routine.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
97
Manajemen Proses dan Sistem
Fungsi pthread_create() menghasilkan nilai-balik noljika panggilan fungsi tersebut berhasildiselesaikan tanpa kesalahan. Nilai-balik selainnol menandakan adanya kesalahan. Lihat informasiyang tersedia di /on/usr/src/lib/libc/spec/threads.specdengan OpenGrok untuk mendapat daftar lengkapfungsi-fungsi pthread dan cara deklarasinya.
Sinkronisasi thread diperlukan untuk mengontrolaliran program dan akses ke data yang digunakansecara bersamaan oleh beberapa thread yang sedangdieksekusi. Ada empat metode sinkronisasi obyekyaitu penguncian mutex, penguncian baca/tulis,variabel kondisi, and penghitungan tanda bendera.
Penguncian mutex (Mutex locks) mengizinkan hanyasatu thread pada saat tertentu mengeksekusi areakode tertentu atau mengakses data tertentu.
Penguncian baca/tulis (Read/write locks)mengizinkan pembacaan data secara bersamaantetapi penulisan data diberikan secara eksklusifterhadap sumber daya terproteksi yang digunakansecara bersama. Agar dapat melakukan penulisandata, sebuah thread harus mendapatkan dulupengunci penulisan eksklusif. Pengunci penulisaneksklusif tidak akan diberikan lagi sampai semuakunci pembacaan telah dilepaskan oleh thread yanglain.
Variabel kondisi (Condition variables) memblokirthread hingga kondisi tertentu memiliki nilabenar.
Penghintungan tanda bendera (Counting semaphores)biasanya digunakan untuk mengkoordinasikan aksessebuah sumber daya. Penghitungan tanda benderaakan menentukan batas berapa banyak thread dapatmemiliki akses ke sebuah tanda bendera. Ketikalimit penghitungan tercapai; thread lain yangmencoba mengakses sumber daya akan diblokir.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
98
Manajemen Proses dan Sistem
SinkronisasiObyek sinkronisasi merupakan variabel didalammemori yang dapat diakses datanya. Thread yangberasal dari proses yang berbeda dapat salingberkomu-nikasi melalui obyek sinkronisasi yangtersimpan didalam memori-bersama yang terkontrololeh masing-masing thread.
Thread dapat saling berkomunikasi meskipunsebenarnya thread yang berasal dari proses yangberbeda secara umum tidak saling terlihat. Obyeksinkroniasi juga dapat disimpan dalam file. Obyeksinkronisasi dapat memiliki waktu hidup yang lebihlama daripada waktu hidup penciptaan proses.
Gunakan OpenGrok untuk menemukan kode pemogramanlibthread dan informasi penting lain didalammutex.c, perhatikan juga informasi berikut yangdiambil dari sebagian komentar sebuah kodepemogramman:
Implementation of all threads interfaces between ld.so.1 andlibthread. In a non-threaded environment all thread interfacesare vectored to noops. When called via _ld_concurrency() fromlibthread these vectors are reassigned to real threadsinterfaces.
Two models are supported:
TI_VERSION == 1 Under this model libthread providesrw_rwlock/rw_unlock, through which we vector allrt_mutex_lock/rt_mutex_unlock calls. Under lib/libthread theseinterfaces provided _sigon/_sigoff (unlike lwp/libthread thatprovided signal blocking via bind_guard/bind_clear.
TI_VERSION == 2 Under this model only libthreadsbind_guard/bind_clear and thr_self interfaces are used. Bothlibthreads block signals under the bind_guard/bind_clearinterfaces. Lower level locking is derived from internally bound_lwp_ interfaces. This removes recursive problems encounteredwhen obtaining locking interfaces from libthread. The use ofmutexes over reader/writer locks also enables the use of
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
99
Manajemen Proses dan Sistem
condition variables for controlling thread concurrency (allowsaccess to objects only after their .init has completed).
Setelah memahami bagaimana obyek sinkronisasididefinisikan dalam pemograman banyak-thread,berikutnya dijelaskan bagaimana obyek-obyek inidiatur dengan kelas-kelas penjadwalan.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
100
Manajemen Proses dan Sistem
Penjadwalan CPUProses dieksekusi didalam sebuah kelas penjadwalantertentu yang masing-masing memiliki kebijakanpenjadwalan yang berbeda, seperit dijelaskanberikut ini:
Realtime (RT) – Kelas penjadwalan denganprioritas tertinggi yang menyediakan kebijakanpenjadwalan untuk proses yang memerlukantanggapan cepat dan pengontrolan prioritaspenjadwalan secara mutlak oleh pengguna atauaplikasi. Penjadwalan RT dapat diberikan kepadaseluruh proses atau kepada satu atau lebihlightweight processes (LWPs) dari sebuah proses.Diperlukan hak istimewa proc_priocntl untuk dapatmenggunakan kelas Realtime. Informasi lebihlanjut dapat diperoleh di manual privileges (5).
System (SYS) – Kelas penjadwlan dengan prioritasmenengah, kelas ini tidak dapat diberikan kepadaproses pengguna.
Timeshare (TS) – Kelas penjadwalan denganprioritas terendah dan menjadi kelas standaruntuk proses pengguna. Kebijakan TS adalahmendistribusikan sumber daya CPU secara meratadiantara proses-proses dengan karakteristikkonsumsi CPU yang berbeda. Proses-proses lainmilik Kernel dapat memonopoli prosesor dalamjangka waktu yang singkat tanpa menyebabkanpenurunan waktu-tanggap yang dirasakan olehpengguna.
Inter-Active (IA) – Kebijakan IA adalah selainmendistribusikan sumber daya CPU secara meratadiantara proses-proses dengan karakteristikkonsumsi CPU yang berbeda tetapi juga menyediakanwaktu-tanggap yang baik untuk berinteraksi denganpengguna.
Fair Share (FSS) – Kebijakan FSS adalah
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
101
Manajemen Proses dan Sistem
mendistribusikan sumber daya CPU secara meratadiantara beberapa proyek, tidak tergantung jumlahproses yang dimiliki proyek bersangkutan. Setiapproyek mendapatkan besar presentase tertentuuntuk mengontrol hak pemanfaatan sumber daya CPU.Besarnya pemanfaatan sumber daya CPU selaludicatat setiap waktu, sehingga jatah hakpemanfaatannya semakin dikurangi untuk proyekyang dengan pemakaian CPU besar dan akanditambahkankan untuk proyek dengan pemakaian CPUkecil.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
102
Manajemen Proses dan Sistem
Fixed-Priority (FX) – Kebijakan FX menyediakanpenjadwalan preemptive dengan prioritas tetapbagi proses yang memerlukan prioritas penjadwalanyang tidak secara dinamis disesuaikan oleh sistemdan pengguna atau aplikasi yang bisa mengontrolsendiri prioritas penjadwalannya. Kelas ini dapatdigunakan untuk memulai pengubahan kebijakanpengalokasian CPU.
Kelas penjadwalan diberikan kepada masing-masingLWP. Setiap thread mendapatkan kelas penjadwalandan prioritas dari LWP dimana thread tersebutberasal. Masing-masing LWP dalam sebuah prosesdapat memiliki kelas penjadwalan dan prioritas unikyang diperlakukan berbeda oleh kernel. Prioritasthread akan menentukan persaingan untuk mendapatkanobyek sinkronisasi.
Kelas penjadwalan RT dan TS keduanya memanggilfungsi priocntl(2) untuk menentukan tingkat prioritassebuah proses atau LWP dalam sebuah proses. GunakanOpenGrok mencari dasar kode pemograman fungsipriocntl, dari file rtsched.c dapat diketahui variabel-variabel yang digunakan oleh kelas penjadwalan RTand TS sebagai berikut:
27 #pragma ident "@(#)rtsched.c 1.10 05/06/08 SMI"2829 #include "lint.h"30 #include "thr_uberdata.h"31 #include <sched.h>32 #include <sys/priocntl.h>33 #include <sys/rtpriocntl.h>34 #include <sys/tspriocntl.h>35 #include <sys/rt.h>36 #include <sys/ts.h>3738 /*39 * The following variables are used for caching information40 * for priocntl TS and RT scheduling classs.41 */42 struct pcclass ts_class, rt_class;43
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
103
Manajemen Proses dan Sistem
44 static rtdpent_t *rt_dptbl; /* RT class parameter table */45 static int rt_rrmin;46 static int rt_rrmax;47 static int rt_fifomin;48 static int rt_fifomax;49 static int rt_othermin;50 static int rt_othermax;Dengan mengetikan perintah man priocntl di sebuahjendela terminal, diperlihatkan rincian informasiyang berhubungan dengan masing-masing kelaspenjadwalan, atribut, dan pemakaiannya.
% man priocntlReformatting page. Please Wait... done
User Commands priocntl(1)
NAME
SYNOPSIS
DESCRIPTION
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
104
The priocntl command displays or sets scheduling parameters ofthe specified process(es). It can also be used to display thecurrent configuration information for the system’s processscheduler or execute a command with specified schedulingparameters.Processes fall into distinct classes with a separate schedulingpolicy applied to each class. The process classes currentlysupported are the real-time class, time-sharing class,interactive class, fair-share class, and the fixed priorityclass. The characteristics of these classes and the class-specific options they accept are described below in the USAGEsection under the headings Real-Time Class, Time- SharingClass, Inter-Active Class, Fair-Share Class, and--More--(4%)
priocntl -lpriocntl -d [-i idtype] [idlist]priocntl -s [-c class] [ class-specific options] [-iidtype] [idlist]priocntl -e [-c class] [ class-specific options] command[argument(s)]
priocntl - display or set scheduling parameters of specifiedprocess(es)
Manajemen Proses dan Sistem
Tinjauan Umum KernelSetelah memiliki pemahaman di tingkat-atas tentangproses, thread dan penjadwalan, berikutnya akandisajikan penjelasan tentang kernel dan bagaimanamodul kernel berbeda dengan program pengguna.Kernel Solaris berperan melakukan hal-hal berikut:
Manajemen sumber daya sistem, termasukdiantaranya sistem file, proses dan perangkatkeras.
Menyediakan layanan sistem kepada aplikasiseperti manajemen I/O, memori virtual danpenjadwalan.
Mengkoordinasikan interaksi antara prosespengguna dan sumber daya sistem.
Memberikan prioritas, melayani permintaan atassumber daya, melayani interupsi perangkat kerasdan eksepsi.
Menjadwalkan dan mengganti thread, area memoridan men-swap proses.
Pada bagian berikut ini dijelaskan beberapaperbedaan penting antara modul kernel dan programpengguna.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
105
Manajemen Proses dan Sistem
Perbedaan Antara Eksekusi ModulKernel dan Program PenggunaBerikut adalah karakteristik-karakteristik modulkernel yang membedakannya dengan program penggunapada saat dieksekusi:
Modul kernel memiliki area alamat memori yangterpisah. Sebuah modul berjalan di area kernel.Aplikasi berjalan di area pengguna. Perangkatlunak sistem diproteksi dari program pengguna.Area kernel dan area pengguna masing-masingmemiliki area alamat memori sendiri.
Modul kernel memiliki hak eksekusi lebih tinggi.Kode pemograman yang berjalan di area kernelmemiliki lebih banyak hak istimewa daripada kodepemograman yang berjalan di area kernel.
Modul kernel tidak dieksekusi secara berurutan.Program pengguna biasanya dieksekusi secaraberurutan dan melakukan satu tugas tunggal sejakawal hingga berhenti. Modul kernel tidakdieksekusi secara berurutan. Modul kernelmendaftarkan diri sebagai komponen kernel agarbisa melayani permintaan layanan yang akandatang.
Modul kernel dapat diinterupsi. Bebarapa prosesdapat secara bersamaan mengirimkan permintaankepada sebuah modul kernel. Contohnya, sebuahprogram kernel bertugas menangani interupsi bisasaja mengirimkan permintaan kepada sebuah modulkernel yang sedang melayani panggilan sistem padasaat yang sama. Didalam sistem berprosesor-banyaksimetrik (Symmetric Multiprocessor, SMP), sebuahmodul kernel dapat dieksekusi secara bersamaanoleh beberapa CPU.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
106
Manajemen Proses dan Sistem
Modul kernel harus bersifat preemptive. Meskipunsebuah program penggerak tidak dapat memblokirsebuah modul kernel, ini tidak berarti kernelmodul ini aman. Rancanglah sebuah programpenggerak dengan asumsi bahwa kernel modul yangbersangkutan bersifat preemptive.
Modul kernel dapat berbagi data. Thread yangberbeda dari sebuah program aplikasi tidak perluuntuk berbagi data. Berlawanan dengan strukturdata dan kode pemograman rutin sebagai komponenprogram penggerak yang digunakan secara bersamaanoleh semua thread yang ada dalam programpenggereak tersebut. Sebuah program penggerakharus dapat menangani masalah perebutan sumberdaya sebagai akibat permintaan yang banyak.Rancanglah struktur data program penggerak denganpenuh pertimbangan untuk menjaga agar beberapathread tetap dieksekusi secara terpisah.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
107
Manajemen Proses dan Sistem
Perbedaan Struktural antara ModulKernel Modules dan Program PenggunaBerikut adalah karakteristik-karakteristik strukturmodul kernel yang membedakannya dengan strukturprogram pengguna:
Modul kernel tidak mendefinisikan program utama.Modul kernel, termasuk program penggerakperangkat tidak memiliki fungsi rutin utamamain(). Sebaliknya, modul kernel merupakankumpulan fungsi sub-rutin dan data.
Modul kernel hanya di-link ke komponen librarikernel. Modul kernel tidak di-link ke librariyang digunakan oleh program pengguna. Kernelmodule hanya bisa memanggil fungsi-fungsi yangtelah dieksport oleh kernel.
Modul kernel menggunakan file header yangberbeda. Modul kernel memerlukan himpunan fileheader yang berbeda dengan file header yangdiperlukan oleh program pengguna. Daftar fileheader yang diperlukan dapat dilihat di halamanmanual masing-masing fungsi. Modul kernel bisasaja mengikutkan file header yang digunakanbersama oleh program pengguna jika antarmukaantara kode di area user dan area kernel didalamheader file tersebut didefinisikan secarakondisional dengan makro _KERNEL.
Modul kernel sebaiknya menghindari pemakaianvariabel global. Penghindaran variabel globaldidalam kernel modul jauh lebih pentingdibandingkan penghindaran variabel global didalamprogram pengguna. Sebisa mungkin, deklarasikansimbol sebagai statik. Ketika penggunaan simbolglobal tidak dapat dihindari, tambahkan prefix kenama simbol global tersebut agar unik didalamkernel. Penggunan prefix untuk simbol privatedalam modul juga merupakan kebiasaan yang baik.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
108
Manajemen Proses dan Sistem
Modul kernel dapat dibuat berdasarkan kebutuhanspesifik perangkat keras. Modul kernel dapatmenggunakn register proses secara khusus hanyauntuk melakukan fungsi yang specifik. Modulkernel dapat dioptimalisasikan untuk jenisprosesor tertentu. Librari juga dapat dibuatberdasarkan kebutuhan spesifik tertentu, sepertidi OpenSolaris memiliki librari untuk sistem x86/x64 and UltraSPARC. Jadi, jika kernel dapatmenggunakan register untuk fungsi tertentu makakode pemograman dapat dibuat sesuai kebutuhankernel dan pengguna/librari.
Modul kernel dapat dimuatkan dan dibongkarmuatkansesuai permintaan. Kumpulan fungsi sub-rutin dandata yang merupakan bagian program penggerakperangkat dapat dikompilasi menjadi sebuah kodeobyek dari sebuah module tunggal yang dapatdimuatkan. Modul ini berikutnya dapat secaradinamis atau statik di-link kedalam kernel dandi-unlink dari kernel. Penambahan fungsi barukedalam kernel dapat dilakukan pada saat kernelaktif dan berjalan. Pengujian versi terbarusebuah program penggerak dapat dilakukan tanpame-reboot sistem.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
109
Manajemen Proses dan Sistem
Men-debug ProsesMen-debug proses pada semua tingkat dari tahappengembangannya merupakan bagian kunci daripembuatan modul kernel.
Pencarian kode pemograman libthread denganOpenGrok, mengarahkan kita ke file mdb_tdb.c yangmenjelaskan hubungan antara multi-threadeddebugging dan bagaimana mdb bekerja:
In order to properly debug multi-threaded programs, the proctarget must be able to query and modify information such as athread’s register set using either the native LWP servicesprovided by libproc (if the process is not linked withlibthread), or using the services provided by libthread_db (ifthe process is linked with libthread).
Additionally, a process may begin life as a single-threadedprocess and then later dlopen() libthread, so we must beprepared to switch modes on-the-fly. There are also two possiblelibthread implementations (one in /usr/lib and one in/usr/lib/lwp) so we cannot link mdb against libthread_dbdirectly; instead, we must dlopen the appropriate libthread_dbon-the-fly based on which libthread.so the victim process hasopen. Finally, mdb is designed so that multiple targets can beactive simultaneously, so we could even have *both*libthread_db’s open at the same time.
This might happen if you were looking at two multi-threaded userprocesses inside of a crash dump, one using/usr/lib/libthread.so and the other using/usr/lib/lwp/libthread.so. To meet these requirements, weimplement a libthread_db "cache" in this file. The proc targetcalls mdb_tdb_load() with the pathname of a libthread_db toload, and if it is not already open, we dlopen() it, look up thesymbols we need to reference, and fill in an ops vector which wereturn to the caller.
Once an object is loaded, we don’t bother unloading it unlessthe entire cache is explicitly flushed. This mechanism also hasthe nice property that we don’t bother loading libthread_dbuntil we need it, so the debugger starts up faster.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
110
Manajemen Proses dan Sistem
Perintah-perintah mdb berikut dapat digunakan untukmengakses LWP dari sebuah progarm dengan banyak-thread:
$l Menampilkan LWP ID dari thread representatifjika targetnya adalah proses pengguna.
$L Menampilan LWP ID dari masin-masing LWPdidalam target jika targetnya adalah prosespengguna.
pid::attach Melekatkan ke sebuah proses denganmenggunakan ID prosesnya, pid
::release Melepaskan proses atau file core yangsebelumnya dilekatkan. Proses masih dapatmelanjutkan eksekusinya dengan menggunakan prun(1)atau MDB atau pen-debug yang lain.
address::context Melakukan context switch terhadapproses yang ditentukan. Perintah ini menetapkanconditional breakpoints yang seringkali berguna.
[ addr ] ::bp [+/-dDestT] [-c cmd] [-n count] sym ...Menentukan breakpoint pada lokasi tertentu.
addr ::delete [id | all] Menghapus event specifiersdengan nomor ID tertentu
Probe DTrace juga dikonstruksikan dengan cara yangsama seperti MDB. Pada halaman berikutnya terdapatlatihan lab menggunakan DTrace kemudian MDB ketikamen-debug semakin sulit dan kompleks.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
111
Memulai Penggunaan DTrace
Tujuan dari latihan lab ini adalah untukmemperkenalkan DTrace dengan menggunakan skripprobe untuk sebuah system call dengan DTrace.
Solaris Dynamic Tracing Guide. SunMicrosystems,Inc., 2007.
DTrace User Guide, SunMicrosystems, Inc., 2006
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
7 M O D U L
Tujuan
112
Sumber BacaanLain
Mengaktifkan Probe DTrace Sederhana
Mengaktifkan Probe DTrace SederhanaSetelah menyelesaikan latihan-latihan di modul inidiharapkan peserta memiliki pemahaman dasar tentangprobe-probe didalam DTrace.
Pembelajaran DTrace dimulai dengan membuatpermintaan yang sangat sederhana yaitu menggunakanprobe yang bernama BEGIN; probe ini akan terpicu(aktif) satu kali setiap ada permintaan merunutbaru. Kita dapat menggunakan opsi –n dari perintahdtrace(1M) untuk mengaktifkan sebuah probe denganmenggunakan nama string-nya.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
113
Ringkasan
Mengaktifkan Probe DTrace Sederhana
1.Buka jendela terminal2.Mengaktifkan sebuah probe:
# dtrace -n BEGIN
Setelah jeda beberapa saat, dapat disaksikandtrace menyatakan bahwa sebuah probe diaktifkandan sebaris informasi keluaran munculmengindikasi probe BEGIN sudah dipicu.
Setelah muncul keluaran ini, dtrace tetap menungguprobe yang lain untuk memicu. Karena kita tidakakan mengaktifkan probe yang lain dan probe BEGINcukup hanya diaktifkan satu kali, tekan Control-Cuntuk keluar dari dtrace dan kembali ke promptshell:
3.Kembali ke shell prompt dengan menekan Control-C:# dtrace -n BEGINdtrace: description ’BEGIN’ matched 1 probeCPU ID FUNCTION:NAME0 1 :BEGIN^C#Keluaran ini menjelaskan bahwa probe bernamaBEGIN dipicu satu kali dan baik nama dan nomorID, 1 ditampilkan. Perhatikan bahwa berdasarkanstandar, nomor CPU dimana probe dipicu yang akanditampilkan. Dalam contoh ini, kolom CPUmengindikasinya bahwa perintah dtrace dieksekusipada CPU 0 ketika probenya dipicu.
Permintaan DTrace dapat dikonstruksi denganmenggunakan berapapun jumlah probe dan aksi.Berikutnya, buat lagi sebuah permintaan sederhanamenggunakan dua probe yaitu dengan penambahanprobe END pada contoh perintah sebelumnya. ProbeEND memicu satu kali ketika merunut telahlengkap.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
114
Mengaktifkan Probe DTraceSederhana
Mengaktifkan Probe DTrace Sederhana
4.Tambahkan probe END:# dtrace -n BEGIN -n ENDdtrace: description ’BEGIN’ matched 1 probedtrace: description ’END’ matched 1 probeCPU ID FUNCTION:NAME0 1 :BEGIN^C0 2 :END#
Probe END memicu satu kali ketika merunut telahlengkap. Seperti diperlihatkan, dengan menekanControl-C untuk keluar DTrace akan membangkitkanprobe END. DTrace menampilkan informasi bahwaprobe ini memicu sebelum keluar.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
115
Menampilkan Traceable Probes
Menampilkan Probe PerunutTujuan dari lab ini adalah untuk mengenal probelebih jauh dan memperlihatkan bagaimana menampilkanprobe yang ada dalam sebuah sistem.
Pada contoh-contoh sebelumnya, telah dipelajari 2probe sederhana bernama BEGIN dan END. Tetapidarimana kedua probe ini sebenarnya berasal? ProbeDTrace berasal dari himpunan modul-modul kernelyang disebut penyedia (provider), dimana masing-masing penyedia melakukan suatu bentukinstrumentasi tertentu untuk membuat probe. Sebagaicontoh, penyedia syscall menyediakan probe untuksetiap panggilan system( system call) and thepenyedia fbt menyediakan probe untuk setiap fungsiyang ada didalam kernel.
Ketika menggunakan DTrace, setiap penyediadiberikan kesempatan untuk mempublikasikan setiapprobe yang ada yang di kerangka kerja DTrace.Berikutnya setiap probe yang telah dipublikasikandapat diaktifkan dan dilekatkan aksi perunut.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
116
Ringkasan
Menampilkan Traceable Probes
1.Buka jendela terminal.2.Ketikan perintah berikut.:
# dtrace
Opsi-opsi yang ada perintah dtrace ditampilkan.
3.Ketikan perintah dtrace dengan opsi –l :# dtrace -l | moreID PROVIDER MODULE FUNCTION NAME1 dtrace BEGIN2 dtrace END3 dtrace ERROR4 lockstat genunix mutex_enter adaptive-acquire5 lockstat genunix mutex_enter adaptive-block6 lockstat genunix mutex_enter adaptive-spin7 lockstat genunix mutex_exit adaptive-release--More--
Probe-probe yang tersedia di sistem ditampilkandalam lima kolom informasi sebagai berikut:
ID – Nomor urut identifikasi internal dariprobe yang ditampilkan
Provider – Nama Penyedia. Penyedia digunakanuntuk mengklasifikasikan probe. Ini jugadigunakan sebagai metode instrumentasinya.
Module – Nama modul Unix atau librari aplikasidari probe yang bersangkutan
Function – Nama fungsi dimana sebuah probeberasal.
Name – Nama probe
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
117
Menampilkan Probe Perunut
Menampilkan Traceable Probes
4.Gunakan simbol pipa untuk meneruskan keluarandari perintah sebelumnya kedalam perintah wcuntuk menghitung jumlah total probe yang ada disistem:# dtrace -l | wc -l30122
Jumlah probe yang diketahui oleh sistemditampilkan sebagai keluarannya. Jumlah ini bisaberbeda tergantung tipe sistemnya.
5.Tambahkan opsi-opsi berikut untum mem-filtertampilannya:
-P untuk penyedia
-m for modul
-f untuk fungsi
-n untuk name
Perhatikan contoh-contoh berikut:
# dtrace -l -P lockstatID PROVIDER MODULE FUNCTION NAME4 lockstat genunix mutex_enter adaptive-acquire5 lockstat genunix mutex_enter adaptive-block6 lockstat genunix mutex_enter adaptive-spin7 lockstat genunix mutex_exit adaptive-release
Hanya probe-probe yang ada didalam penyedialockstat yang ditampilkan
# dtrace -l -m ufsID PROVIDER MODULE FUNCTION NAME15 sysinfo ufs ufs_idle_free ufsinopage16 sysinfo ufs ufs_iget_internal ufsiget356 fbt ufs allocg entry
Hanya probe-probe yang ada di modul UFS yangditampikan.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
118
Menampilkan Traceable Probes
# dtrace -l -f openID PROVIDER MODULE FUNCTION NAME4 syscall open entry5 syscall open return116 fbt genunix open entry117 fbt genunix open return
Hanya probe-probe dengan name fungsi open yangditampilkan.
# dtrace -l -n startID PROVIDER MODULE FUNCTION NAME506 proc unix lwp_rtt_initial start2766 io genunix default_physio start2768 io genunix aphysio start5909 io nfs nfs4_bio start
Perintah diatas menampilkan semua probe yangmemiliki nama probe start.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
119
Pemograman Bahasa D
Pemograman Bahasa DSetelah memiliki sedikit pemahaman tentangpenamaan, mengaktifkan dan menampilkan probe,langkah berikutnya diharapkan peserta bisamenuliskan sebuah versi program DTrace sederhana,"Hello, World."
Lab ini mendemonstrasikan bahwa DTrce dapatdituliskan dalam sebuah teks file dengan mengunakanbahasa pemograman D, selain mengkonstruksinyadengan perintah baris.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
120
Ringkasan
Pemograman Bahasa D
1.Buka jendela terminal.2.Gunakat editor teks, buat sebuah file baru
bernama hello.d.3.Ketikan sebuah program D:
BEGIN{trace("hello, world");exit(0);}
4.Simpan file the hello.d.5.Jalankan program tersebut menggunakan opsi dtrace –
s:# dtrace -s hello.ddtrace: script ’hello.d’ matched 1 probeCPU ID FUNCTION:NAME0 1 :BEGIN hello, world#
Seperti diperlihat diatas, dtrace menampilkankeluaran yang sama seperti sebelumnya kemudiandiikuti teks “hello, world”. Tidak seperti contohsebelumnya, tidak diperlukan waktu untuk menungguataupun menekan Control-C.
Perubahan ini merupakan efek dari aksi yangdimiliki oleh probe BEGIN didalam hello.d. Dihalaman berikut, akan digali lebih dalam strukturprogram D untuk memahami apa yang sebenarnyaterjadi.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
121
Menuliskan Program DTrace
Pemograman Bahasa D
Setiap program D terdiri atas sebuah urutan klausa-klausa, masing-masing klausa menggambarkan satuatau lebih probe yang akan diaktifkan, dansekumpulan aksi opsional yang akan dilakukan ketikaprobe terpicu. Aksi sendiri ditampilkan sebagaikumpulan urutan pernyataan yang diapit tanda kurung{ } setelah nama probe. Setiap pernyataan diakhirioleh sebuah tanda titik-koma (;).
Pernyataan pertama menggunakan fungsi trace() yangmenandakan bahwa DTrace seharusnya merekam argumanyang diberikan, string “hello, world”, ketika BEGINprobe terpicu dan menampilkannya ke monitor.Pernyataan kedua menggunakan fungsi exit() untukmenandakan bahwa DTrace seharusnya menghentikanproses merunut dan keluar dari perintah dtrace.
DTrace menyediakan sekumpulan fungsi – fungsi yangsangat berguna seperti trace() and exit() untukdigunakan didalam progam D. Untuk memanggil sebuahfungsi, spesifikasikan namanya diikuti olehargumen-argumennya didalam tanda kurung. Daftarlengkap fungsi-fungsi D dijelaskan dalam SolarisDynamic Tracing Guide.
Sampai disini, mereka yang terbiasa dengan bahasapemograman C, akan menyadari dari nama fungsi dancontoh-contoh diatas bahwa bahasa pemograman D yangdigunakan oleh DTrace sangat mirip dengan C danawk(1). Pada kenyataannya, bahasa D memang berasaldari sebagian besar sub-bagian bahasa C yangdikombinasikan dengan kumpulan fungsi-fungsi danvariabel khusus sehingga membantu memudahkan prosesmerunut.
Mereka yang sebelumnya pernah membuat program C,akan dengan segera mentransfer sebagian besarpengetahuan tentang C untuk membuat program tracingdalam bahasa D. Untuk mereka yang tidak mengenal
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
122
Diskusi
Pemograman Bahasa D
bahasa C, mempelajari bahasa D tetap sangat mudah.Langkah pertama yang harus dilakukan adalahmemahami dengan benar kaidah-kaidahnya danmempelajari lebih dalam bagaimana DTrace bekerja,kemudian mempelajari bagaimana membuat program Dyang lebih menarik
.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
123
Men-debug Aplikasi denganDTrace
Tujuan dari modul ini adalah untuk menggunakanDTrace untum memonitor kejadian-kejadian tertentudari sebuah aplikasi.
Application Packaging Developer’s Guide.SunMicrosystems, Inc., 2005.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
8 M O D U L
Tujuan
124
Sumber BacaanLain
Mengaktifkan Probe Didalam Moda Pengguna
Mengaktifkan Probe Didalam ModaPengguna
DTrace memungkinkan juga untuk secara dinamismenambah probe-probe kedalam fungsi-fungsi ditingkat pengguna. Kode program pengguna tidak perluuntuk dikompilasi-ulang, bendera khusus, ataudistart-ulang. Probe-probe DTrace dapat dinyalakanhanya dengan pemanggilan penyedianya.
Sebuah deskripsi probe memili kaidah sebagaiberikut:
pid:mod:function:name
pid: format pid processid (contoh pid 5234)
mod: nama librari atau a.out (biner tereksekusi)
function: nama fungsi
name: entry for function entry return for functionreturn
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
125
Merunut Aplikasi Dengan DTrace
Merunut Aplikasi Dengan DTraceDidalam latihan ini akan dipelajari bagaimanamemanfaatkan DTrace untuk merunut sebuah aplikasi.
Lab ini dibuat dengan menggunakan nomor ID prosesdi dalam deskripsi probe untuk merunut aplikasitertentu. Langkah-langkahnya semakin kompleks dibagian akhir latihan ini, dengan menambahkan jumlahdan kedalaman informasi dari perilaku aplikasi yangteramati.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
126
Ringkasan
Merunut Aplikasi Dengan DTrace
1.Dari menu Application atau Program, jalankanprogram kalkulator.
2.Temukan nomor ID prosesnya.# pgrep gcalctool8198
Angka ini adalah nomor ID proses gcalctool,selanjutnya akan disebut procid.
3.Ikuti langkah-langkah berikut untuk membuat skripD yang akan menghitung berapa kali fungsi-fungsitertentu di dalam gcalctool dipanggil.
a.Dengan editor teks, buat sebuah file bernamaproc_func.d.
b.Gunakan pid$1:::entry sebagai deskripsi-probe.
$1 adalah argumen pertama yang yang diterima olehskrip, biarkan bagian predikat tetap kosong.
c.Dibagian aksi, tambahkan sebuah fungsipengkumulatif untuk menghitung jumlah totalberapa kali fungsi-fungsi tertentu dipanggildengan menggunakan aggregate statement
@[probefunc]=count().pid$1:::entry{@[probefunc]=count();}
d.Jalankan skrip yang baru dituliskan tadi.
# dtrace -qs proc_func.d procid
Ganti procid dengan nomor ID proses gcalctool
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
127
Merunut gcalctool denganDTrace
Merunut Aplikasi Dengan DTrace
e.Lakukan sebuah penghitungan di programkalkulator.
f.Tekan Control+C didalam jendela dimana skrip Ddijalankan.
Catatan – Skrip DTrace mengumpulkan data secaraterus menerus hingga diberhentikan dengan menekanControl+C. Jika tidak diperlukan untuk menampilkanjumlah data total yang dikumpulkan, DTrace tetapakan menampilkannya.
4.Sekarang, modifikasi skripnya sehingga hanyamenghitung fungsi-fungsi dari librari libc.
a. Salin file proc_func.d ke proc_libc.d.
b. Modifikasi deskripsi probe didalam fileproc_libc.d menjadi seperti berikut:
pid$1:libc::entry
c. Skrip barunya akan terlihat sepertiini:
pid$1:libc::entry{ @[probefunc]=count();}
5.Sekarang jalankan skripnya# dtrace -qs proc_libc.d procid
Ganti procid dengan nomor ID proses gcalctool
a. Lakukan sebuah perhitungan di kalkulator
b. Tekan Control+C didalam jendela dimanaskrip D dijalankan untuk melihat keluarannya.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
128
Merunut Aplikasi Dengan DTrace
6.Terakhir, modifikasi skripnya untuk mengetahuiberapa lama waktu yang diperlukan oleh masing-masing fungsi.
a. Buat sebuah file bernama func_time.d.
Gunakan dua deskripsi probe didalam func_time.d.
b. Tuliskan probe pertama seperti berikut:
pid$1:::entry
c. Tuliskan probe kedua seperti berikut:
pid$1:::return
d. Di bagian aksi dari probe pertama, simpantimestamp didalam variabel ts.
Timestamp adalah sebuah variable yang secarainternal tersedia (built-in) di DTrace danberfungsi untuk menghitung berapa nanosecondswaktu yang diperlukan dari titik tertentu yanglampau.
e. Dibagian aksi dari probe kedua hitungberapa nanosecond waktu total yang terlewati:
@[probefunc]=sum(timestamp - ts)
f. Skrip func_time.d akan sama dengan yangberikut ini:
pid$1:::entry{ ts = timestamp;}pid$1:::return /ts/{ @[probefunc]=sum(timestamp - ts);}
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
129
Merunut Aplikasi Dengan DTrace
7.Jalankan skrip func_time.d:# dtrace -qs func_time.d procid
Ganti procid dengan ID prosesnya gcalctool
a. Lakukan perhitungan dengan kalkulator.
b. Tekan Control+C di dalam terminal dimanaskrip D dijalankan untuk melihat keluaranperintahnya:
^Cgdk_xid__equal 2468_XSetLastRequestRead 2998_XDeq 3092...
Kolom kiri meperlihatkan nama fungsi dan kolomkanan memperlihatkan on waktu yang diperlukan untukfungsi tersebut. Satuan waktunya adalah nanoseconds.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
130
Men-debug Aplikasi C++ denganDTrace
Contoh-contoh yang terdapat dalam modul inimendemonstrasikan pemanfaatan DTrace untukmendiagnosa kesalahan-kesalahan pada aplikasi C++.Contoh-contoh ini juga digunakan untukmembandingkan DTrace dengan peranti pen-debugaplikasi yang lain, termasuk perangkat lunak SunStudio 10 dan mdb.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
9 M O D U L
Tujuan
131
Menggunakan DTrace Untuk Men-debug dan Membuat ProfilSebuah Program C++
Menggunakan DTrace Untuk Men-debugdan Membuat Profil Sebuah Program C++
Sebuah program sampel CCtest dibuat untukmendemostrasikan sebuah kesalahan yang lazimterjadi di aplikasi C++ yaitu ketidakcukupanmemori. Dalam banyak hal, ketidakcukupan memoriterjadi ketika sebuah obyek dibuat tetapi tidakpernah dimusnahkan, dan kasus seperti ini yang adadidalam sampel program di modul ini.
Ketika men-debug sebuah program C++ program,perhatikan bahwa kompiler mengkonversi beberapanama dalam C++ menjadi kumpulan karakter danbilangan yang kompleks dan agak susah dipahami.
Nama-nama yang kompleks ini merupakan sebuahrincian implementasi yang diperlukan untukmendukung C++ pemuatan-berlebih (overloading)fungsi, untuk menyediakan nama eksternal yangberlaku untuk nama fungsi C++ yang terdirikarakter-karakter khusus, dan untuk membedakanfungsi dan variabel dengan nama yang samadideklarasikan di ruang nama dan kelas yangberbeda.
Contohnya, gunakan nm untuk mengekstraksi tabelsimbol dari sebuah sampel program yang bernamaCCtest menampikan keluaran sebagai berikut:
# /usr/ccs/bin/nm CCtest...[61] | 134549248| 53|FUNC |GLOB |0 |9 |__1cJTestClass2T5B6M_v_[85] | 134549301| 47|FUNC |GLOB |0 |9 |__1cJTestClass2T6M_v_[76] | 134549136| 37|FUNC |GLOB |0 |9 |__1cJTestClass2t5B6M_v_[62] | 134549173| 71|FUNC |GLOB |0 |9 |__1cJTestClass2t5B6Mpc_v_[64] | 134549136| 37|FUNC |GLOB |0 |9 |__1cJTestClass2t6M_v_[89] | 134549173| 71|FUNC |GLOB |0 |9 |__1cJTestClass2t6Mpc_v_[80] | 134616000| 16|OBJT |GLOB |0 |18 |__1cJTestClassG__vtbl_[91] | 134549348| 16|FUNC |GLOB |0 |9 |
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
132
Menggunakan DTrace Untuk Men-debug dan Membuat ProfilSebuah Program C++
__1cJTestClassJClassName6kM_pc_...
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
133
Menggunakan DTrace Untuk Men-debug dan Membuat ProfilSebuah Program C++
Catatan – Kode pemograman dan makefile untuk CCtesttersedia di halaman akhir modul ini.
Dari keluaran ini, dapat diasumsikan bahwa sejumlahsimbol-simbol acak yang muncul ketika mendebugberhubungan dengan sebuah bernama TestClass, tetapitidak dapat ditentukan apakah simbol-simbol iniberhubungan dengan konstruktor, destruktor, orfungsi-fungsi kelas.
Kompiler Sun Studio memasukan piranti berikut, yangdapat digunakan untuk menerjemahkan simbo-simbolacak ini menjadi simbol-simbol C++ pasangannya,yaitu: nm -C, dem, dan c++ filt.
Catatan – Perangkat lunak Sun Studio 10 digunakandisini, tetapi contoh-contoh dalam modul ini jugatelah ditest oleh Sun Studio 9 and 10.
Jika aplikasi C++ dikompilasi dengan gcc/g++,terdapat pilihan piranti lain untuk menerjemahkansymbol-simbol acak dari sebuah aplikasi yangdikenali baik oleh Sun Studio dan nama-nama simbolGNU, yaitu: gc++filt yang tersedia di /usr/sfw/bin dapatdigunakan untuk menerjemahkan simbol-simbol yangterdapat didalam aplikasi g++.
Contoh:
Simbol-simbol Sun Studio tanpa c++filt:
# nm CCtest | grep TestClass[65] | 134549280| 37|FUNC |GLOB |0 |9 |__1cJTestClass2t6M_v_[56] | 134549352| 54|FUNC |GLOB |0 |9 |__1cJTestClass2t6Mi_v_[92] | 134549317| 35|FUNC |GLOB |0 |9 |__1cJTestClass2t6Mpc_v_...
Simbol-simbol Sun Studio dengan c++filt:
# nm CCtest | grep TestClass | c++filt[65]|134549280| 37|FUNC |GLOB |0 |9 |TestClass::TestClass()
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
134
Menggunakan DTrace Untuk Men-debug dan Membuat ProfilSebuah Program C++
[56]|134549352| 54|FUNC |GLOB |0 |9 |TestClass::TestClass(int)[92]|134549317| 35|FUNC |GLOB |0 |9 |TestClass::TestClass(char*)...
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
135
Menggunakan DTrace Untuk Men-debug dan Membuat ProfilSebuah Program C++
simbol-simbol g++ tanpa gc++filt:
[86] | 134550070| 41|FUNC |GLOB |0 |12 |_ZN9TestClassC1EPc[110] | 134550180| 68|FUNC |GLOB |0 |12 |_ZN9TestClassC1Ei[114] | 134549984| 43|FUNC |GLOB |0 |12 |_ZN9TestClassC1Ev...
simbol-simbol g++ dengan gc++filt:
# nm gCCtest | grep TestClass | gc++filt[86] |134550070|41|FUNC|GLOB |0 |12|TestClass::TestClass(char*)[110]|134550180|68|FUNC|GLOB |0 |12|TestClass::TestClass(int)[114]|134549984|43|FUNC|GLOB |0 |12|TestClass::TestClass()...
Dan akhirnya, dengan nm –C untuk menampilkan simbol-simbol:
[64]|134549344|71|FUNC|GLOB|0|9|TestClass::TestClass()[__1cJTestClass2t6M_v_]
[87]|134549424|70|FUNC|GLOB|0|9|TestClass::TestClass(const char*)[__1cJTestClass2t6Mpkc_v_]
[57]|134549504|95|FUNC|GLOB|0|9|TestClass::TestClass(int)[__1cJTestClass2t6Mi_v_]
Berdasarkan informasi-informasi ini bisa dibuatkanskrip DTrace untuk melakukan pengumpulan informasi(aggregation) terhadap panggilan-panggilan obyekyang terkait dengan test program kita. Kita dapatmenggunakan penyedia pid DTrace untuk mengaktifkanprobe-probe yang berkaitan dengan simbol-simbol C++.
Untuk membuktikan teori konstruktor/destruktor,kita mulai dengan menghitung hal-hal berikut:
Jumlah obyek yang dibuat -- jumlah panggilan kefungsi new()
Jumlah obyek yang dimusnahkan – jumlah pnggilanke fungsi delete()
Dengan menggunakan perintah dibawah ini, kita bisamengekstrak simbol-simbol yang berkaitan denganfungsi new() and delete() dari program CCtest:
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
136
Menggunakan DTrace Untuk Men-debug dan Membuat ProfilSebuah Program C++
# dem ‘nm CCtest | awk -F\| ’{ print $NF; }’‘ | egrep "new|delete"__1c2k6Fpv_v_ == void operator delete(void*)__1c2n6FI_pv_ == void*operator new(unsigned)
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
137
Menggunakan DTrace Untuk Men-debug dan Membuat ProfilSebuah Program C++
Skrip DTrace dengan kegunaan yang sama dapatdigunakan untuk mengaktifkan probe terhadap fungsinew() dan delete(), skripnya bernama CCagg.d:
#!/usr/sbin/dtrace -spid$1::__1c2n6FI_pv_:{@n[probefunc] = count();}pid$1::__1c2k6Fpv_v_:{@d[probefunc] = count();}END{printa(@n);printa(@d);}
Jalankan program CCtest didalam sebuah jendela,kemudian eksekusi skrip CCagg.d di jendela yang lainseperti diperlihatkan berikut ini:
# dtrace -s ./CCagg.d ‘pgrep CCtest‘ | c++filt
Keluaran DTrace diteruskan dan menjadi masukan bagic++filt untuk diterjemahkan menjadi simbol-simbol C++, tetapi gunakan perintah ini dengan hati-hatiseperti tertulis dalam peringatan berikut ini.
Perhatian – Jangan gunakan ^C untuk keluar dariperintah DTrace seperti yang biasa dilakukan karenahal ini menyebabkan c++filt ikut berhenti bersamadengan DTrace sehingga tidak ada keluaran yangditampilkan.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
138
Menggunakan DTrace Untuk Men-debug dan Membuat ProfilSebuah Program C++
Untuk menampilkan keluaran perintah ini, bukajendela baru dan ketikan perintah:
# pkill dtrace
Gunakan urutan langkah-langkah berikut sebagailanjutan latihan ini:
Jendela 1:
# ./CCtest
Jendela 2:
# dtrace -s scriptname | c++filt
Jendela 3:
# pkill dtrace
Keluaran di jendela 2 menampilkan jumlah totalpanggilan terhadap fungsi new() dan delete()seperti berikut ini:
void*operator new(unsigned) 12void operator delete(void*) 8
Dari pengamatan keluaran diatas, terlihat memangbenar dugaan bahwa lebih banyak obyek-obyek yangdibuat daripada yang dihapus.
Berikutnya adalah memeriksa alamat memori obyektersebut dan dan mencoba untuk mencocokannya dengansetiap keberadaan fungsi new() and delete(). Variabelargumen DTrace digunakan untuk menampilkan setiapalamat yang berkaitan dengan obyek.
Karena sebuah pointer ke obyek tertentu terdapatdidalam nilai balik fungsi new(), seharusnya akanterdapat nilai pointer yang sama sebagai arg0 dalampanggilan terhadap fungsi delete().
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
139
Menggunakan DTrace Untuk Men-debug dan Membuat ProfilSebuah Program C++
Dengan sedikit modifikasi pada skrip sebelumnya,jadilah sebuah skrip baru bernama CCaddr.d:
#!/usr/sbin/dtrace -s#pragma D option quiet/*__1c2k6Fpv_v_ == void operator delete(void*)__1c2n6FI_pv_ == void*operator new(unsigned)*//* return from new() */pid$1::__1c2n6FI_pv_:return{printf("%s: %x\n", probefunc, arg1);}/* call to delete() */ pid$1::__1c2k6Fpv_v_:entry{printf("%s: %x\n", probefunc, arg0);}
Eksekusi skrip ini:
# dtrace -s ./CCaddr.d ‘pgrep CCtest‘ | c++filt
Tunggu sejenak, kemudian ketikan perintah berikutdidalam jendela 3:
# pkill dtrace
Keluarannya memperlihatkan sebuah pola berulangberikut, sebanyak tiga panggilan terhadap fungsinew() dan dua panggilan terhadap fungsi delete():
void*operator new(unsigned): 809e480void*operator new(unsigned): 8068a70void*operator new(unsigned): 809e4a0void operator delete(void*): 8068a70void operator delete(void*): 809e4a0
Dari hasil pengamatan terhadap keluaran yangberulang ini, sebuah pola menarik muncul. Terlihatbahwa setiap panggilan pertama terhadap fungsi new()tidak memiliki panggilan delete() yang terkaitnya.Disini sekarang sumber penyebab ketidakcukupanmemori dapat teridentifikasi!
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
140
Menggunakan DTrace Untuk Men-debug dan Membuat ProfilSebuah Program C++
Dengan melanjutkan pengamatan menggunakan DTrace,informasi lain masih dapat diperoleh. Denganmemodifikasi skrip sebelumnya, dapat diketahui tipekelas yang berkaitan dengan obyek yang dibuat dialamat 809e480 dan panggilan terhadap ustack() untukfungsi new(). Skrip hasil modifikasi ini bernamaCCstack.d:
#!/usr/sbin/dtrace -s#pragma D option quiet/*__1c2k6Fpv_v_ == void operator delete(void*)__1c2n6FI_pv_ == void*operator new(unsigned)*/pid$1::__1c2n6FI_pv_:entry{ustack();}pid$1::__1c2n6FI_pv_:return{printf("%s: %x\n", probefunc, arg1);}pid$1::__1c2k6Fpv_v_:entry{printf("%s: %x\n", probefunc, arg0);}
Eksekusi CCstack.d di jendela 2, kemudian ketikanpkill dtrace di jendela 3 untuk menampilkan keluaranberikut:
# dtrace -s ./CCstack.d ‘pgrep CCtest‘ | c++filtlibCrun.so.1‘void*operator new(unsigned)CCtest‘main+0x19CCtest‘0x8050cda
void*operator new(unsigned): 80a2bd0
libCrun.so.1‘void*operator new(unsigned)CCtest‘main+0x57CCtest‘0x8050cda
void*operator new(unsigned): 8068a70
libCrun.so.1‘void*operator new(unsigned)CCtest‘main+0x9aCCtest‘0x8050cda
void*operator new(unsigned): 80a2bf0
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
141
Menggunakan DTrace Untuk Men-debug dan Membuat ProfilSebuah Program C++
void operator delete(void*): 8068a70void operator delete(void*): 80a2bf0
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
142
Menggunakan DTrace Untuk Men-debug dan Membuat ProfilSebuah Program C++
Berdasarkan data dari fungsi ustack() diperolehinformasi bahwa fungsi new() dipanggil dari main+0x19,main+0x57, dan main+0x9a. Pengamatan berikutnya lebihditujukan pada obyek yang berkaitan denganpanggilan pertama terhadap fungsi new() di main+0x19.
Untuk menentukan tipe konstruktor yang dipanggil dimain+0x19, manfaatkan mdb seperti berikut ini:
# gcore ‘pgrep CCtest‘gcore: core.1478 dumped
# mdb core.1478Loading modules: [ libc.so.1 ld.so.1 ]> main::dismain: pushl %ebpmain+1: movl %esp,%ebpmain+3: subl $0x38,%espmain+6: movl %esp,-0x2c(%ebp)main+9: movl %ebx,-0x30(%ebp)main+0xc: movl %esi,-0x34(%ebp)main+0xf: movl %edi,-0x38(%ebp)main+0x12: pushl $0x8main+0x14: call -0x2e4 <PLT=libCrun.so.1‘__1c2n6FI_pv_>main+0x19: addl $0x4,%espmain+0x1c: movl %eax,-0x10(%ebp)main+0x1f: movl -0x10(%ebp),%eaxmain+0x22: pushl %eaxmain+0x23: call +0x1d5 <__1cJTestClass2t5B6M_v_>...
Sebuah konstruktor dipanggil setelah panggilanterhadap fungsi new(), di alamat main+0x23. Panggilanini teridentifikasi sebagai panggilan terhadapkonstruktor __1cJTestClass2t5B6M_v_ dan panggilan initidak pernah dimusnahkan. Manfaatkan dem untukmenerjemahkan simbol ini:
# dem __1cJTestClass2t5B6M_v___1cJTestClass2t5B6M_v_ == TestClass::TestClass #Nvariant 1()
Dapat disimpulkan bahwa panggilan terhadapTestClass() baru di main+0x19 adalah penyebabterjadinya kekurangcukupan memori.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
143
Menggunakan DTrace Untuk Men-debug dan Membuat ProfilSebuah Program C++
Pengamatan terhadap file kode pemograman CCtest.ccmemperlihatkan:
...t = new TestClass();cout << t->ClassName();
t = new TestClass((const char *)"Hello.");cout << t->ClassName(); tt = new TestClass((const char *)"Goodbye.");cout << tt->ClassName();
delete(t);delete(tt);...
Jelas terlihat bahwa pemakaian pertama kalivariabel t = new TestClass(); ditulis-ulangkan olehpemakain kedua: t = new TestClass((const char *)"Hello.");.Ketidakcukupan memori telah teridentifikasi danperbaikan bisa diimplementasikan.
Penyedia pid DTrace pid memungkinkan pengaktifanprobe terhadap sembarang instruksi yang berkaitandengan sebuah proses yang akan diamati. Contoh iniditujukan untuk membuat sebuah model pendekatanDTrace untuk secara interaktif men-debug proses.
Fitur-fitur DTrace yang digunakan dalam contoh inimeliputi: pengumpulan informasi (aggregations),menampilkan argumen-arguman fungsi dan nilai balikdan mengamati tumpukan panggilan pengguna (usercall stack).
Penggunaan perintah c++filt dari perangkat lunak SunStudio dan gc++filt dari gcc adalah untuk mengekstrakprobe-probe fungsi dari tabel simbol sebuah programdan menampilkan keluaran DTrace dalam format yangsesuai dengan kode pemogramannya.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
144
Menggunakan DTrace Untuk Men-debug dan Membuat ProfilSebuah Program C++
File-file kode pemograman yang dibuat untuk contohini adalah sebagai berikut:
CONTOH 9–1 TestClass.h
class TestClass{public:TestClass();TestClass(const char *name);TestClass(int i);virtual ~TestClass();virtual char *ClassName() const;private:char *str;};TestClass.cc:#include <stdio.h>#include <string.h>#include <stdlib.h>#include <unistd.h>#include "TestClass.h"TestClass::TestClass() {str=strdup("empty.");}TestClass::TestClass(const char *name) {str=strdup(name);}TestClass::TestClass(int i) {str=(char *)malloc(128);sprintf(str, "Integer = %d", i);}TestClass::~TestClass() {if ( str )free(str);}char *TestClass::ClassName() const {return str;}
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
145
Menggunakan DTrace Untuk Men-debug dan Membuat ProfilSebuah Program C++
CONTOH 9–2 CCtest.cc
#include <iostream.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include "TestClass.h"int main(int argc, char **argv){TestClass *t;TestClass *tt;while (1) {t = new TestClass();cout << t->ClassName();t = new TestClass((const char *)"Hello.");cout << t->ClassName();tt = new TestClass((const char *)"Goodbye.");cout << tt->ClassName();delete(t);delete(tt);sleep(1);}}
CONTOH 9–3 Makefile
OBJS=CCtest.o TestClass.oPROGS=CCtestCC=CCall: $(PROGS)echo "Done."clean:rm $(OBJS) $(PROGS)CCtest: $(OBJS)$(CC) -o CCtest $(OBJS).cc.o:$(CC) $(CFLAGS) -c $<
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
146
Manajemen Memori denganDTrace dan MDB
Didalam module ini akan dibahas bagaimana kitadapat menyusun kembali pengetahuan yang telahdiperoleh tentang pengamatan proses dengan DTraceuntuk melakukan pengujian kegagalan halaman memori(page fault). Kemudian pengujian ini diteruskandengan menggunakan MDB. MDB merupakan piranti pen-debug tingkat-dasar yang memungkinkan untukpencarian kesalahan hingga ke tingkat kodepemogramannya.
SolarisModular Debugger Guide SunMicrosystems,Inc., 2007.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
1 M O D U L
Tujuan
147
Sumber BacaanLain
Perangkat Lunak Untuk Manajemen Memori
Perangkat lunak Untuk ManajemenMemori
Manajemen memori di OpenSolaris menggunakan suatukonstruksi perangkat lunak yang disebut segmenuntuk menangani memori virtual sebuah proses jugakernel. Sebagian besar struktur data yang digunakanoleh perangkat lunak manajemen memori inididefinisikan di /usr/include/vm/*.h. Di dalam modulini, akan dipelajari kode pemograman dan strukturdata yang digunakan untuk menangani kegagalanhalaman memori.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
148
Pengujian Memori Virtual dengan DTrace dan MDB
Pengujian Memori Virtual denganDTrace dan MDB
Tujuan dari lab ini adalah untuk menguji kegagalanhalaman memori dengan menggunakan DTrace dan MDB.
Pertama, skrip DTrace digunakan untuk merunut aksi-aksi dari sebuah kegagalan halaman memori tunggaluntuk sebuah proses. Skrip ini menampilkan alamatmemori virtual yang menyebabkan suatu kegagalan,dan kemudian merunut setiap fungsi yang dipanggilterhitung dari waktu kegagalan halaman memoriterjadi hingga program kernel yang berfungsimenangani kegagalan virtual memori (fault handler)kembali. Dari pengamatan terhadap keluaran skripini dapat ditentukan bagian mana dari sumber kodepemograman yang harus diperiksa lebih lanjut.
Catatan- Didalam modul ini, telah ditambahkan teksinformasi keterangan dari keluaran skrip DTrace,yang sebagian besar berupa kode-kode, untukmembimbing latihan ini. Perhatikan simbol <----untuk menemukan teks keterangan yang terkait dengankeluaran tersebut.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
149
Ringkasan
Pengujian Memori Virtual dengan DTrace dan MDB
1.Buka sebuah jendela terminal2.Buatlah sebuah skrip DTrace bernama pagefault.d
seperti berikut ini:#!/usr/sbin/dtrace -s#pragma D option flowindentpagefault:entry/execname == $$1/{printf("fault occurred on address = %p\n", args[0]);self->in = 1;}pagefault:return/self->in == 1/{self->in = 0;exit(0);}entry/self->in == 1/{}return/self->in == 1/{}
3.Jalan skrip ini dengan Mozilla sebagaiargumennya.
Catatan – File yang dieksekusi untuk menjalankanMozilla adalah mozilla-bin bukan mozilla.Pernyataan dengan penekanan tertentu jugadigunakan untuk menampilkan berbagai macampanggilan, sebagai contoh adalah panggilanterhadap mutex_owner(), dengan menggunakanASSERT().Pernyataan dengan penekanan tertentu hanyadigunakan untuk men-debug kernel.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
150
Pengujian Kegagalan HalamanMemori Dari Sebuah ProsesDengan DTrace
Pengujian Memori Virtual dengan DTrace dan MDB
# ./pagefault.d mozilla-bin
dtrace: script ’./pagefault.d’ matched 42626 probes CPU FUNCTION0 -> pagefault fault occurred on address = fb985ea2
0 | pagefault:entry <-- i86pc/vm/vm_machdep.catau
sun4/vm/vm_dep.c0 -> as_fault <-- generic addressspace fault
common/vm/vm_as.c0 -> as_segat0 -> avl_find <-- segmen ada di strukturAVL0 -> as_segcompar <-- pencarian terhadapsegment0 <- as_segcompar <-- yang mengandungalamat yang gagal0 -> as_segcompar <-- common/vm/vm_as.c0 <- as_segcompar0 -> as_segcompar0 <- as_segcompar0 -> as_segcompar0 <- as_segcompar0 -> as_segcompar0 <- as_segcompar0 -> as_segcompar0 <- as_segcompar0 -> as_segcompar0 <- as_segcompar0 -> as_segcompar0 <- as_segcompar0 <- avl_find0 <- as_segat
0 -> segvn_fault<-- segmen yang mengandung kegagalan ditemukan,(bukan SEGV)<-- common/vm/seg_vn.c
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
151
Pengujian Memori Virtual dengan DTrace dan MDB
0 -> hat_probe <-- pencarian isian di tablehalaman
untuk halaman tersebut<-- i86pc/vm/hat_i86.c or sfmmu/vm/hat_sfmmu.c
0 -> htable_getpage <-- table halaman di-hash dix860 -> htable_getpte <-- i86pc/vm/htable.c0 -> htable_lookup0 <- htable_lookup0 -> htable_va2entry0 <- htable_va2entry0 -> x86pte_get <-- mengembalikan isian tablehalaman0 -> x86pte_access_pagetable0 -> hat_kpm_pfn2va0 <- hat_kpm_pfn2va0 <- x86pte_access_pagetable0 -> x86pte_release_pagetable0 <- x86pte_release_pagetable0 <- x86pte_get0 <- htable_getpte0 <- htable_getpage0 -> htable_release0 <- htable_release0 <- hat_probe
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
152
Pengujian Memori Virtual dengan DTrace dan MDB
0 -> fop_getpage <-- operasi file untuk mengisihalaman memori0 -> ufs_getpage <-- file ada di ufs
fs(common/fs/ufs/ufs_vnops.c)
0 -> bmap_has_holes <-- memeriksa sparsefile0 <- bmap_has_holes
0 -> page_lookup <-- memeriksa apakah halaman sudah ada di memori
0 -> page_lookup_create <-- common/vm/vm_page.c0 <- page_lookup_create <-- buat halaman jikaperlu0 <- page_lookup
0 -> ufs_getpage_miss <-- halaman tidak ada dimemori
0 -> bmap_read <-- dapatkan nomorblok untuk
halamantersebut dari inode
0 -> bread_common0 -> getblk_common0 <- getblk_common0 <- bread_common0 <- bmap_read
0 -> pvn_read_kluster <-- membaca halaman(common/vm/vm_pvn.c)
0 -> page_create_va <-- buat beberapahalaman0 <- page_create_va0 -> segvn_kluster0 <- segvn_kluster0 <- pvn_read_kluster
0 -> pageio_setup <-- siapkan halamanuntuk
operasi i/ocommon/os/bio.c
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
153
Pengujian Memori Virtual dengan DTrace dan MDB
0 <- pageio_setup
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
154
Pengujian Memori Virtual dengan DTrace dan MDB
0 -> lufs_read_strategy <-- pembacaan ufs di-log
0 -> bdev_strategy <-- baca perangkat common/os/driver.c
0 -> cmdkstrategy<-- common disk driver(cmdk(7D))
<--common/io/dktp/disk/cmdk.c
0 -> dadk_strategy<-- direct attached
disk (dad(7D))<-- untuk ide disks(common/io/dktp/dcdev/dadk.c)<-- driver mempersiapkan dma dan
memulai page in
0 <- dadk_strategy0 <- cmdkstrategy0 <- bdev_strategy
0 -> biowait <-- tunggu pagein selesai common/os/bio.c
0 -> sema_p <-- bangunkan sema_v setelah interupsi selesai
0 -> swtch <-- biarkan thread lainjalan
(common/disp/disp.c)0 -> disp <-- jadwalkan threadberikutnya
untuk dijalankan0 <- disp0 -> resume <-- switching sebenarnyaterjadi disini
<-- intel/ia32/ml/swtch.s0 -> savectx <-- simpan konteks yang lama0 <- savectx
<-- thread yang lainberjalan disini
0 -> restorectx <-- kembalikan kontext
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
155
Pengujian Memori Virtual dengan DTrace dan MDB
(thread dibangunakan)
0 <- restorectx0 <- resume0 <- swtch0 <- sema_p0 <- biowait
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
156
Pengujian Memori Virtual dengan DTrace dan MDB
0 -> pageio_done <-- batalkan pageio_setup0 <- pageio_done0 -> pvn_plist_init0 <- pvn_plist_init0 <- ufs_getpage_miss <-- halaman sekarang ada dimemori0 <- ufs_getpage0 <- fop_getpage0 -> segvn_faultpage <-- panggil hat untukmemuat pte(s) bagi
halaman bersangkutan0 -> hat_memload0 -> page_pptonum <-- dapatkan nomor framehalaman0 <- page_pptonum0 -> hati_mkpte <-- buat isian di tablehalaman0 <- hati_mkpte0 -> hati_pte_map <-- tentukan lokasi isian di
table halaman0 -> x86_hm_enter0 <- x86_hm_enter0 -> hment_prepare0 <- hment_prepare
0 -> x86pte_set <-- isi pte ke tablehalaman0 -> x86pte_access_pagetable0 -> hat_kpm_pfn2va0 <- hat_kpm_pfn2va0 <- x86pte_access_pagetable0 -> x86pte_release_pagetable0 <- x86pte_release_pagetable0 <- x86pte_set
0 -> hment_assign0 <- hment_assign0 -> x86_hm_exit0 <- x86_hm_exit0 <- hati_pte_map0 <- hat_memload0 <- segvn_faultpage0 <- segvn_fault0 <- as_fault0 <- pagefault
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
157
Pengujian Memori Virtual dengan DTrace dan MDB
#
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
158
Pengujian Memori Virtual dengan DTrace dan MDB
Perhatikan bahwa keluaran diatas sebenarnya sudahdiperpendek untuk kemudahan pemahaman. Padatingkat atas, ketika terjadi kegagalan halamanmemori hal-hal berikut akan terjadi:
Rutin pagefault() dipanggil untuk menanganikegagalan halaman memori s.
Rutin pagefault() memanggil as_fault() untukmenangani kegagalan pada sebuah alamatmemori
Rutin as_fault() menyusuri susunan AVL daristruktur seg untuk melakukan pencarian segmendengan alamat yang salah. Jika tidakditemukan segmen seperti ini, proses yangbersangkutan akan mengirimkan sebuah sinyalSIGSEGV (segmentation violation).
Jika segmen dengan alamat yang salahditemukan, sebuah program kernel faulthandler yang spesifik segmen dipanggil. Namafault handler ini adalah segvn_fault() yangdigunakan oleh sebagian besar segmen.
segvn_fault() mencari apakah lokasi memori yangsalah telah dipakai sebelumnya oleh prosesyang bersangkutan. Jika data dilokasi memoritersebut masih ada (tetapi sudah dinyatakanbebas oleh pemindai halaman memori - memoripage scanner), lokasi tersebut akan “diklaimulang” sehingga dikeluarkan daftar lokasiyang bebas. Jika lokasi di memori besertadatanya sudah tidak ditemukan lagi maka akandipanggil ufs_getpage().
ufs_getpage() berusaha menemukan nomor blokdidalam sistem file dari data yang semulaada di lokasi memori dengan memanggilbmap_read().
Selanjutnya dipanggil rutin strategi programpenggerak perangkat untuk menentukan rutin
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
159
Pengujian Memori Virtual dengan DTrace dan MDB
strategi apa yang akan dilakukan, lihatlebih lanjut dimanual strategy(9E).
Selama lokasi memori sedang dibaca, threadyang menyebabkan kegagalan halaman memoriblocks akan di-switch out melalui panggilanswtch(). Ini memberi kesempatan thread yanglain untuk aktif.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
160
Pengujian Memori Virtual dengan DTrace dan MDB
Ketika paging I/O telah lengkap, interrupthandler dari penggerak disk akanmembangunkan thread mozilla-bin yang semulaterblok.
Program penggerak disk kembali melalui kodesistem file kepada segvn_fault().
segvn_fault() kemudian memanggil segvn_faultpage().
segvn_faultpage() memanggil lapisan HAT(Hardware Address Translation) untuk mengisipage table entry(s) (PTE)s dari lokasimemori tadi.
Sampai disini, alamat memori virtual yangmenyebabkan kegagalan halaman memorisekarang sudah dipetakan kembali denganlokasi fisik memori yang benar. Ketikapagefault() kembali, instruksi-instruksi yangsemula menyebabkan kegagalan halaman memoriakan dijalankan ulang dan seharusnya akandiselesaikan dengan benar.
4.Memanfaatkan mdb untuk mengamati struktur datakernel dan menentukan lokasi memori fisik yangberhubungan dengan terjadinya kegagalan halamanmemori di memori virtual:a.Bukan jendela terminal
b.Hitung banyaknya segmen yang digunakan olehmozilla menggunakan perintah pmap sepertiberikut ini:
# pmap -x ‘pgrep mozilla-bin‘ | wc368 2730 23105#
Keluarannya memperlihatkan terdapat 368 segmen.
Catatan – Dari pencarian terhadap segmen yangmengandung kegagalan alamat memori ditemukansegmen-segmen yang benar setelah 8 segmen.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
161
Pengujian Memori Virtual dengan DTrace dan MDB
Perhatikan panggilan ke as_segcompar dari keluaran DTracediatas. Terbukti, penggunaan struktur AVL dapatmempersingkat pencarian!
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
162
Pengujian Memori Virtual dengan DTrace dan MDB
c.Gunakan mdb untuk menemukan lokasi segmendengan fault address.
Catatan – Jika diinginkan untuk menyimpan setiapaktivitas didalam mdb, gunakan perintah: ::log/tmp/logfile diikuti oleh perintah !vi /tmp/logfileuntuk memulai menyimpannya. Jika tidak, jalankanjalankan saja mdb didalam penyangga editor.
# mdb -kLoading modules: [ unix krtld genunix specfs dtraceufs ip sctp usba random fctl s1394nca lofs crypto nfs audiosup sppp cpc fcip ptm ipc ]
> ::ps !grep mozilla-bin <-- temukan proses mozilla-binR 933 919 887 885 100 0x42014000 ffffffff81d6a040 mozilla-bin
> ffffffff81d6a040::print proc_t p_as | ::walk seg | ::printstruct seg
<-- Beberapa informasi keluaran dihilangkan … -->
{s_base = 0xfb800000 <-- segment yang
dicari, alamat yang gagal
(fb985ea2)s_size = 0x561000 <-- lebih besar/sama
dengan terhadap base dan and <
base+sizes_szc = 0s_flags = 0s_as = 0xffffffff828b61d0s_tree = {avl_child = [ 0xffffffff82fa7920, 0xffffffff82fa7c80 ]avl_pcb = 0xffffffff82fa796d
}s_ops = segvn_ops
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
163
Pengujian Memori Virtual dengan DTrace dan MDB
s_data = 0xffffffff82d85070}
<-- dan banyak informasi keluaran dihilangkan lagi -->
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
164
Pengujian Memori Virtual dengan DTrace dan MDB
> ffffffff82d85070::print segvn_data_t <-- berasal dari s_data
{
lock = {_ opaque = [ 0 ]
}segp_slock = {
_ opaque = [ 0 ]}pageprot = 0x1prot = 0xdmaxprot = 0xftype = 0x2offset = 0vp = 0xffffffff82f9e480 <-- menunjuk ke
sebuah vnode_tanon_index = 0amp = 0 <-- kita akanmelihatnya lagi
kemudian di areaanonymous
vpage = 0xffffffff82552000cred = 0xffffffff81f95018swresv = 0advice = 0pageadvice = 0x1flags = 0x490softlockcnt = 0policy_info = {mem_policy = 0x1mem_reserved = 0}
}
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
165
Pengujian Memori Virtual dengan DTrace dan MDB
> ffffffff82f9e480::print vnode_t v_pathv_path = 0xffffffff82f71090"/usr/sfw/lib/mozilla/components/libgklayout.so"
> fb985ea2-fb800000=K <-- alamat didalam segmen185ea2 <-- nilai pembulatannyaadalah
185000 (ukuran page 4k)
> ffffffff82f9e480::walk page !wc <-- menelusuri daftarpage
pada vnode_t1236 1236 21012 <-- 1236 halamanmemori, (tidak
perlu semuanyabenar)
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
166
Pengujian Memori Virtual dengan DTrace dan MDB
> ffffffff82f9e480::walk page | ::print page_t <-- menyusuridaftar pglist pada vnode
<-- banyak informasi keluaran dihilangkan -->
{p_offset = 0x185000 <-- disini halaman memori yang
bersesuaiannyap_vnode = 0xffffffff82f9e480p_selock = 0p_selockpad = 0p_hash = 0xfffffffffae21c00p_vpnext = 0xfffffffffaca9760p_vpprev = 0xfffffffffb3467f8p_next = 0xfffffffffad8f800p_prev = 0xfffffffffad8f800p_lckcnt = 0p_cowcnt = 0p_cv = {
opaque = 0}p_io_cv = {
opaque = 0}
p_iolock_state = 0p_szc = 0p_fsdata = 0p_state = 0p_nrm = 0x2p_embed = 0x1p_index = 0p_toxic = 0p_mapping = 0xffffffff82d265f0p_pagenum = 0xbd62 <-- nomor frame
halaman dari sebuahhalaman memori
p_share = 0p_sharepad = 0p_msresv_1 = 0p_mlentry = 0x185p_msresv_2 = 0
}
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
167
Pengujian Memori Virtual dengan DTrace dan MDB
<-- banyak informasi keluaran dihilangkan -->
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
168
Pengujian Memori Virtual dengan DTrace dan MDB
> bd62*1000=K <-- perkalian antara nomorframe halaman
dengan ukuran halaman (hex)bd62000 <-- disini adalah alamat fisikdari
h alaman yang bersangkutan
> bd62000+ea2,10/K <-- menampilkan nilai 16 64-bithex
di alamat fisik0xbd62ea2: 2ccec81ec8b55 e8575653f0e48300 32c3815b00000000
5d89d46589003ea7 840ff6850c758be0 e445c7000007df1216e8000000 dbe850e4458d5650 7d830cc483ffeeea791840f00e4 c085e8458904468b 500c498b088b24748b17eb04c483d1ff e8458de05d8bd465c483ffeeeac8e850458b0000074ce904
> bd62000+ea2,10/ai <-- data terlihat sepertikode,
tampilkan sebagai kode0xbd62ea2:0xbd62ea2: pushq %rbp0xbd62ea3: movl %esp,%ebp0xbd62ea5: subl $0x2cc,%esp0xbd62eab: andl $0xfffffff0,%esp0xbd62eae: pushq %rbx0xbd62eaf: pushq %rsi0xbd62eb0: pushq %rdi0xbd62eb1: call +0x5 <0xbd62eb6>0xbd62eb6: popq %rbx0xbd62eb7: addl $0x3ea732,%ebx0xbd62ebd: movl %esp,-0x2c(%rbp)0xbd62ec0: movl %ebx,-0x20(%rbp)0xbd62ec3: movl 0xc(%rbp),%esi0xbd62ec6: testl %esi,%esi0xbd62ec8: je +0x7e5 <0xbd636ad>0xbd62ece: movl $0x0,-0x1c(%rbp)
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
169
Pengujian Memori Virtual dengan DTrace dan MDB
> ffffffff81d6a040::context <-- merubah kontext dari kernel ke mozilla-bin
kontext debugger ditentukan
menjadi proc ffffffff81d6a040,alamat proses
> fb985ea2,10/ai <-- dan tampilkan isi dari alamat virtual yang
gagal0xfb985ea2:0xfb985ea2: pushq %rbp <-- sepertinya sesuai0xfb985ea3: movl %esp,%ebp0xfb985ea5: subl $0x2cc,%esp0xfb985eab: andl $0xfffffff0,%esp0xfb985eae: pushq %rbx0xfb985eaf: pushq %rsi0xfb985eb0: pushq % rdi0xfb985eb1: call +0x5 <0xfb985eb6>0xfb985eb6: popq %rbx0xfb985eb7: addl $0x3ea732,%ebx0xfb985ebd: movl %esp,-0x2c(%rbp)0xfb985ec0: movl %ebx,-0x20(%rbp)0xfb985ec3: movl 0xc(%rbp),%esi0xfb985ec6: testl %esi,%esi0xfb985ec8: je +0x7e5 <0xfb9866ad>0xfb985ece: movl $0x0,-0x1c(%rbp)
> 0::contextdebugger context set to kernel
> ffffffff81d6a040::print proc_t p_as <-- dapatkan sebagai for mozilla-bin
p_as = 0xffffffff828b61d0
> fb985ea2::vtop -a ffffffff828b61d0 <-- periksa yang telah kita lakukan
virtual fb985ea2 mapped to physical bd62ea2 <--alamat fisk
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
170
Pengujian Memori Virtual dengan DTrace dan MDB
sesuai
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
171
Pengujian Memori Virtual dengan DTrace dan MDB
Begitu segmen yang mengalami kegagalan ditemukan,isi struktur data segvn_data langsung ditampilkan.Didalam segmen ini, sebuah vnode_t memetakan datasegmennya. Dilanjutkan dengan pencarian lokasihalaman memori yang berhubungan dengan alamatdidalam segmen tersebut.
Begitu lokasi page_t ditemukan, sebuah nomor framehalaman diperoleh. Kemudian nomor page framedikonversikan menjadi sebuah alamat fisik diikutidengan pengujian beberapa data di alamat fisiktersebut. Berikutnya mengeluarkan data inisebagai kode. Terakhir melakukan pengecekanterhadap alamat fisik dengan perintah mdb bernamavtop (virtual-to-physical).
d.Keuntungan tambahan: dengan menyusuri tablepage dari suatu proses dapat dilihat bagaimanasebuah alamat virtual diterjemahkan ke alamatfisiknya.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
172
Men-debug Program PenggerakPerangkat Dengan DTrace
Tujuan dari modul ini adalah untuk mempelajaribagaimana menggunakan DTrace untuk men-debug proyekpengembangan program penggerak perangkat tertentudengan menggunakan sebuah studi kasus.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
1 M O D U L
Tujuan
173
Membuat Program Penggerak smbfs dari Linux ke Solaris OS
Memindahkan Program Penggerak smbfsDari Linux Ke Solaris OS
Studi kasus ini memfokuskan pada pemakaian secaraoptimal kemampuan DTrace unutk membantupengembangan program penggerak perangkat.
Jauh sebelum ada DTrace, untuk men-debug programpenggerak perangkat seorang pengembang menggunakanpanggilan fungsi seperti cmn_err() yang akan me-loginformasi diagnosa ke file /var/adm/messages.
Proses yang merepotkan ini bersifat spekulatif,memerlukan kompilasi ulang dan reboot sistem untukmenemukan kesalahan kode pemograman sebuahperangkat lunak. Pengembang dengan bakat bahasaassembler-nya dapat menggunakan adb dan membuatmodul mdb yang diperlukan dalam bahasa C untukmendiagnosa kesalahan perangkat lunak. Namun,pendekatan lama untuk pengembangan dan men-debugkernel seperti ini menghabiskan waktu yang cukuplama.
DTrace menyediakan sebuah cara diagnosa yangpraktis. Daripada melakukan penulusuran file/var/adm/messages atau informasi keluaran perintahtruss, DTrace dapat digunakan untuk menangkapinformasi hanya untuk kejadian tertentu yang ingindiamati oleh pengembang. Seberapa besar manfaatyang bisa diperoleh dari penggunaan DTrace bisadibuktikan melalui beberapa contoh yang sederhanaberikut.
Program penggerak yang digunakan sebagai materistudi kasus dalam modul ini adalah programpenggerak smbfs yang telah dibuat berdasarkan modelprogram penggerak nfs milik Sun. Diasumsikan programpenggerak telah berhasil dikompilasi, langkahberikutnya adalah melakukan pengujian apakahprogram penggerak tersebut bisa dimuat dan
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
174
Membuat Program Penggerak smbfs dari Linux ke Solaris OS
dibongkar-muat secara benar. Hal pertama yang harusdilakukan adalah menyalin program penggeraktersebut ke /usr/kernel/fs dan cobalah memuatnyasecara manual dengan perintah modload:
# modload /usr/kernel/fs/smbfscan’t load module: Out of memory or no room in system tables
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
175
Membuat Program Penggerak smbfs dari Linux ke Solaris OS
Dan di dalam file /var/adm/messages terdapat informasi:
genunix: [ID 104096 kern.warning] WARNING: system call missingfrom bind file
Setelah pencarian informasi lebih lanjut dari pesankesalahan “system call missing”, disimpulkan bahwapesan kesalahan ini muncul karena fungsimod_getsysent() didalam file modconf.c gagal memanggilfungsi mod_getsysnum.
Daripada secara manual mengikuti alur program darifungsi mod_getsysnum() dari satu file kode pemogramanke file kode pemograman yang lain, skrip DTraceyang sederhana berikut ini digunakan untukmengaktifkan semua informasi dan kejadian balikdari penyedia fbt (Function Boundary Tracing) setiapkali mod_getsynum() dipanggil.
#!/usr/sbin/dtrace -s#pragma D option flowindent fbt::mod_getsysnum:entry/execname == "modload"/{self->follow = 1;}fbt::mod_getsysnum:return{self->follow = 0;trace(arg1);}fbt:::entry/self->follow/{}fbt:::return/self->follow/{trace(arg1);}
Catatan – trace(arg1) menampilkan nilai balik darisebuah fungsi tertentu.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
176
Membuat Program Penggerak smbfs dari Linux ke Solaris OS
Dengan mengeksekusi skrip ini dan menjalankanperintah modload di jendela yang lain diperolehkeluaran sebagai berikut:
# ./mod_getsysnum.ddtrace: script ’./mod_getsysnum.d’ matched 35750 probesCPU FUNCTION0 -> mod_getsysnum0 -> find_mbind0 -> nm_hash0 <- nm_hash 410 -> strcmp0 <- strcmp 42949672950 -> strcmp0 <- strcmp 70 <- find_mbind 00 <- mod_getsysnum 4294967295 Dengan melihat nilai balik fungsi find_mbind() yaitu'0' atau nm_hash() yaitu '41' mengarahkan kita padasumber masalahnya. Nilai balik 0 dari fungsifind_mbind() mengindikasikan adanya status kesalahan.
Dengan melihat kode pemograman fungsi find_mbind()didalam file /usr/src/uts/common/os/modsubr.c, terungkapbahwa fungsi tersebut melakukan pencarian stringchar dalam sebuah tabel hash.
Berikutnya DTrace dimanfaatkan untuk menampilkanisi string yang dicari dan isi tabel hash-nya.
Agar dapat menampilkan isi dari string yang dicaritersebut ditambahkan pernyataan strcmp() kedalamskrip mod_getsysnum.d yang terdahulu:
fbt::strcmp:entry{printf("name:%s, hash:%s", stringof(arg0),stringof(arg1));}
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
177
Membuat Program Penggerak smbfs dari Linux ke Solaris OS
Berikut adalah hasil keluarannya setelah dicobalagi untuk memuat program penggerak smbfs:
# ./mod_getsysnum.ddtrace: script ’./mod_getsysnum.d’ matched 35751 probesCPU FUNCTION0 -> mod_getsysnum0 -> find_mbind0 -> nm_hash0 <- nm_hash 410 -> strcmp0 | strcmp:entry name:smbfs,hash:timer_getoverrun0 <- strcmp 42949672950 -> strcmp0 | strcmp:entry name:smbfs,hash:lwp_sema_post0 <- strcmp 70 <- find_mbind 00 <- mod_getsysnum 4294967295
Jelas terlihat bahwa string yang dicari dalam tabelhash adalah smbfs dan string ini tidak ada dalamtabel. Bagaimana caranya memasukan string smbfs inikedalam tabel hash?
Kembali lagi ke fungsi find_mbind() untuk melanjutkanpengamatan dalam kode pemogramannya, ditemukansebuah variabel bername sb_hashtab milik tabel hashditeruskan ke fungsi nm_hash() yang juga mengalamikegagalan. Variabel sb_hashtab ternyatadiinisialisasi dengan sebuah panggilan terhadapfungsi read_binding_file() dimana fungsi ini memilikiargumen berupa sebuah file konfigurasi, tabel hash-nya sendiri dan sebuah pointer fungsi.
Berikutnya terungkap bahwa isi konfigurasi fileyang didefinisikan itu berasal dari file/etc/name_to_sysnum di file /usr/src/uts/common/os/modctl.c.Dari sini dapat disimpulkan bahwa kegagalan memuatprogram penggerak tersebut disebabkan karenakelalaian untuk menambahkan konfigurasi programpenggerak baru di dalam file /etc/name_to_sysnum.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
178
Membuat Program Penggerak smbfs dari Linux ke Solaris OS
Berikutnya tambahkan isian baru di file/etc/name_to_sysnum seperti berikut ini dan kemudianlakukan reboot.
’smbfs 177’
Catatan - Fungsi read_binding_file() hanya membacasekali saja file konfigurasi tersebut pada saatboot.
Setelah proses reboot selesai program penggeraksmbfs berhasil dimuatkan.
# modload /usr/kernel/fs/smbfs
Periksa lagi apakah program penggerak tersebuttelah dimuat dengan perintah modinfo:
# modinfo | grep smbfs160 feb21a58 351ac 177 1 smbfs (SMBFS syscall,client,comm)160 feb21a58 351ac 24 1 smbfs (network filesystem)160 feb21a58 351ac 25 1 smbfs (network filesystem version 2)160 feb21a58 351ac 26 1 smbfs (network filesystem version 3)
Catatan – Diingatkan kembali bahwa programpenggerak ini dibuat dengan meniru model programpenggerak nfs, ini menjelaskan mengapa keluarannyamenjadi seperti diatas.
Lanjutkan, dengan mencoba untuk membongkat-muatmodul tersebut:
# modunload -i 160can’t unload the module: Device busy
Nampaknya kesalahan ini disebabkan oleh adanyanilai balik errno EBUSY. Pengamatan menjadi lebihmudah karena program penggerak smbfs adalah sebuahmodul yang telah termuat sehingga semua fungsismbfs dapat diakses:
# dtrace -l fbt:smbfs:: | wc -l1002
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
179
Membuat Program Penggerak smbfs dari Linux ke Solaris OS
Ini luar biasa! Tanpa menggunakan kode pemogramankhusus sebanyak 1002 fungsi dan kejadian balikdalam sebuah program penggerak dapat diakses.Dengan memanfaatkan akses fungsi sebanyak 1002 inipekerjaan men-debug program penggerak dapatdilakukan tanpa memerlukan versi 'kodeterinstrumentasi' khusus!
Dengan menggunakan skrip DTrace sederhana berikutini, pengamatan terhadap semua panggilan smbfsketika perintah modunload dijalankan dapat dilakukan:
#!/usr/sbin/dtrace -s#pragma D option flowindentfbt:smbfs::entry{}fbt:smbfs::return{trace(arg1);}
Nampaknya kode-kode smbfs tidak dapat diakses olehmodunload. Berikutnya, gunakan skrip DTrace berikutini untuk pengamatan terhadap modunload:
#!/usr/sbin/dtrace -s#pragma D option flowindentfbt::modunload:entry{self->follow = 1;trace(execname);trace(arg0);}fbt::modunload:return{self->follow = 0;trace(arg1);}fbt:::entry/self->follow/{}fbt:::return/self->follow/
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
180
Membuat Program Penggerak smbfs dari Linux ke Solaris OS
{trace(arg1);}
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
181
Membuat Program Penggerak smbfs dari Linux ke Solaris OS
Keluaran skrip ini adalah sebagai berikut:
# ./modunload.ddtrace: script ’./modunload.d’ matched 36695 probesCPU FUNCTION0 -> modunload modunload 1600 | modunload:entry0 -> mod_hold_by_id0 -> mod_circdep0 <- mod_circdep 00 -> mod_hold_by_modctl0 <- mod_hold_by_modctl 00 <- mod_hold_by_id 36025666480 -> moduninstall0 <- moduninstall 160 -> mod_release_mod0 -> mod_release0 <- mod_release 36025666480 <- mod_release_mod 36025666480 <- modunload 16
Perhatikan bahwa nilai balik EBUSY sebesar '16' iniberasal dari moduninstall. Dengan melihat sumber kodepemograman untuk moduninstall ditemukan bahwamoduninstall memberikan nilai balik EBUSY di beberapalokasi. Beberapa kemungkinan lokasi yang adaadalah:
1. if (mp->mod_prim || mp->mod_ref || mp->mod_nenabled != 0)return (EBUSY);2. if ( detach_driver(mp->mod_modname) != 0 ) return (EBUSY);3. if ( kobj_lookup(mp->mod_mp, "_fini") == NULL )4. A failed call to smbfs _fini() routine
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
182
Membuat Program Penggerak smbfs dari Linux ke Solaris OS
Akses langsung ke semua kemungkinan lokasi initidak dapat dilakukan, tetapi pendekatan terhadaplokasi-lokasi ini dapat dilakukan dengan sebuahproses pengeliminasian. Dengan skrip berikut inidapat ditampilkan isi dari berbagai struktur dannilai balik didalam moduninstall:
#!/usr/sbin/dtrace -s#pragma D option flowindentfbt::moduninstall:entry{self->follow = 1;printf("mod_prim:%d\n", ((struct modctl *)arg0)->mod_prim);printf("mod_ref:%d\n",((struct modctl *)arg0)->mod_ref);printf("mod_nenabled:%d\n",((struct modctl *)arg0)->mod_nenabled);printf("mod_loadflags:%d\n",((struct modctl *)arg0)->mod_loadflags);}fbt::moduninstall:return{self->follow = 0;trace(arg1);}fbt::kobj_lookup:entry/self->follow/{}fbt::kobj_lookup:return/self->follow/{trace(arg1);}fbt::detach_driver:entry/self->follow/{}fbt::detach_driver:return/self->follow/{trace(arg1);}
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
183
Membuat Program Penggerak smbfs dari Linux ke Solaris OS
Skrip ini menghasilkan keluaran seperti berikutini:
# ./moduninstall.ddtrace: script ’./moduninstall.d’ matched 6 probesCPU FUNCTION0 -> moduninstallmod_prim:0mod_ref:0 mod_nenabled:0mod_loadflags:10 -> detach_driver0 <- detach_driver 00 -> kobj_lookup0 <- kobj_lookup 42731034560 <- moduninstall 16
Dengan membandingkan keluaran ini terhadap kodepemogramannya diperoleh fakta bahwa kegagalantersebut bukan disebabkan oleh nilai struktur mpataupun nilai balik yang berasal dari detach_driver()milik kobj_lookup().
Akibatnya, dengan proses pengeliminasian, harus adastatus tertentu dikembalikan melalui pangggilanstatus = (*func)(); dimana panggilan ini berikutnyaakan memanggil rutin smbfs _fini(). Berikut ini adalahisi dari rutin smbfs _fini():
int _fini(void){/* don’t allow module to be unloaded */return (EBUSY);}
Pengubahan nilai balik menjadi ‘0’ danmengkompilasi ulang sumber kode pemogramanany akanmenghasilkan sebuah program penggerak yang dapatdimuatkan dan dibongkar-muatkan secara dinamis,sehingga secara keseluruhan tujuan latihan initelah tercapai. Dalam contoh-contoh ini secarakhusus banyak digunakan penyedia Function BoundaryTracing. Dengan catatan bahwa fbt hanyalah salah
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
184
Membuat Program Penggerak smbfs dari Linux ke Solaris OS
satu dari sekian banyak penyedia DTrace.
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
185
Sumber Bacaan TambahanOpenSolaris
Untuk mendapat informasi lebih lanjut, dukungan dantraining manfaatkan situs-situs berikut ini:
Dokumentasi Komunitas —http://opensolaris.org/os/community/documentation
Dokumentasi Sun —http://www.sun.com/documentation
Dukungan Sun — http://www.sun.com/support
Pelatihan Sun — Sun menawarkan berbagai pelatihanSolaris profesional dengan cakupan yang lengkapdan pilihan sertifikasi untuk membantu andamengaplikasi platform yang bertenaga ini demikesuksekan yang lebih besar kegiatan anda. Untukmendapat informasi lebih lanjut tentang pelatihanSolaris, kunjungi situs ini:
http://www.sun.com/training/catalog/operating_systems/index.xml
Pengantar Sistem Operasi: Sebuah Pendekatan Praktisdengan Menggunakan Proyek OpenSolaris – Agustus 2007
A AA P P E N D I XA
186