100 lỗi bộ nhớ vật lý. Mã lỗi Trình quản lý thiết bị. Cấp phát bộ nhớ trong Windows NT

Nhiều hệ thống máy tính bao gồm một hoặc một phiên bản khác của trình quản lý bộ nhớ (tên gọi khác là đơn vị quản lý bộ nhớ - MMU), với sự trợ giúp của hệ điều hành đa nhiệm phân bổ bộ nhớ cho từng tác vụ và cung cấp khả năng bảo vệ khỏi các chương trình của người dùng. Ví dụ: một sự cố điển hình xảy ra khi một chương trình ứng dụng mắc lỗi khi tính địa chỉ, có thể sử dụng giá trị chỉ mục quá lớn hoặc quá nhỏ. Nếu hệ thống không được bảo vệ, loại lỗi này có thể dẫn đến thay đổi mã có trong chương trình hệ điều hành hoặc sửa đổi bảng thiết bị và thậm chí gây ra việc khởi động thiết bị ngoài kế hoạch với những hậu quả nghiêm trọng, chẳng hạn như ghi trái phép vào tệp dữ liệu. .

Ngoài việc bảo vệ hệ điều hành khỏi bị phá hủy ngoài ý muốn, trình quản lý bộ nhớ còn cung cấp khả năng di chuyển chương trình tự động. Với sự trợ giúp của trình quản lý bộ nhớ, địa chỉ logic hoặc phần mềm của chương trình người dùng được chuyển đổi thành địa chỉ vật lý hoặc phần cứng. Các địa chỉ này có thể nằm trong bộ nhớ hoàn toàn khác với nơi địa chỉ logic trỏ tới. Dịch địa chỉ khiến hệ điều hành và các thiết bị I/O được bảo vệ bị xóa hoàn toàn khỏi không gian địa chỉ của người dùng. Bất kỳ nỗ lực nào để đọc hoặc ghi bộ nhớ bên ngoài không gian địa chỉ được phân bổ cho người dùng đều khiến bộ xử lý làm hỏng chương trình của người dùng.

Thông tin thường được truyền theo khối bao gồm một số bit cố định; 80386 MP sử dụng các đoạn 32 bit trừ khi được hướng dẫn giảm kích thước đoạn xuống 16 bit. Những phần này được đặt tên theo từ. Quá trình ghi một từ vào hệ thống bộ nhớ được gọi là ghi vào bộ nhớ quá trình lấy lại một từ từ bộ nhớ - đọc từ bộ nhớ.

Có hai phương pháp truy cập bộ nhớ: ngẫu nhiên và tuần tự. Truy cập tuần tự được sử dụng trong các hệ thống lưu trữ nơi các từ được truy cập theo một số thứ tự được xác định trước. Mặt khác, truy cập ngẫu nhiên liên quan đến khả năng truy cập các từ của hệ thống lưu trữ theo bất kỳ thứ tự nào và trong khoảng thời gian gần như nhau.

Cho dù bộ nhớ có hoàn hảo đến đâu thì khi tín hiệu truyền giữa các thiết bị, độ trễ trong quá trình truyền tín hiệu sẽ phát sinh. Độ trễ lan truyền được định nghĩa là thời gian cần thiết để tín hiệu logic truyền qua một thiết bị hoặc chuỗi thiết bị tạo thành chuỗi logic. Độ trễ này cũng tính đến việc truyền tín hiệu dọc theo tất cả các đường kết nối giữa các chip.

Truy cập bộ nhớ trực tiếp (DAM)

Truy cập bộ nhớ trực tiếp cho phép các thiết bị bên ngoài và bộ nhớ trao đổi dữ liệu trực tiếp mà không cần sự can thiệp của chương trình. DDP cung cấp tốc độ I/O tối đa và khả năng xử lý song song tối đa. Trong khi I/O được điều khiển bằng ngắt và I/O được điều khiển bằng phần mềm truyền dữ liệu qua bộ xử lý, thì DMA truyền dữ liệu trực tiếp giữa thiết bị I/O và bộ nhớ.

Để giảm thiểu số lượng bus dữ liệu, các biện pháp đặc biệt được thực hiện để cho phép sử dụng đường trục thông thường cho DMA. Các biện pháp này bao gồm việc bộ xử lý giải phóng đường cao tốc và thiết bị bên ngoài sẽ nắm bắt nó và sử dụng nó để truyền dữ liệu.

Trong DAP, việc thực thi chương trình thường bị treo. Đường trục được giải phóng ngay khi đường điều khiển yêu cầu DMA được kích hoạt. Bộ xử lý chấm dứt hoạt động hiện tại, giải phóng các dòng địa chỉ và dữ liệu, đồng thời xác nhận tín hiệu trên một trong các dòng điều khiển để ngăn chặn việc vô tình giải mã các tín hiệu điều khiển không xác định.

Giao diện I/O truyền dữ liệu trực tiếp vào bộ nhớ bằng một thanh ghi đặc biệt. Khi có nhu cầu truyền dữ liệu, giao diện sẽ yêu cầu một chu kỳ bộ nhớ từ bộ xử lý. Sau khi được xác nhận, giao diện sẽ chuyển dữ liệu trực tiếp vào bộ nhớ trong khi bộ xử lý tạm dừng trong một chu kỳ bộ nhớ. Logic thực hiện việc chuyển giao này được gọi là kênh.

Kênh chứa một thanh ghi để lưu trữ địa chỉ của ô nhớ nơi dữ liệu được truyền đi. Trong hầu hết các trường hợp, kênh cũng bao gồm một bộ đếm từ để đếm số lần truyền trực tiếp được thực hiện. Ngoài ra, kênh phải chứa mạch cung cấp khả năng trao đổi tín hiệu điều khiển, đồng bộ hóa và các hoạt động phụ trợ khác. Trong bộ lễ phục. Hình 13.4 cho thấy các kết nối logic giữa CPU và bộ điều khiển DMA.

thành phần RAP. Các thành phần chính của DMA là bộ kích hoạt yêu cầu, thanh ghi địa chỉ, bộ đếm và thanh ghi dữ liệu, được thiết bị ngoại vi sử dụng. Việc gửi dữ liệu qua kênh DMA bao gồm một số giai đoạn: 1) khởi tạo logic DMA để thực hiện DMA trong các chu kỳ thu giữ bus lặp lại; 2) kích hoạt PDP không đồng bộ đối với các hoạt động của chương trình; 3) thông báo kết thúc quá trình truyền (bằng tín hiệu từ đồng hồ đo hoặc do thay đổi trạng thái của thiết bị); 4) gọi chương trình “dọn dẹp” khi kết thúc quá trình chuyển giao; 5) hoàn thành DDP bằng chương trình dịch vụ ngắt, chương trình này trả lại quyền điều khiển cho chương trình chính.

Chặn chuyển tiếp dữ liệu. Quy trình DDP cho các thiết bị tốc độ cao sử dụng truyền dữ liệu theo khối. Trong khi thực hiện chương trình hiện tại, bộ xử lý bắt đầu truyền một khối dữ liệu và xác định số lượng từ tạo nên khối đó. Tuy nhiên, việc truyền từ thực tế được thực hiện dưới sự điều khiển của một thiết bị riêng biệt - bộ điều khiển DMA. Tốc độ truyền khối tối đa qua kênh DMA chỉ bị giới hạn bởi thời lượng của chu kỳ bộ nhớ (đọc hoặc ghi) và tốc độ hoạt động của bộ điều khiển DMA.

DDP với chu trình chiếm dụng bộ nhớ. Chương trình bắt đầu chuyển khối bằng cách đặt địa chỉ bắt đầu vào bộ đếm địa chỉ và số từ trong bộ đếm từ. và ra lệnh chạy. Loại DDP này thường được gọi là DDP với chiếm chu kỳ bộ nhớ, bởi vì nó tạm dừng việc thực hiện chương trình trong khoảng một chu kỳ máy mỗi lần.

Khi sử dụng DMA chiếm chu kỳ bộ nhớ, việc truyền dữ liệu diễn ra song song với các tiến trình khác đang chạy trên CPU. Trình tự các hành động ở đây giống như đối với truyền khối, ngoại trừ việc bộ điều khiển DMA chiếm các chu kỳ bộ nhớ từ bộ xử lý và do đó làm chậm hoạt động của nó (truyền dữ liệu khối qua kênh DMA cũng nhận chu kỳ bộ nhớ, trừ khi DMA được sử dụng trên một bus riêng).

Các thuật toán ưu tiên/không ưu tiên.

Trong trường hợp thuật toán ưu tiên, hệ điều hành có thể làm gián đoạn việc thực thi luồng hiện tại bất kỳ lúc nào và chuyển bộ xử lý sang luồng khác. Trong các thuật toán không ưu tiên, luồng được cung cấp cho bộ xử lý chỉ quyết định thời điểm chuyển quyền điều khiển sang hệ điều hành.

Các thuật toán có lượng tử hóa.

Mỗi luồng được cung cấp một lát thời gian trong đó luồng có thể thực thi trên bộ xử lý. Khi lượng tử hết hạn, hệ điều hành sẽ chuyển bộ xử lý sang luồng tiếp theo trong hàng đợi. Lượng tử thường bằng một số nguyên các khoảng thời gian của hệ thống 1.

Các thuật toán có mức độ ưu tiên.

Mỗi luồng được gán một mức độ ưu tiên - một số nguyên biểu thị mức độ đặc quyền của luồng. Hệ điều hành, nếu có một số luồng sẵn sàng chạy, sẽ chọn luồng có mức ưu tiên cao nhất.

Windows triển khai thuật toán lập lịch hỗn hợp - ưu tiên, dựa trên lượng tử hóa và mức độ ưu tiên.

  1. Loại đa nhiệm cho ứng dụng DOS
  2. Đảm bảo dịch vụ
  3. Lập kế hoạch các quy trình tiền cảnh
  4. Mục đích của tập tin hoán trang
  5. Các tiến trình P1, P2, P3 phân bổ 100, 20, 80 MB bộ nhớ. Hệ thống có 128MB RAM. Kích thước bộ nhớ bị chiếm dụng trong tệp trang là bao nhiêu. Kích thước của tập tin trao đổi là bao nhiêu.
  1. "lỗi trang" là gì?

Ngắt 14 -Lỗi trang (#PF): Intel386…

Được tạo nếu công cụ trang được kích hoạt (CR0.PG = 1) và một trong các tình huống sau xảy ra khi dịch địa chỉ tuyến tính sang địa chỉ vật lý:

  • phần tử của bảng trang hoặc thư mục trang được sử dụng trong dịch địa chỉ, không có bit hiện diện, I E. bảng trang hoặc trang được yêu cầu không có trong bộ nhớ vật lý;
  • thủ tục không có mức đặc quyền, đủ để truy cập trang đã chọn hoặc cố gắng ghi vào trang được bảo vệ chống ghi đối với cấp đặc quyền hiện tại.

Trình xử lý lỗi trang lấy thông tin về nguyên nhân lỗi trang từ hai nguồn: mã lỗi được đẩy lên ngăn xếp và nội dung của thanh ghi CR2 chứa địa chỉ tuyến tính gây ra lỗi. Mã lỗi trang có định dạng đặc biệt (Hình 3.7.).

Một chương trình bị gián đoạn, sau khi loại bỏ các nguyên nhân gây ra lỗi trang (ví dụ: tải một trang vào bộ nhớ vật lý), có thể tiếp tục mà không cần bất kỳ điều chỉnh bổ sung nào.

Nếu xảy ra lỗi trang do vi phạm đặc quyền bảo mật trang, bit truy cập (A) trong mục nhập thư mục trang tương ứng sẽ được đặt. Hoạt động của bit truy cập trong phần tử tương ứng của bảng trang trong trường hợp này không được quy định trong bộ xử lý Intel và có thể khác nhau ở các kiểu máy khác nhau.

  1. Tỷ lệ lỗi trang cao cho thấy:

Chương trình không an toàn

RAM không đáng tin cậy

Khác: giải thích

Cột “Lỗi trang bị thiếu trong bộ nhớ/giây.”

Trong cột “Lỗi trang hết bộ nhớ/giây.” (Lỗi cứng/giây) hiển thị số lỗi trung bình của trang hết bộ nhớ mỗi giây trong phút vừa qua. Nếu một quá trình cố gắng sử dụng nhiều bộ nhớ vật lý hơn mức hiện có, hệ thống sẽ ghi một số dữ liệu từ bộ nhớ vào đĩa - vào tệp trang. Việc truy cập tiếp theo vào dữ liệu được lưu vào đĩa được gọi là lỗi trang hết bộ nhớ.

Lỗi trang hết bộ nhớ có nghĩa là gì?

Bây giờ bạn đã biết thông tin nào được thu thập trong bảng Quy trình, hãy xem cách bạn có thể sử dụng thông tin đó để giám sát việc phân bổ bộ nhớ. Khi chạy ứng dụng và làm việc với các tệp, trình quản lý bộ nhớ sẽ giám sát kích thước tập hợp làm việc của từng quy trình và ghi lại các yêu cầu về tài nguyên bộ nhớ bổ sung. Khi tập làm việc của một quy trình tăng lên, bộ điều phối sẽ khớp các yêu cầu này với nhu cầu của kernel và các quy trình khác. Nếu không gian địa chỉ khả dụng không đủ, bộ điều phối sẽ giảm kích thước tập làm việc bằng cách lưu trữ dữ liệu từ bộ nhớ vào đĩa.

Sau đó, khi đọc dữ liệu này từ đĩa, xảy ra lỗi hết trang. Điều này khá bình thường, nhưng nếu xảy ra lỗi đồng thời ở các tiến trình khác nhau, hệ thống sẽ cần thêm thời gian để đọc dữ liệu từ đĩa. Quá thường xuyên xảy ra lỗi thoát trang, tương ứng, làm giảm hiệu suất hệ thống. Bạn có thể đã gặp phải hiện tượng chậm bất ngờ trong tất cả các ứng dụng, sau đó đột nhiên dừng lại. Sự chậm lại này gần như chắc chắn là do hoạt động phân phối lại dữ liệu giữa bộ nhớ vật lý và trao đổi.

Kết luận như sau: nếu lỗi trang hết bộ nhớ cho một quy trình cụ thể xảy ra quá thường xuyên và thường xuyên, Máy tính không có đủ bộ nhớ vật lý.

Để thuận tiện hơn trong việc giám sát các quá trình thường xuyên gây ra lỗi hết trang, bạn có thể đánh dấu chúng bằng cờ. Trong trường hợp này, các quy trình đã chọn sẽ di chuyển lên đầu danh sách và trong biểu đồ lỗi thiếu trang, chúng sẽ được biểu thị bằng một đường cong màu cam.

Cần lưu ý rằng việc phân bổ bộ nhớ phụ thuộc vào một số yếu tố khác và việc theo dõi lỗi hết bộ nhớ trang không phải là cách tốt nhất hoặc duy nhất để xác định sự cố. Tuy nhiên, nó có thể phục vụ như một điểm khởi đầu tốt cho việc quan sát.

  1. Mức độ ưu tiên của luồng được xác định trong Windows như thế nào?

Ưu tiên

Hệ điều hành Windows thực hiện lập lịch ưu tiên ưu tiên, khi mỗi luồng được gán một giá trị số nhất định - mức độ ưu tiên, theo đó bộ xử lý được phân bổ cho nó. Các chủ đề có cùng mức độ ưu tiên được lên lịch theo thuật toán Round Robin (băng chuyền). Một ưu điểm quan trọng của hệ thống là khả năng ưu tiên các luồng đang chạy ở chế độ kernel - mã hệ thống điều hành được cấp lại hoàn toàn. Chỉ các luồng có spinlock mới không được ưu tiên (xem "Đồng bộ hóa các luồng"). Do đó, khóa xoay được sử dụng hết sức cẩn thận và được đặt trong thời gian tối thiểu.

Hệ thống cung cấp 32 mức độ ưu tiên. Mười sáu giá trị ưu tiên (16-31) tương ứng với nhóm ưu tiên thời gian thực, mười lăm giá trị (1-15) dành cho các luồng thông thường và giá trị 0 được dành riêng cho luồng zeroing trang hệ thống (xem Hình 6.2 ).

Cơm. 6.2.Ưu tiên chủ đề

Để giúp người dùng giảm bớt nhu cầu ghi nhớ các giá trị ưu tiên bằng số và có thể sửa đổi bộ lập lịch, các nhà phát triển đã đưa vào hệ thống lớp trừu tượng ưu tiên. Ví dụ: lớp ưu tiên cho tất cả các luồng của một quy trình cụ thể có thể được đặt bằng cách sử dụng một tập hợp các tham số không đổi của hàm SetPriorityClass, có thể có các giá trị sau:

  • thời gian thực (REALTIME_PRIORITY_CLASS) - 24
  • cao (HIGH_PRIORITY_CLASS) - 13
  • trên mức bình thường (ABOVE_NORMAL_PRIORITY_CLASS) 10
  • bình thường (NORMAL_PRIORITY_CLASS) - 8
  • dưới mức bình thường (BELOW_NORMAL_PRIORITY_CLASS) - 6
  • và không hoạt động (IDLE_PRIORITY_CLASS) 4

Mức độ ưu tiên tương đối của một luồng được đặt bởi các tham số tương tự của hàm SetThreadPriority:

Một tập hợp gồm sáu lớp ưu tiên quy trình và bảy lớp ưu tiên luồng tạo thành 42 kết hợp có thể có và cho phép chúng ta hình thành cái gọi là mức độ ưu tiên của luồng cơ bản

Mức độ ưu tiên cơ sở mặc định của một tiến trình và luồng chính là giá trị ở giữa phạm vi ưu tiên của tiến trình ( 24, 13, 10, 8, 6 hoặc 4). Thay đổi mức độ ưu tiên của một tiến trình đòi hỏi phải thay đổi mức độ ưu tiên của tất cả các luồng của nó, trong khi mức độ ưu tiên tương đối của chúng vẫn không thay đổi.

Các ưu tiên từ 16 đến 31 không thực sự là ưu tiên theo thời gian thực vì hỗ trợ thời gian thực mềm của Windows không đảm bảo về thời gian của luồng. Đây chỉ đơn giản là những mức độ ưu tiên cao hơn được dành riêng cho các luồng hệ thống và những luồng đó được người dùng có quyền quản trị ưu tiên như vậy. Tuy nhiên, sự hiện diện của các ưu tiên thời gian thực, cũng như tính ưu việt của mã hạt nhân, bản địa hóa các trang bộ nhớ (xem "Hoạt động của trình quản lý bộ nhớ") và một số tính năng bổ sung - tất cả những điều này cho phép bạn chạy thời gian thực mềm các ứng dụng, ví dụ như đa phương tiện, trong môi trường hệ điều hành Windows. Chuỗi hệ thống có mức độ ưu tiên bằng 0 đang bận xóa các trang bộ nhớ. Chủ đề người dùng thông thường có thể có mức độ ưu tiên từ 1 đến 15.


Thông tin liên quan.


Trong bài viết trước của tôi "" Tôi đã nói về các khả năng của Trình giám sát tài nguyên Windows 7 (Trình giám sát tài nguyên), giải thích cách sử dụng nó để giám sát việc phân phối tài nguyên hệ thống giữa các quy trình và dịch vụ, đồng thời đề cập rằng nó có thể được sử dụng để giải quyết các vấn đề cụ thể vấn đề - ví dụ: để phân tích mức tiêu thụ bộ nhớ. Đây chính xác là những gì bài viết này sẽ thảo luận.

Một chút về trí nhớ

Trước khi bắt đầu phân tích, tôi sẽ nói ngắn gọn về cách nó kiểm soát bộ nhớ. Điều này sẽ giúp bạn dễ hiểu hơn những thông tin nào được trình bày trong Trình giám sát tài nguyên Windows 7.

Trình quản lý bộ nhớ Windows 7 tạo một hệ thống bộ nhớ ảo bao gồm RAM vật lý có sẵn và tệp trang trên ổ cứng. Điều này cho phép hệ điều hành phân bổ các khối bộ nhớ (trang) có độ dài cố định với các địa chỉ tuần tự trong bộ nhớ vật lý và ảo.

Khởi chạy Trình giám sát tài nguyên Windows 7

Để khởi chạy Windows 7 Resource Monitor, hãy mở menu Bắt đầu, nhập "Resmon.exe" vào thanh tìm kiếm và nhấp vào . Trong cửa sổ mở ra, chọn tab “Bộ nhớ” (Hình A).

Hình A: Tab Bộ nhớ trong Windows 7 Resource Monitor cung cấp thông tin phân bổ bộ nhớ chi tiết.

Bảng quy trình

Tab Bộ nhớ có bảng Quy trình (Hình B) liệt kê tất cả các quy trình đang chạy và chia mức sử dụng bộ nhớ thành nhiều danh mục.


Hình B: Thông tin sử dụng bộ nhớ cho mỗi tiến trình được chia thành nhiều loại.

Cột "Hình ảnh"

Cột “Hình ảnh” cho biết tên của tệp thực thi quy trình. Các tiến trình chạy bởi các ứng dụng rất dễ nhận biết - ví dụ: tiến trình “notepad.exe” rõ ràng thuộc về Notepad. Các quy trình có tên "svchost.exe" đại diện cho nhiều dịch vụ hệ điều hành khác nhau. Tên dịch vụ xuất hiện trong ngoặc đơn bên cạnh tên quy trình.

Cột ID tiến trình

Cột ID tiến trình (PID) cho biết số tiến trình - một tổ hợp số duy nhất cho phép bạn xác định tiến trình đang chạy.

Cột "Đã hoàn thành"

Cột Cam kết cho biết dung lượng bộ nhớ ảo, tính bằng kilobyte, mà hệ thống đã dành riêng cho quá trình này. Điều này bao gồm cả bộ nhớ vật lý được sử dụng và các trang được lưu trữ trong tệp hoán trang.

Cột "Bộ công việc"

Cột Working Set cho biết lượng bộ nhớ vật lý tính bằng kilobyte được quy trình sử dụng tại một thời điểm nhất định. Bộ làm việc bao gồm bộ nhớ chung và bộ nhớ riêng.

Cột “Chung”

Cột Có thể chia sẻ cho biết dung lượng bộ nhớ vật lý tính bằng kilobyte mà quy trình này chia sẻ với những quy trình khác. Chia sẻ một phân đoạn bộ nhớ hoặc trang trao đổi cho các quy trình liên quan có thể tiết kiệm dung lượng bộ nhớ. Điều này về mặt vật lý chỉ lưu trữ một bản sao của trang, sau đó được ánh xạ tới không gian địa chỉ ảo của các quy trình khác truy cập vào nó. Ví dụ: tất cả các quy trình được khởi tạo bởi các DLL hệ thống - Ntdll, Kernel32, Gdi32 và User32 - đều sử dụng bộ nhớ dùng chung.

Cột "Riêng tư"

Cột Riêng tư cho biết dung lượng bộ nhớ vật lý, tính bằng kilobyte, được sử dụng riêng cho quy trình này. Chính giá trị này cho phép bạn xác định lượng bộ nhớ mà một ứng dụng cụ thể cần để hoạt động.

Cột “Lỗi trang bị thiếu trong bộ nhớ/giây.”

Trong cột “Lỗi trang hết bộ nhớ/giây.” (Lỗi cứng/giây) hiển thị số lỗi trung bình của trang hết bộ nhớ mỗi giây trong phút vừa qua. Nếu một quá trình cố gắng sử dụng nhiều bộ nhớ vật lý hơn mức hiện có, hệ thống sẽ ghi một số dữ liệu từ bộ nhớ vào đĩa - vào tệp trang. Việc truy cập tiếp theo vào dữ liệu được lưu vào đĩa được gọi là lỗi trang hết bộ nhớ.

Lỗi trang hết bộ nhớ có nghĩa là gì?

Bây giờ bạn đã biết thông tin nào được thu thập trong bảng Quy trình, hãy xem cách bạn có thể sử dụng thông tin đó để giám sát việc phân bổ bộ nhớ. Khi chạy ứng dụng và làm việc với các tệp, trình quản lý bộ nhớ sẽ giám sát kích thước tập hợp làm việc của từng quy trình và ghi lại các yêu cầu về tài nguyên bộ nhớ bổ sung. Khi tập làm việc của một quy trình tăng lên, bộ điều phối sẽ khớp các yêu cầu này với nhu cầu của kernel và các quy trình khác. Nếu không gian địa chỉ khả dụng không đủ, bộ điều phối sẽ giảm kích thước tập làm việc bằng cách lưu trữ dữ liệu từ bộ nhớ vào đĩa.

Sau đó, khi đọc dữ liệu này từ đĩa, xảy ra lỗi hết trang. Điều này khá bình thường, nhưng nếu xảy ra lỗi đồng thời ở các tiến trình khác nhau, hệ thống sẽ cần thêm thời gian để đọc dữ liệu từ đĩa. Lỗi hết trang quá thường xuyên sẽ làm giảm hiệu suất hệ thống. Bạn có thể đã gặp phải hiện tượng chậm bất ngờ trong tất cả các ứng dụng, sau đó đột nhiên dừng lại. Sự chậm lại này gần như chắc chắn là do hoạt động phân phối lại dữ liệu giữa bộ nhớ vật lý và trao đổi.

Kết luận như sau: nếu lỗi hết trang cho một quá trình cụ thể xảy ra quá thường xuyên và thường xuyên thì máy tính không có đủ bộ nhớ vật lý.

Để thuận tiện hơn trong việc giám sát các quá trình thường xuyên gây ra lỗi hết trang, bạn có thể đánh dấu chúng bằng cờ. Trong trường hợp này, các quy trình đã chọn sẽ di chuyển lên đầu danh sách và trong biểu đồ lỗi thiếu trang, chúng sẽ được biểu thị bằng một đường cong màu cam.

Cần lưu ý rằng việc phân bổ bộ nhớ phụ thuộc vào một số yếu tố khác và việc theo dõi lỗi hết bộ nhớ trang không phải là cách tốt nhất hoặc duy nhất để xác định sự cố. Tuy nhiên, nó có thể phục vụ như một điểm khởi đầu tốt cho việc quan sát.

Bảng "Bộ nhớ vật lý"

Bảng Quy trình cung cấp thông tin chi tiết về việc phân bổ bộ nhớ giữa các quy trình riêng lẻ và bảng Bộ nhớ vật lý cung cấp bức tranh tổng thể về việc sử dụng RAM. Thành phần chính của nó là biểu đồ duy nhất được hiển thị trong Hình. C.


Hình C: Biểu đồ trong bảng Bộ nhớ vật lý cung cấp cái nhìn tổng quan về phân bổ bộ nhớ trong Windows 7.

Mỗi phần của biểu đồ được biểu thị bằng màu riêng và đại diện cho một nhóm trang bộ nhớ cụ thể. Khi hệ thống được sử dụng, trình quản lý bộ nhớ sẽ di chuyển dữ liệu giữa các nhóm này ở chế độ nền, duy trì sự cân bằng tinh tế giữa bộ nhớ vật lý và bộ nhớ ảo để đảm bảo tất cả các ứng dụng chạy hiệu quả. Chúng ta hãy xem xét kỹ hơn biểu đồ.

Mục “Thiết bị dự trữ”

Bên trái là phần “Dành riêng cho phần cứng”, được biểu thị bằng màu xám: đây là bộ nhớ được phân bổ cho nhu cầu của phần cứng được kết nối mà nó sử dụng để tương tác với hệ điều hành. Bộ nhớ dành riêng cho phần cứng bị khóa và người quản lý bộ nhớ không thể truy cập được.

Thông thường, dung lượng bộ nhớ được phân bổ cho thiết bị dao động từ 10 đến 70 MB, nhưng con số này phụ thuộc vào cấu hình hệ thống cụ thể và trong một số trường hợp có thể lên tới vài trăm megabyte. Các thành phần ảnh hưởng đến dung lượng bộ nhớ dự trữ bao gồm:

;
các thành phần bo mạch chủ - chẳng hạn như Bộ điều khiển ngắt I/O có thể lập trình nâng cao (APIC);
card âm thanh và các thiết bị khác thực hiện đầu vào/đầu ra được ánh xạ bộ nhớ;
Xe buýt PCI Express (PCIe);
card màn hình;
nhiều loại chipset khác nhau;
ổ đĩa flash.

Một số người dùng phàn nàn rằng hệ thống của họ dành một lượng bộ nhớ bất thường cho phần cứng của họ. Tôi chưa bao giờ gặp phải tình huống như vậy và do đó tôi không thể đảm bảo tính hiệu quả của giải pháp được đề xuất, nhưng nhiều người lưu ý rằng việc cập nhật phiên bản BIOS có thể giải quyết được vấn đề.

Phần “Đang sử dụng”

Phần Đang sử dụng, được hiển thị bằng màu xanh lục, biểu thị dung lượng bộ nhớ được hệ thống, trình điều khiển và các tiến trình đang chạy sử dụng. Dung lượng bộ nhớ được sử dụng được tính bằng giá trị “Tổng cộng” trừ đi tổng của các chỉ báo “Đã sửa đổi”, “Chế độ chờ” và “Còn trống”. Đổi lại, giá trị “Tổng” là chỉ báo “RAM đã cài đặt” trừ đi chỉ báo “Thiết bị dự trữ”.

Phần "Đã thay đổi"

Phần “Đã sửa đổi” được tô sáng màu cam, biểu thị bộ nhớ đã được sửa đổi nhưng không được sử dụng. Trên thực tế, nó không được sử dụng nhưng có thể sử dụng bất cứ lúc nào nếu cần. Nếu bộ nhớ không được sử dụng trong một thời gian dài, dữ liệu sẽ được chuyển sang tệp trang và bộ nhớ sẽ chuyển sang danh mục "Đang chờ".

Phần "Chờ đợi"

Phần Đang chờ xử lý, được hiển thị bằng màu xanh lam, biểu thị các trang bộ nhớ đã bị xóa khỏi nhóm làm việc nhưng vẫn được liên kết với chúng. Nói cách khác, danh mục "Đang chờ" thực chất là một bộ nhớ đệm. Các trang bộ nhớ trong danh mục này được gán mức độ ưu tiên từ 0 đến 7 (tối đa). Các trang được liên kết với quy trình có mức độ ưu tiên cao sẽ nhận được mức độ ưu tiên tối đa. Ví dụ: các quy trình được chia sẻ có mức độ ưu tiên cao, do đó các trang được liên kết với chúng sẽ có mức độ ưu tiên cao nhất trong danh mục Đang chờ xử lý.

Nếu một tiến trình yêu cầu dữ liệu từ một trang đang chờ, trình quản lý bộ nhớ sẽ ngay lập tức trả trang đó về tập làm việc. Tuy nhiên, tất cả các trang trong danh mục Đang chờ xử lý đều có sẵn để ghi dữ liệu từ các quy trình khác. Khi một tiến trình yêu cầu bộ nhớ bổ sung và không có đủ bộ nhớ trống, trình quản lý bộ nhớ sẽ chọn trang chờ có mức ưu tiên thấp nhất, khởi tạo nó và phân bổ nó cho tiến trình yêu cầu.

Phần "Miễn phí"

Danh mục Miễn phí, được biểu thị bằng màu xanh lam, biểu thị các trang bộ nhớ chưa được phân bổ cho bất kỳ quy trình nào hoặc đã được giải phóng khi quy trình kết thúc. Phần này hiển thị cả bộ nhớ chưa sử dụng và bộ nhớ đã giải phóng, nhưng trên thực tế, bộ nhớ chưa sử dụng thuộc một danh mục khác - “Zero Pages”, được gọi như vậy vì các trang này được khởi tạo về 0 và sẵn sàng để sử dụng.

Về vấn đề bộ nhớ trống

Bây giờ bạn đã hiểu cơ bản về cách hoạt động của trình quản lý bộ nhớ, hãy dành chút thời gian để giải quyết quan niệm sai lầm phổ biến về hệ thống quản lý bộ nhớ trong Windows 7. Như bạn có thể thấy trong Hình 1. C, Phần bộ nhớ trống là một trong những phần nhỏ nhất trong biểu đồ. Tuy nhiên, thật sai lầm khi cho rằng trên cơ sở này Windows 7 tiêu tốn quá nhiều bộ nhớ và hệ thống không thể hoạt động bình thường nếu có quá ít bộ nhớ trống.

Trên thực tế, nó hoàn toàn ngược lại. Trong bối cảnh cách tiếp cận quản lý bộ nhớ của Windows 7, bộ nhớ trống là vô dụng. Càng sử dụng nhiều bộ nhớ thì càng tốt. Bằng cách tối đa hóa bộ nhớ và liên tục di chuyển các trang từ danh mục này sang danh mục khác bằng hệ thống ưu tiên, Windows 7 cải thiện hiệu quả và ngăn dữ liệu kết thúc trong tệp trang, ngăn lỗi ngoài trang làm chậm hiệu suất.

Giám sát bộ nhớ

Bạn muốn xem hệ thống quản lý bộ nhớ của Windows 7 hoạt động như thế nào? Khởi động lại máy tính của bạn và ngay sau khi khởi động, hãy mở Trình giám sát tài nguyên Windows 7. Chuyển đến tab Bộ nhớ và chú ý đến tỷ lệ các phần trong biểu đồ bộ nhớ vật lý.

Sau đó bắt đầu khởi chạy ứng dụng. Khi bạn chạy, hãy xem biểu đồ thay đổi. Khi bạn đã khởi chạy nhiều ứng dụng nhất có thể, hãy bắt đầu đóng từng ứng dụng một và xem tỷ lệ các phần trong biểu đồ bộ nhớ vật lý thay đổi như thế nào.

Bằng cách thực hiện thử nghiệm cực đoan này, bạn sẽ hiểu cách Windows 7 quản lý bộ nhớ trên máy tính cụ thể của mình và bạn sẽ có thể sử dụng Windows 7 Resource Monitor để giám sát việc phân bổ bộ nhớ trong điều kiện hoạt động bình thường hàng ngày.

Bạn nghĩ sao?

Bạn có thích ý tưởng sử dụng Windows 7 Resource Monitor để giám sát việc phân bổ bộ nhớ không? Chia sẻ ý kiến ​​​​của bạn trong các ý kiến!

Cấp phát bộ nhớ trong Windows 9x và Windows NT. Trình giám sát tài nguyên Windows 7. Khám phá các mục và tab liên quan đến bộ nhớ. Sử dụng Windows 7 Resource Monitor để giám sát việc cấp phát bộ nhớ. Tăng kích thước của tệp hoán trang (bộ nhớ ảo). Kiểm tra bộ nhớ bằng Windows.

3.1. Cấp phát bộ nhớ trong Windows 9x

Hệ điều hành Windows 9x là hệ điều hành đa luồng 32 bit với tính năng đa nhiệm ưu tiên và giao diện người dùng đồ họa. Để khởi động, chúng sử dụng MS-DOS 7.0, cung cấp hai chế độ hoạt động của bộ xử lý - thực (BootGUI=0 được ghi trong tệp MSDOS.SYS) và được bảo vệ (BootGUI=1). Chế độ được bảo vệ được cài đặt ngay trước khi Windows 9x khởi động, do đó bộ xử lý bắt đầu quản lý bộ nhớ bằng cơ chế phân trang để chuyển đổi địa chỉ ảo thành địa chỉ vật lý. Vùng không gian địa chỉ ảo bao gồm 4 kilobyte trang, nằm trong RAM hoặc trên đĩa.

Các địa chỉ cấp thấp của không gian địa chỉ ảo được tất cả các quy trình sử dụng chung để đảm bảo khả năng tương thích với trình điều khiển thiết bị thời gian thực, các chương trình Windows thường trú, v.v. Điều này một mặt thuận tiện nhưng mặt khác làm giảm độ tin cậy (một trong những phẩm chất chính của hệ điều hành), bởi vì bất kỳ tiến trình nào cũng có thể làm hỏng các thành phần nằm ở những địa chỉ này.

Mỗi chương trình ứng dụng Windows 32 bit chạy trong không gian địa chỉ riêng nhưng có thể truy cập vào các địa chỉ cần thiết, tức là. việc tổ chức các địa chỉ ảo không sử dụng tất cả các biện pháp bảo vệ phần cứng được tích hợp trong bộ vi xử lý. Các chương trình 16 bit chia sẻ một không gian địa chỉ chung và cũng dễ bị tấn công lẫn nhau. Mô hình bộ nhớ Windows 9x được hiển thị trong Hình 3.1.

Cơm. 3.1. Các bản phân phối OP trong Windows 9x

64 KB thấp hơn của OP không thể truy cập được đối với các chương trình 32 bit, nhưng các chương trình 16 bit có thể ghi dữ liệu của chúng ở đây. Các địa chỉ dưới 4 MB được ánh xạ vào không gian địa chỉ của từng chương trình ứng dụng và được chia sẻ bởi tất cả các quy trình. Điều này làm cho khu vực này dễ bị viết nhầm.

Dung lượng bộ nhớ tối thiểu cần thiết để Windows 9x hoạt động là 4 MB, nhưng thực tế không thể hoạt động với lượng bộ nhớ này. Tệp trang , với sự trợ giúp của cơ chế bộ nhớ ảo được triển khai, nằm trong thư mục Windows và có kích thước thay đổi, được chính hệ thống thay đổi nếu cần. Kích thước của nó có thể được đặt bằng các công cụ hệ thống (Bảng điều khiển → Hệ thống → Hiệu suất → Hệ thống tệp) hoặc được chỉ định trong phần SYSTEM.INI của tệp - các dòng cho biết tên ổ đĩa và tệp:

Pagingyear=c:\PageFile.sys

MinPagingFileSize=65536 (64 MB)

MaxPagingFileSize=262144 (256 MB)

Dòng đầu tiên và thứ hai xác định tên tệp và vị trí của nó, còn hai dòng cuối cùng – kích thước ban đầu và kích thước tối đa của tệp trang tính bằng KB.

Có thể lấy kích thước tệp hoán trang tối thiểu bằng cách chạy SysMon (Giám sát hệ thống) và chọn kích thước tệp hoán trang cũng như dung lượng bộ nhớ trống làm tham số bắt buộc để ước tính yêu cầu bộ nhớ của các ứng dụng được sử dụng thường xuyên nhất.

3.2. Cấp phát bộ nhớ trong Windows NT

Sự khác biệt giữa sơ đồ phân phối và Windows 9x như sau:

1) sử dụng nghiêm túc hơn tính năng bảo vệ bộ nhớ phần cứng được cung cấp trong bộ vi xử lý;

2) tất cả các mô-đun phần mềm hệ thống đều được đặt trong không gian địa chỉ ảo của riêng chúng và các chương trình ứng dụng không thể truy cập chúng.

Sự phân bố không gian địa chỉ trong Windows NT được thể hiện trong hình. 3.2.

Cơm. 3.2. Bản phân phối OP trong Windows NT

Các chương trình ứng dụng được phân bổ 2 GB không gian địa chỉ tuyến tính (không có cấu trúc) cục bộ (không có cấu trúc) (64 KB đầu tiên không có sẵn). Chúng bị cô lập với nhau và chỉ có thể giao tiếp với nhau thông qua bảng tạm hoặc thông qua cơ chế DDE (Trao đổi dữ liệu động) và OLE (Liên kết và nhúng đối tượng).

Phần trên của vùng 2 GB chứa mã cho các DLL hệ thống (thư viện được liên kết động) hoạt động như các tiến trình máy chủ. Họ kiểm tra các giá trị của tham số truy vấn, thực thi chức năng được yêu cầu và gửi kết quả trở lại không gian địa chỉ của chương trình gọi.

Trong phạm vi địa chỉ 2-4 GB có các thành phần hệ thống (cấp thấp) của Windows (tức là mức bảo vệ cao nhất chống lại truy cập trái phép: kernel, bộ lập lịch luồng, trình quản lý bộ nhớ).

Đối với các ứng dụng Windows 16-bit, các phiên WOW (Windows On Windows) được triển khai ở chế độ đa nhiệm ưu tiên, riêng lẻ trong không gian địa chỉ riêng của chúng hoặc cùng nhau trong không gian địa chỉ dùng chung.

Khi một ứng dụng được khởi chạy, một quy trình sẽ được tạo với cấu trúc thông tin riêng của nó, trong đó tác vụ sẽ được khởi chạy. Nó có thể chạy các nhiệm vụ khác. Kết quả là một chế độ hoạt động đa nhiệm được tổ chức.

Việc quản lý bộ nhớ (cấp phát, đặt trước, giải phóng, phân trang) được thực hiện bởi trình quản lý bộ nhớ ảo VMM (Trình quản lý bộ nhớ ảo). Mỗi trang ảo được chuyển đến một trang vật lý - một khung trang, ban đầu chứa đầy các số 0 (đây là yêu cầu chính của tiêu chuẩn hệ thống bảo mật cấp C2, xác định các quy trình khác không thể sử dụng nội dung trước đó của chúng). Không gian để hoán đổi trang được dành riêng trong tệp trang Pagefile.sys, đây là một khối không gian đĩa dành riêng.

Tất cả bộ nhớ Windows NT được chia thành kín đáo(để các tiến trình sử dụng động khi thực hiện các tác vụ), tận tụy(đối với việc tải lên được dành riêng trong Pagefile.sys) và có thể truy cập(phần còn lại của bộ nhớ trống).

      Bộ nhớ ảo trong Windows

