KSE, libpthread & libthr: almost newbie question
Ruslan Ermilov
ru at FreeBSD.org
Fri Oct 27 09:50:36 UTC 2006
On Fri, Oct 27, 2006 at 10:56:21AM +0200, Ivan Voras wrote:
> Lev Serebryakov wrote:
> >Hello ,
> >
> > I've was sure, that both libpthread and libthr use KSE to make
> > multithreading. They use KSE in different ways: libpthread uses N:M
> > model and libthr uses 1:1 model, but bot use KSE to work.
> > How will be possible to use these libraries (read: multithreaded
> > programs) when KSE will be optional, on kernel without KSE?!
>
> Yes, isn't KSE by definition "that thing that is scheduled in the kernel"?
>
KSE == N:M threading
A 1:1 threading (libthr) is much simpler than N:M threading (libpthread),
and thus doesn't require KSE support in the kernel; see kse(2) manpage
for details. Without the KSE option in the kernel, all kse(2) syscalls
will return EOPNOTSUPP, and a lot of code becomes redundant.
: /*
: * Initialize global thread allocation resources.
: */
: void
: threadinit(void)
: {
:
: mtx_init(&tid_lock, "TID lock", NULL, MTX_DEF);
: tid_unrhdr = new_unrhdr(PID_MAX + 1, INT_MAX, &tid_lock);
:
: thread_zone = uma_zcreate("THREAD", sched_sizeof_thread(),
: thread_ctor, thread_dtor, thread_init, thread_fini,
: UMA_ALIGN_CACHE, 0);
: #ifdef KSE
: ksegrp_zone = uma_zcreate("KSEGRP", sched_sizeof_ksegrp(),
: ksegrp_ctor, NULL, NULL, NULL,
: UMA_ALIGN_CACHE, 0);
: kseinit(); /* set up kse specific stuff e.g. upcall zone*/
: #endif
: }
Cheers,
--
Ruslan Ermilov
ru at FreeBSD.org
FreeBSD committer
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 187 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-current/attachments/20061027/5d027848/attachment.pgp
More information about the freebsd-current
mailing list