Пример #1
0
        /// <summary>
        /// Кнопка "Обратиться к странице"
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            bool isPageFault           = false;
            int  pageNumberInPageTable = Convert.ToInt32(textBoxNumberInPageTable.Text);

            Process process = os.GetCheckedProcess(Convert.ToInt32(textBoxPID.Text));
            int     startAvailableMemory = process.AvailableMemory;

            try
            {
                process.AccessPage(pageNumberInPageTable, Hardware);
            }
            catch (PageFault pageFault)
            {
                isPageFault = true;
                os.PageFaultExeptionHandler(os.GetCheckedProcess(Convert.ToInt32(textBoxPID.Text)), pageFault.PageFaultNumber);
            }
            catch (Exception e1)
            {
                MessageBox.Show(e1.Message, "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }


            textBoxListing.Clear();

            if (os.IsProcessKilled(Convert.ToInt32(textBoxPID.Text)))
            {
                textBoxListing.Text = "Процесс был убит";
                dataGridView2.Rows.Clear();
                int pid = Convert.ToInt32(textBoxPID.Text);
                for (int i = 0; i < dataGridView1.Rows.Count; i++)
                {
                    if ((int)dataGridView1.Rows[i].Cells[1].Value == pid)
                    {
                        dataGridView1.Rows.RemoveAt(i);
                        dataGridView1.Update();
                        break;
                    }
                }
                textBoxPID.Clear();
                textBoxTableAdress.Clear();
                textBoxPageTableEntry.Clear();
                textBoxNumberInPageTable.Clear();
                textBoxPIDtoStart.Clear();
            }
            else
            {
                int numberOfNewlySelectedPages = (process.AvailableMemory - startAvailableMemory) / os.PageSize;
                int numberOfReplacedPages;
                if (numberOfNewlySelectedPages == 0)
                {
                    numberOfReplacedPages = 1;
                }
                else
                {
                    numberOfReplacedPages = 0;
                }

                UpdateDataGridView2();
                TextBoxPageStatusUpdate(process, Convert.ToInt32(textBoxNumberInPageTable.Text));
                textBoxPageTableEntry.Text = os.GetBitArrayStringFormat(process.PageTable.PageTableEntries[Convert.ToInt32(textBoxNumberInPageTable.Text)].Entry);

                textBoxListing.Text = "Обработка ошибки отсутствия страницы " + isPageFault.ToString() + "\r\n";
                if (isPageFault)
                {
                    textBoxListing.Text += "Выделено новых страниц " + numberOfNewlySelectedPages + "\r\n" +
                                           "Замещено страниц " + numberOfReplacedPages + "\r\n";
                }

                textBoxListing.Text += "\r\nИзмененные данные процесса находятся тут: " + os.CurrentDirectoryName + "\\" + process.FileName;
            }
        }