Скачать 347.51 Kb.
|
Рисунок 2 Для того чтобы программа выполнялась должен быть запущен минимум один процесс. Рассмотрим рисунок 3. Процессы отображаются как большие цветные шарики с черной границей. Цвет каждого процесса является уникальным и остается таким даже после его завершения. Запуск процесса с некоторым именем на определенном процессоре отображается как появление шарика определенного цвета на нужной орбите. Выполнение процесса показано движением шарика по орбите и взаимодействием с данными в хранилище. Рисунок 3 Чтение данных из хранилища визуализируется следующим образом: процесс подсвечивает границы читаемых данных своим цветом, и их копии вылетают из хранилища и прикрепляются к процессу, как показано на Рисунке 4. После некоторого времени, задаваемого вторым параметром программы, эти данные исчезают. Глядя на количество прикрепленных к процессу данных за указанный промежуток времени, можно определить какие процессы наиболее интенсивно читают данные из хранилища. Рисунок 4 Запись данных в хранилище проиллюстрирована на Рисунке 5. Из центра процесса вылетает маленький шарик с черной границей и того же цвета, что и создавший его процесс. Записанные данные размещаются на свободных местах в хранилище и сохраняют свой цвет до завершения работы программы. Так как каждый процесс имеет свой уникальный цвет, то глядя на состояние хранилища можно определить какие процессы наиболее интенсивно записывают в хранилище данные. Когда процесс завершается, то соответствующий ему шарик исчезает. Рисунок 5 Дополнительные операции работы с хранилищем, такие как добавление новых данных в хранилище и удаление данных из него, визуализируются достаточно просто: шарик либо появляется на свободном месте в хранилище, либо исчезает из хранилища, освобождая место. Кратко рассмотрим структуру самой программы. Она состоит из двух частей: интерфейса и кода отображения визуализации. Интерфейс написан на языке XAML - основанном на XML языке разметки для декларативного программирования приложений. XAML разработан компанией Microsoft. Исходный код приведен далее: xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="701" Width="701" Background="Silver" > Здесь создается главное окно программы Window с различными параметрами, далее создается контейнер Grid для размещения в нем интерфейса программы, и в самом конце размещается контейнер Canvas для отображения в нем визуализации. Код отображения визуализации написан на языке C#. Далее приведен исходный код: using System; using System.IO; using System.Collections.Generic; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Windows.Media.Animation; using System.Windows.Threading; using System.Threading; namespace Diplom { class Processes { public string Name; public Label Text; public Ellipse myEllipse; public OrbitClass Orbits; public Processes() { Orbits = new OrbitClass(10); } } class Data { public string Name; public Ellipse myEllipse; } class FlyingData { public Data data; public int pause; public string destination; public int vaultPosition; public int coreNumber; public orbitPosition op; public FlyingData() { data = new Data(); } } class orbitPosition { public int orbit; public int position; public orbitPosition(int i, int j) { orbit = i; position = j; } } class OrbitClass { public double center_x = 0; public double center_y = 0; public Data[][] orbits; public bool[][] availableOrbits; public long[][] addTimes; public double[] alfas; public double[] radiuses; public OrbitClass(int numOrbits) { orbits = new Data[numOrbits][]; availableOrbits = new bool[numOrbits][]; addTimes = new long[numOrbits][]; alfas = new double[numOrbits]; radiuses = new double[numOrbits]; int size = 12; for (int j = 0; j < orbits.Length; j++) { Data[] orbit = new Data[size]; bool[] availableOrbit = new bool[size]; long[] addTime = new long[size]; for (int i = 0; i < orbit.Length; i++) { orbit[i] = null; availableOrbit[i] = true; addTime[i] = 0; } orbits[j] = orbit; availableOrbits[j] = availableOrbit; addTimes[j] = addTime; alfas[j] = 2 * Math.PI / size; radiuses[j] = Math.Ceiling((MainWindow.dataSizeX + 1) / Math.Sqrt(2 * (1 - Math.Cos(alfas[j])))); size = size + 6; } } public orbitPosition Add() { for (int i = 0; i < availableOrbits.Length; i++) { for (int j = 0; j < availableOrbits[i].Length; j++) { if (availableOrbits[i][j] == true) { availableOrbits[i][j] = false; return new orbitPosition(i, j); } } } return null; } public void setCenter(double center_x, double center_y) { this.center_x = center_x; this.center_y = center_y; } public double getTextX() { return center_x + 25; } public double getTextY() { return center_y - 15; } public double getX(orbitPosition op) { return center_x + 7 + radiuses[op.orbit] * Math.Cos(alfas[op.orbit] * op.position); } public double getY(orbitPosition op) { return center_y + 7 + radiuses[op.orbit] * Math.Sin(alfas[op.orbit] * op.position); } } class VaultClass // Класс для хранилища { int numRows; int nullX; int nullY; int offsetX = MainWindow.dataSizeX + 2; int offsetY = MainWindow.dataSizeY + 2; public Data[] vault; public bool[] availableVault; public VaultClass(int size) { vault = new Data[size]; for (int i = 0; i < vault.Length; i++) { vault[i] = null; } availableVault = new bool[size]; for (int i = 0; i < availableVault.Length; i++) { availableVault[i] = true; } numRows = (int)Math.Ceiling(Math.Sqrt(size)); nullX = -(offsetX * numRows - 2) / 2; nullY = (offsetY * numRows - 2) / 2; } public int? Add(Data data) { for (int i = 0; i < availableVault.Length; i++) { if (availableVault[i] == true) { availableVault[i] = false; vault[i] = data; return i; } } return null; } public int? Add() { for (int i = 0; i < availableVault.Length; i++) { if (availableVault[i] == true) { availableVault[i] = false; return i; } } return null; } public Data get(string name) { for (int i = 0; i < vault.Length; i++) { if (vault[i].Name == name) { return vault[i]; } } return null; } public void delete(string name) { for (int i = 0; i < vault.Length; i++) { if (vault[i] != null && vault[i].Name == name) { availableVault[i] = true; vault[i] = null; } } } public int getX(int i) { return nullX + (i % numRows) * offsetX; } public int getY(int i) { return nullY - (i / numRows) * offsetY; } } /// /// Логика взаимодействия для MainWindow.xaml /// public partial class MainWindow : Window { static int center_x = 350; // Координаты центра static int center_y = 350; // Координаты центра public static int dataSizeX = 9; public static int dataSizeY = 9; public static int processesSizeX = 23; public static int processesSizeY = 23; static int numCores; // Количество ядер в системе static int interval; // Интервал времени для оценки работы процессов static double visualisationSpeed; static VaultClass Vault; // Хранилище Processes[] Cores; // Ядра static double V = 0.5; static double[] alfa; static double[] alfaV; static DispatcherTimer dispatcherTimer; static List static Queue static Stack static long counter; static int speed = 10; static double getX(double x) { return center_x + x; } static double getY(double y) { return center_y - y; } public MainWindow() { InitializeComponent(); } public void Visualisation_start(object sender, RoutedEventArgs e) { Base.Children.Clear(); counter = 0; if (dispatcherTimer != null) dispatcherTimer.Stop(); string tb1 = textBox1.Text.Trim(); if (File.Exists(tb1)) { prosessColors = new Stack prosessColors.Push(Colors.Brown); prosessColors.Push(Colors.Green); prosessColors.Push(Colors.Purple); prosessColors.Push(Colors.Red); prosessColors.Push(Colors.Yellow); prosessColors.Push(Colors.Thistle); prosessColors.Push(Colors.Teal); prosessColors.Push(Colors.SandyBrown); prosessColors.Push(Colors.Violet); prosessColors.Push(Colors.PowderBlue); prosessColors.Push(Colors.Olive); prosessColors.Push(Colors.Moccasin); prosessColors.Push(Colors.ForestGreen); prosessColors.Push(Colors.LightSalmon); prosessColors.Push(Colors.Gold); string tb2 = textBox2.Text.Trim(); if (tb2 != "") { interval = Convert.ToInt32(tb2); } string tb3 = textBox3.Text.Trim(); if (tb3 != "") { visualisationSpeed = Convert.ToDouble(tb3); } StreamReader fin = new StreamReader(tb1); numCores = Convert.ToInt32(fin.ReadLine()); alfa = new double[numCores]; for (int i = 0; i < alfa.Length; i++) { alfa[i] = 0; } alfaV = new double[numCores]; for (int i = 0; i < alfaV.Length; i++) { alfaV[i] = V / (100 + 50 * i); } Cores = new Processes[numCores]; for (int i = 0; i < alfaV.Length; i++) { Cores[i] = null; } flyingData = new List commands = new Queue Queue //int vaultSize; int N = Convert.ToInt32(fin.ReadLine()); for (int i = 0; i < N; i++) { baseVaultData.Enqueue(fin.ReadLine()); } int vaultSize = N; int vaultMaxSize = N; while (!fin.EndOfStream) { string[] readData = fin.ReadLine().Trim().Split('|'); commands.Enqueue(readData); switch (readData[1]) { case "da": vaultMaxSize++; if (vaultMaxSize > vaultSize) vaultSize = vaultMaxSize; break; case "pw": vaultMaxSize++; if (vaultMaxSize > vaultSize) vaultSize = vaultMaxSize; break; case "dd": vaultMaxSize--; break; } } fin.Close(); Vault = new VaultClass(vaultSize); // Создаем хранилище for (int i = 0; i < numCores; i++) { Ellipse myEllipse = new Ellipse(); myEllipse.StrokeThickness = 1; myEllipse.Stroke = Brushes.Black; myEllipse.Width = 201 + 100 * i; myEllipse.Height = 201 + 100 * i; Base.Children.Add(myEllipse); Canvas.SetLeft(myEllipse, getX(-100 - 50 * i)); Canvas.SetTop(myEllipse, getY(100 + 50 * i)); } for (int i = 0; i < N; i++) { string dataName = baseVaultData.Dequeue(); // Считываем имена данных Ellipse myEllipse = new Ellipse(); SolidColorBrush mySolidColorBrush = new SolidColorBrush(); mySolidColorBrush.Color = Colors.White; myEllipse.Fill = mySolidColorBrush; myEllipse.StrokeThickness = 1.5; myEllipse.Stroke = Brushes.Black; myEllipse.Width = 1; myEllipse.Height = 1; Data myEllipseData = new Data(); myEllipseData.Name = dataName; myEllipseData.myEllipse = myEllipse; int position = (int)Vault.Add(myEllipseData); Base.Children.Add(Vault.vault[position].myEllipse); Canvas.SetLeft(Vault.vault[position].myEllipse, getX(Vault.getX(position))); Canvas.SetTop(Vault.vault[position].myEllipse, getY(Vault.getY(position))); DoubleAnimation widthAnimation = new DoubleAnimation(); widthAnimation.To = dataSizeX; widthAnimation.Duration = TimeSpan.FromSeconds(1); MainWindow.Vault.vault[position].myEllipse.BeginAnimation(Ellipse.WidthProperty, widthAnimation); DoubleAnimation heightAnimation = new DoubleAnimation(); |
Литература по психологии,классичес Альдебаран-крупнейшая электронная библиотека on-line- художественная, учебная и техническая литература и книги различных жанров:... | Литература чувашская литература Чувашский государственного университет имени И. Н. Ульянова по специальности русский язык и литература | ||
“ Литература + литература” Идея проведения данного урока взята из газеты “Литература” (приложение к газете “Первое сентября”,№13 за 1998 год, страница 1) | Программа по формированию навыков безопасного поведения на дорогах... Литература и история. Литература как искусство слова. Литература и другие виды искусства | ||
Программа по формированию навыков безопасного поведения на дорогах... Литература и история. Литература как искусство слова. Литература и другие виды искусства | Литература 1 Русская литература. Мультимедийная энциклопедия. 8-11... Математика. Учебное электронное издание. 5-11. Новые возможности для усвоения математики | ||
ЛИТЕРАТУРА К КУРСУ "ФИЛОСОФИЯ" ОСНОВНАЯ ЛИТЕРАТУРА и ДОПОЛНИТЕЛЬНАЯ ЛИТЕРАТУРА | "Литература народов России" (Кабардино-черкесская литература) ... | ||
Тема урока. Основное содержание Введение. Судьба России в XX веке. Основные направления, темы и проблемы русской литературы XX века. Русская советская литература;... | Программа по формированию навыков безопасного поведения на дорогах... Литература и жизнь. Литература как искусство слова. Вымысел. Литература как учебный предмет | ||
Литература Тема: Человек и история в поэме А. С. Пушкина «Медный всадник» Учебно-методическое обеспечение: учебник 10 класс литература Коровина В. И. Литература. 10 класс, Москва Просвещение. 1часть. 2012... | Рабочая программа по литературе составлена на основе программы "Литература.... Литература. 5-11 класс" под ред. Г. И. Беленького. Реализуется в учебнике "Литература. 11 класс: Учебник для общеобразовательных... | ||
Список бесплатных электронных библиотек Альдебаран крупнейшая электронная библиотека on-line художественная, учебная и техническая литература и книги различных жанров: детективы,... | Родная литература Рабочая программа по литературе для 5 класса к учебнику «Родная литература» (Ана литература) 5 класс. Авторы: (Суюнчев А., Азаматова... | ||
Рабочая программа учебного предмета: «Литература» «Литература» под редакцией В. Я. Коровиной (Программы для общеобразовательных учреждений. Литература. 5-11 кл. Авторы: В. Я. Коровина,... | Рабочая программа педагога по курсу «Литература» Литература 5 – 11 классы/ под редакцией Г. И. Беленького. – 4-е изд., перереб. – М.: Мнемозина, 2009. – 110с и ориентирована на использование... |