A Better Signal()POSIX Sigaction()

Total Page:16

File Type:pdf, Size:1020Kb

A Better Signal()POSIX Sigaction() spcl.inf.ethz.ch spcl.inf.ethz.ch @spcl_eth @spcl_eth ADRIAN PERRIG & TORSTEN HOEFLER Oldskool: signal() Networks and Operating Systems (252-0062-00) Chapter 5: Memory Management void (*signal(int sig, void (*handler)(int))) (int); . Unpacking this: . A handler looks like void my_handler(int); . Signal takes two arguments… An integer (the signal type, e.g., SIGPIPE) A pointer to a handler function http://support.apple.com/kb/HT5642 (Jul. 2015) . … and returns a pointer to a handler function “Description: The iOS kernel has checks to validate that the user-mode The previous handler, pointer and length passed to the copyin and copyout functions would not result in a user-mode process being able to directly access kernel memory. The checks were not being used if the length was smaller than . “Special” handler arguments: one page. This issue was addressed through additional validation of the . SIG_IGN (ignore), SIG_DFL (default), SIG_ERR (error code) arguments to copyin and copyout.” 2 spcl.inf.ethz.ch spcl.inf.ethz.ch @spcl_eth @spcl_eth Unix signal handlers Implications . Signal handler can be called at any time! . There is very little you can safely do in a signal handler! . Can’t safely access program global or static variables . Executes on the current user stack . Some system calls are re-entrant, and can be called . If process is in kernel, may need to retry current system call . Many C library calls cannot (including _r variants!) . Can also be set to run on a different (alternate) stack . Can sometimes execute a longjmp if you are careful . With signal, cannot safely change signal handlers… User process is in undefined state when signal delivered . What happens if another signal arrives? 3 4 spcl.inf.ethz.ch spcl.inf.ethz.ch @spcl_eth @spcl_eth Multiple signals A better signal()POSIX sigaction() . If multiple signals of the same type are to be delivered, Unix will New action for discard all but one. signal signo #include <signal.h> . If signals of different types are to be delivered, Unix will deliver Previous action them in any order. int sigaction(int signo, is returned const struct sigaction *act, struct sigaction *oldact); . Serious concurrency problem: Signal How to make sense of this? struct sigaction { handler void (*sa_handler)(int); Signals to be blocked in this sigset_t sa_mask; handler (cf., fd_set) int sa_flags; void (*sa_sigaction)(int, siginfo_t *, void *); }; More sophisticated signal handler (depending on flags) 5 6 spcl.inf.ethz.ch spcl.inf.ethz.ch @spcl_eth @spcl_eth Signals as upcalls Our Small Quiz . Particularly specialized (and complex) form of Upcall . True or false (raise hand) . Kernel RPC to user process . Mutual exclusion on a multicore can be achieved by disabling interrupts . Test and set can be used to achieve mutual exclusion . Other OSes use upcalls much more heavily . Test and set is more powerful than compare and swap . The CPU retries load-linked/store conditional instructions after a conflict . Including Barrelfish . The best spinning time is 2x the context switch time . “Scheduler Activations”: dispatch every process using an upcall instead of return . Priority inheritance can prevent priority inversion . The receiver never blocks in asynchronous IPC . Very important structuring concept for systems! . The sender blocks in synchronous IPC if the receiver is not ready . A pipe file descriptor can be sent to a different process . Pipes do not guarantee ordering . Named pipes in Unix behave like files . A process can catch all signals with handlers . Signals always trigger actions at the signaled process . One can implement a user-level tasking library using signals . Signals of the same type are buffered in the kernel 7 8 spcl.inf.ethz.ch spcl.inf.ethz.ch @spcl_eth @spcl_eth Goals of Memory Management . Allocate physical memory to applications . Protect an application’s memory from others . Allow applications to share areas of memory . Data, code, etc. Create illusion of a whole address space . Virtualization of the physical address space . Create illusion of more memory than you have . Tomorrow – demand paging . Book: OSPP Chapter 8 9 http://en.wikipedia.org/wiki/Imagery 10 spcl.inf.ethz.ch spcl.inf.ethz.ch @spcl_eth @spcl_eth In CASP last semester we saw: What’s new this semester? . Assorted uses for virtual memory . Wider range of memory management hardware . x86 paging . Base/limit, segmentation . Page table format . Inverted page tables, etc. Translation process . How the OS uses the hardware . Translation lookaside buffers (TLBs) . Demand paging and swapping . Interaction with caches . Page replacement algorithms . Performance implications . Frame allocation policies . For application code, e.g., matrix multiply 11 12 spcl.inf.ethz.ch spcl.inf.ethz.ch @spcl_eth @spcl_eth Terminology Memory management . Physical address: address as seen by the memory unit 1. Allocating physical addresses to applications . Virtual or Logical address: address issued by the processor 2. Managing the name translation of virtual addresses to physical . Loads addresses . Stores 3. Performing access control on memory access . Instruction fetches . Possible others (e.g., TLB fills)… . Functions 2 & 3 usually involve the hardware Memory Management Unit (MMU) 13 14 spcl.inf.ethz.ch spcl.inf.ethz.ch @spcl_eth @spcl_eth Base and Limit Registers . A pair of base and limit registers define the logical address space 0x0000000 Operating System Simple scheme: partitioned memory 0x1000000 Process 0x5600ba0 0x5600ba0 base Process 0x39ef470 0x8ff0010 Process limit 0xB000000 0xfffffff 15 16 spcl.inf.ethz.ch spcl.inf.ethz.ch @spcl_eth @spcl_eth Issue: address binding Dynamic relocation using a relocation register . Base address isn’t known until load time . Options: 1. Compiled code must be completely position-independent, or 2. Relocation Register maps compiled addresses dynamically to physical addresses Relocation register 14000 Logical Physical address address CPU + Memory 346 14346 MMU 17 18 spcl.inf.ethz.ch spcl.inf.ethz.ch @spcl_eth @spcl_eth Contiguous allocation Hardware Support for Relocation and Limit Registers . Main memory usually into two partitions: . Resident OS, usually in low memory with interrupt vector . User processes in high memory . Relocation registers protect user processes from 1. each other Limit Relocation 2. changing operating-system code and data register register . Registers: . Base register contains value of smallest physical address Logical Physical . Limit register contains range of logical addresses address yes address CPU Memory each logical address must be less than the limit register < + . MMU maps logical address dynamically no trap: addressing error 19 20 spcl.inf.ethz.ch spcl.inf.ethz.ch @spcl_eth @spcl_eth Base & Limit summary . Simple to implement (addition & compare) . Physical memory fragmentation . Only a single contiguous address range . How to share data between applications? . How to share program text (code)? . How to load code dynamically? . Total logical address space ≤ physical memory Segmentation 21 22 spcl.inf.ethz.ch spcl.inf.ethz.ch @spcl_eth @spcl_eth Segmentation User’s View of a Program . Generalize base + limit: . Physical memory divided into segments . Logical address = (segment id, offset) stack . Segment identifier supplied by: shared library . Explicit instruction reference . Explicit processor segment register symbol . Implicit instruction or process state table heap main program logical address 23 24 spcl.inf.ethz.ch spcl.inf.ethz.ch @spcl_eth @spcl_eth Segmentation Reality Segmentation Hardware 1 3 limit base 2 1 2 Segment 3 table CPU s d Physical Memory 0 4 yes address 4 < + 0 no logical address trap: addressing error physical memory 25 26 spcl.inf.ethz.ch spcl.inf.ethz.ch @spcl_eth @spcl_eth Segmentation Reality Segmentation Architecture 6000 . Segment table – each entry has: 1 . base – starting physical address of segment 5000 . limit – length of the segment 3 2 4600 . Segment-table base register (STBR) limit base 1 0 300 1500 . Current segment table location in memory 1 1000 5000 3800 2 400 3400 2 . Segment-table length register (STLR) 3 3 400 4600 3400 4 1000 1800 . Current size of segment table segment 2800 table segment number s is legal if s < STLR 0 4 4 1800 0 1500 logical address physical memory 27 28 spcl.inf.ethz.ch spcl.inf.ethz.ch @spcl_eth @spcl_eth Segmentation Summary . Fast context switch . Simply reload STBR/STLR . Fast translation . 2 loads, 2 compares . Segment table can be cached . Segments can easily be shared . Segments can appear in multiple segment tables Paging . Physical layout must still be contiguous . (External) fragmentation still a problem 29 30 spcl.inf.ethz.ch spcl.inf.ethz.ch @spcl_eth @spcl_eth Paging Page table jargon . Solves contiguous physical memory problem . Page tables maps VPNs to PFNs . Process can always fit if there is available free memory . Page table entry = PTE . Divide physical memory into frames . VPN = Virtual Page Number . Size is power of two, e.g., 4096 bytes . Upper bits of virtual or logical address . Divide logical memory into pages of the same size . PFN = Page Frame Number . For a program of n pages in size: . Upper bits of physical or logical address . Find and allocate n frames . Same number of bits (usually). Load program . Set up page table to translate logical pages to physical frames 31 32 spcl.inf.ethz.ch spcl.inf.ethz.ch @spcl_eth @spcl_eth Recall: P6 Page tables (32bit) x86-64 Paging Virtual address 9 9 9 9 12 20 12 VPN1 VPN2 VPN3 VPN4 VPO Logical address: VPN VPO Page Directory Page 20 12 Pointer VPN1 VPN2 PPN PPO Page Map Directory Page Table Table Table Table PDE p=1 PTE p=1 data PDBR PM4LE PDPE PDE PTE Page Page table Data page directory BR . Pages, page directories, page tables all 4kB 40 12 PPN PPO Physical address 33 34 spcl.inf.ethz.ch spcl.inf.ethz.ch @spcl_eth @spcl_eth Problem: performance Translating with the P6 TLB . Every logical memory access needs more than two physical memory accesses 1. Partition VPN into . Load page table entry → PFN CPU TLBT and TLBI. Load desired location 2. Is the PTE for VPN 20 12 virtual address .
Recommended publications
  • Distributed Programming I (Socket - Nov'09)
    Distributed programming I (socket - nov'09) Warning for programmers network programming is dangerously close to O.S. Network programming: sockets kernel, and therefore: It can easily hang the O.S. verify the results of every operation, without assuming anything as granted Antonio Lioy < [email protected] > APIs can vary in details that are minimal but important consider every possible situation to create english version created and modified by “portable” programs Marco D. Aime < [email protected] > we will try to use Posix 1.g Politecnico di Torino Dip. Automatica e Informatica ISO/OSI, TCP/IP, network programming Exercise – copying data copy the content of file F1 (first parameter on the application command line) into file F2 (second parameter on the 7. application details application command line) user 6. presentation (l6: XDR/XML/... process l5: RPC/SOAP/...) 5. session network programming 4. transport TCP UDP SCTP interface 3. network IPv4, IPv6 kernel communication 2. data link device driver details 1. physical and hardware OSI model IP suite ref. UNP Intro copyfile.c Error messages Error functions must contain at least: best to define standard error reporting functions [ PROG ] program name which accept: [ LEVEL ] error level (info, warning, error, bug) a format string for the error [ TEXT ] error signalling, the most specific as possible a list of parameters to be printed (e.g. input file name and line where the problem has UNP, appendix D.4 (D.3 in 3rd edition) occurred) errno? termination? log level [ ERRNO ] system error number and/or name (if applicable) err_msg no no LOG_INFO err_quit no exit(1) LOG_ERR suggested format: err_ret yes no LOG_INFO err_sys yes exit(1) LOG_ERR ( PROG ) LEVEL - TEXT : ERRNO err_dump yes abort( ) LOG_ERR errlib.h errlib.c © A.Lioy - Politecnico di Torino (2009) B-1 Distributed programming I (socket - nov'09) stdarg.h stdarg.h usage example variable list of arguments (ANSI C) create a function named my_printf declared with an ellipsis (.
    [Show full text]
  • Beej's Guide to Unix IPC
    Beej's Guide to Unix IPC Brian “Beej Jorgensen” Hall [email protected] Version 1.1.3 December 1, 2015 Copyright © 2015 Brian “Beej Jorgensen” Hall This guide is written in XML using the vim editor on a Slackware Linux box loaded with GNU tools. The cover “art” and diagrams are produced with Inkscape. The XML is converted into HTML and XSL-FO by custom Python scripts. The XSL-FO output is then munged by Apache FOP to produce PDF documents, using Liberation fonts. The toolchain is composed of 100% Free and Open Source Software. Unless otherwise mutually agreed by the parties in writing, the author offers the work as-is and makes no representations or warranties of any kind concerning the work, express, implied, statutory or otherwise, including, without limitation, warranties of title, merchantibility, fitness for a particular purpose, noninfringement, or the absence of latent or other defects, accuracy, or the presence of absence of errors, whether or not discoverable. Except to the extent required by applicable law, in no event will the author be liable to you on any legal theory for any special, incidental, consequential, punitive or exemplary damages arising out of the use of the work, even if the author has been advised of the possibility of such damages. This document is freely distributable under the terms of the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 License. See the Copyright and Distribution section for details. Copyright © 2015 Brian “Beej Jorgensen” Hall Contents 1. Intro................................................................................................................................................................1 1.1. Audience 1 1.2. Platform and Compiler 1 1.3.
    [Show full text]
  • POSIX Signals
    CSE 410: Systems Programming POSIX Signals Ethan Blanton Department of Computer Science and Engineering University at Buffalo Introduction Signals Blocking Concurrency Sending Signals Summary References POSIX Signals POSIX signals are another form of interprocess communication. They are also a way to create concurrency in programs. For these two reasons, they are rather complicated and subtle! Signals provide a simple message passing mechanism. © 2018 Ethan Blanton / CSE 410: Systems Programming Introduction Signals Blocking Concurrency Sending Signals Summary References Signals as Messages POSIX signals are asynchronous messages. Asynchronous means that their reception can occur at any time.1 The message is the reception of the signal itself. Each signal has a number, which is a small integer. POSIX signals carry no other data. 1Almost. We’ll see how to control it later. © 2018 Ethan Blanton / CSE 410: Systems Programming Introduction Signals Blocking Concurrency Sending Signals Summary References Signal Types There are two basic types of POSIX signals: Reliable signals Real-time signals Real-time signals are much more complicated. In particular, they can carry data. We will discuss only reliable signals in this lecture. © 2018 Ethan Blanton / CSE 410: Systems Programming Introduction Signals Blocking Concurrency Sending Signals Summary References Asynchronous Reception From the point of view of the application: Signals can be blocked or ignored Enabled signals may be received between any two processor instructions A received signal can run a user-defined function called a signal handler This means that enabled signals and program code must very carefully manipulate shared or global data! © 2018 Ethan Blanton / CSE 410: Systems Programming Introduction Signals Blocking Concurrency Sending Signals Summary References Signals POSIX defines a number of signals by name and number.
    [Show full text]
  • Programming with POSIX Threads II
    Programming with POSIX Threads II CS 167 IV–1 Copyright © 2008 Thomas W. Doeppner. All rights reserved. Global Variables int IOfunc( ) { extern int errno; ... if (write(fd, buffer, size) == –1) { if (errno == EIO) fprintf(stderr, "IO problems ...\n"); ... return(0); } ... } CS 167 IV–2 Copyright © 2008 Thomas W. Doeppner. All rights reserved. Unix was not designed with multithreaded programming in mind. A good example of the implications of this is the manner in which error codes for failed system calls are made available to a program: if a system call fails, it returns –1 and the error code is stored in the global variable errno. Though this is not all that bad for single-threaded programs, it is plain wrong for multithreaded programs. Coping • Fix Unix’s C/system-call interface • Make errno refer to a different location in each thread – e.g. #define errno __errno(thread_ID) CS 167 IV–3 Copyright © 2008 Thomas W. Doeppner. All rights reserved. The ideal way to solve the “errno problem” would be to redesign the C/system-call interface: system calls should return only an error code. Anything else to be returned should be returned via result parameters. (This is how things are done in Windows NT.) Unfortunately, this is not possible (it would break pretty much every Unix program in existence). So we are stuck with errno. What can we do to make errno coexist with multithreaded programming? What would help would be to arrange, somehow, that each thread has its own private copy of errno. I.e., whenever a thread refers to errno, it refers to a different location from any other thread when it refers to errno.
    [Show full text]
  • UNIT: 4 DISTRIBUTED COMPUTING Introduction to Distributed Programming
    UNIT: 4 DISTRIBUTED COMPUTING Introduction To Distributed Programming: • Distributed computing is a model in which components of a software system are shared among multiple computers. Even though the components are spread out across multiple computers, they are run as one system. This is done in order to improve efficiency and performance. • Distributed computing allows different users or computers to share information. Distributed computing can allow an application on one machine to leverage processing power, memory, or storage on another machine. Some applications, such as word processing, might not benefit from distribution at all. • In parallel computing, all processors may have access to a shared memory to exchange information between processors. In distributed computing, each processor has its own private memory (distributed memory). Information is exchanged by passing messages between the processors. • Distributed computing systems are omnipresent in today’s world. The rapid progress in the semiconductor and networking infrastructures have blurred the differentiation between parallel and distributed computing systems and made distributed computing a workable alternative to high- performance parallel architectures. • However attractive distributed computing may be, developing software for such systems is hardly a trivial task. Many different models and technologies have been proposed by academia and industry for developing robust distributed software systems. • Despite a large number of such systems, one fact is clear that the software
    [Show full text]
  • Introduction to POSIX Signals
    Introduction to POSIX Signals Michael Jantz Prasad Kulkarni Douglas Niehaus Introduction ● This lab is an introduction to signals in Unix systems. – In it, you will learn about some common uses for signals. – You will also construct a small program that uses signals. ● Unpack the starter code, then make and tag it: – bash> tar zxvf eecs678-signals-lab.tar.gz – cd signals/; make; ctags -R EECS 678 Signals Lab 2 Signals ● A signal is a short message that may be sent to a process or a group of processes. ● The only information given to a process is usually the number identifying the signal; there is no room in standard signals for arguments, a message or other accompanying information. ● Signals serve two main purposes: – To make a process aware that a specific event has occurred. – To cause a process to execute a signal handler function included in its code. EECS 678 Signals Lab 3 Interrupts vs. Signals ● Signals and interrupts are very similar in their behavior ● Important difference: interrupts are sent to the operating system by the hardware, signals are sent to the process by the operating system, or other processes through the OS ● Important similarity: both signals and interrupts associate handlers with asynchronous events which interrupt current processing, thus inserting the handler into current code path ● Signals can thus be thought of as an interrupt in software: – However, note that signals have nothing to do with Soft-IRQs. The name seems related, but these are a method for deferring much of the processing associated with a hardware-interrupt into a less restrictive execution context inside the OS.
    [Show full text]
  • POSIX Signal Handling in Java
    Technical Document Series POSIX Signal Handling in Java POSIX Signal Handling In Java Introduction POSIX signals inform a running process of external events, such as the user wishing to kill the process, or the operating system signaling an impending shutdown, or the process being suspended or reinstated; or the process may have violated a resource constraint, such as excessive CPU usage or attempts to access areas outside its permitted memory space, and is asked to shutdown. In short, POSIX signals serve many different purposes. Some are even up to interpretation, such as the HUP (HangUP) signal, which is commonly used to inform a process that something about its environment has changed and the process should adjust accordingly. Some programs may interpret this to mean that the configuration has changed and needs to be reloaded; or the log file has been moved for archiving purposes and a new one should be started. The use of signals is widespread, especially on Unix-based operating systems, but Java provides no standard interface for a Java application to hear and react to them. This document shows you how to get around this limitation. The Good, the Bad, and the Ugly The good news is that there is a way to intercept POSIX signals and react to them in Java. This would allow your Java program to avoid being killable with ^C (SIGINT), for example, even ignore termination requests from the operating system (SIGTERM). Neither of these is necessarily a good idea, of course, unless you know exactly why you would want to catch these signals and either handle them yourself or ignore them altogether.
    [Show full text]
  • Lecture 14: Paging
    Lecture 14: Paging Fall 2018 Jason Tang Slides based upon Operating System Concept slides, http://codex.cs.yale.edu/avi/os-book/OS9/slide-dir/index.html Copyright Silberschatz, Galvin, and Gagne, 2013 "1 Topics • Memory Mappings! • Page Table! • Translation Lookaside Bu$ers! • Page Protection "2 Memory Mapped • Logical address translated not to memory but some other location! • Memory-mapped I/O (MMIO): hardware redirects read/write of certain addresses to physical device! • For example, on x86, address 0x3F8 usually mapped to first serial port! • Memory-mapped file (mmap): OS redirects read/write of mapped memory region to file on disk! • Every call to read() / write() involves a system call! • Writing to a pointer faster, and OS can translate in the background (also see upcoming lecture) "3 Memory-Mapped File • In Linux, typical pattern is to:! • Open file, using open() function! • Optional: preallocate file size, using ftruncate()! • Create memory mapping, using mmap() function! • Do work, and then release mapping using munmap() function! • Kernel might not write data to disk until munmap() "4 mmap() function void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset) • addr is target address of mapping, or NULL to let kernel decide! • length is number of bytes to map! • prot defines what mapping protection (read-only or read/write)! • flags sets other options! • fd is file descriptor that was returned by open()! • offset is o$set into file specified by fd "5 mmap() example part 1 • See man page for each of these functions
    [Show full text]
  • Interprocess Communication 1 Processes • Basic Concept to Build
    Interprocess Communication 1 Processes • Basic concept to build the OS, from old IBM mainframe OS to the most modern Windows • Used to express the requirements to be met by an OS – Interleave the execution of multiple processes, to maximize CPU utilization while providing good response time – Allocate resources to processes using a policy while avoiding deadlocks – Support interprocess communications and user creation of processes to help structuring applications • Background – Computer platform * Collection of hardware resources – CPU, memory, I/O modules, timers, storage devices – Computer applications * Developed to perform some task * Input, processing, output – Efficient to write applications for a given CPU * Common routines to access computer resources across platforms * CPU provides only limited support for multiprogramming; software manages sharing of CPU and other re- sources by multiple applications concurrently * Data and resources for multiple concurrent applications must be protected from other applications • Process – Abstraction of a running program – Unit of work in the system – Split into two abstractions in modern OS * Resource ownership (traditional process view) * Stream of instruction execution (thread) – Pseudoparallelism, or interleaved instructions – A process is traced by listing the sequence of instructions that execute for that process • Modeling sequential process/task – Program during execution – Program code – Current activity – Process stack * Function parameters * Return addresses * Temporary variables –
    [Show full text]
  • Dressing up Data For
    Dressing up data for Hannes Mühleisen DSC 2017 Problem? • People push large amounts of data into R • Databases, Parquet/Feather … • Need native SEXP for compatibility • R has no abstraction for data access • INTEGER(A)[i] * INTEGER(B)[j] etc. • Data possibly never actually used 2 Sometimes lucky • Perfectly compatible bits: • int my_int_arr[100]; • double my_dbl_arr[100]; • Doctor SEXP header in front of data and good to go • Implemented in MonetDBLite with custom allocator • Next version on CRAN will have this https://github.com/hannesmuehleisen/MonetDBLite 3 Zero-Copy in MonetDBLite Page 1 Page 2 Page 3 Page 4 Page 5 addr = mmap(col_file, len, NULL) col_file addr addr1 = mmap(NULL, len + PAGE_SIZE, NULL) addr2 = mmap(col_file, len, addr1 + 4096) addr3 = addr1 + PAGE_SIZE - sizeof(SEXPREC_ALIGN) SEXP res = allocVector3(INTSXP, len/sizeof(int), &allocator); Page 0 Page 1 Page 2 Page 3 Page 4 Page 5 col_file addr1 res & addr3 4 Demo 1 Stock R, MonetDBLite & zero-copy library(“DBI”) con <- dbConnect(MonetDBLite::MonetDBLite(), "/tmp/dscdemo") dbGetQuery(con, "SELECT COUNT(*) FROM onebillion”) # 1 1e+09 system.time(a <- dbGetQuery(con, "SELECT i FROM onebillion”)) # user system elapsed # 0.032 0.000 0.033 .Internal(inspect(a$i)) # @20126efd8 13 INTSXP g0c6 [NAM(2)] (len=1000000000, tl=0) 1,2,3,4,5,... Native R Vector w. zero-copy! 5 Not always so lucky • What if we have to actually convert? • Strings, TIMESTAMP to POSIXct etc. • NULL/NA mismatches • More involved data representations • compressed, batched, hybrid row/col, … • Need to convert all data before handing control over to R. • Can take forever, takes memory, non-obvious wait time 6 ALTREP • Luke Tierney, Gabe Becker & Tomas Kalibera • Abstract vectors, ELT()/GET_REGION() methods • Lazy conversion! static void monetdb_altrep_init_int(DllInfo *dll) { R_altrep_class_t cls = R_make_altinteger_class(/* .
    [Show full text]
  • Signals and Pipes
    Signals and Pipes Signals and Pipes 1/20 Learning Objectives Signals and Pipes I Understand synchronization issues with respect to signals I Learn about the client-server model using pipes and named pipes I Understand basic concepts of servers and daemons 2/20 More on Signals Signals and Pipes I Two main system calls that deal with signals: signal() and sigaction(). The sigaction() call is consistent across various systems whereas signal() is not necessarily consistent across systems but is simpler to use. See man page for details on both. I Examples: I signal-ex1.c I signal-ex2.c 3/20 Signal Handling after Exec Signals and When a program is exec’d the status of all signals is either default or Pipes ignore. The exec functions changes the disposition of any signals that are being caught to their default action (why?) and leaves the status of all other signals alone. For example: if (fork()==0) {// the child process if(signal(SIGINT, SIG_IGN) == SIG_ERR) err_ret ("failed␣to␣set␣SIGINT␣behavior"); if(signal(SIGTSTP, SIG_IGN) == SIG_ERR) err_ret ("failed␣to␣set␣SIGTSTP␣behavior"); execvp(program, argv); // the exec 'd program will ignore the // signalsSIGINT andSIGTSTP 4/20 Signal Handling for an Application Signals and How an application ought to set its signal handling: Pipes An application process should catch the signal only if the signal is not currently being ignored. int sig_int(), sig_quit(); if(signal(SIGINT, SIG_IGN) != SIG_IGN) signal(SIGINT, sig_int); if(signal(SIGQUIT, SIG_IGN) != SIG_IGN) signal(SIGQUIT, sig_quit); See code example: signal-ex3.c 5/20 Other Signal Issues Signals and Pipes I Signals are set to their default after being caught (under Linux and System V UNIX semantics).
    [Show full text]
  • 6.828: Virtual Memory for User Programs
    6.828: Virtual Memory for User Programs Adam Belay <[email protected]> Plan for today • Previously: Discussed using virtual memory tricks to optimize the kernel • This lecture is about virtual memory for user programs: • Concurrent garbage collection • Generational garbage collection • Concurrent checkpointing • Data-compression paging • Persistent stores What primitives do we need? • Trap: handle page-fault traps in usermode • Prot1: decrease the accessibility of a page • ProtN: decrease the accessibility of N pages • Unprot: increase the accessibility of a page • Dirty: returns a list of dirtied pages since previous call • Map2: map the same physical page at two different virtual addresses, at different levels of protection, in the same address space What about UNIX? • Processes manage virtual memory through higher- level abstractions • An address space consists of a non-overlapping list of Virtual Memory Areas (VMAs) and a page table • Each VMA is a contiguous range of virtual addresses that shares the same permissions and is backed by the same object (e.g. a file or anonymous memory) • VMAs help the kernel decide how to handle page faults Unix: mmap() • Maps memory into the address space • Many flags and options • Example: mapping a file mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, offset); • Example: mapping anonymous memory mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); Unix: mprotect() • Changes the permissions of a mapping • PROT_READ, PROT_WRITE, and PROT_EXEC • Example: make mapping read-only mprotect(addr, len, PROT_READ); • Example: make mapping trap on any acCess mprotect(addr, len, PROT_NONE); Unix: munmap() • Removes a mapping • Example: munmap(addr, len); Unix: sigaction() • Configures a signal handler • Example: get signals for memory access violations act.sa_sigaction = handle_sigsegv; act.sa_flags = SA_SIGINFO; sigemptyset(&act.sa_mask); sigaction(SIGSEGV, &act, NULL); Unix: Modern implementations are very complex e.g.
    [Show full text]