Как стать автором
Обновить

Комментарии 240

Товарищи, давайте узнаем полную статистику по хабру :) Да прибудет пост на главной :)
«пребудет» :)
Это разные слова ;)
Тогда уж «прибудет на главную»? :)

прибывать и пребывать — два разных глагола…
чтобы лишний раз не путаться, можно просто совместить оба варианта

приебывать
игра слов. каламбур!
Судя первым полутородесяткам ответивших — люди здесь что-то знают и это хорошо!:)
Главное — не подсказывайте правильные варианты!!! :)
и что это должно показать?
ну и где же TSS (раз уж вспомнили i386, а не x64)?
Суть опроса — выяснить уровень знания основ. Если выяснится что хороший процент не знает и основ, то выложу перевод хорошей статьи, которая все рассказывает
Основ чего? Эти процессоры лет 20 как не производят.
И что? :)
Принципы защищенного режима с тех пор не изменились.
Ой, хотел ответить автору коммента выше )
НЛО прилетело и опубликовало эту надпись здесь
Ну как же не имеет.
Именно в защищенном режиме процессоры архитектуры i386 предоставляют супервизору инструменты для осуществления многозадачности.
НЛО прилетело и опубликовало эту надпись здесь
Класс, не знал о такой программке :) Супер :)
Ага! Запускал.

Так же был en.wikipedia.org/wiki/DOS_Shell но он позволял только переключатся между задачами, и параллельного выполнения не было вроде.
Ещё была Novell DOS с task switcher-ом с параллелизацией и её предшественник DR DOS с task switcher-ом без параллелизации. А ещё Windows 3.1, которая могла работать в незащищённом режиме.
В MS-DOS был класс программ по общим названием TSR. Т.е. «резидентные программы», многозадачность вполне работала в реальном режиме. На костылях, но таких программ было множество.
Ну это понятно, но это все костыли :)
В защищенном режиме костыли превращаются в обязательный атрибут )
НЛО прилетело и опубликовало эту надпись здесь
Основные алгоритмы тоже уже лет 20 как реализованы в туевой хуче библиотек, это ведь не значит, что не нужно знать как эти алгоритмы работают.
Основным алгоритмам более 40 лет уже… Процессоры начинались не с x86-эры, а гораздо раньше.
Основным алгоритмам более 40 лет уже…
Вы понимаете разницу меджу алгоритмом и реализацией алгоритма? Я говорю о реализации алгоритмов в библиотеках. Например, есть STL(которой никак не может быть 40лет) используя ее программист может пользоваться динамическими контейнерами, не зная как они устроены. Но без знания основ, делать он это будет, как минимум, не эффективно.
Процессоры начинались не с x86-эры, а гораздо раньше.
Я в курсе.
Теперь перечитайте текст вопроса.
можно подумать, с тех пор как их перестали производить, что-то в корне поменялось? :)
НЛО прилетело и опубликовало эту надпись здесь
Так почему бы не спросить про современные? Я хз что умели процессоры того поколения, ткнул в ближайшую аналогию с тем как сейчас ОС с железом общаются. И 90% так же сделали уверен.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Кажется преждевременным возводить конкретную реализацию в конкретной железке в ранг «основ», которые, якобы, все должны неприменно знать.
«Многозатачность» можно реализовать в любом микропроцессоре в котором есть таймер или внешнии линии прерываний (к которым опять же подключить уже внешний таймер). Так что линейка x86 тут совсем не причём и на «основы» не тянет.
Почему 386? многозадачность можно было и в 086 реализовать. Потому что был защищенный режим? Он был и в 286. Почему тогда не они.

А что делать если люди не застали 386? срочно читаь документацию по ним? глупо. Можно быть прекрасным специалистом и не зная как какая то фича реализовывалась в конкретном железе много лет назад.

Так что вопрос скорей бы звучал так «а вы читали документацию к 386 процессору», а цель — асимптотически стермится к «потешить ЧСВ»

Совершенно с вами согласен. Добавлю, что если мы уж решили двигаться к основам, то почему бы не пойти дальше, например, к устройству процессора. Или, чего уж там, к физике полупроводников. Знать нужно ровно столько, сколько необходимо для качественного решения той или иной задачи. Меня в мат. расчетах мало волнует устройство процессора, что не мешает мне хорошо, и, надеюсь, не без пользы заниматься делом. Хотя я сейчас немного покривил душой, поскольку вопреки этой своей проповеди правильный ответ я знал. Мне, как и многим тут, не повезло родиться любознательным.
Правильно ответил без подсказок.
А как вы узнали, что ответ правильный? :)
«Миллион леммингов не может ошибаться» :-) эт я не про этот опрос, но цитата в тему
В Википедии есть ответ.
Гораздо сложнее было бы отвечать про современные процессоры.
Опрос некорректен. Правильный ответ:«Процессор ничего не знает ни о потоках ни о процессах, а многозадачность реализуется программно средствами ОС». Ведь в каждой ОС многозадачность реализована по-своему.
Единственное, что не корректно в опросе — термин «меняет инструкции», скорее, «поток инструкций», однако ваш вариант с учетом этого — последний.
НЛО прилетело и опубликовало эту надпись здесь
Написано же: «а операционная система самостоятельно», т.е. средствами операционной системы
НЛО прилетело и опубликовало эту надпись здесь
Уличная магия прерывания системного таймера
НЛО прилетело и опубликовало эту надпись здесь
Ну, если вспомнить время, когда я писал операционную систему реального времени, много чего вспомнить смогу :)
То есть операционная система тут не при чем? :) Нужны только прерывания и таймер и все будет «по щучьему веленью»? :)

P.S. Сё не троллинг, но искреннее удивление.
НЛО прилетело и опубликовало эту надпись здесь
Лопата и кран — это средства постройки дома, но дом все равно строят по какому-то плану, под руководством архитектора/прораба/etc

Понимаете аналогию? :)
НЛО прилетело и опубликовало эту надпись здесь
Таймер и прерывания — инструменты для выполнения квеста под названием «переключение задач». Но кто принимает решение о переключении задач? Процессор, таймер, прерывания или операционная система?

Кто принимает решение о постройке стены — лопата или архитектор?

Как-то так. Я думаю, тема исчерпана? У меня спорить нет желания ;-)

P.S. Не знаю кто вам карму минусует — явно не я.
НЛО прилетело и опубликовало эту надпись здесь
Погодите, я вас не понимаю… что-то как-то мое понимание расходится с вашим :( Давайте проясним вместе:

— на основании чего таймер и система прерываний решает, что надо что-то переключить?

Вы цитату вырвали из контекста к сожалению. Там дальше идет:

«меняет инструкции таким образом, чтобы они выполнялись крупными группами, за определенный отрезок времени — квант»

Может быть вас смутило то, что это можно прочитать «ОС изменяет код инструкций»? Типа был «mov ax,0», а стал «xor ax,ax».

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

Ну да, а генерируются прерывания кем только не. Это я еще по ДОСу помню. А кто генерирует эти события в защищенном режиме?
НЛО прилетело и опубликовало эту надпись здесь
Ну да, а то я не помню программ, которые забирали на себя 100% времени, вешая намертво всё.
НЛО прилетело и опубликовало эту надпись здесь


Win95 (не говорите мне, что это НЕ защищенный режим процессора в вашем понимании), запускаем экзешник и хана. Система не переключает задачи, комп не реагирует ни на что кроме… резета.
НЛО прилетело и опубликовало эту надпись здесь
То есть вы утверждаете таки, что система ничем не управляет вообще? Ну то есть вообще ничем!

Это, простите, напрямую из ваших слов следует.

Верно?
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Есть такая штука как Out of Order execution в современных процессорах. Реально поток инструкций изменяется. Меняется таким образом, чтобы максимально эффективно загрузить все исполнительные устройства (коих в одном ядре несколько)
По своему, НО любой вариант многозадачности покрыт одним из вариантов опроса.
Ну тоже не совсем правильно. В x86 есть механизм аппаратного переключения задач, который к ОС вообще не имеет никакого отношения.

А опрос действительно некорректен и, более того, правильного ответа в предложенных вариантов нет.
Честно говоря, я не так уверен. В процессоре есть нативные инструменты для переключения с потока на поток. Правда я бы не назвал их нитями, не встречал такой терминологии. Короче говоря, воздержался, жду правильного ответа и мнению большинства не доверяю :)
Извините, не заметил предыдущий комментарий.
Опрос про i80386, если-бы он был про i80486 — другое дело.
Упс, флей: перечитал историю, протектед мод был добавлен в 80286.
А можно примеры как это по-своему можно реализовать на процессоре 80386
НЛО прилетело и опубликовало эту надпись здесь
В принципе, установка вектора обработчика прерывания — та же «модификация инструкций», как и модификация тела программы.
НЛО прилетело и опубликовало эту надпись здесь
для фон-неймановской архитектуры — нет
НЛО прилетело и опубликовало эту надпись здесь
не бред. Фича под названием DEP в современных процессорах появилась неспроста
НЛО прилетело и опубликовало эту надпись здесь
>Освежите свои знания про архитектуру фон Неймана.
:) Какой из принципов архитектуры по-вашему мешает исполнять данные или копировать инструкции?

>И аналогичная фича в x86 появилась еще в 286
защищенный режим? Он тут ни при чем
НЛО прилетело и опубликовало эту надпись здесь
Ок, мы не можем исполнять данные в сегменте данных, но можем исполнять данные в сегменте кода, ровно как и изменять код в сегменте данных. По-моему никакого противоречия с фон-Неймановской архитектурой, ибо виртуальное адресное пространство содержит и код и данные, да ещё и не делает между ними различий (кроме бита DEP, но опять-таки, это механизм защиты, на не фича архитектуры).
НЛО прилетело и опубликовало эту надпись здесь
Между ними нет границы вообще. Когда вы загружаете исполняемый файл с диска в память, что вы загружаете? Данные или инструкции?
НЛО прилетело и опубликовало эту надпись здесь
> Инструкции, программа, данные — понятия более высокого порядка, чем последовательность байт.
А также и понятия более высокого уровня. На уровне процессора и памяти как железок разделения нет — все это последовательности байт. На что указывает регистр CS:EIP — то и будет выполнять процессор.
Вот скажите: 15, 23, 92, 121 — это данные или программа?
Если их скормить процессору то он их может быть выполнит. А может и не выполнит — если некорректная программа, но он этого и не поймет.
Как уже ниже говорили — именно так и работают полиморфные вирусы: генерируют некие ДАННЫЕ, и потом заставляют процессор выполнять ДАННЫЕ, которые на деле ПРОГРАММА, реализующая вирус.
НЛО прилетело и опубликовало эту надпись здесь
Вы говорите о логическом разделении данных и инструкций, а мы о физическом. Логически конечно это разные вещи. Физически — одно и то-же.

Прерывание выполнения это уже следствие того что процессор начинает выполнять данные, соответственно это возможно. С некоторой вероятностью прерывания может и не произойти.
НЛО прилетело и опубликовало эту надпись здесь
Установка адреса на инструкции по обработке прерывания — изменение таблицы, которая является данными.
Фраза неоднозначная, возможно сбивает с толку что инструкциями назвали данные. Её смысл зависит от того на каком уровне рассматривать работу процессора.
Если на физическом, то данные и инструкции — все таки одно и тоже.

llter не зря взял это в кавычки.
НЛО прилетело и опубликовало эту надпись здесь
Кусок данных можно впихнуть вместо инструкций, процессору наплевать, что за байты к нему идут. Уязвимости так и работают.
НЛО прилетело и опубликовало эту надпись здесь
Можно взять и подменить кусок инструкций, обращаясь к ним как к обычным данным. Гипотетически, это может сделать операционная система (при желании).
Данные = байты в памяти.
Инструкции = байты в памяти. ОС может менять байты в памяти.
НЛО прилетело и опубликовало эту надпись здесь
Стол и кошечка — слова. Буквы.
Можно взять и написать на бумажке следующее:
Возьми второе слово, записанное на этой бумаге, нарисуй на бумаге чёрточку несколько раз, в зависимости от количества букв в том слове.
«второе» — это данные или программа?
А ещё можно в область памяти размером, 128 байт, после которой идёт область инструкций, запихнуть 256 байт данных (например, загруженныйх из файла). Инструкции будут затёрты. И что находится на 129-м байте, процессору пофиг.
НЛО прилетело и опубликовало эту надпись здесь
Вы их пишете на листе бумаги. Значит это буквы, а не предметы. Следите за контекстом.

Отлично, чем является инструкция с точки зрения ПАМЯТИ вычислительной машины.
НЛО прилетело и опубликовало эту надпись здесь
Не переводите разговор на философию.

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

Аналогии, приводимые вами, не уловил. Какая-то невнятная философия, а за ней вектора прерываний.
НЛО прилетело и опубликовало эту надпись здесь
Вы заявляете что данные и инструкции это разные вещи. Данные в контексте программ.
НЛО прилетело и опубликовало эту надпись здесь
Слово «кошечка», будучи записанное в виде данных, является не домашним животным, а последовательностью байт. Как и команда, интерпретируемая процессором. На вход процессора можно подать слово «кошечка», с некой долей вероятности процессор его выполнит.
НЛО прилетело и опубликовало эту надпись здесь
То есть в x86 невозможно устроить переполнение буфера?
Представим гипотетическую программу системного администрирования, которая исполняется с привилегиями суперпользователя — к примеру, изменение паролей пользователей. Если программа не проверяет длину введённого нового пароля, то любые данные, длина которых превышает размер выделенного для их хранения буфера, будут просто записаны поверх того, что находилось после буфера. Злоумышленник может вставить в эту область памяти инструкции на машинном языке, выполняющие любые действия с привилегиями суперпользователя — добавление и удаление учётных записей пользователей, изменение паролей, изменение или удаление файлов и т. д. Если в дальнейшем программа передаст управление в эту область памяти, система исполнит находящийся там машинный код злоумышленника. (Из вики.)

Умный x86 процессор увидит, что данные не является инструкциями, и не выполнит их?
И кстати, кошечка существует абсолютно независимо от проекции, которую мы строим, что бы ее (кошечку) изучить или упомянуть. Кошечкой от этого она не перестает быть. Однако слово «кошечка», записанное в памяти, не перестанет быть последовательностью байт.
НЛО прилетело и опубликовало эту надпись здесь
А при чем тут кошечка? Речь идет про запись слова «кошечка».
Стол и кошечка это РИСУНКИ. С этой точки зрения это одно и то же. И стол и кошечка — и то и другое — рисунки.

Прекратите троллить, уважаемый.
Ай, простите, «написать», а не «нарисовать». Но суть не меняется.
Клёво сравнивать облака с апельсинами.
Код-данные — термин прикладного уровня.
Поток байтов на входе в процессор — термин системного уровня.
Хорошо есди поток байтов является кодом, но иногда бывает совсем не так.
Ну вы же понимаете, что самое главное для троллинга — умело подменять термины ;-) Вот и появляются кошечки и столы вместо потока команд.

Дискуссия напоминает весьма обсуждения по части одного говнокода.
Спасибо за ссылку, комменты лучше всяких анекдотов! :)
Особенно ветка про «mov al,0 нужен, чтобы переместить ноль в al, то есть чтобы освободить память, где раньше находился этот ноль».
Да-да, смех сквозь слезы. Наслаждайтесь ;-)
и данные и инструкции — это битики и байтики. В памяти. Насколько я помню CS:IP указывает на текущую инструкцию. Что мешает подменить IP так, чтобы он показывал куда-то на данные. Последствия непредсказуемые.

Ой да что там… полиморфные вирусы по вашему работают как-то иначе?
Да и не только ОС может, насколько я помню, не в защищенном режиме это вообще кто угодно может. :) В защищенном чуть посложнее, но как-то же работают программы типа ArtMoney.

