Ceiling Semaphore PLP
semaphore added and tests updated.
Ceiling Semaphore PLP
Sporadic thread time tick handler
Corrected: Added call to pharosITimeTickRemoveThread in the body of the sporadic and periodic threads, at the end of each job. For example: void activateEvent(ptrSporadicThread thread) { /* event to receive */ Event event; /* interrupt level */ PharosInterruptLevel interrupt; /* get the running partition */ ptrPharosPartition partition = thread->rtThread.thread.partition; /* loop forever */ for(;;) { /* disable interrupts so we safely update the state of the thread */ pharosCpuDisableInterrupts(&interrupt);...
Sporadic thread time tick handler
Added Test248 to test it quickly
Sporadic thread time tick handler
Previous solution is not OK since it breaks the ARMv7-M CPUs. This function is called from within a syscall and with thread dispatch disabled, so the call pharosITimeTickRemoveThread to is invoked when the timer did not even start.
RISC-V MMU area table not working
Test1093
RISC-V PLIC word alignment
Test1093
RISC-V PLIC word alignment
RISC-V MMU area table not working
channel receive priority = NULL
Added /* check if the priority is valid */ if(priority != NULL) { /* copy the priority */ *priority = bulk->kernelBulk->priority; } to function pharosIChannelBulkCopy. test956 is now passing.
channel receive priority = NULL
Ip call + channel send + filter
Updated all filters to include a "minimum stack". If set with a 0 (default) it will be set automatically (by Pharos) to PHAROS_SHARED_STACK_SIZE_MINIMUM_SIZE. And it must be a multiple of PHAROS_SHARED_STACK_SIZE_MINIMUM_SIZE, otherwise Pharos will round it up. Test955 is now passing
Updated the filter/ipcalls to make the shared stack divided accross nested calls. This way, when an ipcall the thread switches to the top of the shared stack, and when inside the ipcall it makes another ipcall, Pharos removes the permissions to the previous shared stack position and gives permissions to below. Always in multiple of PHAROS_SHARED_STACK_SIZE_MINIMUM_SIZE
Ip call + channel send + filter
New (better) solution: pharosIExecuteIpCallFunction calls directly the function (call->functionPointer) when in the callee partition has supervisor permissions: /* if the callee partition has supervisor permissions */ if(pharosIPartitionIsSupervisor(call->partition) == TRUE) { IpCallIo f = (IpCallIo) call->functionPointer; /* call the function directly */ result = f(call->partition->data , caller->id , input , output); } else { /* call the function under a different stack and different MMU context...
Partition issupervisor in IpCalls
created pharosCpuExecuteIpCallIoSuper and pharosCpuExecuteIpCallOSuper functions that are called with supervisor permissions and just call the functions (without switching to user mode)
Test2260 created
Partition issupervisor in IpCalls
Sporadic thread time tick handler
Implemented and tested in Test3000 void pharosISporadicJobEnd(ptrSporadicThread sporadic) { /* interrupt level */ PharosInterruptLevel interrupt; ClockTick nextReplenishment = sporadic->rtThread.thread.lastReplenishmentInstant + sporadic->rtThread.thread.replenishBudgetInterval; /* remove any deadline handler of the thread */ pharosITimeTickRemoveDeadline(&sporadic->rtThread); /* disable interrupts so we check if the deadline was meet and remove the handler if needed */ pharosCpuDisableInterrupts(&interrupt);...
Sporadic thread time tick handler
implemented and inspected.
GCC optimization -O2 -> -Ofast
GCC optimization -O2 -> -Ofast
had to add GCC flag "-fno-delete-null-pointer-checks" because GCC11.1.0 places (in arm9) a "UDF" assembly instruction that triggers a fault if a pointer is not initialized.
tools update (GCC 11.1.0)
GCC updated to 11.1.0 and binutils to 2.36.1 and GDB to 10.2. The new GCC is actually very good at finding errors in enums so a lot of corrections were made :). GCC optimizations in memcpy/memset/etc required adding a new flag: #define PHAROS_AVOID_OPTIMIZATION __attribute__ ((optimize("-fno-tree-loop-distribute-patterns"))) Placed in functions that are called by memcpy/memset so these functions themselves don't call memcpy/memset
tools update (GCC 11.1.0)
Periodic thread stop executing
implemented and tested 3260
Periodic thread stop executing
Implemented. Tested in 1957, 1090, 605
Channel bulk queue get - return number available
Channel bulk queue get - return number available
Channel bulk mark invalid
channel send function updated. Tested in 3260
Channel bulk mark invalid
channel send function updated. Tested in 3260
Channel bulk mark invalid
Test50
sempahore lock/unlock paired
sempahore lock/unlock paired
Semaphore improvements
Current stack
Hi all, We are taking so long to moderate the comments that we just allowed everyone to post any comment, without any moderation. If we detect an "evil" post (like child pornography, etc) then we will delete it (or something similar). But by default anyone can now post without moderation. Thank you
Hi, Sorry for taking so long to approve your comment, I did not noticed it before :S We can port to x86, we have so many things to do that we just don't have the time now so we currently mark it with a low priority. Thanks for your input
Hi all, We have side tracked and deviated a bit from the RTN... We spent some time improving the RTC and RTM libraries with CRC, Galois Field arithmetic, Reed-Solomon, matrix, quaternions, etc. But we should now go back to implementing the RTN so we can finish this release ASAP. It has been too long since our last release (May 2020)! Kind regards, Pharos Team
Sorry, we only now saw your comment (was marked as spam). Thank you for your suggestion, we will consider it in the definition of our future roadmap. Are you able to sponsor, even partially, the implementation of your suggestion? Kind Regards, Pharos Team
Hi all, We have side tracked and deviated a bit from the RTN... We spent some time improving the RTC and RTM libraries with CRC, Galois Field arithmetic, Reed-Solomon, matrix, quaternions, etc. But we should now go back to implementing the RTN so we can finish this release ASAK. It has been too long since our last release (May 2020)! Kind regards, Pharos Team
Simple robust Filesystem
Performance metrics
features: - "standard" file - can create/delete file, append, overwrite, read - "log" file - circular file with limited size and just overwrites the beginning when the maximum capacity has been reached. Can only write at the end of the file (is there a use case to write in the middle)? - robust - custom error redundancy. Example FEC as EDAC/Reed-Solomon, redudancy (3x, 5x, etc) - list files created - file name limited to 100 chars - no folders - special care to the metadata redundancy. Probably will...
Simple robust Filesystem
Simple robust Filesystem
Simple robust Filesystem
Simple robust Filesystem
Hello all, Work is progressing, albeit a little slower than usual. All protocols have been implemented, with the exception of TCP. The TCP protocol is indeed more complex than the remaining protocols (which was already expected). Some tests are still finding errors inside the RTN partition and are being corrected. We hope that work will continue to progress. Kind regards, Pharos Team
Home
Home
Aarch64 invalidate MMU
Armv8-A interrupt handler
TreeMap remove recursive
Postponed to future release
channel bulk/lw queue remove
ceil semaphore status
implemented, test in 71
ceil semaphore status
Periodic thread isBestEffort
Implemented in threadperiodic.c: /* if is not a best error */ if(periodic->isBestEffort == FALSE) { /* announce error (a full period elapsed and the thread did not even start to execute) */ pharosSThreadErrorAnnounce(thread , PHAROS_THREAD_ERROR_PERIOD_MISS , NULL , NULL); } else { /* awake at the next release instant */ thread->lastReplenishmentInstant = thread->lastReplenishmentInstant + ((currentTime - thread->lastReplenishmentInstant) / thread->replenishBudgetInterval + 1) * thread->lastReplenishmentInstant;...
Periodic thread isBestEffort
Future update isReady TRUE/FALSE to uint64_t
updated test 1100 with error conditions and level check updated test 1110 with error conditions and level check updated test 1130 with error conditions and level check for future queue updated test 1140 with level check for future queue in complex situations updated test 10220 for multi-core test with partial ready and then complete ready
rtcLinkedListAppendFirst missing last update on empty list
Implemented and verified in Test2050
rtcLinkedListAppendFirst missing last update on empty list
Future update isReady TRUE/FALSE to uint64_t
Collection move to RTC
collection moved. functions renamed to start with "rtc". Since this is used by the kernel, all tests will use these functions indirectly.
Collection move to RTC
Ipcalls on multicore CPUs
Inside protection - channel bulk
Corrected. In systems with MMU, the MMU is checked to see if the memory belongs to a channel bulk. In systems with MPU, each partition has now a tree map with the channel bulks sorted by the starting address. Then it only needs to check if the specified memory address is inside the channel bulk with lower starting address Test685
Sporadic thread hw queue and channel add sender
Added the sender argument to hw queue and channel sporadic threads and also to hw queue receive and channel receive functions. Updated several tests, including Test1340, 2090, 1142
random syscalls
random syscalls
CSRNG (cryptographically secure random generator) and PCG (pseudo-random generator) added. Following system calls added: // generates the random events PharosCsrngGenerateR pharosCsrngGenerate(uint8_t *array , size_t number); // generates entropy to add to the generator. Even if not really random, Pharos already provides some random entropy so this could only benefit the quality of the CSRNG PharosCsrngAddRandomEventR pharosCsrngAddRandomEvent(PharosCsrngSource source , uint8_t *array , uint8_t number);...
Inside protection - channel bulk