Currently your operating system has only been able to run one process,
probably sosh
. In this milestone you will implement the
process related system calls: process_create
,
process_delete
, my_id
,
process_status
and process_wait
. Obviously each
new process should run in its own address space. This will require you to
carefully manage seL4 address spaces.
Currently 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 om_server
interface.
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.
apps/newapp apps/newapp/crt apps/newapp/crt/crt0.S apps/newapp/src apps/newapp/Makefile apps/newapp/Kconfig
# Targets 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 #export DEBUG=1 include $(SEL4_COMMON)/common.mk
config APP_NEWAPP bool "New app" depends on LIB_SEL4 && LIB_SEL4_C && LIB_SOS && LIB_SOS_INTERFACE select HAVE_SEL4_APPS help A new app
source "$SEL4_APPS_PATH/newapp/Kconfig"
make menuconfig
. Navigate to Applications -> newapp and select it
by pressing 'Y'.
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 processes.
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
the ps
command works.
You may want to add a kill
command to sosh to show that
process_delete
works.
As always you should be able to explain the data structures and algorithms used.