Странно, что про JIT компиляторы ещё не вспомнили.
Не разбираюсь, извините.
А здесь есть правильный вариант?
Выбрал предпоследний, но вообще не «по одной с каждой задачи» а «в соответствии с приоритетом процесса»… Во всяком случае в большинстве современных ОС. Какая нибудь другая ОС сделает как нибудь по другому…
А вот и не по одной.
Если бы по одной, то затраты на переключение контекста во много раз бы превышали время полезной работы.
Спасибо, кэп! Когда вопрос «как вы думаете, чем компилируемый язык отличается от интерпретируемого?», а потом разгромная статья на эту же тему.
Однако автор вышестоящего комментария был уверен в обратном)
Я уверен, он просто не дочитал до конца :).
Вообще, как верно заметили выше — это решает ОС, как реализовать многозадачность, а так как в вопросе уточнен только процессор, то вопрос не вполне корректен, может в ОС вообще нет многозадачности.
Кхм… действительно, посыпаю голову пеплом :) Т.е. ОС формирует блок из инструкций различных программ в соответствии с приоритетом и потом они исполняются процессором, я верно понимаю?
Не совсем. ОС выделяет процессу квант времени, и по таймеру определяет, что этот квант истек, и контекст пора переключать на следующий процесс.
Ааа, так вот куда уходит процессорное время, указанное в top-е как nice! На переключение контекстов…
Вы хотели сказать, как время ядра? На переключение контекстов, но, в основном, не на них, а на ввод/вывод.
Опрос о многозадачности, а не многоядерности.
Хотя структура процессора сама по себе отвечает на вопрос.
Вот тоже самое с новыми SPARCами уже будет посложнее, архитектура-то немного иная :).
Хотя и Core i7 тоже самое будет, но гипертред это не спарковский тред.
Сложнее всего будет с новым проциком от AMD на архитектуре Bulldozer. Вот там реально непонятно даже, как один поток исполняться будет, на одном ядре или на двух…
Некорректный опрос. Процессор 80386 «знает» о процессах и потоках, у него есть регистры для переключения задач. Также поддерживается прерывание таймера, что означает аппаратную поддержку квантования.
Получите из процессора список задач и потоков
получите из бинарника имена переменных.
А для бинарника переменных и не существует. Есть только область памяти и регистры. )
воооот
не корректное сравнение, вопрос в базовой организации многозадачности. Именно в базовой. Можно вариантов придумать тысячу, т.к. есть и ОС реального времени и всякие-разные. И у каждой свои механизмы. Однако база у всех одна. Если у вас есть парочка доп регистров, многозадачность это не реализует, а только поможет. Правильный вариант в опросе есть и он корректен, и судя по количеству ответивших, он правильно понимается большинством, и без занудства. Или вы хотите чтобы вариантами ответов были целые статьи по организации совместной работы ОС и процессора? :)
НЛО прилетело и опубликовало эту надпись здесь
Но ведь операционная система никакие инструкции не меняет! Она просто задаёт интервал срабатывания таймера и, грубо говоря, в обработчике прерывания вызывает планировщик, алгоритм диспетчеризации потоков, который и выбирает следующий поток для выполнения, при этом сохранив стек предыдущего в его контексте. Поэтому ни один вариант правильным не признаю.
Да, это я не заметил, извините.
Да вы к словам придираетесь просто :)
С точки зрения процессора, ОС реально ничего не меняет. Потому что для процессора пофиг какой поток инструкций выполнять, он вообще не знает про программы ничегошеньки.
Но если взять на уровень выше, то тут как раз возникает данная формулировка.
Смотря, что считать ОС. Если это hypervisor, то может и менять.
Для 30386 есть только одно понятие — задача. TSS — task state segment. Ни о каких потоках и процессах он не знает. Это категории уровня ОС и реализовывать она может их как угодно.
А никто не обратил внимания? этот опрос лидер по количеству воздержавшихся.
На хабре много Web-разработчиков и дизайнеров и людей прочих, далеких от native-программирования профессий, им это не должно быть важно, только разве что для расширения кругозора
а что, у вас есть статистика по аудитории хабра, где это прямо написано?
Вы так сказали, как будто веб-разработчики не люди.
Я, конечно, понимаю, что новое поколение «разработчиков» сначала учит PHP, а потом программирование, но раньше всё начиналось с азов.
Поколение PepsiHP.

PS: раскрыта тайна первой буквы в аббревиатуре PHP :)
Я скорее имел ввиду клиентскую часть :)
Хорошее знание JavaScript обычно предполагает, что человек пришёл в профессию не с улицы, а из какой-то области постарше.
А как показывает мой опыт, люди, которые ограничиваются использованием методов jQuery, Хабр обычно не читают.
…люди, которые ограничиваются использованием методов jQuery, Хабр обычно не читают.
Да и вообще не существуют.

Даже в программировании на чистом джаваскрипте сложно обойтись хотя бы без преобразования типов — а значит, без .toString() и без parseFloat().
я таки дико извиняюсь, но я тут мимовебразработчик и сначала учил шелл-скрипты, а уже потом программирование. и мне это почему-то не мешает.

а понтоваться сакральным знанием наслоения костылей совместимости с древними калькуляторами — это отвратительно.
/me гонит веником muromec
Толсто! Тооолсто!
Самый шикарный коммент во всём треде. +1!
Это и 90 процентам native-программистов не нужно.
На мой взгляд, нужно. Чтобы понимали что их методы выполняются не совсем параллельно. Иначе не все понимают, зачем мутить различные схемы синхронизации потоков. Что если запустить два потока, не факт что они закончат работу в том же порядке, в каком были запущены… И т.п. ньюансы.
это не более чем очередной и жутко не интересный частный случай.

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

Для этого вовсе необязательно знать как это реализовано в железе — достаточно понимания общей модели.
И это естественно, потому что правильного ответа в списке нет. Во-1-х, операционная система инструкции не меняет (поэтому два последних варианта ответа — не в кассу); во-2-х, процессор кое-что знает о процессах, не зря у него есть регисты-указатели на таблицы дескрипторов и TSS; в-3-х, переключение задач инициируется не процессором, ни через кванты времени, ни через мифическую оценку сложности инструкции (поэтому варианты 2, 3, 4 тоже не в кассу). Ну и конечно, имея одно ядро, процессор не подходит под вариант 1 тоже.

Я сам воздержался, хотя в 90-х годах лично писал на ассемблере подсистему управления памятью для одной разработки, и принципы работы 386 процессора в защищенном режиме знаю неплохо.
Тут нужно определиться, что значит фраза «меняет инструкции». Да, определение кривовато, но для процессора после смены значений CS и IP, меняются и последующие исполняемые инструкции.
Кроме того, можно в теории написать такую ОС, которая будет действительно менять инструкции. )
Тут нужно определиться, что значит фраза «меняет инструкции»

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

Где Вы видите в топике такое определение? Нигде не сказано, что ОС меняет инструкции именно по месту в ОЗУ. Меняет она их для процессора, а как, это уже вопрос реализации ОС.
У автора в этом месте стилистическая неточность. Можно до хрипоты философствовать, что он на самом деле имел в виду, и какими еще способами можно интерпретировать его слова. Но самое естественное и перво-наперво приходящее на ум понимание именно такое: где была одна инструкция, по воле операционной системы встала другая.
Вон какое обилие комментариев о том, что «система сама инструкции не меняет, иначе она считалась бы полиморфным вирусом».
Благо, автор уточнил, что он имел в виду замену адреса в указателе текущей инструкции, а не код операции (а это, согласись, уже несколько другие слова, и в новой формулировке всё стало понятно и правильно).
Просто в этом опросе нет правильного варианта ответа. Был бы вариант «против всех», я бы не удивился, если бы он лидировал. Напоминает вопросы с ЕГЭ, где что-бы ответить надо оказаться не глупее, но и не дай бог умнее чем тот, кто составлял анкету. И вот сидишь и гадаешь, какие книжки читал автор, а какие не читал, чтобы реконструировать, что он посчитал правильным ответом.
Слишком много буков в понедельник, воздержался, извините.
Вообще говоря стоит учесть существование у части процессоров математического сопроцессора (насколько я помню — на части материнок он был, на части — не было)
Сопроцессор в данном случае роли не играет.
В принципе согласен, но для полноты картины — стоит.
Проголосовал за первый вариант. Процессор знает все: он у меня под столом стоит и к нему мышка подключается!
Логично =) Зачем мне знать о потоках, процессах и каких-то квантах, если процессор о них все знает.
Зачем мне знать об атомах, молекулах и каком-то гемоглобине, если гугль о них все знает? :)
Еще два-три комментария, и мы обретем дзен.
Хорошо бы ;-)
Эх, хорошая была машина, особенно с кнопкой «turbo»))
И если не изменяет память из пройденного материала по истории архитектуры процессоров, который был пройден давно уже, то голосую на последний вариант.
Кнопка «turbo» всегда радовала :) типа как педаль газа в автомобиле :) Чувствуешь себя сверх воодушевленно, когда на нее нажимаешь :) Типа, «поддал газу» :))
А реально она что нибудь делала?
Да, переключала режимы процессора для совместимости
Ну цифирьки на LED-дисплее меняла. Вроде бы после этого пакман быстрее бегал :)
у многих мастеров она отключала системный спикер
Ага! Я её использовал если в нужно было сделать слоу-мо в с старых игрушках. На каких-то зверских уровнях тетриса или «попкорна»(если кто помнит) — была совершенно незаменима :)
Что-то не припомню, чтобы кто-то её вообще отключал.
А ещё весело было таймер менять с обычных 18.2 тиков в секунду на что-нить побыстрее :-D В NC начинали так быстро-быстро часики моргать, звёздочки в скринсейвере носиться. Да и всё остальное что к прерыванию таймера привязывалось начинало веселить.
Истинное назначение этого опроса — показать какой длинный член у его автора.
Я вообще без мышки в Win 3.11 пасьянс складывал :).
А я на спектруме без телевизора вслепую делал и запускал складывающий калькулятор. Ответ — количество бипов из пищалки.
10 INPUT A
20 FOR I = 1 to A
30 BEEP 100, 50
40 PAUSE 50
50 NEXT I
60 GO TO 10

