Unit 5 I-O Management - Disk Scheduling-File Management

Download as pdf or txt
Download as pdf or txt
You are on page 1of 103

21MDS33 - OPERATING SYSTEMS

⚫ I/O MANAGEMENT, DISK SCHEDULING

I/O Devices, Organization of the I/O function, Operating


System Design Issues, I/O buffering, Disk Scheduling, RAID,
Windows I/O.

⚫ FILE MANAGEMENT

Overview, File Organization and Access, File directories, File


sharing, Secondary Storage Management, Windows file
system

Dr.M.Sujithra
AP/Dept of Computing- Data Science
CIT 1
I/O MANAGEMENT, DISK SCHEDULING

2
Categories of I/O
Devices
External devices that engage in I/O with computer
systems can be grouped into three categories:
Differences in I/O
Devices
Data Rate
Application
Complexity of Control
Unit of Transfer
Data Representation
Error Conditions
Differences in I/O
Devices
■ Devices differ in a number of areas:
Organization of the I/O
Function
■ Three techniques for performing I/O are:
■ Programmed I/O
■ the processor issues an I/O command on behalf of a process to an I/O
module; that process then busy waits for the operation to be completed
before proceeding

■ Interrupt-driven I/O
■ the processor issues an I/O command on behalf of a process
■ if non-blocking – processor continues to execute instructions from
the process that issued the I/O command
■ if blocking – the next instruction the processor executes is from the
OS, which will put the current process in a blocked state and schedule
another process

■ Direct Memory Access (DMA)


■ a DMA module controls the exchange of data between main memory
and an I/O module
Evolution of the I/O
Function

Direct Memory Access – DMA


8
Direct Memory Access
The DMA technique works as follows.

When the processor wishes to read or write a block of data, it issues a


command to the DMA module by sending to the DMA module the
following information:

⚫Whether a read or write is requested, using the read or write control line
between the processor and the DMA module

⚫The address of the I/O device involved, communicated on the data lines

⚫The starting location in memory to read from or write to, communicated


on the data lines and stored by the DMA module in its address register

⚫The number of words to be read or written, again communicated via the


data lines and stored in the data count register

9
10
11
OPERATING SYSTEM DESIGN ISSUES
⚫ Design Objectives
Two objectives are paramount in designing the
I/O facility:
⚫ Efficiency :
⚫ Efficiency is important because I/O operations often form a
bottleneck in a computing system.
⚫ One way to tackle this problem is multiprogramming
⚫ Swapping is used to bring in additional ready processes to keep the
processor busy, but this in itself is an I/O operation
⚫ Generality:
⚫ it is desirable to handle all devices in a uniform manner

12
Logical Structure of the I/O Function
⚫ Logical I/O: Concerned with managing general I/O functions on behalf
of user processes, allowing them to deal with the device in terms of a
device identifier and simple commands: Open, Close, Read, and Write.
⚫ Device I/O: The requested operations and data are converted into
appropriate sequence of I/O instructions. Buffering techniques may be
used to improve use.
⚫ Scheduling and control: The actual queuing and scheduling of I/O
operations occurs at this level.
⚫ Directory management: Symbolic file names are converted to
identifiers. This level also concerned about user operations that affect
the directory of files, such as Add, Delete, and Reorganize
⚫ File system: Deals with logical structures of files. Open, Close, Read,
Write. Access rights are handled in this level.
⚫ Physical organization: References to files are converted to physical
secondary storage addresses, considering the physical track and sector
structure of file.
14
I/O Buffering
Two types of I/O devices:
Block-oriented
⚫A block-oriented device stores information in blocks that are
usually of fixed size, and transfers are made one block at a time.
⚫Generally, it is possible to reference data by its block number.
⚫Disks and USB keys are examples of block-oriented devices.

Stream-oriented.
⚫A stream-oriented device transfers data in and out as a stream
of bytes, with no block structure.
⚫Terminals, printers, communications ports, mouse and other
pointing devices, and
⚫Most other devices that are not secondary storage are
stream-oriented.
15
I/O Buffering
■ Perform input transfers in advance of requests being made and
perform output transfers some time after the request is made
Block-Oriented Single
Buffer
■ Input transfers are made to the system buffer

■ Reading ahead/anticipated input


■ is done in the expectation that the block will eventually be
needed
■ when the transfer is complete, the process moves the block
into user space and immediately requests another block

■ Generally provides a speedup compared to the lack of


system buffering

■ Disadvantages:
■ complicates the logic in the operating system
■ swapping logic is also affected
Stream-Oriented Single
Buffer
■ Line-at-a-time operation ■ Byte-at-a-time operation
■ appropriate for ■ used on forms-mode
scroll-mode terminals terminals
(dumb terminals) ■ when each keystroke is
■ user input is one line at a significant
time with a carriage return ■ other peripherals such as
signaling the end of a line sensors and controllers
■ output to the terminal is
similarly one line at a time
No
Buffer
■ Without a buffer, the OS directly accesses the device when it
needs
Single Buffer
■ Operating system assigns a buffer in main memory for an I/O
request
■ Use two system buffers instead of
one

Double Buffer
■ A process can transfer data to or
from one buffer

■ while the operating system


empties or fills the other buffer

■ Also known as buffer swapping or


double buffering
Circular
■ Two or more buffers are used

■ Each individual buffer is one

Buffer
unit in a circular buffer

■ Used when I/O operation


must keep up with process
The Utility of Buffering
• Buffering is a technique that smoothens out peaks in I/O
demand.
• No amount of buffering will allow an I/O device to keep pace
with a process indefinitely when the average demand of the
process is greater than the I/O device can service.
• Even with multiple buffers, all of the buffers will eventually fill
up, and the process will have to wait after processing each
chunk of data.
The Utility of Buffering
However, in a multiprogramming environment, when there is

a variety of I/O activity and a variety of process

activity to service, buffering is one tool that can increase the

efficiency of the OS and the performance of individual

processes.
Disk Scheduling
• Operating System does Disk scheduling to schedule
I/O requests arriving for the disk(I/O scheduling)
• Multiple I/O requests may arrive by different
processes and only one I/O request can be served at a
time by the disk controller.
• Thus other I/O requests need to wait in the waiting
queue and need to be scheduled.
• Two or more request may be far from each other so
can result in greater disk arm movement.
• Hard drives are one of the slowest parts of the
computer system and thus need to be accessed in an
efficient manner.
Disk Scheduling
Algorithms
Disk Performance
Parameters
• Seek Time : Time taken in locating the disk arm to a
specified track where the read/write request will be
satisfied.
• Rotational Latency :Time taken by the desired sector to
rotate itself to the position from where it can access the
R/W heads.
• Transfer Time : Time taken to transfer the data.
• Disk Access Time = Rotational Latency + Seek Time +
Transfer Time
• Disk Response Time : Average time spent by each request
waiting for the IO operation.
• Purpose of Disk Scheduling
The main purpose of disk scheduling algorithm is to select
a disk request from the queue of IO requests and decide
the schedule when this request will be processed.

• Goal of Disk Scheduling Algorithm


Fairness
High throughout
Minimal traveling head time
Minimum variance response time is better.
FCFS:
In FCFS, the requests are addressed in the order they arrive in
the disk queue.

Suppose the order of request is (82,170,43,140,24,16,190)


And current position of Read/Write head is : 50
So, total seek time:
=(82-50)+(170-82)+(170-43)+(140-43)+(140-24)+(24-16)+(190-16)
=642
SSTF: In SSTF (Shortest Seek Time First), requests having shortest seek
time are executed first. So, the seek time of every request is calculated
in advance in the queue and then they are scheduled according to their
calculated seek time.

Suppose the order of request is- (82,170,43,140,24,16,190)


And current position of Read/Write head is : 50 So, total seek time:
=(50-43)+(43-24)+(24-16)+(82-16)+(140-82)+(170-40)+(190-170) =208
SCAN: In SCAN algorithm the disk arm moves into a particular direction
and services the requests coming in its path and after reaching the end
of disk, it reverses its direction and again services the request arriving in
its path. (elevator algorithm)

Suppose the requests to be addressed are -82,170,43,140,24,16,190. And


the Read/Write arm is at 50,
and it is also given that the disk arm should move “towards the larger value”.
Therefore, the seek time is calculated as =(199-50)+(199-16) =332

As a result, the requests at the midrange are serviced more and those arriving
behind the disk arm will have to wait.
C-SCAN (Circular SCAN)
In SCAN algorithm, the disk arm again scans the path that
has been scanned, after reversing its direction.
So, it may be possible that too many requests are waiting at
the other end or there may be zero or few requests pending
at the scanned area.
These situations are avoided in CSCAN algorithm in which
the disk arm instead of reversing its direction goes to the
other end of the disk and starts servicing the requests from
there.
So, the disk arm moves in a circular fashion and it is known
as C-SCAN (Circular SCAN).
Suppose the requests to be addressed are-82,170,43,140,24,16,190.
And the Read/Write arm is at 50, and it is also given that the disk arm
should move “towards the larger value”.

Seek time is calculated as: =(199-50)+(199-0)+(43-0) =391


LOOK: It is similar to the SCAN except for the difference that the disk
arm in spite of going to the end of the disk goes only to the last
request to be serviced in front of the head and then reverses its
direction from there only. Thus it prevents the extra delay which
occurred due to unnecessary traversal to the end of the disk.
Suppose the requests to be addressed are-82,170,43,140,24,16,190. And the
Read/Write arm is at 50, and it is also given that the disk arm should
move “towards the larger value”.

So, the seek time is calculated as:


=(190-50)+(190-16)
=314
CLOOK: As LOOK is similar to SCAN algorithm, in similar way, CLOOK is similar to CSCAN
disk scheduling algorithm. In CLOOK, the disk arm in spite of going to the end goes only
to the last request to be serviced in front of the head and then from there goes to the
other end’s last request. Thus, it also prevents the extra delay which occurred due to
unnecessary traversal to the end of the disk.

Suppose the requests to be addressed are-82,170,43,140,24,16,190. And the


Read/Write arm is at 50, and it is also given that the disk arm should
move “towards the larger value”

So, the seek time is calculated as:


=(190-50)+(190-16)+(43-16)
=341
N-Step-SCAN
■ Segments the disk request queue into subqueues of length N

■ Subqueues are processed one at a time, using SCAN

■ While a queue is being processed new requests must be added


to some other queue

■ If fewer than N requests are available at the end of a scan, all of


them are processed with the next scan
FSCAN
■ Uses two subqueues

■ When a scan begins, all of the requests are in one of the


queues, with the other empty

■ During scan, all new requests are put into the other queue

■ Service of new requests is deferred until all of the old


requests have been processed
Disk Scheduling
Algorithms
FCFS (First Come, First Served)
1. perform operations in order requested
2. no reordering of work queue
3. no starvation: every request is serviced
4. poor performance
SSTF (Shortest Seek Time First)
5. after a request, go to the closest request in the work queue, regardless of direction
6. reduces total seek time compared to FCFS
7. Disadvantages
1. starvation is possible; stay in one area of the disk if very busy
2. switching directions slows things down
SCAN
8. go from the outside to the inside servicing requests and then back from the outside to
the inside servicing requests.
9. repeats this over and over.
10. reduces variance compared to SSTF.
Disk Scheduling
Algorithms
C-SCAN (circular scan)
1. moves inwards servicing requests until it reaches the innermost cylinder;
then jumps to the outside cylinder of the disk without servicing any
requests.
2. repeats this over and over.
3. variant: service requests from inside to outside, and then skip back to the
innermost cylinder.
LOOK
4. like SCAN but stops moving inwards (or outwards) when no more requests
in that direction exist.
C-LOOK
5. moves inwards servicing requests until there are no more requests in that
direction, then it jumps to the outermost outstanding requests.
6. repeast this over and over.
7. variant: service requests from inside to outside, then skip back to the
innermost request.
Summary
■ I/O architecture is the computer system’s interface to the outside world

■ I/O functions are generally broken up into a number of layers

■ A key aspect of I/O is the use of buffers that are controlled by I/O utilities
rather than by application processes

■ Buffering smoothes out the differences between the speeds

■ The use of buffers also decouples the actual I/O transfer from the address
space of the application process

■ Disk I/O has the greatest impact on overall system performance

■ Two of the most widely used approaches are disk scheduling and the disk
cache

■ A disk cache is a buffer, usually kept in main memory, that functions as a


cache of disk block between disk memory and the rest of main memory
RAID
■ Industry has agreed on a standardized scheme
for multiple-disk database design, known as
RAID (redundant array of independent disks).
■ The RAID scheme consists of seven levels,2
zero through six.
RAID
■ These levels do not imply a hierarchical relationship but designate
different design architectures that share three common
characteristics:

■ 1. RAID is a set of physical disk drives viewed by the OS as a single


logical drive.

■ 2. Data are distributed across the physical drives of an array in a


scheme known as striping, described subsequently.

■ 3. Redundant disk capacity is used to store parity information, which


guarantees data recoverability in case of a disk failure.
RAID
Windows I/O.
SEMINAR

■RAID -3 MEMBERS
■WINDOWS - 3 MEMBERS
■WINDOWS FILE SYSTEM - 2 MEMBERS
FILE MANAGEMENT
■ Overview, File Organization and Access, File directories, File sharing,
Secondary Storage Management, Windows file system
FILE MANAGEMENT
File

■ A file is a named collection of related


information that is recorded on secondary
storage
■ such as magnetic disks, magnetic tapes and
optical disks.
■ In general, a file is a sequence of bits, bytes,
lines or records whose meaning is defined by
the files creator and user.
48
File properties
■ Long-term existence
Files are stored on disk or other secondary storage and do
not disappear when a user logs off.
■ Sharable between processes
Files have names and can have associated access
Permissions that permit controlled sharing.
■ Structure
Depending on the file system, a file can have an internal
structure that is convenient for applications.
File Operations
• Create: A new file is defined and positioned within the structure of
files.

• Delete: A file is removed from the file structure and subsequently


destroyed.

• Open: An existing file is declared to be “opened” by a process,


allowing the process to perform functions on the file.

50
File Operations
■ Close: The file is closed with respect to a process, so the
process no longer may perform functions on the file,
until the process opens the file again.

■ Read: A process reads all or a portion of the data in a


file.

■ Write: A process updates a file, either by adding new


data that expands the size of the file, or by changing the
values of existing data items in the file.
File Attributes

■ File system maintains a set of attributes associated with the


file. These include owner, creation time, time last modified,
and access privileges.
■ Name – only information kept in human-readable form
■ Identifier – unique tag (number) identifies file within file
system
■ Type – needed for systems that support different types

52
File Attributes
■ Location – pointer to file location on device

■ Size – current file size

■ Protection – controls who can do reading, writing,


executing
■ Time, date, and user identification – data for
protection, security, and usage monitoring
File Structure
Field
■ A field is the basic element of data. An individual field
contains a single value
■ such as an employee’s last name, a date, or the value of a
sensor reading. It is characterized by its length and data
type (e.g., ASCII string, decimal).
■ Depending on the file design, fields may be fixed length
or variable length.
■ In the latter case, the field often consists of two or three
subfields: the actual value to be stored, the name of the
55
field, and, in some cases, the length of the field.
File
■ A file is a collection of similar records.

■ The file is treated as a single entity by


users and applications and may be
referenced by name.
Record
■ A record is a collection of related fields that
can be treated as a unit.

■ For example, an employee record would


contain such fields as name, social security
number, job classification, date of hire, and so

57
on.
Database
■ A database is a collection of related data.
■ The database itself consists of one or more
types of files.
■ Usually, there is a separate database
management system that is independent of
the operating system, although that system
may make use of some file management
programs.
File Structure Terms
Field File
■ collection of similar
■ basic element of data records
■ contains a single value ■ treated as a single entity
■ fixed or variable length ■ may be referenced by
name
Database ■ access control restrictions
■ collection of related data Record
usually apply at the file
■ relationships among ■ collection
level of related fields
elements of data are that can be treated as a unit
explicit by some application program
■ designed for use by a
■ One field is the key – a
number of different
unique identifier
applications
■ consists of one or more
File Management
Systems
■ A file management system is that set of system
software that provides services to users and
applications in the use of files.

■ Typically, the only way a user or application


may access files is through the file management
system
File Management
System Objectives
■ Meet the data management needs of the user
■ Guarantee that the data in the file are valid
■ Optimize performance
■ Provide I/O support for a variety of storage device types
■ Minimize the potential for lost or destroyed data
■ Provide a standardized set of I/O interface routines to
user processes
■ Provide I/O support for multiple users in the case of
multiple-user systems
Minimal User Requirements
▪Each user:
File System Architecture
File System Architecture
■ At the lowest level, device drivers communicate directly with
peripheral devices or their controllers or channels.

■ The next level is referred to as the basic file system, or the physical
I/O level. This is the primary interface with the environment
outside of the computer system.

■ It deals with blocks of data that are exchanged with disk or tape
system

■ The basic I/O supervisor is responsible for all file I/O initiation and
termination.

■ At this level, control structures are maintained that deal with


device I/O, scheduling, and file status.
64
File System Architecture
■ Logical I/O enables users and applications to
access records.
■ Whereas the basic file system deals with blocks
of data, the logical I/O module deals with file
records.
■ The level of the file system closest to the user is
often termed the access method.
■ Access methods are pile, sequential, indexed
65 sequential , indexed and hashed.
FILE ORGANIZATION
AND ACCESS
■ File organization to refer to the logical structuring of the records as
determined by the way in which they are accessed.

■ The physical organization of the file on secondary storage depends


on the blocking strategy and the file allocation strategy.

■ In choosing a file organization, several criteria are important:

■ • Short access time

■ • Ease of update

■ • Economy of storage

■ • Simple maintenance & Reliability


File Access Method Types
The Pile
■ Data are collected
in the order they
arrive
■ Each record
consists of one
burst of data
■ Purpose is simply to
accumulate the
mass of data and
save it
■ Record access is by
exhaustive search
The Sequential
File
■ Most common form of
file structure

■ A fixed format is used for


records

■ Key field uniquely


identifies the record &
determines storage
order

■ Typically used in batch


applications

■ Only organization that is


easily stored on tape as
well as disk
Indexed Sequential File
■ Adds an index to
the file to
support random
access
■ Adds an overflow
file
■ Greatly reduces
the time required
to access a single
record
■ Multiple levels of
indexing can be
used to provide
greater efficiency
in access
Indexed File
■ Records are accessed only
through their indexes

■ Variable-length records can be


employed

■ Exhaustive index contains one


entry for every record in the
main file

■ Partial index contains entries


to records where the field of
interest exists

■ Used mostly in applications


where timeliness of
information is critical

■ Examples would be airline


reservation systems and
inventory control systems
Direct or Hashed File
■ Access directly any block of
a known address

■ Makes use of hashing on the


key value

■ Often used where:


■ very rapid access is
required
■ fixed-length records
are used
■ records are always
accessed one at a time
FILE DIRECTORIES
•Associated with any file management system and
collection of files is a file directory.
•The directory contains information about the files,
including attributes, location, and ownership.
•Much of this information, especially that
concerned with storage, is managed by the
operating system.
Operations on a
Directory
■ To understand the requirements for a file structure, it is helpful
to consider the types of operations that may be performed on
the directory:
Types of operations on the
directory

■ Search: When a user or application references a


file, the directory must be searched to find the
entry corresponding to that file.
■ Create file: When a new file is created, an entry
must be added to the directory.
■ Delete file: When a file is deleted, an entry must
be removed from the directory.

76
Types of operations on the directory

■ List directory: All or a portion of the directory


may be requested. Generally, this request is
made by a user and results in a listing of all files
owned by that user, plus some of the attributes
of each file (e.g., type, access control
information, usage information).
■ Update directory: Because some file attributes
are stored in the directory, a change in one of
these attributes requires a change in the
corresponding directory entry.
Figure 12.4

Tree-Structur

ed Directory

■ Master
directory with
user directories
underneath it

■ Each user
directory may
have
subdirectories
and files as
entries
FILE DIRECTORIES
Contents
•Associated with any file management system and collection of files is a file
directory. The directory contains information about the files, including attributes,
location, and ownership.
Structure
•The simplest form of structure for a directory is that of a list of entries, one for
each file. This structure could be represented by a simple sequential file, with the
name of the file serving as the key.
Naming
•Users need to be able to refer to a file by a symbolic name. Clearly, each file in
the system must have a unique name in order that file references be
unambiguous.The series of directory names, culminating in the file name itself,
constitutes a pathname for the file.
File Sharing
In a multiuser system, there is almost always a
requirement for allowing files to be shared among a
number of users.
Two issues arise:
•Access rights and
•Management of simultaneous access.
File Sharing
Access
Rights
■ None ■ Appending
■ the user would not be
allowed to read the user ■ the user can add data to the
directory that includes the file but cannot modify or
file delete any of the file’s
contents
■ Knowledge
■ Updating
■ the user can determine that
the file exists and who its ■ the user can modify, delete,
owner is and can then and add to the file’s data
petition the owner for
additional access rights ■ Changing protection
■ Execution ■ the user can change the
■ the user can load and execute access rights granted to other
a program but cannot copy it users
■ Reading ■ Deletion
■ the user can read the file for ■ the user can delete the file
any purpose, including from the file system
copying and execution
User Access Rights
Simultaneous Access
•When access is granted to append or update a file to
more than one user, the operating system or file
management system must enforce discipline.
• A brute-force approach is to allow a user to lock the
entire file when it is to be updated.
•A finer grain of control is to lock individual records
during update.
•Issues of mutual exclusion and deadlock must be
•addressed in designing the shared access capability.
Secondary storage
management

▪ Disks are divided into physical blocks (sectors on a track)


▪ Files are divided into logical blocks (subdivisions of the file)
▪ Logical block size = some multiple of a physical block size
▪ The operating system or file management system is
responsible for allocating blocks to files

▪ Space is allocated to a file as one or more portions (contiguous


set of allocated disk blocks). A portion is the logical block size

▪ File allocation table (FAT)


▪ data structure used to keep track of the portions assigned to a
file
• On secondary storage, a file consists of a collection of
blocks.
• The operating system or file management system is
responsible for allocating blocks to files.
• This raises two management issues.
• First, space on secondary storage must be allocated to
files, and
• Second, it is necessary to keep track of the space
available for allocation.
Preallocation vs
Dynamic Allocation
■ A preallocation policy requires that the maximum size of a file
be declared at the time of the file creation request

■ For many applications it is difficult to estimate reliably the


maximum potential size of the file
■ tends to be wasteful because users and application programmers
tend to overestimate size

■ Dynamic allocation allocates space to a file in portions as


needed
Summarizing the
Alternatives
■ Two major alternatives:
File Allocation Methods
•The allocation methods define how the files are
stored in the disk blocks.
• There are three main disk space or file allocation
methods.
Contiguous Allocation
Linked/chained Allocation
Indexed Allocation
The main idea behind these methods is to
provide:
Efficient disk space utilization.
Fast access to the file blocks.
Contiguous Allocation

■ Each file occupies a contiguous address space on disk.

■ Assigned disk address is in linear order.

■ Easy to implement.

■ External fragmentation is a major issue with this type of


allocation technique.

92
Contiguous File Allocation
▪A single
contiguous set of
blocks is
allocated to a file
at the time of file
creation

▪Preallocation
strategy using
variable-size
portions

▪Is the best from


the point of view
of the individual
sequential file 12.9
After Compaction

Figure 12.10 Contiguous File Allocation (After Compaction)


Linked /Chained Allocation

■ Each file carries a list of links to disk blocks.

■ Directory contains link / pointer to first block of a file.

■ No external fragmentation

■ Effectively used in sequential access file.

■ Inefficient in case of direct access file.

95
Chained
Allocation
▪Allocation is on an
individual block basis

▪Each block contains a


pointer to the next block
in the chain

▪The file allocation table


needs just a single entry
for each file

▪No external
fragmentation to worry
about
12.11

▪Better for sequential files


Chained Allocation After
Consolidation

12.12
Indexed Allocation

■ Provides solutions to problems of contiguous and linked


allocation.

■ A index block is created having all pointers to files.

■ Each file has its own index block which stores the addresses of
disk space occupied by the file.

■ Directory contains the addresses of index blocks of files.

98
Indexed Allocation with
Block Portions

12.13
Indexed Allocation with
Variable Length Portions

12.14
File Allocation Methods
File Allocation Methods-
Summary
Contiguous Allocation
•Each file occupies a contiguous address space on disk.
•Assigned disk address is in linear order.
•Easy to implement.
•External fragmentation is a major issue with this type of allocation technique.
Linked Allocation
•Each file carries a list of links to disk blocks.
•Directory contains link / pointer to first block of a file.
•No external fragmentation
•Effectively used in sequential access file.
•Inefficient in case of direct access file.
Indexed Allocation
•Provides solutions to problems of contiguous and linked allocation.
•A index block is created having all pointers to files.
•Each file has its own index block which stores the addresses of disk space
occupied by the file.
•Directory contains the addresses of index blocks of files.
103

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy