Чи потрібна кожній ОС оперативної пам’яті?


76

Чи є ОС, яку можна використовувати без оперативної пам’яті, зокрема, з якої я можу створити завантажувальний pendrive і використовувати його в комп’ютері? Це стає незручним, оскільки завантаження по суті завантажує ОС в оперативній пам'яті.

Примітка. Спочатку я хотів дізнатися про операційну систему, яка не має оперативної пам'яті, щоб перевірити, чи мій ноутбук (який не завантажується, але представляє порожній екран) ОЗУ поганий, але мені подобається, як це питання завалився снігом.


23
Я не впевнений, чи може процесор взагалі функціонувати без оперативної пам'яті, це може бути гарним питанням для Computer Science.SE . Що я точно знаю, це те, що ви нікуди не потрапите, якщо навіть не встигнете пройти повз BIOS.

12
@ AndréDaniel CPU має кеш-пам'ять, яка, з точки зору CS, також є пам'яттю з випадковим доступом. Тож теоретично вам не потрібні додаткові модулі оперативної пам'яті. Але на практиці я сумніваюся, що архітектура x86 дозволяє це.
Філіпп

30
Всі ці аргументи щодо використання кеш-процесора мають сумнівну силу, оскільки, принаймні, на x86, кеш - це не пам'ять, до якої ви можете отримати доступ безпосередньо. Ваш код завжди посилається на оперативну пам’ять, але процесор автоматично керує кешами, щоб насправді не потрібно отримувати дані в оперативній пам'яті для найбільш часто доступних даних. Але знову ж таки, немає інструкції по збірці сказати "зберігати це в кеш-пам'яті" "записати це в кеш-пам'ять", є регістри і є основна пам'ять (з усіма її дивними режимами доступу), період.
Matteo Italia

3
(OTOH, теоретично ви можете використовувати іншу ОЗП (наприклад, відео RAM) або периферійні пристрої, відображені у фізичному адресному просторі)
Matteo Italia

13
Сучасні процесори x86 дозволяють перевести кеш-пам'ять у режим "Кеш як оперативна пам'ять" - я думаю, що для цього потрібно встановити деякі MSR. Це може застосовуватися і для деяких процесорів ARM. Кеш на сучасних процесорах в більшій кількості, ніж те, що ваші перші ПК могли мати максимальну пам'ять. На ПК комп'ютер все ще не завантажиться без наявної оперативної пам’яті. Вам знадобиться власна вбудована програма або щось не платформа ПК.
LawrenceC

Відповіді:


96

Чи потрібна кожній ОС оперативної пам’яті?
Для обладнання, сумісного з IBM PC, обов’язковим кроком процесу BIOS POST є перевірка наявності оперативної пам'яті для завантаження BIOS. При необхідності процес POST перевіряє ваші функції оперативної пам'яті правильно. Після процесу POST BIOS завантажує завантажувач в оперативну пам’ять і передає управління завантажувачу. Отже, відповідь на ваше запитання ("Чи потрібна кожній ОС оперативної пам'яті?"): Так, кожне сумісне обладнання IBM PC вимагає хоча б деякої функціональної оперативної пам'яті для завантаження. Це справедливо для будь-якої ОС, яка працює на цьому обладнання.

Зауважте, що в оригінальному питанні ОП було посилання на "ноутбук", який я інтерпретував як: сумісне обладнання IBM PC. У решті цієї відповіді я припускаю апаратне забезпечення, сумісне з IBM PC.

Чи може завантажуватися ОС з несправною ОЗУ?
Якщо ваша пам'ять несправна (і не зовсім відсутня / НЕ працює) , або якщо ви можете (частково) замінити оперативну пам'ять, ви можете бути в змозі завантажитися , використовуючи BadRAM з BadMEM ядра патчі. Це вимагає від вас перекомпілювати ядро ​​(звучить простіше, ніж це робиться, якщо ви це робите вперше), і ви можете перезавантажити і повідомити ядро, де ваша погана пам'ять. Приємне пояснення використання Memtest86 / Memtest86 + , BadRAM / BadMEM можна знайти тут .

Чи може ОС завантажуватися без оперативної пам’яті та використовувати кеш процесора як оперативну пам’ять?
Наскільки я знаю, немає способу використовувати кеш вашого процесора як оперативної пам’яті без будь-якої оперативної пам’яті, присутньої у вашій системі (як це запропоновано @philipp та іншими) у коментарях. Якщо є, було б непогано додати сюди. Єдиний документ, який я міг знайти на цю тему, - це документ, в якому говориться: "Використання кешу процесора як оперативної пам'яті, поки оперативна пам'ять не ініціалізується". Не впевнений, що (і як) він буде працювати без оперативної пам'яті. Наскільки я знаю, немає жодного робочого коду, який завантажує ОС на сумісному ПК з IBM. Будь-які посилання на доказові поняття, робочий код або що-небудь інше вітаються у коментарях, і я додам його до цієї відповіді.

Чи можу я дістатися до BIOS?
Питання ОП дещо неясне, чи ноутбук здатний передати BIOS POST. Як зазначає @Tonny, жодна ОС не допоможе вам " дістатися до BIOS ". Ви входите в BIOS за допомогою клавіші F1або F2або F10або DELабо ESCзалежно від вашої марки BIOS.

Як відновити дані з ноутбука без оперативної пам’яті?
Що стосується мети, що стоїть перед вашим питанням: навіщо вам потрібен доступ до ноутбука? Можливо, тому, що на HDD все ще є дані, які ви хочете відновити? Якщо це так, витягнути жорсткий диск (див. Посібник) набагато простіше і приєднати його до зовнішнього накопичувача або безпосередньо до ПК. Ось приємне керівництво зробити саме це.


3
На практиці це можна запустити машину з кілька дефектної RAM (скажімо, є тільки один банк , який не працює правильно). Якщо BIOS не помічає (або, якщо він помічає, можливо, є звичайне переопрацювання F1), ви все одно можете запустити ОС на зразок Linux з патчем BadMEM / BadRAM, що дає інструкції ядру уникати вказаних блоків пам'яті.
Matteo Italia

5
@VusP: щоб просто перевірити свою оперативну пам’ять, використовуйте livecd / -usb з Memtest86 / Memtest86 +, пропустіть тестування оперативної пам'яті у вашій BIOS і запустіть запит з livecd / -usb.
agtoever

4
Хто каже, що тестування оперативної пам’яті на завантаженні є « обов’язковим »? Це було звичайним явищем, коли машини мали декілька МБ або менше, але незабаром стали необов’язковими, оскільки розміри зростали, а час ставав непомірним.
Ендрю Медіко

3
@agtoever: А? Трюк кеш-пам’яті оперативної пам’яті не раптом припиняє роботу при ініціалізації оперативної пам’яті. Просто в цей момент нерозумно уникати ОЗУ, тому ніхто ніколи цього не намагається. Але хитрість не має нічого спільного з тим, що оперативна пам’ять була неініціалізована; це саме тоді, коли це насправді корисно.
Мехрдад

3
@ Привіт-Ангел, він не може виконуватись безпосередньо з диска, оскільки процесор не може безпосередньо отримати доступ до вмісту диска. Він повинен засунути команди в дисковий контролер і чекати, коли він передасть блоки даних з диска кудись в оперативну пам'ять. Тільки звідти процесор може безпосередньо виконувати інструкції.
psusi

33

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

(Що ж, вбудовані системи на мікросхемі можуть виконувати код з оперативної пам'яті або з внутрішньої флеш-пам’яті - BIOS ПК в теорії може зробити те саме, але він не може запустити всю ОС.)

Але інша справа, що BIOS працює до і поза будь-якою встановленою операційною системою, і саме BIOS дозволяє завантажуватись з маятника або будь-якого іншого. Тож якщо ви не можете досягти BIOS, то жодна інша система світу не допоможе вам.


6
Можливо, процесор може використовувати власний кеш замість ОЗУ. Це може бути корисною функцією для тих частин коду BIOS, які працюють перед тестом пам'яті. Але отримати інше обладнання для роботи без оперативної пам'яті може бути складним. Ви не зможете зробити DMA, тому введення / виведення диска доведеться робити інакше. Я думаю, що BIOS навіть не намагатиметься завантажити ОС, якби не було знайдено корисної оперативної пам’яті. Незважаючи на те, що розмір кеша є меншою проблемою. За сучасними мірками декілька МБ може бути не дуже багато, але ОС з тих часів, коли одного МБ оперативної пам’яті було багато, все одно повинна працювати на сучасних комп’ютерах.
kasperd

2
@kasperd DEC Alpha призначений для запуску своєї першої стадії ініціалізації включення з кешу, попередньо завантаженої з "послідовного ПЗУ". Це було через те, що процесор не міг отримати доступ до оперативної пам’яті, звичайного ПЗУ або будь-якого іншого ресурсу, відображеного на пам’яті (який включав усі пристрої вводу-виводу, IIRC), поки таблиці сторінок не були ініціалізовані.
zwol

@grawity, що з SSD?
TechLife

@TechLife: Ще повільніше, ніж оперативна пам'ять на кілька порядків, ніж за величиною. Хоча, я думаю, якби ви використовували його як оперативну пам’ять ... це називалося б просто оперативною пам'яттю, так що все ще немає.
grawity

15

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

Ваше справжнє запитання швидше "Як отримати інформацію з комп'ютера, який не завантажуватиметься", і це легко. Розібрати його, вийняти привід та підключити його до зовнішнього корпусу приводу.

Однак зауважте, що будь-який комп'ютер, достатньо старий, що ви не можете просто отримати 20 доларів робочої оперативної пам’яті, він матиме диск ATA (звичайний ATA, а не SATA). Цей інтерфейс сьогодні майже вимер, тому вам також знадобиться знайти корпус диска з ATA-карткою, а також повнорозмірний адаптер для ноутбука. У мене є такий, який я купив у 2000 році, і я зберігаю пару старих справ, якраз для цієї мети.


Домовились. Ніяка оперативна пам’ять не означає стека, що означає відсутність можливості викликати рутину. Будь-який код, який міг би працювати в цій ситуації, повинен бути ретельно складений вручну.
Лорен Печтел

Правда. Я бачив код, який це зробив. (Я був першою частиною звичайної програми BIOS до ініціалізації контролера пам'яті).
Геннес

2
@LorenPechtel Це не зовсім так. Стек може (і часто є) зберігатися в пам'яті мікросхеми.
reirab

2
@LorenPechtel не потрібно. ARM не використовує стек для виклику звичайної програми.
domen

1
Наскільки я бачу, ці мікросхеми мають внутрішню оперативну пам'ять ... що вважається ОЗУ.
domen

10

Якщо я правильно прочитав питання, всі тут гавкають неправильне дерево.

Він прямо заявляє, "щоб дістатися до BIOS".

Якщо ноутбук настільки зламаний, він навіть не потрапить у BIOS, все інше безглуздо.

На цьому ви не можете завантажувати будь-яку ОС незалежно від ситуації з оперативною пам'яттю.


8

Ваше припущення, що пам'ять погана, швидше за все, недійсна. Якщо ви не отримуєте звукових повідомлень або екранних повідомлень, першопричиною майже напевно є невдалий процесор (дещо малоймовірно) або невдала плата (дуже ймовірно). Материнська плата постійно провалюється з віком через з’єднання холодних пайок, що було звичайним явищем в перші дні руху ROHS та вимога використовувати припой без свинцю. Технології виготовлення були оптимізовані для використання припою на основі свинцю, і промисловості знадобився певний час, щоб вирішити проблеми. Багато виробників компонентів були не дуже готові витрачати гроші на оновлення своїх процесів. Зрештою, пристрої випробовували б і спрацьовували просто чудово, лише після виходу з ладу через місяці чи роки, після того, як гарантія минула, Тільки зі зростаючою горою збоїв та інтенсивними негативними відгуками користувачів виробники почали вдосконалювати речі. На такому ноутбуці плата за повторну плавку для випрямлення швів холодного припою майже напевно коштує непомірно.


Це можливо, але погана пам'ять теж не погана здогадка. Я бачив, що погана пам'ять (і навіть погана розетка пам'яті) спричиняла збій в POST кілька разів раніше. Звичайно, найпростіша перевірка пам’яті - це звичайно просто спробувати завантаження різних видалених паличок або завантаження лише однією відомою гарною паличкою. Якщо це вирішує проблеми, це була або пам'ять, слоти пам'яті, або контролер пам'яті.
reirab

5

Більшість ранніх комп'ютерів 1980-х років або близько мали в своєму розпорядженні операційну систему (драйвери обладнання, підтримка IO, завантаження програм, дуже простий інтерфейс командного рядка тощо) в чіпі ROM. Він може дещо функціонувати, навіть якщо мікросхеми оперативної пам'яті були непрацездатними. Ця функція була використана у спеціальних версіях вмісту ПЗУ, призначених для запуску тестів на апаратне забезпечення та спілкування здебільшого за допомогою сигналу звукового сигналу та клавіатури.

Процесор має кілька регістрів, щоб пригадати адресу команди, яка виконується принаймні, але вони зазвичай не називаються оперативною пам'яттю.

Звичайний код C не може працювати в системі без оперативної пам'яті, оскільки він використовує пам'ять стека для розподілу змінних, а стек знаходиться в оперативній пам'яті. Коли останні комп'ютери завантажуються, звичайна динамічна оперативна пам’ять спочатку недоступна, оскільки для оновлення оперативної пам’яті потрібні початкові настройки. Код складання запускається першим і виконує ініціалізацію материнської плати. ОЗУ починає працювати, і тоді C код може працювати.


4
Останній абзац не зовсім правдивий. Стек не повинен бути в оперативної пам’яті, що не має чіпа. Насправді цілком часто зустрічається стек, який знаходиться в мікросхемі. Навіть на звичайних машинах стек поточного виконуваного потоку зазвичай буде в кеші і буде висунутий в DRAM лише тоді, коли планувальник замінить потоки. Хоча я написав код для DSP, де стек знаходився в безпосередньо адресованій пам'яті на мікросхемі і ніколи не торкався DRAM. Звичайно, я думаю, ви можете стверджувати, що в цьому випадку вбудована пам'ять технічно є оперативною пам'яттю.
reirab

4
Крім того, незвично, що принаймні деякі параметри та значення повернення передаються функціям C за допомогою регістрів (а не стека.) Крім того, локальні змінні також зазвичай зберігаються в регістрах, а не в стеці компіляторами C. Ви навіть можете спеціально вимагати, щоб компілятор помістив певну змінну в регістр, використовуючи ключове слово 'register'. Звичайно, як тільки функція потребує більше локальних змінних, ніж у вас є місце реєстрації, вам потрібно буде вийти в пам'ять, але це обмеження обладнання, яке застосовується незалежно від мови програмування.
reirab

4

Коли я вступив до університету в 1967 році, на кафедрі обчислювальної техніки була Стентек Зебра . Пам'ять складалася з 8192 слова магнітного барабана. Було також 12 реєстрів та два акумулятори. Ви можете розглянути цю оперативну пам’ять, але не так, як ми це знаємо.


3

Вам знадобиться хоча б чіп-кеш для реєстрів (по суті, дуже невелика кількість оперативної пам'яті на мікросхемі), щоб модуль виконання процесора міг функціонувати. Так що навіть у вашого процесора є "ОЗУ".

Жодна операційна система Von-Neumann не була розроблена без необхідності пам'яті.

Так ні.


3

Як і всі інші тут, я погоджуюся з тим, що тобі потрібна оперативна пам’ять і без неї не можна працювати, але я також читав наступне:

(Я спочатку хотів завантажити ОС без оперативної пам’яті, щоб перевірити, чи погана оперативна пам’ять стала поганою, але мені подобається, як це питання завалився снігом.)

Це насправді існує в BIOS, є функція перевірки оперативної пам'яті в глибині. Під час завантаження та переходу в BIOS змініть параметр «Швидке самовключення при самому випробуванні» на вимкнено, і він здійснить повну перевірку пропуску вашої ОЗУ. Ця опція повинна бути розміщена в "розширених функціях BIOS", щось на зразок другого вибору в BII BII.

Сподіваюсь, що це поставить вас на крок далі. ;-)


3

Оперативна пам'ять вам не потрібна, наприклад, використовуйте машину Тюрінга .

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

(Я б не вважав, що стрічка є оперативною пам'яттю.)

Тепер вашими реальними питаннями має бути питання про "корисне" та визначте, що ви маєте на увазі під "корисним" .


3
На концептуальному рівні машини Тьюрінга всі типи зберігання даних для читання-запису є по суті еквівалентними: ОЗУ, регістри, кеш, магнітна стрічка, диск. Єдина відмінність між ними - швидкість доступу.
Бармар

1
@Barmar RAM означає пам'ять випадкового доступу. Це означає, що ви можете отримати доступ до комірок всередині нього в будь-якому порядку. До комірок на стрічці на машині Тьюрінга можна звертатися лише послідовно (у напрямку або поперемінно). Тому я б сказав, що стрічка на машині Тьюрінга за визначенням не є ОЗУ.
kasperd

1
@Barmar Це неправильно. Визначення оперативної пам’яті не дозволяє шукати часу. Отже, стрічка TM просто не відповідає визначенню оперативної пам'яті, тому що ви не можете отримати доступ до довільних комірок, не шукаючи.
kasperd

1
@Barmar, поняття часу настінного годинника може не застосовуватися, але поняття часу, оскільки в ньому потрібні операції з читання O (n), щоб дістатися туди, безумовно.
psusi

1
@Barmar, ні, ти ні. Ось чому ми використовуємо великі позначення "O", щоб говорити про суто математичну складність, не пов'язану з тим, скільки часу може зайняти "реальне". Математична модель стрічкового накопичувача в цій ТМ така, що вона може читати тільки ... в будь-якому напрямку ... не збільшувати вперед чи назад за будь-який час. Отже, якщо ви востаннє прочитали байт 1, ви не можете прочитати байт 27, не спершу прочитавши між собою 26 байт. Ось чому це не таран. Якщо ви хочете, щоб пам'ять, яка може пропустити ці 26 байтів, займає це 0 разів або 5 хвилин, це буде таран, а не стрічка.
psusi

3

Існують спеціалізовані ОС для вбудованого використання, у яких повністю вичерпується ПЗУ (лише для читання пам'яті.) Щоб зробити все корисне, хоча, як правило, потрібно як мінімум невелику кількість оперативної пам’яті. Я ще не бачив ПК, який буде завантажуватися без оперативної пам'яті.

Що стосується оригінального запитання про тест пам'яті, якщо комп'ютер буде POST (тобто зробить його минулим при включеному самотестуванні та спробі завантаження), то Memtest86 призначений спеціально для тестування вашої ОЗУ. Він тестує перші 64 Кб оперативної пам’яті, завантажує себе в цю оперативну пам’ять, потім тестує решту системної пам’яті так само ретельно, як хотілося б. Пам'ять «Flakey» (на відміну від простої поганої пам’яті) є рідкістю, але я бачив, як Memtest86 перехоплює поганий біт, який пропустив тест пам’яті комп’ютера (адже тест пам’яті POST призначений для завершення за розумний проміжок часу) , у той час як найшвидший тест memtest86 триває 5-10 хвилин, а більш комплексні тести займають години.)


1

Так, ви можете мати комп’ютер без оперативної пам'яті. У більшості процесорів x86 існує спеціальний режим, який дозволяє запускати його лише з кеша. Якщо ви перевірите наявність coreboot (колишній linuxbios), це можна зробити. Його називають кеш-аш-бараном. Насправді ви можете зробити цілу операційну систему на основі цього, і за допомогою сучасних кешів великих розмірів це може призвести навіть до виникнення gui (перевірити menuet-os). Але ще ніхто цього не зробив.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.