Next: About this document Up: No Title Previous: Helpful hints

Testing System Calls: Running User Programs

Here is a sample user program. You should make up your own test programs and include them in your submission. Your user programs should demonstrate that your system call implementation works. We will run these programs to test your code.


// printa.c  -- a program to test I/O
//    Reads and writes to stdin and stdout. 
//    Opens a file and writes stuff to it. 

#include "syscall.h"
#define numloop 500

int
main()
{
  int i;
  char *ch = "A";
  OpenFileId fd;
  char buffer[24];

  i = Read(buffer,2,0);  // Read from console 

  Write(buffer,2,1);     // Write the same thing to console 

  fd = Open("pa.c.bak"); // Open a file 
  i = Read(buffer,7,fd); // Read from it 
  Write(buffer,i,1);     // Write the chars just read from file 
  Close(fd);             //     to the screen 

  // Write a bunch of A's on the screen 
  for (i=0;i<numloop;i++)
     Write(ch,1,1);

   Exit(0);
}

Here is a sample script (test.script) to automatically run the above user program, called printa.c. Since the nachos executable is present in the userprog directory, execute the script in the userprog directory.


echo "Compiling test directory.."
cd ../test
make all
echo "Testing system calls in Nachos"
echo "Getting printa from the test directory
echo "pa prints A
cp printa ../userprog
cd ../userprog
echo "Running the program printa"
nachos -time 30 -x printa

In order to run the script, you will have to make it executable. Type chmod 754 test.script at the prompt. This command makes test.script executable for you and the group. To run the script, you can simply type test.script at the prompt.

Finally, here are the changes to the Makefile in the test directory you need to compile the user program printa.c:


all: halt shell matmult sort printa
printa.o: printa.c
        $(CC) $(CFLAGS) -c printa.c
pa: printa.o start.o
        $(LD) $(LDFLAGS) start.o printa.o -o printa.coff
        ../bin/coff2noff printa.coff printa

In order to compile your user programs, make appropriate changes to the Makefile in the test directory and type make all at the prompt while in the test directory. Of course, if you set up scripts like the above, you can place them in your userprog directory and simply run the script.


archna@mimas.cs.umass.edu
Tue May 13 12:29:19 EDT 1997