Karpov những điều cơ bản về hệ điều hành. Cơ bản về hệ điều hành. Khóa học thuyết trình. Karpov V.E., Konkov K.A. Sự phát triển của hệ điều hành. Những vấn đề cơ bản. Lớp trừu tượng

Giới thiệu Định nghĩa về hệ điều hành Hệ điều hành quyết định hầu hết diện mạo của toàn bộ hệ thống máy tính nói chung là. Mặc dù vậy, những người dùng tích cực sử dụng công nghệ máy tính thường gặp khó khăn khi cố gắng xác định một hệ điều hành. Điều này một phần là do hệ điều hành thực hiện hai chức năng cơ bản không liên quan đến nhau: mang lại sự thuận tiện cho người lập trình viên bằng cách cung cấp một chiếc máy tiên tiến cho anh ta và tăng hiệu quả sử dụng máy tính bằng cách quản lý tài nguyên của nó một cách hợp lý. Hệ điều hành như một máy mở rộng Việc sử dụng hầu hết các máy tính ở cấp độ ngôn ngữ máy là rất khó, đặc biệt là khi nói đến đầu vào/đầu ra. Ví dụ, để tổ chức đọc một khối dữ liệu từ đĩa mềm người lập trình có thể sử dụng 16 lệnh khác nhau, mỗi lệnh yêu cầu 13 tham số, chẳng hạn như số khối trên đĩa, số khu vực trên rãnh, v.v. Khi thao tác trên đĩa hoàn tất, bộ điều khiển trả về 23 giá trị phản ánh sự hiện diện và các loại lỗi, rõ ràng là cần phải phân tích. Ngay cả khi bạn không quen với các vấn đề thực sự của lập trình I/O, rõ ràng là sẽ không có nhiều lập trình viên sẵn sàng trực tiếp tham gia lập trình các hoạt động này. Khi làm việc với đĩa, người dùng lập trình viên chỉ cần biểu diễn nó dưới dạng một tập hợp tệp nhất định, mỗi tệp có một tên. Làm việc với một tệp bao gồm việc mở tệp, đọc hoặc ghi tệp và sau đó đóng tệp. Các câu hỏi như liệu có nên sử dụng điều chế tần số nâng cao khi ghi hay trạng thái hiện tại của động cơ chuyển động đầu đọc sẽ không khiến người dùng lo lắng. Tất nhiên, một chương trình che giấu tất cả thực tế của phần cứng với người lập trình và cung cấp khả năng xem, đọc hoặc ghi các tệp được chỉ định một cách đơn giản, thuận tiện là một hệ điều hành. Giống như hệ điều hành bảo vệ các lập trình viên khỏi phần cứng ổ đĩa và cung cấp cho nó một giao diện tệp đơn giản, hệ điều hành sẽ xử lý tất cả những thứ khó chịu liên quan đến xử lý ngắt, quản lý bộ đếm thời gian và RAM cũng như các vấn đề cấp thấp khác. Trong mỗi trường hợp, cỗ máy tưởng tượng, trừu tượng mà giờ đây người dùng có thể xử lý nhờ hệ điều hành, sử dụng đơn giản và thuận tiện hơn nhiều so với phần cứng thực sự nằm bên dưới cỗ máy trừu tượng này. Từ quan điểm này, chức năng của HĐH là cung cấp cho người dùng một số máy ảo hoặc mở rộng dễ lập trình và làm việc hơn so với phần cứng thực tế tạo nên máy thật. Hệ điều hành như một hệ thống quản lý tài nguyên Ý tưởng cho rằng hệ điều hành chủ yếu là một hệ thống cung cấp giao diện thuận tiện cho người dùng tương ứng với cách nhìn từ trên xuống. Một góc nhìn khác, từ dưới lên, đưa ra ý tưởng về HĐH như một cơ chế kiểm soát tất cả các bộ phận của một hệ thống phức tạp. Hệ thống máy tính hiện đại bao gồm bộ xử lý, bộ nhớ, bộ hẹn giờ, đĩa, ổ băng từ, thiết bị truyền thông mạng, máy in và các thiết bị khác. Theo cách tiếp cận thứ hai, chức năng của HĐH là phân phối bộ xử lý, bộ nhớ, thiết bị và dữ liệu giữa các quy trình cạnh tranh các tài nguyên này. Hệ điều hành phải quản lý tất cả các tài nguyên của máy tính theo cách đảm bảo hiệu quả hoạt động tối đa của nó. Ví dụ, tiêu chí hiệu quả có thể là thông lượng hoặc khả năng phản ứng của hệ thống. Quản lý tài nguyên bao gồm việc giải quyết hai nhiệm vụ chung không phụ thuộc vào loại tài nguyên: . lập kế hoạch nguồn lực - nghĩa là xác định cho ai, khi nào và đối với các nguồn lực có thể phân chia và với số lượng bao nhiêu, cần phân bổ một nguồn lực nhất định; . theo dõi trạng thái của tài nguyên - nghĩa là duy trì thông tin vận hành về việc tài nguyên có bận hay không và đối với các tài nguyên có thể phân chia - bao nhiêu tài nguyên đã được phân phối và bao nhiêu tài nguyên còn trống. Để giải quyết những vấn đề quản lý tài nguyên phổ biến này, các hệ điều hành khác nhau sử dụng các thuật toán khác nhau, những thuật toán này cuối cùng sẽ xác định diện mạo tổng thể của chúng, bao gồm đặc điểm hiệu suất, phạm vi và thậm chí cả giao diện người dùng. Ví dụ, thuật toán điều khiển bộ xử lý trong đến một mức độ lớn xác định xem HĐH là hệ thống chia sẻ thời gian, hệ thống xử lý hàng loạt hay hệ thống thời gian thực. Sự phát triển của hệ điều hành Thời kỳ đầu (1945 -1955) Được biết, máy tính được nhà toán học người Anh Charles Babage phát minh vào cuối thế kỷ XVIII. “Động cơ phân tích” của ông không bao giờ có thể thực sự hoạt động được vì công nghệ thời đó chưa đáp ứng được yêu cầu chế tạo các bộ phận cơ khí chính xác cần thiết cho công nghệ máy tính. Người ta cũng biết rằng chiếc máy tính này không có hệ điều hành. Một số tiến bộ trong việc tạo ra máy tính kỹ thuật số xảy ra sau Thế chiến thứ hai. Vào giữa những năm 40, các thiết bị điện toán dạng ống đầu tiên đã được tạo ra. Vào thời điểm đó, cùng một nhóm người đã tham gia thiết kế, vận hành và lập trình máy tính. Nó giống một công việc nghiên cứu trong lĩnh vực công nghệ máy tính hơn là sử dụng máy tính như một công cụ để giải quyết mọi vấn đề thực tế từ các lĩnh vực ứng dụng khác. Việc lập trình được thực hiện độc quyền tại ngôn ngữ máy. Không có cuộc nói chuyện nào về hệ điều hành; mọi nhiệm vụ tổ chức quá trình tính toán đều được mỗi lập trình viên từ bảng điều khiển giải quyết một cách thủ công. Không có phần mềm hệ thống nào khác ngoài thư viện các chương trình toán học và tiện ích. Thời kỳ thứ hai (1955 - 1965) Bắt đầu từ giữa thập niên 50 thời kỳ mới trong sự phát triển của công nghệ máy tính gắn liền với sự xuất hiện của nền tảng kỹ thuật mới - các phần tử bán dẫn. Máy tính thế hệ thứ hai trở nên đáng tin cậy hơn, giờ đây chúng có thể hoạt động liên tục trong thời gian dài đến mức có thể được giao phó thực hiện các nhiệm vụ thực sự quan trọng trong thực tế. Chính trong thời kỳ này, nhân sự được chia thành lập trình viên và người vận hành, người vận hành và nhà phát triển máy tính. Trong những năm này, các ngôn ngữ thuật toán đầu tiên đã xuất hiện và theo đó là các chương trình hệ thống đầu tiên - trình biên dịch. Chi phí về thời gian của CPU đã tăng lên, đòi hỏi phải giảm thời gian sử dụng giữa các lần chạy chương trình. Các hệ thống xử lý hàng loạt đầu tiên xuất hiện, chỉ đơn giản là tự động khởi chạy hết chương trình này đến chương trình khác và do đó làm tăng hệ số tải của bộ xử lý. Hệ thống xử lý hàng loạt là nguyên mẫu của các hệ điều hành hiện đại; chúng trở thành các chương trình hệ thống đầu tiên được thiết kế để quản lý quá trình tính toán. Trong quá trình triển khai các hệ thống xử lý hàng loạt, một ngôn ngữ điều khiển tác vụ chính thức đã được phát triển, với sự trợ giúp của ngôn ngữ này, lập trình viên đã thông báo cho hệ thống và người vận hành về công việc anh ta muốn thực hiện trên máy tính. Một tập hợp nhiều nhiệm vụ, thường ở dạng một bộ bài đục lỗ, được gọi là gói nhiệm vụ. Giai đoạn thứ ba (1965 - 1980) Giai đoạn quan trọng tiếp theo trong quá trình phát triển của máy tính bắt đầu từ năm 1965-1980. Vào thời điểm này, đã có sự chuyển đổi về cơ sở kỹ thuật từ các phần tử bán dẫn riêng lẻ như bóng bán dẫn sang mạch tích hợp, điều này mang lại cơ hội lớn hơn nhiều cho thế hệ máy tính mới thứ ba. Thời kỳ này còn được đặc trưng bởi sự ra đời của các dòng máy tương thích với phần mềm. Dòng máy tương thích phần mềm đầu tiên được xây dựng trên mạch tích hợp là dòng máy IBM/360. Được xây dựng vào đầu những năm 60, dòng máy này vượt trội hơn đáng kể so với các máy thế hệ thứ hai về mặt giá cả/hiệu suất. Chẳng bao lâu sau, ý tưởng về máy tương thích với phần mềm đã được chấp nhận rộng rãi. Khả năng tương thích phần mềm cũng yêu cầu khả năng tương thích của hệ điều hành. Những hệ điều hành như vậy sẽ cần phải chạy trên cả hệ thống máy tính lớn và nhỏ, với số lượng thiết bị ngoại vi lớn và nhỏ, trong các ứng dụng nghiên cứu khoa học và thương mại. Các hệ điều hành được xây dựng để đáp ứng tất cả các yêu cầu xung đột này hóa ra lại là những con quái vật cực kỳ phức tạp. Chúng bao gồm hàng triệu dòng mã lắp ráp, được viết bởi hàng nghìn lập trình viên và chứa hàng nghìn lỗi, tạo ra vô số dòng sửa chữa. Với mỗi phiên bản mới của hệ điều hành, một số lỗi đã được sửa và một số lỗi khác được đưa ra. Tuy nhiên, bất chấp kích thước khổng lồ và nhiều vấn đề, OS/360 và các hệ điều hành tương tự khác trên các máy thế hệ thứ ba đã đáp ứng được hầu hết các yêu cầu của người tiêu dùng. Thành tựu quan trọng nhất của hệ điều hành thế hệ này là việc triển khai đa chương trình. Đa chương trình là một cách tổ chức một quy trình tính toán trong đó một số chương trình được thực thi luân phiên trên một bộ xử lý. Trong khi một chương trình đang thực hiện thao tác I/O, bộ xử lý không ở trạng thái rảnh, như trường hợp thực thi các chương trình một cách tuần tự (chế độ một chương trình), mà đang thực thi một chương trình khác (chế độ đa chương trình). Trong trường hợp này, mỗi chương trình được tải vào phần RAM riêng của nó, được gọi là phân vùng. Một sự đổi mới khác là spooling. Spooling vào thời điểm đó được định nghĩa là một cách tổ chức quá trình tính toán, theo đó các tác vụ được đọc từ thẻ đục lỗ vào đĩa với tốc độ chúng xuất hiện trong trung tâm máy tính, và sau đó, khi tác vụ tiếp theo được hoàn thành, một tác vụ mới sẽ được thực hiện. tác vụ đã được tải từ đĩa vào phân vùng trống. Cùng với việc triển khai đa chương trình của các hệ thống xử lý hàng loạt, một loại hệ điều hành mới đã xuất hiện - hệ thống chia sẻ thời gian. Tùy chọn đa chương trình được sử dụng trong các hệ thống chia sẻ thời gian nhằm mục đích tạo cho mỗi người dùng cá nhân ảo tưởng về việc sử dụng duy nhất máy tính. Giai đoạn thứ tư (1980 - nay) Giai đoạn tiếp theo trong quá trình phát triển của hệ điều hành gắn liền với sự ra đời của các mạch tích hợp quy mô lớn (LSI). Trong những năm này, mức độ tích hợp đã tăng mạnh và giá thành của vi mạch giảm. Máy tính trở nên có sẵn cho cá nhân và kỷ nguyên của máy tính cá nhân bắt đầu. Từ quan điểm kiến ​​trúc, máy tính cá nhân không khác gì loại máy tính mini như PDP-11, nhưng giá của chúng khác nhau đáng kể. Nếu máy tính mini giúp một bộ phận của doanh nghiệp hoặc trường đại học có thể có máy tính riêng thì máy tính cá nhân đã làm được điều này cho một cá nhân. Máy tính được sử dụng rộng rãi bởi những người không chuyên, điều này đòi hỏi phải phát triển phần mềm "thân thiện", chấm dứt đẳng cấp của các lập trình viên. Thị trường hệ điều hành bị thống trị bởi hai hệ thống: MS-DOS và UNIX. Hệ điều hành MS-DOS một chương trình, một người dùng được sử dụng rộng rãi cho các máy tính được xây dựng trên bộ vi xử lý Intel 8088 và sau này là 80286, 80386 và 80486. Hệ điều hành UNIX đa chương trình, nhiều người dùng chiếm ưu thế trong số các máy tính "không phải Intel". , đặc biệt là những thiết bị được xây dựng trên bộ xử lý RISC hiệu suất cao. Vào giữa những năm 80, mạng máy tính cá nhân chạy dưới mạng hoặc hệ điều hành phân tán bắt đầu phát triển nhanh chóng. Trong các hệ điều hành được nối mạng, người dùng phải biết sự hiện diện của các máy tính khác và phải đăng nhập vào máy tính khác để sử dụng tài nguyên của nó, chủ yếu là các tệp. Mỗi máy trên mạng chạy hệ điều hành cục bộ riêng, khác với HĐH máy tính độc lập khả dụng quỹ bổ sung, cho phép máy tính hoạt động trên mạng. Hệ điều hành mạng không có sự khác biệt cơ bản so với hệ điều hành của máy tính bộ xử lý đơn. Nó nhất thiết phải chứa phần mềm hỗ trợ cho các thiết bị giao diện mạng (trình điều khiển bộ điều hợp mạng), cũng như các công cụ để đăng nhập từ xa vào các máy tính khác trên mạng và các công cụ để truy cập các tệp từ xa, nhưng những bổ sung này không làm thay đổi đáng kể cấu trúc của hệ điều hành. Phân loại hệ điều hành Các hệ điều hành có thể khác nhau về tính năng triển khai các thuật toán nội bộ để quản lý tài nguyên máy tính chính (bộ xử lý, bộ nhớ, thiết bị), tính năng của phương pháp thiết kế được sử dụng, loại nền tảng phần cứng, lĩnh vực sử dụng và nhiều thuộc tính khác. Dưới đây là phân loại hệ điều hành theo một số đặc điểm cơ bản nhất. Các tính năng của thuật toán quản lý tài nguyên Hiệu quả của toàn bộ hệ điều hành mạng nói chung phần lớn phụ thuộc vào hiệu quả của các thuật toán quản lý tài nguyên máy tính cục bộ. Do đó, khi mô tả hệ điều hành mạng, họ thường trích dẫn các tính năng quan trọng nhất của việc triển khai các chức năng của hệ điều hành để quản lý bộ xử lý, bộ nhớ và các thiết bị bên ngoài của máy tính tự trị. Ví dụ, tùy thuộc vào đặc điểm của thuật toán điều khiển bộ xử lý được sử dụng, hệ điều hành được chia thành đa tác vụ và đơn tác vụ, nhiều người dùng và một người dùng, các hệ thống hỗ trợ xử lý đa luồng và các hệ thống không hỗ trợ xử lý đa luồng. bộ xử lý và hệ thống bộ xử lý đơn. Hỗ trợ đa nhiệm. Dựa trên số lượng tác vụ được thực hiện đồng thời, hệ điều hành có thể được chia thành hai loại: . tác vụ đơn lẻ (ví dụ: MS-DOS, MSX), v.v. đa nhiệm (OC EC, OS/2, UNIX, Windows 95). Các hệ điều hành đơn tác vụ chủ yếu thực hiện chức năng cung cấp máy ảo cho người dùng, giúp việc này trở nên dễ dàng và hơn thế nữa. quá trình thuận tiện tương tác của người dùng với máy tính. Hệ điều hành đơn tác vụ bao gồm các công cụ quản lý thiết bị ngoại vi, công cụ quản lý tệp và công cụ giao tiếp với người dùng. Hệ điều hành đa nhiệm ngoài các chức năng trên còn quản lý việc phân chia các tài nguyên dùng chung như bộ xử lý, RAM, tập tin và các thiết bị bên ngoài. Hỗ trợ chế độ nhiều người dùng. Dựa vào số lượng người dùng đồng thời, hệ điều hành được chia thành: . người dùng đơn (MS-DOS, Windows 3.x, phiên bản đầu HĐH/2); . nhiều người dùng (UNIX, Windows NT). Sự khác biệt chính giữa hệ thống nhiều người dùng và hệ thống một người dùng là sự sẵn có của các phương tiện để bảo vệ thông tin của mỗi người dùng khỏi sự truy cập trái phép của những người dùng khác. Cần lưu ý rằng không phải mọi hệ thống đa nhiệm đều có nhiều người dùng và không phải mọi hệ điều hành một người dùng đều là hệ thống đơn nhiệm. Đa nhiệm ưu tiên và không ưu tiên. Tài nguyên được chia sẻ quan trọng nhất là thời gian xử lý. Phương pháp phân phối thời gian xử lý giữa một số tiến trình (hoặc luồng) hiện có đồng thời trong hệ thống phần lớn xác định các đặc điểm cụ thể của HĐH. Trong số nhiều tùy chọn hiện có để triển khai đa nhiệm, có thể phân biệt hai nhóm thuật toán: . đa nhiệm không ưu tiên (NetWare, Windows 3.x); . đa nhiệm ưu tiên (Windows NT, OS/2, UNIX). Sự khác biệt chính giữa đa nhiệm ưu tiên và không ưu tiên là mức độ tập trung của cơ chế lập kế hoạch quy trình. Trong trường hợp đầu tiên, cơ chế lập lịch trình quy trình hoàn toàn tập trung vào hệ điều hành và trong trường hợp thứ hai, nó được phân phối giữa hệ thống và các chương trình ứng dụng. Với đa nhiệm không ưu tiên, quy trình đang hoạt động sẽ chạy cho đến khi nó chủ động trao quyền kiểm soát cho hệ điều hành để nó chọn một quy trình khác sẵn sàng chạy từ hàng đợi. Với đa nhiệm ưu tiên, quyết định chuyển bộ xử lý từ tiến trình này sang tiến trình khác được thực hiện bởi hệ điều hành chứ không phải bởi chính tiến trình đang hoạt động. Hỗ trợ đa luồng. Một thuộc tính quan trọng của hệ điều hành là khả năng song song hóa các phép tính trong một tác vụ duy nhất. Hệ điều hành đa luồng không phân chia thời gian xử lý giữa các tác vụ mà giữa các nhánh (luồng) riêng lẻ của chúng. Đa xử lý. Một đặc tính quan trọng khác của HĐH là không có hoặc có hỗ trợ đa xử lý - đa xử lý. Đa xử lý dẫn đến sự phức tạp của tất cả các thuật toán quản lý tài nguyên. Ngày nay, việc đưa các chức năng hỗ trợ đa xử lý vào hệ điều hành đang trở thành thông lệ. Những tính năng như vậy có sẵn trong Solaris 2.x của Sun, Open Server 3.x của Santa Crus Operations, OS/2 của IBM, Windows NT của Microsoft và NetWare 4.1 của Novell. Hệ điều hành đa bộ xử lý có thể được phân loại theo cách tổ chức quá trình tính toán trong một hệ thống có kiến ​​trúc đa bộ xử lý: hệ điều hành bất đối xứng và hệ điều hành đối xứng. Một hệ điều hành bất đối xứng chỉ chạy hoàn toàn trên một trong các bộ xử lý hệ thống, phân phối bài toán ứng dụng cho các bộ xử lý khác. Một hệ điều hành đối xứng được phân cấp hoàn toàn và sử dụng toàn bộ nhóm bộ xử lý, phân chia chúng giữa các tác vụ hệ thống và ứng dụng. Ở trên, chúng tôi đã thảo luận về các đặc điểm của HĐH liên quan đến việc quản lý chỉ một loại tài nguyên - bộ xử lý. Các tính năng của các hệ thống con quản lý tài nguyên cục bộ khác—các hệ thống con quản lý bộ nhớ, tệp và thiết bị đầu vào/đầu ra—có ảnh hưởng quan trọng đến diện mạo của hệ điều hành nói chung và đến khả năng sử dụng nó trong một khu vực cụ thể. Tính đặc thù của HĐH còn được thể hiện ở cách nó thực hiện các chức năng mạng: nhận dạng và chuyển hướng các yêu cầu đến các tài nguyên từ xa vào mạng, truyền tin nhắn qua mạng, thực hiện các yêu cầu từ xa. Khi triển khai các chức năng mạng, một tập hợp các nhiệm vụ phát sinh liên quan đến tính chất phân tán của việc lưu trữ và xử lý dữ liệu trên mạng: duy trì thông tin tham chiếu về tất cả các tài nguyên và máy chủ có sẵn trên mạng, giải quyết các quy trình tương tác, đảm bảo tính minh bạch truy cập, sao chép dữ liệu, đối chiếu các quy trình tương tác. bản sao, duy trì bảo mật dữ liệu. Các tính năng của nền tảng phần cứng Các thuộc tính của hệ điều hành bị ảnh hưởng trực tiếp bởi phần cứng mà nó được thiết kế trên đó. Dựa trên loại phần cứng, hệ điều hành của máy tính cá nhân, máy tính mini, máy tính lớn, cụm và mạng máy tính được phân biệt. Trong số các loại máy tính được liệt kê, có thể có cả tùy chọn bộ xử lý đơn và đa bộ xử lý. Trong mọi trường hợp, các chi tiết cụ thể của phần cứng thường được phản ánh trong các chi tiết cụ thể của hệ điều hành. Rõ ràng là hệ điều hành xe ô tô lớn phức tạp và nhiều chức năng hơn hệ điều hành máy tính cá nhân. Do đó, trong HĐH của các máy lớn, các chức năng lập kế hoạch luồng nhiệm vụ đang được thực hiện rõ ràng được thực hiện thông qua việc sử dụng các nguyên tắc ưu tiên phức tạp và đòi hỏi nhiều sức mạnh tính toán hơn trong HĐH của máy tính cá nhân. Tình hình tương tự với các chức năng khác. Hệ điều hành mạng bao gồm các phương tiện truyền tin nhắn giữa các máy tính qua đường truyền thông hoàn toàn không cần thiết trong hệ điều hành độc lập. Dựa trên những thông báo này, hệ điều hành mạng hỗ trợ chia sẻ tài nguyên máy tính giữa những người dùng từ xa được kết nối với mạng. Để hỗ trợ các chức năng truyền tin nhắn, hệ điều hành mạng chứa các thành phần phần mềm đặc biệt thực hiện các giao thức truyền thông phổ biến như IP, IPX, Ethernet và các giao thức khác. Hệ thống đa bộ xử lý yêu cầu một tổ chức đặc biệt từ hệ điều hành, với sự trợ giúp của hệ điều hành, cũng như các ứng dụng mà nó hỗ trợ, có thể được thực thi song song bởi các bộ xử lý riêng lẻ của hệ thống. Hoạt động song song của các bộ phận riêng lẻ của HĐH tạo ra thêm vấn đề cho các nhà phát triển HĐH, vì trong trường hợp này, việc đảm bảo quyền truy cập nhất quán của các quy trình riêng lẻ vào các bảng hệ thống chung sẽ khó khăn hơn nhiều, để loại bỏ ảnh hưởng của các chủng tộc và các hậu quả không mong muốn khác của việc thực thi không đồng bộ của công việc. Các yêu cầu khác áp dụng cho hệ điều hành cụm. Cụm là một tập hợp được liên kết lỏng lẻo của một số hệ thống máy tính hoạt động cùng nhau để chạy các ứng dụng phổ biến và hiển thị với người dùng dưới dạng một hệ thống duy nhất. Cùng với phần cứng đặc biệt, hoạt động của các hệ thống cụm cũng cần có sự hỗ trợ phần mềm từ hệ điều hành, chủ yếu liên quan đến việc đồng bộ hóa quyền truy cập vào các tài nguyên dùng chung, phát hiện lỗi và cấu hình lại hệ thống động. Một trong những bước phát triển đầu tiên trong lĩnh vực công nghệ cụm là các giải pháp từ Thiết bị số dựa trên máy tính VAX. Công ty gần đây đã ký một thỏa thuận với Tập đoàn Microsoft để phát triển công nghệ cụm sử dụng Windows NT. Một số công ty cung cấp các cụm dựa trên máy UNIX. Cùng với các hệ điều hành tập trung vào một loại nền tảng phần cứng rất cụ thể, còn có các hệ điều hành được thiết kế đặc biệt để có thể dễ dàng chuyển từ loại máy tính này sang loại máy tính khác, được gọi là hệ điều hành di động. Ví dụ nổi bật nhất về hệ điều hành như vậy là hệ thống UNIX phổ biến. Trong các hệ thống này, những vị trí phụ thuộc vào phần cứng được bản địa hóa cẩn thận để khi hệ thống được chuyển sang nền tảng mới, chỉ có chúng được viết lại. Một phương tiện giúp chuyển phần còn lại của HĐH dễ dàng hơn là viết nó bằng ngôn ngữ độc lập với máy, chẳng hạn như C, được phát triển để lập trình hệ điều hành. Đặc điểm của lĩnh vực sử dụng Hệ điều hành đa nhiệm được chia thành ba loại theo các tiêu chí hiệu quả được sử dụng trong quá trình phát triển chúng: . hệ thống xử lý hàng loạt (ví dụ: OC EC), . hệ thống chia sẻ thời gian (UNIX, VMS), . hệ thống thời gian thực (QNX, RT/11). Các hệ thống xử lý hàng loạt nhằm giải quyết các vấn đề chủ yếu có tính chất tính toán không yêu cầu kết quả nhanh chóng. Mục tiêu và tiêu chí chính cho tính hiệu quả của hệ thống xử lý hàng loạt là thông lượng tối đa, nghĩa là giải quyết số lượng nhiệm vụ tối đa trên một đơn vị thời gian. Để đạt được mục tiêu này, hệ thống xử lý hàng loạt sử dụng sơ đồ vận hành sau: khi bắt đầu công việc, một loạt nhiệm vụ được hình thành, mỗi nhiệm vụ chứa một yêu cầu về tài nguyên hệ thống; từ gói nhiệm vụ này, một hỗn hợp nhiều chương trình được hình thành, tức là nhiều nhiệm vụ được thực hiện đồng thời. Để thực hiện đồng thời, các tác vụ có yêu cầu tài nguyên khác nhau được chọn để đảm bảo tải cân bằng trên tất cả các thiết bị của máy tính; ví dụ, trong một hỗn hợp đa chương trình, sự hiện diện đồng thời của các tác vụ tính toán và các tác vụ đòi hỏi nhiều I/O là điều mong muốn. Do đó, việc lựa chọn một nhiệm vụ mới từ gói nhiệm vụ phụ thuộc vào tình hình nội bộ trong hệ thống, tức là chọn một nhiệm vụ “có lãi”. Do đó, trong các hệ điều hành như vậy không thể đảm bảo hoàn thành một nhiệm vụ cụ thể trong một khoảng thời gian nhất định. Trong các hệ thống xử lý hàng loạt, việc chuyển bộ xử lý từ chạy một tác vụ này sang chạy tác vụ khác chỉ xảy ra nếu chính tác vụ đang hoạt động đó bỏ bộ xử lý, chẳng hạn do nhu cầu thực hiện thao tác I/O. Do đó, một tác vụ duy nhất có thể chiếm bộ xử lý trong thời gian dài, khiến không thể hoàn thành các tác vụ tương tác. Do đó, sự tương tác của người dùng với máy tính có cài đặt hệ thống xử lý hàng loạt có nghĩa là anh ta giao một nhiệm vụ, giao nó cho người điều phối-điều hành và vào cuối ngày, sau khi hoàn thành toàn bộ loạt nhiệm vụ. , anh ta nhận được kết quả. Rõ ràng, sự sắp xếp này làm giảm hiệu quả của người dùng. Hệ thống chia sẻ thời gian được thiết kế để khắc phục nhược điểm chính của hệ thống xử lý hàng loạt - sự cô lập của người lập trình viên người dùng khỏi quá trình thực hiện các nhiệm vụ của mình. Mỗi người dùng hệ thống chia sẻ thời gian được cung cấp một thiết bị đầu cuối để từ đó anh ta có thể tiến hành đối thoại với chương trình của mình. Vì các hệ thống chia sẻ thời gian chỉ phân bổ một phần thời gian CPU cho mỗi tác vụ nên không có tác vụ đơn lẻ nào chiếm bộ xử lý quá lâu và thời gian phản hồi có thể chấp nhận được. Nếu lượng tử được chọn đủ nhỏ thì tất cả người dùng đồng thời làm việc trên cùng một máy sẽ có ấn tượng rằng mỗi người trong số họ chỉ sử dụng máy. Rõ ràng là hệ thống chia sẻ thời gian có thông lượng thấp hơn so với hệ thống xử lý hàng loạt, vì mỗi tác vụ do người dùng đưa ra đều được chấp nhận để thực thi chứ không phải tác vụ “có lợi” cho hệ thống và ngoài ra còn có chi phí chung. sức mạnh tính toán để bộ xử lý chuyển đổi thường xuyên hơn từ tác vụ này sang tác vụ khác. Tiêu chí về tính hiệu quả của hệ thống chia sẻ thời gian không phải là thông lượng tối đa mà là sự thuận tiện và hiệu quả của người dùng. Các hệ thống thời gian thực được sử dụng để điều khiển các đối tượng kỹ thuật khác nhau, chẳng hạn như máy công cụ, vệ tinh, cài đặt thử nghiệm khoa học hoặc quy trình công nghệ , chẳng hạn như dây chuyền mạ điện, quá trình lò cao, v.v. Trong tất cả các trường hợp này, có một khoảng thời gian tối đa cho phép mà chương trình này hoặc chương trình khác điều khiển đối tượng phải được thực thi, nếu không, tai nạn có thể xảy ra: vệ tinh sẽ rời khỏi vùng hiển thị, dữ liệu thử nghiệm đến từ các cảm biến sẽ bị mất, độ dày của lớp phủ mạ điện sẽ không tương ứng với định mức. Do đó, tiêu chí hiệu quả cho các hệ thống thời gian thực là khả năng chịu đựng các khoảng thời gian được xác định trước từ khi khởi chạy chương trình đến khi đạt được kết quả (hành động điều khiển). Thời gian này được gọi là thời gian phản ứng của hệ thống và tính chất tương ứng của hệ thống được gọi là khả năng phản ứng. Đối với các hệ thống này, hỗn hợp nhiều chương trình là một tập hợp cố định các chương trình được phát triển trước và việc lựa chọn chương trình để thực hiện được thực hiện dựa trên trạng thái hiện tại của đối tượng hoặc theo tiến độ công việc đã lên kế hoạch. Một số hệ điều hành có thể kết hợp các thuộc tính của các loại hệ thống khác nhau, ví dụ: một số tác vụ có thể được thực hiện ở chế độ xử lý hàng loạt và một số tác vụ trong thời gian thực hoặc ở chế độ chia sẻ thời gian. Trong những trường hợp như vậy, chế độ xử lý hàng loạt thường được gọi là chế độ nền. Đặc điểm của các phương pháp xây dựng Khi mô tả một hệ điều hành, các đặc điểm về tổ chức cấu trúc của nó và các khái niệm cơ bản bên dưới nó thường được chỉ ra. Những khái niệm cơ bản này bao gồm: . Các cách xây dựng hạt nhân hệ thống - cách tiếp cận hạt nhân nguyên khối hoặc hạt nhân vi mô. Hầu hết các hệ điều hành đều sử dụng nhân nguyên khối, được biên dịch thành một chương trình duy nhất chạy ở chế độ đặc quyền và sử dụng các chuyển đổi nhanh từ quy trình này sang quy trình khác mà không yêu cầu chuyển từ chế độ đặc quyền sang chế độ người dùng và ngược lại. Một giải pháp thay thế là xây dựng một hệ điều hành dựa trên vi nhân, hệ điều hành này cũng hoạt động ở chế độ đặc quyền và chỉ thực hiện tối thiểu các chức năng quản lý phần cứng, trong khi các chức năng hệ điều hành cấp cao hơn được thực hiện bởi các thành phần hệ điều hành chuyên dụng - máy chủ chạy ở chế độ người dùng. Với thiết kế này, HĐH hoạt động chậm hơn, vì việc chuyển đổi giữa chế độ đặc quyền và chế độ người dùng thường được thực hiện, nhưng hệ thống trở nên linh hoạt hơn - các chức năng của nó có thể được mở rộng, sửa đổi hoặc thu hẹp bằng cách thêm, sửa đổi hoặc loại trừ các máy chủ ở chế độ người dùng. . Ngoài ra, các máy chủ cũng như mọi quy trình của người dùng đều được bảo vệ tốt khỏi nhau. . Xây dựng một hệ điều hành dựa trên cách tiếp cận hướng đối tượng giúp có thể sử dụng tất cả các ưu điểm của nó, đã được chứng minh ở cấp độ ứng dụng, trong hệ điều hành, cụ thể là: tích lũy các giải pháp thành công dưới dạng các đối tượng tiêu chuẩn, khả năng tạo các đối tượng mới dựa trên các đối tượng hiện có bằng cơ chế kế thừa, bảo vệ dữ liệu tốt do được đóng gói trong cấu trúc bên trong của đối tượng, khiến dữ liệu không thể truy cập được để sử dụng trái phép từ bên ngoài, cấu trúc của hệ thống, bao gồm một tập hợp các đối tượng các đối tượng được xác định rõ ràng. . Sự hiện diện của một số môi trường ứng dụng giúp có thể chạy đồng thời các ứng dụng được phát triển cho nhiều hệ điều hành trong một HĐH. Nhiều hệ điều hành hiện đại đồng thời hỗ trợ MS-DOS, Windows, UNIX (POSIX), OS/2 hoặc ít nhất một số tập hợp con của bộ phổ biến này. Khái niệm về nhiều môi trường ứng dụng được triển khai đơn giản nhất trong một hệ điều hành dựa trên một vi nhân, trên đó nhiều máy chủ khác nhau hoạt động, một số trong đó triển khai môi trường ứng dụng của một hệ điều hành cụ thể. . Tổ chức phân tán của hệ điều hành giúp đơn giản hóa công việc của người dùng và lập trình viên trong môi trường mạng. Hệ điều hành phân tán thực hiện các cơ chế cho phép người dùng tưởng tượng và cảm nhận mạng dưới dạng một máy tính xử lý đơn truyền thống. Các tính năng đặc trưng của tổ chức HĐH phân tán là: sự hiện diện của một bộ phận trợ giúp duy nhất cho các tài nguyên được chia sẻ, dịch vụ thống nhất thời gian, việc sử dụng cơ chế gọi thủ tục từ xa (RPC) để phân phối minh bạch các quy trình phần mềm trên các máy, xử lý đa luồng, cho phép bạn song song hóa các phép tính trong một tác vụ duy nhất và cũng thực hiện tác vụ này trên nhiều máy tính mạng cùng một lúc. như sự hiện diện của các dịch vụ phân phối khác. Hệ điều hành mạng Cấu trúc của một hệ điều hành mạng Một hệ điều hành mạng tạo thành nền tảng của bất kỳ mạng máy tính nào. Mỗi máy tính trên mạng phần lớn có tính tự chủ, do đó, trong hệ điều hành mạng ở theo nghĩa rộngđược hiểu là tập hợp các hệ điều hành của các máy tính cá nhân tương tác với nhau nhằm mục đích trao đổi tin nhắn và chia sẻ tài nguyên theo các quy tắc - giao thức thống nhất. Theo nghĩa hẹp, HĐH mạng là hệ điều hành của một máy tính riêng biệt cung cấp cho nó khả năng hoạt động trên mạng. Cơm. 1.1. Cấu trúc của một hệ điều hành mạng Trong hệ điều hành mạng của một máy riêng lẻ, có thể phân biệt một số phần (Hình 1.1): . Công cụ quản lý tài nguyên máy tính cục bộ: chức năng phân phối RAM giữa các tiến trình, lập lịch và gửi tiến trình, quản lý bộ xử lý trong máy đa bộ xử lý, quản lý thiết bị ngoại vi và các chức năng khác để quản lý tài nguyên hệ điều hành cục bộ. . Phương tiện cung cấp tài nguyên và dịch vụ riêng cho mục đích sử dụng chung - phần máy chủ của HĐH (máy chủ). Những công cụ này cung cấp, ví dụ, khóa tập tin và bản ghi, điều này cần thiết cho chia sẻ ; duy trì danh mục tên tài nguyên mạng; xử lý các yêu cầu truy cập từ xa vào hệ thống tệp và cơ sở dữ liệu của riêng bạn; quản lý hàng đợi yêu cầu từ người dùng từ xa đến các thiết bị ngoại vi của họ. . Phương tiện yêu cầu quyền truy cập vào các tài nguyên và dịch vụ từ xa cũng như việc sử dụng chúng - phần máy khách của HĐH (chuyển hướng). Phần này nhận dạng và chuyển tiếp yêu cầu đến các tài nguyên từ xa từ ứng dụng và người dùng đến mạng, trong đó yêu cầu đến từ ứng dụng ở dạng cục bộ và được truyền đến mạng dưới dạng khác đáp ứng yêu cầu của máy chủ. Phần máy khách cũng chấp nhận phản hồi từ máy chủ và chuyển đổi chúng thành định dạng cục bộ, do đó ứng dụng không thể phân biệt được với việc thực hiện các yêu cầu cục bộ và từ xa. . Phương tiện giao tiếp của hệ điều hành, với sự trợ giúp của các tin nhắn được trao đổi trên mạng. Phần này cung cấp địa chỉ và bộ đệm của tin nhắn, lựa chọn tuyến truyền tin nhắn qua mạng, độ tin cậy của việc truyền, v.v., nghĩa là nó là một phương tiện truyền tin nhắn. Tùy thuộc vào các chức năng được gán cho một máy tính cụ thể, hệ điều hành của nó có thể thiếu phần máy khách hoặc phần máy chủ. Hình 1.2 thể hiện sự tương tác của các thành phần mạng. Ở đây máy tính 1 đóng vai trò là máy khách “thuần túy”, còn máy tính 2 lần lượt đóng vai trò là máy chủ “thuần túy”, máy thứ nhất không có phần máy chủ và máy thứ hai không có phần máy khách. Hình này hiển thị riêng thành phần phía máy khách - bộ chuyển hướng. Nó là bộ chuyển hướng chặn tất cả các yêu cầu đến từ các ứng dụng và phân tích chúng. Nếu một yêu cầu được đưa ra tới một tài nguyên trên một máy tính nhất định thì nó sẽ được chuyển tiếp đến hệ thống con thích hợp của hệ điều hành cục bộ, nhưng nếu đó là một yêu cầu tới một tài nguyên từ xa thì nó sẽ được chuyển tiếp tới mạng. Trong trường hợp này, phần máy khách chuyển đổi yêu cầu từ biểu mẫu cục bộ sang định dạng mạng và truyền nó đến hệ thống con vận chuyển, hệ thống này chịu trách nhiệm gửi tin nhắn đến máy chủ được chỉ định. Phần máy chủ của hệ điều hành của máy tính 2 nhận yêu cầu, chuyển đổi nó và chuyển nó đến hệ điều hành cục bộ của nó để thực thi. Sau khi nhận được kết quả, máy chủ liên hệ với hệ thống con vận chuyển và gửi phản hồi đến máy khách đã đưa ra yêu cầu. Phần máy khách chuyển đổi kết quả thành định dạng thích hợp và gửi nó đến ứng dụng đã đưa ra yêu cầu. Cơm. 1.2. tương tác của các thành phần hệ điều hành khi máy tính tương tác Trong thực tế, một số phương pháp xây dựng hệ điều hành mạng đã được phát triển (Hình 1. 3). Hệ điều hành mạng đầu tiên là sự kết hợp giữa hệ điều hành cục bộ hiện có và lớp vỏ mạng được xây dựng trên nó. Đồng thời, các chức năng mạng tối thiểu cần thiết cho hoạt động của vỏ mạng, thực hiện các chức năng mạng chính, đã được tích hợp vào hệ điều hành cục bộ. Một ví dụ về cách tiếp cận này là việc sử dụng hệ điều hành MS DOS trên mỗi máy mạng (bắt đầu từ phiên bản thứ ba, hệ điều hành này có các chức năng tích hợp sẵn như khóa tệp và bản ghi cần thiết để chia sẻ tệp). Nguyên tắc xây dựng hệ điều hành mạng dưới dạng vỏ mạng trên hệ điều hành cục bộ cũng được sử dụng trong các hệ điều hành hiện đại, chẳng hạn như LANtastic hay Personal Ware. Cơm. 1.3. Các lựa chọn để xây dựng hệ điều hành mạng Tuy nhiên, có vẻ hiệu quả hơn là phát triển các hệ điều hành được thiết kế ban đầu để hoạt động trên mạng. Các chức năng mạng của loại HĐH này được tích hợp sâu vào các mô-đun chính của hệ thống, đảm bảo sự hài hòa logic, dễ vận hành và sửa đổi cũng như hiệu suất cao. Một ví dụ về hệ điều hành như vậy là Hệ thống Windows NT của Microsoft, nhờ có các công cụ mạng tích hợp, cung cấp hiệu suất và bảo mật thông tin cao hơn so với HĐH mạng LAN Manager của cùng một công ty (cùng phát triển với IBM), là một tiện ích bổ sung trên HĐH cục bộ/ 2 hệ điều hành. Hệ điều hành mạng ngang hàng và hệ điều hành có máy chủ chuyên dụng Tùy thuộc vào cách phân bổ chức năng giữa các máy tính mạng, hệ điều hành mạng và do đó mạng được chia thành hai loại: ngang hàng và hai ngang hàng (Hình 1.4). Mạng sau thường được gọi là mạng có máy chủ chuyên dụng. (a) (b) Hình. 1.4. (a) - Mạng ngang hàng, (b) - Mạng hai ngang hàng Nếu một máy tính cung cấp tài nguyên của nó cho những người dùng mạng khác thì nó đóng vai trò của một máy chủ. Trong trường hợp này, máy tính truy cập tài nguyên của máy khác là máy khách. Như đã đề cập, một máy tính hoạt động trên mạng có thể thực hiện các chức năng của máy khách hoặc máy chủ hoặc kết hợp cả hai chức năng này. Nếu việc thực hiện một số chức năng máy chủ là mục đích chính của máy tính (ví dụ: cung cấp tệp để tất cả người dùng mạng khác sử dụng chung hoặc tổ chức chia sẻ fax hoặc cho phép tất cả người dùng mạng chạy ứng dụng của họ trên máy tính này), thì máy tính đó là gọi là máy chủ chuyên dụng. Tùy thuộc vào tài nguyên máy chủ nào được chia sẻ, nó được gọi là máy chủ tệp, máy chủ fax, máy chủ in, máy chủ ứng dụng, v.v. Rõ ràng, trên các máy chủ chuyên dụng, nên cài đặt các hệ điều hành được tối ưu hóa đặc biệt để thực hiện một số chức năng máy chủ nhất định. Do đó, trong các mạng có máy chủ chuyên dụng, hệ điều hành mạng thường được sử dụng nhiều nhất, bao gồm một số tùy chọn hệ điều hành khác nhau về khả năng của các bộ phận máy chủ. Ví dụ: hệ điều hành mạng Novell NetWare có phiên bản máy chủ được tối ưu hóa để hoạt động như một máy chủ tệp, cũng như các tùy chọn shell cho máy trạm chạy các hệ điều hành cục bộ khác nhau và các shell này thực hiện các chức năng máy khách độc quyền. Một ví dụ khác về hệ điều hành nhằm xây dựng mạng với máy chủ chuyên dụng là hệ điều hành Windows NT. Không giống như NetWare, cả hai phiên bản của hệ điều hành mạng này - Windows NT Server (dành cho máy chủ chuyên dụng) và Windows NT Workstation (dành cho máy trạm) - có thể hỗ trợ cả chức năng máy khách và máy chủ. Nhưng phiên bản máy chủ của Windows NT có nhiều cơ hội hơn trong việc cung cấp tài nguyên máy tính của bạn cho những người dùng mạng khác vì nó có thể thực hiện nhiều chức năng hơn, hỗ trợ số lượng kết nối đồng thời lớn hơn với máy khách, thực hiện quản lý mạng tập trung và có nhiều tính năng hơn. phát triển các tính năng bảo mật. Thông thường, việc sử dụng máy chủ chuyên dụng làm máy tính để thực hiện các tác vụ thông thường không liên quan đến mục đích chính của nó là không phổ biến, vì điều này có thể làm giảm hiệu suất công việc của nó với tư cách là một máy chủ. Liên quan đến những cân nhắc như vậy, Hệ điều hành Novell NetWare hoàn toàn không cung cấp khả năng chạy các chương trình ứng dụng thông thường ở phía máy chủ, nghĩa là máy chủ không chứa phần máy khách và không có thành phần máy chủ trên máy trạm. Tuy nhiên, trong các hệ điều hành mạng khác, hoạt động của phần máy khách trên một máy chủ chuyên dụng là hoàn toàn có thể. Ví dụ: Windows NT Server có thể chạy các chương trình người dùng cục bộ thông thường có thể yêu cầu thực thi các chức năng máy khách của hệ điều hành khi xuất hiện yêu cầu về tài nguyên từ các máy tính khác trên mạng. Trong trường hợp này, các máy trạm được cài đặt Windows NT Workstation có thể thực hiện các chức năng của một máy chủ không chuyên dụng. Điều quan trọng là phải hiểu rằng mặc dù thực tế là trong mạng có máy chủ chuyên dụng, tất cả các máy tính trong trường hợp chung có thể đồng thời thực hiện vai trò của cả máy chủ và máy khách, mạng này không đối xứng về mặt chức năng: trong phần cứng và phần mềm, có hai loại các máy tính được triển khai trong đó - một máy tính tập trung nhiều hơn vào việc thực hiện các chức năng của máy chủ và chạy các hệ điều hành máy chủ chuyên dụng, trong khi các máy tính khác chủ yếu thực hiện các chức năng máy khách và chạy phiên bản hệ điều hành phù hợp cho mục đích này. Theo quy luật, sự bất đối xứng về chức năng cũng gây ra sự bất đối xứng trong thiết bị - đối với các máy chủ chuyên dụng, các máy tính mạnh hơn với lượng RAM lớn và bộ nhớ ngoài sẽ được sử dụng. Do đó, sự bất đối xứng về chức năng trong các mạng có máy chủ chuyên dụng đi kèm với sự bất đối xứng của hệ điều hành (chuyên môn hóa hệ điều hành) và sự bất đối xứng về phần cứng (chuyên môn máy tính). Trong mạng ngang hàng, tất cả các máy tính đều có quyền truy cập như nhau vào tài nguyên của nhau. Mỗi người dùng có thể tùy ý khai báo bất kỳ tài nguyên nào trên máy tính của mình là được chia sẻ, sau đó những người dùng khác có thể khai thác nó. Trong các mạng như vậy, tất cả các máy tính đều được cài đặt cùng một hệ điều hành, hệ điều hành này cung cấp cho tất cả các máy tính trên mạng những khả năng tiềm tàng như nhau. Ví dụ, mạng ngang hàng có thể được xây dựng trên cơ sở LANtastic, Personal Ware, Windows for Workgroup, Windows NT Workstation OS. Trong mạng ngang hàng, sự bất cân xứng về chức năng cũng có thể phát sinh: một số người dùng không muốn chia sẻ tài nguyên của họ với người khác và trong trường hợp này, máy tính của họ hoạt động như một máy khách; tới các máy tính khác, có nghĩa là chúng là máy chủ khi người dùng cục bộ không phản đối việc sử dụng tài nguyên của anh ta và không loại trừ khả năng truy cập vào các máy tính khác, hệ điều hành được cài đặt trên máy tính của anh ta phải bao gồm cả phần máy chủ và máy khách. Không giống như các mạng có máy chủ chuyên dụng, trong mạng ngang hàng không có chuyên môn về hệ điều hành tùy thuộc vào trọng tâm chức năng chiếm ưu thế - máy khách hoặc máy chủ. Tất cả các biến thể được thực hiện bằng cách cấu hình cùng một phiên bản hệ điều hành. Mạng ngang hàng dễ tổ chức và vận hành hơn nhưng chúng được sử dụng chủ yếu để hợp nhất các nhóm nhỏ người dùng không có yêu cầu lớn về khối lượng thông tin được lưu trữ, tính bảo mật khỏi truy cập trái phép và tốc độ truy cập. Với yêu cầu ngày càng tăng đối với những đặc điểm này, mạng hai cấp sẽ phù hợp hơn, trong đó máy chủ giải quyết tốt hơn vấn đề phục vụ người dùng bằng tài nguyên của mình, vì thiết bị và hệ điều hành mạng của nó được thiết kế đặc biệt cho mục đích này. Hệ điều hành dành cho nhóm làm việc và HĐH dành cho mạng doanh nghiệp Hệ điều hành mạng có các thuộc tính khác nhau tùy thuộc vào việc chúng có dành cho mạng quy mô lớn hay không nhóm làm việc (bộ phận), cho mạng trường hoặc mạng doanh nghiệp. . Mạng phòng ban - được sử dụng bởi một nhóm nhỏ nhân viên để giải quyết các vấn đề chung. Mục đích chính của mạng bộ phận là chia sẻ các tài nguyên cục bộ như ứng dụng, dữ liệu, máy in laser và modem. Mạng cục bộ thường không được chia thành các mạng con. . Mạng trường - kết nối nhiều mạng của các phòng ban trong một tòa nhà hoặc trong cùng một khu vực doanh nghiệp. Các mạng này vẫn là mạng cục bộ, mặc dù chúng có thể bao phủ diện tích vài km vuông. Các dịch vụ của mạng như vậy bao gồm sự tương tác giữa các mạng phòng ban, truy cập cơ sở dữ liệu doanh nghiệp, truy cập máy chủ fax, modem tốc độ cao và máy in tốc độ cao. . Mạng doanh nghiệp (mạng công ty) - hợp nhất tất cả các máy tính thuộc mọi lãnh thổ của một doanh nghiệp riêng biệt. Chúng có thể bao phủ một thành phố, một khu vực hoặc thậm chí một lục địa. Các mạng này cung cấp cho người dùng quyền truy cập vào thông tin và ứng dụng nằm trong các nhóm làm việc, phòng ban, bộ phận và trụ sở công ty khác. Mục đích chính của hệ điều hành được sử dụng trong mạng toàn bộ phòng ban là tổ chức chia sẻ các tài nguyên như ứng dụng, dữ liệu, máy in laser và có thể cả modem tốc độ thấp. Thông thường, mạng phòng ban có một hoặc hai máy chủ tệp và không quá 30 người dùng. Nhiệm vụ quản lý ở cấp bộ phận tương đối đơn giản. Nhiệm vụ của quản trị viên bao gồm thêm người dùng mới, khắc phục các lỗi đơn giản, cài đặt các nút mới và cài đặt các phiên bản phần mềm mới. Hệ điều hành của mạng phòng ban rất phát triển và đa dạng, bản thân mạng phòng ban cũng vậy, đã được sử dụng từ lâu và hoạt động khá tốt. Mạng như vậy thường sử dụng một hoặc nhiều nhất là hai hệ điều hành mạng. Thông thường, đây là mạng có máy chủ NetWare 3.x hoặc Windows NT chuyên dụng hoặc mạng ngang hàng như mạng Windows for Workgroups. Người dùng và quản trị viên mạng của các phòng ban sớm nhận ra rằng họ có thể nâng cao hiệu quả bằng cách truy cập thông tin từ các phòng ban khác trong doanh nghiệp của mình. Nếu nhân viên bán hàng có thể truy cập các tính năng cụ thể của sản phẩm và đưa chúng vào bản trình bày thì thông tin sẽ cập nhật hơn và có tác động lớn hơn đến người mua. Nếu bộ phận tiếp thị có thể truy cập vào các đặc điểm của sản phẩm vẫn đang được bộ phận kỹ thuật phát triển thì bộ phận đó có thể nhanh chóng chuẩn bị tài liệu tiếp thị ngay sau khi quá trình phát triển hoàn tất. Vì vậy, bước tiếp theo trong quá trình phát triển mạng là kết hợp mạng cục bộ của một số phòng ban thành một mạng duy nhất của một tòa nhà hoặc một nhóm tòa nhà. Những mạng như vậy được gọi là mạng campus. Mạng trường có thể kéo dài vài km nhưng không yêu cầu kết nối diện rộng. Hệ điều hành chạy trên mạng của trường phải cung cấp cho nhân viên ở một số phòng ban quyền truy cập vào một số tệp và tài nguyên trên mạng của các phòng ban khác. Các dịch vụ được cung cấp bởi hệ điều hành mạng của trường vượt xa việc chia sẻ tệp và máy in đơn giản và thường cung cấp quyền truy cập vào các loại máy chủ khác, chẳng hạn như máy chủ fax và máy chủ modem tốc độ cao. Dịch vụ quan trọng Những hệ điều hành thuộc lớp này cung cấp khả năng truy cập vào cơ sở dữ liệu của công ty, bất kể chúng nằm trên máy chủ cơ sở dữ liệu hay trên máy tính mini. Vấn đề tích hợp bắt đầu ở cấp độ mạng trường. Nhìn chung, các bộ môn đã lựa chọn loại máy tính, thiết bị mạng, hệ điều hành mạng. Ví dụ: bộ phận kỹ thuật có thể sử dụng hệ điều hành UNIX và thiết bị mạng Ethernet, bộ phận bán hàng có thể sử dụng môi trường vận hành DOS/Novell và thiết bị Token Ring. Rất thường xuyên, mạng của trường kết nối các hệ thống máy tính khác nhau, trong khi mạng của các phòng ban sử dụng các máy tính tương tự. Mạng công ty kết nối mạng của tất cả các phòng ban trong doanh nghiệp, thường nằm ở những khoảng cách đáng kể. Mạng công ty sử dụng liên kết WAN để kết nối mạng cục bộ hoặc máy tính cá nhân. Người dùng mạng doanh nghiệp yêu cầu tất cả các ứng dụng và dịch vụ có trên mạng của khoa và trường, cùng với một số ứng dụng và dịch vụ bổ sung, chẳng hạn như quyền truy cập vào các ứng dụng máy tính lớn và máy tính mini cũng như truyền thông toàn cầu. Khi hệ điều hành được thiết kế cho mạng cục bộ hoặc nhóm làm việc, trách nhiệm chính của nó là chia sẻ tệp và tài nguyên mạng khác (thường là máy in) giữa những người dùng được kết nối cục bộ. Cách tiếp cận này không được áp dụng ở cấp doanh nghiệp. Cùng với Dịch vụ cơ bản Liên quan đến việc phân tách tệp và máy in, hệ điều hành mạng đang được phát triển cho các tập đoàn phải hỗ trợ nhiều loại dịch vụ hơn, thường bao gồm dịch vụ thư, công cụ làm việc nhóm, hỗ trợ người dùng từ xa, dịch vụ fax, xử lý tin nhắn thoại, hội nghị video, v.v. Ngoài ra, nhiều phương pháp và cách tiếp cận hiện có để giải quyết các vấn đề truyền thống của mạng quy mô nhỏ hơn đã được chứng minh là không phù hợp với mạng doanh nghiệp. Các nhiệm vụ và vấn đề xuất hiện có tầm quan trọng thứ yếu hoặc hoàn toàn không xuất hiện trong mạng lưới các nhóm làm việc, các phòng ban và thậm chí cả các trường. Ví dụ: nhiệm vụ đơn giản nhất là duy trì hồ sơ người dùng cho một mạng nhỏ đã trở thành một vấn đề phức tạp đối với mạng quy mô doanh nghiệp. Và việc sử dụng kết nối toàn cầu yêu cầu hệ điều hành doanh nghiệp hỗ trợ các giao thức hoạt động tốt trên đường truyền tốc độ thấp và loại bỏ một số giao thức được sử dụng truyền thống (ví dụ: những giao thức tích cực sử dụng tin nhắn quảng bá). Nhiệm vụ khắc phục tính không đồng nhất có tầm quan trọng đặc biệt - nhiều cổng đã xuất hiện trên mạng, đảm bảo hoạt động phối hợp của nhiều hệ điều hành và ứng dụng hệ thống mạng khác nhau. Các tính năng sau đây cũng có thể được bao gồm trong các đặc điểm của hệ điều hành doanh nghiệp. Hỗ trợ ứng dụng. Mạng doanh nghiệp chạy các ứng dụng phức tạp đòi hỏi nhiều sức mạnh tính toán để chạy. Các ứng dụng như vậy được chia thành nhiều phần, ví dụ: trên một máy tính, phần ứng dụng liên quan đến việc thực thi các truy vấn tới cơ sở dữ liệu được thực thi, mặt khác - các truy vấn tới dịch vụ tệp và trên các máy khách - phần triển khai ứng dụng. logic xử lý dữ liệu và tổ chức giao diện người dùng. Phần điện toán của hệ thống phần mềm được chia sẻ bởi một công ty có thể quá lớn và quá tải đối với các máy trạm của khách hàng, vì vậy các ứng dụng sẽ chạy hiệu quả hơn nếu các phần phức tạp nhất về mặt tính toán của chúng được chuyển sang một máy tính mạnh mẽ được thiết kế đặc biệt cho mục đích này - máy chủ ứng dụng. Máy chủ ứng dụng phải dựa trên nền tảng phần cứng mạnh mẽ (hệ thống đa bộ xử lý, thường dựa trên bộ xử lý RISC, kiến ​​trúc cụm chuyên dụng). Hệ điều hành máy chủ ứng dụng phải cung cấp hiệu suất tính toán cao và do đó hỗ trợ xử lý đa luồng, đa nhiệm ưu tiên, đa xử lý, bộ nhớ ảo và các môi trường ứng dụng phổ biến nhất (UNIX, Windows, MS-DOS, OS/2). Về vấn đề này, hệ điều hành mạng NetWare khó có thể được phân loại là sản phẩm của công ty vì nó thiếu hầu hết tất cả các yêu cầu đối với một máy chủ ứng dụng. Đồng thời, sự hỗ trợ tốt cho các ứng dụng phổ thông trong Windows NT thực sự cho phép nó khẳng định một vị trí trong thế giới các sản phẩm dành cho doanh nghiệp. Bàn trợ giúp. Hệ điều hành doanh nghiệp phải có khả năng lưu trữ thông tin về tất cả người dùng và tài nguyên theo cách có thể được quản lý từ một điểm trung tâm. Giống như một tổ chức lớn, mạng công ty cần lưu trữ tập trung thông tin cơ bản đầy đủ nhất có thể về chính nó (từ dữ liệu về người dùng, máy chủ, máy trạm đến dữ liệu về hệ thống cáp). Việc tổ chức thông tin này dưới dạng cơ sở dữ liệu là điều đương nhiên. Dữ liệu từ cơ sở dữ liệu này có thể được yêu cầu bởi nhiều ứng dụng hệ thống mạng, chủ yếu là các hệ thống quản lý và điều hành. Ngoài ra, cơ sở dữ liệu như vậy còn hữu ích cho việc tổ chức e-mail, hệ thống làm việc nhóm, dịch vụ bảo mật, dịch vụ kiểm kê phần cứng và phần mềm mạng cũng như cho hầu hết mọi ứng dụng kinh doanh lớn. Cơ sở dữ liệu lưu trữ thông tin tham khảo cung cấp nhiều khả năng giống nhau và đặt ra nhiều vấn đề giống như bất kỳ cơ sở dữ liệu lớn nào khác. Nó cho phép bạn thực hiện nhiều hoạt động tìm kiếm, sắp xếp, sửa đổi, v.v., điều này giúp cuộc sống của cả quản trị viên và người dùng trở nên dễ dàng hơn rất nhiều. Nhưng những tiện ích này phải trả giá bằng việc giải quyết các vấn đề về phân phối, sao chép và đồng bộ hóa. Lý tưởng nhất là thông tin tham chiếu mạng phải được triển khai dưới dạng một cơ sở dữ liệu duy nhất chứ không phải là một tập hợp cơ sở dữ liệu chuyên lưu trữ thông tin thuộc loại này hay loại khác, như trường hợp thường thấy trong các hệ điều hành thực. Ví dụ: Windows NT có ít nhất năm loại cơ sở dữ liệu trợ giúp khác nhau. Thư mục tên miền chính (Dịch vụ thư mục tên miền NT) lưu trữ thông tin về người dùng, được sử dụng để tổ chức đăng nhập hợp lý vào mạng. Dữ liệu về cùng những người dùng đó cũng có thể được chứa trong một thư mục khác được Microsoft Mail sử dụng. Ba cơ sở dữ liệu nữa hỗ trợ độ phân giải địa chỉ cấp thấp: WINS - khớp tên Netbios với địa chỉ IP, thư mục DNS - máy chủ tên miền - rất hữu ích khi kết nối mạng NT với Internet và cuối cùng, thư mục giao thức DHCP được sử dụng để tự động gán địa chỉ IP máy tính mạng. Gần lý tưởng hơn là các dịch vụ thư mục được cung cấp bởi Banyan (Streettalk III) và Novell (NetWare Directory Services), cung cấp một thư mục duy nhất cho tất cả các ứng dụng mạng. Sự hiện diện của một bộ phận trợ giúp duy nhất cho hệ điều hành mạng là một trong những dấu hiệu quan trọng nhất về đặc điểm công ty của nó. Sự an toàn. Các vấn đề bảo mật dữ liệu có tầm quan trọng đặc biệt đối với hệ điều hành của mạng công ty. Một mặt, trong một mạng quy mô lớn, về mặt khách quan, có nhiều cơ hội truy cập trái phép hơn - do sự phân cấp dữ liệu và sự phân bổ rộng rãi các điểm truy cập “hợp pháp”, do số lượng lớn người dùng khó có thể tin cậy được. thiết lập và cũng do số lượng lớn các điểm có thể kết nối trái phép vào mạng. Mặt khác, các ứng dụng kinh doanh của doanh nghiệp hoạt động với dữ liệu quan trọng đối với sự thành công của toàn tập đoàn. Và để bảo vệ những dữ liệu đó trong mạng công ty, cùng với nhiều phần cứng khác nhau, toàn bộ phạm vi công cụ bảo vệ do hệ điều hành cung cấp sẽ được sử dụng: quyền truy cập có chọn lọc hoặc bắt buộc, quy trình xác thực người dùng phức tạp, mã hóa phần mềm. | | Quản lý tài nguyên cục bộ Chức năng quan trọng nhất của hệ điều hành là tổ chức sử dụng hợp lý toàn bộ tài nguyên phần cứng và phần mềm của hệ thống. Tài nguyên cơ bản có thể bao gồm: bộ xử lý, bộ nhớ, thiết bị bên ngoài, dữ liệu và chương trình. Có cùng tài nguyên nhưng được quản lý bởi các hệ điều hành khác nhau, một hệ thống máy tính có thể hoạt động với mức độ hiệu quả khác nhau. Do đó, kiến ​​thức về các cơ chế bên trong của hệ điều hành cho phép chúng ta gián tiếp đánh giá khả năng và đặc điểm hoạt động của nó. | | Quản lý quy trình Phần quan trọng nhất của hệ điều hành, ảnh hưởng trực tiếp đến hoạt động của máy tính, là hệ thống con quản lý quy trình. Một tiến trình (hay nói cách khác là một tác vụ) là một sự trừu tượng hóa mô tả một chương trình đang chạy. Đối với hệ điều hành, một tiến trình đại diện cho một đơn vị công việc, một yêu cầu sử dụng tài nguyên hệ thống . Hệ thống con quản lý quy trình lên lịch thực hiện các quy trình, nghĩa là nó phân phối thời gian xử lý giữa một số quy trình tồn tại đồng thời trong hệ thống và cũng xử lý việc tạo và hủy các quy trình, cung cấp cho các quy trình các tài nguyên hệ thống cần thiết và hỗ trợ tương tác giữa các quy trình. . Trạng thái của các tiến trình Trong hệ thống đa nhiệm (đa tiến trình), một tiến trình có thể ở một trong ba trạng thái chính: THỰC HIỆN - trạng thái hoạt động của tiến trình, trong đó tiến trình có tất cả các tài nguyên cần thiết và được bộ xử lý trực tiếp thực thi; WAITING - trạng thái thụ động của một tiến trình, tiến trình bị chặn, nó không thể được thực thi vì những lý do nội tại của chính nó, nó đang chờ một sự kiện nào đó xảy ra, ví dụ như hoàn thành một thao tác I/O, nhận tin nhắn từ một tiến trình khác quá trình hoặc giải phóng một số tài nguyên mà nó cần; READY cũng là trạng thái thụ động của quy trình, nhưng trong trường hợp này, quy trình bị chặn do các hoàn cảnh bên ngoài nó: quy trình có tất cả các tài nguyên cần thiết cho nó, nó sẵn sàng thực thi nhưng bộ xử lý đang bận thực thi một quy trình khác. Trong vòng đời, mỗi quy trình chuyển từ trạng thái này sang trạng thái khác theo thuật toán lập lịch quy trình được triển khai trong một hệ điều hành nhất định. Biểu đồ trạng thái quy trình điển hình được hiển thị trong Hình 2.1. Trong hệ thống một bộ xử lý, chỉ có thể có một quy trình ở trạng thái CHẠY và ở mỗi trạng thái CHỜ và SẴN SÀNG có thể có một số quy trình tương ứng; Vòng đời của một tiến trình bắt đầu với trạng thái SẴN SÀNG, khi tiến trình đó sẵn sàng thực thi và đang chờ đến lượt của nó. Khi được kích hoạt, quy trình sẽ chuyển sang trạng thái CHẠY và duy trì ở trạng thái đó cho đến khi nó tự giải phóng bộ xử lý, chuyển sang trạng thái CHỜ cho một số sự kiện hoặc bị buộc “đẩy ra” khỏi bộ xử lý, chẳng hạn như do cạn kiệt bộ xử lý. lượng thời gian của bộ xử lý được phân bổ cho quá trình này. Trong trường hợp sau, quy trình trở về trạng thái SẴN SÀNG. Quá trình chuyển sang trạng thái này từ trạng thái WAITING sau khi sự kiện dự kiến ​​xảy ra. Cơm. 2.1. Biểu đồ trạng thái quy trình trong môi trường đa nhiệm Bối cảnh và bộ mô tả quy trình Trong suốt vòng đời của một quy trình, việc thực thi nó có thể bị gián đoạn và tiếp tục nhiều lần. Để tiếp tục thực hiện một tiến trình, cần phải khôi phục trạng thái môi trường hoạt động của nó. Trạng thái của môi trường vận hành được hiển thị bằng trạng thái của các thanh ghi và bộ đếm chương trình, chế độ vận hành của bộ xử lý, con trỏ để mở tệp, thông tin về các thao tác I/O chưa hoàn thành, mã lỗi được thực hiện bởi quá trình này cuộc gọi hệ thống vân vân. Thông tin này được gọi là bối cảnh quá trình. Ngoài ra, hệ điều hành yêu cầu thông tin bổ sung để thực hiện lập lịch quy trình: mã định danh quy trình, trạng thái quy trình, dữ liệu về mức độ đặc quyền của quy trình, vị trí của đoạn mã và các thông tin khác. Trong một số hệ điều hành (ví dụ: UNIX), loại thông tin này được HĐH sử dụng để lên lịch các quy trình, được gọi là xử lý quy trình. Bộ mô tả quy trình, so với ngữ cảnh, chứa nhiều thông tin vận hành hơn mà hệ thống con lập kế hoạch quy trình có thể dễ dàng truy cập. Bối cảnh quy trình chứa ít thông tin liên quan hơn và chỉ được hệ điều hành sử dụng sau khi đưa ra quyết định tiếp tục quy trình bị gián đoạn. Hàng đợi quy trình là các điều khiển cho các quy trình riêng lẻ được sắp xếp thành danh sách. Do đó, mỗi bộ mô tả, trong số những thứ khác, chứa ít nhất một con trỏ tới một bộ mô tả khác liền kề với nó trong hàng đợi. Việc tổ chức hàng đợi này giúp dễ dàng sắp xếp lại chúng, bao gồm và loại trừ các quy trình cũng như chuyển các quy trình từ trạng thái này sang trạng thái khác. Mã chương trình sẽ chỉ bắt đầu thực thi khi một tiến trình được hệ điều hành tạo ra cho nó. Tạo một quy trình có nghĩa là: 1. tạo các cấu trúc thông tin mô tả một quy trình nhất định, tức là bộ mô tả và bối cảnh của nó; 2. đưa bộ mô tả quy trình mới vào hàng đợi các quy trình sẵn sàng; 3. tải đoạn mã quy trình vào RAM hoặc vào vùng trao đổi. Các thuật toán lập kế hoạch quy trình Lập kế hoạch quy trình bao gồm việc giải quyết các vấn đề sau: 1. xác định thời điểm thay đổi quy trình đang chạy; 2. chọn một quy trình để thực thi từ hàng đợi các quy trình sẵn sàng; 3. chuyển đổi bối cảnh của các quy trình “cũ” và “mới”. Hai vấn đề đầu tiên được giải quyết bằng phần mềm, còn vấn đề cuối cùng phần lớn được giải quyết bằng phần cứng (xem phần 2.3. “Phần cứng hỗ trợ quản lý bộ nhớ và môi trường đa nhiệm trong các bộ vi xử lý Intel 80386, 80486 và Pentium”). Có nhiều thuật toán lập kế hoạch quy trình khác nhau giải quyết các vấn đề trên theo những cách khác nhau, theo đuổi các mục tiêu khác nhau và cung cấp chất lượng đa chương trình khác nhau. Trong số bộ thuật toán này, chúng ta hãy xem xét kỹ hơn hai nhóm thuật toán phổ biến nhất: thuật toán dựa trên lượng tử hóa và thuật toán dựa trên mức độ ưu tiên. Theo các thuật toán dựa trên lượng tử hóa, một sự thay đổi trong quy trình hoạt động sẽ xảy ra nếu: . quá trình kết thúc và rời khỏi hệ thống. Một lỗi đã xảy ra, . Quá trình đã vào trạng thái WAITING. Thời gian CPU được phân bổ cho quá trình này đã hết. Một quy trình đã cạn kiệt lượng tử sẽ được chuyển sang trạng thái SẴN SÀNG và chờ một lượng thời gian bộ xử lý mới được cung cấp cho nó, đồng thời một quy trình mới được chọn từ hàng đợi các quy trình sẵn sàng để thực thi theo một quy tắc nhất định. Bằng cách này, không có quá trình nào chiếm CPU lâu, đó là lý do tại sao lượng tử hóa được sử dụng rộng rãi trong các hệ thống chia sẻ thời gian. Biểu đồ trạng thái quy trình được hiển thị trong Hình 2.1 tương ứng với thuật toán lập lịch dựa trên lượng tử hóa. Lượng tử được phân bổ cho các tiến trình có thể giống nhau đối với tất cả các tiến trình hoặc khác nhau. Lượng tử được phân bổ cho một quy trình có thể có giá trị cố định hoặc thay đổi ở các giai đoạn khác nhau trong vòng đời của quy trình. Các quy trình chưa sử dụng hết lượng tử được phân bổ cho chúng (ví dụ: do chuyển hướng I/O) có thể nhận hoặc không nhận được bồi thường dưới dạng đặc quyền trong lần bảo trì tiếp theo. Hàng đợi của các quy trình sẵn sàng có thể được tổ chức theo nhiều cách khác nhau: theo chu kỳ, theo quy tắc “vào trước, ra trước” (FIFO) hoặc theo quy tắc “vào sau, ra trước” (LIFO). Một nhóm thuật toán khác sử dụng khái niệm "ưu tiên" của một quy trình. Mức độ ưu tiên là một con số đặc trưng cho mức độ đặc quyền của một quy trình khi sử dụng tài nguyên máy tính, đặc biệt là thời gian xử lý: mức độ ưu tiên càng cao thì đặc quyền càng cao. Mức độ ưu tiên có thể được biểu thị dưới dạng số nguyên hoặc phân số, giá trị dương hoặc âm. Đặc quyền của một quy trình càng cao thì thời gian chờ đợi của nó càng ít. Mức độ ưu tiên có thể được người quản trị hệ thống trực tiếp chỉ định tùy theo mức độ quan trọng của công việc hoặc mức phí phải trả hoặc do chính hệ điều hành tính toán theo các quy tắc nhất định, nó có thể được giữ cố định trong suốt vòng đời của quy trình hoặc thay đổi theo thời gian theo quy định; luật nào đó. Trong trường hợp sau, mức độ ưu tiên được gọi là động. Có hai loại thuật toán ưu tiên: thuật toán sử dụng mức độ ưu tiên tương đối và thuật toán sử dụng mức độ ưu tiên tuyệt đối. Trong cả hai trường hợp, việc lựa chọn quy trình để thực thi từ hàng đợi sẵn sàng được thực hiện theo cùng một cách: quy trình có mức ưu tiên cao nhất được chọn. Vấn đề xác định thời điểm thay đổi của quá trình hoạt động được giải quyết theo nhiều cách khác nhau. Trong các hệ thống có mức độ ưu tiên tương đối, quy trình hoạt động sẽ chạy cho đến khi nó rời khỏi bộ xử lý và chuyển sang trạng thái STANDBY (xảy ra lỗi hoặc quy trình kết thúc). Trong các hệ thống có mức độ ưu tiên tuyệt đối, việc thực thi quy trình đang hoạt động bị gián đoạn theo một điều kiện nữa: nếu một quy trình xuất hiện trong hàng đợi các quy trình sẵn sàng có mức ưu tiên cao hơn mức ưu tiên của quy trình đang hoạt động. Trong trường hợp này, quá trình bị gián đoạn sẽ chuyển sang trạng thái sẵn sàng. Hình 2.2 hiển thị biểu đồ trạng thái quy trình cho các thuật toán có mức độ ưu tiên tương đối (a) và tuyệt đối (b). Trong nhiều hệ điều hành, các thuật toán lập lịch được xây dựng bằng cách sử dụng cả lượng tử hóa và mức độ ưu tiên. Ví dụ: lập lịch dựa trên lượng tử hóa, nhưng giá trị lượng tử và/hoặc thứ tự trong đó một quy trình được chọn từ hàng đợi các quy trình sẵn sàng được xác định bởi mức độ ưu tiên của các quy trình. Cơm. 2.2. Biểu đồ trạng thái của các quy trình trong hệ thống (a) với mức độ ưu tiên tương đối; (b) với mức độ ưu tiên tuyệt đối Thuật toán lập lịch ưu tiên và không ưu tiên Có hai loại thủ tục lập lịch trình quy trình chính - ưu tiên và không ưu tiên. Đa nhiệm không ưu tiên - đa nhiệm không ưu tiên là một phương pháp lập lịch trình cho các tiến trình trong đó tiến trình đang hoạt động chạy cho đến khi nó tự mình trao quyền kiểm soát cho bộ lập lịch của hệ điều hành để nó chọn một tiến trình khác sẵn sàng thực thi từ hàng đợi. Đa nhiệm ưu tiên là một phương pháp trong đó quyết định chuyển bộ xử lý từ thực thi một tiến trình này sang thực thi một tiến trình khác được thực hiện bởi bộ lập lịch của hệ điều hành chứ không phải bởi chính tác vụ đang hoạt động. Các khái niệm về quyền ưu tiên và không quyền ưu tiên đôi khi được đồng nhất với các khái niệm về nguyên tắc ưu tiên và không ưu tiên, điều này hoàn toàn không chính xác, cũng như với các khái niệm về mức độ ưu tiên tuyệt đối và tương đối, một phần không chính xác. Đa nhiệm ưu tiên và không ưu tiên là những khái niệm rộng hơn các loại ưu tiên. Ưu tiên nhiệm vụ có thể được sử dụng hoặc không trong cả hai phương pháp lập kế hoạch ưu tiên và không ưu tiên. Vì vậy, trong trường hợp sử dụng mức độ ưu tiên, nguyên tắc ưu tiên tương đối có thể được phân loại thành loại hệ thống có đa nhiệm không ưu tiên và nguyên tắc ưu tiên tuyệt đối - thuộc loại hệ thống có đa nhiệm ưu tiên. Và nguyên tắc lập kế hoạch không ưu tiên, dựa trên việc phân bổ các khoảng thời gian bằng nhau cho tất cả các nhiệm vụ, đề cập đến các thuật toán ưu tiên. Sự khác biệt chính giữa các tùy chọn đa nhiệm có quyền ưu tiên và không có quyền ưu tiên là mức độ tập trung của cơ chế lập lịch tác vụ. Với đa nhiệm ưu tiên, cơ chế lập lịch tác vụ hoàn toàn nằm trong hệ điều hành và lập trình viên viết ứng dụng của mình mà không cần lo lắng liệu nó có được thực thi song song với các tác vụ khác hay không. Trong trường hợp này, hệ điều hành thực hiện các chức năng sau: xác định thời điểm một tác vụ đang hoạt động được loại bỏ khỏi quá trình thực thi, ghi nhớ ngữ cảnh của nó, chọn tác vụ tiếp theo từ hàng đợi các tác vụ sẵn sàng và khởi chạy nó để thực thi, tải ngữ cảnh của nó. Với đa nhiệm không ưu tiên, cơ chế lập lịch được phân bổ giữa hệ thống và chương trình ứng dụng. Chương trình ứng dụng, sau khi nhận được quyền điều khiển từ hệ điều hành, sẽ tự xác định thời điểm hoàn thành lần lặp tiếp theo của nó và chuyển quyền điều khiển cho HĐH bằng cách sử dụng một số lệnh gọi hệ thống, đồng thời HĐH tạo hàng đợi các tác vụ và chọn tác vụ tiếp theo để hoàn thành theo một số thuật toán (ví dụ: có tính đến mức độ ưu tiên). Cơ chế này tạo ra vấn đề cho cả người dùng và nhà phát triển. Đối với người dùng, điều này có nghĩa là quyền kiểm soát hệ thống bị mất trong một khoảng thời gian tùy ý, được xác định bởi ứng dụng (không phải người dùng). Nếu một ứng dụng dành quá nhiều thời gian để thực hiện một số công việc, chẳng hạn như định dạng ổ đĩa, người dùng không thể chuyển từ tác vụ đó sang tác vụ khác, chẳng hạn như trình soạn thảo văn bản, trong khi quá trình định dạng vẫn tiếp tục ở chế độ nền. Tình trạng này là điều không mong muốn vì người dùng thường không muốn phải đợi lâu để máy hoàn thành nhiệm vụ. Do đó, các nhà phát triển ứng dụng cho môi trường vận hành không được ưu tiên, đảm nhận trách nhiệm của người lập lịch, phải tạo các ứng dụng để chúng thực hiện nhiệm vụ của mình theo từng phần nhỏ. Ví dụ: một chương trình định dạng có thể định dạng một rãnh của đĩa mềm và trả lại quyền điều khiển cho hệ thống. Sau khi hoàn thành các tác vụ khác, hệ thống sẽ trả lại quyền điều khiển cho bộ định dạng để định dạng bản nhạc tiếp theo. Phương pháp phân chia thời gian giữa các nhiệm vụ này có hiệu quả nhưng nó làm phức tạp đáng kể việc phát triển chương trình và đặt ra yêu cầu ngày càng cao về trình độ của người lập trình viên. Người lập trình phải đảm bảo rằng chương trình của mình "thân thiện" với các chương trình khác chạy đồng thời với nó, trao quyền kiểm soát chúng khá thường xuyên. Một biểu hiện cực đoan của tính "không thân thiện" của một ứng dụng là việc ứng dụng bị treo, dẫn đến sự cố hệ thống chung. Trong các hệ thống có đa nhiệm ưu tiên, những tình huống như vậy thường bị loại trừ vì cơ chế lập kế hoạch trung tâm sẽ loại bỏ tác vụ bị kẹt khỏi quá trình thực thi. Tuy nhiên, việc phân phối các chức năng lập lịch giữa hệ thống và ứng dụng không phải lúc nào cũng là nhược điểm và trong một số điều kiện nhất định có thể là một lợi thế vì nó cho phép nhà phát triển ứng dụng thiết kế thuật toán lập lịch phù hợp nhất cho một nhóm tác vụ cố định nhất định. Vì chính nhà phát triển xác định trong chương trình thời điểm quyền kiểm soát được trả lại, điều này giúp loại bỏ sự gián đoạn bất hợp lý của chương trình tại những thời điểm “bất tiện”. Ngoài ra, các vấn đề về chia sẻ dữ liệu có thể được giải quyết dễ dàng: tác vụ chỉ sử dụng nó trong mỗi lần lặp và tự tin rằng không ai khác sẽ thay đổi dữ liệu này trong giai đoạn này. Một lợi thế đáng kể của hệ thống không được ưu tiên là tốc độ chuyển đổi từ nhiệm vụ này sang nhiệm vụ khác nhanh hơn. Ví dụ sử dụng hiệu quảđa nhiệm không ưu tiên là máy chủ tệp NetWare, phần lớn là nhờ điều này, đã đạt được tốc độ thực thi các hoạt động tệp cao. Ít thành công hơn là việc sử dụng đa nhiệm không ưu tiên trong môi trường điều hành Windows 3.x. Tuy nhiên, hầu hết tất cả các hệ điều hành hiện đại đều tập trung vào việc thực thi ứng dụng hiệu suất cao (UNIX, Windows NT, OS/2, VAX/VMS) đều thực hiện đa nhiệm ưu tiên. TRONG Gần đâyđến lượt các hệ điều hành dành cho máy tính để bàn, chẳng hạn như OS/2 Warp và Windows 95. Có lẽ liên quan đến điều này, đa nhiệm ưu tiên thường được gọi là đa nhiệm thực sự. Đồng bộ hóa và giao tiếp quy trình Vấn đề đồng bộ hóa Các quy trình thường cần giao tiếp với nhau, ví dụ: một quy trình có thể chuyển dữ liệu sang quy trình khác hoặc nhiều quy trình có thể xử lý dữ liệu từ một tệp được chia sẻ. Trong tất cả các trường hợp này, vấn đề đồng bộ hóa quy trình phát sinh, vấn đề này có thể được giải quyết bằng cách tạm dừng và kích hoạt các quy trình, tổ chức hàng đợi, chặn và giải phóng tài nguyên. Cơm. 2.3. Một ví dụ về nhu cầu đồng bộ hóa Việc bỏ qua các vấn đề về đồng bộ hóa các tiến trình đang chạy ở chế độ đa chương trình có thể dẫn đến hoạt động không chính xác của chúng hoặc thậm chí là sự cố hệ thống. Ví dụ, hãy xem xét (Hình 2.3), một chương trình in tập tin (máy chủ in). Chương trình này lần lượt in tất cả các tệp, tên của chúng được sắp xếp tuần tự, theo thứ tự nhận, được các chương trình khác ghi vào một tệp công khai đặc biệt về “đơn đặt hàng”. Biến đặc biệt NEXT, cũng có sẵn cho tất cả các quy trình máy khách, chứa số vị trí trống đầu tiên để ghi tên tệp của tệp “đơn đặt hàng”. Các tiến trình máy khách đọc biến này, ghi tên tệp của chúng vào vị trí thích hợp trong tệp “đơn đặt hàng” và tăng giá trị TIẾP THEO thêm một. Giả sử rằng tại một thời điểm nào đó, quá trình R quyết định in tệp của nó, vì vậy nó đọc giá trị của biến NEXT, giá trị của biến này, để xác định, được giả định bằng 4. Quá trình ghi nhớ giá trị này, nhưng không có thời gian để đặt tên tệp vì quá trình thực thi của nó bị gián đoạn (ví dụ: do cạn kiệt lượng tử). Quá trình tiếp theo S, muốn in một tệp, đọc cùng một giá trị của biến NEXT, đặt tên tệp của nó ở vị trí thứ tư và tăng giá trị của biến lên một. Khi điều khiển được chuyển sang tiến trình R một lần nữa, nó sẽ tiếp tục thực hiện đầy đủ theo giá trị của vị trí trống hiện tại nhận được trong lần lặp trước, cũng sẽ ghi tên tệp ở vị trí 4, lên trên tên tệp của tiến trình S. Do đó, tiến trình S sẽ không bao giờ thấy tệp của nó được in. Sự phức tạp của vấn đề đồng bộ hóa nằm ở tính bất thường của các tình huống phát sinh: trong ví dụ trước, có thể hình dung một diễn biến khác của các sự kiện: các tệp của một số quy trình bị mất hoặc ngược lại, không một tệp nào bị mất. TRONG trong trường hợp này mọi thứ được xác định bởi tốc độ chung của các quá trình và thời điểm chúng bị gián đoạn. Vì vậy, việc gỡ lỗi các quá trình tương tác là một thách thức. Các tình huống như khi hai hoặc nhiều quy trình xử lý dữ liệu được chia sẻ và kết quả cuối cùng phụ thuộc vào tỷ lệ tốc độ của các quy trình, được gọi là các cuộc đua. Phần quan trọng Một khái niệm quan trọng về đồng bộ hóa quy trình là khái niệm về “phần quan trọng” của chương trình. Phần quan trọng là một phần của chương trình trong đó dữ liệu được chia sẻ được truy cập. Để loại bỏ ảnh hưởng của điều kiện chủng tộc đối với tài nguyên, cần đảm bảo rằng tại bất kỳ thời điểm nào cũng có nhiều nhất một quy trình trong phần quan trọng được liên kết với tài nguyên đó. Kỹ thuật này được gọi là loại trừ lẫn nhau. Cách đơn giản nhất để thực thi loại trừ lẫn nhau là cho phép tiến trình trong phần quan trọng vô hiệu hóa tất cả các ngắt. Tuy nhiên, phương pháp này không phù hợp vì rất nguy hiểm khi tin tưởng vào quy trình người dùng để kiểm soát hệ thống; nó có thể chiếm bộ xử lý trong một thời gian dài và nếu một quá trình gặp sự cố ở một khu vực quan trọng, toàn bộ hệ thống sẽ gặp sự cố vì các ngắt sẽ không bao giờ được kích hoạt. Một cách khác là sử dụng các biến chặn. Mỗi tài nguyên được chia sẻ có một biến nhị phân được liên kết với nó, giá trị này nhận giá trị 1 nếu tài nguyên đó trống (nghĩa là hiện tại không có quy trình nào nằm trong phần quan trọng được liên kết với quy trình đó) và giá trị 0 nếu tài nguyên đang bận. Hình 2.4 cho thấy một đoạn của thuật toán quy trình sử dụng biến chặn F(D) để thực hiện loại trừ lẫn nhau quyền truy cập vào tài nguyên dùng chung D. Trước khi vào phần quan trọng, quy trình sẽ kiểm tra xem tài nguyên D có rảnh hay không. Nếu nó bận thì việc kiểm tra sẽ được lặp lại theo chu kỳ; nếu nó rảnh thì giá trị của biến F(D) được đặt thành 0 và quy trình sẽ được đặt thành 0. đi vào phần quan trọng. Sau khi quá trình hoàn thành tất cả các hành động với tài nguyên dùng chung D, giá trị của biến F(D) lại được đặt thành 1. Hình. 2.4. Triển khai các phần quan trọng bằng cách sử dụng các biến chặn Nếu tất cả các quy trình được viết bằng cách sử dụng các quy ước được mô tả ở trên thì việc loại trừ lẫn nhau sẽ được đảm bảo. Cần lưu ý rằng thao tác kiểm tra và đặt biến chặn phải không thể chia cắt được. Hãy giải thích điều này. Giả sử, do kiểm tra một biến, quá trình xác định rằng tài nguyên còn trống, nhưng ngay sau đó, chưa kịp đặt biến về 0 thì nó đã bị gián đoạn. Trong khi nó bị tạm dừng, một quy trình khác đã chiếm tài nguyên, đi vào phần quan trọng của nó nhưng cũng bị gián đoạn mà không hoàn thành công việc với tài nguyên được chia sẻ. Khi quyền điều khiển được trả lại cho quy trình đầu tiên, nó coi như đã hết tài nguyên, đặt dấu hiệu bận và bắt đầu thực thi phần quan trọng của nó. Như vậy, nguyên tắc loại trừ lẫn nhau đã bị vi phạm, có thể dẫn đến những hậu quả không mong muốn. Để tránh những tình huống như vậy, bạn nên có một lệnh “kiểm tra-cài đặt” duy nhất trong hệ thống lệnh của máy hoặc triển khai bằng hệ thống các phương tiện nguyên thủy của phần mềm tương ứng sẽ vô hiệu hóa các ngắt trong toàn bộ hoạt động kiểm tra và cài đặt. Việc triển khai các phần quan trọng bằng cách sử dụng các biến chặn có một nhược điểm đáng kể: trong thời gian một quy trình nằm trong phần quan trọng, một quy trình khác yêu cầu cùng tài nguyên sẽ thực hiện nhiệm vụ thông thường là thăm dò biến chặn, lãng phí thời gian của bộ xử lý. Để loại bỏ những tình huống như vậy, có thể sử dụng cái gọi là bộ máy sự kiện. Công cụ này có thể được sử dụng để giải quyết không chỉ các vấn đề loại trừ lẫn nhau mà còn các vấn đề đồng bộ hóa quy trình tổng quát hơn. Trong các hệ điều hành khác nhau, bộ máy sự kiện được triển khai theo cách riêng của nó, nhưng trong mọi trường hợp, các chức năng hệ thống có mục đích tương tự đều được sử dụng, mà chúng ta thường gọi là WAIT(x) và POST(x), trong đó x là mã định danh của sự kiện nào đó. Hình 2.5 cho thấy một đoạn của thuật toán quy trình sử dụng các hàm này. Nếu tài nguyên bận thì quy trình không thực hiện thăm dò theo chu kỳ mà gọi hàm hệ thống WAIT(D), ở đây D biểu thị sự kiện tài nguyên D được giải phóng. Hàm WAIT(D) đặt quy trình đang hoạt động vào WAITING. nêu rõ và ghi chú trong bộ mô tả của nó rằng quy trình đang chờ sự kiện D. Quy trình hiện đang sử dụng tài nguyên D, sau khi thoát khỏi phần quan trọng, sẽ thực thi chức năng hệ thống POST(D), do đó hệ điều hành quét hàng đợi các tiến trình đang chờ và đặt tiến trình đang chờ sự kiện D vào trạng thái SẴN SÀNG. Một phương tiện chung để đồng bộ hóa các quy trình đã được đề xuất bởi Dijkstra, người đã giới thiệu hai nguyên mẫu mới. Ở dạng trừu tượng, những nguyên hàm này, ký hiệu là P và V, hoạt động trên các biến số nguyên không âm được gọi là semaphores. Cho S là một đèn hiệu như vậy. Các phép toán được xác định như sau: V(S) : biến S tăng lên 1 bởi một tác động không chia được; tìm nạp, tăng và lưu trữ không thể bị gián đoạn và S không được các quy trình khác truy cập trong khi thao tác này đang diễn ra. P(S) : Giảm S đi 1 nếu có thể. Nếu S=0 thì không thể giảm S và duy trì trong vùng các giá trị nguyên không âm, trong trường hợp đó quá trình gọi thao tác P sẽ đợi cho đến khi việc giảm này trở thành khả thi. Kiểm tra, giảm thiểu thành công cũng là một công việc không thể chia cắt. Cơm. 2.5. Triển khai phần quan trọng bằng cách sử dụng các hàm hệ thống WAIT(D) và POST(D) Trong trường hợp đặc biệt khi semaphore S chỉ có thể nhận các giá trị 0 và 1, nó sẽ chuyển thành một biến chặn. Thao tác P có khả năng đưa quy trình đang thực thi nó vào trạng thái chờ, trong khi trong một số trường hợp, thao tác V có thể đánh thức một quy trình khác đã bị P tạm dừng (so sánh các thao tác này với các chức năng hệ thống WAIT và POST). Chúng ta hãy xem xét việc sử dụng các ẩn dụ bằng một ví dụ cổ điển về sự tương tác của hai tiến trình đang chạy ở chế độ đa chương trình, một trong số đó ghi dữ liệu vào vùng đệm và tiến trình kia đọc dữ liệu từ vùng đệm. Giả sử nhóm bộ đệm bao gồm N bộ đệm, mỗi bộ đệm có thể chứa một mục nhập. Quá trình ghi phải tạm dừng khi tất cả bộ đệm đầy và thức dậy khi có ít nhất một bộ đệm được giải phóng. Ngược lại, quá trình đọc bị tạm dừng khi tất cả bộ đệm trống và được kích hoạt khi có ít nhất một lần ghi xuất hiện. Hãy giới thiệu hai ẩn dụ: e - số lượng bộ đệm trống và f - số lượng bộ đệm được lấp đầy. Giả sử rằng việc ghi vào và đọc từ bộ đệm là những phần quan trọng (như trong ví dụ về máy chủ in ở đầu phần này). Chúng tôi cũng giới thiệu một semaphore nhị phân b, được sử dụng để cung cấp sự loại trừ lẫn nhau. Khi đó các tiến trình có thể được mô tả như sau: // Biến toàn cục #define N 256 int e = N, f = 0, b = 1; void Writer () ( while(1) ( prepareNextRecord(); /* chuẩn bị một bản ghi mới */ P(e); /* Giảm số lượng bộ đệm trống, nếu có */ /* nếu không, hãy đợi cho đến khi chúng trống * / P(b); /* Nhập phần quan trọng */ AddToBuffer(); /* Thêm mục mới vào bộ đệm */ V(b); /* Thoát khỏi phần quan trọng */ V(f); ) ) void Reader () ( while(1) ( P(f); /* Giảm số lượng bộ đệm bận, nếu có */ /* nếu không thì đợi cho đến khi chúng xuất hiện */ P(b); / * Nhập phần quan trọng */ GetFromBuffer(); /* Lấy bản ghi từ bộ đệm */ V(b); /* Thoát khỏi phần quan trọng */ V(e); /* Tăng số lượng bộ đệm trống */ ProcessRecord(); record */ ) ) Deadlocks Ví dụ trên sẽ giúp chúng ta minh họa một vấn đề đồng bộ hóa khác - deadlocks, còn gọi là deadlocks, clinches hay deadlocks. Nếu bạn sắp xếp lại các thao tác P(e) và P(b) trong chương trình “người viết”, thì trong một số trường hợp, hai quy trình này có thể chặn lẫn nhau. Quả thực, hãy để “người viết” là người đầu tiên bước vào phần phản biện và phát hiện ra rằng không có bộ đệm trống; nó sẽ bắt đầu chờ "người đọc" lấy bản ghi tiếp theo từ bộ đệm, nhưng "người đọc" sẽ không thể thực hiện việc này, vì để làm được điều này, cần phải vào phần quan trọng, lối vào bị chặn bởi quá trình “nhà văn”. Hãy xem một ví dụ khác về ngõ cụt. Để hai tiến trình chạy ở chế độ đa chương trình yêu cầu hai tài nguyên, ví dụ: máy in và đĩa, để hoàn thành công việc của chúng. Hình 2.6a thể hiện các đoạn của chương trình tương ứng. Và giả sử rằng sau khi quá trình A chiếm máy in (đặt biến chặn), nó bị gián đoạn. Quyền kiểm soát được trao cho quy trình B, quy trình này lần đầu tiên chiếm đĩa, nhưng bị chặn khi lệnh tiếp theo được thực thi, vì máy in đã bị quy trình A chiếm giữ. Quy trình A lại nhận được quyền kiểm soát, quy trình này, theo chương trình của nó, đã cố gắng thực hiện chiếm đĩa và bị chặn: đĩa đã được phân bổ cho quy trình B. Quy trình A và B có thể duy trì ở vị trí này bao lâu tùy thích. Tùy thuộc vào tỷ lệ tốc độ xử lý, chúng có thể sử dụng các tài nguyên được chia sẻ hoàn toàn độc lập (d) hoặc tạo thành hàng đợi cho các tài nguyên được chia sẻ (c) hoặc chặn lẫn nhau (b). Tình huống bế tắc phải được phân biệt với hàng đợi đơn giản, mặc dù cả hai đều xảy ra khi tài nguyên được chia sẻ và trông giống nhau: quá trình bị tạm dừng và chờ tài nguyên trở nên miễn phí. Tuy nhiên, hàng đợi là một hiện tượng bình thường, một dấu hiệu vốn có của việc sử dụng tài nguyên cao khi có yêu cầu đến ngẫu nhiên. Nó xảy ra khi tài nguyên hiện không có sẵn, nhưng sau một thời gian nó được giải phóng và quá trình tiếp tục thực hiện. Bế tắc, như tên gọi của nó, là một tình huống không thể giải quyết được. Cơm. 2.6. (a) các đoạn chương trình A và B, tách rời máy in và đĩa; (b) chặn lẫn nhau (c) xếp hàng vào đĩa dùng chung; (d) sử dụng tài nguyên độc lập Trong các ví dụ được xem xét, bế tắc được hình thành bởi hai quy trình, nhưng nhiều quy trình hơn có thể chặn lẫn nhau. Vấn đề bế tắc bao gồm các nhiệm vụ sau: . ngăn ngừa bế tắc, . nhận biết bế tắc, . khôi phục hệ thống sau khi bế tắc. Deadlock có thể được ngăn chặn ở giai đoạn viết chương trình, nghĩa là chương trình phải được viết theo cách sao cho deadlock không thể xảy ra dưới bất kỳ tỷ lệ nào về tốc độ chung của các tiến trình. Vì vậy, nếu trong ví dụ trước, quy trình A và quy trình B yêu cầu tài nguyên theo cùng một trình tự thì về nguyên tắc, bế tắc sẽ không thể xảy ra. Cách tiếp cận thứ hai để ngăn chặn bế tắc được gọi là động và liên quan đến việc sử dụng các quy tắc nhất định khi gán tài nguyên cho các quy trình, ví dụ: tài nguyên có thể được phân bổ theo một trình tự nhất định chung cho tất cả các quy trình. Trong một số trường hợp, khi bế tắc xảy ra giữa nhiều tiến trình sử dụng nhiều tài nguyên, việc nhận ra bế tắc là một nhiệm vụ không hề đơn giản. Có các phương pháp chính thức, được triển khai bằng phần mềm để nhận biết các bế tắc, dựa trên việc duy trì các bảng phân bổ tài nguyên và bảng truy vấn cho các tài nguyên bị chiếm dụng. Phân tích các bảng này cho phép bạn phát hiện các bế tắc. Nếu tình huống bế tắc xảy ra thì không cần thiết phải loại bỏ tất cả các tiến trình bị chặn khỏi quá trình thực thi. Bạn chỉ có thể xóa một phần trong số chúng, điều này giải phóng tài nguyên mà các quy trình khác mong đợi, bạn có thể trả lại một số quy trình về vùng trao đổi, bạn có thể “khôi phục” một số quy trình về cái gọi là điểm kiểm tra, nơi lưu trữ tất cả thông tin cần thiết để khôi phục Thực hiện chương trình s từ nơi này. Điểm kiểm trađược đặt trong chương trình ở những nơi mà sau đó bế tắc có thể xảy ra. Từ tất cả những điều trên, rõ ràng là các ẩn dụ phải được sử dụng hết sức cẩn thận, vì một lỗi nhỏ có thể dẫn đến việc tắt hệ thống. Để giúp việc viết chương trình chính xác trở nên dễ dàng hơn, một cơ sở đồng bộ hóa cấp cao được gọi là màn hình đã được đề xuất. Màn hình là một tập hợp các thủ tục, biến và cấu trúc dữ liệu. Các quy trình có thể gọi các thủ tục giám sát nhưng không có quyền truy cập vào dữ liệu nội bộ của màn hình. Màn hình có một thuộc tính quan trọng giúp chúng hữu ích trong việc đạt được sự loại trừ lẫn nhau: chỉ một quy trình có thể hoạt động trên màn hình. Trình biên dịch xử lý các lệnh gọi để giám sát các thủ tục theo một cách đặc biệt. Thông thường, khi một quy trình gọi quy trình giám sát, một số hướng dẫn đầu tiên trong quy trình đó sẽ kiểm tra xem liệu có quy trình nào khác đang hoạt động trên màn hình đó hay không. Nếu vậy, quá trình gọi sẽ bị tạm dừng cho đến khi một quá trình khác giải phóng màn hình. Do đó, việc loại trừ nhiều quy trình khỏi việc đưa vào màn hình không phải do lập trình viên thực hiện mà do trình biên dịch thực hiện, điều này ít xảy ra lỗi hơn. Trong các hệ thống phân tán bao gồm một số bộ xử lý, mỗi bộ xử lý có RAM riêng, các tín hiệu và màn hình là không phù hợp. Trong những hệ thống như vậy, việc đồng bộ hóa chỉ có thể đạt được bằng cách sử dụng tin nhắn. Để biết thêm thông tin về điều này, hãy xem phần "Đồng bộ hóa trong hệ thống phân tán". Đa nhiệm là một tính năng thiết yếu của hệ điều hành. Để hỗ trợ thuộc tính này, HĐH xác định và thiết kế cho chính nó các đơn vị công việc bên trong mà bộ xử lý và các tài nguyên máy tính khác sẽ được phân chia. Các đơn vị công việc nội bộ này trong các hệ điều hành khác nhau là tên khác nhau - nhiệm vụ, nhiệm vụ, quá trình, chủ đề. Trong một số trường hợp, các thực thể được biểu thị bằng các khái niệm này về cơ bản là khác nhau. Nói về các quy trình, chúng tôi lưu ý rằng hệ điều hành duy trì sự cô lập của chúng: mỗi quy trình có không gian địa chỉ ảo riêng, mỗi quy trình được gán tài nguyên riêng - tệp, cửa sổ, ngữ nghĩa, v.v. Sự cô lập như vậy là cần thiết để bảo vệ quy trình này khỏi quy trình khác, vì chúng chia sẻ tất cả tài nguyên của máy và cạnh tranh với nhau. Trong trường hợp chung, các quy trình thuộc về những người dùng khác nhau chia sẻ một máy tính và HĐH đảm nhận vai trò trọng tài trong các tranh chấp giữa các quy trình về tài nguyên. Đa chương trình làm tăng thông lượng hệ thống, nhưng một quy trình đơn lẻ không bao giờ có thể được thực thi nhanh hơn so với khi nó được thực thi ở chế độ một chương trình (bất kỳ việc chia sẻ tài nguyên nào sẽ làm chậm công việc của một trong những người tham gia do phải mất thêm thời gian chờ đợi tài nguyên trở thành có sẵn). Tuy nhiên, một nhiệm vụ được giải quyết trong một quy trình có thể có tính song song bên trong, về nguyên tắc, giúp tăng tốc độ giải quyết của nó. Ví dụ: trong quá trình thực hiện một tác vụ, một thiết bị bên ngoài sẽ được truy cập và trong quá trình thao tác này, có thể không chặn hoàn toàn việc thực thi quy trình mà có thể tiếp tục tính toán dọc theo một "nhánh" khác của quy trình. Với những mục đích này, các hệ điều hành hiện đại cung cấp việc sử dụng cơ chế đa luồng tương đối mới. Đồng thời, một khái niệm mới về “luồng” được đưa ra và khái niệm “quy trình” thay đổi đáng kể ý nghĩa của nó. Đa chương trình hiện được triển khai ở cấp luồng và một tác vụ được thiết kế dưới dạng một số luồng trong một quy trình có thể được hoàn thành nhanh hơn nhờ thực thi giả song song (hoặc song song trong hệ thống đa bộ xử lý) của các phần riêng lẻ của nó. Ví dụ: nếu một bảng tính được thiết kế đa luồng, người dùng có thể yêu cầu tính toán lại bảng tính của họ trong khi tiếp tục điền vào bảng tính. Đa luồng có thể được sử dụng đặc biệt hiệu quả để chạy các ứng dụng phân tán; ví dụ: một máy chủ đa luồng có thể thực hiện đồng thời các yêu cầu từ nhiều máy khách cùng một lúc. Các luồng thuộc cùng một tiến trình không bị cô lập với nhau như các tiến trình trong hệ thống đa nhiệm truyền thống và rất dễ dàng tổ chức liên lạc chặt chẽ giữa chúng. Thật vậy, không giống như các tiến trình thuộc về các ứng dụng cạnh tranh khác nhau, nói chung, tất cả các luồng của một tiến trình luôn thuộc về một ứng dụng, do đó, lập trình viên viết ứng dụng này có thể suy nghĩ trước về công việc của nhiều luồng của một tiến trình theo cách sao cho họ có thể tương tác và không tranh giành tài nguyên. Trong các hệ điều hành truyền thống, khái niệm "luồng" giống với khái niệm "quy trình". Trong thực tế, người ta thường mong muốn có nhiều luồng chia sẻ một không gian địa chỉ duy nhất nhưng thực thi gần như song song, làm cho các luồng giống như tiến trình (ngoại trừ không gian địa chỉ dùng chung). Các luồng đôi khi được gọi là các tiến trình nhẹ hoặc các tiến trình nhỏ. Thật vậy, các luồng tương tự như các tiến trình ở nhiều khía cạnh. Mỗi luồng chạy tuần tự nghiêm ngặt và có bộ đếm chương trình và ngăn xếp riêng. Ví dụ, các luồng, giống như các tiến trình, có thể tạo ra các luồng con cháu và có thể di chuyển từ trạng thái này sang trạng thái khác. Giống như các quy trình truyền thống (nghĩa là các quy trình bao gồm một luồng duy nhất), các luồng có thể ở một trong các trạng thái sau: CHẠY, CHỜ và SẴN SÀNG. Trong khi một luồng bị chặn thì một luồng khác trong cùng tiến trình có thể đang chạy. Các luồng chia sẻ bộ xử lý như các tiến trình, theo các tùy chọn lập lịch khác nhau. Tuy nhiên, các luồng khác nhau trong một tiến trình không độc lập như các tiến trình riêng biệt. Tất cả các chủ đề như vậy có cùng một không gian địa chỉ. Điều này có nghĩa là chúng có chung các biến toàn cục. Vì mỗi luồng có thể truy cập mọi địa chỉ ảo nên một luồng có thể sử dụng ngăn xếp của luồng khác. Không có sự bảo vệ hoàn toàn giữa các luồng, bởi vì, thứ nhất, điều đó là không thể, và thứ hai, nó không cần thiết. Tất cả các luồng của một quy trình luôn giải quyết vấn đề chung của một người dùng và bộ máy phân luồng được sử dụng ở đây để giải quyết vấn đề nhanh hơn bằng cách song song hóa nó. Đồng thời, điều rất quan trọng đối với người lập trình là phải có sẵn các phương tiện thuận tiện để tổ chức sự tương tác giữa các phần của một nhiệm vụ. Ngoài việc chia sẻ không gian địa chỉ, tất cả các luồng còn chia sẻ một tập hợp các tệp đang mở, bộ hẹn giờ, tín hiệu, v.v. Vì vậy, các chủ đề có riêng của họ: . bộ đếm chương trình, . cây rơm, . sổ đăng ký, . chủ đề con cháu, . tình trạng. Các chủ đề được tách ra: . Không gian địa chỉ, . các biến toàn cục, . mở tập tin, . đồng hồ bấm giờ, . ngữ nghĩa, . thông tin thống kê. Xử lý đa luồng cải thiện hiệu quả hệ thống so với xử lý đa tác vụ. Ví dụ: trong đa nhiệm Windows, bạn có thể làm việc với bảng tính và trình xử lý văn bản cùng một lúc. Tuy nhiên, nếu người dùng yêu cầu tính toán lại bảng tính của họ, bảng tính sẽ bị khóa cho đến khi thao tác này hoàn tất, việc này có thể mất một khoảng thời gian đáng kể. Trong môi trường đa luồng, nếu bảng tính được thiết kế với khả năng xử lý đa luồng được cung cấp cho người lập trình thì vấn đề này sẽ không phát sinh và người dùng luôn có quyền truy cập vào bảng tính. Xử lý đa luồng được sử dụng rộng rãi trong các hệ thống phân tán. Xem phần "Quy trình và luồng trong hệ thống phân tán" để biết thêm thông tin. Một số tác vụ ứng dụng dễ lập trình hơn bằng cách sử dụng cơ chế song song, chẳng hạn như tác vụ ghi-đọc trong đó một luồng ghi vào bộ đệm và một luồng khác đọc từ đó. Vì chúng chia sẻ một bộ đệm chung nên chúng không nên được tạo thành các tiến trình riêng biệt. Một ví dụ khác về việc sử dụng các luồng là để điều khiển các tín hiệu như ngắt bàn phím (del hoặc break). Thay vì xử lý tín hiệu ngắt, một luồng được chỉ định liên tục chờ tín hiệu đến. Vì vậy, việc sử dụng các luồng có thể làm giảm nhu cầu ngắt ở cấp độ người dùng. Trong những ví dụ này, việc thực thi song song không quan trọng bằng tính rõ ràng của chương trình. Cuối cùng, trong các hệ thống đa bộ xử lý, các luồng từ cùng một không gian địa chỉ có thể được thực thi song song trên các bộ xử lý khác nhau. Đây thực sự là một trong những cách chính để thực hiện chia sẻ tài nguyên trong các hệ thống như vậy. Mặt khác, các chương trình được thiết kế phù hợp sử dụng các luồng sẽ chạy tốt như nhau trên máy xử lý đơn ở chế độ chia sẻ thời gian giữa các luồng và trên một bộ đa xử lý thực sự. | | Quản lý bộ nhớ Bộ nhớ là tài nguyên quan trọng cần được quản lý cẩn thận bằng hệ điều hành đa chương trình. Tất cả RAM không được hệ điều hành chiếm dụng sẽ được phân phối. Thông thường, hệ điều hành nằm ở những địa chỉ thấp nhất nhưng nó cũng có thể chiếm những địa chỉ cao nhất. Các chức năng của hệ điều hành để quản lý bộ nhớ là: giám sát bộ nhớ trống và đã sử dụng, phân bổ bộ nhớ cho các tiến trình và giải phóng bộ nhớ khi các tiến trình kết thúc, loại bỏ các tiến trình khỏi RAM sang đĩa khi bộ nhớ chính không đủ lớn để chứa tất cả các tiến trình và trả chúng về RAM, khi không gian được giải phóng trong đó, cũng như đặt địa chỉ chương trình cho một vùng bộ nhớ vật lý cụ thể. Các loại địa chỉ Để xác định các biến và lệnh, tên tượng trưng (nhãn), địa chỉ ảo và địa chỉ vật lý được sử dụng (Hình 2.7). Tên tượng trưng được người dùng gán khi viết chương trình bằng ngôn ngữ thuật toán hoặc hợp ngữ. Địa chỉ ảo được tạo bởi một trình dịch để dịch chương trình sang ngôn ngữ máy. Vì trong quá trình dịch, trong trường hợp chung, không biết chương trình sẽ được tải vào RAM ở đâu, nên người dịch sẽ gán địa chỉ ảo (có điều kiện) cho các biến và lệnh, thường giả định theo mặc định rằng chương trình sẽ được đặt bắt đầu từ địa chỉ 0. Tập hợp các địa chỉ ảo của một tiến trình được gọi là không gian địa chỉ ảo. Mỗi tiến trình có không gian địa chỉ ảo riêng. Kích thước tối đa Không gian địa chỉ ảo bị giới hạn bởi dung lượng bit địa chỉ vốn có trong kiến ​​trúc máy tính nhất định và theo quy luật, không trùng với dung lượng bộ nhớ vật lý có sẵn trong máy tính. Cơm. 2.7. Các loại địa chỉ Địa chỉ vật lý tương ứng với số lượng ô RAM nơi các biến và lệnh thực sự được định vị hoặc sẽ được định vị. Việc chuyển đổi từ địa chỉ ảo sang địa chỉ vật lý có thể được thực hiện theo hai cách. Trong trường hợp đầu tiên, việc thay thế địa chỉ ảo bằng địa chỉ vật lý được thực hiện bằng một chương trình hệ thống đặc biệt - bộ tải khởi động di chuyển. Trình tải di chuyển, dựa trên dữ liệu ban đầu có về địa chỉ bắt đầu của bộ nhớ vật lý mà chương trình sẽ được tải vào đó và thông tin do trình dịch cung cấp về các hằng số phụ thuộc địa chỉ của chương trình, tải chương trình, kết hợp nó bằng việc thay thế địa chỉ ảo bằng địa chỉ vật lý. Phương pháp thứ hai là chương trình được tải vào bộ nhớ không thay đổi ở các địa chỉ ảo, trong khi hệ điều hành ghi lại phần bù của vị trí thực tế của mã chương trình so với không gian địa chỉ ảo. Trong quá trình thực thi chương trình, mỗi lần truy cập RAM, một địa chỉ ảo sẽ được chuyển đổi thành địa chỉ vật lý. Phương pháp thứ hai linh hoạt hơn; nó cho phép chương trình được di chuyển trong quá trình thực thi, trong khi bộ tải di chuyển liên kết chắc chắn chương trình với vùng bộ nhớ được phân bổ ban đầu cho nó. Tuy nhiên, việc sử dụng bộ tải khởi động di chuyển sẽ giảm chi phí hoạt động vì mỗi địa chỉ ảo chỉ được dịch một lần khi khởi động và trong trường hợp thứ hai, mỗi khi một địa chỉ nhất định được truy cập. Trong một số trường hợp (thường là trong các hệ thống chuyên dụng), khi biết trước chính xác vùng RAM mà chương trình sẽ được thực thi, trình dịch sẽ tạo mã thực thi ngay lập tức trong các địa chỉ vật lý. Các phương pháp cấp phát bộ nhớ mà không sử dụng không gian đĩa Tất cả các phương pháp quản lý bộ nhớ có thể được chia thành hai lớp: các phương pháp sử dụng sự di chuyển của các tiến trình giữa RAM và đĩa và các phương pháp không sử dụng (Hình 2.8). Hãy bắt đầu với lớp phương thức cuối cùng, đơn giản hơn. Cơm. 2.8. Phân loại các phương pháp cấp phát bộ nhớ Phân bổ bộ nhớ thành các phần cố định Cách đơn giản nhất để quản lý RAM là chia nó thành nhiều phần có kích thước cố định. Việc này có thể được người vận hành thực hiện thủ công trong quá trình khởi động hệ thống hoặc trong quá trình tạo hệ thống. Tác vụ tiếp theo nhận được để thực thi được đặt trong hàng đợi chung (Hình 2.9a) hoặc trong hàng đợi đến một phần nhất định (Hình 2.9b). Cơm. 2.9. Phân bổ bộ nhớ theo các phần cố định: a - có hàng đợi chung; b - với các hàng đợi riêng Hệ thống con quản lý bộ nhớ trong trường hợp này thực hiện các tác vụ sau: . so sánh kích thước của chương trình nhận được khi thực thi và các phân vùng trống, chọn phân vùng phù hợp,… tải chương trình và cấu hình địa chỉ. Mặc dù có ưu điểm rõ ràng - dễ thực hiện - phương pháp này có một nhược điểm đáng kể - độ cứng. Vì chỉ có thể thực hiện một chương trình trong mỗi phần nên mức độ đa chương trình bị giới hạn trước bởi số lượng phần, bất kể kích thước của chương trình. Ngay cả khi chương trình nhỏ, nó sẽ chiếm toàn bộ phân vùng, dẫn đến việc sử dụng bộ nhớ không hiệu quả. Mặt khác, ngay cả khi dung lượng RAM của máy cho phép nó thực thi một chương trình nào đó thì việc phân vùng bộ nhớ cũng không cho phép nó làm điều đó. Phân bổ bộ nhớ theo phân vùng thay đổi Trong trường hợp này, bộ nhớ của máy không được chia trước thành các phân vùng. Lúc đầu tất cả bộ nhớ đều miễn phí. Mỗi tác vụ mới đến sẽ được cấp phát bộ nhớ mà nó cần. Nếu không đủ bộ nhớ, tác vụ sẽ không được chấp nhận để thực thi và vẫn ở trong hàng đợi. Khi một tác vụ hoàn thành, bộ nhớ sẽ được giải phóng và một tác vụ khác có thể được tải vào không gian đó. Do đó, tại một thời điểm tùy ý, RAM là một chuỗi ngẫu nhiên các vùng chiếm dụng và vùng trống (phân vùng) có kích thước tùy ý. Hình 2.10 hiển thị trạng thái của bộ nhớ tại các thời điểm khác nhau khi sử dụng phân bổ động. Vì vậy, tại thời điểm t0 chỉ có HĐH ở trong bộ nhớ và đến thời điểm t1, bộ nhớ được chia thành 5 tác vụ và tác vụ P4 khi hoàn thành sẽ rời khỏi bộ nhớ. Khoảng trống còn trống sau nhiệm vụ P4 được lấp đầy bởi nhiệm vụ P6, nhiệm vụ này đến vào thời điểm t3. Cơm. 2.10. Cấp phát bộ nhớ theo phân vùng động Nhiệm vụ của hệ điều hành khi thực hiện phương pháp quản lý bộ nhớ này là: . duy trì các bảng vùng trống và vùng bị chiếm, cho biết địa chỉ bắt đầu và kích thước của vùng bộ nhớ, . khi có tác vụ mới - phân tích yêu cầu, xem bảng các vùng trống và chọn phân vùng có kích thước đủ để chứa tác vụ đến. tải một tác vụ vào phân vùng được phân bổ cho nó và điều chỉnh các bảng vùng trống và vùng bị chiếm, . sau khi hoàn thành nhiệm vụ, cập nhật bảng khu vực trống và chiếm đóng. Mã không di chuyển trong khi thực thi, nghĩa là việc điều chỉnh địa chỉ một lần có thể được thực hiện thông qua việc sử dụng bộ tải di chuyển. Việc lựa chọn phân vùng cho tác vụ mới đến có thể được thực hiện theo các quy tắc khác nhau, chẳng hạn như “phân vùng đầu tiên có kích thước đủ” hoặc “phân vùng có kích thước đủ nhỏ nhất” hoặc “phân vùng có kích thước đủ lớn nhất”. Tất cả các quy tắc này đều có ưu điểm và nhược điểm. So với phương pháp phân vùng cố định, phương pháp này có tính linh hoạt cao hơn nhiều, nhưng nó có một nhược điểm rất nghiêm trọng - phân mảnh bộ nhớ. Sự phân mảnh là sự hiện diện của một số lượng lớn các khu vực không liền kề giải phóng bộ nhớ kích thước rất nhỏ (mảnh). Nhỏ đến mức không có chương trình mới nào có thể vừa với bất kỳ phần nào, mặc dù tổng kích thước của các đoạn có thể rất đáng kể, vượt xa dung lượng bộ nhớ cần thiết. Các phần có thể di chuyển Một trong những phương pháp chống phân mảnh là di chuyển tất cả các phần bị chiếm giữ tới các địa chỉ cao hơn hoặc thấp hơn, sao cho tất cả bộ nhớ trống tạo thành một vùng trống duy nhất (Hình 2.11). Ngoài các chức năng mà HĐH thực hiện khi phân bổ bộ nhớ vào các phân vùng có thể thay đổi, trong trường hợp này, nó cũng phải thỉnh thoảng sao chép nội dung của các phân vùng từ vị trí bộ nhớ này sang vị trí bộ nhớ khác, điều chỉnh bảng vùng trống và vùng bị chiếm dụng. Thủ tục này được gọi là "nén". Việc nén có thể được thực hiện mỗi khi một tác vụ được hoàn thành hoặc chỉ khi không có phân vùng trống có kích thước đủ cho tác vụ mới đến. Trong trường hợp đầu tiên, cần ít công việc tính toán hơn khi điều chỉnh bảng và trong trường hợp thứ hai, quy trình nén được thực hiện ít thường xuyên hơn. Vì các chương trình di chuyển xung quanh RAM khi chúng thực thi nên việc chuyển đổi địa chỉ từ dạng ảo sang dạng vật lý phải được thực hiện một cách linh hoạt. Cơm. 2.11. Phân bổ bộ nhớ cho các phân vùng có thể định vị lại Mặc dù việc nén giúp sử dụng bộ nhớ hiệu quả hơn nhưng nó có thể tốn thời gian và thường vượt xa lợi ích của phương pháp này. Các phương pháp cấp phát bộ nhớ sử dụng không gian đĩa Khái niệm bộ nhớ ảo Trong một thời gian khá dài, người dùng đã phải đối mặt với vấn đề đặt các chương trình vào bộ nhớ có kích thước vượt quá bộ nhớ trống hiện có. Giải pháp là chia chương trình thành các phần được gọi là lớp phủ. Lớp phủ 0 bắt đầu thực thi đầu tiên. Khi thực thi xong, nó gọi một lớp phủ khác. Tất cả các lớp phủ được lưu trữ trên đĩa và được di chuyển giữa bộ nhớ và đĩa bằng hệ điều hành. Tuy nhiên, lập trình viên đã phải chia chương trình thành nhiều phần và lên lịch tải chúng vào RAM. Sự phát triển của các phương pháp tổ chức quá trình tính toán theo hướng này đã dẫn đến sự xuất hiện của một phương pháp được gọi là bộ nhớ ảo. Tài nguyên ảo là tài nguyên hiển thị với người dùng hoặc chương trình người dùng có các thuộc tính mà nó không thực sự sở hữu. Ví dụ: người dùng có thể được cung cấp RAM ảo, kích thước của RAM này vượt quá tất cả RAM thực có sẵn trong hệ thống. Người dùng viết chương trình như thể anh ta có một RAM lớn, đồng nhất theo ý mình, nhưng trên thực tế, tất cả dữ liệu mà chương trình sử dụng đều được lưu trữ trên một hoặc nhiều thiết bị lưu trữ không đồng nhất, thường là đĩa và, nếu cần, một phần được ánh xạ vào bộ nhớ thực. . Do đó, bộ nhớ ảo là một tập hợp phần mềm và phần cứng cho phép người dùng viết các chương trình có kích thước vượt quá RAM khả dụng; Với mục đích này, bộ nhớ ảo giải quyết các vấn đề sau: . đặt dữ liệu vào các loại thiết bị lưu trữ khác nhau, ví dụ: một phần chương trình trong RAM và một phần trên đĩa; . di chuyển dữ liệu khi cần thiết giữa các thiết bị lưu trữ thuộc các loại khác nhau, chẳng hạn như tải phần cần thiết của chương trình từ đĩa vào RAM; . chuyển đổi địa chỉ ảo thành địa chỉ vật lý. Tất cả các hành động này được thực hiện tự động mà không cần sự tham gia của lập trình viên, tức là cơ chế bộ nhớ ảo trong suốt đối với người dùng. Việc triển khai phổ biến nhất của bộ nhớ ảo là phân bổ bộ nhớ trang, phân đoạn và phân đoạn trang cũng như trao đổi. Phân bổ trang Hình 2.12 thể hiện sơ đồ phân bổ trang bộ nhớ. Không gian địa chỉ ảo của mỗi tiến trình được chia thành các phần có cùng kích thước, cố định cho một hệ thống nhất định, được gọi là các trang ảo. Nói chung, kích thước của không gian địa chỉ ảo không phải là bội số của kích thước trang, do đó trang cuối cùng của mỗi quy trình được đệm bằng một vùng giả. Toàn bộ RAM của máy cũng được chia thành các phần có kích thước bằng nhau gọi là các trang vật lý (hoặc khối). Kích thước trang thường được chọn là lũy thừa của hai: 512, 1024, v.v., điều này giúp đơn giản hóa cơ chế dịch địa chỉ. Khi một tiến trình khởi động, một số trang ảo của nó được đặt trong RAM và phần còn lại được đặt trên đĩa. Các trang ảo liền kề không nhất thiết phải nằm ở các trang vật lý liền kề. Khi tải, hệ điều hành sẽ tạo cho mỗi quy trình một cấu trúc thông tin - một bảng trang, trong đó sự tương ứng được thiết lập giữa số lượng trang ảo và vật lý cho các trang được tải vào RAM hoặc ghi chú rằng trang ảo đã được phân trang vào đĩa. Ngoài ra, bảng trang còn chứa thông tin kiểm soát, chẳng hạn như chỉ báo sửa đổi trang, chỉ báo không thể phân trang (việc dỡ tải một số trang có thể bị cấm), chỉ báo truy cập trang (được sử dụng để đếm số lần truy cập trong một khoảng thời gian nhất định). ) và các dữ liệu khác được tạo ra và sử dụng bởi bộ nhớ ảo của động cơ. Cơm. 2.12. Cấp phát bộ nhớ trang Khi quá trình tiếp theo được kích hoạt, địa chỉ của bảng trang của quá trình này sẽ được tải vào một thanh ghi bộ xử lý đặc biệt. Với mỗi lần truy cập bộ nhớ, thông tin về trang ảo đã được truy cập sẽ được đọc từ bảng trang. Nếu trang ảo này nằm trong RAM thì địa chỉ ảo sẽ được chuyển đổi thành địa chỉ vật lý. Nếu trang ảo mong muốn hiện được phân trang vào đĩa thì sẽ xảy ra cái gọi là lỗi trang. Tiến trình đang chạy được đưa vào trạng thái chờ và một tiến trình khác từ hàng đợi sẵn sàng được kích hoạt. Song song đó, chương trình xử lý lỗi trang sẽ tìm thấy trang ảo được yêu cầu trên đĩa và cố tải nó vào RAM. Nếu có một trang vật lý trống trong bộ nhớ thì quá trình tải sẽ được thực hiện ngay lập tức, nhưng nếu không có trang trống thì câu hỏi sẽ được quyết định trang nào sẽ được tải khỏi RAM. Trong tình huống này, nhiều tiêu chí lựa chọn khác nhau có thể được sử dụng, trong đó phổ biến nhất là các tiêu chí sau: . trang không được sử dụng lâu nhất, . trang đầu tiên xuất hiện, . trang có số lượng truy cập ít nhất gần đây. Một số hệ thống sử dụng khái niệm tập trang làm việc. Tập làm việc được xác định cho từng quy trình và là danh sách các trang được sử dụng thường xuyên nhất phải nằm trong RAM và do đó không thể phân trang được. Sau khi một trang được chọn rời khỏi RAM, dấu hiệu sửa đổi của nó (từ bảng trang) sẽ được phân tích. Nếu trang bị đẩy ra đã được sửa đổi kể từ khi tải thì phiên bản mới của nó phải được ghi vào đĩa. Nếu không, nó có thể bị phá hủy một cách đơn giản, tức là trang vật lý tương ứng được khai báo là miễn phí. Hãy xem xét cơ chế chuyển đổi địa chỉ ảo thành địa chỉ vật lý khi tổ chức bộ nhớ theo trang (Hình 2.13). Một địa chỉ ảo trong phân trang có thể được biểu diễn dưới dạng một cặp (p, s), trong đó p là số trang ảo của quá trình (đánh số trang bắt đầu từ 0) và s là phần bù trong trang ảo. Cho rằng kích thước trang là 2 mũ k, độ lệch s có thể đạt được bằng cách loại bỏ k bit có trọng số nhỏ nhất trong biểu diễn nhị phân của địa chỉ ảo. Các bit quan trọng nhất còn lại đại diện cho biểu diễn nhị phân của số trang p. Cơm. 2.13. Cơ chế chuyển đổi địa chỉ ảo thành địa chỉ vật lý khi phân trang bộ nhớ Khi mỗi lần truy cập vào RAM bằng phần cứng, các hành động sau được thực hiện: 1. dựa trên địa chỉ bắt đầu của bảng trang (nội dung của thanh ghi địa chỉ bảng trang), số trang ảo (bit quan trọng nhất của địa chỉ ảo) và độ dài bản ghi trong bảng trang (hằng số hệ thống), địa chỉ của mục nhập mong muốn trong bảng được xác định, 2. số trang vật lý được trích xuất từ ​​mục nhập này , 3. phần bù (bit thứ tự thấp của địa chỉ ảo) được thêm vào số trang vật lý. Sử dụng ở điểm (3) thực tế là kích thước trang là lũy thừa của 2 cho phép chúng ta sử dụng thao tác nối (đính kèm) thay vì thao tác bổ sung dài hơn, giúp giảm thời gian cần thiết để lấy địa chỉ vật lý và do đó tăng máy tính. hiệu suất. Hiệu suất của hệ thống bộ nhớ phân trang bị ảnh hưởng bởi thời gian cần thiết để xử lý các ngắt trang và chuyển đổi địa chỉ ảo thành địa chỉ vật lý. Nếu lỗi trang xảy ra thường xuyên, hệ thống có thể lãng phí phần lớn thời gian để đổi trang. Để giảm tần suất lỗi trang, kích thước trang sẽ phải tăng lên. Ngoài ra, việc tăng kích thước trang sẽ làm giảm kích thước của bảng trang và do đó giảm chi phí bộ nhớ. Mặt khác, nếu trang lớn thì vùng giả trong trang ảo cuối cùng của mỗi chương trình cũng lớn. Trung bình, mỗi chương trình sẽ mất một nửa dung lượng của một trang, con số này có thể tăng thêm đáng kể nếu trang lớn. Thời gian cần thiết để chuyển đổi một địa chỉ ảo thành địa chỉ vật lý phần lớn được xác định bởi thời gian truy cập bảng trang. Về vấn đề này, họ có xu hướng đặt bảng trang vào các thiết bị lưu trữ “nhanh”. Ví dụ, đây có thể là một tập hợp các thanh ghi hoặc bộ nhớ đặc biệt được sử dụng để giảm thời gian truy cập tìm kiếm kết hợp và bộ nhớ đệm dữ liệu. Việc phân bổ bộ nhớ trang có thể được triển khai ở phiên bản đơn giản hóa mà không cần chuyển trang vào đĩa. Trong trường hợp này, tất cả các trang ảo của tất cả các tiến trình đều liên tục nằm trong RAM. Tùy chọn phân trang này, mặc dù không cung cấp cho người dùng bộ nhớ ảo, nhưng gần như loại bỏ tình trạng phân mảnh do chương trình có thể được tải vào các khu vực không liền kề và cũng vì không bao giờ có phần thừa khi tải các trang ảo. Phân phối được phân đoạn Với phân trang, không gian địa chỉ ảo của một quy trình được chia một cách máy móc thành các phần bằng nhau. Điều này không cho phép phân biệt các phương thức truy cập vào các phần (phân đoạn) khác nhau của chương trình và thuộc tính này thường rất hữu ích. Ví dụ: bạn có thể cấm các thao tác ghi và đọc trong đoạn mã của chương trình và cho phép chỉ đọc đối với đoạn dữ liệu. Ngoài ra, việc chia chương trình thành các phần “có ý nghĩa” về cơ bản giúp một số quy trình có thể chia sẻ một phân đoạn. Ví dụ: nếu hai quy trình sử dụng cùng một quy trình toán học thì chỉ một bản sao của quy trình đó có thể được tải vào RAM. Hãy xem xét cách phân bổ bộ nhớ được phân đoạn thực hiện các khả năng này như thế nào (Hình 2.14). Không gian địa chỉ ảo của quy trình được chia thành các phân đoạn, kích thước của phân đoạn này được lập trình viên xác định có tính đến ý nghĩa ngữ nghĩa của thông tin chứa trong chúng. Một phân đoạn có thể là một chương trình con, một mảng dữ liệu, v.v. Đôi khi việc phân đoạn chương trình được thực hiện theo mặc định bởi trình biên dịch. Khi một quá trình tải, một số phân đoạn được đặt trong RAM (và đối với mỗi phân đoạn này, hệ điều hành sẽ tìm vùng bộ nhớ trống phù hợp) và một số phân đoạn được đặt trong bộ nhớ đĩa. Các phân đoạn của một chương trình có thể chiếm các vùng không liền kề trong RAM. Trong quá trình khởi động, hệ thống tạo một bảng gồm các phân đoạn quy trình (tương tự như bảng trang), trong đó, đối với mỗi phân đoạn, địa chỉ vật lý bắt đầu của phân đoạn trong RAM, kích thước phân đoạn, quy tắc truy cập, dấu hiệu sửa đổi, dấu hiệu truy cập vào phân đoạn này trong khoảng thời gian cuối cùng và một số thông tin khác được chỉ định. Nếu không gian địa chỉ ảo của một số quy trình bao gồm cùng một phân đoạn thì trong bảng phân đoạn của các quy trình này, các tham chiếu sẽ được tạo cho cùng một phần RAM mà phân đoạn này được tải trong một bản sao. Cơm. 2.14. Phân bổ bộ nhớ theo phân đoạn Một hệ thống có tổ chức phân đoạn hoạt động tương tự như hệ thống có tổ chức trang: thỉnh thoảng xảy ra gián đoạn do thiếu các phân đoạn cần thiết trong bộ nhớ, khi cần giải phóng bộ nhớ, một số phân đoạn sẽ không được tải, và với mỗi lần truy cập vào RAM, một địa chỉ ảo sẽ được chuyển đổi thành địa chỉ vật lý. Ngoài ra, khi truy cập bộ nhớ, nó sẽ kiểm tra xem có cho phép truy cập loại được yêu cầu vào phân đoạn này hay không. Một địa chỉ ảo trong tổ chức bộ nhớ được phân đoạn có thể được biểu thị bằng một cặp (g, s), trong đó g là số phân đoạn và s là phần bù trong phân đoạn. Địa chỉ vật lý có được bằng cách thêm địa chỉ vật lý bắt đầu của phân đoạn, được tìm thấy trong bảng phân đoạn ở số g và offset s. Nhược điểm của phương pháp cấp phát bộ nhớ này là phân mảnh ở cấp độ phân đoạn và dịch địa chỉ chậm hơn so với tổ chức trang. Phân bổ phân đoạn trang Như tên cho thấy, phương pháp này là sự kết hợp giữa phân bổ bộ nhớ trang và phân đoạn và kết quả là kết hợp các ưu điểm của cả hai phương pháp. Không gian ảo của một quy trình được chia thành các phân đoạn và mỗi phân đoạn lần lượt được chia thành các trang ảo được đánh số trong phân đoạn đó. RAM được chia thành trang vật lý . Quá trình này được hệ điều hành tải từng trang, với một số trang nằm trong RAM và một số trên đĩa. Đối với mỗi phân đoạn, bảng trang riêng được tạo, cấu trúc của nó hoàn toàn giống với cấu trúc của bảng trang được sử dụng trong phân trang. Đối với mỗi quy trình, một bảng phân đoạn được tạo, cho biết địa chỉ của các bảng trang cho tất cả các phân đoạn của quy trình này. Địa chỉ bảng phân đoạn được tải vào một thanh ghi bộ xử lý đặc biệt khi quá trình tương ứng được kích hoạt. Hình 2.15 thể hiện sơ đồ chuyển đổi địa chỉ ảo sang vật lý cho phương pháp này. Cơm. 2.15. Lược đồ chuyển đổi địa chỉ ảo thành địa chỉ vật lý để tổ chức bộ nhớ trang phân đoạn. Một loại bộ nhớ ảo đang hoán đổi. Hình 2.16 hiển thị biểu đồ sử dụng bộ xử lý như một hàm của số lượng quy trình đồng thời đang chạy và tỷ lệ phần trăm thời gian mà các quy trình đó dành để chờ I/O. Cơm. 2.16. Sự phụ thuộc của tải bộ xử lý vào số lượng tác vụ và cường độ I/O Hình cho thấy để tải bộ xử lý lên 90%, chỉ cần ba tác vụ đếm là đủ. Tuy nhiên, để cung cấp cùng một tải cho các tác vụ đòi hỏi nhiều I/O tương tác sẽ cần đến hàng chục tác vụ như vậy. Điều kiện cần thiết để hoàn thành một tác vụ là tải nó vào RAM, dung lượng của tác vụ này bị giới hạn. Trong những điều kiện này, một phương pháp tổ chức quá trình tính toán được gọi là hoán đổi đã được đề xuất. Trong phương pháp này, một số tiến trình (thường ở trạng thái chờ) tạm thời được chuyển sang đĩa. Bộ lập lịch của hệ điều hành không loại trừ chúng khỏi việc xem xét và khi xảy ra các điều kiện để kích hoạt một quy trình nhất định nằm trong vùng trao đổi trên đĩa, quy trình này sẽ được chuyển sang RAM. Nếu không có đủ dung lượng trống trong RAM, một tiến trình khác sẽ bị hủy. Với việc hoán đổi, trái ngược với các phương pháp triển khai bộ nhớ ảo đã thảo luận trước đó, quá trình sẽ di chuyển hoàn toàn giữa bộ nhớ và đĩa, nghĩa là trong một thời gian, quá trình này có thể hoàn toàn không có trong RAM. Có nhiều thuật toán khác nhau để chọn các quy trình tải và dỡ tải, cũng như các phương pháp khác nhau để phân bổ RAM và bộ nhớ đĩa cho một quy trình được tải. Phân cấp của các thiết bị lưu trữ. Nguyên tắc lưu trữ dữ liệu Bộ nhớ máy tính là một hệ thống phân cấp của các thiết bị lưu trữ (các thanh ghi bên trong của bộ xử lý, Nhiều loại khác nhau siêu RAM và RAM, đĩa, băng), khác nhau về thời gian truy cập trung bình và chi phí lưu trữ dữ liệu trên mỗi bit (Hình 2.17). Người dùng muốn có cả bộ nhớ nhanh và rẻ. Bộ nhớ đệm cung cấp giải pháp thỏa hiệp cho vấn đề này. Cơm. 2.17. Phân cấp lưu trữ Bộ nhớ đệm là cách tổ chức chức năng chung của hai loại thiết bị lưu trữ khác nhau về thời gian truy cập và chi phí lưu trữ dữ liệu, cho phép bạn giảm thời gian truy cập dữ liệu trung bình bằng cách sao chép động các thông tin được sử dụng thường xuyên nhất từ ​​“chậm”. ” lưu trữ vào bộ lưu trữ “nhanh” . Bộ nhớ đệm thường được gọi không chỉ là cách tổ chức hoạt động của hai loại thiết bị lưu trữ mà một trong những thiết bị đó là bộ nhớ “nhanh”. Nó đắt hơn và thường có khối lượng tương đối nhỏ. Điều quan trọng là cơ chế bộ đệm phải trong suốt đối với người dùng, người không phải cung cấp bất kỳ thông tin nào về cường độ sử dụng dữ liệu và không phải tham gia dưới bất kỳ hình thức nào vào việc di chuyển dữ liệu từ loại bộ nhớ này sang loại bộ nhớ khác, tất cả điều này được thực hiện tự động bởi các công cụ hệ thống. Hãy xem xét một trường hợp đặc biệt về việc sử dụng bộ nhớ đệm để giảm thời gian truy cập trung bình vào dữ liệu được lưu trong RAM. Để thực hiện điều này, một bộ nhớ nhanh, gọi đơn giản là bộ nhớ đệm, được đặt giữa bộ xử lý và RAM (Hình 2.18). Như vậy, ví dụ, bộ nhớ liên kết có thể được sử dụng. Nội dung của bộ nhớ đệm là tập hợp các bản ghi của tất cả các thành phần dữ liệu được tải vào nó. Mỗi mục dữ liệu bao gồm địa chỉ mà mục dữ liệu có trong bộ nhớ chính và thông tin kiểm soát: dấu hiệu sửa đổi và dấu hiệu truy cập dữ liệu trong một khoảng thời gian gần đây. Cơm. 2.18. Bộ nhớ đệm Trong các hệ thống được trang bị bộ nhớ đệm, mỗi yêu cầu tới RAM được thực hiện theo thuật toán sau: 1. Nội dung của bộ nhớ đệm được xem để xác định xem dữ liệu mong muốn có trong bộ nhớ đệm hay không; Bộ nhớ đệm không thể đánh địa chỉ, do đó việc tìm kiếm dữ liệu cần thiết được thực hiện theo nội dung - giá trị của trường "địa chỉ trong RAM" được lấy từ yêu cầu. 2. Nếu dữ liệu được tìm thấy trong bộ đệm, nó sẽ được đọc từ bộ đệm đó và kết quả sẽ được gửi đến bộ xử lý. 3. Nếu không có dữ liệu cần thiết, dữ liệu đó cùng với địa chỉ của nó sẽ được sao chép từ RAM sang bộ nhớ đệm và kết quả của yêu cầu sẽ được truyền đến bộ xử lý. Khi sao chép dữ liệu, có thể không còn dung lượng trống trong bộ nhớ đệm, khi đó dữ liệu có số lần truy cập ít nhất trong khoảng thời gian vừa qua sẽ được chọn để xóa khỏi bộ nhớ đệm. Nếu dữ liệu bị loại bỏ đã được sửa đổi trong bộ nhớ đệm, nó sẽ được ghi lại vào RAM. Nếu dữ liệu này chưa được sửa đổi thì vị trí của nó trong bộ nhớ đệm sẽ được khai báo trống. Trong thực tế, không chỉ một phần tử dữ liệu được truy cập được đọc vào bộ nhớ đệm, mà toàn bộ khối dữ liệu; điều này làm tăng khả năng xảy ra cái gọi là “lần truy cập bộ đệm”, tức là tìm thấy dữ liệu cần thiết trong bộ nhớ đệm. Hãy để chúng tôi chỉ ra thời gian truy cập dữ liệu trung bình phụ thuộc như thế nào vào xác suất nhấn vào bộ đệm. Giả sử có một thiết bị lưu trữ chính có thời gian truy cập dữ liệu trung bình t1 và một bộ nhớ cache có thời gian truy cập t2 thì hiển nhiên là t2

7.1. Các khái niệm cơ bản về hệ điều hành

Một trong những thành phần của khoa học máy tính là - phần mềm, không đồng nhất và có cấu trúc phức tạp, bao gồm nhiều cấp độ: hệ thống, dịch vụ, công cụ, ứng dụng.

Ở cấp độ thấp nhất, có các tổ hợp chương trình thực hiện các chức năng giao diện (trung gian giữa người và máy tính, phần cứng và phần mềm, giữa các chương trình đang chạy đồng thời) để phân phối các tài nguyên máy tính khác nhau. Các chương trình ở cấp độ này được gọi là mang tính hệ thống. Bất kỳ chương trình người dùng nào cũng được khởi chạy dưới sự kiểm soát của các tổ hợp phần mềm được gọi là các hệ điều hành.

Cấp độ tiếp theo- Cái này Phần mềm tiện ích. Các chương trình ở cấp độ này được gọi là tiện ích và thực hiện nhiều chức năng phụ trợ khác nhau. Đây có thể là các chương trình chẩn đoán được sử dụng khi bảo trì các thiết bị khác nhau (đĩa mềm và đĩa cứng), các chương trình kiểm tra đại diện cho một tập hợp các chương trình bảo trì, trình lưu trữ, phần mềm chống vi-rút, v.v. Các tiện ích thường chạy trong hệ điều hành (mặc dù chúng có thể truy cập trực tiếp vào phần cứng), vì vậy chúng được coi là cấp độ cao hơn. Trong một số phân loại, cấp độ hệ thống và dịch vụ được kết hợp thành một lớp - phần mềm hệ thống.

Phần mềm đo đạc trình bày các gói phần mềm để tạo các chương trình khác. Quá trình tạo chương trình mới bằng ngôn ngữ lệnh máy rất phức tạp và tốn nhiều công sức nên hiệu suất thấp. Trong thực tế, hầu hết các chương trình được biên dịch bằng ngôn ngữ lập trình chính thức, gần với ngôn ngữ toán học hơn, do đó làm việc dễ dàng và hiệu quả hơn và việc dịch chương trình sang ngôn ngữ mã máy được thực hiện bởi máy tính thông qua phần mềm công cụ. Các chương trình phần mềm công cụ được điều khiển bởi các chương trình hệ thống nên ở cấp độ cao hơn.

Phần mềm ứng dụng- lớp chương trình lớn nhất về khối lượng là các chương trình người dùng cuối. Trên thế giới có khoảng sáu nghìn ngành nghề khác nhau, hàng nghìn sở thích khác nhau và hầu hết chúng hiện đều có một số loại sản phẩm phần mềm ứng dụng. Phần mềm ứng dụng cũng được điều khiển bởi các chương trình hệ thống và ở mức cao hơn.

Tóm tắt những điều trên, chúng ta có thể đề xuất cấu trúc phần mềm sau (Hình 7.1).

Hình.7.1. Phân loại phần mềm



