{"id":23190950,"url":"https://github.com/pspanoudakis/system-programming-projects","last_synced_at":"2025-10-25T11:30:25.796Z","repository":{"id":178448879,"uuid":"534764340","full_name":"pspanoudakis/System-Programming-Projects","owner":"pspanoudakis","description":"System Programming projects on Multiprocessing, Multithreading, FIFO Pipes, Network Sockets, Bash Scripting \u0026 building Data Structures","archived":false,"fork":false,"pushed_at":"2022-09-11T10:31:07.000Z","size":26534,"stargazers_count":8,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-12-18T12:15:51.051Z","etag":null,"topics":["bash-scripting","bloom-filter","mutlithreading","pipes","processes","semaphores","skip-list","sockets","system-programming"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pspanoudakis.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-09-09T18:38:34.000Z","updated_at":"2024-11-12T13:44:27.000Z","dependencies_parsed_at":null,"dependency_job_id":"c759428d-5823-4cf3-b836-ae5e1670c333","html_url":"https://github.com/pspanoudakis/System-Programming-Projects","commit_stats":null,"previous_names":["pspanoudakis/system-programming-projects"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pspanoudakis%2FSystem-Programming-Projects","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pspanoudakis%2FSystem-Programming-Projects/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pspanoudakis%2FSystem-Programming-Projects/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pspanoudakis%2FSystem-Programming-Projects/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pspanoudakis","download_url":"https://codeload.github.com/pspanoudakis/System-Programming-Projects/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238126850,"owners_count":19420769,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bash-scripting","bloom-filter","mutlithreading","pipes","processes","semaphores","skip-list","sockets","system-programming"],"created_at":"2024-12-18T12:15:51.072Z","updated_at":"2025-10-25T11:30:17.126Z","avatar_url":"https://github.com/pspanoudakis.png","language":"C++","readme":"# System Programming Projects\n\nThis is a series of projects for the Spring 2021 System Programming course on [DIT@UoA](https://www.di.uoa.gr/en).\n\n## General Task\nAll projects focus on building an app to store \u0026 monitor **Vaccination Records** for citizens from different countries.\nThe app uses \"records\" (reading them from files) with the following format:\n    \n    \u003ccitizenId\u003e \u003cname\u003e \u003csurname\u003e \u003ccountryName\u003e \u003cage\u003e \u003cvirusName\u003e \u003cisVaccinated(YES/NO)\u003e \u003coptionalVaccinationDate\u003e\n\ne.g.\n\n    889 John Papadopoulos Greece 52 COVID-19 YES 27-12-2020\n    776 Maria Tortellini Italy 36 SARS-1 NO\n\nThe app can then respond to queries regarding the imported records,\nto display the vaccination status of a citizen,\nstats on a specific virus or country, insert new vaccination records etc.\n\nEach project expands on this task, as explained below.\n\n## Project Tasks \u0026 Goals\n\n- **Project 1**:\\\nDevelopment of the **base app**, which operates as explained above.\nThe project also includes the development of two other data structures:\n    - [**Bloom Filter**](https://en.wikipedia.org/wiki/Bloom_filter),\n    a probabilistic structure to determine whether a record does not exist or **possibly exists**.\n    - [**Skip List**](https://en.wikipedia.org/wiki/Skip_list),\n    to efficiently store and retrieve vaccination records regarding a specific virus.\n\n    Both structures are also explained in `project1/task.pdf`.\n    Finally, the project includes generating citizen records\n    (by using existing country \u0026 viruses names) using **Bash Scripting**.\n- **Project 2**:\\\nIntroduction of multiprocessing \u0026 interprocess communication via FIFO  pipes:\nA parent monitor process creates a number of child monitor processes,\nwhich expand the functionality of the project 1 application:\n    - The child monitors communicate with the parent monitor using one-way FIFO pipes.\n    Each child is assigned two such pipes, one for reading and one for writing.\n    All processes are obliged to use a buffer with **limited** size to read/write\n    and communicate using a defined **communication protocol**.\n    A process notifies another for sent data using defined **signals**.\n    - Each child monitor is assigned a set of directories to read record files from,\n    reads and stores the records similarily to project 1.\n    - All child monitors send their Bloom Filters to the parent process, which **unifies** them.\n    - The parent process keeps track of the directories assigned to each monitor.\n    Each directory contains record files regarding a **specific country**.\n    - The parent application can then serve user queries,\n    by invoking the related monitor, or multiple monitors, if needed.\n    - The user can add new files to a specific country directory,\n    and ask for an update using a specific query.\n    The parent monitor will notify the related child monitor,\n    which scans the directory and updates the records using the new files.\n    - The parent monitor also handles the case of a child monitor **suddenly stopping**,\n    by starting a new child monitor to **replace it**.\n    - When the user exits, the parent application notifies all child monitors to stop accordingly.\n\n    Finally, the project includes the creation of a **Bash Script**,\n    which reads a record file (with vaccination records from different countries),\n    creates separate directories (one for each country found in the file)\n    and places each country's records into files in the corresponding directory.\n- **Project 3**:\n    - Replacing FIFO pipes with network **Sockets**,\n    adding more complexity in I/O (using `htonl`, `ntohl` and similar routines when required).\n    - Using **threads** in each child monitor to read files from the assigned directories:\n    The child monitor provides the threads with the vaccination records containers\n    and a **shared buffer** (both accessed properly by using **semaphores**)\n    which contains the paths to the record files in the directories assigned to the child monitor.\n    The monitor acts as a **producer** (placing new file paths in the buffer)\n    and each thread acts as a **consumer** (removing a file path from the buffer, \n    reading and storing the vaccination records in the file).\n\nAll projects are built in **C++**. \nOther goals which apply to all project parts were:\n- Building (and building on) core data structures and containers \n(Linked List, Hash Table and Red-Black Tree) **from scratch** \n(the usage of STL was extremely restricted, essentially allowing only\n `std:string`, `std:stringstream` and other similar namespaces).\n- Creating, managing and deleting generalized containers with unknown content type.\n- Eliminating data duplication by properly using pointers.\n- Correct usage and release of dynamically allocated memory.\n- Familiarizing with low-level I/O, sending/reading data in parts \u0026 reconstructing it,\n introducing communication protocols, sending \u0026 handling signals across processes.\n- Dividing problems in subproblems and choosing the most efficient solution for each one.\n- Detecting edge cases, stretch testing \u0026 targetly debugging the application.\n\nAll projects include:\n- A `task.pdf` file describing the corresponding project tasks in detail (in Greek).\n- A `README.md` file with a brief explanation \u0026 comments on the implementation,\n as well as a description of the project structure, execution steps etc.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpspanoudakis%2Fsystem-programming-projects","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpspanoudakis%2Fsystem-programming-projects","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpspanoudakis%2Fsystem-programming-projects/lists"}