On Sun, 14 Aug 2005 22:16:09 +0200 Rene Wittmann (RW) wrote:
RW> I have 2 questions on the RT part in DROPS:
RW>
RW> 1.) I have 2 RT working threads, each with 3 timeslices:
RW> Thread 1: period=10ms
RW> ts1=30ms prio1=50
RW> ts2=10ms prio2=30
RW> ts3=20ms prio3=50
RW>
RW> Thread 2: period=10ms
RW> ts1=20ms prio1=40
RW> ts2=5ms prio2=30
RW> ts3=10ms prio3=40
RW>
RW> Assume both threads …
[View More]are ready at the same time.
RW> So thread 1 starts and does its work until it
RW> releases the voluntarily or it's preempted by
RW> its preempter-thread. So say it releases
RW> voluntarily after 20ms.
When you say "it's preempted by its preempter thread", do you mean the
situation when a preempter with a higher priority than the current thread
receives a preemption IPC from the kernel and thus preempts the current
thread?
RW> Who will get the left 10ms? I guess nobody.
When a thread is preempted (that means it gets involuntarily descheduled),
the remaining time quantum is saved and later restored when the thread is
scheduled again. If the thread yields its scheduling context (that means it
voluntarily gives it away), the time quantum is no longer available to
the thread. A yield can happen in two ways depending on the target thread
id specified:
1) if the target ID is the NIL_ID, then the thread yields its active
scheduling context to noone - the time is effectively gone. This is
what next_reservation does. Note that the kernel checks the user-specified
ID, to guard against the case where a thread wants to yield its active
scheduling context and the time quantum on that scheduling context expires
simultaneously.
2) if the target ID is a valid thread ID in the system, then the action
depends on whether the specified thread is ready to run:
a) if it is, then the current thread donates the current scheduling
context to the specified thread and that thread then becomes the
current thread. This is similar to what happens during a donating IPC.
b) if the specified thread is not ready, then the current scheduling
context is gone, similar to 1)
RW> Or can I assign my left time to a specific
RW> thread, say ts2 of thread 1, that is has 20ms
RW> after recognizing that ts1 was finished 10ms
RW> earlier?I could do with l4_rt_change_timeslice(),
RW> but this would probably not work for the the
RW> current period! (or yes?)
A thread can yield the current scheduling context to another thread as
described in 2a) above. Note that the thread will yield the current
scheduling context (which may not necessarily be the thread's own active
scheduling context). As an example consider:
A sends a donating IPC to B, now B runs on A's scheduling context. If B
yields to C, then C will run on A's time and B will not donate its
own scheduling context. If the current scheduling context is in fact
the active scheduling context of the donating thread, then realize that
the donating thread will likely encounter a timeslice overrun soon after
the yield (the donatee will consume the time quantum until it runs out).
If you'd rather avoid that, then the donatee will have to yield the
scheduling context back to the owner (the original donator) who then has
to yield it to noone.
Changes to the time quantum of a scheduling context are only visible
the next time that scheduling context becomes the current scheduling
context. That means if you change the current scheduling context, then
the change will not be visible immediately.
RW> 2.) Consider we have a deadline miss. And we say
RW> l4_rt_next_period(): would it wait for the beginning
RW> of the next (which means:
RW> period 1: deadline miss
RW> period 2: call next period (because we think we're
RW> still in period 1)+ wait to end of period
RW> period 3: normal work)
RW> Or do I have to care that we do not call
RW> l4_rt_next_period() in case of a deadline miss?
If your thread misses its deadline right before it wanted to call
l4_rt_next_period, then l4_rt_next_period blocks the thread until
the end of the new period started due to the deadline miss. Since this
is likely not what the thread intended to do, it's the preempter's job
to handle that situation, e.g. by ex_regs'ing the thread out of it's
l4_rt_next_period call.
RW> BTW: I compiled the fiasco-kernel with apic+one shot
RW> mode. But this should not be relevant for my question.
It is indeed not relevant.
-Udo.
[View Less]
Greetings!
I have been working on the BID tutorial in writing the
hiworld example. I was able to complete the exercise
:)
I just found one compilation error, in "4.3 Client
helper library", where it said no member ipc_error for
env. Declaration is as follows:
CORBA_Environment env = dice_default_environment;
One usage in the example is:
return -env.ipc_error;
I checked l4/tool/dice/include/dice/dice-corba-types.h
and for l4x2 version, ipc_error is declared inside a
_p union. Hence, …
[View More]the usage of:
env._p.ipc_error
worked fine. Is that correct?
I tested hiclient and hiserver replacing demo-drops
images with my compiled ones, and it worked fine.
My documentation and the source code can be viewed
from:
http://www.shakthimaan.com -> fiasco
Regards,
SK
--
Shakthi Kannan, MS
Software Engineer, Specsoft (Hexaware Technologies)
[E]: shakthimaan(a)yahoo.com [M]: (91) 98407-87007
[W]: http://www.shakthimaan.com [L]: Chennai, India
__________________________________
Yahoo! Mail - PC Magazine Editors' Choice 2005
http://mail.yahoo.com
[View Less]
Hello,
I try to run multiple L4Linux instances.
Dose L4Linux-2.4 or L4Linux-2.6 implement the driver
stubs for oshkosh, ide driver and bmodfs?
Where can I find them?
Thanks!
Wei
___________________________________________________________
雅虎邮箱超强增值服务-2G超大空间、pop3收信、无限量邮件提醒
http://cn.mail.yahoo.com
All,
I've been working with the dataspace calls with the L4Env running x86
Fiasco. I am trying to create a dataspace from a L4Linux user process,
but I am having trouble getting the program to compile. Is my Makefile
correct for what I am trying to do? Is there any reason I shouldn't be
able to link to l4dm_mem_open from a L4Linux user process? Below is my
source, Makefile, and compiler error message. Help much appreciated!
---------- SOURCE ----------
#include <l4/dm_mem/dm_mem.h…
[View More]>
#include <l4/l4rm/l4rm.h>
#include <l4/sys/types.h>
#include <l4/dm_generic/types.h>
int main(int argc, char**argv){
l4dm_dataspace_t ds;
void *addr;
l4dm_mem_open(L4DM_DEFAULT_DSM,8192,0,0,"L4RM example",&ds);
printf("hi\n");
return 0;
}
---------- MAKEFILE ----------
PKGDIR ?= ../..
L4DIR ?= $(PKGDIR)/../..
TARGET = $(PKGNAME)
MODE = host
SYSTEMS = x86-l4v2 x86-l4x0
# list your .c files here
SRC_C = main.c
LIBCINCDIR = $(addprefix -I,$(L4INCDIR))
# if your server implements the server side of an idl defined in an idl-file
# of your package, list the idl file name(s) here (no path needed)
SERVERIDL =
# list additional library paths and libraries here
LIBS = -ldm_generic -ldm_mem
include $(L4DIR)/mk/prog.mk
---------- COMPILER ERROR ----------
jgrizza@tomato:~/build_2.6.01/l4/pkg/create_ds/server/src$ make
PWD=/home/jgrizza/build_2.6.01/l4/pkg/create_ds/server/src/OBJ-x86_586-l4v2
make -C OBJ-x86_586-l4v2 -f Makefile
make[1]: Entering directory
`/home/jgrizza/build_2.6.01/l4/pkg/create_ds/server/src/OBJ-x86_586-l4v2'
... Compiling main.o
LD_PRELOAD=/home/jgrizza/build_2.6.01/l4/tool/gendep/libgendep.so
GENDEP_TARGET=main.o GENDEP_BINARY=cc1 gcc -c -DRAM_BASE=0x0
-DUSE_OSKIT=y -DSYSTEM_x86_586_l4v2 -DARCH_x86 -DCPUTYPE_586
-DL4API_l4v2 -I../../../idl/OBJ-x86-l4v2
-I../../../../../include/x86/l4v2
-I/home/jgrizza/build_2.6.01/drops/include/x86/l4v2
-I../../../../../include/l4v2
-I/home/jgrizza/build_2.6.01/drops/include/l4v2
-I../../../../../include/x86
-I/home/jgrizza/build_2.6.01/drops/include/x86 -I../../../../../include
-I/home/jgrizza/build_2.6.01/drops/include -gstabs+ -g -O2
-fno-strict-aliasing -march=i586 -Wall -Wstrict-prototypes
-Wmissing-prototypes -Wmissing-declarations
/home/jgrizza/build_2.6.01/l4/pkg/create_ds/server/src/main.c -o main.o
/home/jgrizza/build_2.6.01/l4/pkg/create_ds/server/src/main.c: In
function `main':
/home/jgrizza/build_2.6.01/l4/pkg/create_ds/server/src/main.c:12:
warning: implicit declaration of function `printf'
/home/jgrizza/build_2.6.01/l4/pkg/create_ds/server/src/main.c:9:
warning: unused variable `addr'
==> Linking create_ds
LD_PRELOAD=/home/jgrizza/build_2.6.01/l4/tool/gendep/libgendep.so
GENDEP_TARGET=create_ds GENDEP_BINARY=ld gcc -o create_ds main.o
-L../../../../../lib/x86_586/l4v2
-L/home/jgrizza/build_2.6.01/drops/lib/x86_586/l4v2
-L../../../../../lib/x86_586
-L/home/jgrizza/build_2.6.01/drops/lib/x86_586 -L../../../../../lib
-L/home/jgrizza/build_2.6.01/drops/lib -ldm_generic -ldm_mem
../../../../../lib/x86_586/l4v2/libdm_mem.a(open.o)(.text+0xba): In
function `l4dm_mem_open':
/home/jgrizza/build_2.6.01/l4/pkg/dm_mem/lib/clientlib/src/open.c:87:
undefined reference to `LOG_logL'
../../../../../lib/x86_586/l4v2/libdm_mem.a(open.o)(.text+0xff):/home/jgrizza/build_2.6.01/l4/pkg/dm_mem/lib/clientlib/src/open.c:62:
undefined reference to `l4env_get_default_dsm'
../../../../../lib/x86_586/l4v2/libdm_mem.a(open.o)(.text+0x12b):/home/jgrizza/build_2.6.01/l4/pkg/dm_mem/lib/clientlib/src/open.c:65:
undefined reference to `LOG_logL'
collect2: ld returned 1 exit status
make[1]: *** [create_ds] Error 1
make[1]: Leaving directory
`/home/jgrizza/build_2.6.01/l4/pkg/create_ds/server/src/OBJ-x86_586-l4v2'
make: *** [OBJ-x86_586-l4v2] Error 2
Thanks!
Julian
[View Less]
Greetings!
Just started playing around with fiasco and l4env. I
checked out l4env and hello from CVS, which obtained
all the required files. I was able to compile it on my
x86 Thinkpad (T41) running Debian Sarge 3.1r0a. I've
added an entry in boot/grub/menu.lst as follows:
title DROPS/Fiasco u-kernel
kernel (hd0,0)/boot/fiasco/rmgr -sigma0
module (hd0,0)/boot/fiasco/main -noserial -nowait
-nokdb
module (hd0,0)/boot/fiasco/sigma0
module (hd0,0)/boot/fiasco/names
module (hd0,0)/boot/…
[View More]fiasco/log
module (hd0,0)/boot/fiasco/dm_phys
module (hd0,0)/boot/fiasco/hello
On boot, I get the following output:
"
RMGR: Starting tasks
#OS: loading "(hd0,0)/boot/fiasco/names"
from 0022b000 - 002341a4 to [ 02240000 - 00246b52
The module 02: 02240000 - 00246b52 :
(hd0,0)/boot/fiasco/names overlaps with module loaded
by bootloader at
00100000 - 001ca240: Rmgr
02: 0022b000 - 002341a4: (hd0,0)/boot/fiasco/names
03: 00235000 - 0023d324: (hd0,0)/boot/fiasco/log
04: 0023e000 - 00252584: (hd0,0)/boot/fiasco/dm_phys
05: 00253000 - 0025d7ef: (hd0,0)/boot/fiasco/hello
The reason for this error message is that the modules
as loaded by grub interface with their final position
as defined by the linker. Most often you can solve
this problem by inserting the command "modaddr
0x02000000" immediately as next line after the
"kernel=" line of your menu.lst. Note that you have to
use a special version of GRUB which is available from
http://os.inf.tu-dresden.de/drops/download.html.
Return reboots, "k" enters L4 kernel debugging.
"
I already have grub installed in the MBR of the hard
disk, and I don't have a floppy drive in the laptop.
1. Is there any other way I can get these modules
loaded and tested?
Of course, hello module does not require the names,
log, dm_phys modules. It runs fine though with rmgr,
main and sigma0.
2. I am particularly interested in device drivers. Is
there any documentation that covers these in DROPS
other than using Linux device drivers?
I'd appreciate any help in this regard.
Thanks,
SK
--
Shakthi Kannan, MS
Software Engineer, Specsoft (Hexaware Technologies)
[E]: shakthimaan(a)yahoo.com [M]: (91) 98407-87007
[W]: http://www.shakthimaan.com [L]: Chennai, India
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
[View Less]
The operating system's group at Technische Universität
Dresden is pleased to announce the release of version 1.2 of
the Fiasco L4 microkernel.
Since the last release Fiasco has significantly matured and
is now thought to be the most stable version available. For
a comprehensive list of changes please consult the CHANGES
file in the distribution. Highlights are the integration of
scheduling extensions targeted at real-time applications,
better support for paravirtualised systems as well as
…
[View More]numerous bug-fixes.
The Fiasco kernel currently runs on the x86 and Linux/x86
platforms (UX) as well as various ARM platforms. All
platform implementations are believed to be equally stable.
More information is available at the Fiasco website at
http://os.inf.tu-dresden.de/fiasco/
Adam
--
Adam adam(a)os.inf.tu-dresden.de
Lackorzynski http://os.inf.tu-dresden.de/~adam/
[View Less]
Greetings!
I am trying to get the console using l4env and fiasco
on an old x86 desktop. Is it like the bash shell?
Images have been compiled from CVS sources. All images
are booted from the grub present in the demo floppy.
The grub entry is as follows:
kernel (fd0)/l4/v2/rmgr -sigma0
modaddr 0x01500000
kernel (fd0)/l4/v2/main -noserial -nowait -nokdb
kernel (fd0)/l4/v2/sigma0
kernel (fd0)/l4/v2/names
kernel (fd0)/l4/v2/log
kernel (fd0)/l4/v2/dm_phys
kernel (fd0)/l4/v2/con
The output that I …
[View More]get while booting is as follows:
"
con | OSKit support: using 128 KB at 0x00002000 as
heap
con | Characters size is 8x14, font has 256 characters
con | vc_init_gr ():
con | [8.2] l4con/server/src/vc.c: 315: vc_init_gr():
con | Did not find VBE info block in multiboot info
con | Perhaps you have to upgrade GRUB, RMGR or
oskit10_support
con | GRUB has to set the video mode with the vbeset
command
con |
con | Alternatively, try passing the --vbemode=<mode>
switch
con |
----PANIC, 'g' for exit
"
By console, does it correspond to serial port output
or the VGA display? The desktop is a Sony Trinitron
multiscan 15sx display.
Any suggestions/ideas would be useful,
Thanks,
SK
--
Shakthi Kannan, MS
Software Engineer, Specsoft (Hexaware Technologies)
[E]: shakthimaan(a)yahoo.com [M]: (91) 98407-87007
[W]: http://www.shakthimaan.com [L]: Chennai, India
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
[View Less]
Hi,
I'm trying to convert a custom kernel 2.4 module to 2.6. The most
serious problem I'm having is that there are now some unresolved
symbols with 2.6:
*** Warning: "l4rm_detach"
[/home/drops/DROPS-20050908/l4/pkg/test/examples/module.ko] undefined!
*** Warning: "kmalloc"
[/home/drops/DROPS-20050908/l4/pkg/test/examples/module.ko] undefined!
*** Warning: "l4rm_do_attach"
[/home/drops/DROPS-20050908/l4/pkg/test/examples/module.ko] undefined!
*** Warning: "l4env_err_ipcstrings"
[/home/drops/…
[View More]DROPS-20050908/l4/pkg/test/examples/module.ko] undefined!
*** Warning: "l4lx_thread_shutdown"
[/home/drops/DROPS-20050908/l4/pkg/test/examples/module.ko] undefined!
*** Warning: "l4lx_thread_create"
[/home/drops/DROPS-20050908/l4/pkg/test/examples/module.ko] undefined!
*** Warning: "l4_sleep"
[/home/drops/DROPS-20050908/l4/pkg/test/examples/module.ko] undefined!
*** Warning: "names_waitfor_name"
[/home/drops/DROPS-20050908/l4/pkg/test/examples/module.ko] undefined!
I see that there is no l4_ksyms.c in l4linux 2.6 like there was in 2.4.
Secondly, I get more unresolved symbols if the objects that are linked
are specified at the end of the command line instead of the beginning
(linking succeeds in both cases, however). The kernel build system
puts the objects at the end while the DROPS build system puts them at
the beginning. Does anyone have an idea why two otherwise equivalent
linking commands would cause such different behaviour depending on the
position of the object arguments? Here are the two command lines (the
paths are slightly different because the kernel build system always
outputs to the source directory:
DROPS:
gcc -o test_module.o test_dev.o main.o test_dm-client.o -r -nostdlib
-nostartfiles
-L../../../../../lib/x86_686/l4v2
-L/home/drops/DROPS-20050908/drops/lib/x86_686/l4v2
-L../../../../../lib/x86_686
-L/home/drops/DROPS-20050908/drops/lib/x86_686 -L../../../../../lib
-L/home/drops/DROPS-20050908/drops/lib -T../../../../../lib/x86_686/main_rel.ld
-ltest_lxk -ldm_generic -ldm_phys -ldm_mem
kernel:
gcc -r -nostdlib -nostartfiles
-L/home/drops/DROPS-20050908/drops/lib/x86_686/l4v2
-L/home/drops/DROPS-20050908/drops/lib/x86_686
-L/home/drops/DROPS-20050908/drops/lib
-T/home/drops/DROPS-20050908/l4/lib/x86_686/main_rel.ld
-ltest_lxk -ldm_generic -ldm_phys -ldm_mem OBJ-x86_686-l4v2/mesg_dm-client.o
-o test_module.o test_dev.o main.o
Thanks,
Derick
[View Less]
Hello Hackers,
I've got a problem with a hybrid Linux Task. I want to create a little
tool to tranfser data between two L4Linuxes easily. A tool similar to
the famous netcat but using IPC instead of UDP/TCP. So far so good.
Server is listen for client and client is sending data to the server
(using long IPC transfering data as dwords). The problem is that the
data doesn't arrive at the server task. There only an empty IPC message
gets received (no IPC error).
After I've played around a …
[View More]while with debug messages I got strange
results. Using debug messages (simple printf()) inbetween and the
transfer succedes!
Digging a little deeper got me to the point that it must be a problem
with the compiler. Using 'gcc -O0' generates working code too - 'gcc -O2'
doesn't. Trying another compiler (gcc version 4.0.1 (Debian 4.0.1-2))
with -O2 got me also working code.
So my question is if really my gcc (version 3.3.5 (Debian 1:3.3.5-13))
is broken or the includes under l4/l4sys/.../ipc.h. Maybe the inline
assembly isn't that clean? But just a guess. My GNU assembly knowlegde
isn't that good.
Greets,
Mathias
PS: I'm runing Debian sarge over here.
[View Less]
Hello,
after changing minimal parts of dietlibc's build procedure, I get as
far as cd pkg/dietlibc ; gmake actually doing something but it fails
with the following error:
... Compiling lib/__v_printf.o
LD_PRELOAD=/home/blitz/src/l4/tool/gendep/libgendep.so
GENDEP_TARGET=lib/__v_printf.o GENDEP_BINARY=cc1 gcc33 -c
-nostdinc -DRAM_BASE=0x0 -DUSE_DIETLIBC=y -DSYSTEM_x86_686
-DARCH_x86 -DCPUTYPE_686 -DL4API_ -I../include -I..
-I../../../idl/OBJ-x86- -I/include -gstabs+ -g -O2
-fno-…
[View More]strict-aliasing -march=i686 -Wall -Wstrict-prototypes
-Wmissing-prototypes
-Wmissing-declarations /home/blitz/src/l4/pkg/dietlibc/lib/dietlibc/lib/__v_printf.c
-o
lib/__v_printf.o /home/blitz/src/l4/pkg/dietlibc/lib/dietlibc/lib/__v_printf.c:2:20:
stdarg.h: No such file or directory In file included
from /home/blitz/src/l4/pkg/dietlibc/lib/dietlibc/lib/__v_printf.c:7: ../dietstdio.h:12:20:
stdarg.h: No such file or directory In file included
from ../dietstdio.h:52,
from /home/blitz/src/l4/pkg/dietlibc/lib/dietlibc/lib/__v_printf.c:7: ../include/stdio.h:7:20:
stdarg.h: No such file or directory In file included
from ../dietstdio.h:52,
from /home/blitz/src/l4/pkg/dietlibc/lib/dietlibc/lib/__v_printf.c:7:
The include directories look bogus, but I am quite puzzled where they
come from. Maybe my directory layout is somehow different from what
is expected? Any hint is greatly appreciated.
Regards,
--
Julian Stecklina
Lisp nearing the age of 50 is the most modern language out
there. GC, dynamic, reflective, the best OO model extant including
GFs, procedural macros, and the only thing old-fashioned about it
is that it is compiled and fast. -- Kenny Tilton, comp.lang.python
[View Less]