Việc phân loại phần mềm được đề xuất phần lớn là tùy tiện, vì hiện tại các sản phẩm phần mềm của nhiều công ty đã bắt đầu kết hợp với nhau. yếu tố phần mềm từ các lớp khác nhau. Ví dụ: hệ điều hành Windows, là một tập hợp các chương trình hệ thống, chứa một khối chương trình tiện ích (chống phân mảnh, quét, dọn đĩa, v.v.), cũng như trình xử lý văn bản WordPad, trình soạn thảo đồ họa Paint, thuộc về lớp chương trình ứng dụng.

Vị trí trung tâm trong cấu trúc phần mềm do hệ điều hành (OS) chiếm giữ. Nó là “một hệ thống các chương trình được thiết kế để cung cấp một mức độ hiệu quả nhất định cho hệ thống máy tính số bằng cách điều khiển tự động hoạt động của nó và phạm vi dịch vụ được cung cấp cho người dùng.”

Hệ điều hành là một bộ chương trình máy tính cơ bản cung cấp giao diện người dùng, kiểm soát phần cứng máy tính, làm việc với các tệp, đầu vào và đầu ra dữ liệu cũng như thực thi các chương trình ứng dụng và tiện ích.

Hệ điều hành cho phép bạn loại bỏ các chi tiết triển khai phần cứng, cung cấp cho các nhà phát triển phần mềm những thông tin tối thiểu. bộ yêu cầu chức năng. Theo quan điểm của những người bình thường, những người sử dụng thiết bị máy tính thông thường, HĐH cũng bao gồm các chương trình giao diện người dùng.

Hệ điều hành - một chương trình tải khi máy tính được bật. Nó thực hiện đối thoại với người dùng, quản lý máy tính, tài nguyên của nó (RAM, dung lượng ổ đĩa, v.v.) và khởi chạy các chương trình ứng dụng khác để thực thi. Hệ điều hành cung cấp cho người dùng và các chương trình ứng dụng Một cách thuận tiện giao tiếp (giao diện) với các thiết bị máy tính cá nhân.

Các hệ điều hành phổ biến nhất: MS-DOS, OS/2, UNIX, WINDOWS, LINUX, WINDOWS NT, chúng có những sửa đổi khác nhau.

Các chức năng chính (HĐH đơn giản):

Truy cập được tiêu chuẩn hóa vào các thiết bị ngoại vi (thiết bị đầu vào/đầu ra);

Quản lý RAM (phân phối giữa các tiến trình, bộ nhớ ảo);

Kiểm soát quyền truy cập vào dữ liệu trên phương tiện không ổn định (chẳng hạn như ổ cứng, CD, v.v.), thường sử dụng hệ thống tệp;

Giao diện người dùng;

Hoạt động mạng, hỗ trợ ngăn xếp giao thức

Chức năng bổ sung:

Thực hiện các nhiệm vụ song song hoặc giả song song (đa nhiệm);

Tương tác giữa các tiến trình: trao đổi dữ liệu, đồng bộ hóa lẫn nhau;

Bảo vệ chính hệ thống cũng như dữ liệu và chương trình của người dùng khỏi các hành động độc hại của người dùng hoặc ứng dụng;

Phân biệt quyền truy cập và phương thức hoạt động của nhiều người dùng (xác thực, ủy quyền).

Một chương trình che giấu sự thật về phần cứng và trình bày một danh sách đơn giản các tệp có thể đọc và ghi, tức là. ., Hệ điều hành không chỉ loại bỏ nhu cầu làm việc trực tiếp với đĩa và cung cấp giao diện đơn giản, hướng đến tệp mà còn ẩn chứa nhiều công việc khó chịu với các ngắt, bộ đếm thời gian, tổ chức bộ nhớ và các yếu tố cấp thấp khác. Trong mỗi trường hợp, quy trình do HĐH cung cấp đơn giản và dễ sử dụng hơn nhiều so với các hành động mà phần cứng cơ bản yêu cầu.

Theo quan điểm của người dùng, HĐH thực hiện chức năng của một máy ảo, đơn giản và dễ làm việc hơn so với làm việc trực tiếp với phần cứng tạo nên máy tính thật và đối với các chương trình, HĐH cung cấp một số khả năng mà chúng có thể sử dụng bằng cách sử dụng đội đặc biệt, gọi điện cuộc gọi hệ thống.

Khái niệm xem HĐH chủ yếu như một giao diện thân thiện với người dùng là chế độ xem từ trên xuống. Một góc nhìn từ dưới lên thay thế đưa ra ý tưởng về HĐH như một cơ chế kiểm soát tất cả các bộ phận của máy tính. Máy tính hiện đại bao gồm bộ xử lý, bộ nhớ, đĩa, thiết bị mạng, máy in và một số lượng lớn các thiết bị khác. Theo cách tiếp cận thứ hai, công việc của HĐH là cung cấp sự phân phối có tổ chức và có kiểm soát các bộ xử lý, bộ nhớ và thiết bị I/O giữa các chương trình khác nhau đang cạnh tranh để sử dụng chúng.

Các loại hệ điều hành.

Lịch sử phát triển hệ điều hành đã có từ nhiều năm trước. Hệ điều hành xuất hiện và phát triển trong quá trình cải tiến phần cứng máy tính nên những sự kiện này có mối liên hệ chặt chẽ với nhau về mặt lịch sử. Sự phát triển của máy tính đã dẫn đến sự xuất hiện của một số lượng lớn các hệ điều hành khác nhau, không phải tất cả chúng đều được biết đến rộng rãi.

Ở cấp độ cao nhất là Hệ điều hành dành cho máy tính lớn. Những cỗ máy khổng lồ này vẫn có thể được tìm thấy trong các tổ chức lớn. Máy tính lớn khác với máy tính cá nhân ở khả năng đầu vào/đầu ra. Máy tính lớn với hàng nghìn đĩa và hàng terabyte dữ liệu là khá phổ biến. Máy tính lớn hoạt động như máy chủ web và máy chủ mạnh mẽ cho các doanh nghiệp và tập đoàn lớn. Hệ điều hành máy tính lớn được thiết kế chủ yếu để xử lý nhiều công việc đồng thời, hầu hết trong số đó yêu cầu số lượng lớn Các hoạt động vào/ra. Họ thường thực hiện ba loại hoạt động: xử lý hàng loạt, xử lý giao dịch ( hoạt động nhóm) và chia sẻ thời gian. Xử lý hàng loạt thực hiện các tác vụ tiêu chuẩn cho người dùng làm việc ở chế độ tương tác. Hệ thống xử lý giao dịch quản lý số lượng yêu cầu rất lớn, chẳng hạn như đặt vé máy bay. Mỗi yêu cầu riêng lẻ tuy nhỏ nhưng hệ thống phải đáp ứng hàng trăm, hàng nghìn yêu cầu mỗi giây. Hệ thống chia sẻ thời gian cho phép nhiều người dùng từ xa thực hiện đồng thời các tác vụ của họ trên một máy, chẳng hạn như làm việc với cơ sở dữ liệu lớn. Tất cả các chức năng này đều có liên quan chặt chẽ với nhau và hệ điều hành máy tính lớn thực hiện tất cả những chức năng đó. Một ví dụ về hệ điều hành máy tính lớn là OS/390.

Một cấp độ dưới đây là hệ điều hành máy chủ. Máy chủ là máy tính đa bộ xử lý hoặc thậm chí là máy tính lớn. Các hệ điều hành này đồng thời phục vụ nhiều người dùng và cho phép họ chia sẻ tài nguyên phần mềm và phần cứng với nhau. Máy chủ cũng cung cấp khả năng làm việc với các thiết bị in, tập tin hoặc Internet. Các nhà cung cấp Internet thường vận hành nhiều máy chủ để hỗ trợ truy cập mạng đồng thời cho nhiều khách hàng. Máy chủ lưu trữ các trang web và xử lý các yêu cầu đến. UNIX và Windows 2000 là những hệ điều hành máy chủ điển hình. Bây giờ hệ điều hành Linux cũng đã bắt đầu được sử dụng cho mục đích này.

Loại tiếp theo bao gồm Hệ điều hành dành cho máy tính cá nhân. Công việc của họ là cung cấp giao diện thân thiện với người dùng cho một người dùng. Những hệ thống như vậy được sử dụng rộng rãi trong công việc hàng ngày. Các hệ điều hành chính trong danh mục này là nền tảng Windows, Linux và hệ điều hành máy tính Macintosh.

