paul@471 | 1 | = Roadmap = |
paul@471 | 2 | |
paul@471 | 3 | The development of a framework for demand-paged filesystem functionality is a |
paul@471 | 4 | potentially open-ended activity. Starting with an initial need to be able to |
paul@471 | 5 | read and write files from and to a storage medium, once features such as |
paul@471 | 6 | [[Paging|demand paging]] are introduced, the broader activity expands to |
paul@471 | 7 | encompass other exercises such as the implementation of a [[Program |
paul@471 | 8 | Loading|program loading]] mechanism. |
paul@471 | 9 | |
paul@471 | 10 | Some development priorities can nevertheless be identified. Here are some |
paul@471 | 11 | ideas and tentative plans. |
paul@471 | 12 | |
paul@471 | 13 | <<TableOfContents(2,2)>> |
paul@471 | 14 | |
paul@471 | 15 | == Program or Process Server == |
paul@471 | 16 | |
paul@471 | 17 | The provision of a program server to initiate and monitor program execution |
paul@471 | 18 | would do much to support familiar operating system and language environment |
paul@471 | 19 | primitives, along the lines of `exec` and `spawn` operations found in similar |
paul@471 | 20 | systems. |
paul@471 | 21 | |
paul@471 | 22 | L4Re employs a "parent" interface to monitor program events, with a "signal" |
paul@471 | 23 | being sent upon program termination. This signal is sent by the C library |
paul@471 | 24 | implementation when the `main` function returns control to the C library. It |
paul@471 | 25 | seems worthwhile adopting this approach for compatibility with L4Re. |
paul@471 | 26 | |
paul@471 | 27 | == Library Loading Support == |
paul@471 | 28 | |
paul@471 | 29 | Currently, the program loading functionality does not support dynamic |
paul@471 | 30 | library loading. |
paul@471 | 31 | |
paul@471 | 32 | == Test Sequencing and Shell Functionality == |
paul@471 | 33 | |
paul@471 | 34 | Currently, testing attempts to validate the behaviour of various operations |
paul@471 | 35 | within individual programs, but this involves a fair amount of repetitive |
paul@471 | 36 | work. Meanwhile, the `fsaccess` program offers a simple way of performing |
paul@471 | 37 | filesystem operations resembling that of a shell, but it does not offer the |
paul@471 | 38 | kind of sophisticated shell functionality that would help in assessing whether |
paul@471 | 39 | operations behave as expected. |
paul@471 | 40 | |
paul@471 | 41 | If proper program or process monitoring were to be supported, a very simple |
paul@471 | 42 | shell could be implemented, this being able to run arbitrary programs instead |
paul@471 | 43 | of a small selection of operations. A more natural Unix-like approach could |
paul@471 | 44 | then be taken, with tests implemented by individual programs, and with such |
paul@471 | 45 | programs being combined to assess test output. To facilitate this, support for |
paul@471 | 46 | providing input and output streams to processes would also be required. |
paul@471 | 47 | |
paul@471 | 48 | == C Library Support == |
paul@471 | 49 | |
paul@471 | 50 | The previous iteration of this general effort introduced a new C library based |
paul@471 | 51 | on Newlib that employed the filesystem access framework. It seems likely that |
paul@471 | 52 | a similar approach will be taken for this iteration as well. |
paul@471 | 53 | |
paul@471 | 54 | == Virtual Filesystems == |
paul@471 | 55 | |
paul@471 | 56 | The previous iteration of this work provided a virtual filesystem server that |
paul@471 | 57 | could combine different filesystems, permitting them to be mounted into the |
paul@471 | 58 | same hierarchy. L4Re seems to attempt this using its namespace concept, but |
paul@471 | 59 | this results in a kind of discontinuity between the namespaces hosting the |
paul@471 | 60 | filesystem "mountpoints" and the mounted filesystems themselves, at least in |
paul@471 | 61 | terms of the metadata supported by the two types of naming hierarchies. |
paul@471 | 62 | Namespaces appear to behave only superficially as directories when treated as |
paul@471 | 63 | such. |
paul@471 | 64 | |
paul@471 | 65 | One approach might involve replicating a traditional Unix approach, with a |
paul@471 | 66 | base filesystem provided by a conventional filesystem implementation, and with |
paul@471 | 67 | mounted filesystems residing at mountpoints within that filesystem. This would |
paul@471 | 68 | have the benefit of supporting access controls using the metadata in the root |
paul@471 | 69 | filesystem. If a block device were provided via the filesystem, then the |
paul@471 | 70 | ability to mount it should be restricted according to that device's |
paul@471 | 71 | access-related metadata. |
paul@471 | 72 | |
paul@471 | 73 | It should still be possible to complement this approach with a way of binding |
paul@471 | 74 | filesystems to arbitrary locations for a given program. This would permit |
paul@471 | 75 | programs to access devices or services for which they have access |
paul@471 | 76 | independently of any privilege hierarchy defined by the system. For example, a |
paul@471 | 77 | program operated by a user may be able to authenticate itself to access a |
paul@471 | 78 | remote service, and such authentication and associated privileges would be |
paul@471 | 79 | orthogonal to those defined by the local system. |
paul@471 | 80 | |
paul@471 | 81 | == Monitoring Facilities == |
paul@471 | 82 | |
paul@471 | 83 | It would be useful to be able to monitor various components so as to get an |
paul@471 | 84 | idea of their behaviour and how well they perform. A filesystem's registry of |
paul@471 | 85 | open files could be exposed through some kind of control interface, as could |
paul@471 | 86 | the regions of individual files that are currently held in memory. A process |
paul@471 | 87 | or program server could expose its registry of processes similarly. |
paul@471 | 88 | |
paul@471 | 89 | Although it might not necessarily be desirable for some kinds of systems to |
paul@471 | 90 | have centralised registries of things like files and processes, exposed |
paul@471 | 91 | through the provision of utilities like `lsof` and `ps`, selective access to |
paul@471 | 92 | individual registries of information would still be helpful. |