Понятие многозадачности

Автор работы: Пользователь скрыл имя, 24 Октября 2010 в 09:44, Не определен

Описание работы

Реферат

Файлы: 1 файл

Введение.docx

— 33.69 Кб (Скачать файл)

Введение. Что такое  Многозадачность и для чего она  нужна.

Многозада́чность (англ. multitasking) — свойство операционной системы или среды программирования обеспечивать возможность параллельной (или псевдопараллельной) обработки нескольких процессов.  

Существует 2 типа многозадачности[1]:

Процессная многозадачность (основанная на процессах - одновременно выполняющихся программах).

Поточная многозадачность (основанная на потоках).

About Linux

2.2. Введение в  многозадачность Linux

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

Итак, многозадачности  не существует. Действительно, любой  компьютер - это императивная машина, т.е. машина, основанная на последовательном анализе состояния вычислителя  и изменении состояния этого  вычислителя. Число комбинаций всевозможных состояний в такой системе  конечно. Многозадачность, реализованная  в операционных системах - это иллюзия, весьма удобная пользователю. Любая  многозадачность - это абстракция императивности. То есть, мы думаем, что два процесса выполняются одновременно, а на самом  деле они просто поочередно используют процессор для выполнения своих  команд. За очередностью использования  процессора следит хитрое ядро, которое  и создает иллюзию многозадачности. 

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

К каждому процессу в Linux привязываются два 16-разрядных числа - идентификатор процесса и идентификатор родителя. Первое число обычно обозначают PID (Process IDentifier), а второе - PPID (Parent Process IDentifier). Каждый процесс имеет свой уникальный PID. А что же такое PPID? Дело в том, что все процессы в Linux имеют иерархическую структуру. То есть одни процессы рождают другие процессы. Пусть процесс 1 породил процесс 2. В таком случае процесс 1 называют родителем или родительским процессом, а процесс 2 - потомком или дочерним процессом. Процесс 2, являющийся дочерним, может стать одновременно и родителем. И есть только один процесс, возвышающийся над всеми процессами и не имеющий родителя - это процесс init с идетрификатором 1 (PID=1). Это процесс запускается при загрузке системы. Программой соответствующей этому процессу является демон init, запускаемый ядром.

Из статьи про  Java

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

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

К примеру, даже если очень быстро набирать символы на клавиатуре и на ввод одного символа  тратить всего 1/20 секунды, то даже это  будет огромный интервал для процессора. Ведь современные процессоры могут  обрабатывать миллионы запросов в секунду.  

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

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

Кооперативная многозадачность  применяется в ранних версия Windows и Mac OS 9, а вытесняющая - в UNIX, Linux, Windows NT/2000/XP и Mac OS X.  

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

Многопоточные программы  развивают идею многозадачности  на более низком уровне: отдельные  программы способны выполнять одновременно несколько задач. Каждая задача обычно сокращенно называется потоком (thread) или полностью - потоком управления (thread of control).  

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

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

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

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

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

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

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

История

В 1987 году в результате совместных усилий Microsoft и IBM появилась первая многозадачная система для персональных компьютеров с процессором Intel 80286, в полной мере использующая возможности защищённого режима - OS/2. Эта система была хорошо продуманна. Она поддерживала вытесняющую многозадачность, виртуальную память, графический пользовательский интерфейс (не с первой версии) и виртуальную машину для выполнения DOS- приложений. Фактически она выходила за пределы простой многозадачности с её концепцией распараллеливания отдельных процессов, получившей название многопоточности.

OS/2 с её развитыми  функциями многозадачности и  файловой системой HPFS со встроенными  средствами многопользовательской  защиты оказалась хорошей платформой  для построения локальных сетей  персональных компьютеров. Наибольшее  распространение получили сетевые  оболочки LAN Manager компании Microsoft и LAN Server компании IBM, разработанные этими компаниями на основе одного базового кода. Эти оболочки уступали по производительности файловому серверу NetWare и потребляли больше аппаратных ресурсов, но имели важные достоинства – они позволяли, во-первых, выполнять на сервере любые программы, разработанные для OS/2, MS-DOS и Windows, а во-вторых, использовать компьютер, на котором они работали, в качестве рабочей станции.

