Данные и программа в памяти компьютера хранятся в виде

Обновлено: 06.07.2024

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

Бинарные данные, или по другому биты, представляют собой ячейки памяти, в которых информация может храниться только в двух состояниях: 0 и 1. Файлы и программы, содержащие в себе миллионы бит информации, обрабатываются в центральном процессоре, или ЦПУ, который выполняет роль мозга у компьютера. И поскольку количество знаков для обработки растет в геометрической прогрессии, компьютерные разработчики находятся в постоянной борьбе между размером, ценой и скоростью.

Краткосрочная память

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

Наиболее распространенный тип ОЗУ - это ОЗУ динамического типа . Каждая ячейка такого устройства включает в себя маленький транзистор и конденсатор, которые хранят последнее состояние электрического заряда: 1 - заряд есть, 0 - заряд отсутствует. Данный вид памяти называется динамическим потому, что он не долгое время может сохранять заряд и его нужно время от времени заряжать, чтобы обезопаситься себя от потери данных.

Кэш хранилища

Время отклика со скоростью 100 наносекунды для современных компьютеров считается очень длительным. Для сверхбыстрых операций используется скоростное внутреннее кэш-хранилище, производимое из ОЗУ статического типа. Оно обычно состоит из 6 соединенных транзисторов, которым не нужна подзарядка. Статическая память является самой быстрой и, соответственно, самой дорогой. По своим размерам она также уступает динамической: занимает почти в 3 раза больше места. ОЗУ и кэш могут хранить данные, только пока они подключены к источнику питания. Для того, чтобы пользоваться данными после выключения устройства, их нужно перенести в долгосрочную память.

Долгосрочная память

Существует 3 вида долгосрочной памяти.

Магнитный носитель - самый дешевый вид - данные записываются на магнитную пленку вращающегося диска. Есть нюанс: так как диск должен вращаться, то нужно потратить намного больше времени, чтобы извлечь нужные данные. Время отклика таких устройств в 100.000 раз больше, чем у динамической ОЗУ.

Оптические носители , представленные DVD или Blu-ray, также используют вращающиеся диски, но уже с отражающим покрытием. Информация кодируется с помощью специальных светлых и темных красителей, пятна которых позже считываются с помощью лазера. Оптические носители довольно дешевые и их можно извлекать из компьютера. Однако их время отклика еще более длительное, а емкость меньше, чем у магнитных ОЗУ.

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

Надежна ли компьютерная память?

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

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

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

Информация, обрабатываемая в компьютере программным путем, называется данными.

Описанные принципы устройства и работы ЭВМ впервые были предложены в 1946 году американским ученым Джо­ном фон Нейманом. Эти принципы во многом сохранились и в современных компьютерах

Рассмотрите слайд презентации Принципы фон – Нейманаи запишите в тетрадь принципы устройства и работы ЭВМ

ЦОР Информационный обмен в компьютере (N 118488), Схема устройства компьютера (N 118497).

Все узлы компьютера выполняют определенную работу с информацией. А что же представляет собой сама информация в машине? Для ответа на этот вопрос «заглянем» внутрь машинной памяти.

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

У компьютера тоже есть два вида памяти: внутренняя (оперативная) и внешняя (долговременная) память.

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

Внешняя память -это различные магнитные носители (ленты, диски), оптические диски. Сохранение информации на них не требует постоянного электропитания.

Рассмотрите рис. 2.3 Структура внутренней памяти компьютера.


В каждой клетке может храниться в данный момент только одно из двух значений: нуль или единица. Использование всего двух знаков для представления информации называется двоичной кодировкой.

Запишите правило со стр. 37.

Данные и программы в памяти компьютера имеют вид двоичного кода.

Один символ из двухсимвольного алфавита несет 1 бит информации.

Ячейка памяти, хранящая один двоичный знак, называется «бит».

Бит — наименьшая частица памяти компьютера. Следовательно, у слова «бит» есть два значения: единица измерения количества информации и частица памяти компьютера.

Запишите следующее правило со стр. 37.

В одном бите памяти хранится один бит информации.

Битовая структура определяет первое свойство внутренней памяти компьютера - дискретность.Дискретные объекты составлены из частиц. Например, песок дискретен, так как состоит из песчинок. «Песчинками» компьютерной памяти являются биты.

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

Во внутренней памяти компьютера все байты пронумерованы. Нумерация начинается с нуля.

Запишите следующее правило:

Порядковый номер байта называется его адресом

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

Запись информации в память, а также чтение ее из памяти, производится по адресам

Рассмотрите слайд презентации Носители и устройства внешней памяти.

Назовите виды внешней памяти. Какие устройства к ним относятся?

Закрепление материала.

Сегодня на уроке вы узнали много нового, закрепить полученные знания нам поможет программа – тренажер «Устройство компьютера».Вам нужно расставить подписи к основным устройствам компьютера в соответствии с принципами архитектуры фон-Неймана и проверить правильность. Если не получится, не расстраивайтесь, а повторите еще раз.

Молодцы! Все справились с заданием! (Похвалить консультантов).

А теперь проведем небольшое соревнование, победители получат пятерку. (Учащиеся делятся на команды по 2 парты)

zerguzik2

Память компьютера организована в виде множества ячеек, в которых могут храниться значения; каждая ячейка обозначается адресом. Размеры этих ячеек и, собственно, типы значений, которые могут в них храниться, отличаются у разных компьютеров. Некоторые старые компьютеры имели очень большой размер ячейки, иногда до 64 бит в каждой ячейке. Эти большие ячейки назывались "словами

SuperMan973

Память организована в форме яичек где храниться основная информация

Новые вопросы в Информатика

1. Что такое 3D-графика? 2. Какие программы для 2D- и 3D-графики вы знаете? 3. Что вы знаете о программе SketchUp? 4. Чем отличается программа SketchU … p от других 3D-программ? 5. Какие шаблоны есть в программе?​

Выполните операции умножения с двоичными числами: а) 1012 * 1102 б) 101002 * 1012 в) 100112 * 112

Выполните операции сложения с двоичными числами: а) 10112 + 1012 б) 10112 +1112 в) 101012 + 1112

Найти в 2-ичной системе счисления значение выражения a + b * c, если a=3710, b=1310, c=510

1.Для какого вида представления чисел предназначен данный тип ячейки оперативной памяти? *К ВОПРОСУ ДАНА КАРТИНКА Беззнакового. Отрицательного. Положи … тельно. Знакового. Вещественного. 2.Отметьте правильных действия в алгоритме для получения дополнительного кода целого отрицательного числа. * АПрибавить к инверсному коду единицу. БИнвертировать его. ВЗаписать прямой код модуля числа. 3.Для каких чисел используется знаковое представление? * a)Для отрицательных целых чисел. б)Для вещественных чисел. в)Для неотрицательных целых чисел. г)Для рациональных чисел. СРОЧНО ПОЖАЛУЙСТА ДАЮ 25 БАЛЛОВ

Для какого вида представления чисел предназначен данный тип ячейки оперативной памяти? * Подпись отсутствует Беззнакового. Отрицательного. Положительн … о. Знакового. Вещественного. Отметьте правильных действия в алгоритме для получения дополнительного кода целого отрицательного числа. * АПрибавить к инверсному коду единицу. БИнвертировать его. ВЗаписать прямой код модуля числа. Для каких чисел используется знаковое представление? * a)Для отрицательных целых чисел. б)Для вещественных чисел. в)Для неотрицательных целых чисел. г)Для рациональных чисел. СРОЧНО ПОЖАЛУЙСТА ДАЮ 25 БАЛЛОВ

знайти найвищу температуру в лютому і вказати, якого числа її було зафіксованонаписать программу в с++​

Управление памятью – одна из главных задач ОС. Она критична как для программирования, так и для системного администрирования. Я постараюсь объяснить, как ОС работает с памятью. Концепции будут общего характера, а примеры я возьму из Linux и Windows на 32-bit x86. Сначала я опишу, как программы располагаются в памяти.

