[M3devel] System and User space Threads on LINUXLIBC6
Daniel Alejandro Benavides D.
dabenavidesd at yahoo.es
Fri Sep 28 15:08:35 CEST 2007
Hi:
With @M3noincremental just runs for while
1 2 3 1 2 3 10
5 4
and in this state its like a freezed program, it does
not respond to the keyboard input.
With @M3nogenerational or @M3nogc runs just fine.
What could be the problem? What else could be useful
to do?
Thanks
--- Antony Hosking <hosking at cs.purdue.edu> wrote:
> In the pthread implementation scheduling is
> performed by the OS so
> there is no way to say that any particular thread is
> *alive*, just
> that it is eligible to run should the scheduler
> choose to run it
> (indeed on an SMP more than one thread can run at a
> time). The user-
> thread implementation has its own scheduler, so it
> knows precisely
> which thread is running at any point in time.
>
> Are you saying there is a bug in the current pthread
> implementation?
> If so, then I'd like a more precise characterization
> that I can
> pursue and fix.
>
> On Sep 27, 2007, at 2:32 AM, Daniel Alejandro
> Benavides D. wrote:
>
> > Hi:
> > I am testing some examples of Chapter 16 of Laszlo
> > book, but the text shows me that now the NThreads
> > example where 10 threads are being showing the IDs
> (1,
> > 2, ... ,10).
> > This is tested on ubuntu Dapper OS, which still
> allows
> > the use of user space threads implementation.
> > Attached are some animated gif files that show in
> > (sorry have no web page available)
> > LINUXLIBC6.gif exmaple execution of Systems level
> > threads
> > LINUXLIBC62.gif example execution of User space
> > threads
> > LINUXLIBC62a.gif example execution of User space
> > threads after it ends
> >
> > Why the different versions of thread
> implementation
> > are different, in terms of what showthread shows
> that
> > all the threads are "locking" (9 almost all time)
> and
> > 2 (the first and third form left to right) are
> "alive"
> > in the Pthread case, and why in the user space
> threads
> > case they are "alive" green color almost always if
> > they are not running.
> > The worst thing is the behaviour of the appication
> is
> > very rare, It should be running until a key
> (enter) is
> > pressed down; It just runs some seconds in pthread
> > case.
> >
> > Besides why some many objects are shown in shownew
> > with the user space threaded program.
> >
> > The linking information of ldd output is below.
> > LINUXLIBC6 is current cvs compiled example
> > LINUXLIBC&2 compiled with user spce threads.
> >
> > on LINUXLIBC6 with user space threads, June 9th
> the
> > date It was compiled.
> >
> > danielb at danielb-desktop:~/code/m3/parallel$ ldd
> > LINUXLIBC62/NThreads
> > linux-gate.so.1 => (0xffffe000)
> > libm3local.so.5 =>
> >
>
/usr/local/cm3/pkg/m3local/LINUXLIBC6/libm3local.so.5
> > (0xb7faf000)
> > libm3.so.5 =>
> > /usr/local/cm3/pkg/libm3/LINUXLIBC6/libm3.so.5
> > (0xb7e90000)
> > libm3core.so.5 =>
> >
> /usr/local/cm3/pkg/m3core/LINUXLIBC6/libm3core.so.5
> > (0xb760f000)
> > libm3gcdefs.so.5 =>
> > /usr/local/cm3/lib/libm3gcdefs.so.5 (0xb760d000)
> > libm.so.6 => /lib/tls/i686/cmov/libm.so.6
> > (0xb75d1000)
> > libc.so.6 => /lib/tls/i686/cmov/libc.so.6
> > (0xb74a2000)
> > /lib/ld-linux.so.2 (0xb7fbd000)
> >
> >
> > on LINUXLIBC6 with system threads:
> >
> > danielb at danielb-desktop:~/code/m3/parallel$ ldd
> > LINUXLIBC6/NThreads
> > linux-gate.so.1 => (0xffffe000)
> > libm3local.so.5 =>
> >
>
/usr/local/cm3-cvs4/pkg/m3local/LINUXLIBC6/libm3local.so.5
> > (0xb7f51000)
> > libm3.so.5 =>
> >
> /usr/local/cm3-cvs4/pkg/libm3/LINUXLIBC6/libm3.so.5
> > (0xb7e1e000)
> > libm3core.so.5 =>
> >
>
/usr/local/cm3-cvs4/pkg/m3core/LINUXLIBC6/libm3core.so.5
> > (0xb7592000)
> > libpthread.so.0 =>
> > /lib/tls/i686/cmov/libpthread.so.0 (0xb7567000)
> > libm.so.6 => /lib/tls/i686/cmov/libm.so.6
> > (0xb7544000)
> > libc.so.6 => /lib/tls/i686/cmov/libc.so.6
> > (0xb7415000)
> > /lib/ld-linux.so.2 (0xb7f5f000)
> >
> >
> > the source code is this
> >
> > MODULE NThreads EXPORTS Main;
> > (*22.02.95. LB*)
> > (* Program starts "N" threads which output their
> ID
> > and terminate
> > if a key is pressed (on some systems you have
> to
> > press the return
> > key).
> > *)
> >
> > IMPORT Thread, SIO;
> > FROM Scheduler IMPORT Yield;
> >
> > CONST
> > N = 10;
> > TYPE
> > Threads = [1..N];
> > Closure = Thread.Closure OBJECT
> > id: Threads;
> > (*identifies thread*)
> > OVERRIDES
> > apply:= PrintId;
> > END; (*Closure*)
> >
> > PROCEDURE PrintId(cl: Closure): REFANY =
> > BEGIN
> > REPEAT
> > SIO.PutInt(cl.id);
> > IF cl.id = LAST(Threads) THEN SIO.Nl() END;
> > Yield();
> > (*yields to other threads*)
> > UNTIL SIO.Available();
> > RETURN NIL;
> > (*return value not used*)
> > END PrintId;
> >
> > PROCEDURE Fork() =
> > BEGIN
> > FOR i:= FIRST(Threads) TO LAST(Threads) - 1 DO
> > EVAL Thread.Fork(NEW(Closure, id:= i))
> > (*N-1 threads are generated*)
> > END;
> > EVAL PrintId(NEW(Closure, id:=
> LAST(Threads)));
> > (*N-th thread = main*)
> > END Fork;
> >
> > BEGIN
> > Fork();
> > (*start all threads*)
> > END NThreads.
> >
> >
> > Thanks
> >
> >
> >
> >
>
______________________________________________________________________
>
> > ______________
> > Sé un Mejor Amante del Cine
> > ¿Quieres saber cómo? ¡Deja que otras personas te
> ayuden!
> >
>
http://advision.webevents.yahoo.com/reto/entretenimiento.html
> > <LINUXLIBC6.gif>
> > <LINUXLIBC62.gif>
> > <LINUXLIBC62a.gif>
>
> Antony Hosking | Associate Professor
> Dept of Computer Sciences | Office: (765)
> 494-6001
> Purdue University | Mobile: (765)
> 427-5484
> 250 N. University Street |
> hosking at cs.purdue.edu
> West Lafayette, IN 47907-2066 |
> http://www.cs.purdue.edu/~hosking
> _--_|\
>
=== message truncated ===
____________________________________________________________________________________
Sé un Mejor Amante del Cine
¿Quieres saber cómo? ¡Deja que otras personas te ayuden!
http://advision.webevents.yahoo.com/reto/entretenimiento.html
More information about the M3devel
mailing list