Chắc hẳn bạn đã một lần nghe đến từ Hệ điều hành ở đầu đó, thực sự nó là một khái niệm rất gần gũi với máy vi tính. Đặc biệt ngày nay với sự phát triển vũ bão của công nghệ, Hệ điều hành đã xuất hiện rất nhiều trên các dòng máy điện thoại cầm tay. Còn trên các máy vi tính để bàn người ta đã quen thuộc với hệ điều hành do Microsoft sản xuất như MS DOS, Windows. Ở những máy chủ (server) hệ điều hành Linux lại được ưa chuộng nhiều hơn. Trên thế giới không có nhiều công ty sản xuất hệ điều hành, bởi đó là công việc rất khó khăn, đòi hỏi chi phí lớn về thời gian, công sức và tiền bạc. Hệ điều hành được coi là trung gian giữa phần cứng và phần mềm. Được dùng để tổ chức, khai thác các tài nguyên của phần cứng, đồng thời kiểm soát hoạt động của phần mềm. Hệ điều hành được ví như một người quản gia, có nhiệm vụ quản lý, điều phối hoạt động của một đại gia đình. Cũng như người quản gia, hệ điều hành phải đảm nhiệm rất nhiều các công việc khác nhau. Từ quản lý bộ nhớ, quản lý thiết bị, đến quản lý tiến trình, quản lý đụng độ … Để dễ hình dung vai trò của hệ điều hành, ta lấy ví dụ một chiếc điện thoại di động. Nếu nó là một chiếc điện thoại bình thường không có hệ điều hành trong đó, thì những phím trên điện thoại được cố định về chức năng, do nhà sản xuất quy định. Ví dụ như khi ấn phím call để nghe hoặc gọi điện. Nhưng nếu là một chiếc điện thoại đời mới có cài hệ điều hành. Khi đó hệ điều hành sẽ điều khiển các phím trên điện thoại để nó thực hiện những chức năng khác nhau. Ví dụ khi đó ấn phím 1 nó sẽ thực hiện việc play một bản nhạc bạn yêu thích chẳng hạn. Như vậy hệ điều hành làm cho chức năng của điện thoại di động trở nên đa dạng phong phú hơn. Tương tự như vậy, máy vi tính sẽ chẳng có gì đáng bàn nếu nó không có hệ điều hành. Một hệ điều hành tốt sẽ giúp người dùng khai thác hiệu quả các tính năng của chiếc máy vi tính đó, và ngược lại một hệ điều hành tồi sẽ gây ra sự kém hiệu quả cũng như sự phiền toái cho người sử dụng.
Hệ điều hành là một chương trình khổng lồ được viết bằng các ngôn ngữ lập trình gần gũi với phần cứng như Asembly, C nhằm thực hiện hai nhiệm vụ cơ bản:
Nhiệm vụ thứ nhất là quản lý tài nguyên phần cứng, phần mềm. Ở máy vi tính tài nguyên ấy gồm bộ xử lý (processor), bộ nhớ (memory), dung lượng nhớ ngoài (Hard disk), … Ở máy điện thoại di động tài nguyên gồm có bàn phím, màn hình, sổ điện thoại, pin, …
Nhiệm vụ thứ hai cung cấp cách thức giúp các chương trình ứng dụng giao tiếp với phần cứng mà không cần biết cụ thể chi tiết phần cứng ấy như thế nào.
Quản lý tài nguyên hệ thống là nhiệm vụ khá quan trọng. Tài nguyên luôn có hạn, trong khi đó để hoạt động được mỗi một ứng dụng phải yêu cầu hệ thống cung cấp tài nguyên cho nó, lúc đó Hệ điều hành có nhiệm vụ phân tích để đưa ra lượng tài nguyên phù hợp nhất với ứng dụng đó. Một hệ điều hành tốt sẽ giải quyết tối ưu bài toán phân phối này, sao cho các ứng dụng đều thực hiện tốt yêu cầu của người sử dụng.
Nhiệm vụ thứ hai giúp máy vi tính linh động hơn rất nhiều, nhờ chức năng này chúng ta có thể dễ dàng nâng cấp phần cứng mà không mấy ảnh hưởng đến hoạt động của các ứng dụng. Bởi ứng dụng thực chất không quan tâm chi tiết phần cứng đó có cấu tạo như thế nào. Nó sử dụng các giao diện do Hệ điều hành cung cấp để giao tiếp với phần cứng. Trong Windows là lớp API (Application Program Interface), khi phần cứng thay đổi, lớp giao diện này phải được lập trình để hiểu được những thay đổi đó. Do đó ta có thể thay thế, nâng cấp tài nguyên của máy tính như bộ xử lý, màn hình, chuột, bàn phím, … mà hệ thống vẫn hoạt động bình thường.
Hệ điều hành ra đời cách đây khá lâu, nó được sử dụng trong những thiết bị gần gũi với cuộc sống. Tuy nhiên người sử dụng chỉ biết đến khái niệm Hệ điều hành kể từ khi MSDOS của Microsoft ra đời. Đó là hệ điều hành một người sử dụng, dùng các dòng lệnh để điều khiển. MS DOS yêu cầu phải am hiểu khá nhiều về máy vi tính, vì thế rất khó cho người sử dụng có thể khai thác triệt để những tính năng ưu việt chiếc máy vi tính họ đang dùng. Chính vì lý do trên, Microsoft đã không ngừng nâng cấp và cho ra đời những dòng Hệ điều hành mới tích hợp rất nhiều tính năng, đặc biệt là sự gần gũi thân thiện với người sử dụng như Windows 3x, 95, 98, 2000, XP và gần đây nhất là Windows Vista. Ngoài hệ điều hành của Microsoft còn có Hệ điều hành mã nguồn mở Linux và những dòng Hệ điều hành được sử dụng trên các máy điện thoại cầm tay. Chúng được chia làm bốn loại cơ bản:
Hệ điều hành thời gian thực (Real Time Operating System – RTOS): Hệ điều hành này được sử dụng để điều khiển những máy tính phục vụ cho khoa học và công nghiệp. Đặc điểm của chúng là không cung cấp nhiều giao diện cho người sử dụng, chỉ tập trung vào khả năng quản lý tài nguyên, để đảm bảo hệ thống không có lỗi trong quá trình sử dụng.
Loại thứ hai là Hệ điều hành do một người sử dụng, tại một thời điểm chỉ thực một nhiệm vụ duy nhất ( Single User, Single task). Hệ điều hành này được ứng dụng rất rộng rãi trong các máy Palm OS.
Loại thứ ba là Hệ điều hành một người sử dụng nhưng đa nhiệm (Single User, multi tasking): đây là hệ điều hành được cài đặt trên hầu hết các máy tính để bàn. Trong đó Windows của Microsoft và MacOS của Apple là những phần mềm được nhiều người dùng hơn cả. Hệ điều hành loại này cho phép một người sử dụng có thể thực hiện nhiều nhiệm vụ tại một thời điểm. Ví dụ bạn vừa nghe nhạc lại vừa soạn thảo Word, đồng thời lại truy nhập internet …
Loại thứ tư là hệ điều hành đa người sử dụng (Multi Users): hệ điều hành loại này cho phép nhiều người có thể sử dụng máy tính tại một thời điểm. Ví dụ như hệ điều hành UNIX, chúng phải đảm bảo không có sự tranh chấp tài nguyên giữa những người dùng. Hệ điều hành này được các máy chủ sử dụng, và cho phép nhiều người truy cập vào từ mạng nội bộ hoặc internet.
Màn hình Desktop của hệ điều hành Mac.
Phần tiếp theo chúng ta sẽ nghiên cứu chi tiếp hơn những nhiệm vụ do Hệ điều hành đảm nhiệm như quản lý CPU, bộ nhớ, thiết bị… Nhưng trước hết chúng ta sẽ tìm hiểu Hệ điều hành sẽ thực hiện những thao tác gì khi hệ thống được khởi động. Khi bật máy vi tính, chương trình POST (Power on seft test ) sẽ thực hiện kiểm tra CPU, bộ nhớ và các thiết bị vào ra. Khi mọi thiết bị đều sẵn sàng để làm việc chương trình POST sẽ gọi một bộ phận của Hệ điều hành được nằm trong ổ cứng là:
Bootrap loader. Bootrap loader là một chương trình rất nhỏ, nhằm thực hiện nhiệm vụ tải hệ điều hành vào bộ nhớ trong và cho phép hệ điều hành hoạt động. Ngoài ra nó còn phân chia bộ nhớ để lưu các thông tin người dùng và ứng dụng. Sau đó Bootrap loader sẽ trao lại quyền điều khiển cho Hệ điều hành, khi đó mọi quyết định của hệ thống sẽ do Hệ điều hành đảm nhiệm và có quyền quyết định cao nhất. Thông thường Hệ điều hành sẽ thực hiện những nhiệm vụ cơ bản sau:
Quản lý bộ vi xử lý (Processor management)
Quản lý bộ nhớ (Memory management)
Quản lý thiết bị (Device management)
Giao tiếp ứng dụng (Application interface)
Giao tiếp với người sử dụng (User interface)
Một hệ điều hành có thể thực hiện nhiều nhiệm vụ, nhưng đã là hệ điều hành thì phải có năm nhiệm vụ cơ bản đó. Chúng ta sẽ cùng nhau tìm hiểu từng nhiệm vụ một để có cái nhìn sâu sắc, bản chất hơn về Hệ điều hành.
Đầu tiên là chức năng quản lý bộ vi xử lý, khi đó mỗi ứng dụng sẽ được chia nhỏ thành các đơn vị để Hệ điều hành dễ dàng quản lý, các đơn vị thường dùng là
process hoặc
thread.
Process (tiến trình) bản chất là một chương trình phần mềm nhằm thực hiện một chức năng nào đó, được điều khiển bởi người dùng, ứng dụng hoặc Hệ điều hành. Một ứng dụng có thể gồm nhiều tiến trình cùng hoạt động, việc chia nhỏ thành các tiến trình sẽ dễ dàng cho Hệ điều hành quản lý.
Với những Hệ điều hành đơn nhiệm - thực hiện một nhiệm vụ trong một thời điểm khi đó chỉ có một tiến trình duy nhất nên việc quản lý khá dễ dàng. Hệ điều hành sử dụng thêm các ngắt (interrupt) để tạm dừng một chương trình đang hoạt động nhằm thực hiện một yêu cầu khác. Ngắt có thể là ngắt cứng hoặc ngắt mềm, bản chất nó là một tín hiệu được gửi đến CPU, nhằm thông báo cho CPU biết có một nhiệm vụ đang cần CPU giải quyết ngay. Sau khi giải quyết xong nhiệm vụ mới CPU lại quay lại thực hiện nốt chương trình ban đầu.
Với những hệ điều hành đa nhiệm – thực hiện nhiều nhiệm vụ trong một thời điểm thì yêu cầu quản lý của Hệ điều hành phức tạp hơn nhiều. Vì khi đó sẽ có nhiều tiến trình cùng hoạt động. Mỗi tiến trình sẽ chiếm một lượng bộ nhớ RAM nhất định, ngoài ra nó có thể yêu cầu sử dụng thêm các thanh ghi, bộ nhớ stack, queue …
Hệ điều hành đa nhiệm tức là xử lý nhiều tiến trình cùng một lúc, tuy nhiên CPU chỉ thực hiện được một câu lệnh duy nhất tại một thời điểm. Vì vậy CPU chỉ thực hiện một vài câu lệnh tại một tiến trình, rồi sau đó lại chuyển sang xử lý câu lệnh ở tiến trình khác, … quá trình này được luân chuyển giữa các tiến trình. Vì vậy ta có cảm giác là cùng một thời điểm có nhiều công việc được máy vi tính xử lý. Việc quản lý, phân bổ thời gian của CPU do Hệ điều hành đảm nhiệm, mỗi một hệ điều hành có cách tổ chức, quản lý khác nhau.
Một chức năng quan trọng khác của hệ điều hành là quản lý bộ nhớ, nó phải đảm bảo cung cấp đầy đủ bộ nhớ cho các tiến trình hoạt động. Đồng thời phải biết kết hợp các loại bộ nhớ khác nhau trong máy tính như bộ nhớ cache, bộ nhớ trong bộ nhớ ngoài…
Nguyên nhân phải có sự quản lý bộ nhớ do trong máy vi tính có nhiều loại bộ nhớ khác nhau. Bộ nhớ Cache, RAM tốc độ xử lý cao nhưng dung lượng nhỏ, bộ nhớ ảo, bộ nhớ ngoài tốc độ xử lý nhỏ nhưng dung lượng cao. Mỗi ứng dụng lại yêu cầu về bộ nhớ khác nhau, có ứng dụng cần ít bộ nhớ, nhưng đòi hỏi xử lý nhanh, có ứng dụng đòi bộ nhớ trong cực lớn mà hệ thống không đủ cung cấp. Vì vậy Hệ điều hành phải lấy một phần bộ nhớ ngoài để làm chức năng như bộ nhớ trong, bộ nhớ như thế người ta gọi là bộ nhớ ảo. Do mỗi loại bộ nhớ có tốc độ khác nhau nên Hệ điều hành phải có nhiệm vụ đồng bộ hóa tốc độ của chúng, để đảm bảo hoạt động của hệ thống thông suốt không bị gián đoạn. Việc đồng bộ này được thực hiện thông qua bộ nhớ Cache (bộ nhớ đệm). Vì tốc độ xử lý của bộ nhớ ngoài thấp nên CPU sẽ không lấy trực tiếp dữ liệu từ bộ nhớ ngoài, mà nó lấy dữ liệu từ bộ nhớ cache, dữ liệu từ bộ nhớ Cache do bộ nhớ ngoài gửi lên. Chúng ta hình dung CPU có tốc độ xử lý rất nhanh, nó sẽ dành một lượng thời gian nhỏ để lấy dữ liệu từ bộ nhớ cache rồi mang đi xử lý. Trong quá trình CPU xử lý dữ liệu từ bộ nhớ ngoài vẫn được vận chuyển lên cho bộ nhớ cache. Vì vậy khi CPU xử lý xong dữ liệu ban đầu thì ở bên bộ nhớ cache dữ liệu mới đã được chuyển lên sẵn sàng để xử lý.
Nhiệm vụ tiếp theo của Hệ điều hành là quản lý thiết bị, một chiếc máy vi tính là sự kết hợp của nhiều thiết bị khác nhau. Từ những thiết bị phức tạp tinh vi như bộ vi xử lý đến những thiết bị đơn giản hơn như chuột, bàn phím. Mỗi một thiết bị có những đặc điểm tính năng khác nhau. Hệ điều hành phải quản lý được các thông số đó của từng thiết bị. Để sau đó đưa ra được những quyết định phân phối tài nguyên tối ưu nhất. Việc quản lý thiết bị thông qua các driver, mỗi một thiết bị phần cứng có một driver riêng. Driver bản chất là một phần mềm nhằm khai báo cho Hệ điều hành biết các thông số của phần cứng đó. Những hệ điều hành nổi tiếng như Windows tích hợp ở trong đó driver của rất nhiều thiết bị khác nhau. Vì vậy các Windows đời sau như XP chẳng hạn ta sẽ không phải cài đặt driver màn hình hay driver âm thanh. Bởi chúng đã được hệ điều hành tự động nhận diện và cài đặt.
Một nhiệm vụ rất quan trọng của Hệ điều hành là giao tiếp với các ứng dụng. Mỗi ứng dụng yêu cầu một lượng tài nguyên nhất định. Việc sử dụng tài nguyên đó do Hệ điều hành cung cấp, ngoài ra Hệ điều hành còn cung cấp thêm các giao diện giúp các ứng dụng có thể giao tiếp với phần cứng một cách dễ dàng. Ví dụ như ở Ưindows là các hàm API (Application Program Interface). Các trình ứng dụng chỉ cần dùng các hàm API này để ra lệnh cho các thiết bị thực hiện những yêu cầu mình mong muốn. Chẳng hạn yêu cầu máy in, in một văn bản nào đó. Khi có sự thay đổi của thiết bị, Hệ điều hành sẽ cập nhật thông qua các driver, các giao diện vẫn được giữ nguyên. Vì vậy ứng dụng sẽ không phải thay đổi, điều này rất thuận tiện cho các lập trình viên trong việc xây dựng phần mềm ứng dụng.
Một nhiệm vụ không thể thiếu của Hệ điều hành là cung cấp giao diện với người sử dụng. Trước đây giao diện chủ yếu bằng dòng lệnh ví dụ như Hệ điều hành MSDOS, gây rất nhiều khó khăn cho người dùng, vì họ phải rất am hiểu về máy tính mới có thể sử dụng được. Sau này người ta nghĩ ra một kiểu giao diện mới dựa vào đồ họa được gọi là GUI (Graphical User Interface). Giao diện GUI cho phép người dùng có cái nhìn trực quan, đồng thời sử dụng chuột để kéo thả theo ý muốn. Chính sự đột phá về giao diện giao tiếp với người dùng này đã biến máy tính trở thành một vật dụng thân thiện. Khi đó người ta không cần hiểu cũng có thể yêu cầu máy tính thực hiện những nhiệm vụ mong muốn.
Giao tiếp của GUI – Hệ điều hành Linux
Như vậy chúng ta đã tìm hiểu sơ qua thế nào là Hệ điều hành, bản chất nó là một chương trình rất phức tạp với mục đích liên kết giữa phần cứng và phần mềm, nhằm khai thác triệt để các tài nguyên của hệ thống. Một hệ điều hành phải thực hiện được những nhiệm vụ cơ bản như quản lý bộ vi xử lý, quản lý bộ nhớ, quản lý thiết bị, giao tiếp với ứng dụng, giao tiếp với người dùng. Vì vậy một máy tính tốt là một máy tính trong đó phải có hệ điều hành tốt.