Programming approaches Henning Schulzrinne Dept. of Computer

23 Slides66.00 KB

Programming approaches Henning Schulzrinne Dept. of Computer Science Columbia University May 7, 2023 Advanced Programming Spring 2002

Programming approaches data-driven Unix filter model event-driven multiple inputs web models cgi multi-layer model RPC-based models May 7, 2023 Advanced Programming Spring 2002 2

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 May 7, 2023 Advanced Programming Spring 2002 3

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 May 7, 2023 Advanced Programming Spring 2002 4

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) May 7, 2023 Advanced Programming Spring 2002 5

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

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 May 7, 2023 Advanced Programming Spring 2002 7

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) May 7, 2023 Advanced Programming Spring 2002 8

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

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() May 7, 2023 Advanced Programming Spring 2002 10

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.” May 7, 2023 Advanced Programming Spring 2002 11

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) May 7, 2023 Advanced Programming Spring 2002 12

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; } May 7, 2023 Advanced Programming Spring 2002 13

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; } May 7, 2023 Advanced Programming Spring 2002 14

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); May 7, 2023 Advanced Programming Spring 2002 15

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); } May 7, 2023 Advanced Programming Spring 2002 16

longjmp Careful: return from the wild setjmp() saves stack frame, sigsetjmp() saves registers, too declare variables as volatile! can also save signal mask, priority May 7, 2023 Advanced Programming Spring 2002 17

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 May 7, 2023 Advanced Programming Spring 2002 18

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); May 7, 2023 Advanced Programming Spring 2002 19

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 May 7, 2023 Advanced Programming Spring 2002 20

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 May 7, 2023 Advanced Programming Spring 2002 21

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) May 7, 2023 Advanced Programming Spring 2002 22

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 May 7, 2023 Advanced Programming Spring 2002 23

Back to top button