Как работает компьютер абстрактно
Обновлено: 21.11.2024
Абстракция — это фундаментальный принцип в некоторых областях информатики. Это ключевой аспект проектирования объектно-ориентированных языков программирования и интерфейсов прикладного программирования. Это также одна из наименее понятных идей в программировании, отчасти по семантическим причинам.
Абстракция обычно определяется как извлечение релевантной информации из большого набора данных, где использование абстракции позволяет инженерам и другим специалистам упростить кодовую базу.
Techopedia объясняет абстракцию
Причина, по которой это сбивает с толку многих людей, заключается в том, что абстракция семантически «не похожа» на то, чем она является. Это звучит как что-то более расплывчатое, потому что именно так мы используем это в общем языке.
Однако в информатике абстракция обычно означает упрощение и отделение сигнала от шума, чтобы сделать программирование более эффективным и действенным.
Объектно-ориентированное программирование
В объектно-ориентированном программировании, одном из наиболее ярких примеров абстракции компьютерных наук, абстракция часто работает за счет использования объектов в коде. Эти объекты, являющиеся переносимыми контейнерами атрибутов и повторяемых структур кода, абстрагируются от функций, которые в противном случае могли бы быть запрограммированы линейным образом.
Другими словами, средством абстракции являются объекты в коде, которые берут целую кучу базового кода и делают его переносимым и воспроизводимым.
Класс
Другим средством абстракции в объектно-ориентированном программировании являются классы. Классы объектов дополнительно стратифицируют принцип повторяющегося использования и автоматизированного распространения кода.
Например, в этом удобном руководстве для неспециалистов в Stackify автор рассказывает о том, как кофеварка является хорошим примером того, как объектно-ориентированное программирование использует абстракцию, чтобы выполнять так много трудоемкой работы. с плеч программиста.
Вместо того, чтобы создавать с нуля виртуальный объект, такой как кофеварка, вручную программируя каждую строку его функций, инженеры могут вызвать объект «кофеварка» и подключить к нему «зерна», «кофейные чашки» и т. д. , чтобы получить тот же результат с гораздо меньшими затратами.
На самом деле, абстракция, используемая в объектно-ориентированном программировании, — это лучший способ показать, насколько сильно эти идеи поддерживают виртуальные «миры». более эффективно моделировать реальный мир, физический мир и в то же время оптимизировать эффективность рабочего времени программиста.
И то, и другое — потрясающие возможности, которые ООП привнесли в мир технологий.
Интерфейс прикладного программирования
Еще один современный яркий пример абстракции иллюстрируется интерфейсом прикладного программирования (API), который так распространен в кроссплатформенных системах.
API – это ключевой способ предоставления этой абстрагированной информации, чтобы сторонним третьим сторонам не нужно было так много знать о встроенной кодовой базе. В очень простом смысле API-интерфейсы — это «соединители» — стороны будут использовать API для подключения кода одного приложения к коду другого приложения, для передачи наборов данных через кросс-платформенную среду и обеспечения автоматизированного взаимодействия этих программ р>
Таким образом, API функционирует как ключевой инструмент абстракции, встраивая те объектно-ориентированные принципы, которые показывают "внешней программе", что делает "внутренняя программа".
Подводя итог, абстракция — это просто процесс повышения универсальности информации о кодовой базе за счет упрощения ее представления во внешних системах. Однако это привело к значительному техническому прогрессу, предшествующему другим видам основных изменений, таким как переход к виртуализации сетей.
Почему это? AP говорит об иерархии абстракций. На этой странице показан некоторый уровень детализации, но также выделены два важнейших барьера абстракции: между аппаратным и программным обеспечением и между аналоговым доменом и цифровым доменом.
Почему здесь? Эта страница является своего рода предварительным просмотром предстоящих аттракционов. Это короткая страница, на которой нечего делать, кроме как прочитать ее и перейти к полной истории.
PG, о модуле: весь этот модуль много читает и очень мало делает. Конечно, это верно для большинства школьных курсов, так что, хорошо это или плохо, дети к этому привыкли. Мы думали об этом и (в настоящее время) не нашли решения. Мне очень нравится весь контент. Я также очень хочу, чтобы весь блок был дополнительным. Для меня это похоже на второй курс компьютерных наук, а не на курс привлечения студентов. Для тех, кто хочет увидеть, что находится под капотом /компьютера/ — интересы компьютерной инженерии — это должно быть доступно, но если бы не CB, я бы оставил все это необязательным.
BH, в лаборатории: В этой лаборатории практически нечего делать, и если бы мы могли улучшить ее, было бы здорово, но я не понимаю, как это сделать.
MF: слегка подчистите текст, чтобы сделать его более лаконичным
В Разделе 4 "Иерархия открытых протоколов" вы видели, что программное обеспечение Интернета организовано на нескольких уровнях абстракции, при этом прикладные программы (например, ваша программа электронной почты) находятся на самом высоком уровне, а сетевые аппаратные протоколы, такие как WiFi и Ethernet, - на самом высоком уровне. самый низкий уровень. Помните, что более высокие уровни ближе к тому, о чем хотят думать пользователи; более низкие уровни ближе к тому, как работают машины.
Как и в Интернете, внутренняя работа компьютера также имеет уровни абстракции.
В этом лабораторном занятии вы узнаете об уровнях абстракции в компьютерном программном и аппаратном обеспечении.
На этой странице вы узнаете, как получить обзор трех групп (доменов) уровней абстракции.
Существует множество уровней абстракции работы компьютеров. Здесь они организованы в три всеобъемлющих домена:
Разные люди могут рисовать эту диаграмму немного по-разному, поэтому не пытайтесь запомнить все уровни. Ключевые уровни абстракции, о которых следует помнить, — это программное обеспечение, цифровое компьютерное оборудование и базовые компоненты аналоговых схем.
Домен программного обеспечения
- приложения, которые вы пишете и используете
- языки программирования, используемые для их написания
- библиотеки полезных функций, которые скрывают беспорядочные детали
- операционные системы, взаимодействующие с оборудованием
Программное обеспечение – это абстракция — способ думать о компьютере, не задумываясь о том, как он работает.
Точно так же водитель автомобиля действует на высоком уровне абстракции, используя педаль тормоза. Пока инженеры и механики правильно спроектировали и построили автомобиль, водителям не нужно знать подробности о принципе работы тормозной системы — они просто используют ее на высоком уровне.
Цифровой домен
- Архитектура – это инструкции, которые программное обеспечение может отправлять и понимать аппаратное обеспечение.
- В компьютере есть компоненты (например, память, процессоры, видеокарты и т. д.), которые реализуют архитектуру.
- Эти компоненты состоят из интегральных схем (чипов) в виде черных прямоугольников, которые вы видите на этой печатной плате.
- Эти интегральные схемы построены на основе логических вентилей, фундаментальных строительных блоков, реализующих булевы функции.
Вы узнали о логических функциях в Модуль 2 Лабораторная работа 3: Принятие решений с помощью предикатов.
На разных уровнях абстракции в программном обеспечении каждый уровень абстракции представляет собой отдельную часть программного обеспечения, но уровень абстракции в цифровом домене представляет собой четыре способа представления одного и того же физического объекта.
Аналоговый домен
Логические вентили, представляющие собой самый низкий уровень абстракции цифрового домена, оперируют единицами и нулями. В физической реальности эти логические элементы построены из транзисторов, типа компонента схемы. Транзисторы не похожи на выключатели света, которые либо включены, либо выключены. Могут быть промежуточные значения (например, «только 23% включено»). Таким образом, инженеры-электрики должны думать о законах электроники при проектировании цифровых схем, чтобы не возникало промежуточных значений.
Цифровое и аналоговое — это две противоположности. Цифровая означает информацию, представленную в виде единиц и нулей. Аналоговый означает информацию, представленную сигналами, которые непрерывно меняются (то есть, включая промежуточные значения).
Если бы мы заглянули внутрь мобильного телефона и попытались понять все его различные части и то, как они работают вместе, чтобы мы могли звонить и отправлять текстовые сообщения друг другу, мы очень быстро были бы перегружены сложной информацией. То же самое с любой системой.Представьте, что вы пытаетесь понять, как работает автомобильный двигатель, пытаясь разобраться в каждом отдельном компоненте, или пытаетесь понять, как работает телевизор, разбираясь с каждой частью телевизора, когда мы снимаем заднюю крышку, или пытаемся понять, как летает самолет. . То же самое с любой компьютерной системой. Существуют буквально тысячи различных частей, и мы не можем понять всю инженерную сложность каждой из них. По этой причине нам необходимо упростить систему. Нам нужно создать модель того, что мы можем видеть, чтобы мы могли продолжить наши знания, не увязая в слишком большом количестве деталей.
Упрощенная модель также известна под причудливым словом "абстракция". Мы берем сложную систему и строим ее абстракцию, чтобы мы могли продвигать наши знания дальше, не беспокоясь о деталях. Когда можно построить абстракцию того, как работают компьютеры. Вот оно:
Эта абстракция показывает нам много информации об очень сложных компьютерных системах:
- устройства ввода (например, микрофон, клавиатура или мышь) собирают данные из реального мира
- они передают эти данные в ЦП
- ЦП отправляет данные на устройства вывода (например, мониторы или динамики)
- ЦП отправляет данные в ОЗУ, а также возвращает данные и программные инструкции из ОЗУ
- ОЗУ отправляет данные в ЦП и от него, но также ОЗУ отправляет данные и получает данные от устройств хранения (например, жесткого диска)
- ЦП не работает напрямую с программами на устройствах хранения. Работает напрямую только с данными в оперативной памяти.
- если ЦП хочет сохранить данные или получить обратно данные с устройства хранения, все данные должны проходить через ОЗУ.
То, что на самом деле очень сложно, теперь мы можем начать понимать, и все потому, что мы использовали абстракцию того, что было реальным, чтобы создать упрощенную модель, которую мы можем понять. Если вы будете помнить о приведенной выше модели, то обнаружите, что она на самом деле применима почти ко всем известным вам компьютерным системам, включая мобильные телефоны, планшеты, ноутбуки и даже к вещам, которые могут не показаться компьютерными системами, например к управляемой компьютером микроволновой печи. духовка или стиральная машина, охранная сигнализация или фирменная сигнализация.
В1. Отметьте, является ли каждое устройство устройством ввода, устройством вывода или устройством хранения. Первые два были сделаны за вас. Если вы не уверены ни в одном из них, воспользуйтесь Интернетом или учебником, чтобы помочь вам.
Вопрос 2. Что означает ЦП?
Q3. Зачем компьютерам нужны запоминающие устройства?
В4. Иногда компьютеры начинают вести себя странно, чего быть не должно. Один из советов, когда это происходит, — выключить компьютер, а затем снова включить. Объясните, почему дается этот совет.
Q5. Почему два одинаковых компьютера могут работать с разной скоростью, если у одного компьютера в два раза больше оперативной памяти, чем у другого?
В6. Когда вы читаете об оперативной памяти и устройствах хранения, вы можете встретить термины «энергозависимая» и «энергонезависимая» память. Что они означают?
Q7. Поищите слово «кэш» в Интернете (произносится как «наличные»). Что такое кеш?
В8. Что подразумевается под загрузкой компьютера?
В9. Компьютеры поставляются с ПЗУ. Внутри ПЗУ есть специальная программа, которая запускается при загрузке компьютера. С помощью Интернета узнайте, какие работы выполняет эта специальная программа.
Q10. Провести исследования. Узнайте, что такое двухъядерные, четырехъядерные и многоядерные процессоры и почему они важны.Чуть больше года назад я написал: "Стоит ли вам изучать C, чтобы "узнать, как работает компьютер"". Это было немного спорно. Обещал два поста. У меня ушел год, но вот первый.
В этом посте я утверждал, что C не «работает как компьютер», а, скорее, в соответствии с концепцией, называемой «абстрактной машиной C». В каком-то смысле это похоже на то, как работают компьютеры, но когда вы пишете на C, вы пишете для абстрактной машины, а не для самого компьютера. Однако вот в чем хитрость: абстрактная машина C не определяет каждый отдельный аспект того, как происходят вычисления. Поэтому иногда вы можете писать код двумя разными способами, которые, по мнению абстрактной машины C, эквивалентны, но не эквивалентны по производительности. Это означает, что, даже если вы согласны с моей первоначальной точкой зрения, вам все равно нужно знать границы этого определения и использовать эти границы важными способами.
Давайте начнем с выдуманного примера, а затем покажем, как это происходит в реальном коде. Представьте, что у нас есть очень простой язык программирования, построенный на абстрактной машине. Он определяет только семантику умножения двух 32-битных целых чисел. Он также игнорирует такие вещи, как переполнение. Вы можете написать программу типа «3 * 4», и эта машина скажет: «Эй, результат равен 12». Давайте также представим, что у нас есть очень простой компьютер: у него есть единственная инструкция «сложить два числа вместе». Это занимает один такт для выполнения.Если бы мы написали компилятор для этой машины и не применяли никаких оптимизаций, он бы выполнил «4 + 4», а затем взял бы этот результат и прибавил к нему четыре. У нас есть две операции добавления, поэтому наша программа занимает два такта.
Представим, что вышла новая версия нашего компьютера. Он добавляет новую инструкцию: умножение. Это также занимает один цикл, но может напрямую умножать два числа. Наш компилятор добавляет новую серверную часть, и при компиляции нашей программы «3 * 4» для этой новой причудливой машины он выдает одну инструкцию умножения. Теперь наша программа занимает один такт.
Теперь представьте себе новую версию нашего компилятора. Он может делать «постоянное складывание», оптимизацию. Наша программа вообще не производит вычислений, а только напрямую выводит «12». Теперь это означает, что наша программа не выполняет никаких циклов на обоих аппаратных компонентах.
Все в порядке?
Да! Машина определяет только то, как оператор * работает с числами в смысле «какое число выходит с другой стороны». Он не указывает, как на самом деле выполнить эту задачу. Компиляторы нашего маленького языка вольны реализовывать детали любым удобным для них способом, если они соблюдают правила абстрактной машины. Другие детали - честная игра. Пока программа «3 * 4» производит «12», остальная часть вычислительного процесса на самом деле не имеет значения.
Вот как вы можете писать «переносимый» код, который является переносимым в одном смысле, но совсем не переносимым в другом смысле. Пока вы соблюдаете правила абстрактной машины, вы гарантированно (конечно, мы живем в мире без ошибок компилятора) получите правильный результат. Если это занимает слишком много времени или вообще не требует времени, это, строго говоря, не проблема языка.
Если эта идея кажется вам глупой, уверяю вас, она реальна. Например, давайте рассмотрим реальный язык C и некоторое реальное оборудование, в частности, x86.
Представьте, что у нас есть массив массивов, четыре на четыре: (markdown дает мне заголовок, хотя мне это не нужно, извините за странность)
Есть два наивных способа его обработки: построчно:
или столбец за столбцом:
Вот интересный вопрос: один из них быстрее другого?
При таком маленьком размере, скорее всего, нет. Но есть способ сделать это быстрее, чем любой из этих способов, и он называется «блокировка» или «плитка». Это означает, что вы каждый раз обрабатываете подмножество или «блок» массива. Что-то вроде этого:
В x86 во многих случаях это значительно быстрее. Это связано с тем, как ЦП кэширует информацию. Для получения дополнительной информации см. эту страницу от Intel, включая визуализацию, которая, вероятно, лучше моей.
В связи с этим возникает интересный вопрос: является ли этот код переносимым? Представьте себе машину, у которой не было поведения кэша, характерного для чипов x86. Этот код будет работать на них, но может быть в 14 раз медленнее. Строго говоря, эта программа является «портативной» в том смысле, что в конце вы получите правильные вычисления, но, возможно, эта скорость является частью пользовательских требований для успешной работы этого программного обеспечения, поэтому сверхмедленность означает, что « не работает» в соответствии с этими требованиями, хотя с точки зрения языка программирования все в порядке.
Поскольку абстрактная машина C очень тонкая, такие детали могут иметь большое значение, как мы видели. И вот тут-то и появляется хорошая часть мема «C учит вас, как работает компьютер». Поскольку машина тоньше, вы можете узнать больше о деталях, и пока они не являются деталями, которые C абстрактная машина заботится о них, эксплуатируйте их. И есть веская причина, по которой я упомянул выше оптимизирующий компилятор; это также работа авторов компиляторов, чтобы понять разницу между данным компьютером и абстрактной машиной C, а затем использовать эту разницу, чтобы ваш код работал как можно быстрее. Но это действительно стирает грань между абстрактной машиной и физической машиной. И именно поэтому мы все постоянно спорим об этом в Интернете.
У меня есть третий пост, чтобы завершить эту серию. Надеюсь, это не займет у меня еще год, но никаких гарантий…
Читайте также: