Каждой ОС нужна оперативная память?

76

Есть ли ОС, которую можно использовать без оперативной памяти, в частности, такую, на которой я могу создать загрузочный pendrive и использовать его на компьютере? Это становится неловким, поскольку загрузка по сути загружает ОС в ОЗУ.

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

Суварна Паттайил
источник
23
Я не уверен, может ли процессор вообще функционировать без ОЗУ, это может быть хорошим вопросом для Computer Science.SE . Я точно знаю, что вы никуда не денетесь, если вам даже не удастся пройти через BIOS.
12
@ AndréDaniel ЦП имеет кеш, который, с точки зрения CS, также является оперативной памятью. Так что в теории вам не нужны дополнительные модули оперативной памяти. Но на практике я сомневаюсь, что архитектура x86 позволяет это.
Филипп
30
Все эти аргументы об использовании кэш-памяти процессора сомнительны, поскольку, по крайней мере в x86, кэш-память не является памятью, к которой вы можете обращаться напрямую. Ваш код всегда ссылается на оперативную память, но процессор автоматически управляет своими кэшами, так что ему фактически не нужно извлекать данные в оперативной памяти для наиболее часто используемых данных. Но опять же, нет инструкции по сборке, чтобы сказать «сохранить это в кеше», «записать это в кеше», есть регистры и есть основная память (со всеми ее странными режимами доступа), точка.
Маттео Италия
3
(OTOH, теоретически вы можете использовать другую оперативную память (например, видеопамять) или периферийные устройства, отображаемые в физическое адресное пространство)
Matteo Italia
13
Современные процессоры x86 позволяют перевести встроенный кэш в режим «Кэш как ОЗУ» - я думаю, что для этого нужно настроить некоторые MSR. Это может относиться и к некоторым процессорам ARM. Кэш-память на современных процессорах находится в большем количестве, чем у ваших первых компьютеров в качестве максимальной памяти. На ПК прошивка все равно не загружается без ОЗУ. Вам нужна кастомная прошивка или что-то не на платформе ПК.
LawrenceC

Ответы:

96

Каждой ОС нужна оперативная память?
Для IBM PC-совместимого оборудования обязательным этапом процесса BIOS POST является проверка наличия ОЗУ для загрузки BIOS. При желании процесс POST проверяет правильность работы вашей оперативной памяти. После процесса POST BIOS загружает загрузчик в ОЗУ и передает управление загрузчику. Таким образом, ответ на ваш вопрос («Нужна ли ОЗУ каждой ОС?»): Да, каждому совместимому с IBM PC оборудованию для загрузки требуется как минимум некоторое работающее ОЗУ. Это верно для любой ОС, которая работает на этом оборудовании.

Обратите внимание, что в первоначальном вопросе OP была ссылка на «ноутбук», который я интерпретировал как: IBM PC совместимое оборудование. В оставшейся части этого ответа я буду использовать IBM PC-совместимое оборудование.

Может ли ОС загружаться с неисправной оперативной памятью?
Если ваша ОЗУ неисправна (и не полностью отсутствует / сломана) или если вы можете (частично) заменить вашу ОЗУ, вы можете загрузить ее, используя исправления ядра BadRAM of BadMEM . Это требует, чтобы вы перекомпилировали ядро ​​(звучит проще, чем если бы вы делали это впервые), и вы можете перезагрузиться и сообщить ядру, где находится ваша плохая память. Хорошее объяснение использования Memtest86 / Memtest86 + , BadRAM / BadMEM можно найти здесь .

Может ли ОС загружаться без оперативной памяти и использовать кэш процессора в качестве оперативной памяти?
Насколько я знаю, нет никакого способа использовать кэш вашего ЦП в качестве ОЗУ без какой-либо ОЗУ, присутствующей в вашей системе (как предлагает @philipp и другие) в комментариях. Если есть, было бы неплохо добавить его сюда. Единственный документ, который я смог найти по этому вопросу, - это документ, в котором говорится: «Использование кэш-памяти процессора в качестве ОЗУ до тех пор, пока ОЗУ не будет инициализировано». Не уверен, что (и как) он будет работать без оперативной памяти. Насколько я знаю, нет рабочего кода, который загружает ОС на IBM-совместимом ПК. Любые ссылки на подтверждение концепции, рабочий код или что-либо еще приветствуются в комментариях, и я добавлю это к этому ответу.

Могу ли я добраться до BIOS?
Вопрос OP немного размыт, если ноутбук способен пройти BIOS POST. Как отмечает @Tonny, ни одна ОС не поможет вам « добраться до BIOS ». Вы входите в BIOS с помощью F1или F2или F10или DELили ESCклавишу, в зависимости от марки вашего BIOS.

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

agtoever
источник
3
На практике это можно запустить машину с несколько дефектной RAM (скажем, есть только один банк , который не работает правильно). Если BIOS не замечает (или, если это замечает, может быть обычное переопределение F1), вы все равно можете запустить ОС, такую ​​как Linux, с патчем BadMEM / BadRAM, который инструктирует ядро ​​избегать указанных блоков памяти.
Маттео Италия
5
@VusP: чтобы просто проверить вашу RAM, используйте livecd / -usb с Memtest86 / Memtest86 +, пропустите тестирование RAM в вашем BIOS и запустите memtest из livecd / -usb.
agtoever
4
Кто сказал, что тестирование ОЗУ при загрузке " обязательно "? Это было обычным делом, когда на машинах было несколько МБ или меньше, но вскоре они стали необязательными, поскольку размеры увеличивались, а время становилось непомерным.
Эндрю Медико
3
@ agtoever: а? Трюк с кеш-памятью не перестает работать при инициализации ОЗУ. Просто в этот момент глупо избегать ОЗУ, поэтому никто никогда не пытается. Но уловка не имеет ничего общего с неинициализированной ОЗУ; это только когда это действительно полезно.
Мердад
3
@ Привет-Ангел, он не может выполняться непосредственно с диска, так как процессор не может напрямую получить доступ к содержимому диска. Он должен вводить команды в контроллер диска и ждать, пока он перенесет блоки данных с диска куда-нибудь в оперативную память. Только оттуда процессор может напрямую выполнять инструкции.
psusi
33

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

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

Но, с другой стороны, BIOS работает до и вне любой установленной операционной системы, и именно BIOS позволяет вам загружаться с Pendrive или чего-то еще. Так что если вы не можете получить доступ к BIOS, то никакая другая ОС в мире не поможет вам.

grawity
источник
6
Возможно, процессор может использовать собственный кэш вместо оперативной памяти. Это может быть полезно для тех частей кода BIOS, которые запускаются перед тестированием памяти. Но заставить другое оборудование работать без ОЗУ может быть сложно. Вы не сможете выполнять DMA, поэтому дисковый ввод-вывод должен быть выполнен по-другому. Я предполагаю, что BIOS даже не попытается загрузить ОС, если не будет найдена полезная память. Размер кеша - не самая большая проблема. Несколько МБ может быть не очень много по современным стандартам, но ОС с тех времен, когда один МБ ОЗУ был много, все равно должна работать на современных компьютерах.
Касперд
2
@kasperd DEC Alpha был разработан для запуска самого первого этапа инициализации при включении питания из кеша, предварительно загруженного из «последовательного ПЗУ». Это произошло потому, что ЦП не мог получить доступ к ОЗУ, обычному ПЗУ или любому другому отображенному в памяти ресурсу (который включал все устройства ввода-вывода, IIRC), пока таблицы страниц не были инициализированы.
zwol
@ Grawity, а как насчет SSD?
TechLife
@TechLife: все еще медленнее, чем оперативная память, на несколько порядков больше, чем величина. Хотя, я думаю, если бы вы использовали его в качестве ОЗУ ... это бы просто называлось ОЗУ, так что все равно нет.
Гравитация
15

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

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

Тем не менее, обратите внимание, что любой компьютер, достаточно старый, чтобы вы не могли получить рабочую память за 20 долларов, будет иметь диск ATA (обычный ATA, а не SATA). Этот интерфейс сегодня почти не существует, поэтому вам также понадобится найти корпус для диска с картой ATA, а также полноразмерный адаптер для ноутбука. У меня есть один, который я купил в 2000 году, и я держу пару старых дел вокруг только для этой цели.

