Hi,
durung_lulus wrote:
memang sepertinya ada hubungan dengan time slice dari OS-nya, dan sayangnya saya ngga tahu cara setting timeslice ini. Kebetulan saya make freebsd 5.1.
Sebenarnya permasalahan saya seperti ini, saya membuat 2 buah program.
program pertama adalah sniffer, yang selalu menyimpan packet yang datang dari eth kedatabase/file/memory. Dan process ini harus meminimalisasi packet loss, karena akan sangat berpengaruh pada program yang kedua.
Program yang kedua akan berjalan, jika sebuah koneksi telah berakhir dan melakukan analisa koneksi yang berakhir tersebut. Berhubung pada tahap ini processnya cukup banyak perhitungan matematis, maka jika menggunakan loop program bagian pertama akan ketinggalan dalam menangkap paket, dan dapat membuat program kedua salah dalam analisa.
Mungkin ada masukan gimana enaknya metode untuk invoke/signalling program ke-2?
Anda perlu metode sinkronisasi "Producer/Consumer" atau dikenal juga sebagai "Bounded Buffer".
Intinya, anda pake semacam buffer, lalu buffer tersebut di sinkronisasi. Program pertama sniff lalu datanya disimpan di buffer. Program kedua ngebaca dari buffer tersebut. Kalo buffer lagi kosong - program no. 2 di-block (berhenti) Kalo buffer ada isisnya - program no. 2 disignal utk memprosess Kalo buffer-nya penuh - program no. 1 di-block (mungkin dalam kasus anda, sniffernya berhenti sniff dulu).
Utk thread, anda bisa lihat di: man pthread_cond_wait (dan kawan2) Kalo pake interprocess communication: man sem_wait (dan kawan2)
Salam, Andrew...
-- Berhenti langganan: [EMAIL PROTECTED] Arsip dan info: http://linux.or.id/milis.php
