{"id":21050651,"url":"https://github.com/adolbyb/process-scheduler","last_synced_at":"2025-10-11T08:09:49.071Z","repository":{"id":156942248,"uuid":"442822540","full_name":"ADolbyB/process-scheduler","owner":"ADolbyB","description":"A C++ process scheduler project using predefined processes and queue structs ","archived":false,"fork":false,"pushed_at":"2023-08-04T17:28:23.000Z","size":987,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-16T08:48:00.108Z","etag":null,"topics":["c-plus-plus","cpp","process-scheduler","process-scheduling-algorithms","queue","struct"],"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/ADolbyB.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":"2021-12-29T16:02:27.000Z","updated_at":"2023-08-04T17:11:38.000Z","dependencies_parsed_at":null,"dependency_job_id":"cd77ea09-645f-4a26-b9b5-66207d64cffa","html_url":"https://github.com/ADolbyB/process-scheduler","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ADolbyB/process-scheduler","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ADolbyB%2Fprocess-scheduler","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ADolbyB%2Fprocess-scheduler/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ADolbyB%2Fprocess-scheduler/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ADolbyB%2Fprocess-scheduler/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ADolbyB","download_url":"https://codeload.github.com/ADolbyB/process-scheduler/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ADolbyB%2Fprocess-scheduler/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279006754,"owners_count":26084148,"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","status":"online","status_checked_at":"2025-10-11T02:00:06.511Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["c-plus-plus","cpp","process-scheduler","process-scheduling-algorithms","queue","struct"],"created_at":"2024-11-19T15:46:42.864Z","updated_at":"2025-10-11T08:09:49.029Z","avatar_url":"https://github.com/ADolbyB.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Process Scheduler\nA C++ process scheduler project using predefined processes and queue structs \n\nThis Process Scheduler was built and runs on the Linux build of Code::Blocks v20.03 using g++ compiler and \nC++11 ISO C++ language standard compiler flag.\n\nTo run this in Code::Blocks, create a New Project -\u003e Console Application -\u003e C++ -\u003e Name the project and select\na location for the project -\u003e Select GNU GCC compiler -\u003e Finish -\u003e remove \"main.cpp\" from project with right\nclick menu -\u003e Drop files into the new project folder -\u003e Delete old \"main.cpp\" file -\u003e Build and Run.\n\nThis was a project for Fall 2021 semester in COP4610 Operating Systems class at FAU.\n\nThis process scheduler project uses predefined tasks, which were specified by the professor. Each process\nis defined as a set of CPU burst times and I/O burst times as follows: `{CPU, IO, CPU, IO, ... , CPU}`. \n\nEvery process must begin and end with a CPU burst.\n\nNotes for all algorithms:\n\n1) All processes finishing CPU bursts from any queue are sent to the back of the IO queue, unless the process is   finished.\n2) All algorithms assume unlimited IO devices, so every process in the IO queue is decremented at the same time.\n3) Any process in the IO queue is removed from any position in the queue as soon as the IO burst counter reaches 0. This is because of the \"unlimited IO devices\" ideal condition.\n\nUPDATE: to use this project with GDB (GNU DeBugger), compile the `sched_driver` binary executable:\n    \n1) Bash: `g++ -g -Wall -Werror *.cpp *.h -o sched_driver`\n2) Launch with GDB: `gdb ./sched_driver`\n\nThis project provides three different scheduling algorithms, which are selectable by the user:\n\n1) `FCFS`: First Come First Served:\n    - This algorithm uses a single Ready Queue and a single IO Queue.\n    - Each process in the ready queue is run by the CPU in the order it was received until it completes \n      its CPU burst.\n    - This scheduling algorithm is non-preemptive.\n2) `SJF`: Shortest Job First:\n    - This algorithm uses a single Ready Queue and a single IO Queue.\n    - Since each process is predefined, as processes enter the ready queue, they are ordered with the \n        shortest CPU burst in the front of the queue.\n    - All processes run until their CPU burst is completed.\n    - This scheduling algorithm is non-preemptive.\n3) `MLFQ`: Multi-Level Feedback Queue:\n    - This algorithm uses three Ready Queues and one IO queue.\n    - The Ready Queues use separate priorities and separate algorithms. The highest level Ready Queue uses\n        a 5 time quantum (Tq) Round Robin scheme, the second level Ready Queue uses a 10 Tq Round Round scheme, \n        the third Ready Queue uses an FCFS algorithm. \n    - This is a pre-emptive scheduling algorithm.\n    - Any process which does not finish its CPU burst in the 1st queue gets moved to the 2nd queue. The 2nd queue\n        does not run until the 1st is empty. Any process which does not finish its CPU burst in the 2nd queue gets\n        moved to the 3rd queue. The 3rd queue does not run until the 1st and 2nd queues are empty.\n    - All processes returning from IO are placed in the 1st queue.\n    - Any process running in a lower queue will be preempted by a process arriving in a higher queue, then resume\n        its CPU burst when the higher queue(s) are empty.\n\n## FCFS Output Screenshot:\n![FCFS Output](./Documentation/Results_FCFS.png)\n\n## SJF Output Screenshot:\n![SJF Output](./Documentation/Results_SJF.png)\n\n## MLFQ Output Screenshot:\n![MLFQ Output](./Documentation/Results_MLFQ.png)\n\n## Status:\n\n![GitHub repo size](https://img.shields.io/github/repo-size/ADolbyB/process-scheduler?label=Repo%20Size\u0026logo=Github)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadolbyb%2Fprocess-scheduler","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fadolbyb%2Fprocess-scheduler","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadolbyb%2Fprocess-scheduler/lists"}