Как-нибудь так… :)
Ну да, только вводить надо два числа, чтобы прибавить. Ещё запустить. И отладить, с учётом того, что до этого живого спектрума в руках не было. Сообщений об ошибках увидеть никак (телевизора нет). Сохранения программы нет. Команды там не впечатываются текстом, а вбиваются нажатиями клавиш. Если не работает — ресёт и по-новой. Интернета нет — только книжка. Работоспособность железки тоже под вопросом (т. к. торчат два провода неоприходованных). В общем, весело было.
Та не, INPUT A (именно на спектруме) считает любое арифметическое выражение и записывает результат. Т.е. если ввести "(11+1)*2", то A будет равно 24. Ну а насчет остального — у самого был спектрум, и сам писал программы вслепую ;)
Воздержался. Правильного варианта в опросе нет. Автор, учи мат часть и правильно формулируй свои мысли, т.к. даже если подразумевается статья для «новичков» это не значит что можно путать все понятия и определения.
Многозадачность может работать и последним и предпоследним способами точно, зависит от системы которую вы напишете. Ну будут большие расходы, но ведь можно, разве нет?
Можно, но так никто не далает, иначе на работу ОС будет уходить до 95%% ресурсов
да, до 95% и не копейкой больше!

ПС. Что-бы цифра выглядела убедительней под неё нужно подогнать какую-нить красивую теорию, но тут я вам могу помочь: 95% — это 2 SD от среднего при нормальном распределении.
Это все, конечно, очень хорошо и статью автора почитать было бы интересно, но вот мое ИМХО — бежать нужно от х86, бежать…
Куда? На арм-ы? На 64? На OpenCL?
на SoC на базе ARM
там мы уже того… практически убежали. скоро на x86 останутся исключительно нищеброды, любители старины и стимпанка, эстеты-копрофаги и работники MSFT — суть пропащие люди и враги прогресса.
дело в том, что х86 мурыжат уже который год и мурыжат, как по мне, не лучшим образом, добавляя новые и новые костыли.

В то время, как ARM, даже на беглый взгляд выглядит более продуманной, MIPS тоже не плох, но закрытость спецификаций ставит меня в тупик.
>дело в том, что х86 мурыжат уже который год и мурыжат, как по мне, не лучшим образом, добавляя новые и новые костыли.

строго говоря, инструкшн-сет арма тоже от версии к версии не уменьшается.

а вообще я с вами вроде бы и не спорю, а всячески поддерживаю и пишу сюда с этого самого арма.
та я понял, дай угадаю — с Тошибы АС-100? :)
Вспомнилась задачку для детсада.
корова — 2
собака — 3
кошка — 3
петух — 8
утка — ?

Только детсадовская задача корректна, а эта задача — нет.
— знает ли процессор что-либо о процессах или потоках или контекстах выполнения? да, знает.
— меняет ли ОС самостоятельно инструкции таким образом, чтобы они выполнялись крупными группами? нет, не меняет. инструкции остаются теми же.
Утка — 3. Инфа 100%
Я просто хотел выяснить знания основ. Если выяснится что хороший процент не знает и основ, то выложу перевод хорошей статьи, которая рассказывает все об этой задаче.
В чем секрет?
балин :) вкурил.
По количеству звуков, издаваемых, существом.
собака — гав (3);
петух — кукареку(8);
утка — кря (3);
Ух-ты! Я справился! 3! Точно говорю! Теперь меня, наверно, в школу возьмут!
да местами он их переставляет, местами. Не идет речь об изменении битиков «внутри» кода инструкций.
разве ОС переставляет инструкции местами?
— да, переставляет. например, бинарник загружен по одному логическому адресу, потом страница кода выпиливается из памяти в своп, потом грузится обратно в тот же логический адрес но в другой физический. переставлены ли инструкции местами? да, переставлены. абсолютно формальный и бесполезный ответ.

