All of lore.kernel.org
 help / color / mirror / Atom feed
* [uml-devel] System Call Mechanism
@ 2004-02-19 21:30 kuas
  2004-02-25 15:52 ` BlaisorBlade
  0 siblings, 1 reply; 4+ messages in thread
From: kuas @ 2004-02-19 21:30 UTC (permalink / raw)
  To: user-mode-linux-devel

Hello,

I'm posting this question to here since this is development problem, the 
other newsgroup seems to be more like users problem and I would think 
this forum would be able to explain more about my question. I will post 
to the other newsgroup if that's the  one where I should really be posting

I'm trying to find out how the system call mechanism presently works in 
UML. I have looked into the high level description in the slides. Any 
pointers to any other documents that I might missed are appreciated.

I seems to me the new or current implementation of system call involves 
conversion from interupt 80 at the host OS into signals back in UML 
kernel. Is this the same mechanism for the current TT and SKAS? Or  TT 
mode still using ptrace thread tracing mechanism to intercept the system 
call? If there is a signal from the host to UML kernel process, there 
must be a signal handler registered by the UML kernel.

Any quick deeper overview about this mechanism would be really welcome. 
Thanks in advance.


Kuas.



-------------------------------------------------------
SF.Net is sponsored by: Speed Start Your Linux Apps Now.
Build and deploy apps & Web services for Linux with
a free DVD software kit from IBM. Click Now!
http://ads.osdn.com/?ad_id=1356&alloc_id=3438&op=click
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [uml-devel] System Call Mechanism
  2004-02-19 21:30 [uml-devel] System Call Mechanism kuas
@ 2004-02-25 15:52 ` BlaisorBlade
  2004-02-28  2:29   ` Kuas
  0 siblings, 1 reply; 4+ messages in thread
From: BlaisorBlade @ 2004-02-25 15:52 UTC (permalink / raw)
  To: kuas, user-mode-linux-devel

Alle 22:30, giovedì 19 febbraio 2004, kuas ha scritto:
> Hello,
>
> I'm posting this question to here since this is development problem, the
> other newsgroup seems to be more like users problem and I would think
> this forum would be able to explain more about my question. I will post
> to the other newsgroup if that's the  one where I should really be posting

Perfect choice. I'll try to answer, for things I know or I *think* to know.

> I seems to me the new or current implementation of system call involves
> conversion from interupt 80 at the host OS into signals back in UML
> kernel. Is this the same mechanism for the current TT and SKAS? Or  TT
> mode still using ptrace thread tracing mechanism to intercept the system
> call?

SKAS mode, the more modern one, still uses the same interception mechanism as 
TT: i.e. ptraces the child, intercepts the syscall, nullifies it (i.e. the 
host kernel receives a getpid syscall) and goes on. Look at these files:

arch/um/kernel/skas/process.c: handle_trap () and userspace().
arch/um/kernel/skas/syscall_*.c

Only difference is that in SKAS mode you have one single child process being 
ptraced, on the host; it runs the virtual processes code, and does syscall 
with int 0x80 which are intercepted. To do a context switch, UML uses setjmp 
and longjmp to switch the stack state and PTRACE_SWITCH_MM (implemented on 
the host inside arch/i386/kernel/ptrace.c, read the skas patch) to switch the 
virtual mappings of the child at once. More details about memory handling at 
request, since you asked for one exact thing and maybe are not interested in 
this.

> If there is a signal from the host to UML kernel process, there
> must be a signal handler registered by the UML kernel.
>
> Any quick deeper overview about this mechanism would be really welcome.
> Thanks in advance.


-- 
Paolo Giarrusso, aka Blaisorblade
Linux registered user n. 292729



-------------------------------------------------------
SF.Net is sponsored by: Speed Start Your Linux Apps Now.
Build and deploy apps & Web services for Linux with
a free DVD software kit from IBM. Click Now!
http://ads.osdn.com/?ad_id\x1356&alloc_id438&opÌk
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [uml-devel] System Call Mechanism
  2004-02-25 15:52 ` BlaisorBlade
@ 2004-02-28  2:29   ` Kuas
  2004-02-29 12:26     ` BlaisorBlade
  0 siblings, 1 reply; 4+ messages in thread
From: Kuas @ 2004-02-28  2:29 UTC (permalink / raw)
  To: user-mode-linux-devel; +Cc: BlaisorBlade

