Senin, 05 November 2007

2.4. Process Management

FreeBSD mendukung sebuah lingkungan multitasking. Setiap tasking atau thread dari eksekusi disebut proses. Susunan dari sebuah proses FreeBSD terdiri dari bagian level user, termasuk segala isi dari ruang pengalamatan dan run-time environment, dan bagian level kernel, dimana terdapat parameter - parameter penjadwalan, pengendalian sumber proses, dan informasi pengidentifikasian. Susunan tersebut termasuk segala sesuatu yang digunakan oleh kernel dalam memberikan servis untuk proses tsb. Si Pengguna dapat menciptakan berbagai proses, mengendalikan eksekusi berbagai proses, dan menerima notifikasi pada saat status eksekusi prose mengalami perubahan. Setiap proses diberikan sebuah nilai unik, dengan istilah "Proses Identifier" [ PID ]. Nilai ini dipergunakan oleh kernel untuk mengenali sebuah proses pada saat melaporkan status perubahan pada si Pengguna dan digunakan oleh suatu pengguna pada saat mereferensikan sebuah proses dalam sebuah sistem.

Kernel menciptakan sebuah proses dengan menduplikasikan susunan proses lain. Proses baru tersebut diistilahkan dengan "Child Process" dari turunan Parent Process. Susunan tersebut digandakan dalam penciptaan proses dengan menyertakan kedua-duanya: eksekusi proses pd tingkat user dan bagian proses sistem yang diatur oleh kernel. Komponen-komponen penting dari kernel akan dijabarkan pada BAB 4.

Perputaran proses tersebut digambarkan pada gambar 2.1. Sebuah proses mungkin menciptakan proses baru yang merupakan copy dari proses inti dengan menggunakan fungsi system-call yaitu fork. Pemanggilan fork tersebut mengembalikan sampai dua kali: pertama pada parent process, dimana nilai yang dikembalikan merupakan PID dari child process, dan kedua pada child process, dimana mengembalikan nilai 0. Hubungan antar parent-child menyebabkan terbentuknya sebuah struktur hirarki pada sekumpulan proses dalam sistem. Proses-proses baru tersebut berbagi resource proses asalnya [ parent process ], spt file-descriptor, status penanganan sinyal, dan susunan memori.

Gambar 2.1. Pengaturan Proses System-Call.


Walaupun ada saat-saat ketika proses baru adalah duplikasi dari parent, loading & eksekusi dari suatu program yang berbeda merupakan sesuatu yang lebih berguna dan unik. Sebuah proses dapat melapisi dirinya dengan memory image dari program lain, dengan memasukan pada proses baru menciptakan image sekumpulan parameter-parameter, menggunakan system call execve. Salah satu parameter adalah nama dari sebuah file yang isinya berada dalam format yang dikenali oleh sistem, baik file binary executable atau sebuah file yang menyebabkan eksekusi dari sebuah program intepreter untuk menterjemahkan isinya.

Sebuah proses mungkin berakhir dengan mengeksekusi sebuah system call - exit, dengan mengirimkan status exit - 8 bit kepada parent. Jika sebuah proses ingin berkomunikasi lebih dari pada satu informasi dengan parent-nya, ia harus: menyusun sebuah kanal komunikasi antar proses dg menggunakan baik "pipe" maupun "socket", atau menggunakan sebuah file penengah. Komunikasi antar proses dibahas secara luas pada BAB 11.

Sebuah proses dapat menghambat eksekusi hingga beberapa dr child-nya berakhir dengan menggunakan system-call "wait", yang mengembalikan PID dan status exit dari proses berakhirnya child. Sebuah proses dapat mengatur agar mendapat notifikasi sebuah sinyal pada saat sebuah child process berakhir secara tidak biasa. Dengan menggunakan fungsi wait dari system call, parent dapat mengambil informasi mengenai kejadian yang menyebabkan berakhirnya child process dan mengenai resource yang dipakai oleh proses selama berjalan. Sebuah proses dianggap "orphan" karena parent keluar sebelum proses tsb selesai, kemudian kernel mengatur status keluarnya child dimasukan kembali kepada sebuah proses sistem yang khusus ( lihat bagian 3.1 dan 14.5 ). Penjelasan mendetail bagaimana kernel menciptakan dan menghancurkan proses dibahas dalam BAB 5.

