The demonstration shows Nos running two processes (2000 and 2011). The nos1.txt is the operating system code. The processor simulator plus the support for Nos is ems.js . You need the latest Rz compiler and Assembler (rz36-2.zip) to compile and assemble the source code.
One process prints 10, 12, 14...300. Another process prints 3, 5, 7...300. The timeout is set at 300 instructions for interrupt to occur. The application program is this:
count1()
i = 10
while(i < 300)
print(i," ")
i = i + 2
There are a lot of jumble output on the screen. The output from count1( ) is underlined. Here is how to understand them!
load 468 instructions
10 12 14 16 18 20 22 24 26 28 30 32 #2 34 36 38 40 42 44 46 48
50 52 54 56 58 60 #1 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90
#0 * s a v e 2000 r e s 2011 3 5 #2 7 9 11 13 15 17 19 21 23 25 27 29 31
33 35 #1 37 39 41 43 45 47 49 51 53 55 57 59 61 63 #0 * s a v e 2011 r e s
2000 92 94 96 #2 98 100 102 104 106 108 110 112 114 116 118
120 122 124 #1 126 128 130 132 134 136 138 140 142 144 146 148
150 152 #0 * s a v e 2000 r e s 2011 65 67 69 #2 71 73 75 77 79 81
83 85 87 89 91 93 95 97 #1 99 101 103 105 107 109 111 113 115 117 119 121
123 125 127 #0 * s a v e 2011 r e s 2000 154 156 158 #2 160
162 164 166 168 170 172 174 176 178 180 182 184 186 188 #1 190
192 194 196 198 200 202 204 206 208 210 212 214 216 #0 * s a v e
2000 r e s 2011 129 131 133 #2 135 137 139 141 143 145 147 149 151 153 155
157 159 161 #1 163 165 167 169 171 173 175 177 179 181 183 185 187 189 #0
* s a v e 2011 r e s 2000 218 220 222 #2 224 226 228 230 232
234 236 238 240 242 244 246 248 250 #1 252 254 256 258 260 262
264 266 268 270 272 274 276 278 280 #0 * s a v e 2000 r e s 2011 191
193 195 #2 197 199 201 203 205 207 209 211 213 215 217 219 221 223 225 #1
227 229 231 233 235 237 239 241 243 245 247 249 251 253 #0 * s a v e 2011
r e s 2000 282 284 286 #2 288 290 292 294 296 298 stop * s
a v e 2000 d e l #2 r e s 2011 #1 255 257 259 261 263 265 267 269 271 273
275 277 279 281 #0 * s a v e 2011 r e s 2011 283 285 287 #2 289 291 293
295 297 299 stop * s a v e 2011 d e l exit
execute 3552 instructions 18857 cycles
interrupt 11
empty, full, mutex // semaphores
shareVar
writer()
i = 0
while( i < 3 )
wait(empty) ***1
wait(mutex)
shareVar = shareVar + 1
signal(mutex)
signal(full)
i = i + 1
reader()
i = 0
while( i < 3 )
wait(full)
wait(mutex)
print("+",shareVar)
signal(mutex)
signal(empty) ***2
i = i + 1
load 837 instructions
#9 #8 #7 #6 block * s a v e 2106 #9 r e s 2117 #8 #7 + 1 #6 #5 #4
wake * s a v e 2117 r e s 2106 #9 #8 #7 #6 block * s a v e 2106 #9 r e s
2117 #8 #7 + 2 #6 #5 #4 wake * s a v e 2117 r e s 2106 #9 #8 #7
stop * s a v e 2106 #9 r e s 2117 #8 #7 + 3 #6 #5 stop * s a v e
2117 exit
execute 3899 instructions 21519 cycles
interrupt 6