Hi Blaisor,

Thanks for the response and info. I am still confused in how the system 
call arrive at process.c->userspace(). I guess the proposal in the 
presentation 
(http://user-mode-linux.sourceforge.net/slides/ols2002/img21.html), it 
said the next implementation would be to convert trap call to signal has 
never been implemented.

I checked in SKAS and TT mode, the idtr value is the same as the host 
machine and I can see from where you pointed, SKAS and TT has the same 
trap handler for system_call. But I don't really understand ptrace 
control, I am not totally sure how the system call is being intercepted 
and sent back to uml ends up in process.c->userspace(). Does every time 
interrupt is called, it will be caught by the host kernel ptrace and for 
system call (int 0x80) will be redirected back to the UML process. How 
does the information about the process that's requesting system call, 
syscall#, and arguments being passed to the UML Kernel. I understand 
since SKAS mode has collection of Virtual Address Spaces. Correct me if 
I'm wrong, will PTRACE_SWITCH_MM first change to the UML kernel process 
Address Space. But in SKAS mode, the UML kernel is also in the host 
address space (>0xc0000000), during this state we are already in the 
kernel space. So which child memory that PTRACE_SWITCH_MM switches when 
the system call? I am assuming the active Virtual Memory that's being 
replaced in UML process is the current uml process that generate the 
system call.


Kuas


BlaisorBlade wrote:

>>I seems to me the new or current implementation of system call involves
>>conversion from interupt 80 at the host OS into signals back in UML
>>kernel. Is this the same mechanism for the current TT and SKAS? Or  TT
>>mode still using ptrace thread tracing mechanism to intercept the system
>>call?
>>    
>>
>
>SKAS mode, the more modern one, still uses the same interception mechanism as 
>TT: i.e. ptraces the child, intercepts the syscall, nullifies it (i.e. the 
>host kernel receives a getpid syscall) and goes on. Look at these files:
>
>arch/um/kernel/skas/process.c: handle_trap () and userspace().
>arch/um/kernel/skas/syscall_*.c
>
>Only difference is that in SKAS mode you have one single child process being 
>ptraced, on the host; it runs the virtual processes code, and does syscall 
>with int 0x80 which are intercepted. To do a context switch, UML uses setjmp 
>and longjmp to switch the stack state and PTRACE_SWITCH_MM (implemented on 
>the host inside arch/i386/kernel/ptrace.c, read the skas patch) to switch the 
>virtual mappings of the child at once. More details about memory handling at 
>request, since you asked for one exact thing and maybe are not interested in 
>this.
>
>  
>




-------------------------------------------------------
SF.Net is sponsored by: Speed Start Your Linux Apps Now.
Build and deploy apps & Web services for Linux with
a free DVD software kit from IBM. Click Now!
http://ads.osdn.com/?ad_id=1356&alloc_id=3438&op=click
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [uml-devel] System Call Mechanism
  2004-02-28  2:29   ` Kuas
@ 2004-02-29 12:26     ` BlaisorBlade
  0 siblings, 0 replies; 4+ messages in thread
From: BlaisorBlade @ 2004-02-29 12:26 UTC (permalink / raw)
  To: user-mode-linux-devel; +Cc: Kuas

Alle 03:29, sabato 28 febbraio 2004, Kuas ha scritto:
> Hi Blaisor,
> Thanks for the response and info.

Hi Kuas, sorry for answering this late. However, next time be clearer in how 
you write your email. I skipped to other things when I first noticed your 
mail was not enough fast to read - caring about spaces and marks is 
important; writing the way one speaks makes a harder job for the reader.

> I am still confused in how the system
> call arrive at process.c->userspace().

And I am learning it while answering you since I never started learning it 
properly. So, thanks for the stimulus to learn it.

> I guess the proposal in the
> presentation
> (http://user-mode-linux.sourceforge.net/slides/ols2002/img21.html), it
> said the next implementation would be to convert trap call to signal has
> never been implemented.

No idea, not yet read that.

> I checked in SKAS and TT mode, the idtr value is the same as the host
> machine and I can see from where you pointed, SKAS and TT has the same
> trap handler for system_call. But I don't really understand ptrace
> control, I am not totally sure how the system call is being intercepted
> and sent back to uml ends up in process.c->userspace().

> Does every time
> interrupt is called, it will be caught by the host kernel ptrace and for
> system call (int 0x80) will be redirected back to the UML process. 

This means you'll soon read "man ptrace" and check for PTRACE_SYSCALL.
However, for SKAS mode: every time a process is created, a thread is created 
which executes new_thread_handler or fork_handler. They call userspace(), and 
it has a while(1) loop which wait()'s for the child stopping and when it gets 
a SIGTRAP, executes handle_trap which handles the syscall.

grep -e '\<userspace\>' arch/um/kernel/skas/*.c

> How
> does the information about the process that's requesting system call,
> syscall#, and arguments being passed to the UML Kernel.

This is done by inspecting the registers. See this:

static void handle_trap(int pid, union uml_pt_regs *regs)
{
        int err, syscall_nr, status;

        syscall_nr = PT_SYSCALL_NR(regs->skas.regs);

PT_SYSCALL_NR is defined in arch/um/include/sysdep-i386/ptrace_user.h and 
means read_PTrace_SYSCALL_NumbeR.

Note: I hope for you that you use either LXR or Exuberant Ctags with an editor 
supporting it, or Freescope (I do not use it but it's good): i.e. from an 
identifier get its definition and where it is used (ctags gives you only the 
definition). Google is your friend while searching for these tools. If you do 
not use them, do not hope to understand anything (yes, the code is there, but 
avoiding using those tools is like reading directly the disassembled vmlinux 
file)

> I understand
> since SKAS mode has collection of Virtual Address Spaces. Correct me if
> I'm wrong, will PTRACE_SWITCH_MM first change to the UML kernel process
> Address Space.

No - it changes the address space, but see below.

> But in SKAS mode, the UML kernel is also in the host
> address space (>0xc0000000), during this state we are already in the
> kernel space.

Wait a moment - the host kernel lives at addresses >0xc0000000. The UML kernel 
lives below that address - it starts from the START address defined in the 
linker script - see arch/um/Makefile:
 -DSTART=$$(($(TOP_ADDR) - $(SIZE)))
Where TOP_ADDR is normally 0xc0000000 (changes with CONFIG_HOST_2g_2g), while 
SIZE is 512 Mega * CONFIG_KERNEL_HALF_GIGS.

> So which child memory that PTRACE_SWITCH_MM switches when
> the system call? I am assuming the active Virtual Memory that's being
> replaced in UML process is the current uml process that generate the
> system call.

1)There is one virtual address space for each process (i.e. one mm_struct, 
task_struct->mm). Multiple thread share one single mm_struct.

2)What Uml does in SKAS mode is to have:
- one ptraced host thread which runs the guest userspace code, called 
userspace thread (with ps auxw, it gets a T in his state because it's 
ptraced);
- one ptracing host thread, called kernel thread, which executes only code 
from the Uml binary, called UML kernel thread. It is the one with lower pid, 
normally.

3)When it must switch to another guest process, the UML kernel thread stops 
the userspace thread and resumes it with a different EIP; but it must also 
make sure that it uses the correct mm_struct and correct memory mappings. 
Those mappings are not done directly through the hardware MMU but with mmaps 
from the /tmp/vmfile-XXXXXX which contains the "physical" memory of the 
guest; the host kernel then uses the hardware MMU to realize those mmaps.

So, the UML kernel thread sends a PTRACE_SWITCH_MM to the userspace thread. So 
in sys_ptrace current is the kernel thread. With the supplied pid, sys_ptrace 
finds the userspace thread, and changes its ->mm field. The next time it 
runs, the kernel will load the mappings of the other guest process.

PTRACE_MMAP and so on are to modify the various mm_struct's the child can use.

Reference about 2.4 kernel internals (this explains in 2.2 what active_mm is):
http://www.moses.uklinux.net/patches/lki.html
-- 
Paolo Giarrusso, aka Blaisorblade
Linux registered user n. 292729



-------------------------------------------------------
SF.Net is sponsored by: Speed Start Your Linux Apps Now.
Build and deploy apps & Web services for Linux with
a free DVD software kit from IBM. Click Now!
http://ads.osdn.com/?ad_id=1356&alloc_id=3438&op=click
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2004-02-29 12:33 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-02-19 21:30 [uml-devel] System Call Mechanism kuas
2004-02-25 15:52 ` BlaisorBlade
2004-02-28  2:29   ` Kuas
2004-02-29 12:26     ` BlaisorBlade

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.