Организация памяти. Системное программирование: процессы и потоки

Определение сущности памяти компьютера – совокупности устройств для хранения или работы с информацией. Анализ функций операционной системы: управления оборудованием и обеспечение необходимым интерфейсом для взаимодействия с программными средствами.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 14.12.2015
Размер файла 1,3 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Министерство транспорта Российской Федерации

Федеральное агентство железнодорожного транспорта

Федеральное государственное бюджетное образовательное учреждение

высшего профессионального образования

«Дальневосточный государственный университет путей и сообщения»

Естественно-научный институт

Кафедра «Вычислительная техника и компьютерная графика»

Курсовая работа

Организация памяти. Системное программирование: процессы и потоки

КР.09.03.03.ОС.00.15.000-923

Исполнитель:

Студент: А.И. Титов

Руководитель:

Доцент: Т.И. Балалаева

Хабаровск 2014

Содержание

Введение

1. Типы памяти и адресные пространства

1.1 Физическая память

1.2 Логическая память

1.3 Связывание адресов

2. Функции и схемы управления памятью

2.1 Функции ОС для управления памятью

2.2 Простейшие схемы управления памятью

2.2.1 Схема с фиксированными разделами

2.2.2 Оверлейная структура

2.2.4 Схема с переменными разделами

2.3 Страничная память

2.4 Сегментная и сегментно-страничная организация памяти

3. Системное программирование. Процессы и потоки

Заключение

Список использованных источников

Введение

Операционная система (ОС) имеет множество функций. Основные это, конечно, управление оборудованием и обеспечение пользователя необходимым интерфейсом для взаимодействия с программными или аппаратными средствами. Помимо этого, ОС занимается организацией памяти компьютера. Память компьютера - это в первую очередь совокупность устройств для хранения или работы с информацией. Существует несколько основных классификаций уровней памяти и её организации в ЭВМ. Как с физической точки зрения, так и с логической. Данная работа проделана, чтобы разобраться со всеми аспектами работы операционной системы, связанной с памятью.

1. Типы памяти и адресные пространства

1.1 Физическая память

Запоминающие устройства компьютера разделяют, как минимум, на два уровня: основную (главную, оперативную, физическую) и вторичную (внешнюю) память.

Основная память представляет собой упорядоченный массив однобайтовых ячеек, каждая из которых имеет свой уникальный адрес (номер). Процессор извлекает команду из основной памяти, декодирует и выполняет ее. Для выполнения команды могут потребоваться обращения еще к нескольким ячейкам основной памяти. Обычно основная память изготавливается с применением полупроводниковых технологий и теряет свое содержимое при отключении питания.

Вторичную память (это главным образом диски) также можно рассматривать как одномерное линейное адресное пространство, состоящее из последовательности байтов. В отличие от оперативной памяти, она является энергонезависимой, имеет существенно большую емкость и используется в качестве расширения основной памяти.

Также память можно представить в виде простой иерархии (рисунок 1)

Рисунок 1 - Простая иерархия памяти в ЭВМ

Многоуровневую схему используют следующим образом. Информация, которая находится в памяти верхнего уровня, обычно хранится также на уровнях с большими номерами. Если процессор не обнаруживает нужную информацию на i-м уровне, он начинает искать ее на следующих уровнях. Когда нужная информация найдена, она переносится в более быстрые уровни. компьютер программный интерфейс

1.2 Логическая память

Аппаратная реализация памяти не отражает её действительное расположение в компьютере. Каждый процесс состоит из участков памяти определенного назначения - сегментов. Сегменты одного процесса редко располагаются последовательно. Обычно они распределены по области памяти и выполняют различные задачи (рисунок 2).

Рисунок 2 - Распределение сегментов процессов по пространству памяти

Большинство современных ОС поддерживают сегментную организацию памяти. В некоторых архитектурах (Intel, например) сегментация поддерживается оборудованием.

Адреса, к которым обращается процесс, таким образом, отличаются от адресов, реально существующих в оперативной памяти. В каждом конкретном случае используемые программой адреса могут быть представлены различными способами. Например, адреса в исходных текстах обычно символические. Компилятор связывает эти символические адреса с перемещаемыми адресами (такими, как n байт от начала модуля). Подобный адрес, сгенерированный программой, обычно называют логическим (в системах с виртуальной памятью он часто называется виртуальным) адресом. Совокупность всех логических адресов называется логическим (виртуальным) адресным пространством.

1.3 Связывание адресов

Логические и физические адресные пространства ни по организации, ни по размеру не соответствуют друг другу. Максимальный размер логического адресного пространства обычно определяется разрядностью процессора (например, 232) и в современных системах значительно превышает размер физического адресного пространства. Следовательно, процессор и ОС должны быть способны отобразить ссылки в коде программы в реальные физические адреса, соответствующие текущему расположению программы в основной памяти. Такое отображение адресов называют трансляцией (привязкой) адреса или связыванием адресов.

Связывание логического адреса, порожденного оператором программы, с физическим должно быть осуществлено до начала выполнения оператора или в момент его выполнения. Таким образом, привязка инструкций и данных к памяти в принципе может быть сделана на следующих этапах:

- Этап компиляции (Compile time). Когда на стадии компиляции известно точное место размещения процесса в памяти, тогда непосредственно генерируются физические адреса. При изменении стартового адреса программы необходимо перекомпилировать ее код. В качестве примера можно привести программы MS-DOS, которые связывают ее с физическими адресами на стадии компиляции.

- Этап загрузки (Load time). Если информация о размещении программы на стадии компиляции отсутствует, компилятор генерирует перемещаемый код. В этом случае окончательное связывание откладывается до момента загрузки. Если стартовый адрес меняется, нужно всего лишь перезагрузить код с учетом измененной величины.

- Этап выполнения (Execution time). Если процесс может быть перемещен во время выполнения из одной области памяти в другую, связывание откладывается до стадии выполнения. Здесь желательно наличие специализированного оборудования, например регистров перемещения. Их значение прибавляется к каждому адресу, сгенерированному процессом. Большинство современных ОС осуществляет трансляцию адресов на этапе выполнения, используя для этого специальный аппаратный механизм.

2. Функции и схемы управления памятью

2.1 Функции ОС для управления памятью

Чтобы обеспечить эффективный контроль использования памяти, ОС должна выполнять следующие функции:

- отображение адресного пространства процесса на конкретные области физической памяти;

- распределение памяти между конкурирующими процессами;

- контроль доступа к адресным пространствам процессов;

- выгрузка процессов (целиком или частично) во внешнюю память, когда в оперативной памяти недостаточно места;

- учет свободной и занятой памяти.

2.2 Простейшие схемы управления памятью

Первые ОС применяли очень простые методы управления памятью. Вначале каждый процесс пользователя должен был полностью поместиться в основной памяти, занимать непрерывную область памяти, а система принимала к обслуживанию дополнительные пользовательские процессы до тех пор, пока все они одновременно помещались в основной памяти. Затем появился "простой свопинг" (система по-прежнему размещает каждый процесс в основной памяти целиком, но иногда на основании некоторого критерия целиком сбрасывает образ некоторого процесса из основной памяти во внешнюю и заменяет его в основной памяти образом другого процесса). Такого рода схемы имеют не только историческую ценность. В настоящее время они применяются в учебных и научно-исследовательских модельных ОС, а также в ОС для встроенных компьютеров.

2.2.1 Схема с фиксированными разделами

Самым простым способом управления оперативной памятью является ее предварительное (обычно на этапе генерации или в момент загрузки системы) разбиение на несколько разделов фиксированной величины. Поступающие процессы помещаются в тот или иной раздел. При этом происходит условное разбиение физического адресного пространства. Связывание логических и физических адресов процесса происходит на этапе его загрузки в конкретный раздел, иногда - на этапе компиляции.

Эта схема была реализована в IBM OS/360 (MFT), DEC RSX-11 и ряде других систем.

Подсистема управления памятью оценивает размер поступившего процесса, выбирает подходящий для него раздел, осуществляет загрузку процесса в этот раздел и настройку адресов.

Каждый раздел может иметь собственную очередь разделов, также может существовать и глобальная очередь (рисунок 3).

Рисунок 3 - Схема фиксированных разделов с различными очередями процессов

Очевидный недостаток этой схемы - число одновременно выполняемых процессов ограничено числом разделов.

Другим существенным недостатком является то, что предлагаемая схема сильно страдает от внутренней фрагментации - потери части памяти, выделенной процессу, но не используемой им. Фрагментация возникает потому, что процесс не полностью занимает выделенный ему раздел или потому, что некоторые разделы слишком малы для выполняемых пользовательских программ.

2.2.2 Оверлейная структура

Потребность в таком способе загрузки появляется, если логическое адресное пространство системы мало, например, 1 Мбайт (MS-DOS) или даже всего 64 Кбайта (PDP-11), а программа относительно велика. На рисунке 4 показан принцип действия такой структуры. Можно поочередно загружать в память ветви: D-A, D-V-O, D-V-S.

Рисунок 4 - Оверлейная структура памяти

Коды ветвей оверлейной структуры программы находятся на диске как абсолютные образы памяти и считываются драйвером оверлеев при необходимости. Для описания оверлейной структуры обычно используется специальный несложный язык (overlay description language). Совокупность файлов исполняемой программы дополняется файлом (обычно с расширением .odl), описывающим дерево вызовов внутри программы.

Тщательное проектирование оверлейной структуры отнимает много времени и требует знания устройства программы, ее кода, данных и языка описания оверлейной структуры. По этой причине применение оверлеев ограничено компьютерами с небольшим логическим адресным пространством.

2.2.3 Динамическое распределение. Свопинг

Имея дело с пакетными системами, можно обходиться фиксированными разделами и не использовать ничего более сложного. В системах с разделением времени возможна ситуация, когда память не в состоянии содержать все пользовательские процессы. Приходится прибегать к свопингу (swapping) - перемещению процессов из главной памяти на диск и обратно целиком. Частичная выгрузка процессов на диск осуществляется в системах со страничной организацией (paging) и будет рассмотрена ниже.

Выгруженный процесс может быть возвращен в то же самое адресное пространство или в другое. Это ограничение диктуется методом связывания. Для схемы связывания на этапе выполнения можно загрузить процесс в другое место памяти.

Свопинг не имеет непосредственного отношения к управлению памятью, скорее он связан с подсистемой планирования процессов. Очевидно, что свопинг увеличивает время переключения контекста. Время выгрузки может быть сокращено за счет организации специально отведенного пространства на диске (раздел для свопинга). Обмен с диском при этом осуществляется блоками большего размера, то есть быстрее, чем через стандартную файловую систему. Во многих версиях Unix свопинг начинает работать только тогда, когда возникает необходимость в снижении загрузки системы.

2.2.4 Схема с переменными разделами

В принципе, система свопинга может базироваться на фиксированных разделах. Более эффективной, однако, представляется схема динамического распределения или схема с переменными разделами, которая может использоваться и в тех случаях, когда все процессы целиком помещаются в памяти, то есть в отсутствие свопинга. В этом случае вначале вся память свободна и не разделена заранее на разделы. Вновь поступающей задаче выделяется строго необходимое количество памяти, не более. После выгрузки процесса память временно освобождается. По истечении некоторого времени память представляет собой переменное число разделов разного размера (рисунок 5). Смежные свободные участки могут быть объединены.

Рисунок 5 - Динамика распределения памяти между процессами

Наиболее распространены три стратегии расположения процесса.

- Стратегия первого подходящего (First fit). Процесс помещается в первый подходящий по размеру раздел.

- Стратегия наиболее подходящего (Best fit). Процесс помещается в тот раздел, где после его загрузки останется меньше всего свободного места.

- Стратегия наименее подходящего (Worst fit). При помещении в самый большой раздел в нем остается достаточно места для возможного размещения еще одного процесса.

Моделирование показало, что доля полезно используемой памяти в первых двух случаях больше, при этом первый способ несколько быстрее.

Этот метод более гибок по сравнению с методом фиксированных разделов, однако ему присуща внешняя фрагментация - наличие большого числа участков неиспользуемой памяти, не выделенной ни одному процессу. Выбор стратегии размещения процесса между первым подходящим и наиболее подходящим слабо влияет на величину фрагментации.

Одно из решений проблемы внешней фрагментации - организовать сжатие, то есть перемещение всех занятых (свободных) участков в сторону возрастания (убывания) адресов, так, чтобы вся свободная память образовала непрерывную область. Этот метод иногда называют схемой с перемещаемыми разделами. В идеале фрагментация после сжатия должна отсутствовать. Сжатие, однако, является дорогостоящей процедурой, алгоритм выбора оптимальной стратегии сжатия очень труден и, как правило, сжатие осуществляется в комбинации с выгрузкой и загрузкой по другим адресам.

2.3 Страничная память

Описанные выше схемы недостаточно эффективно используют память, поэтому в современных схемах управления памятью не принято размещать процесс в оперативной памяти одним непрерывным блоком.

В самом простом и наиболее распространенном случае страничной организации памяти (или paging) как логическое адресное пространство, так и физическое представляются состоящими из наборов блоков или страниц одинакового размера. При этом образуются логические страницы (page), а соответствующие единицы в физической памяти называют физическими страницами или страничными кадрами (page frames). Страницы (и страничные кадры) имеют фиксированную длину, обычно являющуюся степенью числа 2, и не могут перекрываться. Каждый кадр содержит одну страницу данных. При такой организации внешняя фрагментация отсутствует, а потери из-за внутренней фрагментации, поскольку процесс занимает целое число страниц, ограничены частью последней страницы процесса.

