Dear xen-devel,
My partner and I are working to port an "educational"
UNIX-like operating system from a custom simulator to
the Xen platform for an operating systems class here
at Brown University.
Unfortunately, we're having quite a bit of difficulty
switching the system into user mode. Currently, we're
using borrowed code from an early linux kernel:
89 void context_make_active_user(context_t *c)
90 {
91 /* Switch stacks and run the thread */
92 int res;
93 res = switch_into_user_as(c);
94 //move_to_user_mode();
95 //#define move_to_user_mode()
96 // __asm__ __volatile__ ("movl %%esp,%%eax\n\t" \
97 "pushl %0\n\t" \
98 "pushl %%eax\n\t" \
99 "pushfl\n\t" \
100 "pushl %1\n\t" \
101 "pushl $1f\n\t" \
102 "iret\n" \
103 "1:\tmovl %0,%%eax\n\t" \
104 "mov %%ax,%%ds\n\t" \
105 "mov %%ax,%%es\n\t" \
106 "mov %%ax,%%fs\n\t" \
107 "mov %%ax,%%gs" \
108 : /* no outputs */ :"i" (__USER_DS), "i"
(__USER_CS):"ax");
109 KASSERT(!res);
110 __asm__ __volatile__("movl %0,%%ebp\n\t" /*
update ebp */
111 "movl %1,%%esp\n\t" /*
update esp */
112 "push %2\n\t" /* save eip */
113 "ret" /* jump to new eip */
114 : : "m" (c->c_ebp), "m" (c->c_esp),
"m" (c->c_eip));
115 }
The code that has been commented out is our attempt to
alter the segment registers and switch to ring 3.
However, this seems to be very wrong. We are
struggling to find examples as to how this switch to
userland might be achieved while running with xen
(and, in fact, in general). Does anyone have any
advice that might help us implement this switch to
userland? Additionally, will returning from a trap
into the kernel from userland automatically switch
back to userland or is additional effort needed?
--
Second, students interacted with this OS (named
"Weenix") through three terminals which were exposed
to Weenix as character devices /dev/tty0 through
/dev/tty3. Additional, the actual terminal through
which the Weenix system had been started would serve
as a console for printing "meta" debugging output to
(this terminal would not be visible to Weenix itself).
We've made significant ground porting Weenix to Xen
(which we have renamed "Wox"), however, we're a bit
hung up in trying to simulate those original three
terminals without going overboard.
We've toyed with the idea of simply using escape
sequence to "split" a single terminal, but this seems
ugly and is not truly what we'd like. We'd much prefer
a way to attach multiple terminals to a single Weenix
instance such that Weenix can interact with these
terminals as if they were character devices.
One option seems to be modifying the "back-end" driver
utilized by block I/O devices but this seems as though
it would require us to alter Xen itself. Beyond this,
we're really not sure how to proceed. Any pointers or
general advice would be greatly appreciated.
Unfortunately, Weenix doesn't have a network stack;
it's only three or four times more complex than
mini-os :)
Thank you very much!
Brandon & Dan
Brown University
____________________________________________________________________________________
Be a better Heartthrob. Get better relationship answers from someone who knows.
Yahoo! Answers - Check it out.
http://answers.yahoo.com/dir/?link=list&sid=396545433
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|