I vår tid uppgraderas dina handhållna enheter och blir bättre och bättre. Vi har konsekvent fått uppgraderingar på minnesavdelningen (mer än vad vi egentligen behöver). Om du läser vårt tidigare inslag, ”Hur mycket RAM är för mycket RAM?”, kommer du faktiskt att veta hur mycket RAM som faktiskt behövs för att din smartphone ska fungera sömlöst och utöver det är det bara overkill.
Du kan behöva en uppgradering om din telefon i dagens tidsålder släpar efter eller blir långsammare. Men har du någonsin undrat varför, och ännu viktigare, hur det sker? I den här funktionen ska vi DeCode hur detta sker. Och mycket mer. Läs vidare!
Varför vår värld kretsar kring RAM?
I hjärtat av operativsystemet Android finns en Linux-kärna. När du startar en ny app skapar du en process inuti Linux. En process är nu ansvarig för alla de olika resurser som kärnan kan tilldela de olika apparna. CPU-tid, Input- och Output-processer och RAM anses alla som en resurs.
CPU-tid och I/O betraktas oftast som oändliga resurser. Om du har en upptagen CPU och vill köra en ny uppgift kommer din uppgift också att få en del av denna CPU-tid. Det är säkert att uppgiften kommer att utföras, men den kan fördröjas på grund av överbelastning av CPU-tid. På samma sätt kan din uppgift ske lite snabbare om CPU:n är mindre upptagen.
I fråga om I/O kan det hända att nedladdningen av en stor fil, skrivandet av något i det interna lagret eller andra processer som utförs samtidigt fördröjer deras slutförande, men det kommer att ske så småningom.
Hursomhelst finns RAM-minnet i en enhet i en fast mängd. Det är begränsat. Om du får slut på RAM finns det ingen magi som frigör RAM om du väntar lite längre. Därför behövde Android och Linux ett system som hjälpte dem att hantera denna begränsning.
Hur fungerar RAM i en smartphone?
När du startar en app på enheten startas en ny process som kräver av Linuxkärnan att den behöver (säg) ”X” mängder RAM bara för att ladda programmet. Därefter kan appen också be om mer minne för att läsa in fler filer eller ladda ner något från internet, och Linuxkärnan kommer att tillhandahålla det nödvändiga. Detta är hur grundläggande delegering av RAM sker.
Din enhet har en pool av tillgängligt minne, vilket skiljer sig från ledigt minne. Tillgängligt minne är faktiskt minne som är tillgängligt för att starta nya appar eller bearbeta andra appar, utan swapping. I ett multitasking-operativsystem är ledigt minne en dålig sak eftersom minnet ligger sysslolöst; det kan alltid hjälpa till i en eller annan process.
Fritt minne kan till exempel användas för att förbättra fil-I/O, nätverks-I/O för cachelagring eller kan ges till andra program som kan göra det extra minnet användbart. Samtidigt är det också markerat som tillgängligt minne. Därför kan det när som helst sluta användas som buffert eller caching och kan användas av en process.
I en 4 GB RAM-enhet används en del av minnet av hårdvarudrivrutiner och en del av det används av Android. Det återstående tillgängliga minnet efter omstart av ett nytt system kommer att vara cirka 1,7 GB. När en app startar kommer enheten att titta på det tillgängliga minnet och ge några bitar att använda för processer.
Den kommer faktiskt att dela upp minnet i sidor, en sida på ca 4 KB. Dessa sidor kan delegeras av systemet till olika processer efter behov. Alla processer kommer att fungera bra om det finns minne i överflöd. Men när det tillgängliga minnet minskar i takt med att antalet program ökar börjar det orsaka problem. Vid någon tidpunkt finns det inte tillräckligt med tillgängligt minne för att starta en ny process.
I detta skede har Linux och Android ett problem. För att klara av detta kan de antingen göra swapping eller döda en app för att frigöra minne. Begreppet swapping kommer från servrar och stationära datorer. När man inte har tillräckligt med minne kan man ta en del av det aktiva minnet som för närvarande finns i RAM och skriva ner det till en hårddisk. På så sätt frigör du det blocket/den sidan av minnet. Om den sidan senare behövs igen kan du hämta tillbaka den från hårddisken. Android fungerar dock lite annorlunda och lagrar inte minnet till en hårddisk.
Android använder ZRAM (”Z” i Unix-termer är en symbol för komprimerat RAM). ZRAM-swap kan öka mängden tillgängligt minne i systemet genom att komprimera minnessidor och placera dem i det dynamiskt allokerade swap-området i minnet. När något har skrivits till detta komprimerade minne kan man inte komma åt det och det blir ungefär som en ZIP-fil. Om du vill använda den måste du packa upp den och skriva tillbaka den till huvudminnet. Denna process är swapping out och swapping back in. Denna evigt pågående cykel av byte kallas ”thrashing”. Android har inga problem med thrashing, för när den är mättad, dvs. när den får slut på utrymme för swapping, börjar den bara döda processer.
Den väljer en app som du inte har använt på ett tag från listan och dödar den. Det frigör det utrymme som den appen använde och nu är utrymmet tillgängligt för en ny app eller en befintlig app att expandera. Alla appar är utformade på ett sådant sätt att när en app hamnar i bakgrunden finns det alltid en chans att den aldrig öppnas igen. Så deras nuvarande tillstånd sparas.
Om du öppnar appen igen laddar den om. Ibland är den här processen inte sömlös. Om du till exempel spelade ett spel börjar den inte där du slutade utan kanske börjar från samma nivå. Hur väl appen klarar av den här situationen beror på appen och den person som har skrivit appen. Om du behöver ett större minne kan flera processer dödas.
Frekvent omladdning leder till en bitter användarupplevelse. Därför är det att föredra att ha mer RAM-minne ur användarens synvinkel. Även om alla nyanser av swapping och när det byts är lite mer komplicerade. Men när telefonen är överbelastad är det oundvikligt att döda vissa appar för att hålla telefonen igång och hindra den från att frysa. Att döda är i grunden ett nödvändigt ont, som antagits av Android-systemet. Håll ögonen öppna för fler sådana artiklar som kommer i din väg. Trevlig läsning!