Một loại hệ điều hành khác là các hệ thống thời gian thực. Thông số chính của các hệ thống như vậy là thời gian. Ví dụ, trong hệ thống điều khiển sản xuất, máy tính thời gian thực thu thập dữ liệu quy trình công nghiệp và sử dụng nó để điều khiển thiết bị. Các quy trình như vậy phải đáp ứng yêu cầu nghiêm ngặt về thời gian. Ví dụ, nếu một chiếc ô tô di chuyển dọc theo băng chuyền, thì mỗi hành động phải được thực hiện tại một thời điểm được xác định nghiêm ngặt. Nếu robot hàn hàn một đường may quá sớm hoặc quá muộn sẽ gây ra những hư hỏng không thể khắc phục được cho sản phẩm. Hệ thống VxWorks và QNX là hệ điều hành thời gian thực.

Hệ điều hành nhúngđược sử dụng trong máy tính bỏ túi và các thiết bị gia dụng. PDA là một máy tính nhỏ bỏ vừa trong túi của bạn và thực hiện một số chức năng nhỏ, chẳng hạn như danh bạ điện thoại và sổ ghi chú. Các hệ thống nhúng điều khiển hoạt động của các thiết bị gia dụng không được coi là máy tính nhưng có các đặc điểm giống như hệ thống thời gian thực, nhưng có những hạn chế về kích thước, bộ nhớ và nguồn điện đặc biệt khiến chúng trở thành một loại riêng. Ví dụ về các hệ điều hành như vậy là PalmOS và Windows CE (Điện tử tiêu dùng).

Các hệ điều hành nhỏ nhất chạy trên nhưng chiêc thẻ thông minh,đó là một thiết bị có kích thước bằng thẻ tín dụng và chứa bộ xử lý trung tâm. Những hệ điều hành như vậy phải chịu những hạn chế rất nghiêm ngặt về sức mạnh bộ xử lý và bộ nhớ. Một số hệ điều hành chỉ có thể xử lý một giao dịch, chẳng hạn như thanh toán điện tử, nhưng các hệ điều hành khác thực hiện các chức năng phức tạp hơn.

Phân loại hệ điều hành.

Hệ điều hành được phân loại theo:

Số lượng người dùng đồng thời: một người dùng, nhiều người dùng;

Số lượng tiến trình chạy đồng thời dưới sự điều khiển của hệ thống: đơn nhiệm, đa nhiệm;

Số lượng bộ xử lý được hỗ trợ: bộ xử lý đơn, đa bộ xử lý;

Bit mã hệ điều hành: 8 bit, 16 bit, 32 bit, 64 bit;

Kiểu giao diện: lệnh (văn bản) và hướng đối tượng (đồ họa);

Kiểu người dùng truy cập vào máy tính: xử lý hàng loạt, chia sẻ thời gian, thời gian thực;

Loại sử dụng tài nguyên: mạng, cục bộ.

Theo dấu hiệu phân loại đầu tiên, hệ điều hành nhiều người dùng, không giống như hệ điều hành một người dùng, hỗ trợ hoạt động đồng thời của một số người dùng trên một máy tính ở các thiết bị đầu cuối khác nhau.

Dấu hiệu thứ hai liên quan đến việc chia hệ điều hành thành đa tác vụ và đơn tác vụ. Khái niệm đa nhiệm có nghĩa là hỗ trợ thực hiện song song một số chương trình hiện có trong cùng một hệ thống máy tính tại một thời điểm. Hệ điều hành đơn tác vụ hỗ trợ chế độ thực thi chỉ một chương trình tại một thời điểm.

Theo tính năng thứ ba, hệ điều hành đa bộ xử lý, không giống như hệ điều hành đơn bộ xử lý, hỗ trợ chế độ phân phối tài nguyên của một số bộ xử lý để giải quyết một tác vụ cụ thể.

Dấu hiệu thứ tư chia hệ điều hành thành 8-, 16-, 32- và 64-bit. Điều này ngụ ý rằng dung lượng bit của hệ điều hành không thể vượt quá dung lượng bit của bộ xử lý.

Theo đặc điểm thứ năm, hệ điều hành được chia theo loại giao diện người dùng thành hướng đối tượng (thường có giao diện đồ họa) và dựa trên lệnh (với giao diện dựa trên văn bản). Theo đặc điểm thứ sáu, hệ điều hành được chia thành các hệ thống:

Xử lý hàng loạt, trong đó một gói (bộ) nhiệm vụ được hình thành từ các chương trình sẽ được thực thi, được nhập vào máy tính và thực hiện theo thứ tự ưu tiên, có thể xem xét mức độ ưu tiên;

Chia sẻ thời gian (TSR), cung cấp chế độ truy cập hộp thoại (tương tác) đồng thời vào máy tính của một số người dùng trên các thiết bị đầu cuối khác nhau, lần lượt được phân bổ tài nguyên máy, được hệ điều hành điều phối theo nguyên tắc dịch vụ nhất định;

Thời gian thực, cung cấp thời gian đảm bảo nhất định để máy đáp ứng yêu cầu của người dùng với sự kiểm soát của nó bởi bất kỳ sự kiện, quy trình hoặc đối tượng nào bên ngoài máy tính.

Theo tiêu chí phân loại thứ bảy, hệ điều hành được chia thành mạng và cục bộ. Hệ điều hành mạng được thiết kế để quản lý tài nguyên của các máy tính được kết nối với mạng nhằm mục đích chia sẻ dữ liệu và cung cấp các phương tiện mạnh mẽ để hạn chế quyền truy cập vào dữ liệu nhằm đảm bảo tính toàn vẹn và an toàn của chúng, cũng như nhiều khả năng dịch vụ để sử dụng tài nguyên mạng.

Trong hầu hết các trường hợp, hệ điều hành mạng được cài đặt trên một hoặc nhiều máy chủ khá mạnh chỉ dành riêng cho việc duy trì mạng và các tài nguyên được chia sẻ. Tất cả các hệ điều hành khác sẽ được coi là cục bộ và có thể được sử dụng trên bất kỳ máy tính cá nhân nào cũng như trên một máy tính riêng được kết nối với mạng dưới dạng máy trạm hoặc máy khách.

Các thành phần phần mềm hệ điều hành cung cấp các chức năng quản lý máy tính và triển khai như lập kế hoạch và phân phối tài nguyên, quản lý đầu vào/đầu ra thông tin và quản lý dữ liệu. Dung lượng của HĐH và số lượng chương trình cấu thành của nó phần lớn được xác định bởi loại máy tính được sử dụng, độ phức tạp của các chế độ hoạt động của máy tính và máy tính, thành phần của phương tiện kỹ thuật, v.v. Sử dụng hệ điều hành cho phép bạn:

Tăng dung lượng máy tính, tức là sự gia tăng tổng lượng công việc được máy tính thực hiện trong một đơn vị thời gian;

Giảm thời gian phản hồi của hệ thống, tức là giảm khoảng thời gian giữa thời điểm nhận nhiệm vụ trên máy tính và thời điểm nhận kết quả;

Giám sát hiệu suất của phần cứng và phần mềm;

Hỗ trợ người dùng và người vận hành trong việc sử dụng phần cứng và phần mềm, đảm bảo hoạt động của họ;

Quản lý chương trình, dữ liệu trong quá trình tính toán;

Đảm bảo khả năng thích ứng của máy tính, tính linh hoạt về cấu trúc của nó, bao gồm khả năng thay đổi và bổ sung phần cứng và phần mềm mới.

Hệ điều hành là một phức hợp gồm các phần mềm hệ thống và tiện ích. Một mặt, nó dựa vào phần mềm máy tính cơ bản có trong hệ thống BIOS của nó ( hệ thống cơ bảnđầu ra đầu vào); mặt khác, bản thân nó là sự hỗ trợ cho các phần mềm ở cấp độ cao hơn - ứng dụng và hầu hết các ứng dụng dịch vụ. Các ứng dụng hệ điều hành thường được gọi là các chương trình được thiết kế để hoạt động dưới sự kiểm soát của hệ thống này.

Chức năng chính của mọi hệ điều hành là hòa giải. Nó bao gồm việc cung cấp một số loại giao diện:

Giao diện giữa người dùng và phần cứng máy tính (giao diện người dùng);

Giao diện giữa phần mềm và phần cứng (giao diện phần cứng-phần mềm);

Giao diện giữa các loại phần mềm khác nhau (giao diện phần mềm).

Ngay cả đối với một nền tảng phần cứng, chẳng hạn như IBM PC, cũng có một số hệ điều hành. Sự khác biệt giữa chúng được xem xét theo hai loại: bên trong và bên ngoài. Sự khác biệt bên trong được đặc trưng bởi các phương pháp thực hiện các chức năng cơ bản. Sự khác biệt bên ngoài được xác định bởi tính sẵn có và khả năng tiếp cận các ứng dụng của một hệ thống nhất định cần thiết để đáp ứng các yêu cầu kỹ thuật cho một nơi làm việc cụ thể.

Các tiêu chí chính cho cách tiếp cận lựa chọn hệ điều hành:

Hiện đang có sẵn một số lượng lớn hệ điều hành và người dùng phải đối mặt với nhiệm vụ xác định hệ điều hành nào tốt hơn hệ điều hành khác (theo các tiêu chí nhất định). Rõ ràng là không có hệ thống lý tưởng nào; mỗi hệ thống đều có ưu điểm và nhược điểm riêng. Khi chọn một hệ điều hành, người dùng phải tưởng tượng hệ điều hành này hoặc hệ điều hành kia sẽ cung cấp giải pháp cho các vấn đề của mình như thế nào.

Để chọn một hoặc một hệ điều hành khác, bạn cần biết:

Hệ điều hành chạy trên nền tảng phần cứng nào và tốc độ bao nhiêu;

Hệ điều hành hỗ trợ phần cứng ngoại vi nào;

Hệ điều hành đáp ứng đầy đủ nhu cầu của người dùng như thế nào, tức là hệ thống có những chức năng gì;

Cách hệ điều hành tương tác với người dùng là gì, tức là giao diện trực quan, tiện lợi, dễ hiểu và quen thuộc như thế nào đối với người dùng;

Có những lời khuyên hữu ích, sách tham khảo tích hợp, v.v.;

Độ tin cậy của hệ thống là gì, tức là khả năng chống lại lỗi của người dùng, lỗi thiết bị, v.v.;

Hệ điều hành cung cấp những khả năng gì cho việc tổ chức mạng?

Hệ điều hành có cung cấp khả năng tương thích với các hệ điều hành khác không;

Hệ điều hành có những công cụ gì để phát triển các chương trình ứng dụng?

Hệ điều hành có hỗ trợ nhiều ngôn ngữ quốc gia khác nhau không?

Những gói phần mềm ứng dụng đã biết nào có thể được sử dụng khi làm việc với hệ thống này;

Cách hệ điều hành bảo vệ thông tin và chính hệ thống.

Cơ bản về hệ điều hành. Khóa học thuyết trình. Karpov V.E., Konkov K.A.

M.: Đại học Công nghệ Thông tin Internet, 2005. - 536 tr.

Cuốn sách là một khóa đào tạo có hệ thống về lý thuyết hệ điều hành. Nó xem xét các nguyên tắc cơ bản của việc xây dựng và thiết kế các tính năng của hệ điều hành hiện đại. Các tài liệu lý thuyết được bổ sung với nhiều ví dụ thực tế. Dành cho sinh viên của các cơ sở giáo dục đại học đang theo học các chuyên ngành trong lĩnh vực công nghệ thông tin.

Định dạng: pdf

Kích cỡ: 5,6MB

Tải xuống: drive.google

Nội dung
Phần I. Ôn tập 13
Bài giảng 1. Giới thiệu 13
Hệ điều hành là gì 13
Tóm tắt lịch sử sự phát triển của hệ thống máy tính 16
Các khái niệm cơ bản, khái niệm OS 24
Đặc điểm kiến ​​trúc của OS 27
Phân loại hệ điều hành 32
Kết luận 34
Phần II. Các tiến trình và sự hỗ trợ của chúng trong hệ điều hành 41
Bài giảng 2. Quy trình 41
Khái niệm quy trình 41
Trạng thái quy trình 43
Hoạt động quy trình và các khái niệm liên quan 46
Kết luận 54
Bài giảng 3. Quy trình lập kế hoạch 59
Cấp quy hoạch 59
Tiêu chí quy hoạch và yêu cầu đối với thuật toán 61
Các phương án quy hoạch 62
Lập kế hoạch ưu tiên và không ưu tiên 64
Thuật toán quy hoạch 65
Kết luận 82
Bài giảng 4. Quá trình hợp tác và các khía cạnh chính của tổ chức logic của nó 87
Quá trình giao tiếp 87
Các loại phương tiện trao đổi thông tin 89
Tổ chức logic của cơ chế truyền thông tin 90
Chủ đề hiệu suất 96
Kết luận 100
Bài giảng 5. Thuật toán đồng bộ 105
Xen kẽ, điều kiện chủng tộc và loại trừ lẫn nhau 105
Phần quan trọng 108
Các thuật toán phần mềm tổ chức tương tác của các tiến trình 111
Hỗ trợ phần cứng để loại trừ lẫn nhau 117
Kết luận 119
Bài giảng 6. Cơ chế đồng bộ 123
Ngữ nghĩa 123
Màn hình 126
Tin nhắn 129
Sự tương đương của các tín hiệu, màn hình và thông điệp 130
Kết luận 133
Bài giảng 7. Ngõ cụt 141
Giới thiệu 141
Điều kiện bế tắc 143
Những phương hướng chính đấu tranh chống ngõ cụt 143
Bỏ qua vấn đề bế tắc 144
Biện pháp ngăn ngừa bế tắc 144
Phát hiện bế tắc 149
Phục hồi từ bế tắc 150
Kết luận 151
Phần III. Quản lý bộ nhớ 155
Bài 8. Tổ chức bộ nhớ máy tính. Các sơ đồ quản lý bộ nhớ đơn giản nhất 155
Giới thiệu 155
Các sơ đồ quản lý bộ nhớ đơn giản nhất 161
Bộ nhớ trang 166
Phân đoạn và tổ chức bộ nhớ trang phân đoạn 168
Kết luận 171
Bài giảng 9. Bộ nhớ ảo. Hỗ trợ kiến ​​trúc cho bộ nhớ ảo 175
Khái niệm bộ nhớ ảo 175
Hỗ trợ kiến ​​trúc cho bộ nhớ ảo 177
Kết luận 185
Bài 10. Quản lý bộ nhớ ảo độc lập với phần cứng cấp độ 189
Các tình huống đặc biệt khi làm việc với bộ nhớ 189
Chiến lược quản lý bộ nhớ trang 190
Thuật toán thay thế trang 191
Kiểm soát số lượng trang được phân bổ cho một tiến trình. Bộ làm việc model 197
Trang quỷ 200
Phần mềm hỗ trợ mô hình bộ nhớ tiến trình được phân đoạn.. 201
Một số khía cạnh của chức năng của trình quản lý bộ nhớ.... 203
Kết luận 205
Phần IV. Hệ thống tập tin 209
Bài giảng 11. Tập tin từ góc nhìn của người dùng 209
Giới thiệu 209
Thông tin chung về tập tin 212
Tổ chức và truy cập tập tin 214
Thao tác tập tin 217
Thư mục. Cấu trúc logic tập tin lưu trữ 218
Thao tác trên thư mục 222
Bảo vệ tập tin 223
Kết luận 224
Bài giảng 12. Triển khai hệ thống tập tin 229
Cấu trúc hệ thống tập tin chung 229
Quản lý bộ nhớ ngoài 232
Thực hiện các thư mục 240
Gắn hệ thống tập tin 243
Liên kết tập tin 245
Quy trình hợp tác khi làm việc với file 247
Độ tin cậy của hệ thống tập tin 250
Hiệu suất hệ thống tập tin 254
Thực hiện một số thao tác trên file 256
Kiến trúc hệ thống tập tin hiện đại 259
Kết luận 260
Phần V. I/O 265
Bài 13: Hệ thống điều khiển I/O 265
Nguyên tắc vật lý của tổ chức đầu vào-đầu ra 266
Nguyên tắc logic của tổ chức đầu vào-đầu ra 276
Thuật toán lập lịch yêu cầu tới đĩa cứng 286
Kết luận 291
Phần VI. Mạng và hệ điều hành mạng 295
Bài giảng 14. Mạng và hệ điều hành mạng 295
Tại sao các máy tính được kết nối trong mạng 296
Mạng và hệ điều hành phân tán 297
Tương tác của các tiến trình từ xa làm cơ sở cho hoạt động của mạng máy tính 298
Các vấn đề cơ bản về tổ chức logic truyền thông tin giữa các tiến trình từ xa 301
Hiểu giao thức 302
Mô hình đa cấp xây dựng hệ thống máy tính nối mạng 304
Vấn đề về địa chỉ mạng 308
Vấn đề định tuyến trong mạng 315
Kết nối Giao tiếp và truyền dữ liệu bằng tin nhắn 318
Đồng bộ hóa các tiến trình từ xa 320
Kết luận 320
Phần VII. Vấn đề bảo mật hệ điều hành 325
Bài giảng 15. Các khái niệm cơ bản về bảo mật thông tin 325
Giới thiệu 325
Các mối đe dọa an ninh 327
Chính thức hóa cách tiếp cận đảm bảo an toàn thông tin 329
Mật mã là một trong những công nghệ bảo mật cơ bản của OS 331
Kết luận 335
Bài giảng 16. Cơ chế bảo mật của hệ điều hành 339
Nhận dạng và xác thực 339
Ủy quyền. Hạn chế quyền truy cập vào các đối tượng hệ điều hành 342
Phát hiện xâm nhập. Kiểm tra hệ thống an ninh 347
Phân tích một số hệ điều hành phổ biến từ góc độ bảo mật 348
Kết luận 353
Hội thảo 357
Hội thảo 1-2. Giới thiệu khóa đào tạo thực hành. Giới thiệu về Hệ điều hành UNIX 357
Hội thảo 3-4. Các tiến trình trong hệ điều hành UNIX 385
Seminar 5. Tổ chức tương tác tiến trình thông qua pipe và FIFO trong UNIX 403
Hội thảo 6-7. Công cụ IPC của hệ thống V. Tổ chức công việc với bộ nhớ dùng chung trong UNIX. Khái niệm về chủ đề 431
Seminar 8. Semaphores trong UNIX như một phương tiện đồng bộ hóa các tiến trình 465
Hội thảo 9: Hàng đợi tin nhắn trong UNIX 479
Hội thảo 10-11. Tổ chức hệ thống tập tin trong UNIX. Làm việc với các tập tin và thư mục. Hiểu các tập tin ánh xạ bộ nhớ 501
Hội thảo 12-13. Tổ chức đầu vào-đầu ra trong UNIX. Các tập tin thiết bị. Thiết bị ngắt. Tín hiệu trong UNIX 539
Hội thảo 14-15. Họ giao thức TCP/IP. Các socket trong UNIX và những điều cơ bản khi làm việc với chúng 575
Văn học 627

Hệ điều hành (OS) là một chương trình cung cấp khả năng sử dụng hợp lý thiết bị máy tính theo cách thân thiện với người dùng. Phần mở đầu giới thiệu các chủ đề được học trong khóa học này. Đầu tiên chúng ta sẽ cố gắng trả lời câu hỏi, cái gì là hệ điều hành. Tiếp theo là phân tích sự tiến hóa hệ điều hành và một câu chuyện về sự xuất hiện của các khái niệm và thành phần cơ bản của xã hội hiện đại hệ điều hành. Cuối cùng sẽ đưa ra cách phân loại hệ điều hành từ quan điểm của các đặc điểm kiến ​​trúc và việc sử dụng tài nguyên máy tính.

Hệ thống vận hành là gì

Cấu trúc hệ thống máy tính

Bất kỳ hệ thống máy tính nào bao gồm những gì? Thứ nhất, từ những gì ở các nước nói tiếng Anh thường được gọi là từ phần cứng hoặc hỗ trợ kỹ thuật: CPU, bộ nhớ, màn hình, thiết bị đĩa, v.v., được thống nhất bởi một kết nối đường trục gọi là bus. Một số thông tin về kiến ​​trúc máy tính có trong Phụ lục 1 của bài giảng này.

Thứ hai, một hệ thống máy tính bao gồm phần mềm. Tất cả phần mềm thường được chia thành hai phần: ứng dụng và hệ thống. Phần mềm ứng dụng thường bao gồm nhiều loại chương trình ngân hàng và kinh doanh khác, trò chơi, trình xử lý văn bản, v.v. Phần mềm hệ thống thường đề cập đến các chương trình hỗ trợ vận hành và phát triển các chương trình ứng dụng. Phải nói rằng việc phân chia thành phần mềm ứng dụng và phần mềm hệ thống có phần tùy tiện và phụ thuộc vào người thực hiện phân chia. Vì vậy, một người dùng bình thường, thiếu kinh nghiệm lập trình, có thể coi Microsoft Word là một chương trình hệ thống, nhưng theo quan điểm của người lập trình, nó là một ứng dụng. Trình biên dịch ngôn ngữ C đối với một lập trình viên thông thường là một chương trình hệ thống và đối với một lập trình viên hệ thống, nó là một chương trình ứng dụng. Bất chấp cạnh mờ này, tình huống này có thể được hiển thị dưới dạng một chuỗi các lớp (xem Hình 1.1), làm nổi bật riêng phần phổ biến nhất của phần mềm hệ thống - hệ điều hành:

Cơm. 1.1. Các lớp phần mềm hệ thống máy tính

Hệ điều hành là gì

Hầu hết người dùng đều có kinh nghiệm vận hành các hệ điều hành, nhưng tuy nhiên họ sẽ khó đưa ra một định nghĩa chính xác cho khái niệm này. Chúng ta hãy xem xét nhanh các quan điểm chính.

Hệ điều hành như một máy ảo

Trong quá trình phát triển hệ điều hành trừu tượng hóa được sử dụng rộng rãi, đây là một phương pháp đơn giản hóa quan trọng và cho phép bạn tập trung vào sự tương tác của các thành phần cấp cao của hệ thống, bỏ qua các chi tiết triển khai chúng. Trong trường hợp này hệ điều hànhđại diện cho giao diện giữa người dùng và máy tính.

Kiến trúc của hầu hết các máy tính ở cấp độ hướng dẫn máy rất bất tiện cho việc sử dụng các chương trình ứng dụng. Ví dụ: làm việc với đĩa đòi hỏi kiến ​​​​thức về cấu trúc bên trong của thành phần điện tử - bộ điều khiển để nhập lệnh quay đĩa, tìm kiếm và định dạng các bản nhạc, các phần đọc và viết, v.v. Rõ ràng là một lập trình viên trung bình không thể tính đến tất cả các tính năng của thiết bị (theo thuật ngữ hiện đại là phát triển trình điều khiển thiết bị), mà phải có một trình điều khiển cao cấp đơn giản. Mức độ trừu tượng hóa, chẳng hạn, biểu diễn đĩa không gian thông tin dưới dạng một tập hợp các tệp. Tệp có thể được mở để đọc hoặc ghi, được sử dụng để truy xuất hoặc đặt lại thông tin, sau đó đóng lại. Về mặt khái niệm, điều này đơn giản hơn việc lo lắng về các chi tiết di chuyển đầu đĩa hoặc tổ chức hoạt động của động cơ. Tương tự, với sự trợ giúp của các tính năng trừu tượng đơn giản và rõ ràng, tất cả các chi tiết không cần thiết của tổ chức sẽ bị ẩn khỏi lập trình viên. ngắt quãng, hoạt động hẹn giờ, quản lý bộ nhớ, v.v. Hơn nữa, trên các hệ thống máy tính hiện đại, bạn có thể tạo ảo giác về kích thước và số lượng RAM không giới hạn bộ vi xử lý. Có tất cả điều này hệ điều hành. Như vậy, hệ điều hành xuất hiện với người dùng máy ảo, việc này dễ xử lý hơn là xử lý trực tiếp với phần cứng máy tính.

Hệ điều hành đóng vai trò quản lý tài nguyên

Hệ điều hànhđược thiết kế để kiểm soát tất cả các phần của kiến ​​trúc máy tính rất phức tạp. Ví dụ, hãy xem xét điều gì sẽ xảy ra nếu một số chương trình chạy trên cùng một máy tính cố gắng xuất ra máy in cùng một lúc. Chúng tôi sẽ kết thúc với một mớ bòng bong các dòng và trang được tạo bởi các chương trình khác nhau. Hệ điều hành ngăn chặn kiểu hỗn loạn này bằng cách lưu vào bộ đệm thông tin có thể in được trên đĩa và xếp hàng để in. Đối với máy tính nhiều người dùng, nhu cầu quản lý và bảo vệ tài nguyên càng rõ ràng hơn. Kể từ đây, hệ điều hành , Làm sao người quản lý tài nguyên, thực hiện phân phối có trật tự và có kiểm soát bộ vi xử lý, bộ nhớ và các tài nguyên khác giữa các chương trình khác nhau.

Hệ điều hành là người bảo vệ người dùng và chương trình

Nếu một hệ thống máy tính cho phép nhiều người dùng làm việc cùng nhau thì vấn đề tổ chức các hoạt động an toàn của họ sẽ nảy sinh. Cần đảm bảo an toàn cho thông tin trên đĩa để không ai có thể xóa, làm hỏng file của người khác. Chương trình của một người dùng không được phép tự ý can thiệp vào hoạt động của chương trình của người dùng khác. Cần phải ngăn chặn các nỗ lực sử dụng trái phép hệ thống máy tính. Tất cả những hoạt động này được thực hiện hệ điều hành với tư cách là người tổ chức hoạt động an toàn của người dùng và chương trình của họ. Từ quan điểm này hệ điều hành dường như là một hệ thống an ninh nhà nước, được giao cho cảnh sát và các chức năng phản gián.

Hệ điều hành như một hạt nhân chạy liên tục

Cuối cùng, chúng ta có thể đưa ra định nghĩa sau: hệ điều hành là một chương trình chạy liên tục trên máy tính và tương tác với tất cả các chương trình ứng dụng. Có vẻ như đây là một định nghĩa hoàn toàn chính xác, nhưng, như chúng ta sẽ thấy sau, trong nhiều định nghĩa hiện đại. các hệ điều hành Chỉ một phần hoạt động liên tục trên máy tính hệ điều hành, thường được gọi là cốt lõi của nó.

Như chúng ta có thể thấy, có nhiều quan điểm về việc nó là gì hệ điều hành. Không thể đưa ra một định nghĩa chặt chẽ đầy đủ cho nó. Chúng ta sẽ dễ dàng hơn khi nói không nên ăn gì hệ điều hành, và tại sao nó lại cần thiết và nó có tác dụng gì. Để làm rõ vấn đề này, hãy xem xét lịch sử phát triển của hệ thống máy tính.

Tóm tắt lịch sử về sự phát triển của hệ thống máy tính

Chúng ta sẽ xem xét lịch sử phát triển của máy tính chứ không phải các hệ điều hành bởi vì phần cứng và phần mềm đã cùng nhau phát triển, ảnh hưởng lẫn nhau. Sự xuất hiện của năng lực kỹ thuật mới đã dẫn đến sự đột phá trong việc tạo ra các chương trình tiện lợi, hiệu quả và an toàn cũng như những ý tưởng mới trong lĩnh vực phần mềm đã kích thích việc tìm kiếm các giải pháp kỹ thuật mới. Chính những tiêu chí này - sự tiện lợi, hiệu quả và bảo mật - đã đóng vai trò là yếu tố chọn lọc tự nhiên trong quá trình phát triển của hệ thống máy tính.

Thời kỳ thứ nhất (1945–1955). Máy đèn. Không có hệ điều hành

Chúng ta sẽ bắt đầu nghiên cứu về sự phát triển của hệ thống máy tính với sự ra đời của hệ thống máy tính điện tử (bỏ qua lịch sử của các thiết bị cơ và cơ điện).

Những bước đầu tiên trong quá trình phát triển máy tính điện tử được thực hiện vào cuối Thế chiến thứ hai. Vào giữa những năm 40, các thiết bị điện toán dạng ống đầu tiên được tạo ra và nguyên tắc của chương trình, được lưu trữ trong bộ nhớ của máy (John Von Neumann, tháng 6 năm 1945). Vào thời điểm đó, cùng một nhóm người đã tham gia thiết kế, vận hành và lập trình máy tính. Đó là một công việc nghiên cứu trong lĩnh vực công nghệ máy tính hơn là việc sử dụng máy tính thường xuyên như một công cụ để giải quyết mọi vấn đề thực tế từ các lĩnh vực ứng dụng khác. Việc lập trình được thực hiện độc quyền bằng ngôn ngữ máy. Về các hệ điều hành không còn nghi ngờ gì nữa, mọi nhiệm vụ tổ chức quá trình tính toán đều được từng lập trình viên từ bảng điều khiển giải quyết thủ công. Chỉ có một người dùng có thể ở điều khiển từ xa. Chương trình được nạp vào bộ nhớ của máy lúc kịch bản hay nhất từ một bộ bài đục lỗ và thường sử dụng bảng chuyển đổi.

Hệ thống máy tính chỉ thực hiện một thao tác tại một thời điểm (đầu vào-đầu ra hoặc tính toán thực tế). Việc gỡ lỗi chương trình được thực hiện từ bảng điều khiển bằng cách nghiên cứu trạng thái bộ nhớ và thanh ghi của máy. Vào cuối thời kỳ này, phần mềm hệ thống đầu tiên xuất hiện: năm 1951–1952. nguyên mẫu của trình biên dịch đầu tiên từ các ngôn ngữ tượng trưng (Fortran, v.v.) đã xuất hiện và vào năm 1954 Nat Rochester đã phát triển một trình biên dịch chương trình cho IBM-701.

Một phần đáng kể thời gian được dành để chuẩn bị khởi động chương trình và bản thân các chương trình được thực hiện một cách tuần tự nghiêm ngặt. Chế độ hoạt động này được gọi là xử lý dữ liệu tuần tự. Nhìn chung, giai đoạn đầu tiên được đặc trưng bởi chi phí cực cao của hệ thống máy tính, số lượng nhỏ và hiệu quả sử dụng thấp.

Giai đoạn thứ hai (1955–đầu thập niên 60). Máy tính dựa trên bóng bán dẫn. Hệ điều hành hàng loạt

Kể từ giữa những năm 50, giai đoạn tiếp theo trong quá trình phát triển của công nghệ máy tính bắt đầu gắn liền với sự xuất hiện của nền tảng kỹ thuật mới - các phần tử bán dẫn. Ứng dụng Linh kiện bán dẫn thay vì thường xuyên bị đốt cháy điện tử đènđã làm tăng độ tin cậy của máy tính. Máy móc giờ đây có thể hoạt động liên tục đủ lâu để có thể được giao thực hiện các nhiệm vụ thực tế quan trọng. Tiêu thụ điện của máy tính giảm và hệ thống làm mát được cải thiện. Kích thước máy tính đã bị thu hẹp. Chi phí vận hành và bảo trì thiết bị máy tính đã giảm. Việc sử dụng máy tính của các công ty thương mại bắt đầu. Đồng thời, có sự phát triển nhanh chóng của các ngôn ngữ thuật toán (LISP, COBOL, ALGOL-60, PL-1, v.v.). Các trình biên dịch thực sự đầu tiên, trình soạn thảo liên kết, thư viện các chương trình toán học và tiện ích đầu tiên xuất hiện. Quá trình lập trình được đơn giản hóa. Không cần thiết phải tạo gánh nặng cho những người giống nhau trong toàn bộ quá trình phát triển và sử dụng máy tính. Trong thời kỳ này, nhân sự được chia thành các lập trình viên và người vận hành, chuyên gia vận hành và nhà phát triển máy tính.

Quá trình chạy chương trình tự nó thay đổi. Bây giờ người dùng mang đến cho chương trình dữ liệu đầu vào dưới dạng một cỗ bài đục lỗ và cho biết các tài nguyên cần thiết. Bộ bài này được gọi là một nhiệm vụ. Người vận hành tải tác vụ vào bộ nhớ của máy và khởi động nó để thực thi. Dữ liệu đầu ra thu được sẽ được in trên máy in và người dùng sẽ nhận lại sau một thời gian (khá dài).

Kết quả là việc thay đổi các tài nguyên được yêu cầu khiến việc thực thi chương trình bị đình chỉ CPU thường nhàn rỗi. Để nâng cao hiệu quả sử dụng máy tính, các công việc có nguồn lực tương tự bắt đầu được tập hợp lại với nhau, tạo ra một loạt công việc.

Những cái đầu tiên xuất hiện hệ thống xử lý hàng loạt , chỉ đơn giản là tự động hóa việc khởi chạy một chương trình từ gói này đến gói khác và do đó làm tăng hệ số tải bộ xử lý. Khi triển khai hệ thống xử lý hàng loạt một ngôn ngữ điều khiển tác vụ chính thức đã được phát triển, với sự trợ giúp của ngôn ngữ này, lập trình viên sẽ thông báo cho hệ thống và người vận hành biết công việc mà anh ta muốn thực hiện trên máy tính. Hệ thống xử lý hàng loạtđã trở thành nguyên mẫu của hiện đại các hệ điều hành, chúng là những chương trình hệ thống đầu tiên được thiết kế để kiểm soát quá trình tính toán.

Thời kỳ thứ ba (đầu thập niên 60 - 1980). Máy tính dựa trên mạch tích hợp. Hệ điều hành đa nhiệm đầu tiên

Giai đoạn quan trọng tiếp theo trong quá trình phát triển của máy tính bắt đầu từ đầu những năm 60 - 1980. Vào thời điểm này, cơ sở kỹ thuật trải qua quá trình chuyển đổi từ các phần tử bán dẫn riêng lẻ thuộc loại Linh kiện bán dẫnĐẾN mạch tích hợp. Công nghệ máy tính đang trở nên đáng tin cậy hơn và rẻ hơn. Sự phức tạp và số lượng các vấn đề được giải quyết bằng máy tính ngày càng tăng. Tăng năng suất bộ vi xử lý.

Việc tăng hiệu quả sử dụng thời gian của bộ xử lý bị cản trở bởi tốc độ thấp của các thiết bị đầu vào-đầu ra cơ học (đầu đọc thẻ đục lỗ nhanh có thể xử lý 1200 thẻ đục lỗ mỗi phút, máy in in tới 600 dòng mỗi phút). Thay vì đọc trực tiếp một gói nhiệm vụ từ thẻ đục lỗ vào bộ nhớ, họ bắt đầu sử dụng bản ghi sơ bộ của nó, đầu tiên là trên băng từ, sau đó là trên đĩa. Khi dữ liệu đầu vào được yêu cầu trong một công việc, nó sẽ được đọc từ đĩa. Tương tự, thông tin đầu ra trước tiên được sao chép vào bộ đệm hệ thống và được ghi vào băng hoặc đĩa và chỉ được in sau khi công việc hoàn thành. Ban đầu, các hoạt động I/O thực tế được thực hiện ngoại tuyến, nghĩa là sử dụng các máy tính độc lập, đơn giản hơn. Sau đó, chúng bắt đầu được thực thi trên cùng một máy tính thực hiện các phép tính, nghĩa là ở chế độ trực tuyến. Kỹ thuật này được gọi là spooling (viết tắt của Simultaneous Peripheral Operation On Line) hoặc bơm và bơm dữ liệu. Đưa công nghệ bơm bơm vào hệ thống hàng loạt cho phép kết hợp các hoạt động đầu vào-đầu ra thực tế của một tác vụ với việc thực hiện một tác vụ khác, nhưng yêu cầu phát triển một thiết bị ngắt quãngđể thông báo bộ xử lý về việc hoàn thành các hoạt động này.

Băng từ là thiết bị truy cập tuần tự, nghĩa là thông tin được đọc từ chúng theo thứ tự được ghi. Sự ra đời của đĩa từ, trong đó thứ tự đọc thông tin không quan trọng, tức là một thiết bị truy cập trực tiếp, đã dẫn đến sự phát triển hơn nữa của các hệ thống máy tính. Khi xử lý một loạt công việc trên băng từ, thứ tự các công việc được đưa ra được xác định theo thứ tự chúng được nhập. Khi xử lý một loạt tác vụ trên đĩa từ, có thể chọn tác vụ tiếp theo để thực thi. Hệ thống hàng loạt bắt đầu lên lịch các nhiệm vụ: tùy thuộc vào sự sẵn có của các nguồn lực được yêu cầu, mức độ khẩn cấp của việc tính toán, v.v. một hoặc một nhiệm vụ khác được chọn cho tài khoản.

Tăng thêm hiệu quả sử dụng bộ xử lýđã đạt được thông qua đa chương trình. Ý tưởng đằng sau đa chương trình là trong khi một chương trình đang thực hiện thao tác I/O, CPU không đứng yên như đã xảy ra ở chế độ chương trình đơn mà thực hiện một chương trình khác. Khi thao tác I/O kết thúc, CPU quay lại thực hiện chương trình đầu tiên. Ý tưởng này gợi nhớ đến hành vi của giáo viên và học sinh trong một kỳ thi. Trong khi một học sinh (chương trình) đang suy nghĩ về câu trả lời cho một câu hỏi (thao tác đầu vào/đầu ra), giáo viên ( CPU) lắng nghe câu trả lời của một học sinh khác (tính toán). Đương nhiên, tình huống này cần có nhiều học sinh trong phòng. Tương tự như vậy, đa chương trình đòi hỏi phải có nhiều chương trình trong bộ nhớ cùng một lúc. Trong trường hợp này, mỗi chương trình được tải vào phần RAM riêng của nó, được gọi là phân vùng và sẽ không ảnh hưởng đến việc thực thi chương trình khác. (Học ​​sinh ngồi ở bàn riêng và không nhắc nhở nhau.)

Sự xuất hiện của đa chương trình đòi hỏi một cuộc cách mạng thực sự trong cấu trúc của hệ thống máy tính. Hỗ trợ phần cứng đóng một vai trò đặc biệt ở đây (nhiều cải tiến phần cứng đã xuất hiện ở giai đoạn phát triển trước đó), các tính năng quan trọng nhất được liệt kê bên dưới.

    Thực hiện các cơ chế bảo vệ. Các chương trình không nên có quyền truy cập độc lập vào phân bổ nguồn lực, dẫn đến sự xuất hiện của các lệnh đặc quyền và không có đặc quyền. Các lệnh đặc quyền, chẳng hạn như lệnh I/O, chỉ có thể được thực thi hệ điều hành. Họ nói nó chạy ở chế độ đặc quyền. Chuyển quyền điều khiển từ chương trình ứng dụng sang hệ điều hành kèm theo sự thay đổi chế độ có kiểm soát. Ngoài ra, đó là tính năng bảo vệ bộ nhớ, cho phép các chương trình người dùng cạnh tranh được tách biệt với nhau và hệ điều hành– từ các chương trình người dùng.

    khả dụng ngắt quãng. Bên ngoài ngắt quãng thông báo hệ điều hành rằng một sự kiện không đồng bộ đã xảy ra, chẳng hạn như một thao tác I/O đã hoàn thành. Nội địa ngắt quãng(ngày nay họ được gọi là tình huống đặc biệt) xảy ra khi việc thực hiện chương trình dẫn đến tình huống cần can thiệp hệ điều hành, chẳng hạn như chia cho 0 hoặc cố gắng vi phạm bảo mật.

    Sự phát triển của tính song song trong kiến ​​trúc. Truy cập bộ nhớ trực tiếp và tổ chức các kênh I/O giúp giải phóng bộ nhớ trung tâm CPU từ các hoạt động thường ngày.

Không kém phần quan trọng trong việc tổ chức đa chương là vai trò hệ điều hành. Cô chịu trách nhiệm cho các hoạt động sau đây.

    Tổ chức giao diện giữa chương trình ứng dụng và hệ điều hành với sự giúp đỡ cuộc gọi hệ thống.

    Xếp hàng công việc trong bộ nhớ và phân bổ bộ xử lý một trong những nhiệm vụ cần thiết là lập kế hoạch sử dụng bộ xử lý.

    Việc chuyển từ công việc này sang công việc khác yêu cầu bảo toàn nội dung của các thanh ghi và cấu trúc dữ liệu cần thiết để hoàn thành công việc, nói cách khác là bối cảnh để đảm bảo quá trình tính toán tiếp tục chính xác.

    Vì bộ nhớ là nguồn tài nguyên có hạn nên cần có các chiến lược quản lý bộ nhớ, nghĩa là cần hợp lý hóa các quy trình đặt, thay thế và truy xuất thông tin từ bộ nhớ.

    Tổ chức lưu trữ thông tin trên phương tiện bên ngoài dưới dạng tệp và chỉ cung cấp quyền truy cập vào một tệp cụ thể cho một số danh mục người dùng nhất định.

    Vì các chương trình có thể cần thực hiện trao đổi dữ liệu được ủy quyền nên cần phải cung cấp cho chúng các phương tiện liên lạc.

    Để trao đổi dữ liệu chính xác, cần giải quyết các tình huống xung đột phát sinh khi làm việc với nhiều nguồn lực khác nhau và cung cấp sự phối hợp bằng các chương trình hành động của họ, tức là. cung cấp cho hệ thống các công cụ đồng bộ hóa.

Các hệ thống đa chương trình đã giúp sử dụng tài nguyên hệ thống hiệu quả hơn (ví dụ: bộ xử lý, bộ nhớ, thiết bị ngoại vi), nhưng chúng vẫn tồn tại trong một thời gian dài lô hàng. Người dùng không thể tương tác trực tiếp với nhiệm vụ và phải thấy trước mọi tình huống có thể xảy ra bằng cách sử dụng thẻ điều khiển. Các chương trình gỡ lỗi vẫn tốn nhiều thời gian và yêu cầu kiểm tra các bản in nhiều trang về nội dung của bộ nhớ và các thanh ghi hoặc sử dụng tính năng in gỡ lỗi.

Sự ra đời của màn hình tia âm cực và việc xem xét lại việc sử dụng bàn phím đã mang lại giải pháp cho vấn đề này. Hệ thống chia sẻ thời gian, hoặc hệ thống chia sẻ thời gian 1) . Trong chúng CPU chuyển đổi giữa các tác vụ không chỉ trong các thao tác I/O mà còn đơn giản sau khi một thời gian nhất định trôi qua. Những chuyển đổi này xảy ra thường xuyên đến mức người dùng có thể tương tác với các chương trình của họ trong khi chúng đang chạy, tức là mang tính tương tác. Kết quả là nhiều người dùng có thể làm việc đồng thời trên một hệ thống máy tính. Mỗi người dùng phải có ít nhất một chương trình trong bộ nhớ cho việc này. Để giảm bớt các hạn chế về số lượng người dùng đang làm việc, ý tưởng không đặt hoàn toàn chương trình thực thi trong RAM đã được đưa ra. Phần chính của chương trình nằm trên đĩa và đoạn cần thực thi vào lúc này có thể được tải vào RAM và phần không cần thiết có thể được tải trở lại đĩa. Điều này được thực hiện bằng cơ chế bộ nhớ ảo. Ưu điểm chính của cơ chế như vậy là tạo ra ảo giác về RAM máy tính không giới hạn.

TRONG hệ thống chia sẻ thời gian người dùng có thể gỡ lỗi chương trình một cách hiệu quả ở chế độ tương tác và ghi thông tin vào đĩa mà không cần sử dụng thẻ đục lỗ mà trực tiếp từ bàn phím. Sự xuất hiện của các tập tin trực tuyến dẫn đến nhu cầu phát triển các hệ thống tập tin tiên tiến.

Song song với sự phát triển bên trong của hệ thống máy tính, sự phát triển bên ngoài của chúng cũng diễn ra. Trước khi bắt đầu thời kỳ này, các hệ thống máy tính thường không tương thích. Mọi người đều có cái riêng của mình hệ điều hành, hệ thống lệnh riêng của nó, v.v. Kết quả là một chương trình chạy thành công trên một loại máy phải được viết lại hoàn toàn và gỡ lỗi lại để chạy trên một loại máy tính khác. Vào đầu thời kỳ thứ ba, ý ​​tưởng tạo ra các dòng máy tương thích với phần mềm hoạt động trong cùng một môi trường hệ điều hành. Dòng máy tính tương thích với phần mềm đầu tiên được xây dựng trên mạch tích hợp, trở thành dòng máy IBM/360. Được phát triển vào đầu những năm 60, dòng máy này vượt trội hơn đáng kể so với các máy thế hệ thứ hai về mặt giá cả/hiệu suất. Tiếp theo là dòng máy tính PDP, không tương thích với dòng IBM và mẫu hàng đầu trong dòng này là PDP-11.

Sức mạnh của “một gia đình” cũng chính là điểm yếu của nó. Nhiều khả năng Khái niệm này (sự hiện diện của tất cả các kiểu máy: từ máy tính mini đến máy khổng lồ; sự phong phú của nhiều thiết bị ngoại vi khác nhau; môi trường khác nhau; người dùng khác nhau) đã tạo ra một hệ thống phức tạp và cồng kềnh. hệ điều hành. Hàng triệu dòng ngôn ngữ hội, được viết bởi hàng nghìn lập trình viên, chứa nhiều lỗi, gây ra hàng loạt ấn phẩm về chúng và cố gắng sửa chúng. Chỉ trong hệ điều hành OS/360 chứa hơn 1000 lỗi đã biết. Tuy nhiên, ý tưởng tiêu chuẩn hóa các hệ điều hànhđã được giới thiệu rộng rãi vào tâm trí người dùng và sau đó nhận được sự phát triển tích cực.

Thời kỳ thứ tư (từ 1980 đến nay). Những máy tính cá nhân. Hệ thống cổ điển, mạng và phân tán

Giai đoạn tiếp theo trong quá trình phát triển của hệ thống máy tính gắn liền với sự xuất hiện của các hệ thống máy tính lớn mạch tích hợp(BIS). Những năm này chứng kiến ​​sự gia tăng mạnh mẽ về mức độ tích hợp và giá thành của vi mạch giảm. Một máy tính không khác biệt về kiến ​​​​trúc so với PDP-11 về giá cả và tính dễ sử dụng, đã có thể truy cập được đối với một cá nhân chứ không phải đối với một bộ phận của doanh nghiệp hoặc trường đại học. Thời đại của máy tính cá nhân đã đến. Ban đầu, máy tính cá nhân được thiết kế để một người dùng sử dụng ở chế độ một chương trình, điều này dẫn đến sự xuống cấp về kiến ​​trúc của những máy tính này và hệ thống của chúng. các hệ điều hành(đặc biệt là không cần bảo vệ tập tin và bộ nhớ, lên lịch tác vụ, v.v.).

Máy tính bắt đầu không chỉ được sử dụng bởi các chuyên gia, điều này đòi hỏi phải phát triển phần mềm “thân thiện”.

Tuy nhiên, sự phức tạp và đa dạng ngày càng tăng của các vấn đề được giải quyết trong những máy tính cá nhân, nhu cầu cải thiện độ tin cậy trong hoạt động của chúng đã dẫn đến sự hồi sinh của hầu hết tất cả các tính năng đặc trưng của kiến ​​​​trúc của các hệ thống máy tính lớn.

Vào giữa những năm 80, các mạng máy tính, bao gồm cả máy tính cá nhân, hoạt động dưới sự kiểm soát của mạng hoặc hệ điều hành phân tán.

TRONG hệ điều hành mạng người dùng có thể truy cập tài nguyên của người khác mạng máy tính, chỉ họ mới biết về sự hiện diện của họ và có thể làm được điều đó. Mỗi máy trên mạng chạy dưới địa chỉ cục bộ của riêng nó hệ điều hành, khác với hệ điều hành máy tính độc lập với sự hiện diện của các công cụ bổ sung (hỗ trợ phần mềm cho các thiết bị giao diện mạng và truy cập tài nguyên từ xa), nhưng những bổ sung này không thay đổi cấu trúc hệ điều hành.

Hệ thống phân phối Ngược lại, bề ngoài trông giống một hệ thống tự hành thông thường. Người dùng không và không nên biết các tập tin của mình được lưu trữ ở đâu - trên máy cục bộ hoặc từ xa - và nơi các chương trình của anh ta được thực thi. Anh ta thậm chí có thể không biết máy tính của mình có được kết nối mạng hay không. Cơ cấu nội bộ hệ điều hành phân tán có sự khác biệt đáng kể so với các hệ thống tự trị.

Trong tương lai, quyền tự chủ hệ điều hành chúng ta sẽ gọi chúng là cổ điển các hệ điều hành.

Nhìn vào các giai đoạn phát triển của hệ thống máy tính, chúng ta có thể xác định sáu chức năng chính được thực hiện bởi hệ thống máy tính cổ điển hệ điều hành trong quá trình tiến hóa:

    Lên lịch công việc và sử dụng bộ xử lý.

    Cung cấp các chương trình với phương tiện truyền thông và đồng bộ hóa.

    Quản lý bộ nhớ.

    Quản lý hệ thống tập tin.

    Quản lý I/O.

    Bảo vệ

Mỗi chức năng trên thường được triển khai dưới dạng một hệ thống con, là một thành phần cấu trúc hệ điều hành. Trong mỗi hệ điều hành tất nhiên, những chức năng này được thực hiện theo cách riêng của chúng ở những mức độ khác nhau. Ban đầu chúng không được thiết kế như các thành phần các hệ điều hành, nhưng xuất hiện trong quá trình phát triển, khi hệ thống máy tính trở nên thuận tiện, hiệu quả và an toàn hơn. Sự phát triển của các hệ thống máy tính do con người tạo ra đã đi theo con đường này, nhưng chưa ai chứng minh được rằng đây là con đường khả thi duy nhất cho sự phát triển của chúng. hệ điều hành tồn tại bởi vì sự tồn tại của chúng hiện là một cách hợp lý để sử dụng các hệ thống máy tính. Sự xem xét nguyên tắc chung và các thuật toán để thực hiện các chức năng của chúng và cấu thành nội dung của hầu hết khóa học của chúng tôi, trong đó các hệ thống con được liệt kê sẽ được mô tả một cách nhất quán.

Các khái niệm cơ bản, khái niệm hệ điều hành

Trong quá trình tiến hóa, một số khái niệm quan trọng đã nảy sinh và trở thành một phần không thể thiếu trong lý thuyết và thực tiễn. hệ điều hành. Các khái niệm được đề cập trong phần này sẽ được gặp và giải thích trong suốt khóa học. Một mô tả ngắn gọn về chúng được đưa ra ở đây.

Cuộc gọi hệ thống

Tại bất kỳ hệ điều hành hỗ trợ cơ chế cho phép các chương trình người dùng truy cập các dịch vụ kernel hệ điều hành. TRONG các hệ điều hành máy tính nổi tiếng nhất của Liên Xô BESM-6, phương tiện “giao tiếp” tương ứng với kernel được gọi là ngoại mã, trong các hệ điều hành IBM gọi chúng là macro hệ thống, v.v. TRONG hệ điều hành Unix những công cụ như vậy được gọi là cuộc gọi hệ thống.

Cuộc gọi hệ thống (cuộc gọi hệ thống) là giao diện giữa hệ điều hành và chương trình người dùng. Họ tạo, xóa và sử dụng nhiều đối tượng khác nhau, những đối tượng chính là các tiến trình và tệp. Chương trình người dùng yêu cầu một dịch vụ từ hệ điều hành, thực hiện cuộc gọi hệ thống. Có thư viện thủ tục nạp thanh ghi máy thông số nhất định và thực hiện ngắtbộ xử lý, sau đó quyền điều khiển được chuyển giao cho người xử lý việc này gọi, bao gồm trong lõi hệ điều hành. Mục đích của các thư viện như vậy là tạo ra cuộc gọi hệ thống tương tự như bình thường gọi các chương trình con.

Sự khác biệt chính là khi cuộc gọi hệ thống Tác vụ sẽ chuyển sang chế độ đặc quyền hoặc chế độ kernel. Đó là lý do tại sao cuộc gọi hệ thốngđôi khi còn được gọi là phần mềm sự gián đoạn, không giống như phần cứng ngắt quãng thường được gọi đơn giản hơn sự gián đoạn.

Mã kernel chạy ở chế độ này hệ điều hành, và nó được thực thi trong không gian địa chỉ và trong ngữ cảnh của tác vụ gọi nó. Vì vậy cốt lõi hệ điều hành có toàn quyền truy cập vào bộ nhớ chương trình của người dùng và khi cuộc gọi hệ thống chỉ cần truyền địa chỉ của một hoặc một số vùng bộ nhớ với các tham số là đủ gọi và địa chỉ của một hoặc nhiều vùng bộ nhớ cho kết quả gọi.

Phần lớn cuộc gọi hệ điều hànhđược thực hiện bởi nhóm phần mềm ngắt quãng(INT). Phần mềm ngắt là một sự kiện đồng bộ có thể được lặp lại khi cùng một mã chương trình được thực thi.

Ngắt

Ngắt (ngắt phần cứng) là một sự kiện được tạo ra từ bên ngoài (liên quan đến bộ xử lý) thiết bị. Thông qua phần cứng ngắt quãng thiết bị hoặc thông báo cho trung tâm CPU chỉ ra rằng một sự kiện đã xảy ra yêu cầu phản hồi ngay lập tức (ví dụ: người dùng đã nhấn một phím) hoặc báo cáo việc hoàn thành thao tác I/O không đồng bộ (ví dụ: việc đọc dữ liệu từ đĩa vào bộ nhớ chính đã hoàn tất). Loại phần cứng quan trọng ngắt quãngngắt quãng bộ đếm thời gian, được tạo định kỳ sau một khoảng thời gian cố định. Ngắt bộ hẹn giờ được sử dụng hệ điều hành khi lập kế hoạch cho quá trình. Mỗi loại phần cứng ngắt quãng có số riêng xác định duy nhất nguồn ngắt quãng. Phần cứng ngắt– đây là một sự kiện không đồng bộ, nghĩa là nó xảy ra bất kể mã nào đang được thực thi bộ xử lý Ngay bây giờ. Xử lý phần cứng ngắt quãng không nên tính đến quá trình nào là hiện tại.

Tình huống đặc biệt

Tình huống đặc biệt (ngoại lệ) - một sự kiện xảy ra do một chương trình đang cố gắng thực thi một lệnh mà vì lý do nào đó không thể hoàn thành để hoàn thành. Ví dụ về các lệnh như vậy bao gồm cố gắng truy cập tài nguyên mà không có đủ đặc quyền hoặc truy cập trang bộ nhớ bị thiếu. Tình huống đặc biệt, giống cuộc gọi hệ thống, là các sự kiện đồng bộ xảy ra trong ngữ cảnh của tác vụ hiện tại. Tình huống đặc biệt có thể được chia thành có thể sửa được và không thể sửa được. Những cái có thể sửa được bao gồm: tình huống đặc biệt thích sự vắng mặt thông tin cần thiết trong RAM. Sau khi loại bỏ nguyên nhân thì có thể khắc phục được tình huống đặc biệt chương trình có thể tiếp tục chạy. Xảy ra trong quá trình làm việc hệ điều hành sửa chữa được tình huống đặc biệtđược coi là bình thường. không thể sửa chữa tình huống đặc biệt thường phát sinh nhất do lỗi trong chương trình (ví dụ: chia cho 0). Thông thường trong những trường hợp như vậy hệ điều hành phản ứng bằng cách chấm dứt chương trình gọi nó tình huống đặc biệt.

Các tệp nhằm mục đích lưu trữ thông tin trên phương tiện bên ngoài, nghĩa là người ta chấp nhận rằng thông tin được ghi, chẳng hạn như trên đĩa, phải nằm bên trong tệp. Thông thường, một tệp được hiểu là một phần không gian được đặt tên trên phương tiện lưu trữ.

Mục đích chính của hệ thống tệp là ẩn các tính năng của I/O và cung cấp cho người lập trình một mô hình trừu tượng, đơn giản của các tệp độc lập với thiết bị. Ngoài ra còn có một danh mục mở rộng để đọc, tạo, xóa, ghi, mở và đóng tệp cuộc gọi hệ thống(tạo, xóa, mở, đóng, đọc, v.v.). Người dùng đã quen thuộc với các khái niệm tổ chức hệ thống tệp như thư mục, thư mục hiện tại, thư mục gốc và đường dẫn. Để thao tác các đối tượng này trong hệ điều hành có sẵn cuộc gọi hệ thống. Hệ thống tập tin hệ điều hànhđược mô tả trong bài giảng 11–12.

Quy trình, chủ đề

Khái niệm quy trình trong hệ điều hành một trong những điều cơ bản nhất. Các quy trình này được thảo luận chi tiết trong bài giảng 2–7. Các luồng hoặc các tiến trình nhẹ cũng được mô tả ở đó.

Đặc điểm kiến ​​trúc hệ điều hành

Cho đến nay chúng ta đã nói về việc xem xét hệ điều hành từ bên ngoài, về những gì họ đang làm hệ điều hành. Phần còn lại của khóa học của chúng tôi sẽ được dành cho cách họ thực hiện điều này. Nhưng chúng tôi vẫn chưa nói bất cứ điều gì về bản chất bên trong của chúng, những cách tiếp cận xây dựng chúng.

lõi nguyên khối

Trong thực tế, hệ điều hành là một chương trình thông thường, vì vậy sẽ hợp lý nếu tổ chức nó theo cách giống như hầu hết các chương trình được tổ chức, nghĩa là bao gồm các thủ tục và hàm. Trong trường hợp này các thành phần hệ điều hành không phải là các mô-đun độc lập mà là các thành phần của một chương trình lớn. Cấu trúc này hệ điều hành gọi điện lõi nguyên khối(hạt nhân nguyên khối). lõi nguyên khối là một tập hợp các thủ tục, mỗi thủ tục có thể gọi từng thủ tục. Tất cả các thủ tục chạy ở chế độ đặc quyền. Như vậy, lõi nguyên khối - đây là một kế hoạch như vậy hệ điều hành, trong đó tất cả các thành phần của nó là thành phần của một chương trình, hãy sử dụng cấu trúc chung dữ liệu và tương tác với nhau bằng cách gọi trực tiếp các thủ tục. Đối với nguyên khối hệ điều hành lõi trùng với toàn bộ hệ thống.

Trong nhiều các hệ điều hành Với lõi nguyên khối Việc lắp ráp hạt nhân, tức là quá trình biên dịch nó, được thực hiện riêng biệt cho từng máy tính được cài đặt nó. hệ điều hành. Trong trường hợp này, bạn có thể chọn danh sách các giao thức phần cứng và phần mềm, hỗ trợ cho những giao thức này sẽ được bao gồm trong kernel. Vì kernel là một chương trình đơn lẻ nên việc biên dịch lại là cách duy nhất để thêm các thành phần mới vào nó hoặc loại bỏ những thành phần không sử dụng. Cần lưu ý rằng sự hiện diện của các thành phần không cần thiết trong kernel là điều cực kỳ không mong muốn, vì kernel luôn nằm hoàn toàn trong RAM. Ngoài ra, việc loại bỏ các thành phần không cần thiết sẽ cải thiện độ tin cậy hệ điều hành nói chung là.

lõi nguyên khối- phương pháp tổ chức lâu đời nhất các hệ điều hành. Ví dụ về hệ thống có lõi nguyên khối là hầu hết các hệ thống Unix.

Ngay cả trong các hệ thống nguyên khối, một số cấu trúc có thể được nhận ra. Giống như trong một khối bê tông, người ta có thể phân biệt được các tạp chất của đá dăm, cũng vậy trong lõi nguyên khối thủ tục dịch vụ xen kẽ tương ứng với cuộc gọi hệ thống. Quy trình dịch vụ chạy ở chế độ đặc quyền, trong khi các chương trình người dùng chạy ở chế độ không có đặc quyền. Để chuyển từ cấp đặc quyền này sang cấp đặc quyền khác, đôi khi có thể sử dụng một chương trình tiện ích chính để xác định cấp nào cuộc gọi hệ thốngđã được thực hiện, tính chính xác của dữ liệu đầu vào cho việc này gọi và chuyển quyền điều khiển sang quy trình dịch vụ tương ứng bằng cách chuyển sang chế độ vận hành đặc quyền. Đôi khi còn có một bộ phần mềm tiện ích giúp thực hiện các quy trình dịch vụ.

Hệ thống phân lớp

Tiếp tục cấu trúc, có thể chia toàn bộ hệ thống máy tính thành một số cấp độ nhỏ hơn với các kết nối được xác định rõ ràng giữa chúng, do đó các đối tượng ở cấp độ N chỉ có thể gọi các đối tượng ở cấp độ N-1. Mức thấp nhất trong các hệ thống như vậy thường là phần cứng, cấp cao nhất- giao diện người dùng. Cấp độ càng thấp thì các lệnh và hành động mà mô-đun ở cấp độ này có thể thực hiện càng có nhiều đặc quyền. Cách tiếp cận này lần đầu tiên được áp dụng khi Dijkstra và các học trò của ông tạo ra hệ thống THE (Technishe Hogeschool Eindhoven) vào năm 1968. Hệ thống này có các cấp độ sau:

Cơm. 1.2. Hệ thống lớp

Hệ thống lớp được thực hiện tốt. Khi sử dụng các thao tác lớp thấp hơn, bạn không cần biết chúng được triển khai như thế nào, bạn chỉ cần hiểu chúng làm gì. Hệ thống lớp được thử nghiệm tốt. Việc gỡ lỗi bắt đầu từ lớp dưới cùng và được thực hiện từng lớp một. Khi xảy ra lỗi, chúng ta có thể chắc chắn rằng lỗi đó nằm ở lớp đang được kiểm tra. Hệ thống phân lớp có thể dễ dàng sửa đổi. Nếu cần, bạn chỉ có thể thay thế một lớp mà không cần chạm vào các lớp khác. Nhưng các hệ thống phân lớp rất khó phát triển: khó xác định chính xác thứ tự của các lớp và cái gì thuộc về lớp nào. Các hệ thống phân lớp kém hiệu quả hơn các hệ thống nguyên khối. Vì vậy, ví dụ, để thực hiện các thao tác I/O, chương trình người dùng sẽ phải tuần tự đi qua tất cả các lớp từ trên xuống dưới.

Máy ảo

Khi bắt đầu bài giảng chúng ta đã nói về việc xem xét hệ điều hành Làm thế nào máy ảo khi người dùng không cần biết chi tiết về cấu trúc bên trong của máy tính. Nó hoạt động với các tập tin, không phải với đầu từ và động cơ; nó hoạt động với RAM ảo lớn thay vì RAM thực hạn chế; anh ấy không quan tâm lắm liệu anh ấy có phải là người dùng duy nhất trên máy hay không. Hãy xem xét một cách tiếp cận hơi khác một chút. Cho phép hệ điều hành dụng cụ máy ảo đối với mỗi người dùng, nhưng không làm cho cuộc sống của anh ta dễ dàng hơn mà ngược lại, làm phức tạp nó. Mỗi người đều như thế này máy ảo xuất hiện trước người dùng dưới dạng kim loại trần - bản sao của tất cả phần cứng trong hệ thống máy tính, bao gồm cả CPU, các lệnh đặc quyền và không có đặc quyền, thiết bị đầu vào/đầu ra, ngắt quãng vân vân. Và anh ta bị bỏ lại một mình với bàn ủi này. Khi cố gắng truy cập phần cứng ảo như vậy ở cấp lệnh đặc quyền, điều thực sự xảy ra là cuộc gọi hệ thống thực tế hệ điều hành, thực hiện tất cả các hành động cần thiết. Cách tiếp cận này cho phép mỗi người dùng tải lên hệ điều hành TRÊN máy ảo và làm với nó bất cứ điều gì trái tim bạn mong muốn.

Cơm. 1.3. Tùy chọn máy ảo

Hệ thống thực sự đầu tiên thuộc loại này là hệ thống CP/CMS, hay VM/370 như tên gọi ngày nay, dành cho dòng máy IBM/370.

Nhược điểm như vậy các hệ điều hành là sự giảm hiệu quả máy ảo so sánh với máy tính thật, và, như một quy luật, chúng rất cồng kềnh. Ưu điểm nằm ở việc sử dụng trên một hệ thống máy tính các chương trình được viết cho nhiều mục đích khác nhau. các hệ điều hành.

Kiến trúc vi hạt nhân

Xu hướng phát triển hiện nay các hệ điều hành bao gồm việc chuyển một phần quan trọng của mã hệ thống sang cấp độ người dùng và đồng thời giảm thiểu hạt nhân. Chúng ta đang nói về một cách tiếp cận để xây dựng một hạt nhân được gọi là kiến trúc vi hạt nhân (kiến trúc vi hạt nhân) hệ điều hành, khi hầu hết các thành phần của nó là các chương trình độc lập. Trong trường hợp này, sự tương tác giữa chúng được đảm bảo bởi một mô-đun hạt nhân đặc biệt gọi là vi hạt nhân. Microkernel hoạt động ở chế độ đặc quyền và đảm bảo sự tương tác giữa các chương trình và lập lịch sử dụng bộ xử lý, xử lý sơ cấp ngắt quãng, các thao tác vào/ra và điều khiển cơ bản ký ức.

Cơm. 1.4. Kiến trúc hệ điều hành vi nhân

Các thành phần còn lại của hệ thống giao tiếp với nhau bằng cách truyền tin nhắn qua vi hạt nhân.

Ưu điểm chính kiến trúc vi hạt nhân– mức độ mô đun cốt lõi cao hệ điều hành. Điều này làm cho việc thêm các thành phần mới vào nó dễ dàng hơn nhiều. Trong vi hạt nhân hệ điều hành bạn có thể tải và dỡ bỏ trình điều khiển, hệ thống tệp mới, v.v. mà không làm gián đoạn hoạt động của nó. Quá trình gỡ lỗi được đơn giản hóa đáng kể thành phần hạt nhân, bởi vì Một phiên bản mới trình điều khiển có thể được tải mà không cần khởi động lại toàn bộ hệ điều hành. Thành phần hạt nhân hệ điều hành về cơ bản không khác biệt gì với các chương trình của người dùng, vì vậy bạn có thể sử dụng các công cụ thông thường để gỡ lỗi chúng. Kiến trúc vi hạt nhân tăng độ tin cậy của hệ thống vì lỗi ở cấp chương trình không có đặc quyền sẽ ít nguy hiểm hơn lỗi ở cấp chế độ kernel.

Trong cùng thời gian kiến trúc hệ điều hành vi nhânđưa ra thêm chi phí liên quan đến việc truyền tin nhắn, điều này ảnh hưởng đáng kể đến hiệu suất. Để có vi hạt nhân hệ điều hành không thua kém về tốc độ các hệ điều hành trên cơ sở lõi nguyên khối, cần phải thiết kế rất cẩn thận việc phân chia hệ thống thành các thành phần, cố gắng giảm thiểu sự tương tác giữa chúng. Vì vậy, khó khăn chính trong việc tạo ra các vi hạt các hệ điều hành– sự cần thiết phải thiết kế rất cẩn thận.

Hệ thống hỗn hợp

Tất cả các phương pháp được xem xét để xây dựng các hệ điều hành có những ưu điểm và nhược điểm của chúng. Trong hầu hết các trường hợp hiện đại hệ điều hành sử dụng sự kết hợp khác nhau của các phương pháp này. Vì vậy, ví dụ, hạt nhân hệ điều hành Linux là một hệ thống nguyên khối với các thành phần kiến trúc vi hạt nhân. Khi biên dịch hạt nhân, bạn có thể cho phép tải và dỡ tải động nhiều thành phần hạt nhân—được gọi là mô-đun. Khi một mô-đun được tải, mã của nó sẽ được tải ở cấp hệ thống và được liên kết với phần còn lại của kernel. Bất kỳ hàm nào được kernel xuất đều có thể được sử dụng bên trong một mô-đun.

Một ví dụ khác về cách tiếp cận hỗn hợp là khả năng khởi động hệ điều hành Với lõi nguyên khốiđược điều khiển bởi một vi hạt nhân. Đây là cách 4.4BSD và MkLinux, dựa trên vi nhân Mach, được thiết kế. Hạt nhân vi mô cung cấp khả năng quản lý bộ nhớ ảo và trình điều khiển cấp thấp. Tất cả các chức năng khác, bao gồm cả tương tác với các chương trình ứng dụng, đều được thực hiện lõi nguyên khối. Cách tiếp cận này được hình thành như là kết quả của những nỗ lực tận dụng lợi thế của kiến trúc vi hạt nhân, giữ cho mã được gỡ lỗi tốt nhất có thể lõi nguyên khối.

Các yếu tố chặt chẽ nhất kiến trúc vi hạt nhân và các yếu tố lõi nguyên khốiđan xen trong nhân Windows NT. Mặc dù Windows NT thường được gọi là microkernel hệ điều hành, Điều này không hoàn toàn đúng. Hạt nhân NT quá lớn (hơn 1 MB) để mang tiền tố "vi mô". Các thành phần của nhân Windows NT được đặt trong bộ nhớ có sẵn và tương tác với nhau bằng cách truyền các thông báo, như mong đợi trong các vi nhân. các hệ điều hành. Đồng thời, tất cả các thành phần kernel hoạt động trong cùng một không gian địa chỉ và tích cực sử dụng các cấu trúc dữ liệu chung, điển hình là các hệ điều hành Với lõi nguyên khối. Theo các chuyên gia của Microsoft, lý do rất đơn giản: một thiết kế thuần túy vi nhân sẽ không mang lại lợi nhuận về mặt thương mại vì nó không hiệu quả.

Vì vậy, Windows NT có thể được gọi một cách chính đáng là hybrid hệ điều hành.

Phân loại hệ điều hành

Có một số sơ đồ phân loại các hệ điều hành. Dưới đây là phân loại dựa trên một số đặc điểm theo quan điểm của người dùng.

Thực hiện đa nhiệm

Theo số lượng nhiệm vụ được thực hiện đồng thời hệ điều hành có thể chia thành hai lớp:

    đa nhiệm(Unix, OS/2, Windows);

    tác vụ đơn lẻ (ví dụ: MS-DOS).

Hệ điều hành đa nhiệm , giải quyết bài toán phân bổ nguồn lực và cạnh tranh, thực hiện đầy đủ cơ chế đa chương trình theo yêu cầu của phần “Các khái niệm, khái niệm cơ bản hệ điều hành".

Chế độ đa nhiệm, thể hiện ý tưởng chia sẻ thời gian, được gọi là ưu tiên. Mỗi chương trình được phân bổ một lượng tử bộ xử lý thời điểm sau đó quyền điều khiển được chuyển sang chương trình khác. Họ nói rằng chương trình đầu tiên sẽ được thay thế. Hầu hết các chương trình người dùng thương mại đều hoạt động ở chế độ ưu tiên. hệ điều hành.

Trong một số hệ điều hành(ví dụ: Windows 3.11) một chương trình người dùng có thể độc quyền CPU, nghĩa là làm việc ở chế độ không dịch chuyển. Theo quy định, trong hầu hết các hệ thống, bản thân mã không được ưu tiên. hệ điều hành. Các chương trình quan trọng, đặc biệt là các tác vụ thời gian thực, cũng không được ưu tiên. Điều này được thảo luận chi tiết hơn trong bài giảng về lập kế hoạch công việc bộ xử lý.

Dựa trên các ví dụ đã cho, người ta có thể đánh giá bản chất gần đúng của việc phân loại. Vì vậy, trong hệ điều hành MS-DOS có thể tổ chức khởi chạy một tác vụ con và sự hiện diện của hai hoặc nhiều tác vụ trong bộ nhớ cùng một lúc. Tuy nhiên, điều này hệ điều hành theo truyền thống được coi là đơn nhiệm, chủ yếu là do thiếu cơ chế phòng thủ và khả năng liên lạc.

Hỗ trợ nhiều người dùng

Theo số lượng người dùng đồng thời hệ điều hành có thể được chia thành:

    người dùng đơn (MS-DOS, Windows 3.x);

    nhiều người dùng(Windows NT, Unix).

Sự khác biệt đáng kể nhất giữa những hệ điều hành nằm trong sự hiện diện của hệ thống nhiều người dùng cơ chế bảo vệ dữ liệu cá nhân của mỗi người dùng.

Đa xử lý

Cho đến gần đây, các hệ thống máy tính có một CPU. Do nhu cầu nâng cao năng suất, hệ thống đa bộ xử lý , gồm có hai hoặc nhiều hơn bộ vi xử lý mục đích chung, thực hiện song song các lệnh. Hỗ trợ đa xử lý là một tính năng quan trọng hệ điều hành và dẫn đến sự phức tạp của tất cả các thuật toán quản lý tài nguyên. Đa xử lý được thực hiện theo cách như vậy hệ điều hành, như Linux, Solaris, Windows NT và một số khác.

Hệ điều hành đa xử lý chia thành đối xứng và bất đối xứng. Đối xứng hệ điều hành trên mọi bộ xử lý các chức năng cốt lõi giống nhau và tác vụ có thể được thực thi trên bất kỳ bộ xử lý, nghĩa là việc xử lý được phân quyền hoàn toàn. Đồng thời, mỗi bộ vi xử lý tất cả bộ nhớ đều có sẵn.

Không đối xứng Bộ xử lý hệ điều hành không cân bằng. Thường có một chính CPU(chủ) và cấp dưới (nô lệ), khối lượng công việc và tính chất của chúng do chủ quyết định CPU.

Hệ thống thời gian thực

Trong thứ hạng hệ điều hành đa nhiệm, cùng với hệ thống góihệ thống chia sẻ thời gian, cũng được bao gồm hệ thống thời gian thực , điều mà cho đến nay vẫn chưa được đề cập đến.

Chúng được sử dụng để kiểm soát các đối tượng kỹ thuật hoặc quy trình công nghệ khác nhau. Các hệ thống như vậy được đặc trưng bởi thời gian đáp ứng tối đa cho phép đối với sự kiện bên ngoài trong đó chương trình điều khiển đối tượng phải được thực thi. Hệ thống phải xử lý dữ liệu đến nhanh hơn mức có thể đến và từ nhiều nguồn cùng một lúc.

Những hạn chế nghiêm ngặt như vậy ảnh hưởng đến kiến ​​trúc hệ thống thời gian thực, chẳng hạn, chúng có thể thiếu bộ nhớ ảo, sự hỗ trợ của bộ nhớ này gây ra sự chậm trễ khó lường trong việc thực thi chương trình. (Xem thêm các phần liên quan đến lập kế hoạch xử lý và triển khai bộ nhớ ảo.)

Sự phân loại đã cho hệ điều hành không đầy đủ. Chi tiết hơn, các tính năng của việc sử dụng hiện đại hệ điều hànhđược xem xét trong [ Olifer, 2001].

Phần kết luận

Chúng tôi đã xem xét các quan điểm khác nhau về nó là gì hệ điều hành; nghiên cứu lịch sử phát triển các hệ điều hành; đã tìm ra những chức năng họ thường thực hiện hệ điều hành; cuối cùng đã tìm ra những cách tiếp cận xây dựng nào tồn tại các hệ điều hành. Chúng tôi sẽ dành bài giảng tiếp theo để làm rõ khái niệm “quy trình” và các vấn đề về lập kế hoạch quy trình.

Phụ lục 1.

Một số thông tin về kiến ​​trúc máy tính

Các thành phần phần cứng chính của máy tính là: bộ nhớ chính, bộ nhớ trung tâm CPU và các thiết bị ngoại vi. Để trao đổi dữ liệu với nhau, các thành phần này được kết nối bằng một nhóm dây gọi là đường trục (xem hình 2). Hình.1.5).

Cơm. 1.5. Một số linh kiện máy tính

Bộ nhớ chính được sử dụng để lưu trữ các chương trình và dữ liệu ở dạng nhị phân và được tổ chức dưới dạng một mảng các ô có thứ tự, mỗi ô có một địa chỉ kỹ thuật số duy nhất. Thông thường, kích thước ô là một byte. Các hoạt động điển hình trên bộ nhớ chính là đọc và ghi nội dung của một ô có địa chỉ cụ thể.

Các hoạt động khác nhau với dữ liệu được thực hiện bởi một bộ phận biệt lập của máy tính, được gọi là bộ phận trung tâm. bộ xử lý(CPU). CPU cũng có các vị trí lưu trữ được gọi là các thanh ghi. Chúng được chia thành các thanh ghi mục đích chung và các thanh ghi chuyên dụng. Trong các máy tính hiện đại, dung lượng thanh ghi thường là 4–8 byte. Các thanh ghi mục đích chung được sử dụng để lưu trữ tạm thời dữ liệu và kết quả hoạt động. Để xử lý thông tin, dữ liệu thường được chuyển từ ô nhớ sang các thanh ghi đa năng và hoạt động được thực hiện bởi bộ điều khiển trung tâm. bộ xử lý và chuyển kết quả của thao tác vào bộ nhớ chính.

Các thanh ghi chuyên dụng được sử dụng để điều khiển hoạt động bộ xử lý. Quan trọng nhất là: bộ đếm chương trình, thanh ghi lệnh và thanh ghi chứa thông tin trạng thái chương trình.

Các chương trình được lưu trữ dưới dạng một chuỗi các lệnh máy phải được thực thi bởi bộ điều khiển trung tâm CPU. Mỗi lệnh bao gồm một trường thao tác và các trường toán hạng, tức là dữ liệu mà thao tác được thực hiện. Toàn bộ tập lệnh máy được gọi là ngôn ngữ máy.

Chương trình được thực hiện như sau. Lệnh máy được trỏ tới bởi bộ đếm chương trình được đọc từ bộ nhớ và sao chép vào thanh ghi lệnh. Ở đây nó được giải mã và sau đó được thực thi. Sau khi một lệnh được thực thi, bộ đếm chương trình sẽ trỏ đến lệnh tiếp theo. Những hành động này, được gọi là chu trình máy, sau đó được lặp lại.

Tương tác với các thiết bị ngoại vi

Các thiết bị ngoại vi được thiết kế để nhập và xuất thông tin. Mỗi thiết bị thường bao gồm một máy tính chuyên dụng gọi là bộ điều khiển hoặc bộ chuyển đổi. Khi bộ điều khiển được lắp vào ổ cắm trên bo mạch chủ, nó sẽ được kết nối với bus và được cấp một số (địa chỉ) duy nhất. Bộ điều khiển sau đó giám sát các tín hiệu trên bus và phản hồi các tín hiệu gửi đến nó.

Mọi thao tác I/O đều liên quan đến cuộc đối thoại giữa CPU và bộ điều khiển thiết bị. Khi bộ xử lý Khi gặp lệnh liên quan đến I/O như một phần của chương trình, nó sẽ thực thi lệnh đó bằng cách gửi tín hiệu đến bộ điều khiển thiết bị. Đây được gọi là đầu vào/đầu ra có thể lập trình.

Đổi lại, bất kỳ thay đổi nào với các thiết bị bên ngoài đều dẫn đến việc truyền tín hiệu từ thiết bị đến CPU. Theo quan điểm của CPU, đây là một sự kiện không đồng bộ và cần có phản hồi của nó. Để phát hiện sự kiện như vậy, giữa các chu kỳ máy CPU truy vấn một thanh ghi đặc biệt chứa thông tin về loại thiết bị tạo ra tín hiệu. Nếu có tín hiệu thì CPU sẽ thực hiện một tác vụ cụ thể của thiết bị này một chương trình có nhiệm vụ phản hồi sự kiện này một cách thích hợp (ví dụ: nhập một ký tự được nhập từ bàn phím vào bộ đệm đặc biệt). Chương trình như vậy được gọi là chương trình xử lý ngắt quãng, và chính sự kiện đó gián đoạn, bởi vì nó làm gián đoạn công việc theo kế hoạch bộ xử lý. Sau khi xử lý xong bộ xử lý bị gián đoạn quay trở lại việc thực hiện chương trình. Những hành động này của máy tính được gọi là đầu vào/đầu ra bằng cách sử dụng ngắt quãng.

Các máy tính hiện đại còn có khả năng giao tiếp trực tiếp giữa bộ điều khiển và bộ nhớ chính, bỏ qua CPU - hay còn gọi là cơ chế truy cập bộ nhớ trực tiếp.

1) Sự phát triển thực sự của hệ điều hành đã không diễn ra suôn sẻ và có hệ thống như được trình bày trong bài đánh giá này. Ví dụ: hệ thống chia sẻ thời gian Joss đầu tiên được triển khai trên máy ống Joniac mà không có bất kỳ sự hỗ trợ phần cứng nào.

1. Khái niệm hệ điều hành. Các chức năng hệ điều hành cơ bản.

Hệ điều hành thường được hiểu là một tập hợp các chương trình điều khiển hoạt động như một giao diện giữa phần cứng máy tính và được thiết kế để sử dụng hiệu quả nhất tài nguyên hệ thống máy tính và tổ chức các phép tính đáng tin cậy. Bất kỳ thành phần phần mềm nào đều chạy dưới sự kiểm soát của HĐH và không có thành phần phần mềm nào, ngoại trừ chính HĐH, có quyền truy cập trực tiếp vào phần cứng.

Các chức năng chính của hệ điều hành là:

1. Nhận nhiệm vụ hoặc lệnh từ người dùng.

2. Nhận và thực hiện các yêu cầu của chương trình để khởi động, tạm dừng, dừng các chương trình khác.

4. Khởi tạo một chương trình (chuyển quyền điều khiển cho chương trình đó, nhờ đó bộ xử lý thực thi chương trình).

5. Nhận dạng tất cả các chương trình và dữ liệu.

6. Đảm bảo hoạt động của hệ thống quản lý file và DBMS. làm tăng hiệu quả của toàn bộ phần mềm.

7. Cung cấp chế độ đa chương trình, tức là thực thi 2 chương trình trở lên trên 1 bộ xử lý, mang lại cảm giác thực thi đồng thời.

8. Quản lý các hoạt động đầu vào/đầu ra.

9. Đáp ứng các ràng buộc cứng trong thời gian thực.??

10. Phân bổ bộ nhớ, tổ chức bộ nhớ ảo.

11. Lập kế hoạch, phân công nhiệm vụ theo chiến lược và chuyên ngành dịch vụ được xác định.

12. Trao đổi tin nhắn, dữ liệu giữa các chương trình đang chạy.

13. Bảo vệ các chương trình khỏi ảnh hưởng lẫn nhau. đảm bảo an toàn dữ liệu.

14. Cung cấp dịch vụ khi hệ thống gặp sự cố.

15. Bảo đảm hoạt động của hệ thống lập trình.

2. Ngắt. Xử lý ngắt.

Ngắt là một cơ chế cho phép bạn phối hợp hoạt động song song. thiết bị riêng lẻ hệ thống máy tính và đáp ứng các điều kiện đặc biệt phát sinh trong quá trình vận hành bộ xử lý. Ngắt là sự chuyển giao quyền điều khiển bắt buộc từ một chương trình đang chạy sang hệ thống và thông qua chương trình đó đến chương trình xử lý ngắt tương ứng, xảy ra khi một sự kiện nhất định xảy ra. Mục đích chính của việc giới thiệu các ngắt là thực hiện chế độ vận hành không đồng bộ và song song hóa hoạt động của các thiết bị riêng lẻ trong tổ hợp máy tính. Cơ chế ngắt được thực hiện trong phần cứng và phần mềm.

Cấu trúc của các hệ thống ngắt có thể rất khác nhau, nhưng chúng đều có Đặc điểm chung– sự gián đoạn chắc chắn dẫn đến sự thay đổi thứ tự các lệnh được bộ xử lý thực hiện. Cơ chế xử lý ngắt bao gồm các phần tử sau:

1. Thiết lập thực tế gián đoạn (tiếp nhận và xác định tín hiệu gián đoạn).

2. Lưu trữ trạng thái của quá trình bị gián đoạn (trạng thái của quá trình được xác định bởi giá trị của bộ đếm chương trình, nội dung của thanh ghi bộ xử lý, đặc tả của chế độ: người dùng hoặc đặc quyền)

3. Điều khiển được chuyển bằng phần cứng tới chương trình xử lý ngắt. Trong trường hợp này, địa chỉ bắt đầu của chương trình con xử lý ngắt được nhập vào bộ đếm chương trình và từ từ trạng thái vào các thanh ghi tương ứng.???

4. Lưu thông tin vào một chương trình bị gián đoạn không thể lưu được bằng các thao tác phần cứng.

5. Xử lý ngắt. Công việc có thể được thực hiện bởi cùng một chương trình con mà điều khiển đã được chuyển sang ở bước thứ 3, nhưng trong HĐH, quá trình xử lý này thường được thực hiện bằng cách gọi hàm tương ứng. các chương trình con.

6. Khôi phục thông tin liên quan đến quá trình bị gián đoạn.

7. Quay lại chương trình bị gián đoạn.

3 bước đầu tiên được thực hiện trong phần cứng và phần còn lại trong phần mềm.

Các chức năng chính của cơ chế ngắt:

1. Nhận dạng hoặc phân loại ngắt.

2. Chuyển quyền điều khiển sang bộ xử lý ngắt.

3. Quay lại đúng chương trình bị gián đoạn

Việc chuyển đổi từ chương trình bị gián đoạn sang trình xử lý và quay lại phải được thực hiện càng nhanh càng tốt. Một phương pháp nhanh chóng là sử dụng bàn soda. danh sách tất cả các ngắt được phép đối với máy tính và địa chỉ tương ứng. người xử lý. Để quay lại chương trình bị gián đoạn một cách chính xác, trước khi chuyển điều khiển sang bộ xử lý, nội dung của các thanh ghi bộ xử lý được lưu trữ trong bộ nhớ truy cập trực tiếp hoặc trên ngăn xếp hệ thống.

Dịch vụ ngắt. Sự hiện diện của tín hiệu ngắt không nhất thiết phải gây ra sự gián đoạn của chương trình đang thực thi; bộ xử lý có thể có hệ thống bảo vệ ngắt: vô hiệu hóa hệ thống ngắt hoặc vô hiệu hóa hoặc che giấu các tín hiệu ngắt riêng lẻ. Việc kiểm soát phần mềm của các cơ sở này cho phép HĐH điều chỉnh việc xử lý các tín hiệu ngắt. Bộ xử lý có thể xử lý các ngắt ngay lập tức khi có ngắt, trì hoãn việc xử lý chúng trong một thời gian hoặc hoàn toàn bỏ qua chúng. Thông thường, các hoạt động ngắt chỉ được thực hiện sau khi lệnh hiện tại đã hoàn tất việc thực thi. Vì tín hiệu ngắt xảy ra vào những thời điểm ngẫu nhiên nên tại thời điểm ngắt có thể có một số tín hiệu ngắt chỉ có thể được xử lý tuần tự. Để xử lý các tín hiệu ngắt theo thứ tự hợp lý, chúng được gán mức độ ưu tiên. Các chương trình, bằng cách quản lý các thanh ghi mặt nạ đặc biệt, cho phép bạn triển khai các nguyên tắc dịch vụ khác nhau:

1) với mức độ ưu tiên tương đối. Trong trường hợp này, dịch vụ không bị gián đoạn ngay cả khi có yêu cầu có mức độ ưu tiên cao hơn. sau khi kết thúc dịch vụ của yêu cầu này(hiện tại) yêu cầu có mức ưu tiên cao nhất đang được phục vụ. Để tổ chức kỷ luật như vậy, cần phải áp dụng mặt nạ cho tất cả các ngắt khác trong chương trình để phục vụ yêu cầu này hoặc đơn giản là vô hiệu hóa hệ thống ngắt.

2) với mức độ ưu tiên tuyệt đối. Các nhiệm vụ có mức độ ưu tiên cao nhất luôn được phục vụ. Để thực hiện kỷ luật này, khi yêu cầu xử lý ngắt, tất cả các ngắt có mức ưu tiên thấp đều bị che đi. Trong trường hợp này, có thể xảy ra ngắt đa cấp, tức là làm gián đoạn chương trình dịch vụ ngắt. Số lượng mức ngắt trong chế độ này thay đổi và phụ thuộc vào mức độ ưu tiên của yêu cầu dựa trên nguyên tắc ngăn xếp: LCFS - đến sau được phục vụ trước, tức là yêu cầu có mức ưu tiên cao hơn có thể làm gián đoạn yêu cầu có mức ưu tiên thấp hơn. Khi một yêu cầu ngắt xuất hiện, hệ thống ngắt sẽ xác định tín hiệu và nếu ngắt được bật, điều khiển sẽ được chuyển sang tín hiệu thích hợp. chương trình xử lý ngắt.

Các phần dịch vụ trong đó ngữ cảnh của tác vụ bị gián đoạn được lưu và phần cuối cùng trong đó ngữ cảnh được khôi phục để hệ thống ngắt không phản hồi lại tín hiệu yêu cầu ngắt. Hệ thống ngắt này tự động vô hiệu hóa các ngắt, do đó cần phải kích hoạt lại hệ thống ngắt này trong các quy trình ngắt. Vì vậy, trong khi phần xử lý ngắt trung tâm đang chạy, các ngắt được kích hoạt, trong khi phần cuối cùng đang chạy, chương trình con xử lý ngắt phải bị tắt và sau khi bối cảnh của tác vụ bị gián đoạn được khôi phục, nó phải được kích hoạt lại. Những hành động này phải được thực hiện trong mỗi quá trình xử lý ngắt. Trong nhiều OS 1, phần xử lý ngắt được phân bổ cho một mô-đun phần mềm đặc biệt được gọi là. ngắt lời người giám sát.

3. Sự khác biệt giữa các mô-đun chương trình đăng ký lại và ngắt chương trình là gì? Chúng được thực hiện như thế nào.

1. Hệ thống quản lý tập tin (FMS) là gì?

Mục đích của SUF.

Tổ chức truy cập thuận tiện hơn vào dữ liệu được tổ chức dưới dạng tệp. Thay vì truy cập dữ liệu cấp thấp - cho biết địa chỉ vật lý của từng bản ghi - quyền truy cập logic được sử dụng, cho biết tên của tệp và bản ghi trong đó.

Một số hệ điều hành cho phép bạn làm việc với một số SUF; trong trường hợp này, chúng nói về hệ thống tệp được gắn. Cũng có những hệ điều hành hoạt động mà không có SUF, tức là. Bất kỳ hệ thống quản lý tệp nào cũng không cần thiết; nó được thiết kế để hoạt động trong một hệ điều hành cụ thể và một hệ thống tệp cụ thể.

2. Ngắt bên ngoài, bên trong và phần mềm.

Sự gián đoạn xảy ra trong quá trình hoạt động tính toán. hệ thống có thể được chia thành bên ngoài và bên trong. Các ngắt bên ngoài được gây ra bởi các sự kiện không đồng bộ xảy ra bên ngoài quá trình bị gián đoạn. Ví dụ - ngắt hẹn giờ, ngắt thiết bị bên ngoài, ngắt I/O, ngắt khi mất điện, ngắt bảng điều khiển của người vận hành, ngắt từ bộ xử lý khác hoặc hệ điều hành khác.

Các ngắt bên trong được gây ra bởi các sự kiện liên quan đến hoạt động của bộ xử lý và đồng bộ với các hoạt động của nó. Ví dụ: trong trường hợp vi phạm địa chỉ (khi chỉ định địa chỉ bị cấm hoặc không tồn tại) hoặc truy cập vào một đoạn hoặc trang bị thiếu khi tổ chức bộ nhớ ảo; nếu có sự kết hợp 2 chữ số không được sử dụng trong trường mã hoạt động; khi chia cho 0; khi lệnh tràn hoặc biến mất; khi phát hiện lỗi chẵn lẻ, lỗi trong hoạt động của các thiết bị phần cứng khác nhau bằng phương tiện giám sát.

Phần mềm gián đoạn. Các ngắt này xảy ra để đáp lại lệnh ngắt tương ứng, tức là với lệnh này, bộ xử lý thực hiện các hành động tương tự như với các ngắt nội bộ thông thường. Cơ chế này được giới thiệu cụ thể để đảm bảo rằng việc chuyển sang các mô-đun chương trình hệ thống diễn ra không chỉ như một sự chuyển đổi sang một chương trình con mà còn theo cách giống hệt như trong các ngắt thông thường. Điều này đảm bảo rằng bộ xử lý tự động chuyển sang chế độ đặc quyền với khả năng thực thi bất kỳ lệnh nào. Các tín hiệu gây gián đoạn được tạo ra bên ngoài bộ xử lý hoặc trong chính bộ xử lý và chúng có thể xảy ra đồng thời. Việc lựa chọn một trong số chúng để xử lý được thực hiện dựa trên mức độ ưu tiên được gán cho từng loại ngắt. Có tính đến mức độ ưu tiên ngắt có thể được tích hợp vào phần cứng, cũng như được xác định bởi HĐH.