M7: Process management
Currently your operating system has only been able to run one process,
sosh. In this milestone you will implement the
process related system calls:
process_wait. Obviously each
new process should run in its own address space. This will require you to
carefully manage seL4 address spaces.
process_create need only run executables that
have been concatenated by the
dite program and placed in the boot image.
All the functionality for process creation can be found in the
sosh has an
exec command. This command provides a simple
interface to the
process_create system call. In a similar
style to UNIX shells, if the third argument to
exec is an
'&' then it will run the process in the background.
Otherwise sosh will use
process_wait to wait until the child
process has finished executing.
Adding new applications
- Pick a name for your new application that is <= 16 characters long. The
dite loading library will truncate any names longer than this.
- Create the following folder structure for your new app:
- Use the following Makefile template to create the Makefile:
TARGETS := newapp.bin
# Source files required to build the target
CFILES := $(patsubst $(SOURCE_DIR)/%,%,$(wildcard $(SOURCE_DIR)/src/*.c))
ASMFILES := $(patsubst $(SOURCE_DIR)/%,%,$(wildcard $(SOURCE_DIR)/crt/crt0.S))
# Libraries required to build the target
LIBS := sel4c sel4 sos_interface sos
- Copy and appropriately modify the crt0.S from sosh or tty_test.
- Use the following Kconfig template to create a Kconfig file:
bool "New app"
depends on LIB_SEL4 && LIB_SEL4_C && LIB_SOS && LIB_SOS_INTERFACE
A new app
- Modify the apps/Kconfig file, adding the following line:
Now you need to include your new application in the build. At a terminal at the root of the
source tree, type
make menuconfig. Navigate to Applications -> newapp and select it
by pressing 'Y'.
Now you need to modify the top level Makefile to include your new application. You should be able
to look at the places where sosh and tty_test are used in this file to see where to add your application.
As with most milestones, a lot of the design work will be working out
suitable data structures to hold process information. You may also need to
extend other data structures in your operating system to handle multiple
You also probably want to check how the
crt works, so you can make sure that when a
process's main function exits it will kill itself.
You should show
sosh executing a sub-process and show that
ps command works.
You may want to add a
kill command to sosh to show that
As always you should be able to explain the data structures and
16 Sep 2011.