Chapter I/O and File System



Similar documents
System Calls and Standard I/O

System Calls Related to File Manipulation

Lecture 24 Systems Programming in C

The C Programming Language course syllabus associate level

LOW LEVEL FILE PROCESSING

Linux/UNIX System Programming. POSIX Shared Memory. Michael Kerrisk, man7.org c February 2015

Freescale Semiconductor, I

How To Port A Program To Dynamic C (C) (C-Based) (Program) (For A Non Portable Program) (Un Portable) (Permanent) (Non Portable) C-Based (Programs) (Powerpoint)

Linux Driver Devices. Why, When, Which, How?

Operating Systems. Privileged Instructions

Filing Systems. Filing Systems

Illustration 1: Diagram of program function and data flow

UNIX File Management (continued)

APPLICATION PROGRAMMING INTERFACE

Lecture 17. Process Management. Process Management. Process Management. Inter-Process Communication. Inter-Process Communication

Module 816. File Management in C. M. Campbell 1993 Deakin University

About the File Manager 2

Device Management Functions

µtasker Document FTP Client

Chapter 3: Operating-System Structures. System Components Operating System Services System Calls System Programs System Structure Virtual Machines

ADL User Guide for Open AT V4.10

Operating Systems and Networks

SMTP-32 Library. Simple Mail Transfer Protocol Dynamic Link Library for Microsoft Windows. Version 5.2

Virtuozzo Virtualization SDK

Unique Micro Design Advanced Thinking Products. Model S151 UMD Transfer Utility for the Nippondenso BHT Series User Manual

Lecture 16: System-Level I/O

CHAPTER 17: File Management

File Systems Management and Examples

CPSC 410/611: File Management. What is a File?

Remote Access Server - Dial-Out User s Guide

Embedded Programming in C/C++: Lesson-1: Programming Elements and Programming in C

Lab 4: Socket Programming: netcat part

Operating System Structure

The Linux Virtual Filesystem

Review from last time. CS 537 Lecture 3 OS Structure. OS structure. What you should learn from this lecture

Giving credit where credit is due

Programing the Microprocessor in C Microprocessor System Design and Interfacing ECE 362

Chapter 3 Operating-System Structures

Linux Kernel Architecture

ML310 VxWorks QuickStart Tutorial. Note: Screen shots in this acrobat file appear best when Acrobat Magnification is set to 133.3%

OS: IPC I. Cooperating Processes. CIT 595 Spring Message Passing vs. Shared Memory. Message Passing: Unix Pipes

Introduction. dnotify

UNISOL SysAdmin. SysAdmin helps systems administrators manage their UNIX systems and networks more effectively.

B&K Precision 1785B, 1786B, 1787B, 1788 Power supply Python Library

Introduction. What is an Operating System?

Exceptions in MIPS. know the exception mechanism in MIPS be able to write a simple exception handler for a MIPS machine

File System Management

Operating Systems CSE 410, Spring File Management. Stephen Wagner Michigan State University

MPLAB Harmony System Service Libraries Help

Unix System Calls. Dept. CSIE

Operating System Components


Have both hardware and software. Want to hide the details from the programmer (user).

Serial Programming HOWTO

USB 2.0 Flash Drive User Manual

Freescale MQX USB Device User Guide

Guidelines for Developing a Nios II HAL Device Driver

Application Note. Introduction AN2471/D 3/2003. PC Master Software Communication Protocol Specification

W4118 Operating Systems. Junfeng Yang

Chapter 3: Operating-System Structures. Common System Components

1 Abstract Data Types Information Hiding

Windows NT File System. Outline. Hardware Basics. Ausgewählte Betriebssysteme Institut Betriebssysteme Fakultät Informatik

Outline. Windows NT File System. Hardware Basics. Win2K File System Formats. NTFS Cluster Sizes NTFS

Xillybus host application programming guide for Linux

Gentran Integration Suite. Archiving and Purging. Version 4.2

C Programming. for Embedded Microcontrollers. Warwick A. Smith. Postbus 11. Elektor International Media BV. 6114ZG Susteren The Netherlands

Example of Standard API

Leak Check Version 2.1 for Linux TM

WA Manager Alarming System Management Software Windows 98, NT, XP, 2000 User Guide

Sensors and the Zaurus S Hardware

CSC 2405: Computer Systems II

4.10 Maintain Database

COMPUTER BASED REMOTE CONTROL FOR LAYOUT OF SCALED MODEL TRAINS

DEVICE DRIVERS AND TERRUPTS SERVICE MECHANISM Lesson-14: Device types, Physical and Virtual device functions

Automatic Script Generation Based on User-System Interactions

CANnes PC CAN Interface Manual

/* File: blkcopy.c. size_t n

Chapter 11: File System Implementation. Operating System Concepts with Java 8 th Edition

The Real-Time Operating System ucos-ii

udrive-usd-g1 Embedded DOS micro-drive Module Data Sheet

KITES TECHNOLOGY COURSE MODULE (C, C++, DS)

UniFinger Engine SDK Manual (sample) Version 3.0.0

As previously noted, a byte can contain a numeric value in the range Computers don't understand Latin, Cyrillic, Hindi, Arabic character sets!

Networks. Inter-process Communication. Pipes. Inter-process Communication

Acronis Backup & Recovery: Events in Application Event Log of Windows

SkyRecon Cryptographic Module (SCM)

Jorix kernel: real-time scheduling

User Manual. 3-Heights PDF Producer API. Version 4.6

Operating System Components and Services

Chapter 12 File Management

An Introduction To Simple Scheduling (Primarily targeted at Arduino Platform)

Chapter 6, The Operating System Machine Level

File Systems for Flash Memories. Marcela Zuluaga Sebastian Isaza Dante Rodriguez

Appendix. Web Command Error Codes. Web Command Error Codes

SUDT AccessPort TM Advanced Terminal / Monitor / Debugger Version 1.37 User Manual

Forensic Analysis of Internet Explorer Activity Files

1 Posix API vs Windows API

A Computer Glossary. For the New York Farm Viability Institute Computer Training Courses

Serial Communications

File Management. Chapter 12

Transcription:

Chapter 11 I/O and File System Tornado Training Workshop Copyright 11-1 ntroduction to VxWorks I/O System haracter I/O lock I/O

I/O System 11.1 Introduction Character I/O Block I/O Tornado Training Workshop Copyright 11-2 verview of devices, drivers, and the I/O system. nstalling drivers reating devices

I/O System Interface I/O System xxdriver creat( ) xxcreat( ) open( ) xxopen( ) Application close( ) xxclose( ) Device read( ) xxread( ) write( ) xxwrite( ) ioctl( ) xxioctl( ) remove( ) xxremove( ) Tornado Training Workshop Copyright 11-3 Many device drivers perform similar operations, namely: Write data to a device. Read data from a device. VxWorks I/O system provides a simple device-independent and portable interface to these device drivers. I/O system supports redirection. select() function is available. A device driver is a software module which manipulates some device.

Driver Installation A device driver must be installed in the I/O system. Then VxWorks can call driver-specific routines when generic routines are called: e.g. calling xxread( ) when read( ) is called on an XX device. Installation done automatically for VxWorks drivers included in VxWorks image: ttydrv( ). pipedrv( ). Must call driver s xxdrv( ) routine before using a third party driver. Tornado Training Workshop Copyright 11-4

Device Creation Device Driver Device Creation Routine Device Name Begins With Pipes pipedevcreate( ) /pipe/ Serial ttydevcreate ( ) /tyco/ remote Networking chapter End with : local Block I/O section / third party xxdevcreate ( ) / These routines each initialize instances of a particular device type. Tornado Training Workshop Copyright 11-5 The names given above are recommended WRS conventions. Example: -> devs drv name 0 /null 1 /tyco/0 1 /tyco/1 4 columbia: 2 /pipe/dream 2 /pipe/cleaner 5 /vio

File Descriptors Integer that identifies a file (file or device). Assigned by open( ) or creat( ). Used by read( ), write( ), ioctl( ) and close( ) to specify file. File descriptor table is global. Table size defined by the symbolic constant NUM_FILES (default 50). This is a parameter of the component /operating system components/io system components/io system. Tornado Training Workshop Copyright 11-6 We will use the term file to refer to either a file on a device with a file system (e.g., a hard disk) or to a stream-oriented device (e.g., serial channel or pipe). iosfdshow() will display the file descriptor table. Example: -> iosfdshow fd name drv 3 /tyco/0 1 4 (socket) 3 10 /pipe/dream 2 12 /pipe/cleaner 2

I/O System Introduction 11.2 Character I/O Block I/O Tornado Training Workshop Copyright 11-7 sing file descriptors, select(), and I/O libraries

Standard Input, Standard Output, and Standard Error The first three file descriptors are predefined by the system and are never reassigned by the system. reserved file descriptors 0 1 2 3 4 STD_IN STD_OUT STD_ERR File Descriptor Table n. These three file descriptors (0-2) are never returned by creat( ) or open( ). Tornado Training Workshop Copyright 11-8 Mappings for the standard file descriptors 0, 1, and 2 are actually maintained outside of the file descriptor table. The file descriptor table starts at index 3 and extends to index NUM_FILES + 2. Global assignments may be changed after system start-up using void ioglobalstdset (stdfd, newfd) Example: fd = open ("columbia:/vx/errlog", O_RDWR, 0); ioglobalstdset (STD_ERR, fd); Redirect I/O on a per-task basis with void iotaskstdset (taskid, stdfd, newfd) Use ioglobalstdget( ) to find the real file descriptor corresponding to one of the global standard descriptors; use iotaskstdget( ) to find the real file descriptor to which one of the standard descriptors is redirected for a specific task.

Basic I/O Routines int open (name, flags, mode) flags: O_RDONLY, O_WRONLY, O_RDWR, O_TRUNC, O_CREAT mode: Permissions for NFS device STATUS close (fd) Tasks must close files when they are no longer needed. File descriptor table is fixed size. int read (fd, buffer, nbytes) int write (fd, buffer, nbytes) May block; returns number of bytes read or written. int ioctl (fd, command, arg) Allows execution of a device specific command. Valid ioctl() commands are listed in driver help page. Tornado Training Workshop Copyright 11-9 Note: creat( ) and remove( ) are used for file systems. xamples: Create a file on a remote host, if it doesn t exist, and set write-only flag: fd = open ( columbia:/u/team5/myfile, O_CREAT O_WRONLY, 0); Set the baud rate of a serial device: status = ioctl (fd, FIOBAUDRATE, baudrate); Get number of messages in a pipe: status = ioctl (fd, FIONMSGS, &nmsgs); Get current options for a serial device: options = ioctl (fd, FIOGETOPTIONS, 0);

select() Select tserver pipe, socket, or serial port select( ) allows a task to wait for activity on a set of file descriptors. Requires driver support: VxWorks pipes, sockets and serial device drivers support select( ). Third party drivers may also support select( ). Also used to pend with a timeout. Tornado Training Workshop Copyright 11-10 struct fd_set Used by select( ) to specify file descriptors. Conceptually an array of bits, with bit N corresponding to file descriptor N. Bits are manipulated via a collection of macros: FD_SET (fd, &fdset) FD_CLR (fd, &fdset) FD_ISSET (fd, &fdset) FD_ZERO (&fdset) Sets the bit Clears the bit Returns TRUE if the fd bit is set, else FALSE. Clears all bits.

Select int select (width, preadfds, pwritefds, pexceptfds, ptimeout) width preadfds Number of bits to examine in preadfds and pwritefds. struct fd_set pointer for the file descriptors we wish to read. pwritefds struct fd_set pointer for the file descriptors we wish to write. pexceptfds Not implemented. ptimeout Pointer to a struct timeval, or NULL to wait forever. Returns number of active devices, or ERROR. @ Tornado Training Workshop Copyright 11-11 select( ) modifies preadfds and pwritefds: User sets bits corresponding to file descriptors before calling select. Select blocks until one of the file descriptors is ready. Select clears the bits in the struct fd_set for which the corresponding file descriptor is not ready. Returns the number of file descriptors with activity, 0 in the case of a timeout, or ERROR if a driver select( ) support routine failed for one of the file descriptors. See the select ( ) example in Appendix A.

Standard I/O Application Basic I/O Routines (device independent) read( ) write( ) stdio fread( ) fwrite( ) fiolib fioread( ) printf( ) sprintf( ) Driver Routines xxread( ) xxwrite( ) Hardware Devices Network Disk Drive Serial Device Tornado Training Workshop Copyright 11-12 VxWorks provides two libraries for higher level I/O functionality: ansistdio fiolib Buffered I/O package. Formatted, non-buffered I/O.

Buffered I/O and File Pointers ansistdio routines use file pointers (pointers to FILE structures) instead of file descriptors. The FILE data structure, typedef ed in stdio.h, contains: The underlying file descriptor. Pointers, etc., for managing the file buffers. Stdio buffers are not protected with semaphores. Two tasks should not use the same fp at the same time. Tornado Training Workshop Copyright 11-13 For a complete list of routines see ansistdio man page. Include the stdio.h header file. stdin, stdout, and stderr are file pointers created using file descriptors 0, 1, and 2. File Descriptors (vxworks.h) STD_IN STD_OUT STD_ERR FILE Pointers (stdio.h) stdin stdout stderr

Why Are the Buffers Used? Private buffers minimize driver access: mybuf stdio buffer device driver buffer size driver dependent default 1024 bytes fread (..., fp) Stdio buffers are not protected with semaphores Tornado Training Workshop Copyright 11-14 Driver access can be expensive because driver-controlled buffers are usually protected with semaphores. Standard I/O routines create private buffers, which reduce driver access. On VxWorks, driver access is fast. Standard I/O buffers may or may not increase performance, depending on the size of each data access and the driver implementation.

Formatted I/O fiolib contains routines for non-buffered formatted I/O. Includes printf( ) and sprintf( ) which are normally part of stdio. fiolib allows ansistdio to be excluded without losing functionality. Tornado Training Workshop Copyright 11-15 See fiolib for a complete list of routines.

Standard I/O and FIO Components Library Buffered I/O Component /operating system components/ansi C components (libc)/ansi stdio Formatted I/O /operating system components/io system components /formatted IO Other ANSI library components can be found in /operating system components/ansi C components (libc)/. For example, ansictype, ansistring, ansiassert, ansitime, and ansimath. These libraries conform to ANSI X3.159-1989. Tornado Training Workshop Copyright 11-16

I/O System Introduction Character I/O 11.3 Block I/O Tornado Training Workshop Copyright 11-17 sing RAM disks sing a DOS File System or a Raw File System on a local disk

File Systems Application Basic I/O Routines (device independent) read( ) write( ) Driver Routines xxread( ) xxwrite( ) stdio fread( ) fwrite( ) File System Routines xxread( ) xxwrite( ) fiolib fioread( ) printf( ) sprintf( ) Hardware Devices Network Disk Drive Serial Device Tornado Training Workshop Copyright 11-18 For local file storage, one needs: Block driver. File system routines. Block driver: Reads/writes disk sectors. Formats disk (marks sector boundaries). File system routines manage files on a disk. For example, dosfs uses a file allocation table to keep track of which disk sectors comprise a file. SCSI sequential devices (e.g. tape drives) are also accessed via an intermediate file system layer provided by tapefslib.

Local File Systems Available block device drivers: ramdrv Simulates a disk in memory. scsilib Supports SCSI random-access devices. tffsdrv True Flash File System (TrueFFS) (optional product) xxdrv Third party block drivers. Available file system libraries: dosfslib rawfslib rt11fslib cdromfslib tapefslib MS-DOS compatible. Supports disk as a single file. For backward compatibility. ISO 9660 CD-ROM read-only file system. For SCSI sequential devices. Tornado Training Workshop Copyright 11-19 cdromfslib implements an ISO 9660 compliant read-only file system which can be used with any block driver. See the library help pages for an example of configuring a CD-ROM file system on a SCSI device. See the SCSI appendix for information on configuring the tape file system. The RT-11 file system can be considered obsolete, but is provided (for the moment) to support legacy systems.

Initialization and Use Block device creation routines ramdevcreate( ) scsiblkdevcreate( ) xxdevcreate( ) BLK_DEV Local file system initialization routines dosfsdevinit( ) cdromfsdevcreate( ) rawfsdevinit( ) tapefsdevinit( ) open / close read / write local file system iolib/dirlib/usrlib routines stat / fstat mkdir / rmdir creat / remove Tornado Training Workshop Copyright 11-20 To initialize a local file system: 1. Call a block driver s device creation routine to initialize a BLK_DEV data structure describing how to access the device. 2. Initialize file system configuration parameters if necessary. 3. Call a file system initialization routine to initialize a local file system for the device corresponding to the BLK_DEV structure. 4. Load configuration information onto physical medium if necessary. With the local file system initialized, use creat( ), read( ),write( ), etc. to manipulate files on the file system.

Block Driver Example BLK_DEV * ramdevcreate (ramaddr, bytesperblk, blkspertrack, nblocks, blkoffset) ramaddr Memory location of ram disk (0 = malloc( )). bytesperblk Number of bytes per block. blkspertrack Number of blocks per track. nblocks Size of disk in blocks. blkoffset Number of blocks to skip. Typically zero. Returns a pointer to a BLK_DEV structure describing the RAM disk, or NULL on error. ramdrv configured by adding the component /operating system components/io system components/ram disk driver. Tornado Training Workshop Copyright 11-21 xample: Create RAM disk and initialize DOS file system with default arameters -> pblkdev = ramdevcreate (0, 512, 400, 400, 0) -> dosfsmkfs ( /RAM1, pblkdev) * Create and write to a file. Flush to RAM disk */ -> fd = creat( /RAM1/myFile, 2) -> writebuf = This is a string.\n -> write(fd, writebuf, strlen(writebuf)+1) -> close(fd) * Open file and read contents. */ -> readbuf = malloc(100) -> fd = open( /RAM1/myFile, 2) -> read(fd, readbuf, 100) -> printf readbuf This is a string.

Configuring Local File Systems? dosfs rawfs Include the component: /operating system components/io system components/dos filesystem. Default NUM_DOSFS_FILES = 20. Hierarchical file system, file names 8+3. Compatible with MS- DOS 6.2. dosfsdevinit (name, pblkdev, pvolconfig) dosfsmkfs (name, pblkdev) Add the component: /operating system components/io system components/raw filesystem. Default NUM_RAWFS_FILES = 5. Fastest, least structured file system. rawfsdevinit (devname, pblkdev) Tornado Training Workshop Copyright 11-22 target/src/usr/usrlib.c implements a routine diskformat( ), which may be used to format a disk specified by name.

Configuration: New DOS File System To create a new DOS file system with custom configuration parameters: 1. pblkdev = xxdevcreate(...); 2. Initialize DOS_VOL_CONFIG structure. 3. dosfsdevinit ( /DOS, pblkdev, pconfig); 4. fd = open ( /DOS, O_WRONLY, 0); 5. ioctl (fd, FIODISKFORMAT, 0); /* if necessary */ 6. ioctl (fd, FIODISKINIT, 0); 7. close (fd); Tornado Training Workshop Copyright 11-23 xxdevcreate( ) is the driver function used to create a logical partition on the appropriate block device. ramdevcreate( ) and scsiblkdevcreate( ) are examples. dosfsdevinit( ) initializes only the data structures (FAT, directory, etc.) used to manage the file system. Nothing is written to the disk. The FIODISKFORMAT command rewrites low-level sector marks on a block device. The FIODISKINIT command writes the new file system out to disk. To format a disk from the shell, you can use diskformat( ). To write the new file system to disk, you can use diskinit( ). A simpler method of initializing an already formatted disk is dosfsmkfs(), which creates a file system with a default volume configuration.

