From 6a2d2b993385ee3621e09dc01f22df376ec590f4 Mon Sep 17 00:00:00 2001 From: Muawiya-contact Date: Tue, 10 Mar 2026 05:59:21 +0500 Subject: [PATCH 1/2] Add CloudKernel project files --- CloudKernel/README.md | 181 ++++++++++++++++++ CloudKernel/doc/CloudKernel_ProjectReport.pdf | Bin 0 -> 19882 bytes CloudKernel/out/Main.class | Bin 0 -> 2439 bytes CloudKernel/out/core/BootManager.class | Bin 0 -> 2302 bytes CloudKernel/out/core/ClockSynchronizer.class | Bin 0 -> 1743 bytes CloudKernel/out/core/NetworkPortManager.class | Bin 0 -> 1513 bytes CloudKernel/out/entities/VirtualMachine.class | Bin 0 -> 2005 bytes CloudKernel/out/utils/Logger.class | Bin 0 -> 2004 bytes CloudKernel/src/Main.java | 58 ++++++ CloudKernel/src/core/BootManager.java | 45 +++++ CloudKernel/src/core/ClockSynchronizer.java | 28 +++ CloudKernel/src/core/NetworkPortManager.java | 31 +++ CloudKernel/src/entities/VirtualMachine.java | 51 +++++ CloudKernel/src/utils/Logger.java | 38 ++++ .../.ipynb_checkpoints/main-checkpoint.html | 85 ++++++++ 15 files changed, 517 insertions(+) create mode 100644 CloudKernel/README.md create mode 100644 CloudKernel/doc/CloudKernel_ProjectReport.pdf create mode 100644 CloudKernel/out/Main.class create mode 100644 CloudKernel/out/core/BootManager.class create mode 100644 CloudKernel/out/core/ClockSynchronizer.class create mode 100644 CloudKernel/out/core/NetworkPortManager.class create mode 100644 CloudKernel/out/entities/VirtualMachine.class create mode 100644 CloudKernel/out/utils/Logger.class create mode 100644 CloudKernel/src/Main.java create mode 100644 CloudKernel/src/core/BootManager.java create mode 100644 CloudKernel/src/core/ClockSynchronizer.java create mode 100644 CloudKernel/src/core/NetworkPortManager.java create mode 100644 CloudKernel/src/entities/VirtualMachine.java create mode 100644 CloudKernel/src/utils/Logger.java create mode 100644 ResQTemp/esp_web/.ipynb_checkpoints/main-checkpoint.html diff --git a/CloudKernel/README.md b/CloudKernel/README.md new file mode 100644 index 0000000..8ffa132 --- /dev/null +++ b/CloudKernel/README.md @@ -0,0 +1,181 @@ +# CloudKernel ☁️⚙️ + +## Overview + +**CloudKernel** is a small Java-based simulation created for our **Operating Systems Lab**. +The purpose of this project is to show how a hypervisor-like system can manage multiple **Virtual Machines (VMs)** while coordinating shared resources. + +Instead of building a real operating system, this project focuses on demonstrating **important OS concepts** like synchronization, resource sharing, and concurrent execution using Java threads. + +The program simulates a system where several virtual machines start after the system boots, run tasks together, and share limited network resources. + +--- + +## 🎓 Academic Information + +**Course:** Operating Systems Lab +**Semester:** 4th Semester + +**Submitted to:** +Mam Amara Nadeem + +**Submitted by:** + +- **Moavia Amir** (2k24_BSAI_72) +- **Ali Raza** (2k24_BSAI_44) +- **Muhammad Arslan Nasir** (2k24_BSAI_26) + +**Submission Date:** +March 03, 2026 + +--- + +## 🎯 Project Goals + +This project was designed to help understand how operating systems manage: + +- System boot coordination +- Thread synchronization +- Limited resource sharing +- Parallel execution of processes + +All these ideas are implemented using **Java concurrency utilities**. + +--- + +## ⚙️ Key Concepts Used + +### 1. System Boot Coordination + +Before any virtual machine starts running, the system must finish its boot process. + +We simulate this using **CountDownLatch**. +It ensures that resources like **Disk and RAM** are ready before the virtual machines begin execution. + +--- + +### 2. VM Cycle Synchronization + +Each virtual machine performs its work in cycles. +To keep them synchronized, we use **CyclicBarrier**. + +This means all VMs must finish a cycle before the next one begins. + +--- + +### 3. Limited Network Access + +In real systems, hardware resources are limited. +In this simulation, only **two VMs can use the network at the same time**. + +This is managed using a **Semaphore**, which controls access to the shared network ports. + +--- + +## 🧩 Project Structure +``` +CloudKernel +│ +├── src +│ │ +│ ├── Main.java +│ │ +│ ├── core +│ │ ├── BootManager.java +│ │ ├── ClockSynchronizer.java +│ │ └── NetworkPortManager.java +│ │ +│ ├── entities +│ │ └── VirtualMachine.java +│ │ +│ └── utils +│ └── Logger.java +│ +├── doc +│ └── proposal +│ +└── README.md +``` +--- + +## 🏗 System Workflow + +The program runs in the following order: + +``` +System Boot +│ +▼ +BootManager initializes resources +│ +▼ +Virtual Machines start (Threads) +│ +▼ +VMs execute cycles together +│ +▼ +Network access controlled by Semaphore +│ +▼ +Logs printed to terminal +``` + +--- + +## ▶️ How to Run the Project + +### 1. Compile the project + +```bash +javac -d out -sourcepath src src/Main.java +``` +### 2. Run the program +```bash +java -cp out Main +``` +## 🖥 Example Output + +When the program runs, you may see output like: +``` +[BOOT] Disk initialized +[BOOT] RAM initialized +[BOOT] System ready + +[VM-1] Starting execution +[VM-2] Starting execution +[VM-3] Starting execution + +[VM-1] Requesting network access +[VM-2] Requesting network access + +[VM-1] Using network port +[VM-2] Using network port + +[VM-3] Waiting for network port +``` +The Logger class keeps the output organized so it is easier to read. + +## 🧠 What We Learned + +While building this project, we understood how operating systems handle: + ++ **Thread** synchronization + ++ **Shared** resource management + ++ **Parallel** execution + ++ **Process** coordination + +These concepts are important for understanding how real operating systems and cloud platforms work. + +--- + +## 📌 Conclusion + +CloudKernel is a simple educational simulation that demonstrates how a hypervisor-like system can coordinate virtual machines and manage shared resources. + +Although it is a simplified model, it provides a clear understanding of synchronization and concurrency in operating systems. + +--- \ No newline at end of file diff --git a/CloudKernel/doc/CloudKernel_ProjectReport.pdf b/CloudKernel/doc/CloudKernel_ProjectReport.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8b8891e9bbacebf20ca576e80bc29cc6af551deb GIT binary patch literal 19882 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 W50mage2S0gFHerv8m&j^y7WJq{Af%7 literal 0 HcmV?d00001 diff --git a/CloudKernel/out/core/BootManager.class b/CloudKernel/out/core/BootManager.class new file mode 100644 index 0000000000000000000000000000000000000000..4c9ffa393ff05c86131ffdd94ab6f7e92c1f561f GIT binary patch literal 2302 zcmb_dT~`}b6x{=anS`N)@KHW24JDL-C4r)?H7yE(3MD`VtRhyOB)2dynTazK5dV-5 zK6NeovD&rt-Q`d42ly*o?mG!26zb}Ou()&YnRE8pXP&GsQ55~ zCfo|+8g8rjD8_g9G|Wa2!Y6Y1GzLXl<~3wBET~x2a6f`e_)NwvX;{|qK*NfLT!^v! zY5rTrt!h}49_uO|%Jb)P+0d|A^9uc?VN1mqDjq2a=N-q-8Gd0;!Dw#ZI5g4~-?Y*N z$1YS{SJ-|!>r`xi!8x)6w~T_;yQXdWvkID%{X_scZ?~bZiBY#UBfzEcc#*sAZJ$MI%v*NlYtf-}H^b z!KzUXpjCXSptHeCCP_>YX49#-1##b$>7z2qs$m=nf{}NqQo4SnBY{!k z1pby`@20o*TwxSz(4OxaztmmtcIYtq<)-=XDz2vToJA#$HqP1a3zl*vCK5XOa)Mht7jc$%S^*Ee-gziqz)mu4AnJUwteBcm9j62r%l)K z1iL!+r0akb?rpi_Z@fI0kHQxmSEL(yf2M=$`F&CFc@67?*dFJodShFX%j1tCFtH!u zRPx?7yA|HfWHR?AXlA@REWx$dsMxjy;B1U1FS0k-Hhq^uX5`?60$F7yi2bxJ;v=5XO;emO?9nLfG4-O0u>s#X>eHcxt_f{nJ}>X^ou zj+AWBwYqesedrvBbS{`zj)L*TDEN+hte~w_KdGSLtvSazsF0SvY}>-kT88Hd4*Q>t z71!{pL$zesMN4>zYGCGk(G8X}fm@uPM)!ArSxx!hv5kt=kh6wmZJNHwsHpHWdQP8< z>NztLXBgJ%#xO6&2*2tIV)8@8T`TwegmF#sG>I1OfX;~*P$piZX*=`+&Ck&CGzc2! zD*p`tDjmagoj47hsfBjEMreED6@d{`UqE|~a6R}Eni;I41DDC5j{xt#6(B-@wu=D< z2{1~4>jbz#fTn=_EWsuDftVg^k9E96bmCXEJVz(bu~-++bs{mc1;$y!1fnF-Pn=0w zWch>9CV4Bllal;GR7rZ4DBZChqI9G8CHi>m4?wF)27bm+?j_!Pjw`2z_SM?<#_vx9 zj6TXgNUT20aJ|O-^4Y{EaFenCSIB6H)m^2}2-gI?;@l0>X9QC`&+wVy^BxsQGolU6 zc@={XRZN9RoHKO+@u3>=t5xE||3C3dB;LW_D2exwcrS@}l4^{^dq}*O#Cu4*m&7lh mBTjX021?A}2Rx6@cM@Uekq2BXQ9@`Pf@*Prtjywum8UvdNK z_LUM+m#T-Z@40J3t1`pbT~B)Y9!(0h{o4F4L$VsQ1Vg6oNwL-MHig>ZO`mp>;h}UH zrVB%4pUZZsp_M1w<;c%`@X8fE?FBM4@QHy>87!Z7n=PJ~;${9eL#i;0U^arja>cqA zq0UtO!0j{$`alKJ`(7v~O58#gD-2U>L7+pecyCkagP;{=#;`ht75aQ;;SN4$xc2XL zMqp(NQ@FseuotL~-KV1MRv?9A?{QC44K~-d8>M2$6grMW6-4}nrFzhAN2I25`^(E+ z3wKema1US5PPM*WeMISenZ|t!Yp61e=k}MnWVzC%^4vg)(y1D$vO(Gd61SVrg{v8^ z9B@D$%x}MfM%iQ zQiqXRPgEPHXrN}{YiwD_;e7+!QR5!JmC~Rmo_s;9mg)lmllJ&`+|_|PWSHn4uM9k) zn^O;hPQOQDsYxkR)#qU-DD<0Awqm@YiXU>>@fmmt0O0_ z;t7u9&fzLusSLf*j9wOcR%n(O%rDaT9<3@!AxYm$#n)iBj&KgxD*lGVx4FgFNdAn} zj|1mv8nXjKi^lVqz%=GCLm)GlC8r2#iJ-|H7Z$Q(+4Qd%FaCtoFEICxAtuR$Vj+#o zlueExfH88qgv(QAB=I<_RSLrBY_^zq>Lj0SXD5mY=Li-hah`zx2{=jrG#Sd|BEf$^ hZs%|XoAfmaodVdj&eF+Mvbl!q^mFL6^cO39)JXsU literal 0 HcmV?d00001 diff --git a/CloudKernel/out/core/NetworkPortManager.class b/CloudKernel/out/core/NetworkPortManager.class new file mode 100644 index 0000000000000000000000000000000000000000..cf004f0f634987d013d42f2498b56cdb5af83303 GIT binary patch literal 1513 zcmaJ>?Q+{h6g`{Rk?SZ;YMPdO5LB8{CuyycK)>7qiR-im=VM||8QLH1M&5DM$SZfX zD)dcw4Q7BcVTK3bp&0H;qOoy?A71ahyZ794&%N5e{yzB=z#Z%raRFB?EL*r%#27w3 zhjCmtyK;#x+^}%7fJzYsxW;*_1cn<0tQ%vaL<<>TSh&qF+1_h!Hec-T9kg2vtido< z3uUCa)K7U3i*bS*W3Z*rKZNRdKU6wmaGJ098}7#14_q&lUaXXm+HHv*?;nLqR2e27 z_|n&3GK`m3o-*WWVMj1bH+?B~}5 zSpU%zeeDx93wJ0=i9qluiz>FlSb1XGH-MLSPpR&3$-6>T3|ku?Vvb?y|Cv*~M+LZ} zASV8Gb7au z)#?XE+XzG)Y=pix8}+YD<5;&m({O~N`^jgFDNQmHuQ_mTG<=B}@h7Cn9}XdXPS zzw`Cczmq|bv*pIhXsaky5Ox{vozce8+oK-C-^vDp;qD+o=kdYjZoB@7X!_ELBaw1+ z+KS7F%1kQiaLuU_0?Fos;rbBBLA_buY$YiFDb~Vc)3|RLmQTg^<(u$WWP_OMu+2Rk zs<#$)XvUjicpUes*9|F!ss%iX1c~$0VEGwFIwMcG>;xiOP6Ml>3JiFL0^4u<;*9Ih z2kxhnQXOnd22tZd(DJpYTG(Z{Hd5bN+=eD@h)PxiuF#uv!8{L`M+qO$6LT@KX33(j zg!bd)qmPc(d9o_V(+()Dz5`qR17qLkbMKJ*75SgZ%dkMJd7uCbIodHS;-dr|cu831 zDY~_``U~>EVd8`?p>*zd6jR4!K0D|MS)~m$Y zCALd+nxmW_)6b#2Dd#Q9Y8cI@=;u$P-q5-U-T8p;5Y_7@5W;eZiS53#h zwKMI1(Dy#@>`YO|hyDTmd-~Mrv^{qdhcH2AxOdOF=bn4M@BGN0|GxeMz&sjBOyTSx zCUH(L=k+qDmk;&wQ34kX%qQ@15(!*P)0ImJTu$Ose3rx&EX7Gff9x+U6_dD%b(vu$+Z#&hZEwESe`)3pVJrGo!gi?acw#MVYzeu+w_MWn%aESz z&uXKgisCkf-0YksD}E?#am~?&hwnI2h1^}`cAcE$HAyB;Vb;Vnj+?M>!o+)c-$Vu{ zO?-e83`aY6tj;CN39R+Ca%pWjPpCuXxIv-p*CK-Albdtr8zw%-ZH9N2d|w4h^5&{g zb-x-M8bBq14HI900@bz`8V2r~_!9RFd}U%2_f0&&eFI;c_y+eG=B~J|)lQpb`;De6 zl*n6^dZ-lT)T;VVJgX+TEgpuh+sa#;>o*@TOz$PX%$UHg-vLDk1*@l&Jm7pLG)~4mf>{dQll-{zGsJ03QrZ5q`xh^B`&2SWS9R;R8H1b z`@q_Y%&aq3&j>6tO|;V4H0h5dOU?)DI@Z#@#WqLSWI-3~pklX=&#FU!a&g<s+*ZD98K7x0 zQ1<=pkRX~R&l9rf@*vO?=htos9UtwkSm9okhEk?|aiJG!muBC^jaE|}V7}R9-!7en zZk!z#Mee#4M~MXkF2l(ldLo(1jwUB@-r0h1J2@SoF}a&DE<$I*x$HGzm_8#1}0KOMxIXk$g)m*l1O@p RN91V&pOBm&d4c{H{|AGS2l@a2 literal 0 HcmV?d00001 diff --git a/CloudKernel/out/utils/Logger.class b/CloudKernel/out/utils/Logger.class new file mode 100644 index 0000000000000000000000000000000000000000..9ba16468f8468197508efb955463bd3b54bcf213 GIT binary patch literal 2004 zcma)7?NZxT5Iq-zB?~1`10g^|A;BpShy%3wz%(r%CeWIX+Ah>}X)25`0$Fk`IUU}l zuhDddGR(9O(1*(8NEWdeOs4*!dw1{dxw~iguK#;?@h^a9a1=;*qF@HIF~l(E?Y@ZN zOFWhFOv3XxtrjGFCF7-nuknqHMFmS(jzeI<)1ZL zm3eq;*|r>4v)moctm`y>l})ENWn=`}mkW#BZ3sjQ=}cy8SH`A5B%5B5vBl%1tqgbD zJYFy?!+puK@rfPJ&psehSH`gP&3a{DujRFUlbVQWmjzyoUytMeXguhcqgS<>=Grv@ z$VOPy){bazEZ>0nF9j3XzmMbzGgnMC>}L>T6tT*vW0Sq045}wMt5Xfn%B!#U3N8 zXeT;*v!uDZhI@3`rH;VER@J`VK$nSMy@ZKXy(vwi(IO!iWzryUs)4gLLQxo JxH^;Ms7PGPuT^XU z!ymW9C`Yoy=`CTbgs}bc>x*76{2w^SCAg%&d|Br#J-IP5&C(@UH**?5}y+(z)$*TK#zy2 zb}ydc)&*_@XXt7IG=jUw@P_I92vdRcB7^pF8KCnSy3g?mH;je4evHv1820psSUhUHUo75pj^4izX}U-KqZosIOoKKgVR2QcHBm){oWG#l%kz2a LQvP?v|E|3Ui%QrH literal 0 HcmV?d00001 diff --git a/CloudKernel/src/Main.java b/CloudKernel/src/Main.java new file mode 100644 index 0000000..44ceb3a --- /dev/null +++ b/CloudKernel/src/Main.java @@ -0,0 +1,58 @@ +import core.BootManager; +import core.ClockSynchronizer; +import core.NetworkPortManager; +import entities.VirtualMachine; +import utils.Logger; + +// Entry point for the CloudKernel simulation. +public class Main { + + private static final int NUM_VMS = 3; + private static final int NUM_CYCLES = 2; + + public static void main(String[] args) throws InterruptedException { + // Phase 1: boot + Logger.section("PHASE 1: SYSTEM BOOT [CountDownLatch]"); + Logger.log("HYPERVISOR", "CloudKernel v1.0 starting...", Logger.BOLD + Logger.GREEN); + + BootManager bootManager = new BootManager(); + bootManager.initDisk(); + bootManager.initRAM(); + bootManager.awaitBootCompletion(); + + Thread.sleep(500); + + // Phase 2: VM execution + Logger.section("PHASE 2: VM EXECUTION [CyclicBarrier + Semaphore]"); + int[] cycleNum = { 0 }; + ClockSynchronizer clock = new ClockSynchronizer(NUM_VMS, cycleNum); + NetworkPortManager networkManager = new NetworkPortManager(); + + Logger.log("HYPERVISOR", + "Launching " + NUM_VMS + " VMs for " + NUM_CYCLES + " cycles each...", + Logger.CYAN); + + Thread[] vmThreads = new Thread[NUM_VMS]; + for (int i = 1; i <= NUM_VMS; i++) { + int workDuration = 600 + (i * 200); + + VirtualMachine vm = new VirtualMachine( + "VM-" + i, NUM_CYCLES, clock, networkManager, workDuration); + vmThreads[i - 1] = new Thread(vm, "VM-" + i); + vmThreads[i - 1].start(); + } + + for (Thread t : vmThreads) { + t.join(); + } + + // Phase 3: shutdown + Logger.section("PHASE 3: SYSTEM SHUTDOWN"); + Logger.log("HYPERVISOR", "All VMs have completed execution.", Logger.GREEN); + Logger.log("HYPERVISOR", "Releasing all system resources...", Logger.YELLOW); + Thread.sleep(300); + Logger.log("HYPERVISOR", "CloudKernel has shut down cleanly. Goodbye. [OK]", Logger.BOLD + Logger.GREEN); + Logger.separator(); + System.out.println(); + } +} \ No newline at end of file diff --git a/CloudKernel/src/core/BootManager.java b/CloudKernel/src/core/BootManager.java new file mode 100644 index 0000000..7a7697a --- /dev/null +++ b/CloudKernel/src/core/BootManager.java @@ -0,0 +1,45 @@ +package core; + +import utils.Logger; +import java.util.concurrent.CountDownLatch; + +// Handles system boot readiness using CountDownLatch. +public class BootManager { + + private final CountDownLatch bootLatch = new CountDownLatch(2); + + public void initDisk() { + new Thread(() -> { + try { + Logger.log("BOOT", "Disk subsystem starting...", Logger.YELLOW); + Thread.sleep(1500); + Logger.log("BOOT", "Disk subsystem initialized. [OK]", Logger.GREEN); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } finally { + // Count down in finally to avoid deadlock on errors. + bootLatch.countDown(); + } + }, "Disk-Init-Thread").start(); + } + + public void initRAM() { + new Thread(() -> { + try { + Logger.log("BOOT", "RAM subsystem starting...", Logger.YELLOW); + Thread.sleep(1000); + Logger.log("BOOT", "RAM subsystem initialized. [OK]", Logger.GREEN); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } finally { + bootLatch.countDown(); + } + }, "RAM-Init-Thread").start(); + } + + public void awaitBootCompletion() throws InterruptedException { + Logger.log("BOOT", "Hypervisor waiting for subsystems...", Logger.CYAN); + bootLatch.await(); + Logger.log("BOOT", "All subsystems ready. CloudKernel is ONLINE. [OK]", Logger.GREEN); + } +} \ No newline at end of file diff --git a/CloudKernel/src/core/ClockSynchronizer.java b/CloudKernel/src/core/ClockSynchronizer.java new file mode 100644 index 0000000..cfbf217 --- /dev/null +++ b/CloudKernel/src/core/ClockSynchronizer.java @@ -0,0 +1,28 @@ +package core; + +import utils.Logger; +import java.util.concurrent.BrokenBarrierException; +import java.util.concurrent.CyclicBarrier; + +// Keeps all VM threads synchronized at each cycle. +public class ClockSynchronizer { + + private final CyclicBarrier barrier; + + public ClockSynchronizer(int vmCount, int[] cycleNum) { + Runnable clockTick = () -> { + cycleNum[0]++; + Logger.log("CLOCK", + "=== Global Clock Tick #" + cycleNum[0] + + " - All VMs synchronized. Next cycle begins. ===", + Logger.BOLD + Logger.CYAN); + }; + + this.barrier = new CyclicBarrier(vmCount, clockTick); + } + + public void sync(String vmName) throws InterruptedException, BrokenBarrierException { + Logger.log(vmName, "Work unit done. Waiting at clock barrier...", Logger.YELLOW); + barrier.await(); + } +} \ No newline at end of file diff --git a/CloudKernel/src/core/NetworkPortManager.java b/CloudKernel/src/core/NetworkPortManager.java new file mode 100644 index 0000000..9cb5c4a --- /dev/null +++ b/CloudKernel/src/core/NetworkPortManager.java @@ -0,0 +1,31 @@ +package core; + +import utils.Logger; +import java.util.concurrent.Semaphore; + +// Manages limited network ports using a fair semaphore. +public class NetworkPortManager { + + private static final int TOTAL_PORTS = 2; + private final Semaphore networkPorts = new Semaphore(TOTAL_PORTS, true); + + public void acquirePort(String vmName) throws InterruptedException { + Logger.log(vmName, + "Requesting Network Port... (available: " + networkPorts.availablePermits() + "/" + TOTAL_PORTS + ")", + Logger.YELLOW); + + networkPorts.acquire(); + int inUse = TOTAL_PORTS - networkPorts.availablePermits(); + + Logger.log(vmName, + "Network Port GRANTED. (in use: " + inUse + "/" + TOTAL_PORTS + ") Transmitting data...", + Logger.GREEN); + } + + public void releasePort(String vmName) { + networkPorts.release(); + Logger.log(vmName, + "Network Port RELEASED. (available: " + networkPorts.availablePermits() + "/" + TOTAL_PORTS + ")", + Logger.CYAN); + } +} \ No newline at end of file diff --git a/CloudKernel/src/entities/VirtualMachine.java b/CloudKernel/src/entities/VirtualMachine.java new file mode 100644 index 0000000..eb0bfd8 --- /dev/null +++ b/CloudKernel/src/entities/VirtualMachine.java @@ -0,0 +1,51 @@ +package entities; + +import core.ClockSynchronizer; +import core.NetworkPortManager; +import utils.Logger; +import java.util.concurrent.BrokenBarrierException; + +// Represents one VM thread in the simulation. +public class VirtualMachine implements Runnable { + + private final String name; + private final int cycles; + private final ClockSynchronizer clock; + private final NetworkPortManager networkManager; + private final int workDuration; + + public VirtualMachine(String name, int cycles, ClockSynchronizer clock, + NetworkPortManager networkManager, int workDuration) { + this.name = name; + this.cycles = cycles; + this.clock = clock; + this.networkManager = networkManager; + this.workDuration = workDuration; + } + + @Override + public void run() { + Logger.log(name, "Virtual Machine is ONLINE.", Logger.GREEN); + + try { + for (int i = 1; i <= cycles; i++) { + Logger.log(name, "Cycle " + i + " - executing workload...", Logger.CYAN); + Thread.sleep(workDuration); + + networkManager.acquirePort(name); + Thread.sleep(500); + networkManager.releasePort(name); + + clock.sync(name); + } + + Logger.log(name, "All cycles complete. Shutting down gracefully. [OK]", Logger.GREEN); + + } catch (InterruptedException e) { + Logger.log(name, "Interrupted during execution!", Logger.RED); + Thread.currentThread().interrupt(); + } catch (BrokenBarrierException e) { + Logger.log(name, "Clock barrier broken - system error!", Logger.RED); + } + } +} \ No newline at end of file diff --git a/CloudKernel/src/utils/Logger.java b/CloudKernel/src/utils/Logger.java new file mode 100644 index 0000000..84495e3 --- /dev/null +++ b/CloudKernel/src/utils/Logger.java @@ -0,0 +1,38 @@ +package utils; + +import java.time.LocalTime; +import java.time.format.DateTimeFormatter; + +// Small utility for formatted console logging. +public class Logger { + + private static final DateTimeFormatter TIME_FORMAT = DateTimeFormatter.ofPattern("HH:mm:ss"); + + public static final String RESET = "\u001B[0m"; + public static final String GREEN = "\u001B[32m"; + public static final String CYAN = "\u001B[36m"; + public static final String YELLOW = "\u001B[33m"; + public static final String RED = "\u001B[31m"; + public static final String BOLD = "\u001B[1m"; + + private Logger() { + // Prevent instantiation. + } + + public static void log(String tag, String message, String color) { + String timestamp = LocalTime.now().format(TIME_FORMAT); + System.out.printf("%s[%s] %-12s%s %s%n", + color, timestamp, "[" + tag + "]", RESET, message); + } + + public static void separator() { + System.out.println(BOLD + "-".repeat(65) + RESET); + } + + public static void section(String title) { + System.out.println(); + separator(); + System.out.println(BOLD + " " + title + RESET); + separator(); + } +} \ No newline at end of file diff --git a/ResQTemp/esp_web/.ipynb_checkpoints/main-checkpoint.html b/ResQTemp/esp_web/.ipynb_checkpoints/main-checkpoint.html new file mode 100644 index 0000000..c404297 --- /dev/null +++ b/ResQTemp/esp_web/.ipynb_checkpoints/main-checkpoint.html @@ -0,0 +1,85 @@ + + + + +ResQTemp + + + +

+

ResQTemp System

+
+
+
--
+
Waiting...
+
+
+
+ + + + +
+
Location: NFC-IET Multan Lab 114 AI Depart
+
+
+ + + From 7d15dbd86a8e9680be1441953e96096ba51a8bdb Mon Sep 17 00:00:00 2001 From: Muawiya-contact Date: Tue, 10 Mar 2026 06:01:45 +0500 Subject: [PATCH 2/2] Configure Git line endings --- .gitattributes | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..2125666 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +* text=auto \ No newline at end of file