HT

Многоядерные процессоры: теория (на примере Intel и AMD)

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

 

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

  

Однозначно одно, (хотя бы судя по опросу который я проводил) никто бы не отказался от C2D(особенно бесплатно).  

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

*любителям картинок  здесь будет скучно 

Часть 1. Немного истории  и терминов. 

Очевидно, что "ноги" у многоядерных процессоров растут из многопроцессорных систем. А вариантов  создания многопроцессорных систем - неисчислимое множество: даже простое  перечисление всего созданного заняло бы слишком много места. Однако существует их общепринятая классификация по доступу  к памяти: 
 

1. SMP-системы (Symmetrical Multi Processor systems). В подобной системе все процессоры имеют совершенно равноправный доступ к общей оперативной памяти. Работать с такими системами программистам - сущее удовольствие (если, конечно, создание многопоточного кода можно назвать "удовольствием"), поскольку не возникает никаких специфичных "особенностей", связанных с архитектурой компьютера. Но, к сожалению, создавать подобные системы крайне трудно: 2-4 процессора - практический предел для стоящих разумные деньги SMP-систем. Конечно, за пару сотен тысяч долларов можно купить системы и с большим числом процессоров… но при цене в несколько миллионов (!) долларов за SMP с 32-мя CPU становится экономически более целесообразно использовать менее дорогостоящие архитектуры. 
 
 

2. NUMA-системы (Non-Uniform Memory Access systems). Здесь доступ к память становится "неоднородной": один её кусок "быстрее", другой - "медленнее", а отклика от во-о-он того "дальнего" участка вообще можно ждать "пару лет". В системе при этом образуются своеобразные "островки" со своей, быстрой "локальной" оперативной памятью, соединенные относительно медленными линиями связи. Обращения к "своей" памяти происходят быстро, к "чужой" - медленнее, причем чем "дальше" чужая память расположена, тем медленнее получается доступ к ней. Создавать NUMA-системы куда проще, чем SMP, а вот программы писать сложнее - без учета неоднородности памяти эффективную программу для NUMA уже не напишешь. 

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

Intel сегодня предпочитает создавать SMP-системы; AMD, IBM и Sun - те или иные варианты NUMA. Основная "область применения" кластеров - суперкомпьютеры. 
 

Идея многоядерного  процессора выглядит на первый взгляд совершенно простой: просто упаковываем  два-три (ну или сколько там влезет) процессора в один корпус - и компьютер  получает возможность исполнять  несколько программных потоков  одновременно. Вроде бы бесхитростная  стратегия… но конкретные её реализации в недавно вышедших настольных процессорах AMD и Intel заметно различаются. Различаются настолько, что сугубо "количественные" мелочи в конечном итоге переходят в качественные различия между процессорами этих двух компаний. Попробуем разобраться в различиях подходов конкурентов. 
 

Intel. 

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

Короче говоря Pentium'ы - простейшие "двухпроцессорные процессоры" - язык даже не поворачивается говорить о "ядрах". Всё скучно до невозможности (впрочем, далеко не всегда двигает прогресс то, что "весело" :))…  

Несмотря на все  свои "подводные камни" такая  реализация, в конечном счёте, позволила  этой корпорации довольно быстро "завалить" прилавки дешевыми и доступными каждому  двухъядерниками. Все сказанное больше касается Р4, про С2D в следующей статье. 

Централизованный" подход Intel, во-первых, отличается относительной простотой, а во-вторых, удобен тем, что в нём каждый компонент компьютера получается узкоспециализированным, и поддающимся модернизации независимо от других компонентов. То есть с одним и тем же Northbridge можно использовать, например, совершенно различные по своей производительности и наоборот - меняя Northbridge, можно, например, использовать с одним и тем же процессором совершенно разные типы оперативной памяти.. 
 

Информация о работе Понятие многозадачности