Top Banner
UNIX Files File organization and a few primitives
22

UNIX Files

Jan 01, 2016

Download

Documents

Quinn Tran

UNIX Files. File organization and a few primitives. The UNIX file system!. Each UNIX file has a description that is stored in a structure called inode . An inode includes: file size location owner (uid) permissions access times etc. Directories. - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: UNIX Files

UNIX Files

File organization and a few primitives

Page 2: UNIX Files

The UNIX file system! Each UNIX file has a description that is stored

in a structure called inode. An inode includes:• file size• location• owner (uid)• permissions• access times• etc.

Page 3: UNIX Files

Directories A UNIX directory is a file containing a

correspondence between inodes and filenames.

When referencing a file, the Operating System (OS) traverses the File System tree to find the inode/name in the appropriate directory.

Once the OS has determined the inode number it can access the inode to get information about the file.

Page 4: UNIX Files

Links A link is an association between a filename

and an inode. We distinguish 2 types of links:• hard links• soft (or symbolic) links

Directory entries are hard links as they directly link an inode to a filename.

Symbolic links use the file (contents) as a pointer to another filename.

Page 5: UNIX Files

More on links each inode may be pointed to by a number of

directory entries (hard links) each inode keeps a counter, indicating how

many hard links exist to that inode. When a hard link is removed via the rm or

unlink command, the OS removes the corresponding link but does not free the inode and corresponding data blocks until the link count is 0

Page 6: UNIX Files

Different types of files UNIX deals with two different classes of files:

• Special Files• Regular Files

Regular files are just ordinary data files on disk - something you have used all along when you studied programming!

Special files are abstractions of devices. UNIX deals with devices as if they were regular files.

The interface between the file system and the device is implemented through a device driver - a program that hides the details of the actual device.

Page 7: UNIX Files

special files UNIX distinguishes two types of special files:

• Block Special Files represent a device with characteristics similar to a disk. The device driver transfers chunks or blocks of data between the operating system and the device.

• Character Special Files represent devices with characteristics similar to a keyboard. The device is abstracted by a stream of bytes that can only be accessed in sequential order.

Page 8: UNIX Files

Access Primitives UNIX provides access to files and devices

through a (very) small set of basic system calls (primitives)

• create()• open()• close()• read()• write()• ioctl()

Page 9: UNIX Files

the open() call#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int open(const char *path, int flags, [mode_t mode]);

char *path: is a string that contains the fully qualified filename of the file to be opened.

int flags: specifies the method of access i.e. read_only, write_only read_and_write.

mode_t mode: optional parameter used to set the access permissions upon file creation.

Page 10: UNIX Files

read() and write()#include <unistd.h>ssize_t read(int filedes, void *buffer, size_t n);ssize_t write(int filedes, const void *buffer, size_t n);

int filedes: file descriptor that has been obtained though an open() or create() call.

void *buffer: pointer to an array that will hold the data that is read or holds the data to be written.

size_t n: the number of bytes that are to be read or written from/to the file.

Page 11: UNIX Files

A close() callAlthough all open files are closed by the OS upon

completion of the program, it is good programming style to “clean up” after you are done with any system resource.

Please make it a habit to close all files that your program has used as soon as you don’t need them anymore!

#include <unistd.h>int close(int filedes);

Remember, closing resources timely can improve system performance and prevent deadlocks from happening (more later)

Page 12: UNIX Files

A rudimentary example:#include <fcntl.h> /* controls file attributes */#include<unistd.h> /* defines symbolic constants */main(){

int fd; /* a file descriptor */ssize_t nread; /* number of bytes read */char buf[1024]; /* data buffer *//* open the file “data” for reading */fd = open(“data”, O_RDONLY);/* read in the data */nread = read(fd, buf, 1024);/* close the file */close(fd);

}

Page 13: UNIX Files

C Versions of Read, Write, … C provides its own versions of read, write,

open, close, namely• fread• fwrite• fopen• fclose• fflush --- ???

The C versions are more portable as they are defined in the language itself.

The “OS” versions (read, write, …) usually allow for more efficient manipulation of files

Page 14: UNIX Files

Buffered vs unbuffered I/O The system can execute in user mode or kernel mode! Memory is divided into user space and kernel space! What happens when we write to a file?

the write call forces a context switch to the system. What?? the system copies the specified number of bytes from user

space into kernel space. (into mbufs) the system wakes up the device driver to write these mbufs

to the physical device (if the file-system is in synchronous mode).

the system selects a new process to run. finally, control is returned to the process that executed the

write call. What are the effects on the performance of your

program?

Page 15: UNIX Files

Un-buffered I/O Every read and write is executed by the

kernel. Hence, every read and write will cause a

context switch in order for the system routines to execute.

Why do we suffer performance loss? How can we reduce the loss of performance?

==> We could try to move as much data as possible with each system call.

How can we measure the performance?

Page 16: UNIX Files

Buffered I/O explicit versus implicit buffering:

• explicit - collect as many bytes as you can before writing to file and read more than a single byte at a time.

• Then, use the basic UNIX I/O primitives Careful !! Your program my behave differently on different

systems. Here, the programmer is explicitly controlling the buffer-size

• implicit - use the Stream facility provided by <stdio.h>• FILE *fd, fopen, fprintf, fflush, fclose, ... etc.• a FILE structure contains a buffer (in user space) that

is usually the size of the disk blocking factor (512 or 1024)

Page 17: UNIX Files

Life Cycle of An I/O Request

Page 18: UNIX Files

Interrupt-Driven I/O Cycle

Page 19: UNIX Files

Intel Pentium Processor Event-Vector Table

Page 20: UNIX Files

Direct Memory Access

Used to avoid programmed I/O for large data movement

Requires DMA controller

Bypasses CPU to transfer data directly between I/O device and memory

Page 21: UNIX Files

Six Step Process to Perform DMA Transfer

Page 22: UNIX Files

Improving Performance Reduce number of context switches Reduce data copying Reduce interrupts by using large transfers,

smart controllers Use DMA Balance CPU, memory, bus, and I/O

performance for highest throughput