programming approaches
Download
Skip this Video
Download Presentation
Programming approaches

Loading in 2 Seconds...

play fullscreen
1 / 23

programming approaches - PowerPoint PPT Presentation


  • 401 Views
  • Uploaded on

Programming approaches. Henning Schulzrinne Dept. of Computer Science Columbia University. Programming approaches. data-driven Unix filter model event-driven multiple inputs web models cgi multi-layer model RPC-based models. Data-driven programming. transformational

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'programming approaches' - Olivia


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
programming approaches

Programming approaches

Henning Schulzrinne

Dept. of Computer Science

Columbia University

Advanced Programming

Spring 2002

programming approaches2
Programming approaches
  • data-driven
    • Unix filter model
  • event-driven
    • multiple inputs
  • web models
    • cgi
    • multi-layer model
  • RPC-based models

Advanced Programming

Spring 2002

data driven programming
Data-driven programming
  • transformational
  • input stream  f(input, commandline)  output stream
  • errors go to stderr
  • status: return code
  • e.g. pipe,
    • sort –f < in.dat | uniq > out.dat
  • Advantages:
    • small, modular tools
    • easy to script

Advanced Programming

Spring 2002

data driven programming4
Data-driven programming
  • Problems:
    • line-oriented output
    • doesn’t work well for networks
    • sort http://www.census.gov/population?
    • only for shell, not a GUI abstraction
    • unconditional, not tree

Advanced Programming

Spring 2002

event driven programming
Event-driven programming
  • reactive systems: inputs not all available in advanced, but instead arrive in endless and perhaps unexpected sequences
  • Examples of events:
    • keystrokes and mouse movements
    • network requests (e.g., web)
    • exceptions (connection failed)
    • file input
    • directory or file has changed
    • resource ready (e.g., slow output device)

Advanced Programming

Spring 2002

event driven programming6
Event-driven programming
  • Asynchronous vs. synchronous:
    • synchronous: wait until operation completes
    • asynchronous: program is notified when operation completes

Advanced Programming

Spring 2002

events in unix
Events in Unix
  • Two event models:
    • signals – one bit
    • select/poll – wait for file system or network events
  • Related: condition variables (later)
  • Some OS are message-based
  • Handler or event loop

Advanced Programming

Spring 2002

signals
signals
  • Software interrupts for asynchronous events
  • Similar to hardware interrupts
  • Provide no information beyond name (integer) – SIGxxx
  • Causes:
    • control keys on terminal
    • hardware exceptions:
      • divide by 0
      • invalid memory reference (SIGSEGV),
      • unaligned access (SIGBUS)
    • kill() or kill command
    • software conditions (SIGURG, SIGPIPE, SIGALRM, SIGCHLD)

Advanced Programming

Spring 2002

signal handling
Signal handling
  • Signals can be ignored (most of them) or caught
  • Default actions:
    • ignore
    • catch
    • abort
    • abort with core dump

Advanced Programming

Spring 2002

signal
signal()

void (*signal(int signo, void(*func)(int)))(int);

  • sets signal handler for signo to func
  • returns previous disposition
  • function:
    • SIG_IGN
    • SIG_DFL
  • handler returns to calling location, exit() or longjmp()

Advanced Programming

Spring 2002

signal11
signal()

while (!done) {

do something

}

void handler(int sig) {

done = 1;

}

  • only call re-entrant functions:

“A reentrant function does not hold static data over successive calls, nor does it return a pointer to static data. All data is provided by the caller of the function. A reentrant function must not call non-reentrant functions.”

Advanced Programming

Spring 2002

non re entrant function
Non-re-entrant function

char *strtoupper(char *string) {

static char buffer[MAX_STRING_SIZE];

int index;

for (index = 0; string[index]; index++)

buffer[index] = toupper(string[index]); buffer[index] = 0;

return buffer;

}

(from AIX manual)

Advanced Programming

Spring 2002

re entrant function poor
Re-entrant function (poor)

char *strtoupper(char *string) {

char *buffer;

int index; /* error-checking needed! */

buffer = malloc(MAX_STRING_SIZE);

for (index = 0; string[index]; index++)

buffer[index] = toupper(string[index]);

buffer[index] = 0;

return buffer;

}

Advanced Programming

Spring 2002

re entrant version
Re-entrant version

char *strtoupper_r(char *in_str, char *out_str) {

int index;

for (index = 0; in_str[index]; index++)

out_str[index] = toupper(in_str[index]);

out_str[index] = 0;

return out_str;

}

Advanced Programming

Spring 2002

non local jumps
Non-local jumps
  • break, continue, return
  • goto: within same routine
  • across routines: setjmp, longjmp

int setjmp(jmp_buf env);

void longjmp(jmp_buf env, int val);

Advanced Programming

Spring 2002

signal example
Signal example

if (signal(SIGUSR1, sigusr1) == SIG_ERR) {

perror("signal");

}

if (setjmp(jmpbuffer) != 0) {

printf("we are done!\n");

exit(1);

}

while (1) {

printf("looping...\n");

}

void sigusr1(int sig)

{

longjmp(jmpbuffer, 1);

}

Advanced Programming

Spring 2002

longjmp
longjmp
  • Careful: return from the wild
  • setjmp() saves stack frame, sigsetjmp() saves registers, too
  • declare variables as volatile!
  • can also save signal mask, priority

Advanced Programming

Spring 2002

example alarm
Example: alarm()

unsigned int alarm(unsigned int s);

  • generates SIGALRM after s seconds
  • returns time to next alarm
  • only one pending alarm
  • s=0 cancels alarm
  • pause() waits until signal

Advanced Programming

Spring 2002

web programming models
Web programming models
  • Web is stateless – send request, get response based on request
  • By default, no global variables or persistent objects
  • Like a function call (also with side effects):
    • http://www.people.com/show.cgi?sort=name&age=17
    • similar to People::Show(Name,17);

Advanced Programming

Spring 2002

web programming
Web programming
  • No state – add client or server state
    • client: cookies encapsulate data
    • server: keep track in database (rare)
  • State leakage – client may never come back
  • Scripts typically deliver HTML, but can provide any data (say, video clip)
    • typically, unstructured user-oriented data
    • <-> RPC

Advanced Programming

Spring 2002

limitations of web model
Limitations of web model
  • We’ll experiment a bit later, but...
  • Error handling in band
  • Conditional programming: many argument combinations
  • user interaction requires new request submission
  • user data checking (JavaScript)
  • synchronous – can’t notify user if something changes

Advanced Programming

Spring 2002

remote procedure calls rpc
Remote procedure calls (RPC)
  • Mimic function calls: arguments, return values, side effects, ...
  • But across network -> client/server computing
  • Many, many implementations:
    • Sun RPC
    • Distributed Computing Environment (DCE), by DEC and OSF
    • Corba
    • Java RemoteMethodInvocation
    • SOAP (HTTP-based)

Advanced Programming

Spring 2002

common functionality
Common functionality
  • Find appropriate server
    • by name
    • by services offered (“service brokering”)
  • Authenticate to server
  • Encapsulate requests
  • Send across network
  • Wait for completion or asynchronous
  • Get result and convert to local representation

Advanced Programming

Spring 2002

ad