System- Level I/O. Andrew Case. Slides adapted from Jinyang Li, Randy Bryant and Dave O Hallaron

Similar documents
Lecture 23: System-Level I/O

File I/O. Dong-kun Shin Embedded Software Laboratory Sungkyunkwan University Embedded Software Lab.

File Input and Output (I/O)

File I/O. Jin-Soo Kim Computer Systems Laboratory Sungkyunkwan University

System- Level I/O. CS 485 Systems Programming Fall Instructor: James Griffioen

Contents. Programming Assignment 0 review & NOTICE. File IO & File IO exercise. What will be next project?

All the scoring jobs will be done by script

Introduction to Computer Systems , fall th Lecture, Oct. 19 th

All the scoring jobs will be done by script

System-Level I/O. Topics Unix I/O Robust reading and writing Reading file metadata Sharing files I/O redirection Standard I/O

Contents. NOTICE & Programming Assignment 0 review. What will be next project? File IO & File IO exercise

System-Level I/O Nov 14, 2002

System-Level I/O : Introduction to Computer Systems 16 th Lecture, March 23, Instructors: Franz Franchetti & Seth Copen Goldstein

System-Level I/O March 31, 2005

A Typical Hardware System The course that gives CMU its Zip! System-Level I/O Nov 14, 2002

Hyo-bong Son Computer Systems Laboratory Sungkyunkwan University

CS 201. Files and I/O. Gerson Robboy Portland State University

UNIX I/O. Computer Systems: A Programmer's Perspective, Randal E. Bryant and David R. O'Hallaron Prentice Hall, 3 rd edition, 2016, Chapter 10

The course that gives CMU its Zip! I/O Nov 15, 2001

Foundations of Computer Systems

System- Level I/O /18-243: Introduc3on to Computer Systems 16 th Lecture, Mar. 15, Instructors: Gregory Kesden and Anthony Rowe

System-Level I/O. William J. Taffe Plymouth State University. Using the Slides of Randall E. Bryant Carnegie Mellon University

Contents. NOTICE & Programming Assignment #1. QnA about last exercise. File IO exercise

Unix programming interface for file I/O operations and pipes

Important Dates. October 27 th Homework 2 Due. October 29 th Midterm

Operating System Labs. Yuanbin Wu

Contents. IPC (Inter-Process Communication) Representation of open files in kernel I/O redirection Anonymous Pipe Named Pipe (FIFO)

Pipes and FIFOs. Woo-Yeong Jeong Computer Systems Laboratory Sungkyunkwan University

System-Level I/O April 6, 2006

UNIX System Calls. Sys Calls versus Library Func

Contents. PA1 review and introduction to PA2. IPC (Inter-Process Communication) Exercise. I/O redirection Pipes FIFOs

structs as arguments

I/O OPERATIONS. UNIX Programming 2014 Fall by Euiseong Seo

Operating System Labs. Yuanbin Wu

I/O OPERATIONS. UNIX Programming 2014 Fall by Euiseong Seo

Memory Mapped I/O. Michael Jantz. Prasad Kulkarni. EECS 678 Memory Mapped I/O Lab 1

CSC 271 Software I: Utilities and Internals

Process Management! Goals of this Lecture!

File Systems. q Files and directories q Sharing and protection q File & directory implementation

File Systems. Today. Next. Files and directories File & directory implementation Sharing and protection. File system management & examples

File Descriptors and Piping

CSE 333 SECTION 3. POSIX I/O Functions

File System (FS) Highlights

CS , Spring Sample Exam 3

Process Management 1

Outline. OS Interface to Devices. System Input/Output. CSCI 4061 Introduction to Operating Systems. System I/O and Files. Instructor: Abhishek Chandra

39. File and Directories

everything is a file main.c a.out /dev/sda1 /dev/tty2 /proc/cpuinfo file descriptor int

Unix File and I/O. Outline. Storing Information. File Systems. (USP Chapters 4 and 5) Instructor: Dr. Tongping Liu

Operating Systems CMPSCI 377 Spring Mark Corner University of Massachusetts Amherst

System Calls. Library Functions Vs. System Calls. Library Functions Vs. System Calls

17: Filesystem Examples: CD-ROM, MS-DOS, Unix

Ricardo Rocha. Department of Computer Science Faculty of Sciences University of Porto

CSci 4061 Introduction to Operating Systems. File Systems: Basics

CSE 410: Systems Programming

Files and Directories Filesystems from a user s perspective

Design Choices 2 / 29

CSE 333 SECTION 3. POSIX I/O Functions

Computer Science & Engineering Department I. I. T. Kharagpur

Process Creation in UNIX

Process Management! Goals of this Lecture!

which maintain a name to inode mapping which is convenient for people to use. All le objects are

15-213/18-243, Spring 2011 Exam 2

628 Lecture Notes Week 4

Naked C Lecture 6. File Operations and System Calls

OPERATING SYSTEMS: Lesson 2: Operating System Services

The link() System Call. Preview. The link() System Call. The link() System Call. The unlink() System Call 9/25/2017

UNIX System Programming

CSC209H Lecture 6. Dan Zingaro. February 11, 2015

Goals of this Lecture

I/O Management! Goals of this Lecture!

I/O Management! Goals of this Lecture!

Accessing Files in C. Professor Hugh C. Lauer CS-2303, System Programming Concepts

What Is Operating System? Operating Systems, System Calls, and Buffered I/O. Academic Computers in 1983 and Operating System

Advanced Systems Security: Ordinary Operating Systems

System Calls and I/O Appendix. Copyright : University of Illinois CS 241 Staff 1

CSE 410: Systems Programming

Inter-Process Communication

프로세스간통신 (Interprocess communication) i 숙명여대창병모

Layers in a UNIX System. Create a new process. Processes in UNIX. fildescriptors streams pipe(2) labinstructions

CSC209F Midterm (L0101) Fall 1999 University of Toronto Department of Computer Science

Basic OS Progamming Abstrac7ons

UNIX input and output

Ricardo Rocha. Department of Computer Science Faculty of Sciences University of Porto

Basic OS Progamming Abstrac2ons

Chapter 4 - Files and Directories. Information about files and directories Management of files and directories

SOFTWARE ARCHITECTURE 3. SHELL

INTRODUCTION TO UNIX FILE SYSTEM:

Lecture 21 Systems Programming in C

CMSC 216 Introduction to Computer Systems Lecture 17 Process Control and System-Level I/O

CS240: Programming in C

Recitation 8: Tshlab + VM

Master Calcul Scientifique - Mise à niveau en Informatique Written exam : 3 hours

CS 33. Shells and Files. CS33 Intro to Computer Systems XX 1 Copyright 2017 Thomas W. Doeppner. All rights reserved.

Lecture files in /home/hwang/cs375/lecture05 on csserver.

Files and Directories

Systems Programming. COSC Software Tools. Systems Programming. High-Level vs. Low-Level. High-Level vs. Low-Level.

Fall 2017 :: CSE 306. File Systems Basics. Nima Honarmand

Thesis, antithesis, synthesis

Princeton University Computer Science 217: Introduction to Programming Systems I/O Management

Transcription:

System- Level I/O Andrew Case Slides adapted from Jinyang Li, Randy Bryant and Dave O Hallaron 1

Unix I/O and Files UNIX abstracts many things into files (just a series of bytes) All I/O devices are represented as files: /dev/sda2 (/usr disk paraaon) /dev/tty2 (terminal) Even the kernel is represented as a file: /dev/kmem (kernel memory image) /proc (kernel data structures) 2

Unix File Types Regular file File containing user/app data (binary, text, whatever) OS does not know anything about the format other than sequence of bytes, akin to main memory Directory file A file that contains the names and locaaons of other files Character special and block special files Terminals (character special) and disks (block special) FIFO (named pipe) A file type used for inter- process communicaaon Socket A file type used for network communicaaon between processes 3

Unix I/O Key Features All input and output is handled in a consistent and uniform way Basic Unix I/O operaoons (system calls): Opening and closing files open()and close() Reading and wriang a file read() and write() Changing the current file posi.on (seek) indicates next offset into file to read or write lseek() B 0 B 1 B k- 1 B k B k+1 Current file posioon = k 4

