Pilot Change Log Last edited by Levin on December 9, 1982 11:39 am Last edited by Paul Rovner on February 17, 1983 1:48 pm This is a log of all changes made to the Rubicon version of the Pilot Kernel. 30-Nov-81 12:49:04 Modules affected: MapLogImpl The maplog implementation was completely rewritten to avoid any reference to RuntimeInternal.CleanMapLog. This means the maplog is no longer a true log but a data structure that encodes the entire history of VM mapping changes since system startup. 14-Jan-82 16:45:02 Modules affected: SwapBufferImpl. The swap buffer implementation originally allocated enough virtual memory to span all of real memory. This seems OK in a machine where the ratio of virtual memory size to real memory size is large, but for our Dorados at present, the ratio is only 4. Furthermore, there is no absolute guarantee that a swap buffer the size of real memory is sufficient to avoid deadlock, although the probability of such a mishap is extremely low. I've arbitrarily reduced the size of the swap buffer to 500 pages until I can figure out a more useful way of choosing its size. 14-Jan-82 16:57:39 Modules affected: FrameImpl The implementations of Runtime.GetBcdTime and GetBuildTime were changed to ensure that they always return sensible times. For GetBuildTime the time returned comes from the boot file header, which is set up by MakeBoot. For GetBcdTime, if the bcd is in a file that appears to have a leader page, the create time of the file is returned; otherwise, if the bcd is in the boot file, then the build time of the boot file is returned; otherwise, System.gmtEpoch is returned. This is something of a hack, but we probably can't do much better until all bcds can be relied upon to contain create dates. At present, bcds produced by the Cedar compiler and binder only have functional time stamps. 4-Feb-82 10:35:59 Modules affected: SpaceImplB MakeReadOnly and MakeWritable now accept a space which may be a subspace of a mapped space (but not a swap unit). Previously, only mapped spaces were allowed. The motivation for this change is to allow the loader, when it is filling in code links, to enable writing only in the subspace that corresponds to the module it is processing. This is more than just an aesthetic change, since the loader formerly had to apply MakeWritable to the entire mapping space, and if any subspaces of the mapping space were pinned, we would die in CachedRegions.Appy with Bug[makeWritableButNotSwappable]. This change involved a change to the code that joins transactions (the mapping space enters the transaction, not just the subspace). I'm not very confident that I got this right, but no one uses transactions anyway, particularly on code! It also involved using the writeProtected bit in a non-mapped space (i.e., a subspace of a mapped one). It is possible for some subspaces of a mapped space that claims to be writeProtected to be writable, and vice versa. I don't think this will actually cause damage, although there may be some error checks around that are not tight enough any more. 4-Feb-82 10:51:45 Modules affected: SpaceImplB Remap now plays by the rules of the new maplog mechanism (see 30-Nov-81 12:49:04). Formerly, it tried to optimize the calls on MapLog.WriteLog, reducing 2 calls to 1 in the normal case. Given the already high cost of Remap, the additional complexity needed to support this in MapLogImpl seems unjustified. Remap now calls MapLog.WriteLog twice in all cases, once for umapping, once for mapping. 4-Feb-82 11:47:42 Modules affected: MapLogImpl The compression of the maplog now is careful to avoid any partial entries in the log, since the debugger might get confused. During compression it is frequently the case that two identical entries exist in the log, and the debugger must be prepared for this (CoPilot is). As a result of this change, the overwriting of an entry during compression appears atomic to the debugger, even if a page fault occurs during the overwrite. 4-Feb-82 13:17:13 Modules affected: SpaceImplA The powerOf2 alignment logic in SpaceImplA.CreateAny had an uninitialized variable, causing it to give random results. It is now fixed. 4-Feb-82 13:27:46 Modules affected: STLeafImpl The maximum number of pages that the space/region data base can occupy is now 250 (formerly 150). 12-Feb-82 18:13:11 Modules affected: MapLogImpl The compression logic no longer loses the first entry in the maplog. 13-Feb-82 13:05:11 Modules affected: SpaceImplB GetMappingSpaceDesc now passes correct argument to Hierarchy.GetDescriptor. So does the code (presently never executed) in GetCopyInfo. 16-Feb-82 12:15:45 Modules affected: FrameImpl ValidateGlobalFrame was getting an address fault if it was passed NIL. I changed InGFT to skip GFT[0], which would match NIL! 16-Feb-82 17:44:12 Modules affected: SpaceImplA SpecialSpace.MakeProcedureResident and MakeProcedureSwappable, as well as SpaceExtras.ActivateProc and DeactivateProc now accept a nested procedure (indirect control link) as their parameter. Formerly, only outer procedures (procedure PrincOps.ControlLink) were permitted. Also, the procedures SpecialSpace.MakeGlobalFrame{Resident|Swappable} now notice if the frame is allocated in the frame heap and, if so, do nothing. 22-Mar-82 12:40:43 Modules affected: ColorDisplayImpl ColorDisplayImpl is now a part of the UserTerminalDriver configuration. 23-Mar-82 15:55:50 Modules affected: FrameImpl Runtime.GetBuildTime now returns truth even if we have been ether-booted. This depends on a corresponding change in MakeBoot that writes the boot file's creation time into PSB.PDA.available[3..4]. 6-Apr-82 13:43:20 Modules affected: PilotControl Map logging is now always enabled unless an explicit M switch is supplied at boot time. Formerly, if no local debugger was found and R was not specified, the M switch was implicitly set. This isn't necessary when the map log can be maintained without consulting the debugger. 28-Apr-82 10:09:00 Modules affected: Control.config, FileMgr.config, Filer.config, Swapper.config, Transactions.config, VMMgr.config, MesaRuntime.config, Misc.config, UserTerminalDriver.config, DiskDrivers.config, Store.config, UnpackedPilotKernel.config, UtilityStore.config, UnpackedUtilityPilotKernel.config The Pilot and UtilityPilot kernels now export all interfaces (subconfigurations have been changed appropriately). June 1, 1982 2:26 pm Modules affected: TransactionImpl, TransactionExtras, TransactionsPack.pack In order to permit CedarSnapshot to deal with transactions properly, the TransactionExtras interface has been created and small modifications to the top-level flow of control in crash recovery have been made. Specifically, DoCrashRecovery now does the "meat" of the crash recovery work, and RecoverTransactions does the one-time set-up required at boot time. DoCrashRecovery is intended to be called at rollback time. June 1, 1982 3:56 pm Modules affected: FrameImpl The format of the loadstate has changed to allow more bcds. The only piece of Pilot that actually looks inside this is Runtime.GetBcdTime, which has been appropriately tweaked. In the course of this change, the dependence of Runtime.GetBcdTime on BcdOps and BcdDefs has been removed, and with it, the dependency of the entire Pilot Kernel on bcd formats vanishes. June 4, 1982 9:56 am Modules affected: SpaceImplA The computation in CreateAny to locate a region with suitable alignment was incorrect and would not find certain regions that were acceptable. This induced excessive fragmentation and spurious InsufficientSpace errors. June 10, 1982 9:26 am Modules affected: ColorDisplayImpl, ColorCursorImpl, UserTerminalDriver.config ColorCursorImpl is a new part of the UserTerminalDriver configuration, jointly exporting ColorDisplay with ColorDisplayImpl. June 16, 1982 5:18 pm Modules affected: PhysicalVolumeImpl, FloppyChannelImpl, SA800Impl These modules collectively export PhysicalVolume.Handle. Since Taft wants to make a change to FormatTridentImpl, which also exports this type, we must all use the same compiler to avoid a spurious exported type clash. Thus, this is a recompilation of the modules only to change the representation of the exported type information in the BCDs. June 16, 1982 5:35 pm Modules affected: PilotNub WorryCallDebugger had to be changed because fixed frame procedures that are not called as trap handlers don't have source and destination links put on the stack. It therefore couldn't figure out where it was called from. Accordingly, we insert an indirect link to force the links to be pushed onto the stack. August 3, 1982 3:56 pm Modules affected: CachedRegionImplB SwapBufferImpl ProjectionImpl SpaceImplB STLeafImpl VMMControl Processes UtilitySpaceImpl Correct all remaining occurrences of x ~IN y to be ~(x IN y). August 4, 1982 11:00 am Modules affected: Everything (source changes in FilerTransferImpl, PageFaultImpl) Complete recompilation to convert Pilot interfaces to new symbol table format. August 18, 1982 3:46 pm Modules affected: FrameImpl GetBcdTime (and the whole Pilot kernel) no longer depend on the loadstate format. August 25, 1982 9:01 am Modules affected: SpecialSpace, SpaceImplA CreateAligned now has an additional parameter to provide finer control of space alignment. August 25, 1982 9:56 am Modules affected: Full recompilation, with source changes in the following: File, Inline, Process, Runtime, Space, System, Transaction, Volume, FileImpl, FrameImpl, Processes, SpaceImplA, SystemImpl, TransactionImpl, TransactionStateImpl, UtilitySpaceImpl, VolumeImpl The heavily-used public interfaces are now SAFE, at least to the extent permitted by their inherent semantics August 25, 1982 9:58 am Modules affected: Mopcodes The compiler's version of Mopcodes is now part of Pilot. This is an upward-compatible change, adding Cedar-specific opcodes. August 26, 1982 11:26 am Modules affected: Runtime, Traps Runtime.BoundsFault and Runtime.PointerFault are now ERRORs. August 27, 1982 9:42 am Modules affected: MiscAlpha New floating point operations, aFSQRT and aFSC, have been added. August 27, 1982 11:44 am Modules affected: PilotControl, Traps The modules that run before the ProcessorHead is started must be compiled to use no instructions that are not implemented in microcode. This requires the /-m switch. September 8, 1982 12:55 pm Modules affected: FrameImpl ValidateFrame and ValidateGlobalFrame now avoid getting address faults within the monitor. September 15, 1982 4:32 pm Modules affected: CachedRegionImplB, PageFault, PageFaultImpl, SpaceImplB, SwapperControl, UtilitySpaceImpl, UtilityStore.config, VMMgr.config, VMMgrPack.pack, WriteFault Address and non-transaction WriteProtect faults are now reported as signals in the process that incurs them. The new interface WriteFault mirrors PageFault. The latter has had names changed to permit the implementation of the fault processing to be done in a single module (PageFaultImpl) without name conflicts. October 25, 1982 1:20 pm Modules affected: FrameImpl EnterGlobalFrame now sets the gfi field of the frame it is given. This must be done while the gftLock is held, since otherwise ValidateGlobalFrame may give incorrect results or collapse. October 25, 1982 3:32 pm Modules affected: SpaceImplB, UtilitySpaceImpl The VMHelper and WriteProtect handlers no longer fork separate processes to report bad situations (address fault or write protect fault). This relies on the relevant code in PageFaultImpl being resident and not generating page faults (especially for the VMHelper). October 26, 1982 9:44 am Modules affected: SpaceImplA GetWindow now returns an appropriate WindowOrigin if the space it is passed is a subspace of a mapped space. Formerly, this case was defined to produce Error[noWindow]. This error is still raised if the space is neither mapped nor a subspace of a mapped space. November 11, 1982 3:01 pm Modules affected: FileImpl All FileCache operations are now invoked from within the volume access lock. This ensures that the file cache always reflects the true state of the volume. Formerly, it was possible for the FileHelper to sneak in after a FileCache.FlushFile but before the volume access lock had been acquired, causing incorrect information to be left in the cache after a change to some file (e.g., SetSize). November 21, 1982 10:47 am Modules affected: Signals, TemporarySignals (new) A provisional informational signal mechanism is now available. December 8, 1982 5:11 pm Modules affected: FileImpl, FileCacheImpl Changing the attributes of a file no longer produces an intermediate state where the file does not appear in the file cache. Thus, KernelFile.MakeTemporary[<executing bootfile>] now avoids a deadlock which would result if the supposedly pinned file cache entries were flushed from the cache. This is what used to happen, and it was unnecessary, since all that was really needed was a way to reset the relevant attribute information in the cache entry. There is still a minor race in here -- see the comment in FileImpl. December 8, 1982 9:57 pm Modules affected: FrameImpl ValidateGlobalFrame[NIL] no longer gives an address fault with the monitor lock held. December 8, 1982 10:04 pm Modules affected: PageFaultImpl An address or write protect fault in a process with a dirty cleanup link now triggers a world-swap rather than propagating a signal. This is to avoid subsequent collapse if, in the process of handling the signal, some code executes a WAIT. December 9, 1982 11:37 am Modules affected: FileImpl The return value of SetSizeInternal wasn't being initialized properly, due to a previous erroneous edit (November 11, 1982 3:01 pm). February 17, 1983 1:50 pm Modules affected: FileCacheImpl, CachedSpaceImpl I expanded three cache size limits, all commented with PDR in the above modules. Date Modules affected: Modules Change Date Modules affected: Modules Change