Lý do phổ biến nhất khiến hệ thống dựa trên Windows chạy chậm là khi bộ nhớ vật lý đầy. Đồng thời, Windows bắt đầu cái gọi là "phân trang" - di chuyển các khối mã và dữ liệu chương trình (mỗi khối như vậy được gọi là một trang) từ bộ nhớ vật lý vào ổ cứng. Việc truy cập tệp trang thỉnh thoảng là điều bình thường và không làm giảm hiệu suất hệ thống, nhưng các yêu cầu thường xuyên về dữ liệu từ một tệp trên đĩa có thể làm giảm đáng kể tốc độ tổng thể của hệ thống. Vấn đề này đặc biệt đáng chú ý khi chuyển đổi giữa nhiều chương trình sử dụng nhiều bộ nhớ trên máy tính không có đủ bộ nhớ vật lý. Kết quả là, đĩa gần như được sử dụng liên tục vì hệ thống cố gắng "bơm" dữ liệu từ nó vào bộ nhớ và ngược lại.

Nếu tổng kích thước bộ nhớ được phân bổ vượt quá tổng dung lượng bộ nhớ vật lý, Windows phải "bơm" các trang giữa RAM nhanh và bộ nhớ ảo chậm hơn nhiều trong tệp trang, khiến hệ thống chạy chậm lại.

Trong quá trình cài đặt Windows XP, một tệp hoán trang sẽ tự động được tạo trong thư mục gốc trên cùng ổ đĩa nơi chứa các tệp hệ thống Windows. Kích thước tệp hoán trang được xác định dựa trên dung lượng bộ nhớ vật lý trên hệ thống. Theo mặc định, kích thước tệp trang tối thiểu là 1,5 lần dung lượng bộ nhớ vật lý và kích thước tối đa là gấp 3 lần kích thước. Có thể nhìn thấy tệp hoán đổi trong cửa sổ Explorer nếu bạn bật chế độ hiển thị các tệp hệ thống và ẩn (Hình 3.3).

Cơm. 3.3. Cho phép hiển thị các tập tin ẩn và hệ thống

Thông thường, hệ điều hành Windows tự thiết lập dung lượng bộ nhớ ảo tối ưu và đủ cho hầu hết các tác vụ, nhưng nếu máy tính chạy các ứng dụng yêu cầu nhiều bộ nhớ thì dung lượng bộ nhớ ảo có thể được thay đổi.

Để thực hiện việc này, bạn cần thực hiện chuỗi hành động sau:

1. Đăng nhập vào hệ thống bằng tài khoản từ nhóm Quản trị viên và mở cửa sổ “Control Panel – System”.

2. Trên tab “Nâng cao”, nhấp vào nút “Tùy chọn” trong phần “Hiệu suất” (Hình 3.4).

3. Trong hộp thoại Tùy chọn Hiệu suất, chọn tab Nâng cao và nhấp vào nút Thay đổi (Hình 3.5) để hiển thị hộp thoại Bộ nhớ Ảo, được hiển thị trong Hình 3.5. 3.6 cho Windows XP và trong Hình. 3.7 cho Windows 7.

Cài đặt tệp hoán trang hiện tại được phản ánh trong trường “Tổng kích thước tệp hoán trang trên tất cả các ổ đĩa”.

4. Chọn bất kỳ ổ đĩa nào từ danh sách ở đầu hộp thoại để định cấu hình cài đặt cho ổ đĩa đó.

Bạn có thể thay đổi các cài đặt sau:

- Kích thước đặc biệt. Nhập giá trị vào trường Kích thước ban đầuđể đặt kích thước ban đầu của tệp pagefile.sys trên đĩa được chỉ định (tính bằng megabyte). Trong lĩnh vực Kích thước tối đa nhập một số không nhỏ hơn giá trị vào trường Kích thước ban đầu, nhưng không vượt quá 4096 MB (4 GB).

- Kích thước theo sự lựa chọn của hệ thống. Chọn tùy chọn này để bật quản lý động kích thước tệp hoán trang cho ổ đĩa này. Chọn tùy chọn này nếu bạn không muốn thay đổi cài đặt mặc định mà Windows cung cấp.

- Không có tập tin trao đổi. Sử dụng cho tất cả các ổ đĩa mà bạn không cần tệp trang. Đảm bảo có tệp hoán đổi trên ít nhất một ổ đĩa.

5. Sau khi thực hiện bất kỳ thay đổi nào, hãy nhấp vào Bộđể ghi lại những thay đổi.

6. Lặp lại bước 4 và 5 cho các ổ đĩa khác (nếu cần). Bấm OK để đóng hộp thoại khi bạn hoàn tất.

Cơm. 3.4. Nút “Tùy chọn” để xem và/hoặc

thay đổi thông số bộ nhớ ảo

Cơm. 3.5. Nút “Change” để thay đổi cài đặt bộ nhớ ảo trong WindowsXP (trái) và trong Windows7

Cơm. 3.6. Cửa sổ xem và thiết lập kích thước bộ nhớ ảo

Cơm. 3.7. Cửa sổ xem và thiết lập kích thước bộ nhớ ảo trong Windows 7

Nếu máy tính của bạn có nhiều đĩa vật lý, tốt nhất nên đặt tệp trang vào nhanh nhất và sẽ tốt hơn nếu các tệp hệ thống Windows nằm trên một đĩa khác. Sẽ tốt hơn nếu chia tệp trang thành nhiều phần thuộc vật chấtđĩa vì bộ điều khiển đĩa có thể xử lý song song nhiều yêu cầu ghi và đọc.

Đừng cố đặt tệp hoán trang trên nhiều ổ đĩa logic của một ổ đĩa vật lý!!!

Nếu hệ thống có một ổ cứng được chia thành các phân vùng C, D và E và tệp trang được phân phối trên nhiều phân vùng thì hệ thống thậm chí có thể chạy chậm lại, vì trong cấu hình này, đầu từ của ổ cứng phải đọc dữ liệu từ đó. một số vùng chứ không phải từ vùng này sang vùng khác của đĩa.

Nếu bạn giảm kích thước tệp hoán trang tối thiểu hoặc tối đa và tạo tệp hoán trang mới trên đĩa, bạn phải khởi động lại hệ thống để các thay đổi có hiệu lực. Việc tăng kích thước của tệp trang thường không yêu cầu khởi động lại máy tính.

Nếu bạn có nhiều bộ nhớ vật lý, bạn có thể muốn tắt hoàn toàn tệp trang. Đừng làm thế! !!

Windows XP được thiết kế để sử dụng tệp trang để thực hiện một số tác vụ lõi, vì vậy một số chương trình của bên thứ ba có thể báo cáo bộ nhớ thấp khi cố gắng tắt hoàn toàn bộ nhớ ảo.

Windows không sử dụng tệp trang cho đến khi cần, vì vậy việc tắt bộ nhớ ảo sẽ không cải thiện hiệu suất!!!

Windows có thể tự động tăng kích thước tệp trang nếu cần. Chức năng này chỉ hoạt động khi bạn chọn " Kích thước có thể lựa chọn của hệ thống", cũng như khi đặt kích thước tối đa lớn hơn kích thước hiện tại của tệp hoán trang.

Dựa trên kinh nghiệm với các phiên bản Windows trước, một số người dùng cố gắng tạo tệp hoán trang có kích thước cố định với kích thước ban đầu và kích thước tối đa bằng nhau. Về lý thuyết, điều này sẽ cải thiện hiệu suất vì nó loại bỏ khả năng phân mảnh tệp trang. Tuy nhiên, hệ thống con phân trang được thiết kế sao cho trong thực tế tệp chỉ chiếm các khối không gian đĩa lớn, khiến cho việc phân mảnh trở nên tối thiểu. Bạn có thể nhận thấy hiệu suất bị giảm nhẹ khi Windows tăng kích thước của tệp trang nhưng đây chỉ là thao tác một lần và không ảnh hưởng đến hiệu suất trung bình.

      Giám sát việc sử dụng bộ nhớ trong Windows

Cách dễ nhất để biết lượng RAM đang được sử dụng tại một thời điểm nhất định là mở Trình quản lý tác vụ bằng cách nhấp vào ++ và chuyển đến tab “Hiệu suất” (Hình 3.8). Mô tả chi tiết về thông tin trong tab “Hiệu suất” dành cho Windows XP được trình bày trong Bảng. 3.1.

Bảng 3.1. Giải mã dữ liệu Trình quản lý tác vụ

Tab Hiệu suất cho Windows7 có những cải tiến đáng kể so với tab tương ứng trong Trình quản lý tác vụ Windows XP.

Con số trong cột “Tổng” của phần “Bộ nhớ vật lý” cho biết tổng dung lượng RAM cho hệ thống này. Cột Đã lưu trong bộ nhớ đệm hiển thị dung lượng bộ nhớ vật lý được tài nguyên hệ thống sử dụng gần đây. Nó vẫn còn trong bộ đệm trong trường hợp hệ thống cần lại, nhưng có sẵn cho các quy trình khác. Cột “Có sẵn” mới cho biết dung lượng bộ nhớ vật lý hiện chưa được sử dụng và cột “Trống” cho biết dung lượng bộ nhớ được bộ nhớ đệm sử dụng nhưng không chứa thông tin hữu ích.

Phần “Bộ nhớ hạt nhân” chứa hai cột - “Đã phân trang” và “Không phân trang”. Chúng cùng nhau cho biết kernel đang sử dụng bao nhiêu bộ nhớ. Phân trang là bộ nhớ ảo và không phân trang là vật lý.

Trong phần “Hệ thống”, các cột dành cho “Xử lý” và “Chủ đề” xuất hiện, được liên kết với các thành phần cấu thành của quy trình. Cột “Bộ mô tả” cho biết số lượng mã định danh đối tượng (bộ mô tả) được sử dụng bởi các quy trình hiện đang chạy. Cột Chủ đề hiển thị số lượng quy trình con đang chạy trong các quy trình lớn hơn. Tất nhiên, con số trong cột “Quy trình” cho biết tổng số quy trình đang chạy, có thể thấy trên tab “Quy trình”.

Cột “Thời gian hoạt động” cho biết thời gian đã trôi qua kể từ lần cuối cùng máy tính được khởi động. Cột “Cam kết” chứa thông tin về tệp hoán trang. Về nguyên tắc, số đầu tiên cho biết tổng dung lượng bộ nhớ vật lý và ảo hiện đang được sử dụng và số thứ hai cho biết tổng dung lượng bộ nhớ cho một máy tính nhất định.

Bạn có thể nhận được nhiều thông tin chi tiết hơn bằng cách nhấp vào nút “Giám sát tài nguyên” và chọn tab “Bộ nhớ” (Hình 3.9).

Cơm. 3.9. Tab bộ nhớ của cửa sổ Resource Monitor Windows 7

Trên tab “Bộ nhớ” có bảng “Quy trình”, liệt kê tất cả các quy trình đang chạy và thông tin về bộ nhớ được sử dụng cho mỗi quy trình được chia thành nhiều loại (Hình 3.10).

Cơm. 3.10. Bảng quy trình

Trong một cột " Hình ảnh" cho biết tên của tệp thực thi quy trình. Rất dễ nhận ra các tiến trình đang chạy bởi các ứng dụng - ví dụ: tiến trình “Winword.exe” rõ ràng thuộc về trình soạn thảo văn bản Word. Các quy trình có tên "svchost.exe" đại diện cho nhiều dịch vụ hệ điều hành khác nhau. Tên dịch vụ xuất hiện trong ngoặc đơn bên cạnh tên quy trình.

Trong một cột " Xử lý ID» cho biết số quy trình - sự kết hợp duy nhất của các số cho phép bạn xác định quy trình đang chạy.

Trong cột " Hoàn thành" cho biết dung lượng bộ nhớ ảo tính bằng kilobyte được hệ thống dành riêng cho quá trình này. Điều này bao gồm cả bộ nhớ vật lý được sử dụng và các trang được lưu trữ trong tệp hoán trang.

Trong cột " Bộ làm việc" cho biết dung lượng bộ nhớ vật lý tính bằng kilobyte được quy trình sử dụng tại một thời điểm nhất định. Bộ làm việc bao gồm bộ nhớ chung và bộ nhớ riêng.

Trong một cột " Tổng quan" cho biết dung lượng bộ nhớ vật lý tính bằng kilobyte mà quá trình này chia sẻ với những quá trình khác. Chia sẻ một phân đoạn bộ nhớ hoặc trang trao đổi cho các quy trình liên quan có thể tiết kiệm dung lượng bộ nhớ. Điều này về mặt vật lý chỉ lưu trữ một bản sao của trang, sau đó được ánh xạ tới không gian địa chỉ ảo của các quy trình khác truy cập vào nó. Ví dụ: tất cả các quy trình được khởi tạo bởi các DLL hệ thống - Ntdll, Kernel32, Gdi32 và User32 - đều sử dụng bộ nhớ dùng chung.

Trong cột " Riêng tư" cho biết dung lượng bộ nhớ vật lý tính bằng kilobyte được sử dụng riêng cho quy trình này. Chính giá trị này cho phép bạn xác định lượng bộ nhớ mà một ứng dụng cụ thể cần để hoạt động.

Trong cột " Trang hết lỗi bộ nhớ/giây."Số lỗi trung bình của trang hết bộ nhớ mỗi giây trong phút vừa qua được biểu thị. Nếu một quá trình cố gắng sử dụng nhiều bộ nhớ vật lý hơn mức hiện có, hệ thống sẽ ghi một số dữ liệu từ bộ nhớ vào đĩa - vào tệp trang. Việc truy cập tiếp theo vào dữ liệu được lưu vào đĩa được gọi là lỗi trang hết bộ nhớ.

Khi chạy ứng dụng và làm việc với các tệp, trình quản lý bộ nhớ sẽ giám sát kích thước tập hợp làm việc của từng quy trình và ghi lại các yêu cầu về tài nguyên bộ nhớ bổ sung. Khi tập làm việc của một quy trình tăng lên, bộ điều phối sẽ khớp các yêu cầu này với nhu cầu của kernel và các quy trình khác. Nếu không gian địa chỉ khả dụng không đủ, bộ điều phối sẽ giảm kích thước tập làm việc bằng cách lưu trữ dữ liệu từ bộ nhớ vào đĩa.

Sau đó, khi đọc dữ liệu này từ đĩa, xảy ra lỗi hết trang. Điều này khá bình thường, nhưng nếu xảy ra lỗi đồng thời ở các tiến trình khác nhau, hệ thống sẽ cần thêm thời gian để đọc dữ liệu từ đĩa. Lỗi hết trang quá thường xuyên sẽ làm giảm hiệu suất hệ thống. Điều này thể hiện ở việc tất cả các ứng dụng bị chậm đột ngột, sau đó cũng bất ngờ dừng lại. Sự chậm lại là do hoạt động phân phối lại dữ liệu giữa bộ nhớ vật lý và trao đổi.

Kết luận như sau: nếu lỗi hết trang cho một quá trình cụ thể xảy ra quá thường xuyên và thường xuyên thì máy tính không có đủ bộ nhớ vật lý.

Để thuận tiện hơn trong việc giám sát các quá trình thường xuyên gây ra lỗi hết trang, bạn có thể đánh dấu chúng bằng cờ. Trong trường hợp này, các quy trình đã chọn sẽ di chuyển lên đầu danh sách và trong biểu đồ lỗi thiếu trang, chúng sẽ được biểu thị bằng một đường cong màu cam.

Cần lưu ý rằng việc phân bổ bộ nhớ phụ thuộc vào một số yếu tố khác và việc theo dõi lỗi hết bộ nhớ trang không phải là cách tốt nhất hoặc duy nhất để xác định sự cố. Tuy nhiên, nó có thể phục vụ như một điểm khởi đầu tốt cho việc quan sát.

Bảng Quy trình cung cấp thông tin chi tiết về việc phân bổ bộ nhớ giữa các quy trình riêng lẻ và bảng Bộ nhớ vật lý cung cấp bức tranh tổng thể về việc sử dụng RAM. Thành phần chính của nó là biểu đồ duy nhất được hiển thị trong Hình. 3.11.


Hình 3.11. Biểu đồ trong bảng "Bộ nhớ vật lý" cho phép bạn có được cái nhìn tổng quan về phân bổ bộ nhớ trong Windows 7

Mỗi phần của biểu đồ được biểu thị bằng màu riêng và đại diện cho một nhóm trang bộ nhớ cụ thể. Khi hệ thống được sử dụng, trình quản lý bộ nhớ sẽ di chuyển dữ liệu giữa các nhóm này ở chế độ nền, duy trì sự cân bằng tinh tế giữa bộ nhớ vật lý và bộ nhớ ảo để đảm bảo tất cả các ứng dụng chạy hiệu quả. Chúng ta hãy xem xét kỹ hơn biểu đồ.

Bên trái là phần “ Thiết bị dự trữ", được biểu thị bằng màu xám: đây là bộ nhớ được phân bổ cho nhu cầu của thiết bị được kết nối mà nó sử dụng để tương tác với hệ điều hành. Bộ nhớ dành riêng cho phần cứng bị khóa và người quản lý bộ nhớ không thể truy cập được. Thông thường, dung lượng bộ nhớ được phân bổ cho thiết bị dao động từ 10 đến 70 MB, nhưng con số này phụ thuộc vào cấu hình hệ thống cụ thể và trong một số trường hợp có thể lên tới vài trăm megabyte.

Các thành phần ảnh hưởng đến dung lượng bộ nhớ dự trữ bao gồm:

Các thành phần của bo mạch chủ - chẳng hạn như Bộ điều khiển ngắt I/O có thể lập trình nâng cao (APIC);

Card âm thanh và các thiết bị khác thực hiện đầu vào/đầu ra được ánh xạ bộ nhớ;

Xe buýt PCI Express (PCIe);

Thẻ video;

Chipset khác nhau;

Ổ đĩa flash.

Phần " Đã sử dụng", được biểu thị bằng màu xanh lục, biểu thị dung lượng bộ nhớ được sử dụng bởi hệ thống, trình điều khiển và các tiến trình đang chạy. Dung lượng bộ nhớ được sử dụng được tính bằng giá trị " Tổng cộng» trừ tổng các chỉ số « Đã thay đổi», « Kỳ vọng" Và " Miễn phí" Đổi lại, giá trị " Tổng cộng"là một chỉ số" Cài đặt"trừ chỉ số" Thiết bị dự trữ».

Khi một tiến trình khởi động trong Windows, nhiều trang hiển thị hình ảnh EXE và DLL có thể đã có trong bộ nhớ vì chúng đang được các tiến trình khác sử dụng. Các trang hình ảnh có thể ghi được đánh dấu là "sao chép khi ghi" để chúng có thể được chia sẻ cho đến khi cần sửa đổi. Nếu hệ điều hành nhận ra một EXE đã được thực thi, nó có thể ghi lại mẫu liên kết trang (sử dụng công nghệ mà Microsoft gọi là Super-Fetch). Công nghệ này cố gắng bơm trước nhiều trang cần thiết (mặc dù quá trình này vẫn chưa nhận được lỗi trang trên chúng). Điều này làm giảm độ trễ khởi chạy ứng dụng (đọc các trang từ đĩa trùng lặp với việc thực thi mã khởi tạo của hình ảnh). Công nghệ này cải thiện hiệu suất đầu ra của đĩa vì trình điều khiển đĩa có thể tổ chức các hoạt động đọc dễ dàng hơn (để giảm thời gian tìm kiếm cần thiết). Quá trình phân trang ưu tiên này được sử dụng trong quá trình khởi động hệ thống, cũng như khi một ứng dụng nền chạy lên nền trước và khi hệ thống thức dậy sau chế độ ngủ đông.

Phân trang tìm nạp trước được trình quản lý bộ nhớ hỗ trợ nhưng được triển khai như một thành phần hệ thống riêng biệt. Các trang được phân trang không được chèn vào bảng trang của quy trình; thay vào đó, chúng được chèn vào danh sách chờ mà từ đó chúng có thể được chèn nhanh vào quy trình (không cần truy cập vào đĩa).

Các trang chưa được ánh xạ hơi khác một chút - chúng không được khởi tạo bằng cách đọc từ một tệp. Thay vào đó, khi truy cập lần đầu tiên một trang chưa được ánh xạ, trình quản lý bộ nhớ sẽ cung cấp một trang vật lý mới (đảm bảo nội dung của nó chứa đầy các số 0 vì lý do bảo mật). Trong các lỗi trang tiếp theo, trang chưa được ánh xạ có thể cần được tìm thấy trong bộ nhớ hoặc có thể phải được đọc từ tệp trang.

Phân trang theo yêu cầu trong trình quản lý bộ nhớ được kiểm soát bởi lỗi trang. Mọi lỗi đều gây ra gián đoạn cho kernel. Sau đó, hạt nhân xây dựng một bộ mô tả độc lập với máy (báo cáo những gì đã xảy ra) và chuyển nó cho trình quản lý bộ nhớ điều hành. Trình quản lý bộ nhớ sau đó sẽ kiểm tra tính hợp lệ của quyền truy cập. Nếu trang bị lỗi nằm trong vùng đã cam kết, nó sẽ tra cứu địa chỉ trong danh sách VAD và tìm (hoặc tạo) mục nhập bảng trang của quy trình. Trong trường hợp trang được chia sẻ, trình quản lý bộ nhớ sử dụng mục nhập bảng trang nguyên mẫu (được liên kết với đối tượng phân đoạn) để điền mục nhập bảng trang mới của quy trình.

Định dạng của thành phần bảng trang thay đổi tùy thuộc vào kiến ​​trúc bộ xử lý. Đối với bộ xử lý x86 và x64, các thành phần của trang được hiển thị được hiển thị trong Hình. 17/11. Nếu một phần tử được đánh dấu là hợp lệ thì nội dung của nó sẽ được phần cứng diễn giải (để địa chỉ ảo có thể được dịch sang trang vật lý chính xác). Các trang chưa được ánh xạ cũng có các phần tử của chúng, nhưng chúng được đánh dấu là không hợp lệ và phần cứng sẽ bỏ qua phần tử còn lại. Định dạng phần mềm hơi khác so với định dạng phần cứng và được xác định bởi trình quản lý bộ nhớ. Ví dụ: đối với một trang không được hiển thị (phải được định vị và đặt lại trước khi sử dụng), thực tế này được ghi chú trong thành phần bảng trang.


