To Design and Implement an Object Store for the Walnut Kernel with support for advanced features such as transactions and versioning.
The Walnut Kernel is a persistent, capability based operating system kernel developed at and extending the previous work in the School of Computer Science and Software Engineering at Monash University. Building on work in the Password-Capability System, Walnut has some very unique features such as its capability architecture, charging scheme and persistence. Walnut requires a slightly specialised set of features from its equivalent of a file system, the Walnut object store. Various deficiencies with the original design were found, and it was decided that alternative systems should be explored.
This thesis extends initial work on the Walnut kernel by examining the issues related to its object store. Other operating systems use a file system as their method of on disk storage and various file systems are closely examined for their efficiency, reliability and possible applicability to a Walnut system.
As processes are persistent in Walnut, care must be taken to ensure these can be restored from disk in a consistent state. That is, the image on disk should match the appearance of these objects at a specific time, in essence a ``snapshot'' of the process and all objects it is using. We call this the problem of inter-object dependencies as the process object depends on a specific version of the objects it has loaded.
The addition of the revision tracking of objects is examined with the aim towards helping solve the problem of inter-object dependencies and remove the consequences of user error. A discussion on the possible Walnut interface and possible security implications is included and it is found that there needs to be further exploration of "Temporal Windowing" before access to previous revisions of objects can be done in both a flexible and secure manner.
The near complete design of a new object store for the Walnut is presented providing a flexible volume format that can be extended to encompass future ideas and features. Knowledge gained from other systems helps us in determining that this system has the capacity to fulfil the listed requirements. A proof of concept implementation in a simulation environment is presented with support for most of the features discussed and reasonable performance considering its stage in development. The implementation has been written so that it can be extended and eventually incorporated into Walnut.
I recorded progress, thoughts and comments in my Weblog, inside the hons-project category.
If you are interested in some Walnut related things, sometimes not too academic :)
There are documents by several other poeple detailing parts of the theory behind Walnut, here are some of them (look at my bibliography for more references):
The following code should be considered pre-alpha, pre-working, pre-everything really... It's a tarball of my working directory - literally. It will be mostly broken - get used to it.
A quick runthrough of some of the stuff you can do with the current code. Note that I've removed some of the output from the listings here as it's just a bit verbose and lists what testkit is doing with block devices and caching. Not all that interesting unless you're a cache freak.
Going to create volume 'volumename' with 0x2800 blocks at 0x1000 bytes each ALLOCATION GROUPS: 0x8, each 0x500 SuperBlock at Block 0 BACKUP SuperBlock at Block 0x27ff BACKUP SuperBlock at Block 0x50000500000 (offset 0x500) BACKUP SuperBlock at Block 0xa0000a00000 (offset 0xa00) BACKUP SuperBlock at Block 0xf0000f00000 (offset 0xf00) BACKUP SuperBlock at Block 0x140001400000 (offset 0x1400) BACKUP SuperBlock at Block 0x190001900000 (offset 0x1900) BACKUP SuperBlock at Block 0x1e0001e00000 (offset 0x1e00) BACKUP SuperBlock at Block 0x230002300000 (offset 0x2300) BITMAP: Zeroing 0x2 (offset 2000) length 1 BITMAP: Zeroing 0x502 (offset 502000) length 1 BITMAP: Zeroing 0xa02 (offset a02000) length 1 BITMAP: Zeroing 0xf02 (offset f02000) length 1 BITMAP: Zeroing 0x1402 (offset 1402000) length 1 BITMAP: Zeroing 0x1902 (offset 1902000) length 1 BITMAP: Zeroing 0x1e02 (offset 1e02000) length 1 BITMAP: Zeroing 0x2302 (offset 2302000) length 1 Onode Index node created at: AG: 0, Start: 2, Len: 1 ****ONODE INDEX**** 2
Primary Superblock ------------------ Volume name is: volumename MAGIC1: 0x46436673 MAGIC2: 0x3f8ec2a1 VERSION: 0x10001 BITS: 64 LENGTH: 320 bytes Block Size: 4096 No. Blocks: 10240 WARNING-CORRUPT: This is the start of an Allocation Group FLAGS: 0x3000000001 - Volume has been used by EXPERIMENTAL code. It's probably b0rked. - Volume journals Meta Data Number of Clean Mounts: 0 Number of UnClean Mounts: 0 Time Created: 1068436506 Time last cleanly mounted:1068436506 Time last dirty mounted: 0 Onode Index: ------------ ONode Index location: 2 Number of onodes: 0 used, 254 available, 0 total Next ID: 1 Node Size: 254 Checking end of disk super block backup... This is the End of a volume FLAGS: 0x3000000002 - Volume has been used by EXPERIMENTAL code. It's probably b0rked. - Volume journals Meta Data Checking used blocks... ----------------------- AG 0: 0,1,2, AG 1: 0,1, AG 2: 0,1, AG 3: 0,1, AG 4: 0,1, AG 5: 0,1, AG 6: 0,1, AG 7: 0,1, Onode Index Node: 0 in block 2 Used: 0/254 key:block
test_v1 in fork 1
Primary Superblock ------------------ Volume name is: volumename MAGIC1: 0x46436673 MAGIC2: 0x3f8ec2a1 VERSION: 0x10001 BITS: 64 LENGTH: 320 bytes Block Size: 4096 No. Blocks: 10240 WARNING-CORRUPT: This is the start of an Allocation Group FLAGS: 0x3000000001 - Volume has been used by EXPERIMENTAL code. It's probably b0rked. - Volume journals Meta Data Number of Clean Mounts: 0 Number of UnClean Mounts: 0 Time Created: 1068437228 Time last cleanly mounted:1068437228 Time last dirty mounted: 0 Onode Index: ------------ ONode Index location: 2 Number of onodes: 0 used, 254 available, 0 total Next ID: 2 Node Size: 254 Checking end of disk super block backup... This is the End of a volume FLAGS: 0x3000000002 - Volume has been used by EXPERIMENTAL code. It's probably b0rked. - Volume journals Meta Data Checking used blocks... ----------------------- AG 0: 0,1,2,3,11,301,302,303, AG 1: 0,1, AG 2: 0,1, AG 3: 0,1, AG 4: 0,1, AG 5: 0,1, AG 6: 0,1, AG 7: 0,1, Onode Index Node: 0 in block 2 Used: 1/254 key:block 1804289383:3 Onode Index LEAF: 1 in block 3 Used: 1/254 key:block 1804289383:11
FOUND A LEAF! READ LEAF 0x1 block 3 used 1 leaf i = 0, 1804289383 11 +++++++GOING TO GO AND WRITE 0++++++++ *******WRITING 10 bytes*******
Primary Superblock ------------------ Volume name is: volumename MAGIC1: 0x46436673 MAGIC2: 0x3f8ec2a1 VERSION: 0x10001 BITS: 64 LENGTH: 320 bytes Block Size: 4096 No. Blocks: 10240 WARNING-CORRUPT: This is the start of an Allocation Group FLAGS: 0x3000000001 - Volume has been used by EXPERIMENTAL code. It's probably b0rked. - Volume journals Meta Data Number of Clean Mounts: 0 Number of UnClean Mounts: 0 Time Created: 1068437228 Time last cleanly mounted:1068437228 Time last dirty mounted: 0 Onode Index: ------------ ONode Index location: 2 Number of onodes: 0 used, 254 available, 0 total Next ID: 2 Node Size: 254 Checking end of disk super block backup... This is the End of a volume FLAGS: 0x3000000002 - Volume has been used by EXPERIMENTAL code. It's probably b0rked. - Volume journals Meta Data Checking used blocks... ----------------------- AG 0: 0,1,2,3,11,301,302,303,304,305, AG 1: 0,1, AG 2: 0,1, AG 3: 0,1, AG 4: 0,1, AG 5: 0,1, AG 6: 0,1, AG 7: 0,1, Onode Index Node: 0 in block 2 Used: 1/254 key:block 1804289383:3 Onode Index LEAF: 1 in block 3 Used: 1/254 key:block 1804289383:11