Каждый процесс в многозадачной ОС работает в своей «песочнице» в памяти. Это виртуальное адресное пространство, которое в 32-битном режиме представляет собою 4Гб блок адресов. Эти виртуальные адреса ставятся в соответствие (mapping) физической памяти таблицами страниц, которые поддерживает ядро ОС. У каждого процесса есть свой набор таблиц. Но если мы начинаем использовать виртуальную адресацию, приходится использовать её для всех программ, работающих на компьютере – включая и само ядро. Поэтому часть пространства виртуальных адресов необходимо резервировать под ядро.

image

image

Это не значит, что ядро использует так много физической памяти – просто у него в распоряжении находится часть адресного пространства, которое можно поставить в соответствие необходимому количеству физической памяти. Пространство памяти для ядра отмечено в таблицах страниц как эксклюзивно используемое привилегированным кодом, поэтому если какая-то программа пытается получить в него доступ, случается page fault. В Linux пространство памяти для ядра присутствует постоянно, и ставит в соответствие одну и ту же часть физической памяти у всех процессов. Код ядра и данные всегда имеют адреса, и готовы обрабатывать прерывания и системные вызовы в любой момент. Для пользовательских программ, напротив, соответствие виртуальных адресов реальной памяти меняется, когда происходит переключение процессов:

Голубым отмечены виртуальные адреса, соответствующие физической памяти. Белым – пространство, которому не назначены адреса. В нашем примере Firefox использует гораздо больше места в виртуальной памяти из-за своей легендарной прожорливости. Полоски в адресном пространстве соответствуют сегментам памяти таким, как куча, стек и проч. Эти сегменты – всего лишь интервалы адресов памяти, и не имеют ничего общего с сегментами от Intel. Вот стандартная схема сегментов у процесса под Linux:

image

Когда программирование было белым и пушистым, начальные виртуальные адреса сегментов были одинаковыми для всех процессов. Это позволяло легко удалённо эксплуатировать уязвимости в безопасности. Зловредной программе часто необходимо обращаться к памяти по абсолютным адресам – адресу стека, адресу библиотечной функции, и т.п. Удаленные атаки приходилось делать вслепую, рассчитывая на то, что все адресные пространства остаются на постоянных адресах. В связи с этим получила популярность система выбора случайных адресов. Linux делает случайными стек, сегмент отображения в память и кучу, добавляя смещения к их начальным адресам. К сожалению, в 32-битном адресном пространстве особо не развернёшься, и для назначения случайных адресов остаётся мало места, что делает эту систему не слишком эффективной.

Самый верхний сегмент в адресном пространстве процесса – это стек, в большинстве языков хранящий локальные переменные и аргументы функций. Вызов метода или функции добавляет новый кадр стека (stack frame) к существующему стеку. После возврата из функции кадр уничтожается. Эта простая схема приводит к тому, что для отслеживания содержимого стека не требуется никакой сложной структуры – достаточно всего лишь указателя на начало стека. Добавление и удаление данных становится простым и однозначным процессом. Постоянное повторное использование районов памяти для стека приводит к кэшированию этих частей в CPU, что добавляет скорости. Каждый поток выполнения (thread) в процессе получает свой собственный стек.

Можно прийти к такой ситуации, в которой память, отведённая под стек, заканчивается. Это приводит к ошибке page fault, которая в Linux обрабатывается функцией expand_stack(), которая, в свою очередь, вызывает acct_stack_growth(), чтобы проверить, можно ли ещё нарастить стек. Если его размер не превышает RLIMIT_STACK (обычно это 8 Мб), то стек увеличивается и программа продолжает исполнение, как ни в чём не бывало. Но если максимальный размер стека достигнут, мы получаем переполнение стека (stack overflow) и программе приходит ошибка Segmentation Fault (ошибка сегментации). При этом стек умеет только увеличиваться – подобно государственному бюджету, он не уменьшается обратно.

Динамический рост стека – единственная ситуация, в которой может осуществляться доступ к свободной памяти, которая показана белым на схеме. Все другие попытки доступа к этой памяти вызывают ошибку page fault, приводящую к Segmentation Fault. А некоторые занятые области памяти служат только для чтения, поэтому попытки записи в эти области также приводят к Segmentation Fault.

После стека идёт сегмент отображения в память. Тут ядро размещает содержимое файлов напрямую в памяти. Любое приложение может запросить сделать это через системный вызов mmap() в Linux или CreateFileMapping() / MapViewOfFile() в Windows. Это удобный и быстрый способ организации операций ввода и вывода в файлы, поэтому он используется для подгрузки динамических библиотек. Также возможно создать анонимное место в памяти, не связанное с файлами, которое будет использоваться для данных программы. Если вы сделаете в Linux запрос на большой объём памяти через malloc(), библиотека C создаст такую анонимное отображение вместо использования памяти из кучи. Под «большим» подразумевается объём больший, чем MMAP_THRESHOLD (128 kB по умолчанию, он настраивается через mallopt().)

Если в куче оказывается недостаточно места для выполнения запроса, эту проблему может обработать сама программа без вмешательства ядра. В ином случае куча увеличивается системным вызовом brk(). Управление кучей – дело сложное, оно требует хитроумных алгоритмов, которые стремятся работать быстро и эффективно, чтобы угодить хаотичному методу размещению данных, которым пользуется программа. Время на обработку запроса к куче может варьироваться в широких пределах. В системах реального времени есть специальные инструменты для работы с ней. Кучи тоже бывают фрагментированными:

image

И вот мы добрались до самой нижней части схемы – BSS, данные и текст программы. BSS и данные хранят статичные (глобальные) переменные в С. Разница в том, что BSS хранит содержимое непроинициализированных статичных переменных, чьи значения не были заданы программистом. Кроме этого, область BSS анонимна, она не соответствует никакому файлу. Если вы пишете static int cntActiveUsers , то содержимое cntActiveUsers живёт в BSS.

Сегмент данных, наоборот, содержит те переменные, которые были проинициализированы в коде. Эта часть памяти соответствует бинарному образу программы, содержащему начальные статические значения, заданные в коде. Если вы пишете static int cntWorkerBees = 10 , то содержимое cntWorkerBees живёт в сегменте данных, и начинает свою жизнь как 10. Но, хотя сегмент данных соответствует файлу программы, это приватное отображение в память (private memory mapping) – а это значит, что обновления памяти не отражаются в соответствующем файле. Иначе изменения значения переменных отражались бы в файле, хранящемся на диске.

Пример данных на диаграмме будет немного сложнее, поскольку он использует указатель. В этом случае содержимое указателя, 4-байтный адрес памяти, живёт в сегменте данных. А строка, на которую он показывает, живёт в сегменте текста, который предназначен только для чтения. Там хранится весь код и разные другие детали, включая строковые литералы. Также он хранит ваш бинарник в памяти. Попытки записи в этот сегмент оканчиваются ошибкой Segmentation Fault. Это предотвращает ошибки, связанные с указателями (хотя не так эффективно, как если бы вы вообще не использовали язык С). На диаграмме показаны эти сегменты и примеры переменных:

image

Изучить области памяти Linux-процесса можно, прочитав файл /proc/pid_of_process/maps. Учтите, что один сегмент может содержать много областей. К примеру, у каждого файла, сдублированного в память, есть своя область в сегменте mmap, а у динамических библиотек – дополнительные области, напоминающие BSS и данные. Кстати, иногда, когда люди говорят «сегмент данных», они имеют в виду данные + bss + кучу.

Бинарные образы можно изучать при помощи команд nm и objdump – вы увидите символы, их адреса, сегменты, и т.п. Схема виртуальных адресов, описанная в этой статье – это т.н. «гибкая» схема, которая по умолчанию используется уже несколько лет. Она подразумевает, что переменной RLIMIT_STACK присвоено какое-то значение. В противном случае Linux использует «классическую» схему:

Читайте также: