Mục lục bài họcĐang ở d06-b4
Dedicated Operating Systems, Embedded Devices and Hiding Complexity
General-purpose versus dedicated. A desktop or server operating system must run software nobody has written yet, so it is general: multitasking, virtual memory, drivers for every device, a graphical interface, multiple user accounts, gigabytes of code, frequent updates. Its priorities are compatibility, flexibility and throughput, and its cost is unpredictability — when it is busy, you wait. A dedicated operating system runs one known set of software on one known device: a washing machine, a camera, a pacemaker, a traffic controller. It strips out everything that device does not need — no virtual memory, no graphical shell, few drivers — so it fits in kilobytes to a few megabytes, starts instantly, runs for years without rebooting, and consumes little power. Its priorities are reliability, predictability, cost and power, and its weakness is that it is hard or impossible to update, so a security flaw can live in millions of devices for their whole lifetime.
Real-time operating systems. Many dedicated systems are also real-time: they guarantee a response within a fixed deadline. An anti-lock braking controller that responds late is worse than one that does not respond at all, because the driver has adjusted for it. Real-time systems therefore use scheduling by deadline rather than by fairness, avoid anything with unpredictable timing — dynamic memory allocation, virtual memory, garbage collection — and are tested for worst-case timing, not average.
Hiding complexity. The most examinable property of any operating system is that it presents a simple picture of a complicated machine. Four abstractions recur in questions. Drive letters and folders hide the physical disk with its partitions, sectors and fragmented files. Virtual memory hides the fact that RAM is smaller than the total demand and that parts of programs are on disk. Device drivers hide thousands of keyboards, mice and printers behind one interface, so an application prints without knowing the printer. The Java virtual machine hides the real processor, so the same compiled code runs on any hardware that has a virtual machine. Each abstraction lets programmers and users ignore detail they do not need; the price is some performance and, when something fails, difficulty seeing what is really happening.
Multi-user and multi-tasking. A server operating system also isolates users from one another: each has an account, a home directory, permissions, and a share of the processor; one user's crash or misuse must not affect the others. This is why servers run without a graphical interface, why every action is logged, and why the scheduler favours fairness and throughput over the instant responsiveness that a single-user desktop values.
Đa dụng và chuyên dụng. Hệ điều hành máy bàn hay máy chủ phải chạy phần mềm chưa ai viết, nên nó tổng quát: đa nhiệm, bộ nhớ ảo, trình điều khiển cho mọi thiết bị, giao diện đồ hoạ, nhiều tài khoản người dùng, hàng gigabyte mã, cập nhật thường xuyên. Ưu tiên của nó là tương thích, linh hoạt và thông lượng, và cái giá là không đoán được — khi nó bận, bạn chờ. Hệ điều hành chuyên dụng chạy một bộ phần mềm biết trước trên một thiết bị biết trước: máy giặt, máy ảnh, máy tạo nhịp tim, tủ điều khiển giao thông. Nó bỏ mọi thứ thiết bị đó không cần — không bộ nhớ ảo, không giao diện đồ hoạ, ít trình điều khiển — nên nằm gọn trong vài kilobyte tới vài megabyte, khởi động tức thì, chạy nhiều năm không khởi động lại, và tiêu thụ ít điện. Ưu tiên của nó là tin cậy, đoán được, chi phí và điện, và điểm yếu là khó hoặc không thể cập nhật, nên một lỗ hổng bảo mật có thể sống trong hàng triệu thiết bị suốt vòng đời của chúng.
Hệ điều hành thời gian thực. Nhiều hệ chuyên dụng còn là thời gian thực: chúng bảo đảm phản hồi trong một hạn định cố định. Bộ điều khiển chống bó phanh phản hồi muộn còn tệ hơn không phản hồi, vì người lái đã điều chỉnh theo nó. Vì vậy hệ thời gian thực lập lịch theo hạn định thay vì theo công bằng, tránh mọi thứ có thời gian không đoán được — cấp phát bộ nhớ động, bộ nhớ ảo, thu gom rác — và được kiểm thử theo thời gian xấu nhất, không phải trung bình.
Che giấu phức tạp. Tính chất dễ ra thi nhất của mọi hệ điều hành là nó trình bày một bức tranh đơn giản của một cỗ máy phức tạp. Bốn lớp trừu tượng lặp lại trong đề. Ký tự ổ đĩa và thư mục che đĩa vật lý với phân vùng, sector và tệp bị phân mảnh. Bộ nhớ ảo che việc RAM nhỏ hơn tổng nhu cầu và các phần của chương trình đang nằm trên đĩa. Trình điều khiển thiết bị che hàng nghìn kiểu bàn phím, chuột và máy in sau một giao diện, nên ứng dụng in mà không cần biết máy in. Máy ảo Java che bộ xử lý thật, nên cùng mã đã biên dịch chạy trên mọi phần cứng có máy ảo. Mỗi lớp trừu tượng cho phép người lập trình và người dùng bỏ qua chi tiết họ không cần; cái giá là một phần hiệu năng và, khi có gì hỏng, khó thấy chuyện gì thật sự xảy ra.
Nhiều người dùng và đa nhiệm. Hệ điều hành máy chủ còn cách ly người dùng với nhau: mỗi người có tài khoản, thư mục riêng, quyền, và một phần bộ xử lý; sự cố hay lạm dụng của một người không được ảnh hưởng người khác. Đó là lý do máy chủ chạy không có giao diện đồ hoạ, mọi hành động được ghi nhật ký, và bộ lập lịch ưu tiên công bằng và thông lượng hơn tính phản hồi tức thì mà máy bàn một người dùng coi trọng.
Một công ty thiết kế máy bơm insulin đeo trên người: đọc đường huyết mỗi 5 phút, tính liều, bơm, và cảnh báo. Pin phải sống 2 tuần. Một kỹ sư đề xuất dùng hệ điều hành điện thoại rút gọn vì đội đã quen. Hãy đánh giá và đề xuất.
Yêu cầu quyết định. Ba thứ: tin cậy tuyệt đối vì bơm sai liều gây chết người; thời gian thực vì liều phải tính và bơm trong hạn định sau mỗi lần đọc; và pin 2 tuần với một thiết bị nhỏ. Đây là chân dung của hệ điều hành chuyên dụng thời gian thực.
Vì sao hệ điều hành điện thoại rút gọn không phù hợp. Một, nó là đa dụng: có bộ nhớ ảo, cấp phát động, nhiều tiến trình nền, cập nhật tự động — mọi thứ đều có thời gian không đoán được, và rút gọn không loại hết vì chúng đan vào lõi. Hai, nó tiêu điện cho những việc bơm không cần, và pin 2 tuần bất khả thi. Ba, bề mặt tấn công lớn: hàng triệu dòng mã chưa được kiểm định cho thiết bị y tế, và cơ quan quản lý sẽ đòi chứng minh từng dòng. Việc đội đã quen là lợi ích thật nhưng nhỏ so với ba điều trên.
Đề xuất. Hệ điều hành thời gian thực nhỏ, vài chục kilobyte, lập lịch theo hạn định, không cấp phát động sau khi khởi động, toàn bộ bộ nhớ được cấp tĩnh để không bao giờ hết giữa chừng; thiết bị ngủ sâu giữa các lần đọc và chỉ thức vài mili giây. Kiểm thử theo thời gian xấu nhất, không theo trung bình. Kèm một cơ chế cập nhật có ký số, vì điểm yếu của hệ chuyên dụng là không sửa được lỗi sau khi bán — với thiết bị y tế điều đó không chấp nhận được.
Điểm đánh giá. Bài tốt thừa nhận lợi ích của đề xuất (đội quen, phát triển nhanh) rồi cho thấy ba yêu cầu quyết định loại nó, và không quên nêu điểm yếu của phương án được chọn cùng cách bù.
Một người dùng bấm Lưu trong trình soạn thảo Java trên laptop, tệp được ghi vào ổ D. Hãy chỉ ra bốn lớp che giấu phức tạp tham gia vào thao tác này, mỗi lớp che điều gì, và nêu một tình huống mà lớp che giấu đó gây khó khi có lỗi.
Máy ảo Java. Trình soạn thảo được viết một lần thành mã trung gian; máy ảo dịch nó cho bộ xử lý của laptop này. Nó che kiến trúc bộ xử lý thật, nên cùng chương trình chạy trên laptop Intel hay ARM. Khi có lỗi: một chương trình chậm bất thường có thể do máy ảo đang thu gom rác, và người lập trình Java không nhìn thấy điều đó từ mã của mình.
Ký tự ổ đĩa và thư mục. Ổ D và đường dẫn thư mục che một phân vùng trên một đĩa vật lý với hàng triệu sector; hệ tệp quyết định tệp nằm ở sector nào và có bị chia thành mấy mảnh. Khi có lỗi: ổ D đầy có thể là phân vùng đầy trong khi đĩa vật lý còn trống ở phân vùng khác, và người dùng không hiểu vì sao mua thêm đĩa không giải quyết.
Bộ nhớ ảo. Trình soạn thảo tin rằng mình có một vùng bộ nhớ liền mạch lớn; thực tế một phần tài liệu đang nằm trên đĩa và được chuyển vào RAM khi cần. Khi có lỗi: máy chậm hẳn khi mở tệp lớn — thrashing — và người dùng thấy đĩa nháy liên tục mà không hiểu liên quan gì tới bộ nhớ.
Trình điều khiển thiết bị. Lệnh ghi tới ổ D đi qua trình điều khiển của loại ổ cụ thể — SSD hay ổ cứng, cổng nào — mà trình soạn thảo không cần biết. Khi có lỗi: một trình điều khiển lỗi làm tệp ghi hỏng, và mọi tầng trên đều báo đã lưu vì chúng chỉ thấy giao diện chung.
Kết luận. Mỗi lớp che giấu cho phép một nhóm người bỏ qua chi tiết, và mỗi lớp có cái giá là khi hỏng, triệu chứng xuất hiện ở tầng trên trong khi nguyên nhân nằm ở tầng dưới. Đó là lý do chẩn đoán lỗi hệ thống đòi hỏi biết các lớp này tồn tại.
Bẫy 2 — quên điểm yếu của hệ chuyên dụng. Khó cập nhật, nên lỗ hổng sống suốt vòng đời thiết bị.
Bẫy 3 — nêu che giấu phức tạp mà không nêu cái giá. Mất hiệu năng, và khi hỏng thì triệu chứng ở tầng trên còn nguyên nhân ở tầng dưới.
Đọc xong rồi — làm thử ngay
Bài tập của chương Resource Management (HL) gồm 14 câu trắc nghiệm và 5 đề tự luận. Đáp án hiện ngay khi chọn, miễn phí.