Объясните пожалуйста. Если к примеру ядро unix написано на Си, а процессор понимает только двоичную систему счисления, то как тогда всё это работает?
Процессор же не может понимать компилятор который тоже написан на яп.
- Вопрос задан более трёх лет назад
- 2527 просмотров
8 комментариев
Простой 8 комментариев
процессор работает на машинных кодах и на микрокоде, которые создаются из языка ассемблера, потому что ни на микрокоде ни на машинном коде нигде не пишут, у каждой новой модели процессора практически свой язык ассемблера
Olek1, процессор работает на электричестве. Любой язык программирования — абстракция над электрическими сигналами процессора/памяти.
процессор работает на электричестве.
Как включить виртуализацию в Windows 10
почитайте про модель OSI, уровни разные бывают, и проведите аналогию
там работает сумматор, который не умеет вычитать, делить, или умножать, он может только складывать, путём складывания и делается даже умножение или деление, деление ктото рассказывал что самый энергозатратный процесс
Вообще-то, у процессора всегда существует система команд, чтобы мог понимать, как выполнять ту или иную операцию. А операционные системы содержат набор последовательностей команд. А язык программирования необходим для задания последовательностей выполнения. А компилятор переводит написанный программистом код в последовательность команд, понятный для процессора.
Чтобы процессор мог выполнять код, всегда надо компилировать код программы в последовательность двоичных кодов. Нельзя так просто взять и скормить ядро Unix на Си процессору. Написанное на СИ ядро всего лишь общее, как должна работать операционная система вне зависимости от архитектуры процессора с его набором команд.
Компилятор — это программа, где уже задана последовательность выполнения команд, для перевода исходного кода на Си в машинный код. Компилятор тоже не появился на пустом месте, он развивался вместе с языками программирования. Нет языка программирования — нет компилятора. Если раньше программисты писали алгоритмы и рисовали на черновиках, а затем переводили вручную в машинный язык (перфокарты и перфоленты), то сейчас компиляторы делают сами, а программисту остаётся только проверять результат выполнения.
Мне кажется, что вы пропустили целые разделы прежде, чем задавать подобные вопросы. Вы должны изучить, как вообще работают процессоры и микроконтроллеры. Потом изучить язык ассемблера и системного программирования. А потом изучить вопрос, что такое вообще программа и с чем её едят.
Михаил Усоцкий, может вы подскажите материалы для чтения ?
опкод вроде самая мелкая единица в этой цепи
Управление частотой процессора в Windows 10?
Moro Zota, книга по процессорам: Современные микропроцессоры Корнеев В.В., Киселев А.В. Там достаточно хорошо разъясняют, как работают процессоры, в том числе и современные. Чтобы поближе понять, как работает процессор, можно потренироваться на ассемблере (подойдёт любая книга по ассемблеру для x86/x86-64).
Вроде ещё на Linux есть специальная программа-эмулятор, которая визуально показывает, как меняется состояние процессора. Также можно потренироваться на современных микроконтроллерах (по сути, они тоже являются процессорами, только адаптированы для узких задач) типа MCS51 или ARM. Любой написанный код, скомпилированный и загруженный в устройство становится программой.
А чтобы продвинуться дальше, чтобы понять, что такое операционная система, то лучше будет потренироваться на микроконтроллерах ARM что-то из семейства Cortex-M. Для него есть исходный код операционной системы реального времени RTOS. Она достаточно маленькая, чтобы разобраться в базовых частях. А как освоите, можно попробовать осилить Minix вместе с книгой Современные операционные системы Эндрю Таненбаума уже для компьютера.
Решения вопроса 1
процессор понимает только небольшой набор команд, которые описываются архитектурой процессора. также архитектурой описываются среда исполнения команд, наличие и размерность регистров, способы доступа к памяти и прочим внешним устройствам.
поток команд исполняемых процессором с трудом понимает человек-програмист. лет эдак много назад были програмисты, могущие написать алгоритм в командах проуцессора.
но сейчас этот уровень разумности практически исчез и его знают считанные сотни людей, создающие либо процы либо компиляторы к ним.
для адекватного понимания и редактирования программы пишут на языках, которые специально созданы для «человека» 🙂
для исполнения в процессоре программы из «человеческого языка» компилируют в исполняемый двоичный код.
компиятор тоже написан на «человеческом языке» и потом скомпилирован в исполняемый файл.
Ответ написан более трёх лет назад
Нравится 12 5 комментариев
поток команд исполняемых процессором с трудом понимает человек-програмист.
да прям уж с трудом, команды очень простые на самом деле, процессор это не настолько сверхкосмическая технология
лет эдак много назад были програмисты, могущие написать алгоритм в командах проуцессора.
Ассемблер конечно не машинные коды, но очень близок и программистов на нем достаточно, только для десктопов сейчас писать на нем смысла немного, а вот для всяких встраиваемых контроллеров и прочей такой дребедени вполне используется
но сейчас этот уровень разумности практически исчез и его знают считанные сотни людей, создающие либо процы либо компиляторы к ним.
гораздо больше
лет эдак много назад были програмисты, могущие написать алгоритм в командах проуцессора.
но сейчас этот уровень разумности практически исчез
Чувак, 25 лет назад я, будучи школьником, написал ассемблер (программу) в машинном коде. И многие мои знакомые делали тогда что-то подобное. Это было в порядке вещей. Уверяю тебя, этот уровень разумности никуда не исчез.
«в советское время и трава была зеленее !!» 🙂 так и думал что фраза слишком короткая и кривая.
да прям уж с трудом, команды очень простые на самом деле, процессор это не настолько сверхкосмическая технология
ну распечатай бинарь в hex-коде и попробуй его прочитать 🙂
даже в дебагере ассемблерное представление машинных кодов придется долго допиливать для понимания.
как минимум надо расставить текстовые имена переменным и функциям, а это неплохо жрет время.
даже из активного embedded ассемблер уже ушел и используется только для дебага.
Игорь, тогда приведи пример проекта на несколько тысяч строк на ассемблере, сделанного в последние года 🙂 мне действительно интересно если еще такое, ибо выпал из той среды.
jcmvbkbc вполне верю, ибо в те времена других средств разработки практически не было.
в универе были стандартные лаболаторки, на которых надо было продумать алгоритм, написать ассемблерную прогу, правильно распихать переменные между памятью и регистрами, преобразовать ассемблер в машинные коды. ввести все енто в 16ричном в УМПК-80 и запустить с аппаратным дебагом.
иэх веселые *опы вылезали на элементарнейших алгоритмах.
но сейчас совершенно другие времена.
jcmvbkbc, а что ты там писал? транслятор мнемоник в байт-код? Так это пофакту «найти-и-заменить».
написать алгоритм в командах проуцессора
а что ты там писал?
Валентин, какая разница? Алгоритм? — алгоритм. В командах процессора? — в командах процессора.
Так это пофакту «найти-и-заменить».
так это по факту — обесценивание. Но понимаешь в чём дело, когда у тебя из средств разработки — один только шестнадцатиричный редактор, всё что ты можешь написать — это программа в машинном коде. Нет выбора.
Ну и если немного подумать, так любая программа — это «найти и заменить» в некотором смысле.
Ответы на вопрос 6
Если к примеру ядро unix написано на Си, а процессор понимает только двоичную систему счисления, то как тогда всё это работает?
Ответ написан более трёх лет назад
Нравится 1 3 комментария
мне кажется там не всё на Си написано а много на ассемблере всё что связано с процессором, потому что там нужна максимальная скорость
мне кажется там не всё на Си написано а много на ассемблере всё что связано с процессором, потому что там нужна максимальная скорость
это было в те времена.
тогда сначала компиляторы не достаточно оптимально выводили код.
а потом и люди не могли поверить, что компиляторы достаточно хороши и продолжали лабать вручную.
потом просто было много когда и его было проще поддерживать чем переписывать с нуля.
сейчас бы то же самое вполне прекрасно можно было бы реализовать на чистом С с минимальнейшими вкраплениями ассемблера.
в Linux/FreeBSD не так уж много ассемблерного кода.
Компьютерный псих
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать

далеко не всегда правильно ))
(по тому так часты патчи/апдейты во всех системах)
однако вы не верно циклитесь на языке «на котором написана ОС».. после того как «ОС написана» — она скомпилирована
ps ах да.. компилятор, перед тем, как его стане возможно запускать — тоже компилируется. любая программа компилируется, что бы стать запускаемой
есть особый случай — jit-компиляция (обычно это означает компиляцию «на лету») (node.js, .Net).. а еще есть «интерпретация» (js, python)
Ответ написан более трёх лет назад
Нравится 1 6 комментариев
А еще когда то был .COM, являющийся сырым сегментом памяти из реального режима, за вычетом первых 256 байт, которые формировала ОС.
Александр, это уже из серии «когда то деревья были большими». да, этот бренд, в какой то мере, сохраняет совместимость, с сегментированной памятью по сей день. но это не что стоит изучать ))
Шарпер, Ну, кто его знает. Самый распоследний i9 до сих пор стартует из реального режима.
Александр, эмм. сколько вакансий в топе hh.ru где это будет первым фактором? ))
ps если найдете хоть одну в первой десятке — да, я погорячился ))
но не по тегам i9+asm.. но, допустим «программист».. ;))
Шарпер, если мыслить только вакансиями, мы бы до сих пор работали на строительстве пирамид =)
Александр, сам обучался с асма.. и компилеров )).. даже был в больших интересных проектах )) . которые не взлетели (Ульяновский Центр Микроэлектроники) даже прикольно, что в отделе, был отдан в подручные, мужику, который писал интерпретатор BIOS для «не совсем совместимой платформы» — там была рабочая станция, «Афтограф 1840» содранная с СЕКАПы (а не с писюков). со многими вытекающими последствиями
. однако, интерпретатор был написан и запущен, (я наваял нн-ое количество демок на турбопаскале, котороые тоже были и приняты, и приложены). но и че толку?
ща вот «байкал» впаривают госструктурам
Системный администратор со стажем.
Если к примеру ядро unix написано на Си, а процессор понимает только двоичную систему счисления, то как тогда всё это работает?
Работает очень просто- процессор исполняет машинный код.
Машинный код содержит инструкции — указания процессору выполнить определенные операции над данными и сами данные.
Любая программа написанная на любом языке преобразовывается в машинный код.
Язык программирования это удобный для человека язык, а на выходе — всегда машинный код.
Ответ написан более трёх лет назад
Не машинный код, а микрокод, машинный код уровнем выше, инструкции процессору может содержать и язык ассемблера
Olek1, Чем отличается микрокод от машинного кода? Первый раз слышу такой термин.
инструкции процессору может содержать и язык ассемблера
Любой язык даже PHP содержит инструкции процессору.
Но процессор понимает только машинный код.
Чем отличается микрокод от машинного кода?
Не углублялся, но интересно
Olek1, АртемЪ,
Современные процессоры работают по микрокомандному принципу. Один из блоков переводит команды машинного кода в команды для всех остальных блоков по определённым правилам. Вот эти правила, которые хранятся в особо быстродействующем ППЗУ — это и есть микрокод.
Микрокод позволяет ускорить работу процессора ценой удлинения конвейера, и позволяет программно запатчивать ошибки в процессорах. Почему Meltdown не запатчили? Потому что это подслушивание по сторонним каналам (никакой ошибки в логике нет), проблема во внеочередном исполнении команд (а вот не в курсе, контролируется ли это микрокодом), и в некоторых процессорах Meltdown если не закрыли, то облегчили.
Вот эти правила, которые хранятся в особо быстродействующем ППЗУ — это и есть микрокод.
Ну что такое микрокод в плане того, что это прошивка процессора, его внутренний код, я в курсе.
Я не могу понять как можно подать процессору микрокод на исполнение.
Olek1, не всегда и не везде. У RISC-процессоров нет микрокода. В качестве примера таковыми являются процессоры MIPS. Так как система команд у них весьма простая, что можно обойтись всего лишь исполнительными блоками. А вот у CISC-процессоров, да, есть микрокод.
Но это всё связано с историческим аспектом. Когда появились первые процессоры x86, Motorolla 6800×0 инженеры старались делать наборы команд так, чтобы не занимать много памяти (тогда память была совсем крошечной). Но платой стал то, что каждый микрокод всегда выполнялся за несколько тактов за несколько микроопераций.
Например, атомарная операция со значением из памяти (упрощённо) одной командой: загрузка в аккумулятор, арифметическая операция над аккумулятором, загрузка в память. В RISC-процессорах такого нету. Для этого надо задействовать все три команды.
В современных процессорах x86/x86-64 используются изощрённые методики по ускорению выполнения операций. Но платой стал огромный декодер команд. Но зато большая часть простых и средних команд можно выполнять за такт или даже несколько операций за такт. Правда в первое время процессоры сильно страдали перегревом.
В процессорах Core iX используется несколько хитрый приём: декодированные команды сохраняются в кэш-память, и остаются до востребования. Таким образом поток команд уже по нескольку раз не приходится декодировать, поступают сразу в исполнительные блоки. Поэтому инженеры и сумели снизить теплопакет.
P.S. В качестве дополнения могу сказать, что существуют и другие типы процессоров помимо RISC и CISC. Например, VLIW. Это, по-сути дальнейшее развитие RISC-процессоров с EPIC-архитектурой. Имеет все возможности CISC-процессора, но нет декодера команд как такого и имеет очень длинное командное слово вместо кода операции. И это всё поступает сразу напрямую в исполнительные блоки.
Такой процессор греется куда меньше. Но и плотность кода ниже (требуется больше памяти) и очень сложный компилятор (надо сказать, что компилятор для VLIW-процессоров — самый сложный из всех). Но плюсом станет то при хорошей оптимизации компиляции хорошая производительность и низкие температуры.
Источник: qna.habr.com
Процессор
Процессор (сокращенно ЦП – центральный процессор или международное CPU) – это главный вычислительный элемент в компьютере. Фактически он является сердцем компьютера. На нем лежит вся работа по обработке данных. Остановилось сердце – умер компьютер.
Работа процессора, в некоторой степени, действительно напоминает работу сердца, т.к. он работает под управлением электронных импульсов, так называемых тактов. Тактовая частота – это важнейшая характеристика процессора, она измеряется в гигагерцах (Ггц). От нее зависит скорость и производительность вашего ПК. Выше тактовая частота, значит быстрее скорость вычислений. Современные процессоры выполняют несколько миллионов операций в секунду.
Физически процессор представляет собой металлическую пластинку со множеством ножек (выводов), устанавливаемую в так называемый сокет (разъем) материнской платы. Внутри пластины находится кристалл полупроводника, содержащий до 2 млрд. логических элементов — транзисторов. Их размер настолько мал, что они умещаются на кристалле площадью 4-6 см2.
Основными производителями процессоров являются конкурирующие друг с другом компании Intel и AMD. Независимо от производителя процессор обладает характеристиками, от которых зависит его быстродействие.
Основные характеристики процессора
Процессор обладает целым рядом характеристик, но мы рассмотрим самые главные, которые нужно знать компьютерному чайнику. Как правило, их указывают в характеристиках компьютера в магазине.
Тактовая частота. Один из самых главный параметров процессора, обозначающий количество тактов в секунду и в зависимости от модели процессора может доходить до 3Ггц и выше.
Количество ядер. Ядро – это главный вычислительный модуль процессора. Современные процессоры заключают в одном корпусе от 2 до 8 вычислительных ядер. Такой подход позволяет увеличить производительность ЦП, за счет распределения обработки данных по ядрам. Для простоты понимания можно сказать,что в одном корпусе размещены несколько процессоров.
Выбирая компьютер для покупки, сразу определитесь, для чего он вам нужен. Если только для офисных задач и интернета, то покупайте компьютер с двухядерным процессором. Для игр, обработки видео и трехмерной графики лучше будет компьютер с 4 или 6 ядрами.
Поделиться.
Источник: pc-school.ru
Связь между ЦП и ОЗУ, как это происходит?
Если вы когда-нибудь задумывались, что это за процесс, за которым следует процессор и Оперативная память что он назначил для получения данных и инструкций, которые он должен выполнить, то вам повезло, потому что в этой статье мы собираемся объяснить, что это за процесс связи между двумя наиболее важными элементами ПК, с которыми общаются разное.
В этой статье мы не будем объяснять, какой тип оперативной памяти лучше or спецификации каждого , но процессор связывается с ним, чтобы иметь возможность выполнять программы.
Причина почему мы используем внешнюю память потому, что количество транзисторов, необходимых для хранения информации, не поместится в пространстве процессора , поэтому необходимо использовать память RAM, внешнюю по отношению к процессору, для хранения инструкций и данных, которые они будут выполнять.
Зачем процессору связь с ОЗУ?
Стадия, на которой ЦП берет следующую инструкцию для выполнения из ОЗУ, называется «выборкой» и является одним из трех этапов, составляющих цикл команд: Fetch-Decode-Execute, о котором мы поговорим только в этой статье о первой, а о второй два будут оставлены на другой раз, так как оперативная память не вмешивается в них, кроме как для записи результата обратно.
- Счетчик команд: ПК указывает на следующую строку памяти, где находится следующая инструкция процессора. Его значение увеличивается на 1 каждый раз, когда завершается полный цикл команд или когда команда перехода изменяет значение программного счетчика.
- Регистр адреса памяти: MAR копирует содержимое ПК и отправляет его в RAM через адресные контакты ЦП, которые соединены с адресными контактами RAM.
- Регистр данных памяти : Если инструкция прочитана, то ОЗУ будет передавать через свою шину данных содержимое адреса памяти, на который указывал MAR.
- Реестр инструкций: Инструкция копируется в регистр инструкций, откуда блок управления расшифровывает ее, чтобы знать, как выполнить инструкцию.
Что такое память DRAM?
Наблюдения и советы этой статьи мы подготовили на основании опыта команды тип памяти, используемой для RAM как системное ОЗУ, так и видеопамять или видеопамять. Память DRAM или 1T-DRAM . В этом типе памяти каждый бит хранится в комбинация конденсатора и транзистора , а не в нескольких транзисторах, таких как SRAM, отсюда и название 1T-DRAM.
Вся память RAM, используемая в настоящее время в ПК: DDR4, GDDR6, HBM2e, LPDDR4 и т. Д., Является памятью типа DRAM, в то время как внутренняя память процессоров, кеши регистров и блокноты относятся к типу SRAM.
Указанная комбинация конденсатора и транзистора называется Bitcell , когда конденсатор битовой ячейки заряжен, интерпретируется, что информация, содержащаяся в этой битовой ячейке, равна 1, когда она не заряжена, она интерпретируется как 0.
- Первая половина битов выбирает строку, к которой мы хотим получить доступ
- Вторая половина битов адресации содержит столбец, к которому мы хотим получить доступ,
Для этого между матрицей битовых ячеек и шиной адресации существует двоичный декодер, который позволяет выбрать соответствующую битовую ячейку.
Контакты для связи с RAM
Чтобы получить доступ к ОЗУ, ЦП использует ряд контактов, которые позволяют ему получить доступ к содержимому Оперативная память и даже изменить его . Для этого вам сначала нужно определить, где находятся данные или где мы хотим ими манипулировать, а затем передать их в определенном направлении. Для этого используются два разных типа штифтов.
- адресация штифты : Обычно обозначается от A0 до AN, где N — количество контактов и равно количеству бит адресации, которое всегда равно 2 ^ N.
- Контакты данных : Здесь данные передаются в оперативную память и из нее.
- Запись разрешена: Если вывод активен, передача данных осуществляется в память, запись, с другой стороны, если она не активна, то в сторону процессора, чтение.
Если наша система имеет несколько микросхем памяти RAM, то первые биты адресации используются для выбора, к какой из микросхем памяти мы хотим получить доступ в модуле памяти DIMM. Также были случаи, когда адрес и контакты данных совпадали. Это связано с тем, что адресация и доступ к данным не выполняются одновременно.
Но чтобы понять, как работает адресация, мы должны рассмотреть основную часть электроники — двоичный декодер.
Двоичный декодер и его роль в связи с RAM
Двоичный декодер — это очень распространенная электроника, они заключаются в том, что из входных n битов вход выбирается из 2 ^ n различных возможностей. Он построен путем размещения n ворот НЕ в 2 ^ n И ворот.
В оперативной памяти адресация передается в двух циклах: сначала отправляется строка, к которой необходимо получить доступ, а затем столбец, а не одновременно.
Причина этого имеет очень простое объяснение: представьте, что у вас есть процессор с 16 битами адресации, подключенный к одной микросхеме памяти RAM. Если бы двоичный декодер был 16-битным, тогда потребовалось бы 16 вентилей НЕ и 65536 вентилей И. Напротив, 8-битный двоичный декодер имеет 8 вентилей НЕ и 256 вентилей И, что намного проще в реализации.
По этой причине обращение к оперативной памяти происходит в два этапа.
Банки памяти
Данные в ОЗУ не хранятся последовательно , но в разных банках на одном чипе, каждый из банков содержит массив битовых ячеек , но если мы хотим передать, например, n битов данных, нам понадобится n массивов битовых ячеек, каждый из которых подключен к выводу шины данных.
Использование несколько банков , в той же микросхеме памяти, позволяет выбрать несколько бит одновременно с одним доступом к памяти , поскольку все банки разделяют адресацию . Таким образом, если у нас есть 8 банков памяти, выбор конкретной битовой ячейки приведет к одновременной передаче данных в 8 банков памяти и из них.
Стандартный размер банков в памяти RAM составляет 8 бит, поэтому максимальный объем памяти при адресации всегда считается как 2 ^ n байтов. Фактически, это 16-, 32-, 64-битные шины и т. Д. Они передают данные нескольких последовательных адресов памяти, начиная с первого.
Связь между RAM и CPU
Связь между ЦП и ОЗУ зависит от того, что она выполняется правильно, то есть правильные данные отправляются в правильном направлении и в правильном банке памяти. Следовательно, вся оперативная память имеет окно возможностей, то есть время, в течение которого могут выполняться различные операции, которые должны выполняться в определенное время и в соответствии с этим процессом:
- Выберите столбец (Адресация)
- Выберите строку (Адресация)
- Передача данных.
- Строб доступа к колонке: Этот вывод активируется, когда мы указываем оперативной памяти, что указываем столбец, к которому хотим получить доступ.
- Строб доступа к строке :: Этот вывод активируется, когда мы указываем оперативной памяти, что указываем строку, к которой хотим получить доступ.
Обе операции можно резюмировать следующим образом:
- Операция чтения очень проста, для этого у вас должен быть неактивен вывод WE, чтобы указать, что данные идут из ОЗУ в процессор, указать строку, а затем столбец, чтобы информация поступала к процессору из ОЗУ памяти. .
- Операция записи несколько отличается, для этого вывод WE должен быть активен, но данные передаются не после выбора столбца данных, а после выбора строки и одновременно с выбором столбца, в котором находятся данные.
Благодаря этому вы уже можете получить приблизительное представление о том, как работает связь между процессором и его оперативной памятью.
Источник: itigic.com