Proses-proses dijadwalkan untuk eksekusi menutur parameter prioritas proses. Dibawah standar penjadwalan pembagian waktu, prioritas ini diatur oleh sebuah algoritma penjadwalan kernel-based. User dapat berpengaruh terhadap penjadwalan sebuah proses dengan menetapkan sebuah parameter yang menitik beratkan prioritas penjadwalan secara keseluruhan tetapi tetap diharuskan untuk berbagi sumber CPU dasar menurut kebijakan penjadwalan kernel. Kernel akan menjalankan proses real-time dengan prioritas tertinggi untuk mengeluarkan semua proses-proses lainnya. jadi , proses-prose real-time tidak berkewajiban untuk berbagi dasar sumber CPU.

Signals

Sistem mendefinisikan sekumpulan sinyal yang mungkin dikirimkan pada sebuah proses. Sinyal-sinyal pada FreeBSD dipergakan setelah interrup-interrup hardware. Sebuah proses bisa menentukan sub-routine user-level menjadi sebuah "handler" yang mana sebuah sinyal harus dikirim. Pada saat sebuah sinyal digenerate, dia diblok dari kejadian berikutnya sementara hal tersebut tertangkap oleh handler. Menangkap sebuah sinyal melibatkan penyimpanan susunan proses yang sedang terjadi dan membangun sebuah hal baru yang menjalankan handler tersebut. Sinyal tersebut kemudian dikirim pada handler, yang dapat mengeluarkan proses maupun mengembalikan eksekusi proses (barangkali setelah menyusun sebuah variabel global). Jika handler tersebut kembali, sinyal dibuka kembali dan dapat diolah(dan ditamgkap) kembali.

Sebagai kemungkinan, sebuah proses mungkin menetapkan bahwa sebuah sinyal diabaikan atau merupakan aksi default, sebagaimana ditentukan oleh kernel, yang harus diterima. Aksi default dari sinyal tertentu adalah menghentikan proses. Penghentian ini mungkin disatukan dengan menciptakan sebuah file inti [core file] yang mengandung image memori yang sedang berjalan dari proses untuk digunakan dalam postmortem debugging.

Beberapa sinyal tidak dapat ditangkap dan diabaikan. Sinyal-sinyal ini termasuk SIGKILL, yang menghentikan proses-proses yang sedang berjalan, dan sinyal pengatur kerja SIGSTOP.

Sebuah proses bisa memilih untuk memiliki pengiriman sinyal-sinyal pada stack yang khusus sehingga hal tersebut manipulasi stack software yang handal memungkinkan. Contoh, coroutine pendukung bahasa perlu untuk memberikan sebuah stack terhadap setiap coroutine. Sistem run-time bahasa dapat mengalokasikan stack-stack tersebut dengan membagi stack tunggal yang diberikan oleh FreeBSD. Jika kernel tidak men-support stack sinyal yang terpisah, ruang yang dialokasikan untuk setiap coroutine harus diperluas dengan jumlah dari ruang yang diperlukan untuk menangkap sebuah sinyal.

Semua sinyal memiliki prioritas yang sama. Jika berkali-kali sinyal tertunda secara serempak, urutan dimana sinyal-sinyal dikirimkan pada sebuah proses diimplementasikan secara spesial. Pengendali sinyal dieksekusi dengan sinyal yang mengakibatkan penarikan mereka menjadi terhalang, tapi sinyal lainnya mungkin sedang berjalan. Mekanisme diberikan sehingga proses-proses tersebut dapat melindungi bagian-bagian kode yang kritis terhadap kejadian dari sinyal-sinyal tersebut.

Desain dan implementasi dari sinyal-sinyal dijabarkan pada bagian 4.7

Process Groups and Sessions

Proses-proses dikelompokan ke dalam group-group proses. Group-group proses digunakan untuk mengendalikan akses ke terminal-terminal dan memberi sebuah titik tengah penyebaran sinyal pada sekumpulan proses-prose yang berhubungan. Sebuah proses mewarisi group prosesnya dari parent process. Mekanisme diberikan kernel untuk mengijinkan sebuah proses untuk menggantikan group prosesnya atau group proses dari turunannya. Menciptakan sebuah proses baru adalah mudah; nilai dari sebuah group proses baru biasanya merupakan identifikasi proses dari proses yang diciptakan.

Group dari proses-proses dalam sebuah group proses terkadang The group of processes in a process group is sometimes dihubungkan sebagai sebuah job dan dimanipulasi oleh software sistem tingkat tinggi, spt shell. Sebuah hal yang umum yang tercipta dari shell adalah sebuah pipeline dari beberapa proses yang dihubungkan dengan pipe, seperti keluaran dari proses pertama adalah masukan dari proses kedua, keluaran proses kedua merupakan masukan bagi proses ketiga dst. Shell menciptakan sebuah job dengan mencabangkan sebuah proses untuk setiap tingkat dari pipeline, dan kemudian meletakan semua proses tersebut kedalam sebuah grup proses yang terpisah.

Sebuah proses user dapat mengirimkan sebuah sinyal ke setiap proses dalam sebuah group proses sebaik ke sebuah proses tunggal. Sebuah proses dalam sebuah group proses tertentu bisa menerima interupsi software, yang menyebabkan group tersebut untuk menunda atau menyelesaikan eksekusi, atau menjadi diinterupsi atau dihentikan.

Sebuah terminal (atau lebih umumnya sebuah emulasi software dari sebuah terminal disebut terminal pseudo) memiliki sebuah identifikasi group proses yang diberikan padanya. Identitas ini secara normal diset sbg pengenal sebuah group proses yang disatukan dengan terminal. Sebuah job-control shell menciptakan beberapa group proses yang disatukan dalam satu terminal yang sama; terminal tersebut merupakan terminal pengendali untuk setiap proses dalam group-group proses tsb. Sebuah proses mungkin membaca dari sebuah descriptor untuk terminal pengendalinya hanya jika identifikasi group proses terminal cocok dengan proses tsb. Jika identifikasi tidak cocok, proses akan diblok jika dia mencoba untuk membaca dari terminal. Dengan merubah pengenal group proses dari terminal, sebuah shell dapat memutuskan sebuah terminal diantara beberapa job yang berbeda. Penetapan ini disebut job control dan dijelaskan, dengan group-group proses dalam bagian 4.8.

Sebagaiman sekumpulan dari proses dapat dikumpulkan kedalam seuah group proses, sekumpulan group-group proses dikumpulkan kedalam sebuah session. Penggunaan utama dari session-session adalah untuk menciptakan sebuah lingkungan yang terisolasi untuk sebuah proses daemon dan child-nya, serta untuk mengumpulkan bersama sebuah shell login pengguna dan job-job yang dihasilkan oleh shell.

2.3. Servis - Servis Kernel

Batasan antara kode kernel dan kode level user dibatasi oleh proteksi dari hardware. Kernel beroperasi pd suatu alamat yang tidak dapat diakses oleh proses level user. Operasi-operasi yang terproteksi seperti pengawalan suatu proses I/O dan pemberhentian CPU hanya terdapat pada sisi kernel. Aplikasi-aplikas i hanya mengajukan pelayanan atau servis dari kernel melalui fungsi "System Call". System call dipakai agar kernel menjalankan operasi2 yang rumit, spt: menuliskan data kedalam storage kedua, dan operasi yang sederhana spt: mengembalikan nilai waktu saat sekarang. Semua system call tampak sinkron pada aplikasi-aplikasi. Aplikasi tidak berjalan sementara kernel melakukan action yang berhubungan dengan sebuah system call. Kernel menyelesaikan beberapa operasi yang menyatu dengan sebuah system call setelah hal tsb mengembalikan nilai. Sbg contoh: sebuah system call untuk fungsi penulisan akan meng-copy data untuk dituliskan dari proses level user kedalam buffer kernel sementara menunggu proses selesai, tetapi hal tsb biasanya kembali dari system-call sebelum buffering kernel dituliskan kedalam disk.

Sebuah system-call biasanya diimplementasikan sbg hardware-trap yang mengubah model eksekusi CPU dan pemetaan ruang pengalamatan yang sedang berjalan. Parameter-parameter disuplai oleh user pd system-call dicheck sah atau tidak oleh kernel sebelum dipakai. Pengecekan-pengecekan tersebut untuk memastikan integritas system tersebut. Semua parameter yang ditujukan ke kernel dicopy kedalam ruang alamat milik kernel untuk memastikan bahwa keabsahan semua parameter tidak berubah akibat suatu efek samping dari system-call. Hasil dari fungsi system-call dikembalikan oleh kernel, baik dalam registrasi hardware maupun dengan peng-copy-an pd alamat-alamat memori level user. Seperti parameter-parameter yang ditujukan kepada kernel, alamat-alamat digunakan untuk pengembalian hasil bahwa mereka merupakan bagian dari lingkup pengalamatan sebuah aplikasi. Jika kernel mengalami suatu error sementara sedang melakukan proses system-call, kernel akan mengembalikan sebuah kode error ke user. Untuk bahasa program C, kode error disimpan dalam variabel global: errno, dan fungsi yang mengeksekusi system-call akan mengembalikan nilai: -1.

Masing-masing: aplikasi-aplikasi user dan kernel berjalan secara bebas. FreeBSD tidak menyimpan blok-blok pengontrol I/O atau struktur data sistem operasi lain dalam lingkup alamat aplikasi. Setiap aplikasi level user diberikan lingkup alamat dimana dia berjalan. Kernel membuat hampir semua perubahan bagian, spt: menghentikan sementara suatu proses sementara yang lain sedang berjalan. menjadi tampak pd proses yang terlibat.

2.2. Organisasi Kernel

Pada bagian ini, dijabarkan pengelompokan kernel freeBSD dalam dua hal..

• Sebagai bodi statis software, dikategorikan dengan fungsi dalam module-module yang membentuk kernel.
• Kedinamisan operasional, dikategorikan menurut service yang yang akan diberikan kepada para user.

Bagian terbesar dari kernel adalah mewujudkan service sistem dimana aplikasi mengakses melalui apa yang dinamakan “system calls”. Dalam operating sistem FreeBSD, software ini disatukan menurut:

• Fasilitas dasar kernel: penanganan waktu dan jam sistem, manajemen descriptor, dan manajemen proses.

• Support untuk pengaturan memory: paging & swapping.

• Interface Sistem Generic: pengaturan I/O [ input/output ], dan operasi multiplexing pada descriptor-descriptor.

• Filesystem: files, directories, pathname translation, file locking, and I/O buffer management

• Terminal-handling support: the pseudo-terminal interface dan terminal line disciplines

• Fasilitas komunikasi antar proses: sockets

• Support untuk komunikasi jaringan: protokol-protokol komunikasi dan fasilitas jaringan seperti: routing.

Hampir semua software pd kategori ini adalah program machine-independent dan bisa disesuaikan pd arsitektur hardware yang berbeda.

Apsek-aspek machine-dependent dari kernel dipisahkan dari alur code utama. Pada dasarnya, tidak ada code dalam program machine-independent yang mengandung code yang memuat kondisi untuk arsitek tertentu. Pada saat untuk arsitektur [architecture-dependent] dibutuhkanm maka code dalam program “machine-independent “ akan memnggil fungsi architecture-dependent yang berlokasi dalam program “machine-dependent “. Software didalam program “machine-dependent “ :

• Start-up awal pada level hardware.

• Penanganan Trapping dan Faulting

• Manipulasi tingkat bawah [ h/w] untuk waktu operasional dari suatu proses.

• Konfigurasi dan pPengaturan awal dari perangkat-perangkat keras.

• Support pengaturan waktu untuk perangkat Input/Output.

Tabel 2.1 adalah ringkasan program machine-independent yang diterapkan pada kernel FreeBSD. Nilai pada kolom 2 adalah baris-baris Bahasa C source code, file-file header, dan Bahasa Mesin. Secara virtual semua program dalam kernel ditulis dalam bahasa C hanya sekitar 6% ditulis dalam bahasa mesin.

Tabel 2.1. Program Machine-independent di dalam kernel FreeBSD.

Kategori

Jumlah baris

Persentasi Kernel

headers

38,158

4.8%

initialization

1,663

0.2%

kernel facilities

53,805

6.7%

generic interfaces

22,191

2.8%

interprocess communication

10,019

1.3%

terminal handling

5,798

0.7%

virtual memory

24,714

3.1%

vnode management

22,764

2.9%

local filesystem

28,067

3.5%

miscellaneous filesystems (19)

58,753

7.4%

network filesystem

22,436

2.8%

network communication

46,570

5.8%

Internet V4 protocols

41,220

5.2%

Internet V6 protocols

45,527

5.7%

IPsec

17,956

2.2%

netgraph

74,338

9.3%

cryptographic support

7,515

0.9%

GEOM layer

11,563

1.4%

CAM layer

41,805

5.2%

ATA layer

14,192

1.8%

ISA bus

10,984

1.4%

PCI bus

72,366

9.1%

pccard bus

6,916

0.9%

Linux compatibility

10,474

1.3%

total machine independent

689,794

86.4%

Key: GEOM—geometry; CAM —Common Access Method; ATA—Advanced Technology Attachment; ISA—Industry Standard Architecture; PCI—Peripheral Component Interconnect.

Tabel 2.2. Program Machine-dependent untuk PC dalam kernel.

Category

Lines of Code

Percentage of Kernel

machine dependent headers

16,115

2.0%

ISA bus

50,882

6.4%

PCI bus

2,266

0.3%

virtual memory

3,118

0.4%

other machine dependent

26,708

3.3%

routines in assembly language

4,400

0.6%

Linux compatibility

4,857

0.6%

Total machine dependent

108,346

13.6%

Key: ISA—Industry Standard Architecture; PCI—Peripheral Component Interconnect.

Hanya sebagian kecil dari kernel diambil pengawalan sistem. Kode ini digunakan pada saat sistem melakukan “Bootstrapping” ke dalam operasional dan bertugas untuk menyusun lingkungan kernel hardware maupun software (pada Chapter 14). Beberapa sistem operasi (terutama yang dengan fisikal memori yang terbatas) mengabaikan atau menggantungkan program yang bertugas menjalankan fungsi-fungsi tersebut stelah program tersebut dijalankan. Kernel FreeBSD tidak mengambil kembali memori yang digunakan pada saat ‘startup' karena persentasi pemakaiannya hanya sedikit sekali sekitar 0.2 % dari sumber kernel yang terpakai. Proses kode startup tidak tampak pada satu tempat – tersebar secara menyeluruh.

2.1.Fasilitas dan Kernel FreeBSD

Kernel FreeBSD memiliki 4 fasilitas dasar: proses-proses, a filesystem, communications, dan system startup. Garis besar dari tiap 4 service dasar:

  1. Suatu proses dibentuk dr sebuah address space dg satu atau lebih threads control berjalan didalam proses tsb. Mekanis untuk pembentukan, pemberhentian dan kontrol proses lainnya dibahas berikutnya. System multiplexes memisahkan ruang-ruang virtual-address untuk tiap proses - management memory ini akan dibahas kemudian.

  2. User interface untuk filesystem dan devices adalah mirip - akan dibahas kemudian. Juga akan dibahas organisasi & manajemen dari devices dalam I/O subsystem. Filesystem mengadakan operasi-operasi untuk memanipulasi sekumpulan nama-nama file, yang diorganisasikan ke dalam bentuk hirarki directory .Filesystem harus menghimpun penyimpanan file-file dan direktori-direktori ini pada media fisikal seperti disk.

  3. Mekanisme Komunikasi pada sistem UNIX tradisional memasukan stream byte diantara proses-proses yang saling berhubungan, (lihat pd pipes, Bagian 11.1 ), dan notifikasi event pengecualian (lihat signals , Bagian 4.7 ). FreeBSD juga memiliki suatu fasilitas komunikasi antar proses yang umum. Fasilitas dijabarkan pd BAB 11 , menggunakan mekanisme akses yang membedakan dari pola-pola filesistem tersebut, tapi sekali suato koneksi diset, suatu proses dapat mengaksesnya lewat sebuah 'pipe'. Ada suatu kerangka kerja jaringan yang umum, hal tsb dijabarkan pd BAB 12 , hal tsb biasanya digunakan untuk landasan fasilitas IPC. BAB 13 menjabarkan implementasi jaringan khusus secara detail.

  4. Beberapa Sistem Operasi memiliki masalah operasional, spt bagaimana mereka mengawali pada saat mulai berjalan. Masalah startup dan operasional issues dijabarkan pd BAB 14 .

bagian 2.3 lewat bagian 2.14 memperkenalkan materi yang berkaitan dg BAB 3 lewat 14. Mendefinisikan point-point, menguji basic system calls, dan menggali sejarah pengembangan. Dan akhirnya kami memberikan alasan-alasan untuk keputusan-keputusan desain pokok.

Kernel

Kernel adalah bagian dari sistem yang berjalan dlm mode terlindungi [ protected mode ] dan menjembatani akses semua program user ke hardware (spt: CPU, keyboard, monitor, disks, network links] dan konstruksi-konstruksi d software [ spt: , filesystem, network protocols]. Kernel memberikan fasilitas sistem dasar; menciptakan dan mengatur proses-prose dan memberikan fungsi untuk mengakses fasilitas filesistem dan komunikasinya.Fungsi-fungsi tersebut, yang disebut pemanggil2 sistem [ system calls ], bagi proses-proses user nampak sebagai sub-bagian rutinitas pustaka [ library subroutines ] . hanya system calls interface dari proses-proses kpd fasilitas-fasilitas tersebut. Mekanisme lengkap dari system-call ada pd BAB 3 , sbg penjabaran bahwa beberapa mekanisme kernel tidak dijalankan sbg hasil langsung dr sebuah proses yang melakukan system call.

Sebuah kernel, pd sistem operasi tradisional, adalah suatu partikel kecil dari software yang memberikan fasilitas minimal yang diperlukan untuk implementasi tambahan service-service sistem operasi. Lewat banyaknya penelitian pada era 80-an, riset sistem operasi spt: Chorus [ Rozier et al., 1988 ], Mach [ Accetta et al., 1986 ], Tunis [ Ewens et al., 1985 ], dan V Kernel [ Cheriton, 1988 ]—mencoba u/ membuat pembagian fungsi ini ke dalam hal yang lebih dari sekedar suatu yang logik.Service-service spt: filesystems dan protokol-protokol networking diwujudkan sbg proses-proses aplikasi client dr inti kernel. Micro-kernels tersebut sebagian besar gagal karena proses transisi yang terlalu tinggi diantara proses-prose kernel tsb.

Kernel FreeBSD tidak dipartisi ke dalam banyak proses. Keputusan design dasar ini dibuat pd awal versi UNIX. Implementasi pertama oleh Ken Thompson, tidak memiliki pemetaan memori dan jadi dibuat tidak terdapat pembedaan antara use dan kernel space [ Ritchie, 1988 ]. Sebuah pesan melalui sistem sudah dapat diimplementasikan seaktual implementasi model kernel dan proses-proses user. Kernel monolitik dipilih karena kemudahan dan performance. Pada awalnya kernel hanya hal yg kecil; dg adanya penambahan fasilitas-fasilitas spt network kedalam kernel, makin menambah ukurannya, walaupun masih lebih kecil dari aplikasi-aplikasi yg berjalan diatasnya.

Para user biasanya berinteraksi dg sistem melalui intepreter bahasa perintah yang disebut "shell", atau via aplikasi tambahan. Program & perintah tersebut lebih dimplementasikan dg proses-proses dibandingkan sbg bagian dari kernel.

Bagian 2.3 dan 2.4 menjabarkan servis-servis yang ditawarkan oleh kernel FreeBSD dan memberi gambaran desain selanjutnya.