Xem bản thử nghiệm

Giải ngố về kernel - Thứ có thể biến điện thoại của bạn thành cục gạch cấu hình khủng

Nguyễn Hải , Theo Trí Thức Trẻ

Cho dù có ngoại hình đẹp, cấu hình cực khủng, nhưng nếu không chú ý, một lỗi của kernel có thể biến thiết bị của bạn thành cục gạch đẹp nhất mọi thời đại.

Sau một thời gian sử dụng Android hay PC, có lẽ bạn sẽ nghe nhắc đến thuật ngữ nhân Linux hay Linux kernelkhi Android sử dụng nhân này. Trong cụm từ này có lẽ Linux là từ dễ hiểu hơn cả, vậy kernel hay “nhân” ở đây nghĩa là gì? Cuối cùng là nhân Linuxnghĩa là gì?

Một điều bạn cần nhớ về các máy tính là chúng rất ngốc. Thực sự ngu ngốc. Chúng chỉ biết làm một thứ và chỉ một thứ mà thôi, đó là thực hiện các câu lệnh. Hết câu lệnh này đến câu lệnh khác, cứ thế kéo dài vô tận. Nó chỉ là một tập hợp các câu lệnh được tạo ra để các máy tính, bao gồm cả thiết bị di động, có thể thực hiện một tác vụ hữu ích nào đó.

Từ thời điểm một máy tính khởi động, nó đã cần các câu lệnh. Ngay cả khi thiết bị Android của bạn đang khởi động và hiện ra một logo khởi động nào đó, đó thực ra là việc CPU đang tuân theo một câu lệnh nào đó. Khi điện thoại của bạn khởi động xong, hiện ra trước mắt bạn sẽ là một launcher thuận tiện, các ứng dụng như trình duyệt Chrome hay các trò chơi nào đó. Nhưng bên dưới chúng, những thứ mắt bạn không nhìn thấy, còn có nhiều điều khác mà chúng ta ít biết đến.

Bên dưới giao diện người dùng là một loạt các hệ thống khác bao gồm máy ảo Java (ví dụ Dalvik hay ART) và SurfaceFlinger, chịu trách nhiệm ghép tất cả những thứ khác nhau cần phải “vẽ” lại để tạo thành một bộ đệm duy nhất, để sau đó hiển thị bộ đệm này lên màn hình.

Đi xuống sâu hơn nữa, thực sự sâu xuống dưới, bạn sẽ chạm đến phần nhân – kernel, hay chính xác hơn là nhân Linux – Linux kernel của hệ điều hành. Tất cả hệ điều hành đa nhiệm đều có một nhân dạng này hay dạng khác. Windows có nhân riêng, OS X có nhân riêng, iOS có một nhân, Windows Phone cũng có một nhân khác và tất nhiên Android có một nhân khác. Nhưng chỉ có Android sử dụng nhân Linux. Windows và Windows Phone có nhân riêng thường được gọi là nhân NT, còn OS X và iOS sử dụng một nhân được gọi là Darwin.

Ngoài ra còn rất nhiều các nhân khác nữa, như nhân Unix của FreeBSD hay NetBSD, nhân năng lượng như nhân hệ điều hành từ ARM, … nhưng chúng là gì? Tóm lại, nhân – hay kernel – là chương trình lõi để quản lý các tài nguyên CPU, bộ nhớ hệ thống, thiết bị hệ thống bao gồm các hệ thống file và kết nối mạng. Ngoài ra nó còn chịu trách nhiệm quản lý các tiến trình – hay các process.

Điều đó có nghĩa là khi bạn khởi động một ứng dụng, kernel sẽ tải ứng dụng đó vào trong bộ nhớ, tạo ra các tiến trình cần thiết và khởi động để ứng dụng chạy. Khi ứng dụng cần bộ nhớ, kernel sẽ phân bổ cho nó. Khi ứng dụng cần kết nối mạng, kernel sẽ làm tất cả các tác vụ xử lý bậc thấp.

Trình điều khiển – hay driver cho các thiết bị cũng nằm trong kernel. Khi ứng dụng muốn thực hiện một tác vụ chạy ngầm, kernel sẽ xử lý các luồng chạy ngầm đó. Khi ứng dụng đóng lại, kernel sẽ làm sạch hay thu hồi lại bộ nhớ và các tài nguyên khác đã sử dụng bởi ứng dụng.

Giờ bạn đã có thể thấy kernel là một phần khá phức tạp của phần mềm. Linux kernel được cho là có khoảng 15 triệu dòng lệnh trong mã nguồn. Nó bao gồm tất cả các driver (chiếm 70% số dòng code), thêm vào đó là việc hỗ trợ cho các kiến trúc hệ thống khác nhau (như ARM, x86, MIPS, IBM, PowerPC, SPARC...).

Khi kernel được xây dựng cho một thiết bị cụ thể, ví dụ như smartphone, không phải toàn bộ 15 triệu dòng lệnh đó sẽ được sử dụng, tuy nhiên, ngay cả khi loại bỏ bớt các dòng code không cần thiết, số dòng code trong kernel vẫn còn vô cùng nhiều.

Monolithic và Microkernel

Cũng như với tất cả các hệ điều hành phức tạp, có nhiều cách tiếp cận khác nhau, có thể sử dụng khi thiết kế một kernel. Nhân Linux kernel còn được biết đến với tên monolithic kernel – nhân nguyên khối. Điều đó có nghĩa là kernel là một chương trình sử dụng một không gian bộ nhớ.

Một cách tiếp cận chủ yếu thay thế cho cách này là microkernel – vi nhân. Với các microkernel, các yếu tố cần thiết của kernel được đặt trong một chương trình nhỏ nhất có thể và nó tương tác với các chương trình cấp độ kernel khác, các chương trình này vốn chạy như các máy chủ hay các dịch vụ riêng biệt.

Do Linux là một nhân monolithic kernel, cần phải có cách để kích hoạt và vô hiệu hóa một số phần nhất định của kernel phụ thuộc vào nhu cầu của bạn. Điều này được thực hiện trong thời gian biên dịch, sử dụng một hệ thống cho phép kernel được tinh chỉnh, chia nhỏ và cấu hình khi cần thiết. Một số cấu hình làm nhiều hơn chỉ là kích hoạt và tắt các chức năng nhất định, chúng thực sự thay đổi hành vi của kernel.

Do Linux cũng như Android là mã nguồn mở, vì vậy hoàn toàn có thể xây dựng một phiên bản Android với kernel đã chỉnh sửa, với các thiết lập khác so với kernel mặc định. Kernel này sau đó có thể được sao chép vào thiết bị Android của bạn, để thay cho kernel mặc định. Để làm được việc này bạn cần có một chiếc điện thoại đã được mở khóa bộ khởi động (bootloader) và đã được root.

Có lẽ kernel nổi tiếng nhất, có thể thay thế cho Android là Franco kernel. Nó xuất hiện trên các dòng Nexus khác nhau (bao gồm cả Galaxy Nexus và Nexus 4) và thậm chí còn có một ứng dụng giúp bạn sử dụng kernel này dễ dàng nhất có thể. Tuy nhiên, Franco kernel không phải kernel thay thế duy nhất, ngoài ra còn có ElementalX kernel, Jolla kernel và nhiều loại khác nữa.

Ưu điểm và nhược điểm của việc thay thế kernel

Đầu tiên là các nhược điểm, để đặt một kernel mới vào thiết bị Android, bạn sẽ cần quyền truy cập root của thiết bị. Một số người cảm thấy thoải mái với việc này, một số khác thì không. Việc làm này cũng mang ngụ ý về những người có một trình độ kỹ thuật nhất định nào đó. Đặt một kernel mới vào thiết bị không phải là một kỹ năng phổ biến của tất cả mọi người.

Ngoài ra bạn cũng cần phải tin tưởng người xây dựng kernel cho mình. Hãy hy vọng rằng có thể sẽ không có những dòng code độc hại lẫn trong kernel mới, nhưng quan trọng hơn, đó là người tạo ra bản kernel này có đáng tin cậy về mặt sửa chữa các lỗi hay không. Ngoài ra còn có nỗi lo về khả năng “hóa gạch” cho thiết bị của bạn khi cài đặt các kernel mới.

Khi bạn có một chiếc Android từ một nhà OEM đáng tin cậy, sau đó mỗi khi có bản cập nhật mới, các firmware cập nhật đều sẽ được kiểm tra rất nhiều lần trước khi phát hành. Trong khi đó, nếu bạn sử dụng một kernel mới, bạn có thể gặp tình trạng kernel hoạt động không ổn định và người làm kernel đó không chịu trách nhiệm cho các yêu cầu sửa lỗi hay trả lời câu hỏi. Nếu không bị “hóa gạch”, câu trả lời tốt nhất cho bạn là cài đặt một kernel khác.

Cũng đáng chú ý rằng việc root điện thoại và sử dụng một kernel mới sẽ làm mất hiệu lực bảo hành của bạn. Phần lớn các kernel phát hành trên những diễn đàn như XDA luôn đi kèm một thông báo: “Bạn sẽ không được bảo hành. Tôi không chịu trách nhiệm cho các thiết bị bị brick.” Một số thậm chí còn nói “Bạn đang chọn thực hiện những sự thay đổi này, và nếu bạn cho rằng tôi đã làm hỏng thiết bị của bạn, tôi sẽ cười vào mặt bạn.” Như vậy, bạn đã được cảnh báo rồi đấy.

Mặt tích cực của việc này có kernel mới là khả năng chỉnh sửa cao, bạn sẽ có thể làm việc với nhiều bộ điều chỉnh và bộ lập lịch trình khác nhau. Ngoài ra các kernel được tùy chỉnh này thường có thêm các tính năng phụ khác. Nó cũng cho phép bạn truy cập nhiều hơn vào các phiên bản gần đây của nhân Linux kernel.

Một số người cho rằng các kernel tùy chỉnh có thể giúp cải thiện thời lượng pin sử dụng hay tăng hiệu năng, phụ thuộc vào cách người xây dựng kernel tinh chỉnh theo các thiết lập nào và cách sử dụng của bạn. Tuy nhiên, hiện tại các nhà sản xuất Android đang cạnh tranh với nhau và với Apple rất quyết liệt để giành giật khách hàng, bằng cách đưa ra những chiếc smartphone tốt nhất với giá tốt nhất.

Vì vậy, nếu họ có thể làm thời lượng pin tốt hơn hay hiệu năng tốt hơn chỉ bằng cách tinh chỉnh vài thông số trong kernel, thì bạn có thể yên tâm rằng họ sẽ làm ngay. Thông thường, cải thiện thời lượng pin sẽ làm hiệu suất giảm và gia tăng hiệu suất sẽ làm giảm thời lượng pin, vì vậy mục tiêu là cân bằng giữa cả hai yếu tố này.

Kết luận

Tất cả các hệ điều hành đa nhiệm đều có một kernel dưới dạng này hay dạng khác. Nó là một chức năng cốt lõi để quản lý các tài nguyên của hệ thống, bao gồm bộ nhớ, các tiến trình và các trình điều khiển khác nhau. Phần còn lại của hệ điều hành, có thể là Windows, OS X, iOS, Android hay bất cứ thứ gì đều được đặt ở phía bên trên của kernel.

Kernel được sử dụng bởi Android là nhân Linux kernel. Do nhân Linux kernel cũng như Android đều là mã nguồn mở, nên các kernel có thể được tùy chỉnh với các thiết lập cấu hình khác nhau. Các kernel này sau đó có thể thay thế cho kernel mặc định của thiết bị. Để làm vậy, bạn sẽ cần quyền truy cập root và mở khóa bộ nạp khởi động. Các kernel thay thế phổ biến bao gồm nhân Franco kernel và nhân ElementalX kernel, nhưng vẫn còn nhiều kernel khác nữa.

Tham khảo AndroidAuthority

Bình luận

NỔI BẬT TRANG CHỦ