From: Tunca (att@yimpas.net.tr)
Date: Sat 05 May 2001 - 00:07:23 EEST
Merhaba,
KHG'yi okurken bazı şeyleri çözemedim ve bu konuda sizlere danışmak istedim.
Yerini de söyleyim khg de basics.html'de yazıyor.
KHG' de linux ta uygulanan sleep wakeup sistemi ile ilgili bu fonksyonu
vermişler.
------------------------------
static inline void __sleep_on(struct wait_queue **p, int state){
unsigned long flags;
struct wait_queue wait = { current, NULL };
if (!p)
return;
if (current == task[0])
panic("task[0] trying to sleep");
current->state = state;
add_wait_queue(p, &wait);
save_flags(flags);
sti();
schedule();
remove_wait_queue(p, &wait);
restore_flags(flags);
}
------------------------------
Benim anlayamadığım kısıma gelince.
Aşagıda verdilen __sleep_on fonksyonunda.
add_wait_queue() fonksyonunu çağırdıktan sonra
schedule() ile başka bir process'i çalışmaya aldığını söylüyor.
Ve sonra aynı process'i nedense wait queue den kaldırıyor.
Neden process'i wait queue'den kaldırıyor. benim düşünceme göre o
process bir sinyal ya da interrupt geldiğinde wait queden
kaldırılması gerekiyor.
Not: "current" değişkeni sadece scheduler tarafından değiştirlen, o anda
çalışan process'i gösteren global bir değişkenmiş. Fakta "tasks[0]" ile neyi
ifade ettiği hakkından bir şey görmedim.
Yardımlarınız için şimdiden teşekkürler
Saygılar.
A. Tunca TUNÇ
Listeden cikmak icin:
unsub linux
mesajini listeci@bilkent.edu.tr adresine gonderiniz.
Lutfen Listeci icin MIME / HTML / Turkce Aksan kullanmayin.
Listeci arayuzu: http://listweb.bilkent.edu.tr/yardim/bilkent/linux.html
Liste arsivinin adresi: http://listweb.bilkent.edu.tr/