1 / 8

Operating System I

Operating System I. Inter-Process Communication. IPC. How does one process communicate with another process? semaphores -- signal notifies waiting process software interrupts -- process notified asynchronously pipes -- unidirectional stream communication

annis
Télécharger la présentation

Operating System I

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. Operating System I Inter-Process Communication

  2. IPC • How does one process communicate with another process? • semaphores -- signal notifies waiting process • software interrupts -- process notified asynchronously • pipes -- unidirectional stream communication • message passing -- processes send and receive messages.

  3. Software Interrupts • Similar to hardware interrupt. • Processes interrupt each other (often for system call) • Asynchronous! Stops execution then restarts • cntl-C • child process completes • alarm scheduled by the process expires • Unix: SIGALRM from alarm() or setitimer() • resource limit exceeded (disk quota, CPU time...) • programming errors: invalid data, divide by zero

  4. Software Interrupts • SendInterrupt(pid, num) • type num to process pid, • kill() in Unix • HandleInterrupt(num, handler) • type num, use function handler • signal() in Unix • Typical handlers: • ignore • terminate (maybe w/core dump) • user-defined

  5. Unreliable Signals • Before POSIX.1 standard: signal(SIGINT, sig_int); ... sig_int() { /* re-establish handler */ signal(SIGINT, sig_int); } • Another signal could come before handler re-established!

  6. more ls Pipes • One process writes, 2nd process reads % ls | more 1 Shell 2 3 stdout stdin • shell: • create a pipe • create a process for ls command, setting stdout to write side of pipe • create a process for more command, setting stdin to read side of pipe

  7. The Pipe • Bounded Buffer • shared buffer (Unix 4096K) • block writes to full pipe • block reads to empty pipe \0 b l a h . c write fd read fd

  8. The Pipe • Process inherits file descriptors from parent • file descriptor 0 stdin, 1 stdout, 2 stderr • Process doesn't know (or care!) when reading from keyboard, file, or process or writing to terminal, file, or process • System calls: • read(fd, buffer, nbytes) (scanf built on top) • write(fd, buffer, nbytes) (printf built on top) • pipe(rgfd) creates a pipe • rgfd array of 2 fd. Read from rgfd[0], write to rgfd[1].

More Related