Advertisement
PomozMi

zawiadowcA

Dec 15th, 2014
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.52 KB | None | 0 0
  1. /*
  2. HEj!
  3. Pisałeś:
  4. "proces napisany w C# po wykonaniu operacji, która może skutkować zablokowaniem na jakimkolwiek semaforze zawsze sprawdza swój status (czy został zablokowany)"
  5.  
  6. tu chodzi o warunek if w Zawaidowcy,tak ?
  7. */
  8.  
  9.  
  10. /*
  11. "czyli sprawdza pole w bloku PCB
  12. jeśli nie został zablokowany to przechodzi do kolejnego kroku
  13. jeśli został to jego funkcja w C# kończy działanie zapisując obecny stan w zmiennej w klasie procesu
  14. i następuje przez to powrót to zarządcy procesora, który uruchomi inny, niezablokowany proces
  15. kiedy proces napisany w C# zostanie odblokowany zarządca procesora wywoła jego funkcję, która dzięki poprzednio zapisanej zmiennej rozpocznie działanie od tego miejsca"
  16.  
  17.  
  18. To jest tak że proces po każdym kroku "wychodzi"
  19. powtarza pętle DO WHILE w XPER() ? O to chodzi, tak?
  20.  
  21.  
  22.  
  23. Nie, nie chodzi o tę funkcję
  24.  
  25. Ona orientuje się czy ma uruchomić funkcję C# czy włączyć interpreter asemblera
  26.  
  27. te sprawdzanie statusu jest w funkcji na którą wskazuje RUNNING.function_to_run();
  28.  
  29. czyli na przykład w funkcji procesu nadzorczego, albo procesu urządzenia
  30. */
  31. //u nas jest karuzelowy algorytm przydzielania.
  32. using System;
  33. using System.Collections.Generic;
  34. using System.Linq;
  35. using System.Text;
  36. using System.Threading.Tasks;
  37.  
  38. namespace Warstwa1
  39. {
  40.     class Zawiadowca
  41.     {
  42.  
  43.         static public PCB RUNNING; // blok  procesu wykonywanego
  44.         static public PCB NEXTTRY; // zawiadowca ustawia na  nextElement
  45.  
  46.         static public void XPER()// bezpośrednie wywołanie programu zawiadowcy
  47.         {
  48.             do
  49.             {
  50.                 RUNNING = Wybieram();
  51.                
  52.                 if (RUNNING.function_to_run == null)
  53.                 {
  54.                     Warstwa0.AssemblerInterpreter.CPUInterpreter(ref RUNNING);
  55.                 }
  56.                 else
  57.                 {
  58.                     RUNNING.function_to_run();
  59.                 }
  60.                 NEXTTRY = RUNNING.nextElement;
  61.             } while (true);
  62.         }
  63.  
  64.         static public PCB Wybieram() // zawiadowca
  65.         {
  66.             //przeszukanie bloków PCB
  67.             for (PCB tmp = NEXTTRY ; ; tmp = tmp.nextElement)// od bloku wskazywanego przez NEXTRY
  68.             {
  69.                 if (tmp.BLOCKED == false && tmp.STOPPED == false)// ani zatrzymany ani zablokowany
  70.                 {
  71.                     Warstwa5.Program.MainForm.addToList("_____ Zawiadowca: wybieram  " + tmp.NAME);
  72.                     return tmp;
  73.                 }
  74.             }
  75.         }
  76.     }
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement