More filesystem ideas
This commit is contained in:
parent
b25983dcd6
commit
20bff5af7e
1 changed files with 12 additions and 5 deletions
|
@ -17,14 +17,21 @@ Therefore, the "filesystem" code will just be a library that's simple a low-leve
|
|||
|
||||
|
||||
## Filesystem Layout
|
||||
|
||||
| Name | Size | Header |
|
||||
|------|------|--------|
|
||||
| Boot Sector | `128` | `None` |
|
||||
| Kernel Sector | `1024` | `None` |
|
||||
| Config Sector | `u64` | `PartitionHeader` |
|
||||
| User Sector(s) | `u64` | `PartitionHeader` |
|
||||
|
||||
### Partition
|
||||
A virtual section of the disk.
|
||||
It's identified simply by numerical order.
|
||||
```rust
|
||||
const BOOT_SIZE: u64; // How large the BOOT partition will be
|
||||
const LABEL_SIZE: u64; // Number of characters that can be used in the partition label
|
||||
const LABEL_SIZE: u16; // Number of characters that can be used in the partition label
|
||||
|
||||
let NUM_CHUNLKS: u64; // Number of chunks in a specific partition
|
||||
let NUM_CHUNKS: u64; // Number of chunks in a specific partition
|
||||
struct PartitionHeader {
|
||||
boot: bool, // Boot flag
|
||||
label: [char; LABEL_SIZE], // Human-readable label. Not UTF-8 though :/
|
||||
|
@ -63,8 +70,8 @@ Compression of the data should also be possible, due to `bincode` supporting [fl
|
|||
Similarely **AES** encryption can be used, and this allows for only specific chunks to be encrypted.[^encryption]
|
||||
|
||||
### Reading
|
||||
On boot, we start executing code from the beginning of the disk (the boot partition, although that's meaningless at this point).
|
||||
The `kernel` then reads in bytes from the first partition *(as the **BOOT** partition is fixed-size, we know when this starts)* into memory, serializing it into a `PartitionHeader` struct via [bincode](https://lib.rs/crates/bincode).
|
||||
On boot, we start executing code from the **Boot Sector**. This contains the assembly instructions, which then jump to the `kernel` code in the **Kernel Sector**.
|
||||
The `kernel` then reads in bytes from the first partition *(as the sectors are fixed-size, we know when this starts)* into memory, serializing it into a `PartitionHeader` struct via [bincode](https://lib.rs/crates/bincode).
|
||||
|
||||
From here, as we have a fixed `CHUNK_SIZE`, and know how many chunks are in our first partition, we can read from any chunk on any partition now.
|
||||
On startup, an *Actor* can request to read data from the disk. If it has the right [capabilities](/development/design/actor.md#ocap), we find the chunk it's looking for[^find_chunk], parse the data (using `bincode` again), and send it back.
|
||||
|
|
Loading…
Reference in a new issue