Difference between revisions of "COMP 3000 Lab 3 2011"

From Soma-notes
Jump to navigation Jump to search
Line 12: Line 12:
* change scheduling priorities program
* change scheduling priorities program


# Compile run-program.c with the command ''gcc -g run-program.c -o run-program'' and use it to answer the following questions.
<ol>
## Is the line "Is this line printed?" when you execute '''./run-program /bin/ls -a /tmp'''?  Why?
<li>Compile run-program.c with the command ''gcc -g run-program.c -o run-program'' and use it to answer the following questions.</li>
## Change the program to use execve instead of execvp .  What is the new line?
<ol style="list-style-type: lower-alpha;">
# Linux signals is a simple form of IPC that is used for a variety of purposes.
<li> Is the line "Is this line printed?" when you execute '''./run-program /bin/ls -a /tmp'''?  Why?</i>
## What signal is generated when a program attempts to dereference an illegal pointer?  Give a simple program that generates such a signal.
<li> Change the program to use execve instead of execvp .  What is the new line?</li>
## How would you send a signal to a process to have it pause execution?  Resume?
</ol>
<li> Linux signals is a simple form of IPC that is used for a variety of purposes.</li>
<ol style="list-style-type: lower-alpha;">
<li> What signal is generated when a program attempts to dereference an illegal pointer?  Give a simple program that generates such a signal.</li>
<li> How would you send a signal to a process to have it pause execution?  Resume?</li>


==Part B (on your own)==
==Part B (on your own)==

Revision as of 08:07, 17 October 2011

A few guidelines:

  • Submit your solutions via WebCT by October 21st at 8 PM.
  • Please answer using text files. Do not use doc, docx, pdf etc.
  • Show all your work. Short answers are not sufficient; you should list any websites or individuals you consult and should document any experiments you conducted. For any question that you could just answer without any external reference or experiment, write "(no work required)" after your answer.

Part A (in Tutorial)

Notes:

  • execve example
  • fork, execve example
  • generate, receive user signal
  • change scheduling priorities program
  1. Compile run-program.c with the command gcc -g run-program.c -o run-program and use it to answer the following questions.
    1. Is the line "Is this line printed?" when you execute ./run-program /bin/ls -a /tmp? Why?
    2. Change the program to use execve instead of execvp . What is the new line?
  2. Linux signals is a simple form of IPC that is used for a variety of purposes.
    1. What signal is generated when a program attempts to dereference an illegal pointer? Give a simple program that generates such a signal.
    2. How would you send a signal to a process to have it pause execution? Resume?
    3. Part B (on your own)

      • catch segfault signal, sigchild?
      • make very simple shell based on skeleton?
      • run fork bomb, play with priorities to reduce impact, set quota
      1. Create run-program-reverse.c that is the same as run-program.c except that it interprets its arguments in reverse order. Hence, ./run-program-reverse /tmp -a /bin/ls will do the same as ./run-program /bin/ls -a /tmp.
      2. Create a simple program receive-usr1.c that uses sigaction in order to print "Ouch!" when you send the program the USR1 signal. Note that your program should not consume much CPU time while waiting (i.e., do not poll for the signal).

      Program Listings

      /* run-program.c */
      
      #include <unistd.h>
      #include <stdio.h>
      
      int main( int argc, char *argv[], char *envp[] ) {
      
         if( argc < 2 ) {
             printf( "Insufficient arguments.\n" );
             return -1;
         }
         execvp( argv[1], argv + 1 );
         printf( "Is this line printed?\n" );
         return 0;
      }