Opening Files Open a file before access: Returns a small integer file descriptor (or - 1 for error) int fd; /* file descriptor */ if ((fd = open( X", O_RDONLY)) < 0) { perror("open"); exit(1); For more info, do man 2 open Why fd? Kernel maintains an array of info on currently opened files for a process fd indexes into this in- kernel array Each process starts out with three open files 0: standard input 1: standard output 2: standard error 5

Closing Files Closing a file informs the kernel that you are finished accessing that file int fd; /* file descriptor */ int retval; /* return value */ if ((retval = close(fd)) < 0) { perror("close"); exit(1); 6

Simple read/write example Copying standard in to standard out, one byte at a Ome #include <stdio.h> int main(void) { char c; Returns # of bytes read, - 1 for error while(read(0, &c, 1) == 1){ write(1, &c, 1); exit(0); cpstdin.c Returns # of bytes wriwen, - 1 for error 7

Topics Unix I/O Metadata, sharing, and redirecoon Standard I/O Conclusions and examples 8

File Metadata (data about data) Per- file metadata maintained by kernel accessed by users with the stat and fstat funcaons /* Metadata returned by the stat and fstat functions */ struct stat { dev_t st_dev; /* device */ ino_t st_ino; /* inode */ mode_t st_mode; /* protection and file type */ nlink_t st_nlink; /* number of hard links */ uid_t st_uid; /* user ID of owner */ gid_t st_gid; /* group ID of owner */ dev_t st_rdev; /* device type (if inode device) */ off_t st_size; /* total size, in bytes */ unsigned long st_blksize; /* blocksize for filesystem I/O */ unsigned long st_blocks; /* number of blocks allocated */ time_t st_atime; /* time of last access */ time_t st_mtime; /* time of last modification */ time_t st_ctime; /* time of last change */ ; 9

Example of Accessing File Metadata /* statcheck.c - Querying and manipulating a file s meta data */ #include "csapp.h" unix>./statcheck statcheck.c int main (int argc, char **argv) type: regular, read: yes { unix> chmod 000 statcheck.c struct stat stat; unix>./statcheck statcheck.c char *type, *readok; type: regular, read: no unix>./statcheck.. stat(argv[1], &stat); type: directory, read: yes if (S_ISREG(stat.st_mode)) unix>./statcheck /dev/kmem type = "regular"; type: other, read: yes else if (S_ISDIR(stat.st_mode)) type = "directory"; else type = "other"; if ((stat.st_mode & S_IRUSR)) /* OK to read?*/ readok = "yes"; else readok = "no"; printf("type: %s, read: %s\n", type, readok); exit(0); statcheck.c 10

Accessing Directories Only recommended operaoon on a directory: read its entries dirent structure contains informaaon about a directory entry DIR structure contains informaaon about directory while stepping through its entries #include <sys/types.h> #include <dirent.h> { DIR *directory; struct dirent *de; if (!(directory = opendir(dir_name))) error("failed to open directory"); while (0!= (de = readdir(directory))) { printf("found file: %s\n", de->d_name); closedir(directory); 11

Kernel tracks user processes opened files kernel state Descriptor table [one table per process] Open file table [shared by all processes] v- node table [shared by all processes] stdin stdout stderr fd 0 fd 1 fd 2 fd 3 fd 4 File A (terminal) File pos refcnt=1 File access File size File type Info in stat struct File B (disk) File access File pos refcnt=1 File size File type 12

Kernel tracks user processes opened files Calling open twice with the same filename Descriptor table [one table per process] Open file table [shared by all processes] v- node table [shared by all processes] stdin stdout stderr fd 0 fd 1 fd 2 fd 3 fd 4 File A (disk) File pos refcnt=1 File access File size File type File B (disk) File pos refcnt=1 13

Child process inherits its parent s open files Before fork() call: Descriptor table [one table per process] Open file table [shared by all processes] v- node table [shared by all processes] stdin stdout stderr fd 0 fd 1 fd 2 fd 3 fd 4 File A (terminal) File pos refcnt=1 File access File size File type File B (disk) File access File pos refcnt=1 File size File type 14

Child process inherits its parent s open files A3er fork(): Child s descriptor table same as parent s, and +1 to each refcnt Descriptor table [one table per process] Open file table [shared by all processes] v- node table [shared by all processes] fd 0 fd 1 fd 2 fd 3 fd 4 Parent File A (terminal) File pos refcnt=2 File access File size File type fd 0 fd 1 fd 2 fd 3 fd 4 Child File B (disk) File pos refcnt=2 File access File size File type 15

Fun with File Descriptors (fork) #include <stdio.h> #include <fcntl.h> unix>./fd_fork int main(int argc, char *argv[]) Parent: c1 = a, c2 = b { Child: c1 = a, c2 = c int fd1; char c1, c2; char *fname = argv[1]; fd1 = open(fname, O_RDONLY, 0); read(fd1, &c1, 1); if (fork()) { /* Parent */ read(fd1, &c2, 1); printf("parent: c1 = %c, c2 = %c\n", c1, c2); else { /* Child */ sleep(5); read(fd1, &c2, 1); printf("child: c1 = %c, c2 = %c\n", c1, c2); return 0; What would this program print for file containing abcde? 16

I/O RedirecOon How does a shell redirect I/O? unix$ ls > foo.txt Use syscall dup2(oldfd, newfd) Copies descriptor table entry oldfd to entry newfd Descriptor table before dup2(4,1) Descriptor table a3er dup2(4,1) fd 0 fd 1 fd 2 fd 3 fd 4 file a file b fd 0 fd 1 fd 2 fd 3 fd 4 file b file b 17

Fun with File Descriptors (dup2) #include <stdio.h> #include <fcntl.h> unix>./ffiles1 abcde.txt int main(int argc, char *argv[]) c1 = a, c2 = a, c3 = b { int fd1, fd2, fd3; char c1, c2, c3; char *fname = argv[1]; fd1 = open(fname, O_RDONLY, 0); fd2 = open(fname, O_RDONLY, 0); fd3 = open(fname, O_RDONLY, 0); dup2(fd2, fd3); read(fd1, &c1, 1); read(fd2, &c2, 1); read(fd3, &c3, 1); printf("c1 = %c, c2 = %c, c3 = %c\n", c1, c2, c3); return 0; ffiles1.c What would this program print for file containing abcde? 18

Shell I/O redirecoon Exercise: implement shell I/O redirect funcoonality using dup2 unix$ ls > foo.txt 19

I/O RedirecOon Example Step #1: open file to which stdout should be redirected Do it in parent or child? Before or a[er calling exec? Descriptor table [one table per process] Open file table [shared by all processes] v- node table [shared by all processes] stdin stdout stderr fd 0 fd 1 fd 2 fd 3 fd 4 File A File pos refcnt=1 File access File size File type Opened file has fd=4 File B File pos refcnt=1 File access File size File type 20

I/O RedirecOon Example (cont.) Step #2: call dup2(4,1) cause fd=1 (stdout) to refer to disk file pointed at by fd=4 Descriptor table [one table per process] Open file table [shared by all processes] v- node table [shared by all processes] stdin stdout stderr fd 0 fd 1 fd 2 fd 3 fd 4 File A File pos refcnt=0 File access File size File type File B File access File pos refcnt=2 File size File type 21

Shell I/O redirecoon // Parse commandline to obtain prog, its arguments // and redirected to file out // Here? if ((pid = fork())==0) { // Here? // Where does this code go? fd = open(out, O_WRONLY O_CREAT); dup2(fd,1); close(fd); if (execve(prog, ) < 0) { // Here? printf( %s: command not found\n, prog); exit(0); if (!bg) { // Here? waitpid(pid, ); 22

Shell I/O redirecoon // Parse commandline to obtain prog, its arguments // and redirected to file out if ((pid = fork())==0) { fd = open(out, O_WRONLY O_CREAT); dup2(fd,1); close(fd); if (execve(prog, ) < 0) { printf( %s: command not found\n, prog); exit(0); if (!bg) { waitpid(pid, ); 23

Topics Unix I/O Metadata, sharing, and redirecoon Standard I/O Conclusions and examples 24

Standard I/O FuncOons The C library (libc.so) contains a collecoon of higher- level standard I/O funcoons fopen flcose fdopen fread fwrite fscanf fprintf sscanf sprintf fgets fputs fflush fseek Internally invokes I/O syscalls open read write lseek stat close 25

Standard I/O Streams Standard I/O implements buffered streams AbstracAon for a file descriptor and a buffer in memory. C programs begin life with three open streams stdin (standard input) stdout (standard output) stderr (standard error) #include <stdio.h> extern FILE *stdin; /* standard input (descriptor 0) */ extern FILE *stdout; /* standard output (descriptor 1) */ extern FILE *stderr; /* standard error (descriptor 2) */ int main() { fprintf(stdout, "Hello, world\n"); 26

Buffering in Standard I/O Standard I/O funcoons use buffered I/O buf printf("h"); printf("e"); printf("l"); printf("l"); printf("o"); printf("\n"); h e l l o \n.. fflush(stdout); write(1, buf, 6); Buffer flushed to output fd on \n or fflush() call 27

Unix I/O vs. standard I/O Unix I/O: + most general, lowest overhead (no intermediate funcaons) + provides funcaons for accessing file metadata + can be used safely in signal handlers - no built- in buffering Standard I/O: + buffering increases efficiency by reducing # of read and write system calls - no metadata access - not appropriate for signal handlers. - not appropriate for input and output on network sockets 28

Choosing I/O FuncOons General rule: use the highest- level I/O available Many C programs are able to do all of their work using the standard I/O When to use standard I/O When working with disk or terminal files When to use raw Unix I/O Inside signal handlers, because Unix I/O is async- signal- safe When you are reading and wriang network sockets. In rare cases when you can tune for absolute highest performance 29

Standard I/O Buffering in AcOon See buffering in using the strace program: #include <stdio.h> int main() { printf("h"); printf("e"); printf("l"); printf("l"); printf("o"); printf("\n"); fflush(stdout); exit(0); linux> strace./hello execve("./hello", ["hello"], [/* */]). write(1, "hello\n", 6) = 6 exit_group(0) =? 30