public inbox for linux-8086@vger.kernel.org
 help / color / mirror / Atom feed
From: David Given <dg@cowlark.com>
To: linux-8086@vger.kernel.org
Subject: Re: AW: [Fwd: Re: EDE - Personal Suggestions and Ideas]
Date: Wed, 26 May 2004 17:49:42 +0100	[thread overview]
Message-ID: <200405261749.42017.dg@cowlark.com> (raw)
In-Reply-To: <20040526151030.GC15905@vega.vega.lgb.hu>

On Wednesday 26 May 2004 16:10, Gábor Lénárt wrote:
> However,
> in my 286OS (which source was destroyed several years ago, when my sister
> tries to drink my computer with some cola ...) there was a signaling
> mechanism and the kernel can notify application that it SHOULD reload
> segment IDs and this signal is unblockable one. Sure, still ugly, but at
> least we haven't got reload segment IDs every time ;-)

The only issue with this is, what happens if it's the code or data segments 
that have changed... you can't execute any user code until the segments have 
been updated and you can't update segments without running user code!

[...]
> But you can assume that its
> assembly programmer say: OK, CS (code segment register) points to code
> segment, DS (data segment register) points to data segment *AND* ES (extra
> segment register) points to the ACTUAL user data segment.

Ha! Great minds think alike, and fools seldom differ... I was going to propose 
something like this. Except from C, and only allowing a single extra segment 
(so that the user process never concerns itself with the contents of ES). I 
was going to call it the buffer area and allow you to do things like:

{
	resize_buffer(32*1024); /* request 32kB buffer area */
	copy_from_buffer(data, 2*1024, 32); /* copy 32 bytes to data from 2kB
		into buffer area */
}

However, I didn't mention it because I had vague memories that part of ELKS' 
libc uses ES for some of its loops, and wanted to check on that.

But yeah, that would work. It might make a suitable compromise between 
single-segment code and multi-segment code.

If you want to use more than one extra segment, however, you end up with 
exactly the same problem as before --- the kernel doesn't know where the 
segment addresses are in the app's address space. Giving the kernel a pointer 
to where it's stored is really, really ugly.

Perhaps a better approach would be to have the kernel mediate all this; use 
syscalls to tell the kernel to allocate out-of-process memory. (Or, actually, 
a device driver would be better because then it would all get cleared up 
automatically when the process exits.)

{
	int handle1 = allocate_buffer(48*1024); /* request 48kB buffer area */
	int handle2 = allocate_buffer(48*1024); /* and another one */

	use_buffer(handle1); /* tell the kernel to look up what selector
		handle1 refers to and set it to ES */
	copy_from_buffer(data, 2*1024, 32);
	use_buffer(handle2);
	copy_to_buffer(3*1024, data, 32);
}

You'd get fast copying from a buffer to normal data and vice versa, but not 
from one buffer to another buffer (unless you were to implement another 
syscall so the kernel did it).

Ideally you don't want your user process playing with the segment registers. 
Ever. That way lies madness, and horrible bugs when, e.g., the compiler 
decides to cache a selector on the stack without telling you, and the kernel 
changes the selector without updating the version on the stack...

-- 
+- David Given --McQ-+ 
|  dg@cowlark.com    | Wholesale theft is the sincerest form of flattery.
| (dg@tao-group.com) | 
+- www.cowlark.com --+ 
-
To unsubscribe from this list: send the line "unsubscribe linux-8086" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  parent reply	other threads:[~2004-05-26 16:49 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-05-25 14:23 [Fwd: Re: EDE - Personal Suggestions and Ideas] Miguel Bolanos
2004-05-25 17:10 ` David Given
2004-05-26  6:20   ` AW: " Mario Premke
2004-05-26 10:09     ` David Given
2004-05-26 10:30       ` Gábor Lénárt
2004-05-26 11:43         ` AW: " Mario Premke
2004-05-26 11:57           ` Gábor Lénárt
2004-05-26 12:39             ` AW: " Mario Premke
2004-05-26 13:06               ` Gábor Lénárt
2004-05-26 14:17                 ` David Given
2004-05-26 15:10                   ` Gábor Lénárt
2004-05-26 16:00                     ` Andrey Romanenko
2004-05-26 16:49                     ` David Given [this message]
2004-05-26 17:19                       ` Eduardo Pereira Habkost
2004-05-27  9:09                         ` Gábor Lénárt
2004-05-26 17:42                       ` Andrey Romanenko
2004-05-26 23:19                         ` David Given
2004-05-27  6:07                           ` EDE - Personal Suggestions and Ideas sandeep
2004-05-27 15:51                             ` Eduardo Pereira Habkost
2004-05-28  8:09                               ` sandeep
2004-05-28  8:10                                 ` Gábor Lénárt
2004-05-28 10:11                                   ` David Given
2004-05-28 11:23                                     ` Andrey Romanenko
2004-05-28 12:14                                       ` David Given
2004-05-29  5:28                                         ` Dan Olson
2004-05-28 10:30                                   ` sandeep
2004-05-26 22:34                       ` AW: [Fwd: Re: EDE - Personal Suggestions and Ideas] Harry Kalogirou
2004-05-27  9:00                       ` Gábor Lénárt
2004-05-27  6:04         ` Dan Olson
2004-05-27  7:14           ` Andrey Romanenko
2004-05-27  9:32             ` David Given
2004-05-27 10:19               ` Gábor Lénárt
2004-05-27 21:07               ` Tommy McCabe
2004-05-28  7:39                 ` Gábor Lénárt
2004-06-01 13:46                 ` Gabucino
2004-06-02  9:03                   ` AW: [Fwd: Re: EDE - Personal Suggestions and Ideas][OT] Javier Sedano
2004-05-26 11:34       ` AW: AW: [Fwd: Re: EDE - Personal Suggestions and Ideas] Mario Premke
2004-05-26 12:09         ` Gábor Lénárt
2004-05-27  5:56     ` Dan Olson
2004-05-26 22:42   ` Harry Kalogirou

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200405261749.42017.dg@cowlark.com \
    --to=dg@cowlark.com \
    --cc=linux-8086@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox