Управление процессами в ос windows
![]()
|
Управление процессами в ОС WindowsВ современных ОС пользователям предлагается несколько типов параллельной работы, основными из которых являются процессы и потоки. Процессы – это программы на этапе выполнения. В ОС типа Windows создание процесса осуществляется с помощью вызова функции Win32 API, описываемой на языке Си следующим образом. BOOL CreateProcess ( PCTSTR pszApplicationName, //имя исполняемого файла PTSTR pszCommandLine, //командная строка PSECURITY_ATTRIBUTES psaProcess, //атрибуты защиты процесса PSECURITY_ATTRIBUTES psaThread, //атрибуты защиты потока BOOL bInheritHandles, //наследование описателей DWORD fwdCreate, //флаги процесса PVOID pvEnvironment, //переменные окружения PCTSTR pszCurDir, //текущий каталог PSTARTUPINFO psiStrartInfo, //начальная информация при создании процесса PPROCESS_INFORMATION ppiProcInfo);//описатель процесса Функция CreateProcess возвращает значение TRUE, если системе удастся создать процесс и начальный поток, при этом созданному объекту ядра будет присвоен уникальный идентификатор. Процесс в Windows можно завершить с помощью вызовов функций Win32 API под названием ExitProcess и TerminateProcess, описанные следующим образом: VOID ExitProcess ( UINT fuExitCode);// код завершения процесса Эта функция не возвращает значения. VOID TerminateProcess ( HANDLE hProcess, // описатель завершаемого процесса UINT fuExitCode); // код завершения процесса Эта функция также не возвращает значения. Она отличается от ExitProcess тем, что ее может вызвать любой процесс и поток. Обе функции использовать нежелательно, поскольку процесс заканчивается, когда завершают работу все его потоки. Следующий программный код создаст новый процесс и запустит калькулятор. #include void WinMain () { STARTUPINFO start = { sizeof (start) }; PROCESS_INFORMATION procinfo; TCHAR CommandLine[] = TEXT (“CALC”); CreateProcess (NULL, CommandLine, NULL, NULL, FALSE, 0, NULL, NULL, &start, &procinfo); } Варианты заданий Вариант №1 Разработать две программы. Первая вычисляет сумму и произведение чисел от L до U, где L – это нижняя граница диапазона, U – верхняя граница диапазона, границы вводятся пользователем, и выводит полученные значения на экран. Вторая программа запускает первую в качестве вновь созданного процесса. Вариант №2 Разработать две программы. Первая вычисляет число Фибоначчи по номеру, введенному пользователю, и формуле Fi = Fi–1 + Fi–2, F0 = F1= 1 и выводит его на экран. Вторая программа запускает первую в качестве вновь созданного процесса. Вариант №3 Разработать две программы. Первая принимает от пользователя строку, хранящую знаковое целое число, и выводит на экран строковый эквивалент этого числа прописью (например, ввод «-1211» должен приводить к выводу «минус тысяча двести одиннадцать»). Вторая программа запускает первую в качестве вновь созданного процесса. Вариант №4 Разработать две программы. Первая принимает от пользователя строку, хранящую число со знаком и плавающей точкой, и выводит на экран строковый эквивалент этого числа прописью (например, ввод «-12.11» должен приводить к выводу «минус двенадцать целых одиннадцать сотых»). Вторая программа запускает первую в качестве вновь созданного процесса. Вариант №5 Разработать две программы. Первая принимает от пользователя две строки. Далее, если обе строки хранят целые числа со знаком, то на экран выводится сумма чисел, в противном случае – конкатенация двух введенных строк. Вторая программа запускает первую в качестве вновь созданного процесса. Вариант №6 Разработать две программы. Первая принимает от пользователя две прямоугольных матрицы, а затем выводит на экран их сумму и произведение. Вторая программа запускает первую в качестве вновь созданного процесса. Вариант №7 Разработать две программы. Первая принимает от пользователя одномерный целочисленный массив, упорядочивает его по возрастанию любым из так называемых «улучшенных алгоритмов» сортировки массивов и выводит на экран. Вторая программа запускает первую в качестве вновь созданного процесса. Вариант №8 Разработать две программы. Первая принимает от пользователя одномерный массив чисел с плавающей точкой, упорядочивает его по убыванию любым из так называемых «улучшенных алгоритмов» сортировки массивов и выводит на экран. Вторая программа запускает первую в качестве вновь созданного процесса. Вариант №9 Разработать две программы. Первая принимает от пользователя одномерный массив строк, упорядочивает его любым из так называемых «улучшенных алгоритмов» сортировки массивов и выводит на экран. Вторая программа запускает первую в качестве вновь созданного процесса. Вариант №10 Разработать две программы. Первая принимает от пользователя квадратную матрицу, вычисляет сумму элементов, лежащих на главной и побочной диагоналях, и выводит на экран. Вторая программа запускает первую в качестве вновь созданного процесса. Вариант №11 Разработать две программы. Первая принимает от пользователя квадратную матрицу, вычисляет сумму элементов, не лежащих на главной и побочной диагоналях, и выводит на экран. Вторая программа запускает первую в качестве вновь созданного процесса. Вариант №12 Разработать две программы. Первая принимает от пользователя две даты – строки вида ЦЦ.ЦЦ.ЦЦЦЦ, где Ц – это любая цифра из диапазона [0-9]. Далее она вычисляет полное количество дней, прошедших между двумя введенными датами, и выводит его на экран. Вторая программа запускает первую в качестве вновь созданного процесса. Вариант №13 Разработать две программы. Первая принимает от пользователя два значения времени – строки вида ЦЦ.ЦЦ.ЦЦ, где Ц – это любая цифра из диапазона [0-9]. Далее она вычисляет полное количество секунд, прошедших между двумя значениями времени, и выводит его на экран. Вторая программа запускает первую в качестве вновь созданного процесса. Вариант №14 Разработать две программы. Первая принимает от пользователя две строки, осуществляет поиск вхождения второй строки в первую любым известным методом, кроме прямого, и выводит на экран значение индекса элемента первой строки, с которого началось совпадение, или -1 в противном случае. Вторая программа запускает первую в качестве вновь созданного процесса. Вариант №15 Разработать две программы. Первая принимает от пользователя две строки, осуществляет поиск количества вхождений второй строки в первую любым известным методом, кроме прямого, и выводит на экран полученное значение. Вторая программа запускает первую в качестве вновь созданного процесса. Вариант №16 Разработать две программы. Первая принимает от пользователя дату – строку вида ЦЦ.ЦЦ.ЦЦЦЦ, где Ц – это любая цифра из диапазона [0-9,] и выводит на экран число и месяц прописью, а за последними четырьмя – слово «года» (например, ввод «29.02.2008» приводит к выводу «Двадцать девятое февраля 2008 года»). Вторая программа запускает первую в качестве вновь созданного процесса. Вариант №17 Разработать две программы. Первая принимает от пользователя значение времени – строку вида ЦЦ.ЦЦ.ЦЦ, где Ц – это любая цифра из диапазона [0-9] и выводит на экран значение часов минут и секунд прописью (например, ввод «12.01.20» приводит к выводу «двенадцать часов одна минута двадцать секунд»). Вторая программа запускает первую в качестве вновь созданного процесса. Вариант №18 Разработать две программы. Первая принимает от пользователя строку из нулей и единиц – «битовую строку», инвертирует ее, выводит на экран значение инвертированной строки, переводит ее в число в десятичном формате и выводит полученное число на экран. Вторая программа запускает первую в качестве вновь созданного процесса. Вариант №19 Разработать две программы. Первая принимает от пользователя строку из нулей и единиц – «битовую строку», осуществляет ее реверс, когда нули заменяются на единицы, а единицы на нули. Полученная строка выводится на экран, затем программа переводит ее в число в десятичном формате и выводит полученное число на экран. Вторая программа запускает первую в качестве вновь созданного процесса. Вариант №20 Разработать две программы. Первая вычисляет факториал числа, введенного пользователем, по формуле N! = N * (N – 1)!, где 0 != 1, и выводит его на экран. Вторая программа запускает первую в качестве вновь созданного процесса. Вариант №21 Разработать две программы. Первая принимает от пользователя квадратную матрицу, осуществляет обход только крайних ее элементов, вычисляет их сумму, и выводит на экран. Вторая программа запускает первую в качестве вновь созданного процесса. Вариант №22 Разработать две программы. Первая принимает от пользователя элементы целочисленного вектора, а также значение ключа для поиска, затем осуществляет поиск элемента по ключу любым известным методом, кроме прямого, и выводит результат на экран. Вторая программа запускает первую в качестве вновь созданного процесса. Вариант №23 Разработать две программы. Первая принимает от пользователя строку символов, затем осуществляет замену всех латинских букв на их аналоги из кириллицы и выводит результат на экран. Вторая программа запускает первую в качестве вновь созданного процесса. Вариант №24 Разработать две программы. Первая принимает от пользователя строку символов, затем осуществляет смену регистра всех букв и выводит результат на экран. Вторая программа запускает первую в качестве вновь созданного процесса. Вариант №25 Разработать две программы. Первая принимает от пользователя беззнаковое целое число. Если оно является степенью двойки, то на экран выводится показатель степени, и сообщение «не является степенью двойки» в противном случае. Вторая программа запускает первую в качестве вновь созданного процесса. |