= Project architecture = == 1. File system organization == Kaya Phase 1 distribution is subdivided in several folders in order to efficiently organize files and logically separate them into different sections. Such division is thought for being ready to receive Phase 2 implementation providing a well structured environment. * `src/`: sources folder containing Phase 1 primitive functions source code, as described below in paragraph 2; * `test/`: testing folder, containing a debugging program (`p1test.c`), related environment generated by the Makefile "`test`" target; this rule compiles, links, creates uMPS executable and virtual devices and finally run it on the uMPS virtual machine (see also README); * `doc/`: documentation root containing various developers informations about project internals; * `include/`: library headers * `*.e`: Phase 1 primitive functions interfaces: `pcb.e` and `st.e` respectively relative to `pcb.c` and `st.c`; * `*.h`: system constants and macro definitions (`const.h`), types and data structures definitions (`types.h`); * `lib/`: Phase 1 libraries objects files, ready for being linked. == 2. Source modules organization == Following the evident logical division between two entities we have to instantiate - processes and semaphores -, we opted for a two-modules subdivision: * `pcb.c`: collects primitive functions for PCBs initialization/ allocation/ deallocation, process queue/ tree maintenance; * `st.c`: collects primitive functions for SD tree initialization and PCB enqueueing to/dequeueing from semaphores. {{{ * `check.c` contains an error check routine which is able to perform a simple type check on the own data structures of Phase 1. }}}