Hats off. I'll test it and give my feedback. I'm very interested in your project, IMHO is one of the most interesting ones I have seen in years.
BTW: are you in contact with ReactOS guys? Maybe would make sense to join efforts with them...? El dom, 12 may 2024 a las 17:40, Dr. Chang Liu, PhD. (<cl9...@gmail.com>) escribió: > Dear seL4 community, > > I'm announcing the release of v0.2 of Neptune OS, an operating system that > I have been developing that aims to create a Windows NT personality on top > of the seL4 microkernel, by implementing the upper layer of the Windows > kernel called the NT Executive, as well as Windows kernel drivers, as > userspace processes under seL4. For those that remember the release of v0.1 > two years ago and have been wondering, yes, the project is still alive. I > have been a bit busy with postdoc work (academia is hard!!) last year but > finally got a bit of free time lately to get enough work done that I think > is interesting enough to warrant a v0.2 release. The project can be found > on github (https://github.com/cl91/NeptuneOS). > > The biggest feature of the v0.2 release is a (I hope) reasonably complete > file system stack supporting read-ahead and write-back caching, that > includes a FAT12/16/32 file system driver and a floppy controller driver, > both of which are ported over from ReactOS (but running in userspace > instead of kernel space). I'll explain the technical points below but you > can watch a short video (https://www.youtube.com/watch?v=o3FLRnkh0ic) that > demonstrates the basic file system commands, including cd, dir, copy, move, > del, md, and mount/umount. > > Arguably the biggest challenge for a userspace file system stack is > minimizing the performance penalties of the additional context switches. > There are radical solutions to this problem along the lines of Unikernels > that require linking the FS code with the applications. These solutions are > not very practical for everyday desktop or server OSes. On traditional OSes > there is FUSE on Linux/Unix which is often regarded as having inferior > performance compared to equivalent kernel-mode drivers. To some extent this > problem is inevitable, as context switches are always more expensive than > function calls, no matter how much you optimize the former. However, that > doesn't mean we can't optimize our OS design so that the performance > penalties of running file systems in userspace are small enough that the > benefit of userspace file systems outweighs their performance cons. > > The key to this performance goal I believe is an efficient cache design. > Indeed, for FUSE it is possible to tune the cache parameters to drastically > increase its performance (see [1] and the citation therein). On Neptune OS > we cache aggressively: not only do we cache the underlying block device > pages, we also maintain the relationship between file regions and their > underlying disk regions. In other words, the primary role of the file > system driver is to translate an offset of a file object into an offset of > the underlying storage device, and this relationship is cached since they > are not expected to change, at least for currently open files. Furthermore, > we cache file attributes as well as the file hierarchy itself, so that if a > process opened a file and the file system driver returned a valid handle, > we do not need to query the FS driver again (at least not before the first > process closes the handle) when another process opens the same file with > the same attributes (because we know it exists and know about its > attributes). Of course, we need to be careful when things get > closed/deleted/moved, etc, so we need a mechanism to synchronize > information with the file system driver process. This is done by sending > messages using the seL4 IPC. > > What is amazing is the fact that despite these changes to the inner > workings of the NT cache manager, not to mention the fact that all drivers > are now running in userspace, the Windows kernel driver API remains largely > unchanged, so that it is indeed possible to port the relevant ReactOS > drivers to our architecture without doing too much work (I believe I spent > three to four man-weeks worth of work porting the FAT file system itself). > The vast majority of work is in fact removing code rather than writing new > code, because of the simplifications of locking and other synchronization > issues that simply disappear when drivers run in userspace. For those who > are interested in knowing more about our architecture and are perhaps > interested in porting drivers from ReactOS, I am in the process of writing > a book (found under the docs of the github repo) called "Neptune OS > Developer Guide" that explains all these things. Note this is very much a > work-in-progress. > > In addition to the cache manager work, in order for the file system stack > to function, several other system components must be implemented, most > notably DMA and Win32 SEH (structured exception handling). Our DMA > architecture supports both PCI bus mastering and the weird ISA DMA that > must go through the ISA DMA controller. The latter requires managing the > so-called "map registers" that must be shared across different ISA devices. > Again we find that the Windows kernel API can be adapted to a seL4-based > userspace driver model almost straightforwardly. This is perhaps not so > surprising, because NT was allegedly originally designed as a microkernel > OS (this is inevitably an urban legend, but early NT design documents refer > to the code beneath the NT Executive as the "microkernel", so there is > reason to believe). > > To summarize, what I hope is that with the design outlined above, we can in > fact have a practical, reasonably performant userspace file system stack > without resorting to radical departures from traditional desktop/server > computing paradigms. Of course, it's ridiculous to talk about performance > for floppy disk controllers, so the primary goal of the next release is to > port the ATA/AHCI hard disk drivers from ReactOS to Neptune OS, in order to > produce a valid benchmark against equivalent kernel mode designs. Anyway, > if you read so far, I hope you find the work interesting (I personally > do!). If you have any comments, or even better if you ran the code and > found bugs/issues, please do open an issue in the github repo. Thank you! > > [1] > > https://medium.com/@xiaolongjiang/linux-fuse-file-system-performance-learning-efb23a1fb83f > > --- > Dr. Chang Liu, PhD. > github.com/cl91/NeptuneOS > _______________________________________________ > Devel mailing list -- devel@sel4.systems > To unsubscribe send an email to devel-leave@sel4.systems > _______________________________________________ Devel mailing list -- devel@sel4.systems To unsubscribe send an email to devel-leave@sel4.systems