Port-powerpc archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Processes with multiple segments



At 03:18 AM 10/3/2001 +0800, Martin Girard wrote:
Hi,

I found out something strange investigating whether a process could use multiple segments on the ppc with NetBSD 1.5.1. In trap.c, the copyin() and copyout() routines allow to copy kernelspace <==> userspace and allow a process to use multiple segments by using as many bcopy()'s as necessary and modifying the segment register of the user process in between.

All processes use multiple segments. The user executable is in segment 0, the stack in segment 7, and shared libs are in segment 2 (or 4).

However, in trap(), a process is assumed to be in userspace if the DAR's segment is USER_SR (13). Worse, than that, the only other fixed segment register is KERNEL_SR... (14, immediately after). Unless I miss something, the trap mechanism assumes a userspace process can only use one segment ; since in user mode one cannot change the segment register value, the only way to use multiple segments is to use multiple segment registers.

Yep, you miss something. The kernel VA space and the VA space are completely independent. Usually, the kernel has no access to the user's address space. USER_SR is used to grant the kernel temporary access to part of the user's address space. When data at a user's address need to xfered from/to the kernel, the segment register of the segment containing that address is placed in segment register USER_SR.

For now my hypothesis is that the implementation, for some obscure reason, is only partial. But I'd like to know if it's really the case and if the obvious workaround I just mentioned above would be compatible with the rest of memory management as currently implemented.

Your hypothesis is faulty.
--
Matt Thomas               Internet:   matt%3am-software.com@localhost
3am Software Foundry      WWW URL:    http://www.3am-software.com/bio/matt/
Cupertino, CA             Disclaimer: I avow all knowledge of this message




Home | Main Index | Thread Index | Old Index