Hi, After reading the MAN page and source codes for KSE, I find some parts contradicting. Maybe the MAN page is out-dated. But I want to confirm this. First confusion: In KSE MAN: ---------------------------- ... To become multi-threaded, a process must first invoke kse_create(). The kse_create() system call creates a new KSE (except for the very first invocation; see below). ... ---------------------------- But in src/sys/sys/kern_thread.c: ---------------------------- while (newkg->kg_kses < ncpus) { newke = kse_alloc(); bzero(&newke->ke_startzero, RANGEOF(struct kse, ke_startzero, ke_endzero)); #if 0 mtx_lock_spin(&sched_lock); bcopy(&ke->ke_startcopy, &newke->ke_startcopy, RANGEOF(struct kse, ke_startcopy, ke_endcopy)); mtx_unlock_spin(&sched_lock); #endif mtx_lock_spin(&sched_lock); kse_link(newke, newkg); sched_fork_kse(td->td_kse, newke); /* Add engine */ kse_reassign(newke); mtx_unlock_spin(&sched_lock); } -------------------------- So, apparently, with one invokation of kse_create(), new KSEs are created so that the number of total KSEs equals the number CPUs. Second confusion: In KSE MAN: ----------- as a special case, the first call to kse_create() by this initial thread with newgroup equal to zero does not create a new KSE; instead, it simply associates the current KSE with the supplied KSE mailbox, and no immedi- ate upcall results. However, an upcall will be triggered the next time the thread blocks and the required conditions are met. ----------- In the source codes for kse_create(), I cannot find the corresponding lines. What am I missing here? Thanks so much in advance! -- BinReceived on Mon Mar 08 2004 - 16:26:45 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:37:46 UTC