Thread IDs are just the Windows thread's ThreadID, so you can't learn
much about the memory allocation from just the calling thread's ID.  The
callstack is the most important thing to look at.

For the hello.exe sample, there are three threads at the time the "Hello
World" message is printed:
1)  The thread that ran clix.exe's main(), which runs the managed code
including the write to the console.

2)  The finalizer thread, which could run managed code.  It is blocked
in a WaitForSingleObject with the following callstack:
0:001> k
ChildEBP RetAddr
02affe1c 77f5c534 *SharedUserSystemCall+0xc
WARNING: Stack unwind information not available. Following frames may be
wrong.
02affe84 77e7ac21 ntdll!NtWaitForSingleObject+0xc
02affea8 7935e6e0 kernel32!WaitForSingleObject+0xf
02affeb8 7935f6cd sscoree!WaitForFinalizerEvent+0xe
02afff88 7978edd5 sscoree!GCHeap__FinalizerThreadStart+0x1d7
02afff9c 7978f331 rotor_pal!PAL_LocalFrame+0x24
02afffb4 77e7d33b rotor_pal!PAL_ThreadProc+0x2e
02afffec 00000000 kernel32!RegisterWaitForInputIdle+0x43

3)  The debugger thread, used for communicating with cordbg, which is
blocked in a WaitForMultipleObjects:
ChildEBP RetAddr
00a9fdec 77f5c524 *SharedUserSystemCall+0xc
WARNING: Stack unwind information not available. Following frames may be
wrong.
00a9fe8c 77e75faa ntdll!NtWaitForMultipleObjects+0xc
00a9fec0 794a4e95 kernel32!WaitForMultipleObjects+0x17
00a9ff68 794a5b1e sscoree!DebuggerRCThread__MainLoop+0x13c
00a9ff80 794a5b32 sscoree!DebuggerRCThread__ThreadProc+0x133
00a9ff88 7978edd5 sscoree!DebuggerRCThread__ThreadProcStatic+0x10
00a9ff9c 7978f331 rotor_pal!PAL_LocalFrame+0x24
00a9ffb4 77e7d33b rotor_pal!PAL_ThreadProc+0x2e
00a9ffec 00000000 kernel32!RegisterWaitForInputIdle+0x43


If you use NTSD or Windbg to debug your app, and you break in, try
running this command:  "!sos.Threads".  It uses sos.dll (see
sscli\docs\debugging\sos.html for documentation), to list all of the
managed threads in the process and shows summary information about each.


Lastly, each thread can access the entire heap.

Barry 

-----Original Message-----
From: Discussion of the Rotor Shared Source CLI implementation
[mailto:[EMAIL PROTECTED] On Behalf Of SUBSCRIBE
DOTNET-ROTOR Memomana
Sent: Sunday, February 15, 2004 1:57 PM
To: [EMAIL PROTECTED]
Subject: [DOTNET-ROTOR] Thread ID

I noticed that when we start a C# application using the CLI, there will
be
different threads doing allocations before the user application starts.
I
can see that by using the default profiler (included in the SSCLI
distribution).

I think these different threads are allocating objects that are crucial
for
the CLI/virtual machine.

However, I am not so sure about the following:

#1
Does Rotor, during its initialization, specify certain threads to do
certain
things?

During startup, I find:
tid:613696 ... *hundreds of line of allocation*
tid:830056 ... *less than a hundred line of allocation*
tid:613696 ... *hundreds*
tid:830056 ... *hundreds*
tid:905368 ... *thousands*
...
...

#2
Can we tell from the thread ID, which threads are for serving the user
and
the ones for the system/CLI itself?

#3
Is there any address range in the heap that a particular thread can
access?

Any help is very appreciated.

Thank you.


Memomana

===================================
This list is hosted by DevelopMentor(r)  http://www.develop.com
NEW! ASP.NET courses you may be interested in:

2 Days of ASP.NET, 29 Sept 2003, in Redmond
http://www.develop.com/courses/2daspdotnet

Guerrilla ASP.NET, 13 Oct 2003, in Boston
http://www.develop.com/courses/gaspdotnet

View archives and manage your subscription(s) at
http://discuss.develop.com

===================================
This list is hosted by DevelopMentorŪ  http://www.develop.com
NEW! ASP.NET courses you may be interested in:

2 Days of ASP.NET, 29 Sept 2003, in Redmond
http://www.develop.com/courses/2daspdotnet

Guerrilla ASP.NET, 13 Oct 2003, in Boston
http://www.develop.com/courses/gaspdotnet

View archives and manage your subscription(s) at http://discuss.develop.com

Reply via email to