Другой способ спросить это будет:
« Почему жестким дискам, жестким дискам и SSD нужна схема разделов, а ОЗУ нет?"
Просто пытаюсь лучше понять, как работают все вещи памяти.
Другой способ спросить это будет:
« Почему жестким дискам, жестким дискам и SSD нужна схема разделов, а ОЗУ нет?"
Просто пытаюсь лучше понять, как работают все вещи памяти.
Ну, проблема немного сложнее.
Во-первых, высказанное в вопросе предположение неверно. Жесткие диски и флэш-память вообще не нуждаются в разделах! Вы можете просто записать необработанные данные на жесткий диск, а затем прочитать их обратно, и они будут работать нормально. Некоторые относительно простые компьютерные системы не используют разделы даже сегодня, потому что нет необходимости их использовать. Например, у меня прямо сейчас на моем рабочем столе есть компьютер, который основан на микроконтроллере ATmega 162 и использует флэш-память без разделов.
По сути, разделы делают возможным разделение трудовых обязанностей между разработчиками систем. На моем 162 мне нужно знать, где хранится каждый бит данных и сколько раз осуществляется доступ к каждой флэш-ячейке, чтобы я мог реализовать выравнивание износа. Для этого мне даже не нужны файлы. Проблема, однако, заключается в том, что мой миниатюрный компьютер имеет только 16 Кбайт флэш-памяти, и этим объемом можно управлять вручную и комментариями исходного кода. Это как стол с одним ящиком. Я могу положить туда что угодно, и к нему будет легко добраться.
В больших компьютерных системах, таких как современные настольные компьютеры, программное обеспечение является продуктом работы тысяч программистов, работающих отдельно. У них должен быть какой-то способ хранения данных, и поэтому нам нужны файлы и разделы. Когда они у нас есть, программист может сосредоточиться только на тех данных, с которыми ему нужно работать, и ему не нужно беспокоиться о повреждении других данных. Он может позволить программистам, работающим над программированием файловой системы, беспокоиться о физическом хранении данных. Чтобы продолжить мой пример с ящиком, это все равно, что иметь систему складов и пытаться найти один предмет, если у вас есть сотни тысяч товаров на складе. Таким образом, в то время как вы можете просто достать простой ящик и достать, например, карандаш, в случае со складом, карандаш будет на складе 3, раздел P, полка 273, уровень 3, ящик 5.
Надеюсь, я прояснил, почему мы используем разделы, даже если они нам на самом деле не нужны.
Теперь перейти к оперативной памяти. Также не соответствует действительности то, что в оперативной памяти нет разделов. Основная причина, по которой мы используем разделы, - это организация и оперативная память. В случае ОЗУ, однако, это ядро системы, которое решает, куда направляется каждый бит информации, и отслеживает использование пространства.
Давайте сравним, как работает программа на моем простом ATmega 162 и как работает программа в современной операционной системе, такой как Windows. На 162 программа предварительно запрограммирована с адресами ячеек памяти, которые она собирается использовать для хранения данных. Поскольку в 162 есть только одна программа, мне не нужно беспокоиться о перезаписи данных, используемых другой программой, или о распределении памяти. Я могу просто написать все, что захочу, в каждую ячейку памяти, и она останется там, пока компьютер работает.
С другой стороны, в Windows может одновременно работать большое количество программ, и все они будут записывать и считывать данные в память и из нее. То есть мы не можем позволить отдельным программам иметь прямой доступ к ячейкам памяти (и тот факт, что программист должен знать, как получить доступ к памяти на этом конкретном компьютере и сколько оперативной памяти у этого компьютера и т.д.). На этом этапе мы возвращаемся к обсуждению тысяч против одного программиста.) Вместо этого, когда запускается каждая программа, ядро выделяет память для нее и для программы, похоже, что это единственная программа, работающая на компьютере. Ядро призвано убедиться, что наша программа не пытается читать или записывать память, выделенную другим программам, и что она не пытается выполнять память, помеченную как данные, и что она не подвергает опасности всю систему. Таким образом, в основном на Windows и многих других современных операционных системах каждая программа получает свой собственный раздел оперативной памяти. Также интересно отметить, что в 32-битных системах каждая программа может занимать до 2 ГБ ОЗУ, поскольку это был верхний предел размера "раздела".
Я хотел бы сделать небольшое отступление здесь. Есть несколько программ, которые повреждены разделами в оперативной памяти. Например, были программы, называемые тренерами, которые позволяли обманывать в компьютерных играх. Они работали, находя место в памяти, где игра хранит свои данные, например, о количестве жизней или здоровье, а затем они напрямую обращались к данным и меняли их. С другой стороны, у нас также были вирусы, которые работали, пытаясь получить доступ к памяти, используемой важными системными службами, и повредить ее, чтобы они могли совершать свои гнусные поступки.
Еще одна вещь, которую стоит добавить - это подкачка или раздел подкачки. Для программиста, пишущего приложение, не важно, находится ли программа в файле подкачки или в ОЗУ, потому что ядро позаботится об этом. На моем ATmega 162 ситуация немного сложнее. Когда мне нужно использовать больше ОЗУ, чем доступно, я должен сначала вручную определить ситуацию, когда я израсходовал всю ОЗУ, после этого мне нужно вручную скопировать данные из ОЗУ на флэш-память, освободить ОЗУ, использовать его для любых целей. необходимо использовать его для, освободить его снова, переместить данные из флэш-памяти в оперативную память и затем освободить занимаемое место во флэш-памяти. На настольном компьютере программа даже не видит, была ли она перенесена на диск и затем перемещена обратно в оперативную память.
Еще одна интересная вещь - производительность. Вернемся к примеру ящика и склада. Давайте возьмем все предметы с наших складов и свалим их в одну кучу. Поэтому, если нам нужно взять один карандаш из ящика, мы просто откроем ящик и возьмем карандаш. Если нам нужно взять один конкретный карандаш из кучи тысяч других карандашей, тетрадей, линейок, конфет, ластиков и чего-то еще, нам придется потратить немало времени на его поиск. Это время (в среднем случае) намного больше времени, необходимого для поиска того же карандаша на хорошо организованном складе. С другой стороны, время, необходимое для поиска карандаша на организованном складе, намного больше, чем время, необходимое для поиска карандаша в ящике. Поэтому некоторые методы хорошо работают с небольшими объемами данных, а некоторые хорошо работают с большими объемами данных. Файловые системы улучшают производительность, сохраняя данные логическим способом на диске, в котором легко найти каждый отдельный элемент данных. Некоторые файловые системы также предоставляют другие преимущества. В случае JFFS2, файловой системы, разработанной для флэш-памяти, файловая система реализует выравнивание износа, так что разработанные пользователем или аппаратные средства не должны это делать.
Еще одна интересная вещь - мы можем использовать стандартные файловые системы для оперативной памяти! Существуют программы, которые занимают оперативную память и организуют ее так же, как файловую систему, и позволяют программам использовать ее так, как если бы она занимала место на диске.
Некоторые интересные ссылки:Статья по управлению памятью в Википедии описывает, как и почему данные в ОЗУ разделены. Статья об операционной системе, раздел памяти, объясняет, почему нам нужны такие вещи, как сегментация памяти, подкачка виртуальной памяти и так далее.
Чрезвычайно упрощенно, RAM имеет схему расположения, но она отвлекается аппаратными средствами.
Внутренне ОЗУ устроено как матрица "ячеек памяти", выложенных в строках и столбцах, как электронная таблица. Каждая ячейка памяти используется для хранения битов данных, которые можно мгновенно извлечь, указав расположение строки или столбца (или адрес) данных.
Это не сильно отличается от основной концепции того, как работает долговременное хранилище, файловая система и карты разделов - это просто абстракция, предотвращающая прямой доступ к сырому диску.
Схема разбиения была создана для жестких дисков, так что вы можете установить несколько несовместимых операционных систем, которые могут сосуществовать в разных частях одного и того же диска. Перьевые и SSD-накопители наследуют схему от жесткого диска, их старшего двоюродного брата.
Для персональных компьютеров ОЗУ обычно используется только одной операционной системой за раз, и, следовательно, для нее нет схемы разделения. Но даже в этом случае на некоторых больших компьютерах (мэйнфреймах) есть также схема разделения для оперативной памяти.
Оперативная память не нуждается в разделении, потому что она организована по страницам, и эти страницы динамически (MMU) структурированы без необходимости предварительного выделения областей. Тем не менее, существует некоторая эфемерная разметка, происходящая с ОЗУ, когда аппаратные компоненты, в основном некоторые графические карты, но это может быть что угодно, резервируют часть физической ОЗУ до загрузки ОС.
На самом деле, жесткие диски, флеш-накопители или твердотельные накопители на самом деле не нуждаются в схеме разделов, или, по крайней мере, они не должны. По-прежнему существуют неизбежные компоненты, такие как BIOS (или эквивалентные прошивки) и загрузчики, для которых требуется корректная работа таблицы разделов, но в противном случае разделы требуются только из-за ограничений конструкции операционных систем (точнее, файловых систем и менеджера томов).
Концепция пула ZFS продемонстрировала, что разделы не требуются, даже если вы хотите загрузить несколько операционных систем и если этим операционным системам требуются несколько томов и файловых систем.
Тогда разделы требуются только в том случае, если диски используются одной или несколькими операционными системами, которые не поддерживают ZFS (или гипотетический эквивалент).