Nhãn

26 tháng 7, 2012

435. Android A to Z: What is a kernel? (Anh – Việt)


By Jerry Hildenbrand  | Jan 23 2012 | 1:58 pm  |


What is a kernel?  If you spend any time reading Android forums, blogs, how-to posts or online discussion you'll soon hear people talking about the kernel. A kernel isn't something unique to Android -- iOS and MacOS have one, Windows has one, BlackBerry's QNX has one, in fact all high level operating systems have one. The one we're interested in is Linux, as it's the one Android uses. Let's try to break down what it is and what it does.

Thế nào là 1 kernel? Nếu bạn từng bỏ thời gian đọc các diễn đàn, các blog, các bài hướng dẫn trên mạng hoặc thảo luận online về Android thì bạn sẽ nghe thấy ngay mọi người nói chuyện về kernel. Một kernel không phải là cái gì đó dành riêng cho Android - mà [các hệ điều hành] iOS và MacOSWindowsQNX của BlackBerry đều có 1 cái, trong thực tế tất cả các hệ điều hành cao cấp đều có. Cái mà được chúng ta quan tâm là trong [hệ điều hành] Linux, vì nó là cái Android sử dụng [kernel]. Nào, giờ cố vỡ ra nó là cái gì và nó làm gì.

Android devices use the Linux kernel, but it's not the exact same kernel other Linux-based operating systems use. There's a lot of Android specific code built in, and Google's Android kernel maintainers have their work cut out for them. OEMs have to contribute as well, because they need to develop hardware drivers for the parts they're using for the kernel version they're using. This is why it takes a while for independent Android developers and hackers to port new versions to older devices and get everything working. Drivers written to work with the Gingerbread kernel on a phone won't necessarily work with the Ice Cream Sandwich kernel.

Các thiết bị Android sử dụng kernel Linux, nhưng nó không giống hoàn toàn kernel mà các hệ điều hành Linux khác sử dụng. Có rất nhiều mã đặc thù Android được xây dựng trong đó, và công việc của những người phát triển kernel Android từ Google là tỉa tót chúng. Các OEM (Original Equipment Manufacturer - Nhà sản xuất thiết bị gốc) phải góp phần vào - tất nhiên, bởi vì họ cần để phát triển các driver (trình điều khiển) phần cứng cho các bộ phận mà họ đang sử dụng và cho phiên bản kernel mà họ đang dùng. Điều này giải thích vì sao phải mất thời gian cho các Android developer độc lập (chuyên viên phát triển Android) và các hacker post (chuyển qua mạng) các phiên bản mới [kernel] đến các thiết bị cũ hơn và làm mọi thứ làm việc. Các driver được viết để làm việc với kernel cho [phiên bản Android] Gingerbread trên 1 phone thì không nhất thiết làm việc với kernel cho [phiên bản Android] Ice Cream Sandwich.

And that's important, because one of the kernel's main functions is to control the hardware. It's a whole lot of source code, with more options while building it than you can imagine, but in the end it's just the intermediary between the hardware and the software.

Và quan trọng là, vì 1 trong số các chức năng chính của kernel là điều khiển phần cứng. Nên nó là 1 tập hợp rất nhiều mã nguồn, với nhiều hơn các tùy chọn khi xây dựng nó so với [cái] bạn có thể hình dung, nhưng cuối cùng nó chỉ là trung gian giữa phần cứng và phần mềm.

When software needs the hardware to do anything, it sends a request to the kernel. And when we say anything, we mean anything. From the brightness of the screen, to the volume level, to initiating a call through the radio, even what's drawn on the display is ultimately controlled by the kernel. For example -- when you tap the search button on your phone, you tell the software to open the search application. What happens is that you touched a certain point on the digitizer, which tells the software that you've touched the screen at those coordinates. The software knows that when that particular spot is touched, the search dialog is supposed to open. The kernel is what tells the digitizer to look (or listen, events are "listened" for) for touches, helps figure out where you touched, and tells the system you touched it. In turn, when the system receives a touch event at a specific point from the kernel (through the driver) it knows what to draw on your screen.

Khi phần mềm cần phần cứng làm bất kỳ cái gì, nó gửi 1 yêu cầu đến kernel. Chúng tôi nói ‘bất kỳ cái gì’ nghĩa là bất kỳ cái gì. Từ brightness (độ chói) của màn hình, đến mức độ âm thanh, đến bắt đầu 1 cuộc gọi qua [sóng] radio, thậm chí cho đến cái được lôi ra trên màn hình hiển thị rút cục cũng đều được điều khiển bằng kernel. Thí dụ -- khi bạn gõ nhẹ nút search (tìm kiếm) trên phone của bạn, là bạn lệnh cho phần mềm mở ứng dụng search. Điều gì xảy ra khi bạn đã chạm vào 1 điểm nào đó trên màn hình số hóa, cái nói cho phần mềm rằng bạn đã chạm vào màn hình tại cụm tọa độ ấy. Phần mềm hiểu là khi 1 vết xác định được chạm, thì hộp thoại search được đòi hỏi mở ra. Kernel sẽ nói gì đó với màn hình số hóa để tìm kiếm (hay chú ý nghe ngóng, thậm chí là “đã nghe”) các va chạm, giúp phân tích nơi bạn đã chạm vào, và nói với hệ thống là bạn đã chạm vào đó. Đến lượt, khi hệ thống nhận được 1 sự kiện cảm ứng tại 1 điểm nhất định từ kernel (thông qua driver) thì nó sẽ hiểu phải vẽ cái gì trên màn hình của bạn.

Both the hardware and the software communicate both ways with the kernel, and that's how your phone knows when to do something. Input from one side is sent as output to the other, whether it's you playing Angry Birds, or connecting to your car's Bluetooth.

Cả phần cứng và phần mềm đều liên lạc bằng cả 2 đường với kernel, và đó là cách phone của bạn biết khi làm gì đó. Đầu vào từ 1 phía được gửi đi thành đầu ra phía kia, hoặc bạn chơi Angry Birds, hoặc kết nối với Bluetooth trong xe hơi của bạn.

It sounds complicated, and it is. But it's also pretty standard computer logic -- there's an action of some sort generated for every event. Without the kernel to accept and send information, developers would have to write code for every single event for every single piece of hardware in your device. With the kernel, all they have to do is communicate with it through the Android system API's, and hardware developers only have to make the device hardware communicate with the kernel. The good thing is that you don't need to know exactly how or why the kernel does what it does, just understanding that it's the go-between from software to hardware gives you a pretty good grasp of what's happening under the glass. Sort of gives a whole new outlook towards those fellows who stay up all night to work on kernels for your phone, doesn't it?
Nghe có vẻ phức tạp, và nó là thế. Nhưng nó cũng tương đối logic máy tính tiêu chuẩn – có một hành động trong 1 số lựa chọn phát sinh cho mỗi sự kiện. Không có kernel để chấp nhận và gửi thông tin, các developer sẽ phải viết mã cho mọi sự kiện đơn lẻ cho mỗi bộ phận đơn lẻ của phần cứng trong thiết bị của bạn. Với kernel, tất cả họ phải làm là liên lạc với nó thông qua các API (Application Programming Interface – giao diện lập trình ứng dụng) của hệ thống Android, và các developer phần cứng chỉ phải làm cho phần cứng của thiết bị giao tiếp với kernel. Điều tốt là bạn không cần hiểu thật rõ làm cách nào hay tại sao kernel làm cái gì, chỉ cần hiểu là nó chạy từ phần mềm đến phần cứng trao cho bạn 1 nắm bắt khá tốt về những gì đang xảy ra dưới lớp kính. Phần nào đưa ra 1 cách nhìn hoàn toàn mới về các thành viên nghiên cứu, những người dành cả đêm để làm việc trên các kernel cho phone của bạn, không phải thế sao?

Không có nhận xét nào:

Đăng nhận xét