1 / 23

Programming approaches

Learn about data-driven programming, event-driven programming, and Unix filter models in advanced programming. Understand the advantages and problems of each approach.

jeannettek
Download Presentation

Programming approaches

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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programming approaches Henning Schulzrinne Dept. of Computer Science Columbia University Advanced Programming Spring 2002

  2. Programming approaches • data-driven • Unix filter model • event-driven • multiple inputs • web models • cgi • multi-layer model • RPC-based models Advanced Programming Spring 2002

  3. 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

  4. 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

  5. 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

  6. Event-driven programming • Asynchronous vs. synchronous: • synchronous: wait until operation completes • asynchronous: program is notified when operation completes Advanced Programming Spring 2002

  7. 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

  8. 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

  9. Signal handling • Signals can be ignored (most of them) or caught • Default actions: • ignore • catch • abort • abort with core dump Advanced Programming Spring 2002

  10. 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

  11. 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

  12. 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

  13. 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

  14. 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

  15. 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

  16. 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

  17. 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

  18. 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

  19. 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

  20. 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

  21. 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

  22. 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

  23. 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

More Related