Configuration: Using an Existing DOS File System To remount an existing file system: 1. pblkdev = xxdevcreate(...); 2. pdesc = dosfsdevinit ( /DOS, pblkdev, NULL); 3. dosfsvoloptionsset (pdesc, options); /*if needed*/ Typically, file systems are configured in startup code. Tornado Training Workshop Copyright 11-24 Use dosfsvoloptionsset( ) only if it is necessary to enable the DOS_OPT_AUTOSYNC or the DOS_OPT_CHANGENOWARN options. Two other options for the DOS file system are associated with the Network File System (NFS). DOS_OPT_EXPORT is specified to export a DOS file system via NFS, and DOS_OPT_LOWERCASE is used to force file names into a lowercase format (for PC-based NFS clients). See the Networking chapter for more information on the usage of DOS_OPT_EXPORT.

Contiguous File Support To pre-allocate contiguous disk space for a file: ioctl (fd, FIOCONTIG, numbytes) Must be called before anything is written to file. Example: fd = creat ( /dos1/mydir/myfile, O_RDWR); status = ioctl (fd, FIOCONTIG, 0x10000); To obtain the largest contiguous block available, set numbytes to CONTIG_MAX. Pre-allocated space may be reclaimed with: ioctl (fd, FIOTRUNC, newlength) Tornado Training Workshop Copyright 11-25 When using CONTIG_MAX, the size actually allocated can be determined with fstat( ) or ll( ). If the requested contiguous space is not available on the disk, ioctl( ) returns ERROR, and errno is set to S_dosFsLib_NO_CONTIG_SPACE. To find the size of the largest available contiguous block (without allocating it): ioctl (fd, FIONCONTIG, &maxcontigbytes)

Caveat: DOS Data Integrity To improve performance, FAT and directory changes are not flushed to disk immediately. To flush FAT and directory changes (before removing media), use dosfsvolunmount( ). Alternatively, set options in the dosvc_options field of a partition s DOS_VOL_CONFIG structure: DOS_OPT_AUTOSYNC Flush FAT and directory changes. DOS_OPT_CHANGENOWARN Remount dosfs on open( ) or creat( ). Setting these options will degrade performance. Flush file changes with ioctl (fd, FIOSYNC, 0). Tornado Training Workshop Copyright 11-26 Ordinarily, changes to the FAT and directory are not written to disk until a file is closed, flushed, or deleted, or a new directory is created. Setting DOS_OPT_AUTOSYNC and DOS_OPT_CHANGENOWARN will help prevent data loss from unexpected events like power-failures and media removal, but will degrade performance. Avoid them if possible. DOS_OPT_AUTOSYNC and DOS_OPT_CHANGENOWARN options are not stored on the disk and must consequently be reset for disk remounts. dosfslib will use JAN-01-1980 00:00:00 as a time stamp on all files unless you install a date/time function (or call dosfsdateset( ) and dosfstimeset( ) at periodic intervals). To provide dosfslib with a call-back routine for obtaining data-time information, use dosfsdatetimeinstall( ).

Caveat: DOS file names and PC Compatibility By default, standard 8+3 DOS file names are used. Enable UNIX-style file names by setting DOS_OPT_LONGNAMES option bit in DOS_VOL_CONFIG data structure. A disk initialized on a PC will work with VxWorks. For PC compatibility, a disk initialized with VxWorks Must use correct media byte. Cannot have UNIX-style file names enabled with DOS_OPT_LONGNAMES. Tornado Training Workshop Copyright 11-27 The UNIX-style file names are up to 40 ASCII characters long, and case-sensitive.

Summary Basic I/O routines: open( ) close( ) read( ) write( ) ioctl( ) creat( ) remove( ) select() allows a task to pend, with timeout, waiting for read or write activity on a set of file descriptors. Buffered I/O (ansistdio) built on top of basic I/O using file pointers. Not reentrant. Formatted Non-buffered I/O (fiolib). Smaller than ansistdio and reentrant. Tornado Training Workshop Copyright 11-28

Summary DOS and RAW file systems for: RAM disk. SCSI devices. Custom block devices. Initialization of a file system on a block device: Create block device Configure file system using BLK_DEV structure returned by xxdevcreate(). Format disk (if necessary) Tornado Training Workshop Copyright 11-29