I was heavily considering using Mini-UNIX for this project, but picked LSX for a few reasons. The biggest reason is that Mini-UNIX has features that I don't really need, and I figured it would be easier to add what I wanted to LSX than remove what I didn't from Mini-UNIX. My target system (A Heathkit H11) does have the full 56K of memory, but I would like to get as much user space as possible. It will also be running on the equivalent of a RX02 disk system, not a high speed spinning disk that Mini-UNIX seems to expect. Regardless, if LSX proves to be too much of a hassle, I will probably just switch to Mini-UNIX.

The inode allocation stuff seems to be what is causing the issues. When I mount the filesystem on stock V6, create a file, and then remount it on LSX, it (seems) to work again. Hopefully this code isn't too hard to add back, but if need be I can live with the 100 file limit. Unless I decide to try to get a hard drive hooked up, of course.

Right now I am working on getting the hardware up and running again. I am hoping to bring all of this to VCFMW to show off, but since I have to go back to college in a few weeks I have a lot of work ahead of me.

Thank you for the help,

On Mon, Aug 1, 2022 at 12:37 AM Heinz Lycklama <heinz@osta.com> wrote:
Remember that the LSX and Mini-UNIX systems were
developed for two different purposes.
     1. LSX had limited resources available to it and thus
         some general-purpose features had to be removed.
         LSX supported some new features for the support
         of real-time systems and intelligent terminals. The
         features included contiguous files and asynchronous
         read/write capabilities.
     2. Mini-UNIX was developed to run on PDP11/10 computers
         without memory management support at the hardware level.
         Larger main memory and faster larger disks were available.
         It was designed to support up to four users at a time, and
         thus needed to support the latest UNIX System features
         without the additional features available on LSX.

To answer the question below about kernel code to create
contiguous - the only change in the kernel code was to
recognize a contiguous file in the inode. The actual file
had to be created by a system program to keep the
kernel as small as possible.


On 7/31/2022 12:57 PM, Noel Chiappa wrote:
> {I was going to reply to an earlier message, but my CFS left me with
> insufficient energy; I'll try and catch up on the points I was goibf to make
> here.}
>      > From: Gavin Tersteeg
>      > This leaves me with about 1.9kb of space left in the kernel for
>      > additional drivers
> I'm curious how much memory you have in your target system; it must not be a
> lot, if you're targeting LSX.
> I ask because LSX has been somewhat 'lobotimized' (I don't mean that in a
> negative way; it's just recognition that LSX has had a lot of corners
> trimmed, to squeeze it down as much as possible), and some of those trims
> behind some of the issues you're having (below).
> At the time the LSI-11 came out, semiconductor DRAM was just getting started,
> so an LSI-11 with 8KB onboard and a 32KB DRAM card (or four 8KB MMV11 core
> memory cards :-), to produce the 40KB target for LSX systems, was then a
> reasonable configuration. These days, one has to really search to find
> anything smaller than 64KB...
> It might be easier to just run MINI-UNIX (which is much closer to V6, and
> thus a known quantity), than add a lot of things back in to LSX to produce
> what will effectively be MINI-UNIX; even if you have to buy a bit more QBUS
> memory for the machine.
>      > the LSX "mkfs" was hardcoded to create filesystems with 6 blocks of
>      > inodes. This maxed the number of files on a disk to 96, but even with
>      > the maximum circumvented LSX would only tolerate a maximum of 101 files.
> And here you're seeing the 'lobotomizing' of LSX come into play. That '101'
> made me suspicious, as the base V6 'caches' 100 free inodes in the
> super-block; once those are used, it scans the ilist on disk to refill it.
> The code in alloc$ialloc in LSX is hard to understand (there are a lot of
> #ifdef's), and it's very different from the V6 code, but I'm pretty sure it
> doesn't refill the 'cache' after it uses the cached 100 free inodes. So, you
> can have as many free inodes on a disk as you want, but LSX will never use
> more than the first 100.
> (Note that the comment in the LSX source "up to 100 spare I nodes in the
> super block. When this runs out, a linear search through the I list is
> instituted to pick up 100 more." is inaccurate; it probably wasn't updated
> after the code was changed. ISTR tis is true of a lot of the comments.)
>     > A fresh filesystem that was mkfs'd on stock V6 can be mounted on LSX,
>     > but any attempt to create files on it will fail.
> The V6 'mkfs' does not fill the free inode cache in the super-block. So, it's
> empty when you start out. The LSX ialloc() says:
>       if(fp->s_ninode > 0) {
>       ...
>       }
>       u.u_error = ENOSPC;
>       return(NULL);
> which would produce what you're seeing.
> Also, another problem with trying to 'push' LSX into a previously un-handled
> operating regions (e.g. large disks, but there are likely others) is that
> there are probably things that are un-tested in that previously unused
> operating mode, and there may be un-found bugs that you trip across.
>      > Interestingly enough, existing large V6 RK05 images can be mounted,
>      > read from, and written to. The only limitations on these pre existing
>      > images is that if enough files are deleted, the system will randomly crash.
> I had a look at the source (in sys4.c, nami.c, iget.c, rdwri.c, and alloc.c),
> but I couldn't quickly find the cause; it isn't obvious. (When unlinking a
> file, the blocks in the file have to be freed - that's inode 'ip' - and the
> directory - inode 'pp' - has to be updated; so it's pretty complicated.)
>     > The information there about continuous files ... will be extremely
>     > helpful if I ever try to make those work in the future.
> My recollection is that the LSX kernel doesn't have code to create contiguous
> files; the LSX page at the CHWiki says "the paper describing LSX indicates
> there were two separate programs, one to allocate space for such files, and
> one to move a file into such an area, but they do not seem to be extant". If
> you find them, could you let me know? Thanks.
>       Noel