Releases: dplanitzer/Serena
v0.6.0-alpha
Welcome to release v0.6.0-alpha of Serena OS.
The major focus of this release is performance, performance and more performance while improving the stability of the overall system. Also be sure to check out the updated Wiki. The following sections list the most significant bug fixes, feature additions and other enhancements for each major component.
Shell
- The shell and all CLI tools now take advantage of buffered stdio
Libc
- The stdio functions now support read/write buffering
- Added the
ftello()andfseeko()functions to allow getting and setting the file pointer with 64bit resolution fread()andfwrite()now support reading/writing up toUINT64_MAXworth of bytes in a single operation- Added a
clock_getres()function to allow you to get information about the resolution of a clock tick - Added
vcpu_getcontext()andvcpu_setcontext()functions to get and set the machine context of a suspended vcpu - The
abort()function now sends aSIGABRTsignal to the process
Libdispatch
- Numerous bug fixes, performance enhancements and cleaner API. See the dispatch.h file for details
- The new dispatch APIs are now available inside the kernel and the old dispatch queue implementation has been removed
Kernel
- Scheduling is now significantly smarter and faster. Eg disk I/O operations are now more than 400% faster compared to v0.5
- The scheduler will now dynamically adjust the priority of virtual processors to ensure that none can monopolize the CPU
- Significantly faster context switching
- The monotonic clock has now considerably less overhead. This means that eg getting the current time by calling
clock_gettime()is now more than twice as fast - Interrupt masking and unmasking is now more than twice as fast
- The kernel implementation of
timedwait()andsigtimedwait()is now about 20% faster - The kernel now implements a faster syscall mechanism
- The kernel now places the boot and idle vcpus in fast RAM if possible
- The kernel will now detect kernel and user stack overruns
- The HID manager is now smarter at avoiding unnecessary context switches when delivering events
- The kernel now fully implements safe suspends. This means that a
vcpu_suspend()call will defer the actual suspend operation until the vcpu in question has reached a point where it is safe to suspend - The kernel now fully implements signal routing for processes
- The kernel now implements proper default actions for signals that have no route associated with them when they arrive at the process
- The kernel now supports stopping and continuing a process by sending it a
SIGSTOPandSIGCONTsignal respectively - Force terminating a process by sending it a
SIGKILLnow works reliably - The kernel now makes the machine context available to exception handlers and it allows them to update the machine context. This makes it possible for an exception handler to recover from a fault
- We now enable super scalar mode on a 68060 CPU
- The kernel fatal exception screen now shows a lot of details of the specific vcpu/process that crashed the system
v0.5.0-alpha
Welcome to release v0.5.0-alpha of Serena OS.
The major focus of this release is on building out the process, device driver and dispatch queue infrastructure, bug fixes and significant performance improvements. Additionally the Wiki has seen a lot of additions and updates. Be sure to check it out here. The following sections list the most significant bug fixes, feature additions and other enhancements.
Shell
- The
statuscommand now shows the user id, process group id, session id and the number of currently acquired virtual processors for every process - the
statuscommand now shows the current scheduler state of each process - the
disk formatcommand now displays the number of the track that is currently being formatted
libdispatch
This is a new user space library which implements serial and concurrent dispatch queues. It comes with a comprehensive API that allows you to schedule the execution of work items, one-shot timers, repeating timers and signal monitors. Canceling of items is support and dispatch queues may be suspended and resumed.
Libc
- Added support for nanosleep()
- Much improved, efficient and more complete timespec APIs
- Added a sched_yield() system call to allow a user space process to yield its CPU time to other processes
- added a fairly extensive virtual processor management API
- added proc_join() and prov_timedjoin() APIs to collect the exit status of a terminated child process
- added proc_exec() to allow you to replace the core image of a process with a new core image (executable file)
User Space Concurrency Primitives
- Added a spin lock implementation
- Added a wait queue API. This API forms the foundation on which user space concurrency and scheduling algorithms are implemented.
- Mutexes, semaphores and condition variables are now implemented in user space by taking advantage of spin locks and wait queues. These concurrency primitives are now significantly faster than the older kernel-based implementation.
- added a user space signal API
HID Manager
- Moved the vast majority of HID device interrupt code out from interrupts and to a dedicated high priority virtual processor
- New mouse cursor API design which supports showing/hiding the mouse cursor, hiding it until the user moves the mouse cursor, shielding/unshielding and changing the mouse cursor image
- The mouse cursor updates much more reliably now compared to the previous implementation
Kernel
- Added support for sending and receiving signals
- Added support for trapping CPU exceptions on a per virtual processor basis
- Added support for virtual processor groups. A VP group allows you to send a signal to multiple related VPs in a single call.
- Added support for process groups and sessions. Process groups and session may serve as signal targets.
- Exiting a process now properly cleans up all associated virtual processors
- Interrupt handling and management is now drastically faster
- Reduced the kernel binary size by 7KB
- Moved all system call related code to a separate syscall package
- Introduced a machine package for all platform specific code
- Moved all Amiga related code to a new machine/amiga package
- Moved all scheduling, context switching and virtual processor related code to a new sched package. Additionally, all those APIs now use much shorter symbol names
- Made the scheduler implementation more cross platform friendly by moving more of the CPU specific code to a new machine/68k package
- The kernel is now represented by a 'kerneld' process which enables proper resource accounting
- Added a driver manager which maintains the driver catalog and is able to send notifications when a new driver arrives
- Drivers now declare the I/O categories to which they conform
- Significantly built out the Driver base class and made its semantic model more precise. See the Driver documentation for details
- Significantly improved the HID manager to improve its performance and reliability
- Zorro drivers are now based on composition rather than inheritance which makes it possible that a Zorro driver can inherit eg from the DiskDriver class
- The Zorro bus controller now creates a dummy Zorro driver for cards that it has detected but is unable to find a specific driver for
- Significantly enhanced the Amiga display driver and added support for full Copper program scheduling, unscheduling and editing, streamlined the API design and Sprite management
- The Amiga display driver now supports EHB (Extra Half-Bright) and HAM (Hold-And-Modify) framebuffer configurations
v0.4.0-alpha
Welcome to release v0.4.0-alpha of Serena OS.
A lot of things have changed in this release. The following sections list the most significant bug fixes, feature additions and other enhancements. This is the first release that includes the Windows version of the diskimage, keymap, libtool and makerom build tools. These tools are needed (in addition to the VBCC compiler suite) to build Serena OS and apps for Serena OS. See the Wiki for instructions on how to build the OS from scratch and how to build an app that you can then run from the Serena OS shell.
Shell
- New line editor: both insertion and overwrite mode are now supported. Plus the backspace key now works as expected and the delete key now works too.
- The shell has gained a
varscommand that allows you to list all environment and local variables - Added a
disktool to show information about a disk in a disk drive or a mounted filesystem, mount a disk and unmount a disk - Added a
statustool to show information about all currently running processes - Added a
copytool to copy files. Copying directories is not yet supported - Added a
touchtool to update the timestamps on an existing file or to create an empty file
Libc
- The Serena OS API now follows much more closely the POSIX specification. This means that header files like
unistd.h,fcntl.hetc are now available - The Serena OS system API implementation has been rolled into libc to simplify the implementation
- Completely new malloc() implementation: fixing a number of bugs. Free() is now O(1) instead of O(n) and the new implementation is now able to detect memory corruption. It prints a message with the address of the corrupted memory block to the console if a problem is detected. It will also leak the memory block if you call free() on a corrupted memory block to avoid corrupting memory more.
- Implemented support for creating temporary files
- Added support for more time related functions like localtime(), mktime(), etc
- Bug fixes and performance improvements across the board
available
Login Tool
- It now defines a
SHELLenvironment variable which points to the shell in the filesystem - It now sets up a
TMPDIRenvironment variable which points to the location of the/tmpdirectory in the filesystem. This directory holds the temporary files that are created with the help of the libc temporary files utility functions - It now defines the
TERMenvironment variable which names the type of the terminal that is bound to the login session
Kernel
- The system is now able to boot on an Amiga 1200
- Lots of bug fixes and performance improvements across the board
- The kernel is now able to boot even if there is no Fast RAM in the machine
- Changed the minimum supported CPU from 68030 to 68020
- The new memory allocator is now used inside the kernel too
- Significantly improved SerenaFS filesystem implementation. Faster, less bugs and more feature complete
- Many improvements to the disk cache. It is now session based for efficiency and better handling of removable media
- Introduced KernFS which forms the backbone of Kernel catalogs: a catalog is a collection of kernel objects that are made available to user space apps as files. Eg there are catalogs for processes, filesystem instances and drivers. An app can access those catalogs at the
/proc,/fsand/devfilesystem locations - Fixed a data corruption bug in the floppy disk driver. Previously writing to a floppy disk could cause the disk to get corrupted
- Introduced a game port controller: this driver is used to manage the joystick ports on your Amiga. It allows an app to assign the type of input device that is connected to a port. Eg whether a mouse, digital joystick, analog joystick or light pen is connected
- Introduced user space API for the HID manager: this API allows you to control the mouse point look and visibility. Control the key repeat rate, etc
- Introduced user space API for the graphics driver: this API allows you to change the screen resolution and color depth. Create sprites and control them. Note that the Blitter is not yet supported
- Introduced user space API for disk drivers and filesystem instances: this API let's you get information about the disk in a drive, the drive itself, a particular filesystem instance and the path to the disk driver that underpins a filesystem instance
- The kernel now presents a somewhat nicer graphical boot screen. It now also shows a disk icon if there is either no disk at all in the boot drive or the disk in the drive does not contain a Serena OS filesystem
v0.3.0-alpha
Welcome to release v0.3.0-alpha of Serena OS.
The biggest change in this release is the introduction of the disk subsystem and significant improvements to the driver architecture. Booting off and working with double-density floppy disks is now supported.
The diskimage tool has also seen significant improvements: it now allows you to format an Amiga disk image (adf) with SerenaFS, list existing files, push files to a disk image, pull a file off a disk image, create directories, delete files, get and overwrite individual disk blocks and generate a diff of the disk blocks of two disk image files.
Thus you can now use the diskimage tool to create, list and manipulate SerenaFS formatted Amiga disk images on your host system.
Another significant enhancement is that Serena OS now supports a device filesystem (devfs). This filesystem is mounted at /System/Devices and lists all active drivers. An application may open a driver and use the read/write system calls to interact with it. Note however, that disk drivers are the only drivers in this release that actually support read/write operations from user space.
Serena OS implements a disk cache that caches data read from a (floppy) disk. Note that right now all writes are implemented as synchronous writes. The data is cached but the application is still forced to wait until the data has been written to disk. A future version will change this behavior such that an application will not have to wait for a write to finish.
Here is a more detailed list of changes since the previous release:
- more complete C library. Ie added qsort(), itoa() family of functions, etc
- many bug fixes across libc and the kernel
- a number of kernel optimizations
- significantly improved the reliability and performance of in-kernel dispatch queues
- worked out more details of the kernel driver architecture
- added support for disk drivers to the kernel
- added a disk cache to the kernel
- added a device filesystem to the kernel
- FileManager and FileHierarchy are now the kernel components that handle file operations and path resolution
- complete rework of the diskimage tool
- added support for building libtool, makerom and keymap on POSIX (Linux, macOS) systems
v0.2.0-alpha
Welcome to release v0.2.0-alpha of Serena OS.
This marks the first binary release of Serena OS. The OS and the shell are packaged into a single ROM file for the Amiga. It runs on any Amiga computer with a 68030 or better CPU.
This release contains many bug fixes, additional user space libraries and a much more useful shell. The shell now supports running scripts, variables, flow control constructs and many more built-in commands. Libc is now more complete and correct and a new library (libclap) has been added to parse command line arguments in a way that is in-line with the Serena shell behavior.
The ROM contains the boot filesystem. This filesystem is copied to a RAM disk at boot time and all filesystem operations are executed in the RAM disk. This means that files that you create will not survive a system restart.
You can build SerenaOS from sources with the BOOT_FROM_ROM option disabled in the project Makefile to create a version of the OS that will boot from an Amiga floppy disk (image). However please note that the floppy driver does not currently support writing to disk and that there is no disk cache yet to speed up I/O operations.
The quickest way to run Serena OS is to set up an Amiga 3000 or 4000 profile in an Amiga emulator such as WinUAE, and to configure the profile such that it uses the attached Serena.rom instead of a genuine Commodore Amiga ROM. No separate boot disk is needed since the boot disk is packaged into the ROM file.
After starting up the OS, the current directory contains a couple of demo shell scripts. You can run them by typing 'shell file_to_run.sh' and then hitting return.
v0.1.0-alpha
Welcome to release v0.1.0-alpha of Serena OS.
This marks the first release that is complete enough to be able to install, boot and run a (very) simple shell in Serena OS. The OS and the shell are packaged into a single ROM file for the Amiga and runs on any Amiga with a 68030 or better CPU.
This release of the OS supports preemptive multi-tasking, VT52 and VT100 terminal emulation, a RAM-based file system, a fairly complete standard C library, the very early beginnings of a standard C math library and a System library which implements the system call interface.