User`s manual

136 digi.com File Systems
10.1.4.2 Logical Extents (LX)
The presence of both “devices” causes an initial default configuration of two logical extents (a.k.a., LXs)
to be set up. An LX is analogous to disk partitions used in other operating systems. It represents a contigu-
ous area of the device set aside for file system operations. An LX contains sectors that are all the same
size, and all contiguously addressable within the one device. Thus a flash device with three different sector
sizes would necessitate at least three logical extents, and more if the same-sized sectors were not adjacent.
Files stored by the file system are comprised of two parts: one part contains the actual application data, and
the other is a fixed size area controlled by the file system containing data that tracks the file status. This
second area, called metadata, is analogous to a “directory entry” of other operating systems. The metadata
consumes one sector per file.
The data and metadata for a file are usually stored in the same LX, however they may be separated for per-
formance reasons. Since the metadata needs to be updated for each write operation, it is often advanta-
geous to store the metadata in battery-backed SRAM with the bulk of the data on a flash device.
Specifying Logical Extents
When a file is created, the logical extent(s) to use for the file are defined. This association remains until the
file is deleted. The default LX for both data and metadata is the flash device (LX #1) if it exists; otherwise
the RAM LX. If both flash and RAM are available, LX #1 is the flash device and LX #2 is the RAM.
When creating a file, the associated logical extents for the data and the metadata can be changed from the
default by calling fs_set_lx(). This functions takes two parameters, one to specify the LX for the
metadata and the other to specify the LX for the data. Thereafter, all created files are associated with the
specified LXs until a new call to fs_set_lx() is made. Typically, there will be a call to
fs_set_lx() before each file is created; doing so ensures that the new file gets created with the desired
associations. The file creation function, fcreate(), may be used to specify the LX for the metadata by
providing a valid LX number in the high byte of the function’s second parameter. This will override any
LX number set for the metadata in fs_set_lx().
Further Partitioning
The initial default logical extents can be divided further. This must be done before calling fs_init().
The function to create sub-partitions is called fs_setup(). This function takes an existing LX number,
divides that LX according to the given parameters, and returns a newly created LX number. The original
partition still exists, but is smaller because of the division. For example, in a system with LX#1 as a flash
device of 256K and LX#2 as 4K of RAM, an initial call to fs_setup() might be made to partition
LX#1 into two equal sized extents of 128K each. LX#1 would then be 128K (the first half of the flash) and
LX#3 would be 128K (the other half). LX#2 is untouched.
Having partitioned once, fs_setup() may be called again to perform further subdivision. This may be
done on any of the original or new extents. Each call to fs_setup() in partitioning mode increases the
total number of logical extents. You will need to make sure that FS_MAX_LX is defined to a high enough
value that the LX array size is not exceeded.
While developing an application, you might need to adjust partitioning parameters. If any parameter is
changed, FS2 will probably not recognize data written using the previous parameters. This problem is
common to most operating systems. The “solution” is to save any desired files to outside the file system
before changing its organization; then after the change, force a format of the file system.