comp.lang.ada
 help / color / mirror / Atom feed
From: "Nick Roberts" <nick.roberts@acm.org>
Subject: Re: Where are returned values stored?
Date: Thu, 3 Jun 2004 03:00:21 +0100
Date: 2004-06-03T03:00:21+01:00	[thread overview]
Message-ID: <2i7felFkcejkU1@uni-berlin.de> (raw)
In-Reply-To: AWjvc.22009$Hn.791710@news20.bellglobal.com

"Warren W. Gay VE3WWG" <ve3wwg@cogeco.ca> wrote in message
news:AWjvc.22009$Hn.791710@news20.bellglobal.com...

> Robert I. Eachus wrote:
> > ...
> > You are thinking like an embedded programmer, and probably
> > should be  using SPARK.
>
> I would disagree, but this is unimportant ;-)
>
> > In a virtual memory environment, things are much  different. I've
> > lived in both worlds. If you make tasks "heavy" threads, with
> > their own virtual address space, the number of stacks and their
> > size is a non-issue.
>
> In a POSIX environment, this would be normally called a
> "process" -- not a thread. But a quick perusal of
> the word "thread" in technical dictionaries online,
> seems to return an array of muddled definitions
> for "thread".

Indeed, and in some cases it is actually quite hard to say whether threads
really share memory or not.

> Threads of course can be implemented with differing
> levels of sharing, and one possibility is to not share the
> stack address space.
>
> Anyway, I tend to live in the POSIX world, and so for
> me at least, more stacks means carving up more of the
> precious 2GB address space on 32 bit platforms.

You may perhaps be interested to note that my design for the AdaOS kernel
(called 'Bachar') for the IA-32 makes use of segments to help alleviate the
problem.

Because each stack is in its own segment, it can be 'moved' (within the
underlying linear address space) without affecting the addresses of items on
the stack. Because stacks can be moved, it is feasible to start every stack
small and simply grow it as demand requires, even if this requires it to
grow 'huge' (100s of MB) sometimes. I like the way this avoids the necessity
for allocating big or indefinite things on the heap. (And by keeping stacks
page aligned, I can use trickery to move them rapidly.) Using segments
brings problems, but I am learning that it brings some advantages too!

> Once everyone moves to 64 bit processors, then this
> is less of a problem.

Hehe. In fact, 64-bit technology brings the prospect of objects remaining
allocated in virtual memory for years, even decades, maybe even centuries.
It's weird to think that I could compile a DSO into a certain address in
Linux-64 today, and some program written in 200 years' time will refer to it
/at the same address/, when trains run from planet to planet and people run
on batteries.

> > On compilers where tasks are lightweight (all share a
> > single address space) you can't be quite so free with
> > addresses.
>
> This is precisely the scenario that I was concerned
> about (worst case scenario).
>
> >  But it usually suffices to materialize a minimum return
> > stack if per task if and when it is referenced, and leave
> > it unallocated otherwise.
>
> Yes, of course.  You must still however, carve up the
> address space for the stacks, whether the vm pages are
> allocated or not.

There we are. Using segments on the IA-32 gives me 45 bits of address space,
rather than just 32.

-- 
Nick Roberts





  reply	other threads:[~2004-06-03  2:00 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-05-26 19:46 Where are returned values stored? (follow up to yesterday's question) James Alan Farrell
2004-05-26 20:44 ` Simon Wright
2004-05-27  7:51   ` Dmitry A. Kazakov
2004-05-27  9:39 ` Where are returned values stored? Marius Amado Alves
2004-05-27 17:05   ` Warren W. Gay VE3WWG
2004-05-27 20:24     ` James Alan Farrell
2004-05-28 20:33       ` Warren W. Gay VE3WWG
2004-05-29  7:03         ` Martin Krischik
2004-05-29 13:19           ` Larry Kilgallen
2004-05-30  7:10             ` Martin Krischik
2004-06-02  3:14         ` Robert I. Eachus
2004-05-30 21:17     ` Nick Roberts
2004-05-31 12:58       ` Warren W. Gay VE3WWG
2004-06-02  4:07         ` Robert I. Eachus
2004-06-02 12:42           ` Warren W. Gay VE3WWG
2004-06-03  2:00             ` Nick Roberts [this message]
2004-06-03  4:34             ` Robert I. Eachus
2004-06-03 16:06               ` Warren W. Gay VE3WWG
2004-06-03 16:13               ` Nick Roberts
2004-06-07  1:53                 ` Robert I. Eachus
2004-06-07 13:09                   ` Larry Kilgallen
2004-06-09  7:03                     ` Robert I. Eachus
2004-06-05 17:13             ` Simon Wright
2004-05-27 17:11   ` Martin Krischik
2004-05-27 17:07 ` Where are returned values stored? (follow up to yesterday's question) Martin Krischik
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox