3. Hoạt động của 8088/8086.
2.5. VI XỬ LÝ I386, I486 VÀ PENTIUM.
2.5.1. Một số vấn đề trong hệ thống đa nhiệm (nhiều người sử dụng).
• Khái niệm về hệ thống đa nhiệm.
Trong các hệ thống phân chia thời gian phục vụ đồng thời nhiều người sử dụng, CPU sẽ thực hiện chương trình của người này trong vài msec, sau đó sẽ chuyển qua thực hiện chương trình của người khác. Quá trình cứ tiếp tục như vậy cho tới khi tất cả các chương trình đều được thực hiện. Do tốc độ quá nhanh nên mọi người có cảm giác máy tính chỉ làm việc riêng với mình.
Một hệ điều hành có khả năng phối hợp các hoạt động phân chia theo thời gian như trên có thể gọi là hệ điều hành đa nhiệm, vì mỗi người sẽ có ít nhất một tác vụ (task) được hoạt động dưới sự điều khiển của hệ thống. MS DOS không phải là một hệ điều hành đa nhiệm, vì thế các máy tính tuy có sử dụng các bộ vi xử lý tiên tiến của Intel (80286 trở lên) được thiết kế để có thể làm việc đa nhiệm, nhưng vì chạy dưới mô trường DOS nên vẫn chỉ là đơn nhiệm. Các hệ điều hành Unit, OS/2 hoặc Windows là các hệ điều hành đa nhiệm.
Các hệ điều hành đa nhiệm có thể làm việc theo hai cách: định kỳ theo thời gian hoặc theo mức ưu tiên đặt trước.
• Vấn đề về bảo tồn môi trường làm việc.
Các thanh ghi, dữ liệu trong bộ nhớ … dùng trong một tác vụ được gọi là môi trường. Khi chuyển từ tác vụ này sang tác vụ khác, thì môi trường của tác vụ bị gián đoạn cần được bảo vệ, để đảm bảo nó tiếp tục thực hiện đúng khi được phục vụ trở lại. Thông thường để bảo vệ các môi trường, là bảo quản các thông tin này trong một vùng nhớ đặc biệt hoặc một ngăn xếp, có thể phân chia cho mỗi tác vụ một vùng nhớ hoặc vùng ngăn xếp riêng biệt. Khi cần thiết có thể cất môi trường của tác vụ này và lấy môi trường của tác vụ khác.
• Vấn đề tranh chấp khi sử dụng chung tài nguyên.
Khi nhiều người sử dụng chung một số tài nguyên, trong hệ thống sẽ làm nảy sinh sự tranh chấp. Vì vậy hệ điều hành phải có các cờ báo bận cho các tài nguyên đang được sử dụng, và phải sắp xếp các yêu cầu cho các tài nguyên sử dụng chung theo hàng đợi để phục vụ lần lượt.
• Vấn đề về bảo vệ bộ nhớ.
Một vấn đề về bộ nhớ có thể xảy ra trong hệ thống nhiều người làm việc là khi có hai hoặc nhiều người cùng một lúc muốn thay đổi nội dung của một vùng nhớ dùng chung. Hệ điều hành phải có cơ chế bảo vệ, sao cho một vùng nhớ đang được dùng cho tác vụ
này, không bị hoạt động của các tác vụ khác làm cho sai lệch. Chính bản thân hệ điều hành cũng cần được bảo vệ bởi vì trong khi thực hiện một tác vụ, một người sử dụng nào đó có thể có các lệnh ghi vào vùng nhớ chứa mã lệnh của hệ điều hành. Để giải quyết vấn đề này hệ điều hành thường được xây dựng theo cơ chế nhiều lớp, các lớp sẽ được gán các mức đặc quyền thâm nhập sao cho: người sử dụng chỉ được quyền thâm nhập vào vùng dữ liệu ở mức ngoài cùng, có mức đặc quyền thấp nhất (lớp ngoài cùng sẽ chứa mã lệnh và dữ liệu dành cho người sử dụng). Khi muốn thâm nhập vào các lớp trong, người sử dụng phải thâm nhập qua các cơ chế phức tạp, để không có khả năng gây lỗi cho hệ điều hành. Bản thân hệ điều hành sẽ để mã lệnh và dữ liệu của nó ở lớp trong cùng, và nó được gán quyền thâm nhập vào tất cả các lớp. Các bộ vi xử lý của Intel thường có bốn mức đặc quyền.
• Việc quản lý bộ nhớ.
Có hai lý do khiến cho bộ nhớ cần được quản lý một cách đặc biệt khi làm việc đa nhiệm là: bộ nhớ bán dẫn thường có kích thước bé, không đủ cả hệ điều hành lẫn các chương trình của người sử dụng, và các vùng nhớ phải được bảo vệ nghiêm ngặt để không bị chương trình của người sử dụng làm hỏng. Một số hệ điều hành có cả chức năng quản lý bộ nhớ, nhưng để tăng tốc độ hoạt động của hệ thống tốt nhất là có riêng một khối quản lý bộ nhớ (MMU) thực hiện bằng phần cứng.
Để giải quyết các vấn đề nêu trên MMU sẽ phải quản lý một cơ chế nhớ khác, đó là chế độ bộ nhớ ảo. Đó là sự kết hợp của các loại bộ nhớ : cache (SRAM tốc độ cao), bộ nhớ chính (DRAM) và bộ nhớ phụ (ổ đĩa) chúng hoạt động dưới sự quản lý của MMU, sao cho dưới quan điểm lập trình và đối với người sử dụng tập hợp các bộ nhớ trên giống như là một bộ nhớ thuần nhất với dung lượng lớn (gần bằng dung lượng của ổ đĩa cứng), nhưng lại làm việc với tốc độ cao (gần bằng tốc độ của bộ nhớ chính).
Bộ nhớ ảo có thể quản lý bằng cách chia bộ nhớ thành các mảng nhỏ có độ lớn tính theo đoạn, động tác này được gọi là phân đoạn (đối với các bộ vi xử lý Intel từ 80286 trở đi), hoặc có thể phân theo trang (từ 80386 trở lên). Trong bộ nhớ ảo như vậy, từng mảng mã lệnh và từng mảng dữ liệu dùng cho chương trình hiện tại được nạp từ ổ đĩa vào DRAM, và chúng sẽ được truy cập theo cơ chế của MMU khi cần thiết. Nếu chương trình đang chạy cần một mảng nào đó chưa có trong DRAM thì nó sẽ được nạp vào DRAM. Nếu DRAM không còn đủ chỗ chứa thì một mảng nào đó của DRAM (xác định theo các tiêu chuẩn nhất định nào đó) sẽ bị đẩy trở lại ổ đĩa hoặc bị ghi đè lên. Một cơ chế tương tự cũng sẽ điều khiển hoạt động truyền dữ liệu giữa bộ nhớ cache và bộ nhớ chính. Nói cách khác DRAM làm bộ nhớ đệm cho ổ đĩa, còn bộ nhớ cache sẽ đóng vai trò làm bộ nhớ đệm cho DRAM. Trong các CPU thông thường một đoạn có thể có dung lượng lên tới 4GB, còn một trang thông thường có độ lớn là 4KB.
Bộ nhớ chính trong một hệ thống vi xử lý (còn được gọi là bộ nhớ vật lý) là các bộ nhớ bán dẫn (ROM+RAM) có dung lượng lớn nhất bị hạn chế bởi Bus địa chỉ của CPU. Theo quan điểm bộ nhớ ảo thì bộ nhớ vật lý chẳng qua chỉ là chỗ chứa các mảng (các đoạn hay các trang) hiện đang có liên hệ với hệ điều hành hoặc với chương trình của người sử dụng. Để truy cập các bộ nhớ ảo chương trình sẽ dùng địa chỉ ảo (hay còn gọi là địa chỉ logic) còn để truy cập tới bộ nhớ vật lý cần phải dùng địa chỉ vật lý. Trong các CPU có MMU, khi CPU cần đọc lệnh hoặc toán hạng thì nó đưa ra địa chỉ logic của lệnh hay toán hạng đó. MMU nhận địa chỉ logic và chuyển đổi (dịch) nó ra địa chỉ vật lý, địa chỉ này sẽ được cung cấp ra Bus để truy cập bộ nhớ vật lý. Có hai cách hoạt động trong chế độ địa chỉ ảo là phân đoạn và phân trang.
- Chuyển đổi địa chỉ trong hệ thống làm việc theo cách phân đoạn.
Trong các hệ thống sử dụng bộ vi xử lý Intel từ 80286 tới Pentium, khi làm việc theo cách phân đoạn bảng mô tả (descriptor) sẽ được sử dụng làm bộ chuyển đổi địa chỉ như hình 2.18.
Địa chỉ logic sẽ bao gồm hai phần: Bộ chọn (Selector) và độ dời (Offset). Trong bộ chọn có hai bit dành riêng để mã hoá mức đặc quyền thâm nhập vào một đoạn nào đó của chương trình đang chạy. Trong bảng mô tả, mỗi phần tử của bảng sẽ bao gồm hai phần: một phần chứa địa chỉ cơ sở đoạn dùng để tìm ra địa chỉ vật lý của toán hạng, một phần chứa các bit quản lý (gồm các bit điều khiển và các bit bảo vệ của đoạn), hai trong số các bit này sẽ chứa quyền thâm nhập của đoạn. Khi một chương trình có nhu cầu thâm nhập đoạn nào đó, MMU sẽ so sánh mức đặc quyền của đoạn được ghi trong phần các bit quản lý. Nếu mức đặc quyền trong phần chọn lớn hơn hay bằng mức đặc quyền trong phần quản lý, thì MMU cho phép chương trình thâm nhập vào đoạn được yêu cầu. Nếu không chương trình yêu cầu thâm nhập không được MMU trao quyền thâm nhập, và MMU sẽ gây ra ngắt để báo cho CPU biết có sự vi phạm đặc quyền thâm nhập, bộ nhớ nhờ cơ chế này sẽ được bảo vệ.
Chuyển đổi địa chỉ trong hệ thống làm việc theo cách phân trang.
Trong các hệ thống sử dụng các bộ vi xử lý Intel từ 80386 tới Pentium, ngoài việc quản lý bộ nhớ ảo theo đoạn, MMU còn có khả năng quản lý theo trang. Việc quản lý bộ nhớ ảo theo trang được áp dụng trong rất nhiều loại CPU, các bộ vi xử lý loại RISC và họ 680x0 của hãng Motorola đều sử dụng cách quản lý này. Việc các bộ vi xử lý Intel vẫn dùng cách quản lý theo đoạn là để đảm bảo tính tương thích với 80286. Trong chế độ phân trang, thường độ lớn của trang được chọn là 4KB để đạt được tốc độ tối ưu khi phải trao đổi các trang qua lại giữa bộ nhớ bán dẫn và đĩa. Trong chế độ phân trang, địa chỉ logic được đưa qua bộ phận tính địa chỉ theo kiểu phân đoạn để thu được địa chỉ tuyến tính, địa chỉ tuyến tính này sẽ được chuyển đổi thành địa chỉ vật lý trong bộ phận tính địa chỉ theo kiểu phân trang (hình 2.19).
Hình 2.18: Chuyển đổi địa chỉ trong hệ thống phân đoạn.
Selector Offset
Địa chỉ cơ sở của đoạn
Các bit bảo vệ, điều khiển
Bảng mô tả
Trong các bộ vi xử lý từ 80386 trở lên có các thanh ghi điều khiển CR0 – CR3 dài 32 bit. Khi muốn CPU làm việc theo kiểu phân trang cần phải đưa bit điều khiển thích hợp vào CR0, lúc này CR3 sẽ chứa địa chỉ cơ sở của danh mục bảng trang.
Địa chỉ tuyến tính sẽ bao gồm 3 phần:
- Phần danh mục (Directory) sẽ cộng với nội dung CR3 để trỏ tới một danh mục trong bảng các danh mục trang.
- Phần bảng trang (Page Table) sẽ được cộng với nội dung danh mục mong muốn thu được ở trên để trỏ tiếp vào một bảng trang trong các bảng trang.
- Phần độ dời (Offset) sẽ được cộng với nội dung của bảng trang thu được ở trên để trỏ tiếp tới toán hạng hoặc mã lệnh cần tìm trong giới hạn cho phép của khuôn trang.
Hoạt động tạo địa chỉ vật lý theo chế độ phân trang được biểu diễn trên hình 2.20.
Trong bảng phân trang, mỗi mục cho một khuôn trang 4KB bao gồm các bit địa chỉ cơ sở của khuôn trang và các bit quản lý. Trong danh mục bảng trang cũng vậy, mỗi mục của bảng trang bao gồm các bit địa chỉ cơ sở của bảng trang và các bit quản lý. Trong số các bit quản lý có bit U/S (User/Supervisor) dùng để mã hoá các mức đặc quyền (U/S = 1 biểu thị mức đặc quyền của hệ điều hành và nó tương ứng với mức 1, 2, 3 trong chế độ phân đoạn; U/S = 0 biểu thị mức đặc quyền của người sử dụng ứng với mức 3 trong chế độ phân đoạn) bit R/W (read/write) dùng để biểu thị quyền được đọc ghi vào trang hoặc bảng trang. Tổ hợp hai bit này tạo thành mã các mức đặc quyền thâm nhập (đọc/ghi) khác nhau (11 là mức cao nhất và 00 là mức thấp nhất).