— нет, не переставляет. меняется порядок исполнения инструкций, но сами инструкции лежат на своих местах. нормальный ответ. и, в общем-то, единственный правильный, потому что для ответа «да» требуется спуститься на уровень ниже, а здесь мы можем описать всё в рамках одного «уровня».
До чего ж вы дотошны :)

Уже и образно выразится нельзя :(
>> — знает ли процессор что-либо о процессах или потоках или контекстах выполнения? да, знает.
Нет, не знает. Процессы и потоки — сущности операционной системы. Процессор работает с задачами.
Да, знает.

во-первых, вы проигнорировали слова «или контекстах выполнения», что уже делает ваш комментарий completly unrelated.

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

задача — часть процесса +
+ процессор знает что-то о задаче =>
=> процессор кое-что знает о процессах и потоках.
=> неверно, что процессор ничего не знает о процессах и потоках.

зачем нужно придираться к каждой букве, мне непонятно. зачем составлять варианты так, чтобы среди них не было правильного, мне ещё больше непонятно. но самое большое удивление у меня вызывает ваш комментарий.
Ширина окна приложения в некоторый момент времени может оказаться в регистре процессора => неверно, что процессор ничего не знает об окне => процессор знает об оконной подсистеме, так что ли?

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

> во-первых, вы проигнорировали слова «или контекстах выполнения», что уже делает ваш комментарий completly unrelated.
Автор опроса написал: «Процессор ничего не знает ни о потоках, ни о процессах». Вы зачем-то приплели сюда ещё контексты выполнения. Я согласен, что процессор знает про TSS, но не согласен, что он знает про потоки и процессы.
не «приплёл», а написал это изначально. а вы со мной не согласились. хотя с тем, что я написал, вы согласны, но вы несогласны, что то, что я написал, связано с исходным постом, и считаете, что моя первая реплика не связана с исходным постом. я правильно вас понял?
> неверно, что процессор ничего не знает об окне

ну, мне вот лично кажется, что «иметь доступ к состоянию задачи (т.е. регистры + стек), знать, что из этого регистры а что не регистры, и знать, что это именно состояние задачи» и «иметь 4 каких-то байта которые неизвестно откуда но может быть из окна» — это разные вещи. но такие как вы их конечно путают и я не могу сердиться за это на вас.
Странно, что в данном сообщении вы оперируете термином «задача», а не «процесс» или «поток».
P.S. Да, вы уж не сердитесь, пожалуйста, на нас, сирых и убогих…
потому что если бы я сказал «процесс», обсуждение бы ушло на второй круг.
> Ещё раз повторяю

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

автор написал: «Процессор ничего не знает ни о потоках, ни о процессах. Он просто последовательно выполняет инструкции».
я интерпретирую это как «Процессор ничего не знает ни о потоках, ни о процессах, ни о какой-либо другой фигне связанной с многозадачностью. Он просто последовательно выполняет инструкции».
обе эти фразы, очевидно, ложны.
но смысл у них совершенно одинаковый.
Что есть «задача»?
Задача есть task. =) Терминология из спецификации.
Яблоко есть apple. Есть есть eat.
Я не про перевод термина спрашивал, а про суть его.
Суть термина разъясняется в спецификации, о чём я и написал.
В какой из спецификаций? Ссылку можно?
автор опроса, чисто случайно, не преподает в каком-нибудь советском вузе?

очень характерная формулировка вариантов ответа, нацеленная исключительно на то, чтобы запутать, сбить с толку и прочим образом унизить опрашиваемого по сравнению с собой, но никак не на выяснение уровня его знаний.
Доки Intel читал, ваших вариантов ответов не понял…
А вот интересно, какие распространённые ОС реально пользуются TSS?
А разве можно не пользоваться? Каким иным способом можно реализовать вытесняющую многозадачность в защищенном режиме архитектуры i386?
Можно сохранять/загружать регистры и менять указатель на таблицу страниц в обработчике прерывания таймера.
Вот это, блин, вброс! Жаль не в пятницу =)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории