Hệ điều hành (tiếng Anh: Operating system, viết tắt: OS) là phần mềm hệ thống quản lý tài nguyên phần cứng máy tính, phần mềm và cung cấp các dịch vụ chung cho các chương trình máy tính.
Đối với các chức năng phần cứng như đầu vào, đầu ra và cấp phát bộ nhớ, hệ điều hành đóng vai trò quan trọng giữa các chương trình và phần cứng máy tính,[1][2] mặc dù mã ứng dụng thường được thực thi trực tiếp bởi phần cứng và thường thực hiện các lệnh hệ thống đến Chức năng hệ điều hành hoặc bị hệ điều hành làm gián đoạn. Hệ điều hành được tìm thấy trên nhiều thiết bị có máy tính – từ điện thoại di động và bảng điều khiển trò chơi điện tử đến máy chủ web và siêu máy tính, cung cấp một môi trường cho phép người sử dụng phát triển và thực hiện các ứng dụng của họ một cách dễ dàng.
Hệ điều hành chia sẻ thời gian lập lịch cho các tác vụ để sử dụng hệ thống một cách hiệu quả và cũng có thể bao gồm phần mềm kế toán để phân bổ chi phí thời gian xử lý, lưu trữ dung lượng lớn, in ấn và các tài nguyên khác.
Hệ điều hành máy tính để bàn phổ biến nhất là hệ điều hành Microsoft Windows với thị phần khoảng 76,45%. macOS của Apple Inc. đứng ở vị trí thứ hai (17,72%), và các loại hệ diều hành Linux được xếp chung ở vị trí thứ ba (1,73%).[3] Trong lĩnh vực di động (bao gồm cả điện thoại thông minh và máy tính bảng), thị phần của Android lên đến 72% vào năm 2020.[4] Theo dữ liệu Quý III năm 2016, thị phần của Android trên điện thoại thông minh đang chiếm ưu thế với 87,5% với tốc độ tăng trưởng 10,3% mỗi năm, tiếp theo là iOS của Apple với 12,1% với thị phần giảm 5,2% mỗi năm, trong khi các hệ điều hành khác chỉ 0,3%.[5] Các bản phân phối Linux đang chiếm ưu thế trong lĩnh vực máy chủ và siêu máy tính. Các lớp hệ điều hành chuyên biệt khác cũng được tạo ra để phục vụ cho các ứng dụng như các hệ thống nhúng và thời gian thực.
Hệ thống đơn tác vụ chỉ có thể chạy một chương trình tại một thời điểm, trong khi hệ điều hành đa tác vụ cho phép nhiều chương trình chạy đồng thời. Điều này đạt được bằng cách chia sẻ thời gian, trong đó thời gian của bộ xử lý được chia sẻ với nhiều quá trình. Mỗi quá trình này bị gián đoạn lặp đi lặp lại trong thời gian bằng cách dùng một hệ thống con lập lịch tác vụ của hệ điều hành. Đa nhiệm có thể được đặc trưng trong các loại hợp tác và pre-emptive. Trong đa nhiệm phủ đầu, hệ điều hành cắt thời gian CPU và dành một vị trí cho mỗi chương trình. Hệ điều hành giống Unix, chẳng hạn như Solaris và Linux — cũng như không giống Unix, chẳng hạn như AmigaOS — hỗ trợ đa nhiệm pre-emptive. Đa nhiệm hợp tác đạt được bằng cách dựa vào mỗi quá trình để cung cấp thời gian cho các quá trình khác theo cách thức xác định. Phiên bản 16-bit của Microsoft Windows sử dụng đa tác vụ hợp tác; Phiên bản 32-bit của cả Windows NT và Win9x đều sử dụng tính năng đa tác vụ pre-emptive.
Hệ điều hành một người dùng không có phương tiện để phân biệt người dùng, nhưng có thể cho phép nhiều chương trình chạy song song.[6] Hệ điều hành nhiều người dùng mở rộng khái niệm cơ bản về đa tác vụ với các cơ sở xác định các quy trình và tài nguyên, chẳng hạn như không gian đĩa, thuộc về nhiều người dùng và hệ thống cho phép nhiều người dùng tương tác với hệ thống cùng một lúc. Hệ điều hành chia sẻ thời gian lên lịch các tác vụ để sử dụng hiệu quả hệ thống và cũng có thể bao gồm phần mềm kế toán để phân bổ chi phí thời gian xử lý, lưu trữ hàng loạt, in ấn và các tài nguyên khác cho nhiều người dùng.
Hệ điều hành phân tán quản lý một nhóm các máy tính nối mạng riêng biệt và làm cho chúng dường như là một máy tính duy nhất, vì tất cả các tính toán được phân phối (chia cho các máy tính cấu thành).[7]
Trong bối cảnh điện toán đám mây và phân tán của một hệ điều hành, tạo khuôn mẫu đề cập đến việc tạo một hình ảnh máy ảo duy nhất làm hệ điều hành khách, sau đó lưu nó làm công cụ cho nhiều máy ảo đang chạy máy ảo. Kỹ thuật này được sử dụng cả trong ảo hóa và quản lý điện toán đám mây, và phổ biến trong các kho máy chủ lớn.[8]
Hệ điều hành nhúng được thiết kế để sử dụng trong các hệ thống máy tính nhúng. Chúng được thiết kế để hoạt động trên các máy nhỏ với ít quyền tự chủ hơn (ví dụ: PDA). Chúng rất nhỏ gọn và cực kỳ hiệu quả theo thiết kế và có thể hoạt động với một lượng tài nguyên hạn chế. Windows CE và Minix 3 là một số ví dụ về các hệ điều hành nhúng.
Hệ điều hành thời gian thực là hệ điều hành đảm bảo xử lý các sự kiện hoặc dữ liệu theo một thời điểm cụ thể. Hệ điều hành thời gian thực có thể hoạt động đơn hoặc đa tác vụ, nhưng khi đa nhiệm, nó sử dụng các thuật toán lập lịch chuyên biệt để đạt được bản chất xác định của hành vi. Một hệ thống hướng sự kiện như vậy sẽ chuyển đổi giữa các tác vụ dựa trên mức độ ưu tiên của chúng hoặc các sự kiện bên ngoài, trong khi hệ điều hành chia sẻ thời gian chuyển đổi các tác vụ dựa trên các ngắt đồng hồ.
Hệ điều hành thư viện là hệ điều hành trong đó các dịch vụ mà hệ điều hành điển hình cung cấp, chẳng hạn như mạng, được cung cấp dưới dạng thư viện và được cấu tạo với ứng dụng và mã cấu hình để xây dựng một kênh đơn lẻ: một không gian địa chỉ chuyên biệt, một hình ảnh máy, có thể được triển khai cho môi trường đám mây hoặc môi trường nhúng.
Máy tính ban đầu được chế tạo để thực hiện một loạt các tác vụ đơn lẻ, giống như một máy tính bỏ túi. Các tính năng cơ bản của hệ điều hành được phát triển vào những năm 1950, chẳng hạn như chức năng giám sát thường trú có thể tự động chạy các chương trình khác nhau liên tiếp để tăng tốc độ xử lý. Các hệ điều hành không tồn tại ở dạng hiện đại và phức tạp hơn cho đến đầu những năm 1960.[9] Các tính năng phần cứng đã được thêm vào, cho phép sử dụng thư viện thời gian chạy, ngắt và xử lý song song. Khi máy tính cá nhân trở nên phổ biến vào những năm 1980, hệ điều hành được tạo ra cho chúng tương tự như khái niệm được sử dụng trên các máy tính lớn hơn.
Vào những năm 1940, các hệ thống kỹ thuật số điện tử sớm nhất không có hệ điều hành. Các hệ thống điện tử thời này được lập trình trên hàng công tắc cơ học hoặc bằng dây nhảy trên bảng cắm. Đây là những hệ thống có mục đích đặc biệt, ví dụ, tạo ra các bảng đạn đạo cho quân đội hoặc kiểm soát việc in phiếu tính lương từ dữ liệu trên thẻ giấy. Sau khi máy tính đa năng có thể lập trình được phát minh, các ngôn ngữ máy (bao gồm các chuỗi chữ số nhị phân 0 và 1 trên băng giấy đục lỗ) đã được giới thiệu để đẩy nhanh quá trình lập trình (Stern, 1981).[cần chú thích đầy đủ]
Vào đầu những năm 1950, một máy tính chỉ có thể thực thi một chương trình tại một thời điểm. Mỗi người dùng chỉ được sử dụng máy tính trong một khoảng thời gian giới hạn và sẽ đến vào thời gian đã định cùng với chương trình và dữ liệu của họ trên thẻ giấy đục lỗ hoặc băng đục lỗ. Chương trình sẽ được tải vào máy và máy sẽ được thiết lập để hoạt động cho đến khi chương trình hoàn thành hoặc gặp sự cố. Các chương trình thường có thể được gỡ lỗi thông qua bảng điều khiển phía trước bằng cách sử dụng công tắc bật tắt và đèn bảng điều khiển. Người ta nói rằng Alan Turing là một bậc thầy về điều này trên cỗ máy Manchester Mark 1 thời kỳ đầu, và ông đã suy nghĩ ra khái niệm về hệ điều hành từ các nguyên tắc của máy Turing phổ quát.[9]
Các máy sau này đi kèm với các thư viện chương trình, sẽ được liên kết với chương trình của người dùng để hỗ trợ các hoạt động như nhập, xuất và biên dịch (tạo mã máy từ mã tượng trưng mà con người có thể đọc được). Đây là nguồn gốc của hệ điều hành hiện đại. Tuy nhiên, máy móc vẫn chạy một công việc duy nhất tại một thời điểm. Tại Đại học Cambridge ở Anh, hàng đợi việc làm trước đây là một dây chuyền giặt (dây phơi quần áo), từ đó người ta treo các cuộn băng dính với các giá treo quần áo màu khác nhau để chỉ ra mức độ ưu tiên công việc.
Một hệ điều hành khác là Atlas Supervisor. Được giới thiệu cùng với Manchester Atlas vào năm 1962, hệ điều hành này được nhiều người coi là hệ điều hành hiện đại đầu tiên được biết đến.[10] Brinch Hansen mô tả nó là "bước đột phá quan trọng nhất trong lịch sử hệ điều hành." [11]
Qua những năm 1950, nhiều tính năng quan trọng được đưa ra trong lĩnh vực hệ điều hành trên máy tính mainframe, bao gồm xử lý hàng loạt, đầu vào/đầu ra gián đoạn, đệm, đa nhiệm, spooling, thư viện runtime, liên kết nạp, và các chương trình cho sắp xếp các bản ghi trong tập tin. Các tính năng này được đưa vào hoặc không được đưa vào phần mềm ứng dụng theo tùy chọn của người lập trình ứng dụng, chứ không phải trong một hệ điều hành riêng biệt được sử dụng bởi tất cả các ứng dụng. Năm 1959, Hệ điều hành SHARE được phát hành dưới dạng tiện ích tích hợp cho IBM 704, và sau đó là các máy tính lớn 709 và 7090, mặc dù nó đã nhanh chóng bị IBSYS / IBJOB thay thế trên 709, 7090 và 7094.
Trong những năm 1960, OS/360 của IBM đã đưa ra khái niệm về một hệ điều hành duy nhất cho toàn bộ dòng sản phẩm, điều này rất quan trọng cho sự thành công của các máy System / 360. Hệ điều hành máy tính lớn hiện tại của IBM là hậu duệ xa của hệ thống gốc này và các máy hiện đại tương thích ngược với các ứng dụng được viết cho OS/360.[cần dẫn nguồn]
OS/360 cũng đi tiên phong trong khái niệm rằng hệ điều hành theo dõi tất cả tài nguyên hệ thống được sử dụng, bao gồm phân bổ không gian chương trình và dữ liệu trong bộ nhớ chính và không gian tập tin trong bộ nhớ phụ và khóa tập tin trong quá trình cập nhật. Khi một quá trình bị chấm dứt vì bất kỳ lý do gì, tất cả các tài nguyên này sẽ được hệ điều hành tái xác nhận quyền sở hữu.
Hệ thống CP-67 thay thế cho S / 360-67 đã đi đầu cho việc toàn bộ dòng hệ điều hành IBM tập trung vào khái niệm máy ảo. Các hệ điều hành khác được sử dụng trên máy tính lớn dòng S / 360 của IBM bao gồm các hệ thống do IBM phát triển: COS / 360 (Hệ điều hành tương thích), DOS / 360 (Hệ điều hành đĩa), TSS / 360 (Hệ thống chia sẻ thời gian), TOS / 360 (Hệ điều hành băng Hệ thống), BOS / 360 (Hệ điều hành cơ bản) và ACP (Chương trình điều khiển hãng hàng không), cũng như một số hệ thống không phải của IBM: MTS (Hệ thống đầu cuối Michigan), MUSIC (Hệ thống đa người dùng cho máy tính tương tác) và ORVYL (Hệ thống chia sẻ thời gian của Stanford).
Control Data Corporation đã phát triển hệ điều hành SCOPE vào những năm 1960, để xử lý hàng loạt. Với sự hợp tác của Đại học Minnesota, hệ điều hành Kronos và sau đó là NOS đã được phát triển trong những năm 1970, hỗ trợ sử dụng đồng thời theo lô và chia sẻ thời gian. Giống như nhiều hệ thống chia sẻ thời gian thương mại, giao diện của nó là một phần mở rộng của hệ điều hành Dartmouth BASIC, một trong những nỗ lực tiên phong trong các ngôn ngữ lập trình và chia sẻ thời gian. Vào cuối những năm 1970, Control Data và Đại học Illinois đã phát triển hệ điều hành PLATO, sử dụng màn hình bảng plasma và mạng chia sẻ thời gian đường dài. Plato đã đổi mới đáng kể vào thời điểm đó, có tính năng trò chuyện thời gian thực và các trò chơi đồ họa cho nhiều người dùng.
Năm 1961, Burroughs Corporation giới thiệu B5000 với hệ điều hành MCP (Master Control Program). B5000 là một máy xếp chồng được thiết kế để hỗ trợ độc quyền các ngôn ngữ cấp cao mà không có ngôn ngữ máy hoặc trình biên dịch; thực sự, MCP là hệ điều hành đầu tiên được viết độc quyền bằng một ngôn ngữ cấp cao (ESPOL, một phương ngữ của ALGOL). MCP cũng giới thiệu nhiều cải tiến đột phá khác, chẳng hạn như việc triển khai thương mại đầu tiên của bộ nhớ ảo. Trong quá trình phát triển AS / 400, IBM đã tiếp cận Burroughs để cấp phép cho MCP chạy trên phần cứng AS / 400. Đề xuất này đã bị ban lãnh đạo Burroughs từ chối để bảo vệ hoạt động sản xuất phần cứng hiện có của họ. MCP ngày nay vẫn được sử dụng trong dòng máy tính ClearPath / MCP của công ty Unisys.
UNIVAC, nhà sản xuất máy tính thương mại đầu tiên, đã sản xuất một loạt hệ điều hành EXEC. Giống như tất cả các hệ thống khung chính đầu tiên, hệ thống định hướng hàng loạt này quản lý trống từ, đĩa, đầu đọc thẻ và máy in dòng. Vào những năm 1970, UNIVAC đã sản xuất hệ thống Real-Time Basic (RTB) để hỗ trợ chia sẻ thời gian quy mô lớn, cũng được lấy theo khuôn mẫu của hệ thống Dartmouth BC.
General Electric và MIT đã phát triển Bộ giám sát điều hành toàn diện General Electric (GECOS), đưa ra khái niệm về các mức đặc quyền bảo mật được gọi. Sau khi được Honeywell mua lại, nó được đổi tên thành General Comprehensive Operating System (GCOS).
Digital Equipment Corporation đã phát triển nhiều hệ điều hành cho các dòng máy tính khác nhau của mình, bao gồm hệ thống chia sẻ thời gian TOPS-10 và TOPS-20 cho các hệ thống lớp PDP-10 36-bit. Trước khi UNIX được sử dụng rộng rãi, TOPS-10 là một hệ thống đặc biệt phổ biến trong các trường đại học và trong cộng đồng ARPANET sơ khai. RT-11 là hệ điều hành thời gian thực một người dùng cho máy tính mini lớp PDP-11 và RSX-11 là hệ điều hành đa người dùng tương ứng.
Từ cuối những năm 1960 đến cuối những năm 1970, một số khả năng phần cứng đã phát triển cho phép phần mềm tương tự hoặc phần mềm được chuyển đổi chạy trên nhiều hệ thống. Các hệ thống ban đầu đã sử dụng vi lập trình để triển khai các tính năng trên hệ thống của chúng nhằm cho phép các kiến trúc máy tính cơ bản khác nhau có vẻ giống với các kiến trúc khác trong cùng một thế hệ máy. Trên thực tế, hầu hết các máy tính 360 sau 360/40 (ngoại trừ 360/165 và 360/168) là các triển khai được lập trình vi mô.
Việc đầu tư lớn vào phần mềm cho các hệ thống này được thực hiện từ những năm 1960 đã khiến hầu hết các nhà sản xuất máy tính ban đầu tiếp tục phát triển các hệ điều hành tương thích cùng với phần cứng. Các hệ điều hành máy tính lớn được hỗ trợ đáng chú ý bao gồm:
Những máy vi tính đầu tiên không có khả năng hoặc không cần đến hệ điều hành phức tạp đã được phát triển cho máy tính lớn và máy tính nhỏ; hệ điều hành tối giản được phát triển, thường được tải từ ROM và được gọi là monitor. Một hệ điều hành đĩa ban đầu đáng chú ý là CP/M, được hỗ trợ trên nhiều máy vi tính đời đầu và được MS-DOS của Microsoft bắt chước triệt để. Hệ điều hành này đã trở nên phổ biến rộng rãi như là hệ điều hành được chọn cho các máy IBM PC (phiên bản tương đương của IBM được gọi là IBM DOS hoặc PC DOS). Vào những năm 1980, Apple Computer Inc. (nay là Apple Inc.) đã từ bỏ dòng máy vi tính Apple II phổ biến của mình để giới thiệu dòng máy tính Apple Macintosh với giao diện người dùng đồ họa (GUI) sáng tạo cho Mac OS.
Sự ra đời của chip CPU Intel 80386 vào tháng 10 năm 1985,[12] với kiến trúc 32-bit và khả năng phân trang, cung cấp cho các máy tính cá nhân khả năng chạy các hệ điều hành đa nhiệm giống như các máy tính mini và máy tính lớn trước đó. Microsoft đã đáp lại tiến độ này bằng cách thuê Dave Cutler, người đã phát triển hệ điều hành VMS cho Digital Equipment Corporation. Cutler sau đó lãnh đạo sự phát triển của hệ điều hành Windows NT, đưa hệ điều hành này tiếp tục đóng vai trò là nền tảng cho dòng hệ điều hành của Microsoft. Steve Jobs, người đồng sáng lập Apple Inc., đã thành lập NeXT Computer Inc., công ty đã phát triển hệ điều hành NEXTSTEP. NEXTSTEP sau đó được Apple Inc. mua lại và sử dụng, cùng với mã nguồn từ FreeBSD để làm thành nhân cho hệ điều hành MacOS X (macOS sau lần đổi tên mới nhất).
Dự án GNU được nhà hoạt động và lập trình viên Richard Stallman khởi động với mục tiêu tạo ra một phần mềm thay thế hoàn toàn miễn phí cho hệ điều hành UNIX độc quyền. Mặc dù dự án đã rất thành công trong việc nhân bản chức năng của các phần khác nhau của UNIX, nhưng việc phát triển nhân GNU Hurd tỏ ra không hiệu quả. Năm 1991, một sinh viên khoa học máy tính Phần Lan tên là Linus Torvalds, với sự hợp tác từ các tình nguyện viên cộng tác qua Internet, đã phát hành phiên bản đầu tiên của nhân Linux. Nó sớm được hợp nhất với các thành phần không gian người dùng GNU và phần mềm hệ thống để tạo thành một hệ điều hành hoàn chỉnh. Kể từ đó, sự kết hợp của hai thành phần chính thường được ngành công nghiệp phần mềm gọi đơn giản là "Linux", một quy ước đặt tên mà Stallman và Tổ chức Phần mềm Tự do vẫn phản đối, ưu tiên tên gọi GNU/Linux. Bản phân phối phần mềm Berkeley của Unix, được gọi là BSD, là dẫn xuất UNIX được Đại học California, Berkeley bắt đầu phân phối từ những năm 1970. Được phân phối tự do và chuyển qua nhiều máy tính mini, cuối cùng nó cũng thu được một lượng lớn người sử dụng trên PC, chủ yếu là dưới dạng các phiên bản FreeBSD, NetBSD và OpenBSD.
Unix ban đầu được viết bằng hợp ngữ.[13] Ken Thompson đã viết B, chủ yếu dựa trên BCPL, dựa trên kinh nghiệm của ông trong dự án MULTICS. B được thay thế bằng C, và Unix, được viết lại bằng C, được phát triển thành một họ lớn, phức tạp gồm các hệ điều hành liên quan đến nhau có ảnh hưởng đến mọi hệ điều hành hiện đại (xem Lịch sử).
Họ các hệ điều hành giống Unix là một nhóm hệ điều hành đa dạng, với một số danh mục con chính bao gồm Hệ thống V, BSD và Linux. Tên " UNIX " là nhãn hiệu của The Open Group cấp phép cho nó sử dụng với bất kỳ hệ điều hành nào đã được chứng minh là phù hợp với định nghĩa của họ. "Giống UNIX" thường được dùng để chỉ một tập hợp lớn các hệ điều hành giống với UNIX gốc.
Các hệ thống giống Unix chạy trên nhiều loại kiến trúc máy tính. Chúng được sử dụng nhiều cho các máy chủ trong kinh doanh, cũng như các máy trạm trong môi trường học thuật và kỹ thuật. Các biến thể UNIX miễn phí, chẳng hạn như Linux và BSD, rất phổ biến ở những khu vực này.
Bốn hệ điều hành được The Open Group (chủ sở hữu nhãn hiệu Unix) chứng nhận là Unix. HP -UX của HP và AIX của IBM đều là hậu duệ của System V Unix ban đầu và được thiết kế để chỉ chạy trên phần cứng của nhà cung cấp tương ứng. Ngược lại, Solaris của Sun Microsystems có thể chạy trên nhiều loại phần cứng, bao gồm máy chủ x86, Sparc và PC. MacOS của Apple, sự thay thế cho Mac OS (không phải Unix) trước đó của Apple, là một biến thể BSD dựa trên hạt nhân lai có nguồn gốc từ NeXTSTEP, Mach và FreeBSD.
Khả năng tương tác giữa các hệ điều hành Unix đã được thực hiện bằng cách thiết lập tiêu chuẩn POSIX. Tiêu chuẩn POSIX có thể được áp dụng cho bất kỳ hệ điều hành nào, mặc dù ban đầu nó được tạo ra cho các biến thể Unix khác nhau.
Một nhóm con của họ Unix là họ Phân phối Phần mềm Berkeley, bao gồm FreeBSD, NetBSD và OpenBSD. Các hệ điều hành này thường thấy nhất trên máy chủ web, mặc dù chúng cũng có thể hoạt động như một hệ điều hành máy tính cá nhân. Internet có phần lớn sự tồn tại của nó đối với BSD, vì nhiều giao thức hiện nay thường được máy tính sử dụng để kết nối, gửi và nhận dữ liệu qua mạng đã được triển khai và cải tiến rộng rãi trong BSD. World Wide Web cũng lần đầu tiên được trình diễn trên một số máy tính chạy hệ điều hành dựa trên BSD được gọi là NeXTSTEP.
Năm 1974, Đại học California, Berkeley lắp đặt hệ thống Unix đầu tiên của mình. Theo thời gian, các sinh viên và nhân viên trong khoa khoa học máy tính ở đó bắt đầu thêm các chương trình mới để làm cho mọi thứ dễ dàng hơn, chẳng hạn như trình soạn thảo văn bản. Khi Berkeley nhận được máy tính VAX mới vào năm 1978 có cài đặt Unix, các sinh viên chưa tốt nghiệp của trường đã sửa đổi Unix nhiều hơn để tận dụng khả năng phần cứng của máy tính. Các Defense Advanced Research Projects Agency của Mỹ Bộ Quốc phòng mất sự quan tâm, và quyết định tài trợ cho dự án. Nhiều trường học, tập đoàn và tổ chức chính phủ đã chú ý và bắt đầu sử dụng phiên bản Unix của Berkeley thay vì phiên bản chính thức do AT&T phân phối.
Steve Jobs, sau khi rời Apple Inc. vào năm 1985, thành lập NeXT Inc., một công ty sản xuất máy tính cao cấp chạy trên một biến thể của BSD có tên là NeXTSTEP. Một trong những máy tính này được Tim Berners-Lee sử dụng làm máy chủ web đầu tiên tạo ra World Wide Web.
Các nhà phát triển như Keith Bostic khuyến khích dự án thay thế bất kỳ mã không miễn phí nào có nguồn gốc từ Bell Labs. Tuy nhiên, sau khi việc này được thực hiện, AT&T đã khởi kiện. Sau hai năm tranh chấp pháp lý, dự án BSD đã sinh ra một số công cụ phái sinh miễn phí, chẳng hạn như NetBSD và FreeBSD (cả hai vào năm 1993) và OpenBSD (từ NetBSD vào năm 1995).
macOS (trước đây là "Mac OS X" và sau này là "OS X") là một dòng hệ điều hành đồ họa lõi mở được phát triển, tiếp thị và bán bởi Apple Inc., hệ điều hành mới nhất được tải sẵn trên tất cả các máy tính Macintosh hiện đang vận chuyển. macOS là sự kế thừa của Mac OS cổ điển ban đầu, là hệ điều hành chính của Apple từ năm 1984. Không giống như người tiền nhiệm của nó, macOS là một hệ điều hành UNIX được xây dựng trên công nghệ đã được phát triển tại NeXT trong nửa sau của những năm 1980 và cho đến khi Apple mua lại công ty vào đầu năm 1997. Hệ điều hành được phát hành lần đầu tiên vào năm 1999 với tên gọi Mac OS X Server 1.0, sau đó vào tháng 3 năm 2001 bởi một phiên bản máy khách (Mac OS X v10.0 "Cheetah"). Kể từ đó, sáu phiên bản "máy khách" và " máy chủ " khác biệt hơn của macOS đã được phát hành, cho đến khi cả hai được hợp nhất trong OS X 10.7 "Lion".
Trước khi hợp nhất với macOS, phiên bản máy chủ – macOS Server – có kiến trúc giống hệt hệ điều hành cho máy tính để bàn và thường chạy trên dòng phần cứng máy chủ Macintosh của Apple. macOS Server bao gồm các công cụ phần mềm quản lý và quản lý nhóm công việc cung cấp quyền truy cập đơn giản vào các dịch vụ mạng chính, bao gồm tác nhân truyền thư, máy chủ Samba, máy chủ LDAP, máy chủ tên miền và các công cụ khác. Với Mac OS X v10.7 Lion, tất cả các khía cạnh máy chủ của Mac OS X Server đã được tích hợp vào phiên bản máy khách và sản phẩm được đổi tên thành "OS X" (bỏ "Mac" khỏi tên). Các công cụ máy chủ hiện được cung cấp dưới dạng ứng dụng.[14]
Nhân Linux bắt nguồn từ năm 1991, là một dự án của Linus Torvalds, khi đang là sinh viên đại học ở Phần Lan. Anh ấy đã đăng thông tin về dự án của mình trên một nhóm tin dành cho sinh viên và lập trình viên máy tính, đồng thời nhận được sự hỗ trợ và giúp đỡ từ các tình nguyện viên đã thành công trong việc tạo ra một nhân hoàn chỉnh và có chức năng.
Linux giống Unix, nhưng được phát triển mà không có bất kỳ mã nguồn Unix nào, không giống như BSD và các biến thể của nó. Do mô hình giấy phép mở của nó, mã nhân Linux có sẵn để nghiên cứu và sửa đổi, dẫn đến việc nó được sử dụng trên nhiều loại máy tính từ siêu máy tính đến đồng hồ thông minh. Mặc dù các ước tính cho thấy Linux chỉ được sử dụng trên 1,82% của tất cả các PC "để bàn" (hoặc máy tính xách tay),[19] nó đã được chấp nhận rộng rãi để sử dụng trong máy chủ [20] và các hệ thống nhúng [21] như điện thoại di động. Linux đã thay thế Unix trên nhiều nền tảng và được sử dụng trên hầu hết các siêu máy tính bao gồm cả 385 hàng đầu.[22] Nhiều máy tính giống nhau cũng có trên Green500 (nhưng theo thứ tự khác nhau) và Linux chạy trên top 10. Linux cũng thường được sử dụng trên các máy tính nhỏ tiết kiệm năng lượng khác, chẳng hạn như điện thoại thông minh và đồng hồ thông minh. Nhân Linux được sử dụng trong một số bản phân phối phổ biến, chẳng hạn như Red Hat, Debian, Ubuntu, Linux Mint và Android, Chrome OS và Chromium OS của Google.
Microsoft Windows là một dòng hệ điều hành độc quyền được Tập đoàn Microsoft thiết kế và chủ yếu nhắm mục tiêu đến các máy tính dựa trên kiến trúc Intel, với ước tính 88,9% tổng mức sử dụng trên các máy tính được kết nối Web.[19][23][24][25] Phiên bản mới nhất là Windows 11.
Vào năm 2011, Windows 7 đã vượt qua Windows XP để trở thành phiên bản phổ biến nhất được sử dụng.[26][27][28]
Microsoft Windows được phát hành lần đầu tiên vào năm 1985, với tư cách là một môi trường điều hành chạy trên nền tảng MS-DOS, đây là hệ điều hành tiêu chuẩn được sử dụng trên hầu hết các máy tính cá nhân kiến trúc Intel vào thời điểm đó. Năm 1995, Windows 95 được phát hành chỉ sử dụng MS-DOS làm bootstrap. Để tương thích ngược, Win9x có thể chạy MS-DOS ở chế độ thực[29][30] và với các driver 16-bit Windows 3.x[31]. Windows ME, được phát hành năm 2000, là phiên bản cuối cùng trong gia đình Win9x. Các phiên bản sau này đều dựa trên nhân của Windows NT. Phiên bản ứng dụng khách hiện tại của Windows chạy trên các vi xử lý IA-32, x86-64 và 32-bit ARM.[32] Ngoài ra các vi xử lý Itanium vẫn được hỗ trợ trong phiên bản máy chủ cũ hơn Windows Server 2008 R2. Trước đây, Windows NT hỗ trợ các kiến trúc bổ sung.
Các phiên bản máy chủ của Windows được sử dụng rộng rãi. Trong những năm gần đây, Microsoft đã chi ra số vốn đáng kể trong nỗ lực thúc đẩy việc sử dụng Windows như một hệ điều hành máy chủ. Tuy nhiên, việc sử dụng Windows trên máy chủ không phổ biến như trên máy tính cá nhân do Windows phải cạnh tranh với Linux và BSD để giành thị phần máy chủ.[33][34]
ReactOS là một hệ điều hành thay thế cho Windows, đang được phát triển trên các nguyên tắc của Windows – mà không sử dụng bất kỳ mã nguồn nào của Microsoft.
Đã có nhiều hệ điều hành quan trọng trong thời của chúng nhưng hiện tại không còn được như vậy nữa, chẳng hạn như AmigaOS; OS/2 của IBM và Microsoft; Mac OS cổ điển, tiền thân không phải Unix của macOS của Apple; BeOS; XTS-300; Hệ điều hành RISC; MorphOS; Haiku; BareMetal và FreeMint. Một số vẫn được sử dụng trong các thị trường ngách và tiếp tục được phát triển như một nền tảng thiểu số cho các cộng đồng đam mê và các ứng dụng chuyên dụng. OpenVMS, trước đây của DEC, vẫn đang được VMS Software Inc. phát triển tích cực. Tuy nhiên, các hệ điều hành này hầu như chỉ được sử dụng trong học thuật, giáo dục hệ điều hành hoặc nghiên cứu về các khái niệm hệ điều hành. Ví dụ điển hình của một hệ thống đáp ứng cả hai vai trò là MINIX, trong khi ví dụ Singularity được sử dụng thuần túy cho nghiên cứu. Một ví dụ khác là Oberon được thiết kế tại ETH Zürich bởi Niklaus Wirth, Jürg Gutknecht và một nhóm sinh viên tại Viện Hệ thống Máy tính vào những năm 1980. Nó được sử dụng chủ yếu cho nghiên cứu, giảng dạy và công việc hàng ngày trong nhóm của Wirth.
Các hệ điều hành khác đã không giành được thị phần đáng kể, nhưng đã đưa ra những đổi mới có ảnh hưởng đến các hệ điều hành chính thống, đặc biệt là Plan 9 của Bell Labs.
Tất cả các thành phần của hệ điều hành đều tồn tại để làm cho các bộ phận khác nhau của máy tính hoạt động cùng nhau. Tất cả phần mềm người dùng cần phải thông qua hệ điều hành để sử dụng bất kỳ phần cứng nào, cho dù nó đơn giản như chuột hoặc bàn phím hay phức tạp như một thành phần Internet.
Với sự hỗ trợ của phần sụn và trình điều khiển thiết bị, nhân của hệ điều hành cung cấp mức kiểm soát cơ bản nhất đối với tất cả các thiết bị phần cứng của máy tính. Nó quản lý quyền truy cập bộ nhớ cho các chương trình trong RAM, nó xác định chương trình nào có quyền truy cập vào tài nguyên phần cứng nào, nó thiết lập hoặc đặt lại trạng thái hoạt động của CPU để luôn hoạt động tối ưu và nó tổ chức dữ liệu trong các bộ nhớ lưu trữ tĩnh với các hệ thống tập tin trên các phương tiện như đĩa, băng, bộ nhớ flash,...
Hệ điều hành cung cấp giao diện giữa chương trình ứng dụng và phần cứng máy tính, do đó chương trình ứng dụng chỉ có thể tương tác với phần cứng bằng cách tuân theo các quy tắc và thủ tục được lập trình trong hệ điều hành. Hệ điều hành cũng là một tập hợp các dịch vụ giúp đơn giản hóa việc phát triển và thực thi các chương trình ứng dụng. Việc thực thi một chương trình ứng dụng bao gồm việc tạo ra một quy trình bởi hạt nhân hệ điều hành để gán không gian bộ nhớ và các tài nguyên khác, thiết lập mức độ ưu tiên cho quy trình trong hệ thống đa tác vụ, tải mã nhị phân của chương trình vào bộ nhớ và bắt đầu thực thi chương trình ứng dụng. sau đó tương tác với người dùng và với các thiết bị phần cứng.
Ngắt là trung tâm của hệ điều hành, vì chúng cung cấp một cách hiệu quả để hệ điều hành tương tác và phản ứng với môi trường của nó. Thay thế – để hệ điều hành "xem" các nguồn đầu vào khác nhau cho các sự kiện (bỏ phiếu) yêu cầu hành động – có thể được tìm thấy trong các hệ thống cũ với ngăn xếp rất nhỏ (50 hoặc 60 byte) nhưng không bình thường trong các hệ thống hiện đại với ngăn xếp lớn. Lập trình dựa trên ngắt được hầu hết các CPU hiện đại hỗ trợ trực tiếp. Ngắt cung cấp cho máy tính một cách tự động lưu các ngữ cảnh đăng ký cục bộ và chạy mã cụ thể để đáp ứng các sự kiện. Ngay cả những máy tính rất cơ bản cũng hỗ trợ ngắt phần cứng và cho phép lập trình viên chỉ định mã có thể chạy khi sự kiện đó diễn ra.
Khi nhận được một ngắt, phần cứng của máy tính sẽ tự động tạm dừng bất kỳ chương trình nào hiện đang chạy, lưu trạng thái của nó và chạy mã máy tính trước đó được liên kết với ngắt; điều này tương tự như việc đặt dấu trang trong sách để trả lời một cuộc gọi điện thoại. Trong các hệ điều hành hiện đại, các ngắt được nhân của hệ điều hành xử lý. Ngắt có thể đến từ phần cứng của máy tính hoặc chương trình đang chạy.
Khi một thiết bị phần cứng kích hoạt ngắt, hạt nhân của hệ điều hành sẽ quyết định cách đối phó với sự kiện này, thường bằng cách chạy một số mã xử lý. Số lượng mã đang được chạy phụ thuộc vào mức độ ưu tiên của ngắt (ví dụ: một người thường trả lời báo động bằng máy dò khói trước khi trả lời điện thoại). Xử lý ngắt phần cứng là một tác vụ thường được giao cho phần mềm được gọi là trình điều khiển thiết bị, phần mềm này có thể là một phần của nhân hệ điều hành, một phần của chương trình khác hoặc cả hai. Trình điều khiển thiết bị sau đó có thể chuyển tiếp thông tin đến một chương trình đang chạy bằng nhiều cách khác nhau.
Một chương trình cũng có thể kích hoạt một ngắt đối với hệ điều hành. Ví dụ: nếu một chương trình muốn truy cập vào phần cứng, nó có thể làm gián đoạn nhân của hệ điều hành, điều này khiến quyền kiểm soát được chuyển lại cho nhân. Sau đó, nhân sẽ xử lý yêu cầu. Nếu một chương trình muốn có thêm tài nguyên (hoặc muốn loại bỏ tài nguyên) như bộ nhớ, nó sẽ kích hoạt ngắt để thu hút sự chú ý của nhân.
Các bộ vi xử lý hiện đại (CPU hoặc MPU) hỗ trợ nhiều chế độ hoạt động. Các CPU có khả năng này cung cấp ít nhất hai chế độ: chế độ người dùng và chế độ giám sát. Nói chung, hoạt động ở chế độ giám sát cho phép truy cập không hạn chế vào tất cả tài nguyên máy, bao gồm tất cả các lệnh MPU. Chế độ người dùng hoạt động đặt ra giới hạn đối với việc sử dụng lệnh và thường không cho phép truy cập trực tiếp vào tài nguyên máy. CPU cũng có thể có các chế độ khác tương tự như chế độ người dùng, chẳng hạn như chế độ ảo để mô phỏng các loại bộ xử lý cũ hơn, chẳng hạn như bộ xử lý 16 bit trên bộ xử lý 32 bit hoặc bộ xử lý 32 bit trên bộ xử lý 64 bit.
Khi bật nguồn hoặc đặt lại, hệ thống bắt đầu ở chế độ giám sát. Khi một nhân hệ điều hành đã được tải và khởi động, ranh giới giữa chế độ người dùng và chế độ giám sát (còn được gọi là chế độ nhân) có thể được thiết lập.
Chế độ giám sát được hạt nhân sử dụng cho các tác vụ cấp thấp cần quyền truy cập không hạn chế vào phần cứng, chẳng hạn như kiểm soát cách bộ nhớ được truy cập và giao tiếp với các thiết bị như ổ đĩa và thiết bị hiển thị video. Ngược lại, chế độ người dùng được sử dụng cho hầu hết mọi thứ khác. Các chương trình ứng dụng, chẳng hạn như bộ xử lý văn bản và trình quản lý cơ sở dữ liệu, hoạt động trong chế độ người dùng và chỉ có thể truy cập tài nguyên máy bằng cách chuyển quyền điều khiển sang hạt nhân, một quá trình gây chuyển sang chế độ giám sát. Thông thường, việc chuyển quyền điều khiển tới hạt nhân được thực hiện bằng cách thực hiện lệnh ngắt phần mềm, chẳng hạn như lệnh Motorola 68000 TRAP
. Sự gián đoạn của phần mềm khiến bộ vi xử lý chuyển từ chế độ người dùng sang chế độ người giám sát và bắt đầu thực thi mã cho phép nhân thực hiện kiểm soát.
Ở chế độ người dùng, các chương trình thường có quyền truy cập vào một tập hợp các lệnh hạn chế của bộ vi xử lý và thường không thể thực hiện bất kỳ lệnh nào có thể gây gián đoạn hoạt động của hệ thống. Trong chế độ người giám sát, các giới hạn thực thi lệnh thường được loại bỏ, cho phép hạt nhân truy cập không hạn chế vào tất cả các tài nguyên máy.
Thuật ngữ "tài nguyên chế độ người dùng" thường đề cập đến một hoặc nhiều thanh ghi CPU, chứa thông tin mà chương trình đang chạy không được phép thay đổi. Các nỗ lực thay đổi các tài nguyên này thường gây ra chuyển đổi sang chế độ giám sát, nơi hệ điều hành có thể đối phó với hoạt động bất hợp pháp mà chương trình đang cố gắng làm, ví dụ, bằng cách buộc chương trình phải chấm dứt ("giết" chương trình).
Nhân hệ điều hành đa chương trình phải chịu trách nhiệm quản lý tất cả bộ nhớ hệ thống hiện đang được các chương trình sử dụng. Điều này đảm bảo rằng một chương trình không can thiệp vào bộ nhớ đã được chương trình khác sử dụng. Vì chương trình chia sẻ thời gian, mỗi chương trình phải có quyền truy cập độc lập vào bộ nhớ.
Quản lý bộ nhớ hợp tác, được sử dụng bởi nhiều hệ điều hành ban đầu, giả định rằng tất cả các chương trình sử dụng tự nguyện trình quản lý bộ nhớ của nhân và không vượt quá bộ nhớ được cấp phát của chúng. Hệ thống quản lý bộ nhớ này hầu như không còn xuất hiện nữa, vì các chương trình thường chứa các lỗi có thể khiến chúng vượt quá bộ nhớ được cấp phát. Nếu một chương trình bị lỗi, nó có thể khiến bộ nhớ được sử dụng bởi một hoặc nhiều chương trình khác bị ảnh hưởng hoặc bị ghi đè. Các chương trình hoặc vi rút độc hại có thể cố ý thay đổi bộ nhớ của chương trình khác hoặc có thể ảnh hưởng đến hoạt động của chính hệ điều hành. Với tính năng quản lý bộ nhớ hợp tác, chỉ cần một chương trình hoạt động sai có thể làm hệ thống gặp sự cố.
Bảo vệ bộ nhớ cho phép hạt nhân giới hạn quyền truy cập của một tiến trình vào bộ nhớ của máy tính. Có nhiều phương pháp bảo vệ bộ nhớ khác nhau, bao gồm phân đoạn bộ nhớ và phân trang. Tất cả các phương pháp đều yêu cầu một số mức hỗ trợ phần cứng (chẳng hạn như 80286 MMU), điều này không tồn tại trong tất cả các máy tính.
Trong cả phân đoạn và phân trang, một số thanh ghi chế độ được bảo vệ chỉ định cho CPU địa chỉ bộ nhớ mà nó sẽ cho phép một chương trình đang chạy truy cập. Nỗ lực truy cập các địa chỉ khác sẽ kích hoạt ngắt khiến CPU vào lại chế độ giám sát, đặt hạt nhân phụ trách. Đây được gọi là vi phạm phân đoạn hoặc viết tắt là Seg-V, và vì rất khó để gán một kết quả có ý nghĩa cho một hoạt động như vậy và bởi vì nó thường là dấu hiệu của một chương trình hoạt động sai, nhân của hệ điều hành thường sử dụng để chấm dứt chương trình vi phạm và báo cáo lỗi.
Các phiên bản Windows 3.1 đến ME có một số mức độ bảo vệ bộ nhớ, nhưng các chương trình có thể dễ dàng phá vỡ nhu cầu sử dụng nó. Một lỗi bảo vệ chung sẽ được tạo ra, cho thấy một vi phạm phân đoạn đã xảy ra; tuy nhiên, hệ thống sẽ thường xuyên bị lỗi và đổ vỡ.
Việc sử dụng địa chỉ bộ nhớ ảo (chẳng hạn như phân trang hoặc phân đoạn) có nghĩa là hạt nhân có thể chọn bộ nhớ mà mỗi chương trình có thể sử dụng tại bất kỳ thời điểm nào, cho phép hệ điều hành sử dụng cùng vị trí bộ nhớ cho nhiều tác vụ.
Nếu một chương trình cố gắng truy cập bộ nhớ không nằm trong phạm vi bộ nhớ có thể truy cập hiện tại của nó, nhưng dù sao cũng đã được cấp phát cho nó, thì hạt nhân sẽ bị gián đoạn giống như khi chương trình vượt quá bộ nhớ được cấp phát. Trong UNIX, loại ngắt này được gọi là lỗi trang.
Khi hạt nhân phát hiện lỗi trang, nó thường điều chỉnh phạm vi bộ nhớ ảo của chương trình đã kích hoạt nó, cấp cho nó quyền truy cập vào bộ nhớ được yêu cầu. Điều này cung cấp cho hạt nhân quyền lực tùy ý đối với nơi bộ nhớ của một ứng dụng cụ thể được lưu trữ, hoặc thậm chí nó đã thực sự được cấp phát hay chưa.
Trong các hệ điều hành hiện đại, bộ nhớ được truy cập ít thường xuyên hơn có thể được lưu trữ tạm thời trên đĩa hoặc phương tiện khác để cung cấp không gian đó cho các chương trình khác. Điều này được gọi là hoán đổi, vì một vùng bộ nhớ có thể được nhiều chương trình sử dụng và những gì vùng bộ nhớ đó chứa có thể được hoán đổi hoặc trao đổi theo yêu cầu.
"Bộ nhớ ảo" cung cấp cho lập trình viên hoặc người dùng nhận thức rằng có một lượng RAM trong máy tính lớn hơn nhiều so với thực tế.[35]
Đa nhiệm đề cập đến việc chạy nhiều chương trình máy tính độc lập trên cùng một máy tính; tạo ra vẻ ngoài mà nó đang thực hiện các nhiệm vụ cùng một lúc. Vì hầu hết các máy tính có thể làm nhiều nhất một hoặc hai việc cùng một lúc, điều này thường được thực hiện thông qua chia sẻ thời gian, có nghĩa là mỗi chương trình sử dụng một phần thời gian của máy tính để thực thi.
Hạt nhân hệ điều hành chứa một chương trình lập lịch để xác định lượng thời gian mà mỗi tiến trình dành để thực thi và theo thứ tự kiểm soát thực thi sẽ được chuyển cho các chương trình. Kiểm soát được hạt nhân chuyển cho một quá trình, cho phép chương trình truy cập vào CPU và bộ nhớ. Sau đó, quyền điều khiển được trả lại cho hạt nhân thông qua một số cơ chế, để một chương trình khác có thể được phép sử dụng CPU. Cái gọi là chuyển quyền kiểm soát giữa hạt nhân và các ứng dụng được gọi là chuyển đổi ngữ cảnh.
Một mô hình ban đầu điều chỉnh việc phân bổ thời gian cho các chương trình được gọi là đa nhiệm hợp tác. Trong mô hình này, khi điều khiển được hạt nhân chuyển cho một chương trình, nó có thể thực thi bao lâu tùy thích trước khi trả lại điều khiển một cách rõ ràng cho hạt nhân. Điều này có nghĩa là một chương trình độc hại hoặc bị trục trặc có thể không chỉ ngăn cản bất kỳ chương trình nào khác sử dụng CPU mà còn có thể treo toàn bộ hệ thống nếu nó đi vào một vòng lặp vô hạn.
Các hệ điều hành hiện đại mở rộng khái niệm về quyền ưu tiên của ứng dụng đối với trình điều khiển thiết bị và mã hạt nhân, do đó hệ điều hành cũng có quyền kiểm soát ưu tiên đối với thời gian chạy nội bộ.
Triết lý điều chỉnh đa nhiệm ưu tiên là đảm bảo rằng tất cả các chương trình đều có thời gian trên CPU. Điều này ngụ ý rằng tất cả các chương trình phải được giới hạn trong khoảng thời gian chúng được phép sử dụng trên CPU mà không bị gián đoạn. Để thực hiện điều này, các hạt nhân hệ điều hành hiện đại sử dụng ngắt định thời. Một bộ đếm thời gian chế độ được bảo vệ được đặt bởi hạt nhân sẽ kích hoạt việc quay trở lại chế độ giám sát sau khi thời gian được chỉ định trôi qua. (Xem phần trên về Ngắt và hoạt động ở chế độ kép.)
Trên nhiều hệ điều hành người dùng duy nhất, đa nhiệm hợp tác là hoàn toàn phù hợp, vì các máy tính gia đình thường chạy một số lượng nhỏ các chương trình đã được thử nghiệm tốt. AmigaOS là một ngoại lệ, có tính năng đa nhiệm ưu tiên từ phiên bản đầu tiên của nó. Windows NT là phiên bản đầu tiên của Microsoft Windows thực thi đa nhiệm ưu tiên, nhưng nó đã không tiếp cận thị trường người dùng gia đình cho đến khi có Windows XP (vì Windows NT được nhắm mục tiêu vào các chuyên gia).
Quyền truy cập vào dữ liệu được lưu trữ trên đĩa là tính năng trung tâm của tất cả các hệ điều hành. Máy tính lưu trữ dữ liệu trên đĩa bằng cách sử dụng các tập tin, được cấu trúc theo những cách cụ thể để cho phép truy cập nhanh hơn, độ tin cậy cao hơn và tận dụng tốt hơn dung lượng có sẵn của ổ đĩa. Cách cụ thể mà các tập tin được lưu trữ trên đĩa được gọi là hệ thống tập tin và cho phép các tập tin có tên và thuộc tính. Nó cũng cho phép chúng được lưu trữ trong một hệ thống phân cấp các thư mục hoặc các thư mục được sắp xếp trong cây thư mục.
Các hệ điều hành ban đầu thường hỗ trợ một loại ổ đĩa duy nhất và chỉ một loại hệ thống tập tin. Các hệ thống tập tin ban đầu bị hạn chế về dung lượng, tốc độ và các loại tên tập tin và cấu trúc thư mục mà chúng có thể sử dụng. Những hạn chế này thường phản ánh những hạn chế trong hệ điều hành mà chúng được thiết kế, khiến một hệ điều hành rất khó hỗ trợ nhiều hệ thống tập tin.
Trong khi nhiều hệ điều hành đơn giản hơn hỗ trợ một số tùy chọn hạn chế để truy cập hệ thống lưu trữ, các hệ điều hành như UNIX và Linux hỗ trợ công nghệ được gọi là hệ thống tập tin ảo hoặc VFS. Hệ điều hành như UNIX hỗ trợ nhiều loại thiết bị lưu trữ, bất kể thiết kế hoặc hệ thống tập tin của chúng, cho phép chúng được truy cập thông qua giao diện lập trình ứng dụng chung (API). Điều này làm cho các chương trình không cần thiết phải có bất kỳ kiến thức nào về thiết bị mà chúng đang truy cập. VFS cho phép hệ điều hành cung cấp các chương trình có quyền truy cập vào số lượng thiết bị không giới hạn với vô số hệ thống tập tin được cài đặt trên chúng, thông qua việc sử dụng trình điều khiển thiết bị cụ thể và trình điều khiển hệ thống tập tin.
Thiết bị lưu trữ được kết nối, chẳng hạn như ổ cứng, được truy cập thông qua trình điều khiển thiết bị. Trình điều khiển thiết bị hiểu ngôn ngữ cụ thể của ổ đĩa và có thể dịch ngôn ngữ đó sang ngôn ngữ chuẩn được hệ điều hành sử dụng để truy cập tất cả các ổ đĩa. Trên UNIX, đây là ngôn ngữ của các thiết bị khối.
Khi hạt nhân có sẵn một trình điều khiển thiết bị thích hợp, nó có thể truy cập nội dung của ổ đĩa ở định dạng thô, có thể chứa một hoặc nhiều hệ thống tập tin. Trình điều khiển hệ thống tập tin được sử dụng để dịch các lệnh được sử dụng để truy cập từng hệ thống tập tin cụ thể thành một tập hợp lệnh tiêu chuẩn mà hệ điều hành có thể sử dụng để nói chuyện với tất cả các hệ thống tập tin. Các chương trình sau đó có thể xử lý các hệ thống tập tin này trên cơ sở tên tập tin và các thư mục / thư mục, được chứa trong cấu trúc phân cấp. Chúng có thể tạo, xóa, mở và đóng các tập tin cũng như thu thập nhiều thông tin khác nhau về chúng, bao gồm quyền truy cập, kích thước, dung lượng trống và ngày tạo và sửa đổi.
Sự khác biệt khác nhau giữa các hệ thống tập tin làm cho việc hỗ trợ tất cả các hệ thống tập tin trở nên khó khăn. Các ký tự được phép trong tên tập tin, phân biệt chữ hoa chữ thường và sự hiện diện của nhiều loại thuộc tính tập tin khác nhau khiến việc triển khai một giao diện duy nhất cho mọi hệ thống tập tin trở thành một nhiệm vụ khó khăn. Các hệ điều hành có xu hướng khuyến nghị sử dụng (và do đó hỗ trợ nguyên bản) các hệ thống tập tin được thiết kế đặc biệt cho chúng; ví dụ: NTFS trong Windows và ext3 và ReiserFS trong Linux. Tuy nhiên, trên thực tế, các trình điều khiển của bên thứ ba thường có sẵn để hỗ trợ cho các hệ thống tập tin được sử dụng rộng rãi nhất trong hầu hết các hệ điều hành đa năng (ví dụ: NTFS có sẵn trong Linux thông qua NTFS-3g, và ext2/3 và ReiserFS có sẵn trong Windows thông qua phần mềm của bên thứ ba).
Hỗ trợ cho hệ thống tập tin rất đa dạng giữa các hệ điều hành hiện đại, mặc dù có một số hệ thống tập tin phổ biến mà hầu như tất cả các hệ điều hành đều bao gồm hỗ trợ và trình điều khiển. Hệ điều hành khác nhau tùy thuộc vào hỗ trợ hệ thống tập tin và định dạng đĩa mà chúng có thể được cài đặt. Trong Windows, mỗi hệ thống tập tin thường bị giới hạn trong ứng dụng cho một số phương tiện nhất định; ví dụ: đĩa CD phải sử dụng ISO 9660 hoặc UDF và kể từ Windows Vista, NTFS là hệ thống tập tin duy nhất mà hệ điều hành có thể được cài đặt. Có thể cài đặt Linux trên nhiều loại hệ thống tập tin. Không giống như các hệ điều hành khác, Linux và UNIX cho phép bất kỳ hệ thống tập tin nào được sử dụng bất kể phương tiện nào được lưu trữ trong đó, cho dù đó là ổ cứng, đĩa (CD, DVD,...), ổ USB flash, hoặc thậm chí được chứa trong một tập tin nằm trên hệ thống tập tin khác.
Trình điều khiển thiết bị là một loại phần mềm máy tính cụ thể được phát triển để cho phép tương tác với các thiết bị phần cứng. Thông thường, điều này tạo thành một giao diện để giao tiếp với thiết bị, thông qua bus máy tính cụ thể hoặc hệ thống con giao tiếp mà phần cứng được kết nối, cung cấp các lệnh đến và/hoặc nhận dữ liệu từ thiết bị và ở đầu kia, các giao diện cần thiết cho hoạt động ứng dụng hệ thống và phần mềm. Đây là một chương trình máy tính chuyên biệt phụ thuộc vào phần cứng cũng là hệ điều hành cụ thể cho phép một chương trình khác, thường là hệ điều hành hoặc gói phần mềm ứng dụng hoặc chương trình máy tính chạy trong nhân hệ điều hành, tương tác một cách minh bạch với thiết bị phần cứng và thường cung cấp xử lý ngắt cần thiết cho bất kỳ nhu cầu giao tiếp phần cứng phụ thuộc thời gian không đồng bộ cần thiết nào.
Mục tiêu thiết kế chính của trình điều khiển thiết bị là tính trừu tượng. Mỗi kiểu phần cứng (ngay cả trong cùng một loại thiết bị) đều khác nhau. Các mô hình mới hơn cũng được phát hành bởi các nhà sản xuất cung cấp hiệu suất đáng tin cậy hơn hoặc tốt hơn và các mô hình mới hơn này thường được kiểm soát khác nhau. Máy tính và hệ điều hành của chúng không thể biết cách điều khiển mọi thiết bị, cả hiện tại và tương lai. Để giải quyết vấn đề này, hệ điều hành về cơ bản ra lệnh cách mọi loại thiết bị phải được kiểm soát. Sau đó, chức năng của trình điều khiển thiết bị là chuyển các lệnh gọi chức năng được ủy quyền của hệ điều hành này thành các lệnh gọi cụ thể của thiết bị. Về lý thuyết, một thiết bị mới, được điều khiển theo cách mới, sẽ hoạt động chính xác nếu có sẵn trình điều khiển phù hợp. Trình điều khiển mới này đảm bảo rằng thiết bị dường như hoạt động như bình thường theo quan điểm của hệ điều hành.
Trong các phiên bản Windows trước Windows Vista và các phiên bản Linux trước 2.6, tất cả việc thực thi trình điều khiển là hợp tác, có nghĩa là nếu trình điều khiển đi vào một vòng lặp vô hạn, nó sẽ đóng băng hệ thống. Các bản sửa đổi gần đây hơn của các hệ điều hành này kết hợp quyền ưu tiên hạt nhân, trong đó hạt nhân ngắt trình điều khiển để cung cấp cho nó các nhiệm vụ, sau đó tự tách mình khỏi quy trình cho đến khi nó nhận được phản hồi từ trình điều khiển thiết bị hoặc cung cấp nhiều nhiệm vụ khác để thực hiện.
Hiện tại hầu hết các hệ điều hành đều hỗ trợ nhiều giao thức mạng, phần cứng và ứng dụng để sử dụng chúng. Điều này có nghĩa là các máy tính chạy các hệ điều hành khác nhau có thể tham gia vào một mạng chung để chia sẻ tài nguyên như máy tính, tập tin, máy in và máy quét bằng cách sử dụng kết nối có dây hoặc không dây. Về cơ bản, mạng có thể cho phép hệ điều hành của máy tính truy cập vào các tài nguyên của một máy tính từ xa để hỗ trợ các chức năng tương tự nếu các tài nguyên đó được kết nối trực tiếp với máy tính cục bộ. Điều này bao gồm mọi thứ từ giao tiếp đơn giản, đến sử dụng hệ thống tập tin được nối mạng hoặc thậm chí chia sẻ phần cứng âm thanh hoặc đồ họa của máy tính khác. Một số dịch vụ mạng cho phép truy cập tài nguyên của máy tính một cách minh bạch, chẳng hạn như SSH cho phép người dùng mạng truy cập trực tiếp vào giao diện dòng lệnh của máy tính.
Mạng máy khách/máy chủ cho phép một chương trình trên máy tính, được gọi là máy khách, kết nối qua mạng với một máy tính khác, được gọi là máy chủ. Máy chủ cung cấp (hoặc máy chủ) các dịch vụ khác nhau cho các máy tính và người dùng mạng khác. Các dịch vụ này thường được cung cấp thông qua các cổng hoặc các điểm truy cập được đánh số ngoài địa chỉ IP của máy chủ. Mỗi số cổng thường được liên kết với tối đa một chương trình đang chạy, chương trình này chịu trách nhiệm xử lý các yêu cầu đến cổng đó. Daemon, là một chương trình người dùng, có thể lần lượt truy cập các tài nguyên phần cứng cục bộ của máy tính đó bằng cách chuyển các yêu cầu đến nhân hệ điều hành.
Nhiều hệ điều hành cũng hỗ trợ một hoặc nhiều giao thức mạng mở hoặc dành riêng cho nhà cung cấp, chẳng hạn như SNA trên hệ thống IBM, DECnet trên hệ thống của Digital Equipment Corporation và giao thức dành riêng cho Microsoft (SMB) trên Windows. Các giao thức cụ thể cho các tác vụ cụ thể cũng có thể được hỗ trợ như NFS để truy cập tập tin. Các giao thức như ESound hoặc esd có thể dễ dàng mở rộng qua mạng để cung cấp âm thanh từ các ứng dụng cục bộ, trên phần cứng âm thanh của hệ thống từ xa.
Một máy tính được bảo mật phụ thuộc vào một số công nghệ hoạt động bình thường. Một hệ điều hành hiện đại cung cấp quyền truy cập vào một số tài nguyên có sẵn cho phần mềm chạy trên hệ thống và cho các thiết bị bên ngoài như mạng thông qua hạt nhân.[cần dẫn nguồn]
Hệ điều hành phải có khả năng phân biệt giữa các yêu cầu được phép xử lý và các yêu cầu khác không được xử lý. Mặc dù một số hệ thống có thể phân biệt đơn giản giữa "đặc quyền" và "không đặc quyền", các hệ thống thường có một dạng nhận dạng người yêu cầu, chẳng hạn như tên người dùng. Để thiết lập danh tính có thể có một quá trình xác thực. Thường thì tên người dùng phải được trích dẫn và mỗi tên người dùng có thể có một mật khẩu. Các phương pháp xác thực khác, chẳng hạn như thẻ từ hoặc dữ liệu sinh trắc học, có thể được sử dụng thay thế. Trong một số trường hợp, đặc biệt là các kết nối từ mạng, tài nguyên có thể được truy cập mà không cần xác thực (chẳng hạn như đọc tập tin qua chia sẻ mạng). Cũng được bao hàm bởi khái niệm danh tính yêu cầu là ủy quyền; các dịch vụ và tài nguyên cụ thể mà người yêu cầu có thể truy cập sau khi đăng nhập vào hệ thống được liên kết với tài khoản người dùng của người yêu cầu hoặc với các nhóm người dùng được định cấu hình khác nhau mà người yêu cầu thuộc về.[cần dẫn nguồn]
Ngoài mô hình bảo mật cho phép hoặc không cho phép, một hệ thống có mức độ bảo mật cao cũng cung cấp các tùy chọn kiểm tra. Những điều này sẽ cho phép theo dõi các yêu cầu truy cập vào tài nguyên (chẳng hạn như "ai đã đọc tập tin này?"). Bảo mật nội bộ, hoặc bảo mật từ một chương trình đã chạy chỉ có thể thực hiện được nếu tất cả các yêu cầu có thể có hại phải được thực hiện thông qua các ngắt đối với nhân hệ điều hành. Nếu các chương trình có thể truy cập trực tiếp vào phần cứng và tài nguyên, chúng không thể được bảo mật.[cần dẫn nguồn]
Bảo mật bên ngoài liên quan đến yêu cầu từ bên ngoài máy tính, chẳng hạn như đăng nhập vào bảng điều khiển được kết nối hoặc một số loại kết nối mạng. Các yêu cầu bên ngoài thường được chuyển qua trình điều khiển thiết bị đến nhân của hệ điều hành, nơi chúng có thể được chuyển vào các ứng dụng hoặc được thực hiện trực tiếp. Bảo mật của các hệ điều hành từ lâu đã trở thành mối quan tâm vì dữ liệu rất nhạy cảm được lưu trữ trên máy tính, mang tính chất thương mại và quân sự. Bộ Quốc phòng của Chính phủ Hoa Kỳ (DoD) đã tạo ra Tiêu chí Đánh giá Hệ thống Máy tính Tin cậy (TCSEC), đây là một tiêu chuẩn đặt ra các yêu cầu cơ bản để đánh giá hiệu quả của bảo mật. Điều này trở nên quan trọng đối với các nhà sản xuất hệ điều hành, bởi vì TCSEC được sử dụng để đánh giá, phân loại và lựa chọn các hệ điều hành đáng tin cậy đang được xem xét để xử lý, lưu trữ và truy xuất thông tin nhạy cảm hoặc đã được phân loại.
Các dịch vụ mạng bao gồm các dịch vụ như chia sẻ tập tin, dịch vụ in, email, trang web và giao thức truyền tập tin (FTP), hầu hết trong số đó có thể có bảo mật bị xâm phạm. Ở tuyến đầu của bảo mật là các thiết bị phần cứng được gọi là tường lửa hoặc hệ thống phát hiện / ngăn chặn xâm nhập. Ở cấp độ hệ điều hành, có sẵn một số phần mềm tường lửa, cũng như hệ thống phát hiện / ngăn chặn xâm nhập. Hầu hết các hệ điều hành hiện đại đều có tường lửa phần mềm, được bật theo mặc định. Tường lửa phần mềm có thể được cấu hình để cho phép hoặc từ chối lưu lượng mạng đến hoặc từ một dịch vụ hoặc ứng dụng đang chạy trên hệ điều hành. Do đó, người ta có thể cài đặt và đang chạy một dịch vụ không an toàn, chẳng hạn như Telnet hoặc FTP, và không bị đe dọa bởi vi phạm bảo mật vì tường lửa sẽ từ chối tất cả lưu lượng cố gắng kết nối với dịch vụ trên cổng đó.
Một chiến lược thay thế và chiến lược hộp cát duy nhất có sẵn trong các hệ thống không đáp ứng các yêu cầu ảo hóa của Popek và Goldberg, là trong đó hệ điều hành không chạy các chương trình người dùng dưới dạng mã gốc, mà thay vào đó là giả lập bộ xử lý hoặc cung cấp máy chủ cho p -code dựa trên hệ thống như Java.
Bảo mật nội bộ đặc biệt thích hợp cho các hệ thống nhiều người dùng; nó cho phép mỗi người dùng của hệ thống có các tập tin riêng tư mà những người dùng khác không thể giả mạo hoặc đọc được. Bảo mật nội bộ cũng rất quan trọng nếu sử dụng bất kỳ mục đích nào, vì một chương trình có thể có khả năng vượt qua hệ điều hành, bao gồm cả việc bỏ qua kiểm tra.
Khái niệm hệ điều hành được tách thành ba thành phần: giao diện người dùng (bao gồm giao diện đồ họa và/hoặc thông dịch dòng lệnh, còn gọi là "shell"), tiện ích hệ thống cấp thấp, và phần lõi—trái tim của hệ điều hành.
Phần cứng <-> Phần lõi <-> Shell <-> Ứng dụng | | +-----------+ 1 2 3
Trong một số hệ điều hành, phần lõi và shell nằm tách rời hoàn toàn, do đó cho phép kết hợp nhiều phần lõi và shell với nhau (như hệ điều hành UNIX), trong hệ điều hành khác thì điều này chỉ là khái niệm.
|journal=
(trợ giúp)