Питер
источник
Согласовано. Отсутствие ОЗУ означает отсутствие стека, что означает отсутствие возможности вызова подпрограммы. Любой код, который может работать в этой ситуации, должен быть тщательно собран вручную.
Лорен Печтел
Правда. Я видел код, который сделал это, хотя. (Я был первой частью процедуры BIOS до инициализации контроллера памяти).
Hennes
2
@LorenPechtel Это не совсем так. Стек может быть (и часто) хранится во встроенной памяти.
Рейраб
2
@LorenPechtel не обязательно. ARM не использует стек для вызова процедуры.
Домен
1
Насколько я вижу, эти чипы имеют внутреннюю SRAM ... которая считается RAM.
Домен
10

Если я правильно прочитал вопрос, все здесь лают не на то дерево.

Он прямо заявляет «чтобы попасть в BIOS».

Если ноутбук сломан, он даже не попадет в BIOS, все остальное бессмысленно.

Вы не можете загрузить ЛЮБУЮ ОС на этом независимо от ситуации с ОЗУ.

Tonny
источник
8

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

sewalk
источник
Это возможно, но плохая память тоже не плохая догадка. Я видел плохую память (и даже плохие сокеты памяти), вызывавшие сбой POST несколько раз. Конечно, самой простой проверкой памяти обычно является попытка загрузки с удаленными различными флешками или загрузка только одной заведомо исправной флешки. Если это решает проблемы, это была либо память, слоты памяти, либо контроллер памяти.
Рейраб
5

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

CPU имеет несколько регистров для запоминания адреса, по крайней мере, выполняемой команды, но обычно они не называются RAM.

Обычный код C не может работать в системе без оперативной памяти, поскольку он использует стековую память для распределения переменных, а стек находится в оперативной памяти. Когда загружается последний компьютер, обычное динамическое ОЗУ изначально недоступно, так как для обновления устройства ОЗУ требуется начальная настройка. Сборочный код запускается первым и выполняет инициализацию материнской платы. Оперативная память начинает работать, а затем код C может работать.

h22
источник
4
Последний абзац не совсем верен. Стек не обязательно должен быть вне ОЗУ. На самом деле довольно часто стек располагается во встроенной памяти. Даже на обычных машинах стек выполняющегося в данный момент потока обычно находится в кеше и выталкивается в DRAM только тогда, когда планировщик меняет местами потоки. Тем не менее, я написал код для DSP, в котором стек находился в оперативной памяти на кристалле и никогда не касался DRAM. Конечно, я полагаю, вы могли бы утверждать, что в этом случае внутренняя память технически является ОЗУ.
Рейраб
4
Кроме того, не исключено, что по крайней мере некоторые параметры и возвращаемые значения передаются в функции C с использованием регистров (а не стека). Кроме того, локальные переменные также обычно хранятся в регистрах, а не в стеке компиляторами C. Вы даже можете специально запросить, чтобы компилятор поместил определенную переменную в регистр, используя ключевое слово «register». Конечно, когда функции требуется больше локальных переменных, чем у вас есть регистровое пространство, вам нужно будет выходить в память, но это аппаратное ограничение, которое применяется независимо от языка программирования.
Рейраб
4

Когда я поступил в университет в 1967 году, на вычислительном факультете была зебра Stantec . Память состояла из 8192 слов магнитного барабана. Также было 12 регистров и два аккумулятора. Вы можете рассмотреть эту оперативную память, но не так, как мы ее знаем.

Дэвид Маршалл
источник
3

Для регистров (по крайней мере, очень небольшого объема оперативной памяти) вам понадобится по крайней мере кэш-кэш-память для того, чтобы исполнительный модуль ЦП мог работать. Так что даже ваш процессор имеет «RAM».

Я полагаю, что ОС Von-Neumann не была разработана без потребности в памяти.

Так что нет.

Привет ло
источник
3

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

(Изначально я хотел загрузить ОС без ОЗУ, чтобы проверить, не испортилась ли ОЗУ, но мне нравится, как этот вопрос развивается в снежном коме.)

Это действительно существует в BIOS, есть функция для проверки оперативной памяти. При загрузке и входе в BIOS отключите опцию «Самотестирование при быстром включении», и он выполнит полную проверку вашего ОЗУ. Эта опция должна находиться в «расширенных функциях BIOS», что-то вроде второго выбора в AMI BIOS.

Надеюсь, что это сделает вас на шаг впереди. ;-)

Оливье М.
источник
3

Вам не нужна оперативная память, например, используйте машину Тьюринга .

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

(Я не считаю ленту ОЗУ.)

Теперь ваши реальные вопросы должны спрашивать о «полезном» и определить, что вы подразумеваете под «полезным» .

Ян Рингроз
источник
3
На концептуальном уровне машины Тьюринга все типы хранилищ данных для чтения и записи по существу эквивалентны: ОЗУ, регистры, кэш, магнитная лента, диск. Единственная разница между ними - скорость доступа.
Бармар
1
@ Barmar RAM означает оперативную память. Это означает, что вы можете получить доступ к ячейкам внутри него в любом порядке. Доступ к ячейкам ленты на машине Тьюринга возможен только последовательно (в направлении или поочередно). Поэтому я бы сказал, что лента на машине Тьюринга по определению не является ОЗУ.
Касперд
1
@ Бармар Это неправильно. Определение ОЗУ не учитывает время поиска. Следовательно, лента TM просто не соответствует определению RAM, потому что вы не можете получить доступ к произвольным ячейкам без поиска.
Касперд
1
@ Barar, понятие времени настенных часов может не применяться, но понятие времени, поскольку в нем требуется O (n) операций чтения, чтобы попасть туда, безусловно, применимо.
Псуси
1
@ Бармар, нет, нет. Вот почему мы используем большие обозначения «О», чтобы говорить о чисто математической сложности, которая не связана с тем, сколько «времени» может занять что-то реальное. Математическая модель ленточного накопителя в этой ТМ такова, что он может только читать ... в любом направлении ... не масштабировать вперед или назад в любое время. Поэтому, если вы в последний раз читаете байт 1, вы не можете прочитать байт 27 без предварительного чтения 26 байтов между ними. Вот почему это не баран. Если вам нужна память, которая может пропускать эти 26 байтов, независимо от того, занимает ли это 0 раз или 5 минут, это будет оперативная память, а не лента.
Псуси
3

Существуют специализированные ОС для встраиваемого использования, которые полностью работают из ПЗУ (только для чтения). Для того, чтобы сделать что-нибудь полезное, вам все же обычно требуется хотя бы небольшой объем ОЗУ. Я не видел ПК, который будет загружаться без оперативной памяти, хотя.

Что касается первоначального вопроса о тесте памяти, то если компьютер выполнит POST (то есть выполнит самотестирование при включении питания и попытается загрузиться), то Memtest86 разработан специально для тестирования вашей оперативной памяти. Он тестирует первые 64 КБ ОЗУ, загружает себя в эту ОЗУ, а затем проверяет оставшуюся часть системной памяти так тщательно, как вам бы хотелось. «Хлопчатобумажная» память (в отличие от просто плохой памяти) встречается редко, но я видел, как Memtest86 ловит периодически ошибочный бит, пропущенный тестом памяти компьютера (в конце концов, тест памяти POST должен завершиться за разумный промежуток времени в то время как самый быстрый тест memtest86 выполняется 5-10 минут, а более комплексные тесты занимают часы.)

user153822
источник
1

Да, вы можете иметь компьютер без оперативной памяти. В большинстве процессоров x86 есть специальный режим, который позволяет запускать его только с кешем. Если вы проверите для coreboot (бывший linuxbios), он может это сделать. Это называется кэшем как оперативной памяти. На самом деле вы можете создать целую операционную систему, основанную на этом, и с современными кешами большого размера это может привести к тому, что даже с графическим интерфейсом (проверьте menuet-os). Но никто еще этого не сделал.

Хорхе Альдо
источник