Форум программистов, компьютерный форум, киберфорум
Теория программирования
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1

Тонкости работы многозадачной системы на однопроцессорной машине

11.07.2012, 20:29. Показов 1457. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вопросы, появившиеся после прочтения статьи Evg "Потоки vs процессы".

Там и системы с несколькими физическими процессорами, и системы с одной многоядеркой назывались "многопроцессорными", т. к.

Цитата Сообщение от Evg
физический процессор в количестве одной штуки на самом деле работает как два процессора
Вопрос: а кэши у ядер независимы? То есть у первого ядра свой кэш 1-го уровня, в второго ядра - свой, и так далее. Если же кеши общие, то как ядра не дерутся за "место под солнцем"?

И вообще, чуть отдаляясь от темы. Когда операционка исполняет несколько процессов на одном ядре, она сначала грузит в него код одного процесса, затем отправляет код другого, затем - третьего и так далее, верно?

Вопрос: а что происходит с регистрами, стеком и содержимым кэша? Ведь все процессы (практически) всегда будут в eax хранить нечто архиважное, и это архиважное у каждого процесса разное. Соответственно, при смене исполняемого процесса должны меняться и значения регистров, верно? Где они хранятся на время "простоя" прерванного процесса, каково ограничение объёма этого хранилища (сколько процессов могут сбросить туда свои регистры)? Если это в оперативке - то как быть с накладными расходами на чтение/запись? Если это в кэше - то что тогда есть кэш, и как быть в случае его переполнения (и переполнения кэшей нижестоящих уровней)? То же самое и в отношении стэка.

Спасибо :-)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.07.2012, 20:29
Ответы с готовыми решениями:

Атомарна ли операция присваивания в однопроцессорной машине?
? :) Добавлено через 1 минуту судя по это - атомарна :) 18: int a = 5; 0117C760 C7 45 E8 05 00 00 00 mov dword...

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

Тонкости работы с vararg
Думается, многим будет полезно попробовать разобраться с одной проблемой. С одной стороны не наступить на эти грабли в будущем, с другой...

1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
11.07.2012, 20:50
Цитата Сообщение от talis Посмотреть сообщение
Вопрос: а кэши у ядер независимы? То есть у первого ядра свой кэш 1-го уровня, в второго ядра - свой, и так далее. Если же кеши общие, то как ядра не дерутся за "место под солнцем"?
Для начала возьмём несколько одноядерных процессоров. Есть специальная система, которая называется что-то типа "система когерентности кэшей". Т.е. когда в один процессор данные пошли на запись, то процессор (а точнее, его подсистема памяти), должна уведомить другие процессора, что вот туда-то пошла запись в память. При таком раскладе кэш первого уровня по любому должен быть независимым, в противном случае очень сильно просядет производительность, хотя реально скорее всего кэши всех уровней должны быть на каждом из процессоров. А потому на материнской плате помимо обычной шины данных в память должны быть связи между всеми процессорами, обеспечивающие работу системы когерентности кэшей (что технически сильно усложняет плату)

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

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

Добавлено через 3 минуты
Цитата Сообщение от talis Посмотреть сообщение
И вообще, чуть отдаляясь от темы. Когда операционка исполняет несколько процессов на одном ядре, она сначала грузит в него код одного процесса, затем отправляет код другого, затем - третьего и так далее, верно?

Вопрос: а что происходит с регистрами, стеком и содержимым кэша? Ведь все процессы (практически) всегда будут в eax хранить нечто архиважное, и это архиважное у каждого процесса разное. Соответственно, при смене исполняемого процесса должны меняться и значения регистров, верно? Где они хранятся на время "простоя" прерванного процесса, каково ограничение объёма этого хранилища (сколько процессов могут сбросить туда свои регистры)? Если это в оперативке - то как быть с накладными расходами на чтение/запись? Если это в кэше - то что тогда есть кэш, и как быть в случае его переполнения (и переполнения кэшей нижестоящих уровней)? То же самое и в отношении стэка.
Да, всё происходит именно так. Подробно я как-то расписывал тут https://www.cyberforum.ru/asse... post475469 (и продолжение там же на два поста ниже). В процессе переключения задач, когда одна задача снимается с исполнения, все её регистры сохраняются в память, затем на исполнение ставится другая задача. Когда вторую задачу надо снять с исполнения, то её регистры сваливаются в память, а затем из памяти достаются сохранённые значения регистров первой задачи. Ну и так далее. Чем больше задач исполняется одновременно на одном процессоре, тем больше накладные расходы на переключение задач. Если на процессоре запустить активных 1000 задач, то операционная система только и будет успевать, что переключать контексты задач, а сами задачи практически исполняться не будут
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.07.2012, 20:50
Помогаю со студенческими работами здесь

Тонкости работы ползунков
Я обрабатываю следующие сообщения: if(nSBCode == SB_THUMBPOSITION || nSBCode == SB_THUMBTRACK || nSBCode == SB_PAGERIGHT || nSBCode...

тонкости работы с реестром
есть програма которая по нажатию кнопки творит вот такое чудо void __fastcall TForm1::Button2Click(TObject *Sender) { ...

"тонкости" работы с поиском Msword
история началась с того, что поля ворда неудобны для массового применения (программной подстановки) было решено заменить их шаблонами...

Две операционные системы на одной машине
Всем - привет! у меня вопрос: на машине установлена ХР, а хочется ещё и 7-ку установить. Есть два раздела С: (основной) и D: можно...

Интеграция файловой системы с ОС на виртуальной машине
Здравствуйте. Можете подсказать, как сделать видными на ОС Linux Ubuntu (работающей на виртуальной машине) файлы с компьютера, с дисков...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru