Как «конкретные» данные находятся и берутся из источника памяти Semiconductor?

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

Предположим, приложение хранит свои данные в определенном сегменте оперативной памяти компьютера.

Как ЦП узнает, какие данные нужно извлечь и как он будет сортировать другие данные, чтобы добраться до них. Если все на его уровне ядра равно 0 или 1, трудно определить, для чего предназначена память «x».

Ответы (3)

Как правило, память управляется несколькими адресными входами, а также управляющим сигналом чтения/записи и некоторыми входами, которые определяют, когда должна выполняться операция чтения или записи.

Имея n входных адресов, можно выделить 2 n ячеек памяти. Это «конкретные» места, к которым компьютер может получить доступ. Обычно каждое местоположение содержит более одного бита. Это может быть байт (8 бит или ячейки памяти) или многобайтовое слово шириной 16, 32 или 64 бита .

Если у вас есть мегабайт памяти с однобайтовым доступом, вам потребуется 20 адресных битов (отдельных входных сигналов) для управления ею. Для гигабайта памяти вам потребуется 30 бит адреса.

Как ЦП узнает, какие данные нужно извлечь и как он будет сортировать другие данные, чтобы добраться до них?

Как правило, программист (при использовании языка ассемблера) или компилятор (при использовании языка более высокого уровня) должен отслеживать, какие данные хранятся по какому адресу.

Например, если вы пишете программу на C с глобальной переменной x, то компилятор решит, в каком месте ее сохранить, и позаботится о создании инструкций, которые обращаются к этому местоположению всякий раз, когда вашей программе нужно использовать x.

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

Третья возможность — выделение кучи . Это означает, что место для хранения выделяется из «кучи» доступной памяти. В некоторых языках (например, Java) компилятор может выполнять большую часть работы по отслеживанию динамической памяти. В C программист отвечает за отслеживание динамической памяти. Это делается с помощью переменных -указателей , которые в основном кодируют адрес, к которому программа должна получить доступ для получения этих конкретных данных.

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

В отличие от людей, у компьютеров нет проблем с большим количеством единиц и нулей. Они ничего не «думают» и не «знают» (пока).

В: Как он узнает, по какому адресу искать данные? A: Он сохраняет адрес в другой ячейке памяти... Q: Как он узнает этот адрес? A: он тоже хранится в памяти Q: ??? О: где-то в самом начале фактическая проводка процессора говорит, по какому адресу искать начальные инструкции.
@ChrisStratton Адрес может быть получен из инструкции программы, например, «загрузить этот регистр с содержимым этого адреса», или он может быть проиндексирован, как в «переместить данные в этом регистре на базовый адрес плюс содержимое индексного регистра». и т. д. Когда ЦП впервые запускается, он переходит к определенному адресу, где он ожидает найти свою первую инструкцию. Это «жестко запрограммировано» (предварительно запрограммированная логика) в конструкции ЦП. То, как он интерпретирует эти инструкции и двоичные данные (адрес, номер, букву, индекс и т. д.), которые могут следовать за ним, также жестко зашито.

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

На самом деле в некоторых компьютерах нет реальной разницы в хранении кода и данных.

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