| Description of Requirements
Functionality
Data will be organized into fully
self-defined and self-contained objects, which the storage device will be responsible for
managing. Putting security aside for a moment, the object oriented architecture makes it
possible for any Requester to inspect a device to discover what files exist there and
request one or more, without knowing anything about the device's physical characteristics
or even the operating system that created the object.
The object abstraction must not hide or
otherwise make unavailable to a File Server or Requester information valuable to the
optimal exploitation of the storage. For quality of service and self-manageability
reasons, the object semantics should make available details of the device's capabilities
without infringing on the device's sovereign self-management. For instance, a typical disc
drive today has several strata of transfer rates. The specifics of these should be known
to a degree sufficient to allow a policy to take advantage of them without affecting the
device's space management mechanism. This could take the form of service levels and
capacity quotas for each.
Objects look and work very much like
traditional files. They are not the same. Files are constructed in an operating system
context. They are often collected in a hierarchical directory structure, which again is
operating system specific. Objects will be operating system independent, with (almost) any
OS able to overlay its file system on the object abstraction.
The following sections describe the
functions that will be needed on a device to support objects. This is preceded by a short
overview of how a storage device might organize the objects.
Device Organization
Space Organization
In order for object oriented devices to
provide the same functionality as is delivered by an operating system with block oriented
devices, the storage space must be manageable to a similar degree and the OODs will have
the constructs to do that. This necessitates having an organization layer on the OODs
above objects. It is almost universal that operating systems provide for allocating disc
space into one or more mutually exclusive regions, called partitions. The same should be
available on OODs. Within a partition, a Requester can create objects. There is a single
list of objects for each partition; any directory hierarchy is overlaid on the OODs' OFS by the operating system. This makes it
possible for any operating system to use this method and makes much easier the use of one
device by multiple operating systems.
The structure within a partition is
envisioned to be a simple, flat organization. Onto this, any operating system can map its
OS structures. An unsigned integer of some specified size will be the permanent signature
for a given object on a device. Associated with this will be a certain number of blocks.
The device will maintain an object list
for each of its partitions and space management information for the entire device.
While there will likely always be a
need to support the BODs and relative
sector addressing, there is a definite security problem with allowing a device to switch
from an OOD to a BOD and back. To insure data security, the change from a BOD to an OOD
must and the change from an OOD to a BOD should obliterate any object
organization on the device.
Object Identifiers
(IDs)
The identifier associated with an
object is chosen by the device and returned to the Requester in response to the command to
create an object. The ID will be an unsigned integer of a specified length. The length
could default to a size set by the drive, or it could be set as a device attribute. A
subset of IDs would be reserved for well known objects, special uses, and special
functions.
Well Known Objects
A well-known Object is one that always
has a specific object ID. In some cases it must exist on every device or in every
partition. Using these IDs starts the Requester traversing the OFS. The following list has possible Object
identifiers associated with each for illustration purposes.
Device Control
Object (DCO) Object 1
This object contains the attributes the
OOD must maintain that relate to the device itself or that relate to all objects on the
device. The attributes are maintained by the SET ATTRIBUTE function. There will be one DCO
per device.
| Type |
Name |
Bytes |
Semantics |
| Security |
Clock |
8 |
Monotonic
counter |
| |
Master
Key |
8 |
Master
key, controlling device key |
| |
Device
Key |
8 |
Device
key, controlling partition keys |
| |
Protection
Level |
1 |
Defines
protection options |
| Partitions |
Partition
Count |
1 |
Number
of partitions on device |
| Device
Attribute |
Object
Attributes |
8 |
Defines
properties associated with all objects on device |
Figure 6: Possible Device
Control Object Attributes
Partition Control
Object (PCO) Objects 2 - 255
This object contains the properties of
a single partition. It describes not only the partition but also any object attributes
that pertain to all in the partition. The OOD will have one PCO for each partition defined
on the device.
| Type |
Name |
Bytes |
Semantics |
| |
Master
Key |
8 |
Encryption
keys |
| |
Current
Working Key |
8 |
|
| |
Previous
Working Key |
8 |
|
| Partition
Attribute |
Object
Attributes |
8 |
Defines
properties associated with all objects in partition |
Figure 7: Possible
Partition Control Object Attributes
Partition Object
List (POL) Object 1 in Partition n
When a partition is created, a second
well-known object will also be built the point of departure for navigating the OFS. It will have the same identifier in
every partition. This object consists of a list of the object IDs for all objects resident
in this partition. The user will have the option to allocate user space associated with
each ID.
| Field |
Bytes |
|
| OBJECT
ID |
8 |
ID used
for any OPEN, READ, WRITE, CLOSE on this OBJECT |
| User
Data |
N |
POL
Attribute sets this, use GET ATTRIBUTE to learn value |
Figure 8: Possible
Partition Control Object Attributes
Object
Associated with every object in a
partition is a set of attributes. The following is the set of attributes posited by CMU.
The length of each attribute is a Seagate estimate.
| Type |
Name |
Set by |
Bytes |
Semantics |
| Access
Control |
Access_Control_Version |
Set
Attribute |
4 |
Changing
ACV revokes capabilities |
| Clustering |
Nearby_Object |
Set
Attribute |
4 |
Locate
this Object near another |
| Cloning |
Copied_Object |
NASD |
4 |
Object
was created Copy Object |
| |
Logical_Size |
NASD,
Set Attribute |
4 |
Largest
offset written |
| Size |
Blocks
Allocated |
NASD,
Set Attribute |
4 |
Number
of Blocks Allocated for Object |
| |
Blocks_Used |
NASD,
write |
4 |
Number
of Blocks used to store data |
| |
Block_Size |
NASD,
Set Attribute |
2 |
Number
of Bytes per Block |
| |
Create_Time |
NASD |
8 |
Timestamp
of Object creation |
| Time |
Modify_Time |
NASD |
4 |
Timestamp
of last data modification |
| |
Attribute_Modify_Time |
NASD |
4 |
Timestamp
of last attribute modification |
| File
system |
FS_Data_Modify_Time |
NASD,
Set Attribute |
4 |
Timestamp
of last data modification |
| |
FS_Attribute_Modify_Time |
NASD,
Set Attribute |
4 |
Timestamp
of last attribute modification |
| |
Object_Attributes |
NASD,
Set Attribute |
4 |
Bits of
Object properties for self-management |
| ??? |
FS-Specific |
Set
Attribute |
256 |
256
bytes uninterpreted by NASD |
Figure 9: Possible Object
Attributes
Device Association
Memberships (MDA) Objects 256 - n
To adequately manage objects spanning
multiple OODs, there will be an object describing an association. An important facility is
the ability to define cross OOD relationships. Devices already intercommunicate; there
will likely be even more of this in an OOD environment. The MDA defines all OODs that are
members of a particular association of OODs. This could be used for something like mirror
paired devices or a RAID set.
| Name |
Bytes |
Semantics |
| Association
Identifier |
2 |
Unique
ID of this set |
| Association
Type |
2 |
Kind of
Association |
| Membership
List |
n |
|
| Association
Identifier |
2 |
|
| Association
Type |
2 |
|
| Membership
List |
n |
|
Figure 10: Possible Device
Associations Object Attributes
Navigating the Object
File System
| Step |
Command |
Partition No. Parameter |
Object No. Parameter |
Comments & Data Returned |
| 1 |
GET
ATTRIBUTE |
0 |
0 |
Device
Attributes (DCO) |
| 2 |
GET
ATTRIBUTE |
0 |
1 |
Attributes
of Partition 1 (PCO) |
| 3 |
GET
ATTRIBUTE |
1 |
1 |
Partition
1 POL
(optional step) |
| 4 |
OPEN |
1 |
1 |
POL |
| 5 |
READ |
1 |
1 |
List of
Objects in Partition 1 |
| 6 |
CLOSE |
1 |
1 |
CLOSE
POL |
| 7 |
OPEN |
1 |
n |
OPEN
Object (ID from POL) |
Figure 11: Steps to
finding an Object in a Partition
This illustration uses the Object IDs
posited in the above descriptions. The first access to the device should be to get the
device attributes. Since the device itself is not within a partition of the device, the
partition ID used in the GET ATTRIBUTE command is zero (0). The Object ID is also zero
(0). The returned information identifies the number of partitions, which can each be
inspected with GET ATTRIBUTE commands for each partition of interest, using the
appropriate partition ID and an Object ID of zero (0).
When Objects in a specific partition
are of interest, the POL is used to get a list of those Objects. An OPEN on the ID from
the POL will start the Requester using the OBJECT.
Device Functions
The OOD must support requests to
provide or store data for a Requester. Moreover, it must assume responsibility for other
functions that would have been done somewhere else most likely in the operating
system in a BOD architecture.
Space management, as well as the maintenance of attributes associated with the objects,
will have to be done by the device.
The following are the operations that
an OOD will have to perform as its contribution to the NAS environment. Each description lists the
service provided by that function and the information that must be passed to the drive in
order for the drive to perform that function. The information that could be returned by
the device to the Requester is also listed to develop a clearer idea of what the function
entails.
Open
This will communicate to the device the
fact that a certain Object is to be accessed or a new one created. It will also indicate
the kind of operations to be performed on the object. The OPEN offers the opportunity to
deliver to the OOD valuable information. It introduces the fact that a new object will be
created, for which the device must take some action. It can set quality of service
attributes or thresholds, which lets the device inform the Requester if the service cannot
be provided. For instance, if a new object has a minimum degree of contiguity, an OPEN
parameter could direct the device to allocate space in units of that size.
Open-Create
The OPEN-CREATE will cause the device
to allocate another Object ID, which will be returned. This the Requester will use to
issue writes to the new object. In addition, the Requester can specify several options,
among which might be:
- Make this file password protected
- Quality of service thresholds
- Encrypt this object
- Specify lock level such as sector
as well as object lock
- Specify versioning
- Mirror support cause all updates
to be mirrored onto another object
- Allocate space in units of a specified
minimum size
- Set rights (as in UNIX)
The needed information includes:
- Permission information
- Partition of the device in which the
object is to be created
- Options
The information returned could include:
- Quota or capacity available on the
device
- Status of request
- ID of new object
A special instance of this command
includes all data associated with an Object, so that in one command an object can be
created, written, and closed.
Open-Update includes extend
The OPEN-UPDATE will allow the
Requester to read and write the specified Object. This also provides for extending the
length of the object.
The needed information includes:
- Permission information
- Partition ID
- Identifier of the object to be accessed
- Type of action to be taken: Update
- Options
The information returned includes:
- Status of request
- Length of Object
- Quota or available capacity
Open-Read only
The OPEN-READ is obvious. It allows no
writing to the file.
The needed information includes:
- Permission information
- Partition ID
- Object ID
- Options
The information returned includes:
- Status of request
- Length of Object
Read
The device is requested to return data
from the specified object.
The needed information includes:
- Permission information
- Object identifier
- Options
- Partition ID
- Starting location of blocks to be read
- Number of blocks to be read
The information returned includes:
- Status of request
- Length of data
- Data
Write
This will cause the specified number of
blocks to be written to the designated object at the relative location also specified.
Information required is similar to that for a READ. A WRITE might also cause other events
to occur. If parity support was called for on the target device, a write could
automatically cause an XOR to be performed on the data and the parity data to be written
to one or more previously specified parity devices (through a DA).
An option on this function would cause
all outstanding writes that have not been physically put on the media to be written.
The needed information includes:
- Permission information
- Object identifier
- Partition ID
- Starting location of blocks to be
written
- Number of blocks to be written
- Options
- Data
The information returned includes:
Close
This will cause the Object to be
identified as no longer in use by a given Requester. Any changes as a result of writing to
the Object, if not already written to the media, will be written at this time. The
attributes for a newly created object will be updated at this time. The CLOSE could also
specify the residual cache status in the Requester. If the Requester can inform the OOD
that data is still being cached for the closed Object or no longer being cached, the OSs
can retain cache information for those applications where files will be closed and opened
again in quick succession. At the same time, the device will be able to keep track of who
may have to be informed in the event of coherency collisions, should another Requester
request access to this Object.
The needed information includes:
- Permission information
- Object identifier
- Options
The information returned includes:
Remove
Delete the Object. The ID becomes
usable again.
The needed information includes:
- Permission information
- Partition ID
- Object identifier
- Options
The information returned includes:
Create Partition
Partition the drive into one or more
regions. All space need not be accounted for. Regions can also span zones. The operation
would implicitly establish an Object list for the partition.
There are two orthogonal uses for
partitions. The first is a tiling arrangement with partitions true divisions of the
storage space on a device. This would be used to divide the space by service levels, such
as data rate. They could not be resized but could be removed and recreated. The second is
a logical partitioning where the intent is more to organize the objects than manage the
space. These partitions could be resized dynamically.
Regardless of the type of partitioning,
this function will also create POL, which cannot be removed. This object will serve as the
starting point for navigating the objects in the partition.
The needed information includes:
- Permission information
- Options
- Partition ID
- Initial space allocation
The information returned includes:
- Status of request
- Partition map
Remove Partition
This is the function that will remove a
partition and implicitly delete the POL. Any Objects listed in this POL will be deleted.
The needed information includes:
- Permission information
- Options
- Partition ID
The information returned includes:
- Status of request
- Partition map
|