4. Requirements for Projects and the Report
4.1. Mandatory Requirements:
Document required use cases that fit the task description.
Validate user input (e.g., maximum number of processes) and show an error message if incorrect.
Implement error handling with perror() and errno.
Set minimum access rights for created structures (e.g., shared memory, semaphores).
Remove all used structures unless specified otherwise (e.g., shared memory segment).
5. Report Content and Evaluation
5.1. Report Content:
Include:
Design assumptions, general description, work done, problems, special elements, and testing issues.
5.2. Code Fragments:
Include GitHub links to code showing:
File handling: creat(), open(), close(), etc.
Processes: fork(), exec(), exit(), etc.
Threads: pthread_create(), pthread_join(), pthread_mutex_*(), etc.
Signals: kill(), raise(), signal().
Synchronization: ftok(), semget(), semop().
Communication: pipe(), dup(), popen(), etc.
Shared memory: shmget(), shmat(), etc.
Sockets: socket(), bind(), listen(), connect().
Use links to highlight key code for easy evaluation.
5.3. Scoring:
10%: Compliance with task description (functionality must match).
20%: Functional correctness (tests for issues like deadlocks, blocking, and process limits).
20%: Correct use of four structures (e.g., processes, threads, synchronization, signal handling, error handling, modularization).
10%: Distinguishing elements (advanced constructs, algorithms, graphical interface).
40%: Code readability and documentation (procedures, pseudocode, comments, GitHub activity).