Логический адрес в страничной системе - упорядоченная пара (p,d), где p - номер страницы в виртуальной памяти, а d - смещение в рамках страницы p, на которой размещается адресуемый элемент. Разбиение адресного пространства на страницы осуществляется вычислительной системой незаметно для программиста. Поэтому адрес является двумерным лишь с точки зрения операционной системы, а с точки зрения программиста адресное пространство процесса остается линейным.

Описываемая схема позволяет загрузить процесс, даже если нет непрерывной области кадров, достаточной для размещения процесса целиком. Но одного базового регистра для осуществления трансляции адреса в данной схеме недостаточно. Система отображения логических адресов в физические сводится к системе отображения логических страниц в физические и представляет собой таблицу страниц, которая хранится в оперативной памяти. Иногда говорят, что таблица страниц - это кусочно-линейная функция отображения, заданная в табличном виде. Примерная визуализация страничной памяти приведена на рисунке 6.

Рисунок 6 - Физический и виртуальный адреса в страничной памяти

2.4 Сегментная и сегментно-страничная организация памяти

Существуют две другие схемы организации управления памятью: сегментная и сегментно-страничная. При сегментной организации виртуальный адрес является двумерным как для программиста, так и для операционной системы, и состоит из двух полей - номера сегмента и смещения внутри сегмента. В отличие от страничной организации, где линейный адрес преобразован в двумерный операционной системой для удобства отображения, здесь двумерность адреса является следствием представления пользователя о процессе не в виде линейного массива байтов, а как набор сегментов переменного размера.

Логическое адресное пространство - набор сегментов. Каждый сегмент имеет имя, размер и другие параметры (уровень привилегий, разрешенные виды обращений, флаги присутствия). В отличие от страничной схемы, где пользователь задает только один адрес, который разбивается на номер страницы и смещение прозрачным для программиста образом, в сегментной схеме пользователь специфицирует каждый адрес двумя величинами: именем сегмента и смещением.

Каждый сегмент - линейная последовательность адресов, начинающаяся с 0. Максимальный размер сегмента определяется разрядностью процессора (при 32-разрядной адресации это 232 байт или 4 Гбайт). Размер сегмента может меняться динамически (например, сегмент стека). В элементе таблицы сегментов помимо физического адреса начала сегмента обычно содержится и длина сегмента. Если размер смещения в виртуальном адресе выходит за пределы размера сегмента, возникает исключительная ситуация.

В системах, где сегменты поддерживаются аппаратно, эти параметры обычно хранятся в таблице дескрипторов сегментов, а программа обращается к этим дескрипторам по номерам-селекторам. При этом в контекст каждого процесса входит набор сегментных регистров, содержащих селекторы текущих сегментов кода, стека, данных и т. д. и определяющих, какие сегменты будут использоваться при разных видах обращений к памяти. Это позволяет процессору уже на аппаратном уровне определять допустимость обращений к памяти, упрощая реализацию защиты информации от повреждения и несанкционированного доступа.

Аппаратная поддержка сегментов распространена мало (главным образом на процессорах Intel). В большинстве ОС сегментация реализуется на уровне, не зависящем от аппаратуры.

Хранить в памяти сегменты большого размера целиком так же неудобно, как и хранить процесс непрерывным блоком. Напрашивается идея разбиения сегментов на страницы. При сегментно-страничной организации памяти происходит двухуровневая трансляция виртуального адреса в физический. В этом случае логический адрес состоит из трех полей: номера сегмента логической памяти, номера страницы внутри сегмента и смещения внутри страницы. Соответственно, используются две таблицы отображения - таблица сегментов, связывающая номер сегмента с таблицей страниц, и отдельная таблица страниц для каждого сегмента.

Сегментно-страничная и страничная организация памяти позволяет легко организовать совместное использование одних и тех же данных и программного кода разными задачами. Для этого различные логические блоки памяти разных процессов отображают в один и тот же блок физической памяти, где размещается разделяемый фрагмент кода или данных.

3. Системное программирование. Процессы и потоки

Системное программирование (или программирование систем) -- подраздел программирования, заключающийся в работе над системным программным обеспечением.

Определение «системное» подчеркивает тот факт, что результаты этого вида программирования существенно меняют свойства и возможности вычислительной системы. В то же время бесспорным остаётся тот факт, что в определенной степени этот результат имеет место при применении любых программ, выполняемых в вычислительной системе. Поэтому между программированием «системным» и «несистемным» (прикладным программированием") нет четкой границы.

Вычислительная система имеет иерархическую структуру, которую можно представить в виде набора вложенных слоев, на внешнем из которых находятся прикладные программы, а на самом внутреннем -- аппаратура компьютера. Условная степень системности нарастает при программировании, затрагивающем все более внутренние уровни системы.

Одной из основных отличительных черт системного программирования по сравнению с прикладным заключается в том, что результатом последнего является выпуск программ для взаимодействия с пользователем (например, текстовый процессор). В то время как результатом системного программирования является выпуск программ для взаимодействия с аппаратным обеспечением (например, дефрагментация жёсткого диска), что подразумевает сильную зависимость таких программ от аппаратной части.

Приложению передается два числовых параметра. Приложение должно запустить несколько копий любого стандартного оконного приложения, входящего в поставку операционной системы. Для ОС семейства Windows это может быть, например, блокнот. Количество копий дочерних процессов задается первым числовым параметром. Второй числовой параметр должен содержать количество секунд, по истечению которых родительский процесс принудительно завершает работу дочерних процессов.

Теория и краткое описание

Основное предназначение процессов - представление операционной системе полного контроля над вычислительной системой и выполняемыми на ней задачами. Поскольку все прикладные программы представлены в виде набора исполняющихся процессов, то операционная система может выполнять различные действия по управлению ходом их выполнения, например, приостанавливать один процесс и предоставлять ресурсы другому, что дает возможность нескольким задачам работать поочередно в однопроцессорной системе. Такое последовательное исполнение нескольких процессов называется псевдопараллельностью. В то время как один из конкурирующих процессов выполняется, остальные ждут своей очереди.

Для выполнения задания используются специальные функции для открытия приложений и завершения работы приложений. Эти функции указаны в следующем пункте. Также задействованы простейшие функции ввода для задания параметров времени и количества открытых окон приложения «Блокнот».

Текст программы

#include <iostream>

#include <stdio.h>

#include <windows.h>

#include <tchar.h>

#include <QString>

using namespace std;

int main(int argc, char *argv[])

{

int num_process;

int process_live_time;

int x;

int t;

cout<<"vvedite collichestvi okon \n"; // Задаётся первый параметр - колличество окон

cin>>x;

cout<<"vvedite vremya gizni okon\n"; // задается второй параметр - время до принудительного закрытия окон

cin>>t;

if (argc < 3) { // должно быть не меньше трех параметров

num_process = x;

process_live_time = t;

}

else {

// параметры указанны в виде строки. нужно преобразовать в число.

num_process = atoi(argv[1]);

process_live_time = atoi(argv[2]);

}

QString target = "c:/WINDOWS/notepad.exe";

STARTUPINFO * si = new STARTUPINFO[num_process];

PROCESS_INFORMATION *pi = new PROCESS_INFORMATION[num_process];

for (int i=0; i<num_process; i++)

{

memset(&si[i], 0, sizeof(STARTUPINFO));

memset(&pi[i], 0, sizeof(PROCESS_INFORMATION));

si[i].cb = sizeof si;

CreateProcess(target.toStdWString().c_str(), 0, 0, FALSE, 0, 0, 0, 0, &si[i], &pi[i]);

}

Sleep(process_live_time*1000); // поток зависает на process_live_time секунд

for (int i=0; i<num_process; i++)

{

::PostThreadMessage(pi[i].dwThreadId, WM_QUIT, 0, 0);

WaitForSingleObject(pi[i].hProcess,INFINITE);

CloseHandle(pi[i].hProcess);

CloseHandle(pi[i].hThread);

}

cout << "Kill them all" << endl;

system("pause");

}

Результат

После старта программы открывается окно ввода данных. Здесь необходимо ввести параметры, где первая строка - это количество открываемых приложений, а вторая время работы приложений (рисунок 7).

Рисунок 7 - Работа программы

По истечении времени, введенном во второй строке программа завершает процессы и выдаёт сообщение об их закрытии (рисунок 8).

Рисунок 8 - Завершение работы окон

Создать приложение с 6 потоками для каждого из которых должны быть предусмотрены возможности управления: приостановка, смена приоритетов, возобновление, повторный запуск, завершение.

Теоретическая часть задания

Во многих задачах можно выделить ряд подзадач, каждую из которых возможно решить или независимо от других подзадач, или с их минимальной кооперацией. При этом подзадачи выполняются конкурентно (в однопроцессорной системе) или параллельно в многопроцессорной системе. В многопоточной модели каждая такая подзадача существует как индивидуальный поток выполнения внутри одного и того же процесса. При этом процесс делится на две части. Одна часть содержит ресурсы, используемые через всю программу, такие как программный код и глобальные данные. Другая содержит информацию, относящуюся к состоянию выполнения, например, программный счетчик и стек. Эта часть называется потоком.

Текст программы

#ifndef MAIN_WINDOW_H

#defineMAIN_WINDOW_H

#include <winsock2.h>

#include <QtGui/QtGui>

#include <QtWidgets/QLabel>

#include <QtWidgets/QWidget>

#include <QtWidgets/QPushButton>

#include <QtWidgets/QLineEdit>

#include <QtWidgets/QBoxLayout>

#include <QtWidgets/QGroupBox>

#include <QtWidgets/QFileDialog>

#include <QtWidgets/QMessageBox>

#include <QtWidgets/QTreeWidget>

#include <QtWidgets/QTreeWidgetItem>

#include <QtWidgets/QTextEdit>

#include <QtWidgets/QSplitter>

#include <QtWidgets/QComboBox>

#include <QtWidgets/QHeaderView>

#include <QtWidgets/QMainWindow>

#include <QtWidgets/QTabWidget>

#include <QtWidgets/QSpinBox>

#include <QtWidgets/QCheckBox>

#include <QtWidgets/QProgressBar>

#include <QtWidgets/QRadioButton>

static int max_time = 10000000;

class thread_t : public QThread

{

Q_OBJECT

size_t progress;

virtual void run()

{// это функция которая будет выполняться в отдельных потоках (паралельно с другими)

// каждая копия загрузит 1 ядро процессора на 100%

_end = pause = false;

for (int i=0; i<200; i++)

{

for (int j=1; j<max_time; j++) {// это просто вычесления чтобы чем то занять поток.

progress += progress*progress*10/j;

progress += progress*progress*10/j;

}

emit signalForProgressBar(i);//сигнал обновить прогрессБар. высылается всего 200 раз

if (_end) break;

while (pause) Sleep(10);

}

}

public:

bool _end, pause;

thread_t(QWidget *parent = 0)

: QThread(parent)

{

}

~thread_t()

{

if (isRunning())

wait();

}

signals:

void signalForProgressBar(int);

};

class box_wgt_t : public QGroupBox

{

Q_OBJECT

QProgressBar *bar = new QProgressBar(this);

QRadioButton *high_property = new QRadioButton(trUtf8("Высокий приоритет"),this);

QRadioButton *nomal_property = new QRadioButton(trUtf8("Обычный приоритет"),this);

QRadioButton *low_property = new QRadioButton(trUtf8("Низкий приоритет"),this);

QPushButton *pause_button = new QPushButton(trUtf8("Приостановить поток"), this);

QPushButton *resume_button = new QPushButton(trUtf8("Возобновить поток"), this);

QPushButton *start_button = new QPushButton(trUtf8("Перезапустить поток"), this);

QPushButton *stop_button = new QPushButton(trUtf8("Остановить поток"), this);

QGridLayout *lay = new QGridLayout(this);

thread_t *thread = 0;

public:

box_wgt_t(const char* name, QWidget *parent = 0)

: QGroupBox(trUtf8(name), parent)

{

bar->setMinimum(0);

bar->setMaximum(200);

lay->addWidget(bar, 0, 0, 1, 3);

lay->addWidget(start_button, 1, 0);

lay->addWidget(stop_button, 1, 1);

stop_button->setEnabled(false);

lay->addWidget(pause_button, 2, 0);

pause_button->setEnabled(false);

lay->addWidget(resume_button, 2, 1);

resume_button->setEnabled(false);

lay->addWidget(low_property, 3, 0);

lay->addWidget(nomal_property, 4, 0);

lay->addWidget(high_property, 5, 0);

connect(pause_button, SIGNAL(clicked()), this, SLOT(pause_thread()));

connect(resume_button, SIGNAL(clicked()), this, SLOT(resume_thread()));

connect(start_button, SIGNAL(clicked()), this, SLOT(start_thread()));

connect(stop_button, SIGNAL(clicked()), this, SLOT(stop_thread()));

connect(nomal_property, SIGNAL(clicked()), this, SLOT(priority_func()));

connect(low_property, SIGNAL(clicked()), this, SLOT(priority_func()));

connect(high_property, SIGNAL(clicked()), this, SLOT(priority_func()));

}

public slots:

void priority_func()

{

// Priority {

// IdlePriority,

// LowestPriority,

// LowPriority,

// NormalPriority,

// HighPriority,

// HighestPriority,

thread->setPriority(QThread::HighestPriority);

}

void pause_thread() {

thread->pause = true;

pause_button->setEnabled(false);

resume_button->setEnabled(true);

}

void resume_thread() {

thread->pause = false;

resume_button->setEnabled(false);

pause_button->setEnabled(true);

}

void start_thread() {

start_button->setEnabled(false);

stop_button->setEnabled(true);

thread = new thread_t(0);

connect(thread, SIGNAL(signalForProgressBar(int)), this, SLOT(set_progress(int)));

thread->start();

pause_button->setEnabled(true);

}

void stop_thread() {

thread->_end = true;

thread->pause = false;

thread->exit();

delete thread;

resume_button->setEnabled(false);

pause_button->setEnabled(false);

start_button->setEnabled(true);

stop_button->setEnabled(false);

}

void set_progress(int i) {

bar->setValue(i);

}

};

class main_wgt_t : public QWidget

{

Q_OBJECT

QGridLayout *lay = new QGridLayout(this);

box_wgt_t *thread1 = new box_wgt_t("Поток №1", this);

box_wgt_t *thread2 = new box_wgt_t("Поток №2", this);

box_wgt_t *thread3 = new box_wgt_t("Поток №3", this);

box_wgt_t *thread4 = new box_wgt_t("Поток №4", this);

box_wgt_t *thread5 = new box_wgt_t("Поток №5", this);

box_wgt_t *thread6 = new box_wgt_t("Поток №6", this);

public:

main_wgt_t(QWidget *parent = 0)

: QWidget(parent)

{

lay->setRowStretch(0,0);

lay->setColumnStretch(0,0);

lay->addWidget(thread1,0,0);

lay->addWidget(thread2,0,1);

lay->addWidget(thread3,0,2);

lay->addWidget(thread4,1,0);

lay->addWidget(thread5,1,1);

lay->addWidget(thread6,1,2);

}

private slots:

};

class main_window_t : public QMainWindow

{

Q_OBJECT

public:

main_window_t()

{

setCentralWidget(new main_wgt_t(this));

setWindowTitle("Threads");

setMinimumHeight(200);

setMinimumWidth(200);

show();

}

};

#endif // MAIN_WINDOWS_H

Результат

Создано 6 настраиваемых потоков с возможностью назначение одного из трех приоритетов. Ресурсы системы охотней расходуются на наиболее приоритетный поток, соответственно потоки с высоким приоритетом обрабатываются быстрее (рисунок 9).

Рисунок 9 - Программа работы с потоками

Заключение

Была проведена работа, дающая полное представление об организации памяти в ЭВМ. Выявлена роль операционных систем в этом процессе. В теоретической части изложены основные принципы организации памяти. Их преимущества и недостатки, в том числе и тех принципов, которые используются сейчас (страничная и сегментно-страничная память).В ходе практических заданий получены знания о работе процессов и потоков, а также теоретически и практически разобраны основы системного программирования потоков и процессов.

Список использованных источников

1 Красовская, Т.С. Правила оформления текстовых и графических документов: учебное пособие/Т.С. Красовская - Хабаровск: Изд-во ДВГУПС, 2007. - 41 с.

2 Волков, А.С. Операционные системы. Системное программирование: учебное пособие/ А.С. Волков - Хабаровск: Изд-во ДВГУПС, 2009. - 68 с.

3 Интернет-университет информационных технологий. Основы операционных систем. [Электронный ресурс]. Электронная библиотека НОУ «ИНТУИТ». 2005. URL: http://fet.aics.ru/metod/os/lectures/8/osintro_8.html

Размещено на Allbest.ru

...

Подобные документы

  • Организация выполнения прикладных программ. Обеспечение надежной эффективной работы компьютера и вычислительной сети. Автоматизация разработки и создания новых программ. Функции операционной системы. Распределение и организация виртуальной памяти.

    презентация [261,9 K], добавлен 02.12.2013

  • Объем двухпортовой памяти, расположенной на кристалле, для хранения программ и данных в процессорах ADSP-2106x. Метод двойного доступа к памяти. Кэш-команды и конфликты при обращении к данным по шине памяти. Пространство памяти многопроцессорной системы.

    реферат [28,1 K], добавлен 13.11.2009

  • Организация памяти компьютера и простые схемы управления ею. Принципы связывания адресов. Динамическое распределение и свопинг. Сегментная и сегментно-страничная организация памяти. Выталкивание редко используемой страницы. Описание работы с программой.

    курсовая работа [3,1 M], добавлен 19.01.2016

  • Организация и основные характеристики основной памяти персонального компьютера. Запоминающие устройства ЭВМ как совокупность устройств, обеспечивающих хранение и передачу данных. Хранение и обработка информации. Основные виды памяти компьютера.

    контрольная работа [52,0 K], добавлен 06.09.2009

  • Физическая организация памяти компьютера. Организация структуры обработки потока данных. Степень и уровни параллелизма. Оценка иерархической организации памяти. Динамическая перестройка структуры. Микросхемы запоминающих устройств. Кэш-память процессора.

    лекция [2,4 M], добавлен 27.03.2015

  • Характеристика внешней памяти компьютера. Виды памяти компьютера и накопителей. Классификация запоминающих устройств. Обзор внешних магнитных носителей: накопители прямого доступа, на жестких магнитных дисках, на оптических дисках и карты памяти.

    курсовая работа [88,6 K], добавлен 27.02.2015

  • Создание системы, осуществляющей запуск программы по расписанию, которое хранится в реестре. Методы и средства взаимодействия с аппаратными и программными средствами, типы интерфейсов. Алгоритм работы и листинг программы, проверка ее работоспособности.

    курсовая работа [78,6 K], добавлен 13.11.2009

  • Изучение понятия внутренней памяти компьютера, которая представлена в виде отдельных интегральных микросхем, выполняющих непосредственно функцию хранения программ и данных. Технологический цикл производства ИМС. Физическая организация внутренней памяти.

    контрольная работа [35,1 K], добавлен 22.11.2010

  • Классификация компьютерной памяти. Использование оперативной, статической и динамической оперативной памяти. Принцип работы DDR SDRAM. Форматирование магнитных дисков. Основная проблема синхронизации. Теория вычислительных процессов. Адресация памяти.

    курсовая работа [1,5 M], добавлен 28.05.2016

  • Классификация основных видов памяти компьютера. Использование оперативной памяти для временного хранения данных, используемых для работы программного обеспечения. Расчет потребления электроэнергии, формирование квитанции для потребителя в Microsoft Excel.

    курсовая работа [1,5 M], добавлен 23.04.2013

  • Простейшая схема взаимодействия оперативной памяти с ЦП. Устройство и принципы функционирования оперативной памяти. Эволюция динамической памяти. Модуль памяти EDO-DRAM BEDO (Burst EDO) - пакетная EDO RAM. Модуль памяти SDRAM, DDR SDRAM, SDRAM II.

    реферат [16,1 K], добавлен 13.12.2009

  • Подготовка к сборке компьютера. Установка процессора, оперативной памяти, материнской платы и винчестера. Подключение питания и периферийных устройств. Решение проблем при включении. Установка программного обеспечения, операционной системы, конфигурация.

    курсовая работа [40,9 K], добавлен 26.04.2014

  • Изучение состава и основных характеристик типичного настольного персонального компьютера. Обзор видов памяти ПК. Анализ значения каждого вида памяти для хранения информации. Формирование списков пользователя в MS Excel. Установление межтабличных связей.

    курсовая работа [1,7 M], добавлен 23.04.2013

  • Блок-схема, отражающая основные функциональные компоненты компьютерной системы в их взаимосвязи. Устройства ввода-вывода информации. Определение объема оперативной памяти. Применение карт памяти и flash-дисков для долговременного хранения информации.

    презентация [5,3 M], добавлен 28.01.2015

  • Исследование понятия программы и программирования. Архитектура компьютера и особенности обмена информацией между его узлами. Организация оперативной памяти. Машинный код. Перевод чисел из одной системы счисления в другую. Машинная математика и логика.

    презентация [163,6 K], добавлен 13.10.2013

  • Встроенные средства устранения неполадок Windows. Диагностика неисправностей операционной системы. Запуск и проверка памяти. Правила работы в помещениях оснащенных персональными электронными вычислительными машинами и другим электронным оборудованием.

    курсовая работа [38,6 K], добавлен 29.04.2014

  • Стратегии размещения информации в памяти. Алгоритмы распределения адресного пространства оперативной памяти. Описание характеристик модели и ее поведения, классов и элементов. Выгрузка и загрузка блоков из вторичной памяти. Страничная организация памяти.

    курсовая работа [708,6 K], добавлен 31.05.2013

  • Понятие системных ресурсов, конфликты, связанные с ресурсами IRQ и DMA. Использование портов ввода-вывода. Разновидности памяти и особенности ее распределения в рамках операционной системы. Назначение адресов памяти средствами Windows 9x/NT/2000.

    презентация [45,9 K], добавлен 27.08.2013

  • Исследование оборудования компьютера с помощью настроек BIOS, теста видеокарты, тестирующих программ POST и Everest, операционной системы Windows XP. Технические характеристики процессора, материнской платы, жесткого диска, памяти, периферийных устройств.

    практическая работа [10,8 M], добавлен 28.05.2012

  • Используемые в компьютерах устройства памяти для хранения данных. Внутренние (оперативная и кэш-память) и внешние устройства памяти. Уровни иерархии во внутренней памяти. Подключения дисководов и управления их работой с помощью дискового контроллера.

    презентация [47,7 K], добавлен 26.11.2009

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.