Programming approaches
Download
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 l.jpg

Programming approaches

Henning Schulzrinne

Dept. of Computer Science

Columbia University

Advanced Programming

Spring 2002


Programming approaches2 l.jpg
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 l.jpg
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 l.jpg
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 l.jpg
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 l.jpg
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 l.jpg
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 l.jpg
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 l.jpg
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 l.jpg
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 l.jpg
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 l.jpg
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 l.jpg
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 l.jpg
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 l.jpg
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 l.jpg
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 l.jpg
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 l.jpg
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 l.jpg
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 l.jpg
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 l.jpg
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 l.jpg
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 l.jpg
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