7

Как устроена память в Android

Как устроена память в Android? В этой статье я хочу разрушить несколько мифов, а так же объяснить почему на самом деле удаляя системное приложение вы не получаете больше свободной памяти.


Начну издалека. Смотрите, вы скорее всего привыкли пользоваться Windows и уже имеете понимание как устроены диски и разделы в вашем компьютере. Не знаю как сейчас, а еще лет 10 назад было очень модно при установке Windows делать 2 диска - "C" и "D". На "С" обычно ставили систему, а "D" хранили важные файлы, типа музыки, фоток, документов. Делали это, если кто забыл, для того чтобы через пол-года - год, спокойно отформатировать диск "С" и поставить винду заново. Раньше не у всех были антивирусы, да и софт был зачастую такого себе качества... Впрочем ушли от темы. Так вот физически диск как правило в компьютере был один, а при включении ПК видели "C" и "D". Как это? Наверное тут виноваты локализаторы Windows (но это не точно), правильно было бы называть "C" и "D" не дисками, а разделами.


Так вот разделов на диске может быть сколько угодно, и Android этим активно пользуется. Внутренняя память у вашего телефона одна, то есть один диск (чип), а нем куча разделов. Я сейчас не буду описывать все, в среднем их обычно 15 плюс-минус от производителя к производителю, опишу лишь основные.


Самый главный раздел это Bootloader. В этом разделе содержится загрузчик вашего телефона. Наиболее всего это похоже на Bios как в вашем ПК. Железо в первую очередь грузит загрузчик, а что делать дальше оно не знает, и тут уже загрузчик объясняет железу что далее надо грузить ядро - систему и.т.д. Знатоки конечно могут бросить сейчас в меня тапком, но такого объяснения вполне достаточно на мой взгляд для общего понимая.


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

Как устроена память в Android Android, Длиннопост, Текст, Как это сделано

Я нарисовал некий воображаемый чип памяти вашего телефона. Скажем объемом 16гб. Скажем Bootloader занимает 100мб, еще 100мб занимает ядро (все размеры вымышленные, но близки к оригиналу). Прошивка (System) занимает скажем 3гб. Ну а все что осталось остается под Data.

Раздел Data делится на две основные части. Первая это ваши скаченные приложения и их данные. Например приложение Пикабу + данные + его кэш. Все это хранится в папке data на разделе Data (масло масленное, но что делать), остальное, ваши фотки, музыка, документы и.т.д. хранится в папке sdcard опять же на разделе Data. У вас есть почти полный доступ в разделу Data. Почему почти, как нибудь в другой раз расскажу) Представьте что вы решили удалить приложение Пикабу, т.к. оно находится в разделе Data который вы же используете под свои файлы, вы сразу увидите немного освободившегося места. А вот скажем если вы удалите установленный в прошивку Яндекс поиск с помощью root прав, памяти больше не становится. Почему так? Потому что все системные приложения называются системными от того что установлены они в систему. То есть в раздел System. От того что вы что либо удаляете из System, памяти в Data не прибавляется. Ну представьте как вы удаляете просмотренный фильм с диска "D", памяти на диске "C" же не прибавляется?


Вы наверное надеетесь что освобожденное место в System передается как то разделу Data, но это не так. Более того, я вам скажу, что вашей прошивке не нужно столько места сколько есть в System. Чтоб было понятнее - например ваш раздел System это 3гб от общей памяти. 3гб! Этот размер определил производитель. Как правило на этом 3-х гб "диске" лежит 2-х гб прошивка, а один оставшийся гб сделан просто на всякий случай! Это делает производитель на будущее. Вдруг он решит в следующей версии прошивки сделать прошивку не 2гб, а 2.3гб! Ну вот решит функцию какую нибудь добавить например. Вот для этого и сделан этот лишний гб. А теперь подумайте, кому станет легче, от того что вы удалить из раздела System пару приложений? Там и там был лишний 1 гб, а станет 1.1гб. При этом Android так устроен, что ему вообще ничего не нужно писать в System, он от туда только читает. Размер раздела Data тоже задает производитель, как правило это то что осталось после всех остальных разделов. Ну то есть производитель увидел что после записи всех разделов осталось например 11гб, вот значит эти 11 и разметить под раздел Data. Короче говоря размер опять же фиксированый.


Можно ли переразметить разделы? Сделать скажем 2гб под System, оставшееся место отдать Data?

Чисто в теории можно, но практически этим почти никто не занимался. Мне попадались некоторые аппараты под которые были написаны скрипты переразметки, но это единицы аппаратов. Например у Samsung переразметка осуществляется Pit файлами, есть даже редактор этих файлов, но например мой Samsung Demo Unit Note 3 кушать такой измененный pit отказался. Я видел скрипт для Galaxy Nexus через parted, но опять же возможности протестировать не было. Короче, переразметка это очень не популярное явление, да и опасное, чего уж там. В вашем компьютере Bios на отдельном чипе, и обычный пользователь вряд ли будет с ним хоть как то взаимодействовать, а значит не убьет. В Android же bootloader находится на том же чипе что и основная память, а значит шанс случайно грохнуть раздел bootloader при манипуляциях с переразметкой памяти очень большой. С грохнутым bootloader вы не сможете прошить телефон, железо просто не будет знать что делать при включении. Вот вообще знать не будет! Такой телефон придется прошивать на специальном оборудовании и самое главное далеко не каждого мастера оно есть. Конечно из этой ситуации бывают исключения, но сути это не меняет. В 90% случаев понадобиться специальное оборудование.


В заключение хочу сказать что если вы думаете, что удалив софт из System вашему телефону станет "легче дышать", то это снова не так, но об этом уже в следующий раз).