Must be on Ubuntu 19.10
LcFHandle lcopen (const char *path); - This function will open a file(named path, e.g.,) in the filesystem. . If the file does not exist, it should be created and set to zero length. If it does exist, it should be opened, and its read/write position should be
set to the first byte. Note that there are no subdirectories in the filesystem, just files (so you can treat the path as a filename). The function should return a unique filehandle used for subsequent operations or -1 if a failure occurs.
int lcclose(LcFHandle fh ); -This function closes the file referenced by the file handle that was previously open. The function should fail (and return -1) if the file handle is bad or the file was not previously open.
int lcread(LcFHandle fh, char *buf, size_t len); -This function
should read count bytes from the file referenced by the file handle at the current position.
Note that if there are not enough bytes left in the file, the function should read to the end
of the file and return the number of bytes read. If there are enough bytes to fulfill the
read, the function should return count. The function should fail (and return -1) if the file
handle is bad or the file was not previously open.
int lcwrite(LcFHandle fh, char *buf, size_t len); -The function
should write count bytes into the file referenced by the file handle. If the write goes
beyond the end of the file the size should be increased. The function should always return
the number of bytes written, e.g., count. The function should fail (and return -1) if the file
handle is bad or the file was not previously open.
int lcseek(LcFHandle fh, size_t off ); -The function should set the
current position into the file to loc, where 0 is the first byte in the file. The function should
fail (and return -1) if the loc is beyond the end of the file, the file handle is bad or the file
was not previously open.
int lcshutdown(void ); --The function should shut down the system, including
powering off the devices and closing all files
The Lion Cloud Device Cluster (LionCloud)
You will implement your driver on top of the Lion Cloud device cluster, which is a collection of virtual storage devices that communicate over a kind of virtual bus/network connection. You will begin by powering on the bus, probing to find out how many devices are available (there are a maximum of 16), then allocating space on the devices as the application creates and writes file data to the devices. Each device is uniquely identified by is device Id (whose type is LcDeviceId) which is discovered during the probe process. Each device has a two-level addressing scheme, where it has a number of sectors (s) containing blocks (b); therefore each device has s*b total blocks. A block is a region of memory of LC_DEVICE_BLOCK_SIZE bytes, as declared in the (see lcloud_controller.h header file.
To execute an opcode, create a 64 bit value (LCloudRegisterFrame) and pass it any needed buffers to the bus function defined in cart_controller.h:
LCloudRegisterFrame lcloud_io_bus( LCloudRegisterFrame frm, void *xfer );
All messages use the following registers:
Register | Request Value | Response Value |
b0 | 0 when message sent to devices | 1 when message sent from devices |
b1 | 0 when sending to devices | 1 is acknowledge/success from device, any other value represents failure code from device |
c0 | always the operation code (see LcOperationCode type in lcloud_controller.h) | The same code as sent. |
The operation code (LcOperationCode) indicates what operation is being requested (when sending) or completed (when receiving from the device). The following operations are available:
Operation | Description | Remaining register use | |
LC_POWER_ON | Initialize interface to the device cluster | All other registers (c1, c2, d0, d1) should be 0 on both send and receive | |
LC_DEVPROBE | Probe the bus to see what devices are | All other registers should be 0 on both send. On receive, d0 contains a bit mask of present devices, where device there are a possible 16 devices, where the bit 2^x=1 indicates that device ID x is present. For example if the 2^4 (16) is present, then you know a device with ID 4 is on the bus. | |
LC_BLOCK_XFER | Transfer a block to the device | o c1 - the device ID for the device to read fromo c2 - LC_XFER_WRITE for write, LC_XFER_READ for reado d0 - sector to read/write fromo d1 - block to read/write from | |
LC_POWER_OFF | Power off the device | All other registers should be 0 on both send and receive |
sudo apt-get install libcurl4-gnutls-dev libgcrypt-dev
./lcloud_sim -v cmpsc311-assign2-manifest.txt cmpsc311-assign2-workload.txt
DescriptionIn this final assignment, the students will demonstrate their ability to apply two ma
Path finding involves finding a path from A to B. Typically we want the path to have certain properties,such as being the shortest or to avoid going t
Develop a program to emulate a purchase transaction at a retail store. Thisprogram will have two classes, a LineItem class and a Transaction class. Th
1 Project 1 Introduction - the SeaPort Project series For this set of projects for the course, we wish to simulate some of the aspects of a number of
1 Project 2 Introduction - the SeaPort Project series For this set of projects for the course, we wish to simulate some of the aspects of a number of