On Thursday 06 March 2008 08:40:10 am Andriy Gapon wrote: > on 06/03/2008 14:55 John Baldwin said the following: > > On Monday 18 February 2008 10:25:13 am Andriy Gapon wrote: > >> I see that sched_4bsd has a NOP callout with a purpose of forcing a > >> context switch (via softclock), so that something like a preemption > >> could happen (e.g. for threads in a tight calculation loop). > >> What serves the similar purpose for sched_ule? > >> Or, how sched_ule deals with the issue without needing softclock's help? > > > > It's gone in newer versions of 4BSD in HEAD actually. ULE does it by > > checking in sched_clock() to see if the current thread has used up its > > quantum. If so it sets TDF_NEEDRESCHED. > > Thank you. But where/when does actual thread switch happens? > E.g. I have two userland processes that do something like "while(1);", > what is the event that can switch from one to the other?
TDF_NEEDRESCHED is checked on return to userland from interrupts, traps, and system calls. The clock interrupt that sets TDF_NEEDRESCHED will check for it on the way back to userland and invoke ast() (sys/kern/subr_trap.c) which will end up forcing a context switch. -- John Baldwin _______________________________________________ freebsd-hackers@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "[EMAIL PROTECTED]"