Group Session 1

Userspace API

Issued 2/25/14
Due Date 2/25/14 at the end of class


The goal is for everybody to discuss and collectively decide on an answer to the questions below. The end result of this group discussion should be committed to the shared repository ( group/project1).

This discussion should take place during class hours, and the results should be committed to the repository at the end of the class.

Task 1: OS Name

Easy question to warm up. Please decide on the name of the OS.

What to hand in:

  • Commit your decision in the file my_os_name.txt and place it in group/project1.

Task 2: Userspace application choice

A full desktop operating system has hundreds of system calls, across many different categories (process control, I/O, ...).

We won't be able to implement that many system calls, which means we have to decide on a subset. Which subset we need depends on what the user space programs executing on our OS require.

Please decide on a set of user space programs which we will implement to test our system calls and to demonstrate the functionality of our OS.

Keep in mind that we will be limited to text mode output and keyboard input.

We will likely need some form of interprocess communication, so communication between processes will be supported.

I would propose a shell, so we can start other programs in an interactive fashion. However, what would those other programs be?

What to hand in:

  • A list of user space programs to consider implementing, in a file called applications.txt.

Task 3: Userspace Screen API

NOTE: This task requires Linux. You can use your Ubuntu VM if needed.

Our userspace programs will need to be able to communicate with the user of the computer (assuming interactive applications). For sure, our shell will need to interact with the user.

This means accessing the screen and keyboard. For this task, we will focus on how userspace applications will manipulate the screen.

The goal is to design a userspace API (in myos_screen.h) which will be used by the applications decided on in task 2 to output to the screen.

First, decide on the C function prototypes and put them in myos_screen.h.

Second, implement as many of the functions possible. To make your work easier, I write an emulation of our yet to be created screen driver of our OS, meaning we will be able to test our userspace screen library under Ubuntu. The idea is that we can start implementing user space applications using this emulation library, and will later be able to recompile them for our OS by linking with the real library instead.

See the example code in group/project1 (in the shared repository). A makefile is already provided. Document your code!!!

NOTE: You can't generally include other C headers or existing libraries, as those are designed and compiled for a linux operating system, not for the system we are designing. The code should be fully self-contained.

What to hand in:

  • Commit the modified files back to the repository.
  • C function prototypes
  • As much implementation as possible. There is no need to complete the implementation after class, but some effort in myos_screen.c is expected.


For template, please look in the shared repository under group/project1. The outcome of the group discussion should be committed to the same directory at the end of the class.


The result of this group project will be evaluated.

Topic revision: r2 - 2014-02-25 - 21:33:32 - Main.driesk
Copyright 2016 The Board of Trustees
of the University of
Helping Women Faculty Advance
Funded by NSF