Почему оперативная память не имеет схемы разделов?

Почему оперативная память не имеет схемы разделов?

Другой способ задать этот вопрос:

"почему жестким дискам, флешкам и твердотельным накопителям нужна схема разделов, а оперативной памяти — нет?"

Просто пытаюсь лучше понять, как работают все эти штуки с памятью.

решение1

Ну, проблема немного сложнее.

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

По сути, разделы позволяют разделить обязанности между системными проектировщиками. На моем 162 мне нужно знать, где хранится каждый бит данных и сколько раз осуществляется доступ к каждой ячейке флэш-памяти, чтобы я мог реализовать выравнивание износа. Для этого мне даже не нужны файлы. Проблема, однако, в том, что у моего миниатюрного компьютера всего 16 КБ флэш-памяти, и этим объемом можно управлять вручную и с помощью комментариев исходного кода. Это как иметь стол с одним ящиком. Я могу положить туда что угодно, и это будет легко достать и получить доступ.

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

Надеюсь, я яснее объяснил, почему мы используем разделы, даже если они нам на самом деле не нужны.

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

Давайте сравним, как работает программа на моем простом ATmega 162 и как работает программа на современной операционной системе, такой как Windows. На 162 программа предварительно запрограммирована с адресами ячеек памяти, которые она будет использовать для хранения данных. Поскольку на 162 есть только одна программа, мне не нужно беспокоиться о перезаписи данных, используемых другой программой, или о распределении памяти. Я могу просто записать все, что захочу, в каждую ячейку памяти, и это останется там, пока компьютер работает.

С другой стороны, в Windows мы можем иметь большое количество программ, работающих одновременно, и все они будут записывать и считывать данные в память и из нее. То есть мы не можем позволить отдельным программам напрямую обращаться к ячейкам памяти (и тот факт, что программист должен знать, как получить доступ к памяти на этом конкретном компьютере, и сколько оперативной памяти у этого компьютера и т. д. В этот момент мы возвращаемся к обсуждению «тысячи против одного программиста»). Вместо этого, когда каждая программа запускается, ядро ​​выделяет ей память, и для программы это выглядит так, как будто это единственная программа, работающая на компьютере. Ядро существует для того, чтобы убедиться, что наша программа не пытается читать или записывать память, выделенную другим программам, и что она не пытается выполнить память, помеченную как данные, и что она не подвергает опасности всю систему. Так что в основном в Windows и многих других современных операционных системах каждая программа получает свой собственный раздел оперативной памяти. Интересно также отметить, что на 32-битных системах каждая программа могла занимать только до 2 ГиБ оперативной памяти, поскольку это был верхний предел размера «раздела».

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

Еще одна вещь, которую стоит поднять, это файл подкачки или раздел подкачки. Для программиста, пишущего приложение, неважно, находится ли программа в файле подкачки или в ОЗУ, потому что об этом заботится ядро. На моем ATmega 162 ситуация немного сложнее. Когда мне нужно использовать больше ОЗУ, чем доступно, я должен сначала вручную определить ситуацию, когда я израсходовал всю ОЗУ, после этого мне нужно вручную скопировать данные из ОЗУ во флэш-память, освободить ОЗУ, использовать ее для того, для чего мне нужно, снова освободить ее, переместить данные из флэш-памяти в ОЗУ и затем освободить занятое место во флэш-памяти. На настольном компьютере программа даже не может увидеть, была ли она выгружена на диск, а затем перемещена обратно в ОЗУ.

Еще одна интересная вещь — производительность. Давайте вернемся к примеру с ящиком и складом. Давайте возьмем все предметы со складов и сложим их в одну кучу. Так, если нам нужно взять один карандаш из ящика, мы просто откроем ящик и возьмем карандаш. Если нам нужно взять один конкретный карандаш из кучи из тысяч других карандашей, блокнотов, линеек, конфет, ластиков и всего остального, нам придется потратить значительное время на его поиск. Это время (в среднем) намного больше по сравнению со временем, необходимым для поиска того же карандаша на хорошо организованном складе. С другой стороны, время, необходимое для поиска карандаша на организованном складе, намного больше времени, необходимого для поиска карандаша в ящике. Поэтому некоторые методы хорошо работают с небольшими объемами данных, а некоторые — с большими. Файловые системы повышают производительность, храня данные в логическом порядке на диске, где каждый отдельный элемент данных может быть легко найден. Некоторые файловые системы также предоставляют другие преимущества. В случае JFFS2, файловой системы, разработанной для флэш-памяти, файловая система реализует выравнивание износа, так что пользователю или проектировщику оборудования не нужно заниматься этим.

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

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

решение2

Если сильно упростить, то оперативная память имеет схему компоновки, но она абстрагирована аппаратным обеспечением.

Внутренне RAM организована как матрица «ячеек памяти», расположенных в строках и столбцах, как электронная таблица. Каждая ячейка памяти используется для хранения бита данных, которые могут быть мгновенно извлечены путем указания местоположения строки и столбца (или адреса) данных.

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

решение3

Для жестких дисков была создана схема разбиения на разделы, позволяющая устанавливать несколько несовместимых операционных систем, которые могут сосуществовать на разных частях одной пластины. Флешки и SSD-накопители наследуют схему от жесткого диска, своего старшего кузена.

Для персональных компьютеров RAM обычно используется только одной операционной системой в каждый момент времени, и поэтому для нее нет схемы разбиения. Но даже в этом случае в некоторых больших компьютерах (мэйнфреймах) также есть схема разбиения для RAM.

решение4

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

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

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

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

Связанный контент