Hai bit quan trọng của mục bảng trang được phần cứng cập nhật trực tiếp. Đây là bit truy cập (A) và bit sửa đổi (D). Các bit này theo dõi việc sử dụng ánh xạ trang nhất định để truy cập trang và liệu trang có thể được sửa đổi bởi quyền truy cập đó hay không. Điều này thực sự cải thiện hiệu suất hệ thống vì trình quản lý bộ nhớ có thể sử dụng bit truy cập để triển khai phân trang Ít được sử dụng gần đây nhất (LRU). Nguyên tắc của LRU là những trang không được sử dụng lâu nhất sẽ có khả năng được sử dụng lại trong tương lai gần thấp nhất. Bit truy cập cho phép trình quản lý bộ nhớ xác định rằng trang đã được truy cập. Bit "đã sửa đổi" cho trình quản lý bộ nhớ biết rằng trang có thể đã được sửa đổi (hoặc quan trọng hơn là nó chưa được sửa đổi). Nếu trang chưa được sửa đổi kể từ khi nó được đọc từ đĩa thì trình quản lý bộ nhớ không cần ghi nội dung của nó vào đĩa (trước khi sử dụng nó cho mục đích khác).

Cả hai kiến ​​trúc x86 và x64 đều sử dụng mục nhập bảng trang 64-bit (xem Hình 11.17).

Mỗi lỗi trang có thể được phân thành một trong năm loại:

1. Trang không cố định.

2. Cố gắng truy cập một trang vi phạm quyền.

3. Nỗ lực sửa đổi trang sao chép khi ghi.

1. Cần phải tăng ngăn xếp.

2. Trang bị đóng băng nhưng hiện không hiển thị.

Trường hợp thứ nhất và thứ hai là lỗi lập trình. Nếu một chương trình cố gắng sử dụng một địa chỉ không có ánh xạ hợp lệ hoặc cố gắng thực hiện một thao tác bất hợp pháp (chẳng hạn như cố gắng ghi vào trang chỉ đọc), thì điều này được gọi là vi phạm quyền truy cập và thường khiến quá trình chấm dứt . Vi phạm quyền truy cập thường là kết quả của các giá trị con trỏ không hợp lệ, bao gồm quyền truy cập vào bộ nhớ đã bị hủy cấp phát và tách khỏi quy trình.

Trường hợp thứ ba có các triệu chứng tương tự như trường hợp thứ hai (cố gắng ghi vào trang chỉ đọc), nhưng cách xử lý của nó khác. Vì trang được đánh dấu là sao chép khi ghi nên trình quản lý bộ nhớ không báo cáo vi phạm quyền truy cập. Thay vào đó, nó tạo một bản sao riêng tư của trang cho quy trình hiện tại và sau đó trả lại quyền điều khiển cho luồng đã cố gắng ghi vào trang. Chuỗi lặp lại thao tác ghi, thao tác này sẽ hoàn tất mà không có lỗi trang.

Trường hợp thứ tư xảy ra khi một luồng đẩy một giá trị lên ngăn xếp của nó và chạm vào một trang chưa được phân bổ. Trình quản lý bộ nhớ nhận ra đây là trường hợp đặc biệt. Miễn là có không gian trong các trang ảo dành riêng cho ngăn xếp, trình quản lý bộ nhớ sẽ cung cấp các trang mới, loại bỏ chúng và ánh xạ chúng tới quy trình. Khi luồng tiếp tục thực thi, nó sẽ cố gắng truy cập lại và lần này nó sẽ thành công.

Và cuối cùng, trường hợp thứ năm là lỗi trang bình thường. Tuy nhiên, nó có một số tùy chọn phụ. Nếu một trang được ánh xạ tới một tệp, trình quản lý bộ nhớ phải xem cấu trúc dữ liệu của nó (chẳng hạn như bảng trang nguyên mẫu được liên kết với đối tượng phân đoạn) để đảm bảo rằng không có bản sao của nó trong bộ nhớ. Nếu có một bản sao (ví dụ: trong một quy trình khác, trong danh sách chờ hoặc trong danh sách các trang đã sửa đổi), thì anh ta sẽ chỉ chia sẻ nó (anh ta có thể phải đánh dấu nó là trang sao chép để ghi làm điều này nếu những thay đổi không được chia sẻ). Nếu chưa có bản sao nào, trình quản lý bộ nhớ sẽ phân bổ một trang vật lý trống và chuẩn bị cho việc sao chép trang tệp từ đĩa vào đó, trừ khi một trang khác đang được chuyển từ đĩa vào thời điểm đó (trong trường hợp đó bạn chỉ cần đợi cho đến khi quá trình chuyển giao hoàn tất).

Nếu trình quản lý bộ nhớ có thể xử lý lỗi trang bằng cách định vị trang trong bộ nhớ (thay vì đọc nó từ đĩa), lỗi đó được gọi là lỗi mềm. Nếu bạn cần một bản sao từ đĩa thì đây là một lỗi nghiêm trọng. Lỗi mềm rẻ hơn nhiều và ít ảnh hưởng đến hiệu suất ứng dụng (so với lỗi cứng). Lỗi mềm có thể xảy ra do trang được chia sẻ đã được ánh xạ tới một quy trình khác hoặc đơn giản là cần một trang có số 0 mới hoặc trang mong muốn đã bị xóa khỏi bộ làm việc của quy trình nhưng đang được yêu cầu lại trước khi được sử dụng lại. Lỗi phần mềm cũng có thể xảy ra do các trang đã được nén để tăng kích thước bộ nhớ vật lý một cách hiệu quả. Đối với hầu hết các cấu hình CPU, việc nén bộ nhớ và I/O trên hệ thống hiện tại sẽ hiệu quả hơn thay vì phát sinh I/O đắt tiền (về hiệu suất và năng lượng) yêu cầu đọc một trang từ đĩa.

Khi một trang vật lý không còn được ánh xạ tới bảng trang của bất kỳ quy trình nào, nó sẽ chuyển sang một trong ba danh sách: miễn phí, đã sửa đổi hoặc dành riêng. Những trang không bao giờ cần thiết nữa (chẳng hạn như các trang ngăn xếp của quá trình kết thúc) sẽ được giải phóng ngay lập tức. Những trang có khả năng bị lỗi trang lại nằm trong danh sách đã sửa đổi hoặc danh sách dự phòng (tùy thuộc vào việc bit "đã sửa đổi" đã được đặt cho bất kỳ mục nhập bảng trang nào đã hiển thị trang đó kể từ lần đọc cuối cùng từ đĩa hay chưa) . Các trang từ danh sách đã sửa đổi cuối cùng sẽ được ghi vào đĩa và sau đó được chuyển vào danh sách dự trữ.

Trình quản lý bộ nhớ có thể phân bổ các trang khi cần thiết (sử dụng danh sách các trang trống hoặc trang dự phòng). Trước khi cấp phát một trang và sao chép nó từ đĩa, trình quản lý bộ nhớ luôn kiểm tra danh sách các trang dự phòng và trang đã sửa đổi để xem trang đó đã có trong bộ nhớ chưa. Lược đồ phân trang chuyển tiếp trong Windows chuyển đổi các lỗi cứng trong tương lai thành lỗi mềm (bằng cách đọc các trang có thể cần thiết và đặt chúng vào danh sách trang dự phòng). Bản thân trình quản lý bộ nhớ thực hiện một lượng nhỏ phân trang phía trước - nó truy cập vào các nhóm trang tuần tự (chứ không phải các trang riêng lẻ). Các trang bổ sung ngay lập tức được đặt vào danh sách trang chờ. Điều này không lãng phí vì chi phí của trình quản lý bộ nhớ thấp hơn nhiều so với chi phí thực hiện các thao tác I/O. Đọc toàn bộ cụm trang đắt hơn một chút so với đọc một trang.

Các thành phần của bảng trang trong Hình 2. 11.17 đề cập đến số trang vật lý (không phải ảo). Để cập nhật một mục trong bảng trang (và thư mục trang), kernel cần sử dụng địa chỉ ảo. Windows ánh xạ các bảng trang và thư mục trang cho tiến trình hiện tại tới không gian địa chỉ ảo kernel bằng cách sử dụng phần tử self-map trong thư mục trang (Hình 11.18). Bằng cách ánh xạ một thành phần thư mục trang tới một thư mục trang (tự ánh xạ), chúng ta thu được các địa chỉ ảo có thể được sử dụng để tham chiếu các thành phần thư mục trang (Hình 11.18, a) và các thành phần bảng trang (Hình 11.18, b). Bản đồ tự chiếm 8 MB địa chỉ ảo hạt nhân cho mỗi quy trình (trên bộ xử lý x86). Để đơn giản, hình này hiển thị phần tử tự ánh xạ x86 cho các mục nhập PTE 32-bit (Mục nhập bảng trang). Trên thực tế, Windows sử dụng bản ghi PTE 64 bit nên hệ thống có thể tận dụng hơn 4 GB bộ nhớ vật lý. Với các mục nhập PTE 32-bit, phần tử tự ánh xạ chỉ sử dụng một mục nhập PDE (Mục nhập thư mục trang) trong thư mục trang và do đó chỉ chiếm 4 MB địa chỉ thay vì 8 MB.