Đồ án Xây dựng chương trình quản lý CPU và RAM của Windows
MỤC LỤC
CHƯƠNG 1: MỞ ĐẦU . 4
1.1. Giới thiệu . . . 4
1.1.1. Quản lý bộ nhớ . . . 5
1.1.2. Quản lý tiến trình . . . 5
1.2. Đề tài và muc tiêu . . . 5
1.2.1. Đề tài . . . 5
1.2.2. Mục tiêu. . . 5
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT. 6
2.1. Tổng quan về tiến trình . . . 6
2.1.1. Tiến trình và các lo ại tiến trình . . 7
2.1.1.1. Tiến trình (process): . 7
2.1.1.2. Các loại tiến trình: . 7
2.1.2. Mô hình tiến trình: . . . 10
2.1.3. Tiểu trình và tiến trình . . 13
2.1.3.1. Tiểu trình: . 14
2.1.3.2. Đa tiểu trình trong đơn tiến trình: . 14
2.1.4. Các trạng thái tiến trình . . 15
2.1.4.1. Tiến trình hai trạng thái: . 15
2.1.4.2. Tiến trình ba trạng thái: . 16
2.1.4.3. Tiến trình 4 trạng thái: . 18
2.1.4.4. Tiến trình 5 trạng thái: . 19
2.1.5. Cấu trúc dữ liệu của khối quản lý tiến trình . . 21
2.1.5.1. Định vị của tiến trình (process location): . 21
2.1.5.2. Các thuộc tính của tiến trình: . 22
2.1.6. Các thao tác điều khiển tiến trình . . 23
2.1.7. So sánh Quản lý tiến trình của Windows với Linux . 24
2.1.7.1. Mức ưu tiên trong lập lịch (Scheduling) . 24
2.1.7.2. Thông tin chi tiết về bộ lập lịch: . 25
2.1.7.3. Lập lịch thời gian thực: . 26
2.1.7.4. Lập lịch lát cắt thời gian . 26
2.1.7.5. Kernel Retrancy . 27
2.1.7.6. Kernel Preemptibility . 27
2.1.7.7. Bộ lập lịch (Scheduling) . 28
2.1.7.8. Đồng bộ hóa Light- Weight. 28
2.2. So sánh Hệ thống quản lý bộ nhớ Windows với Linux . 28
2.2.1. Bộ nhớ ảo (Virtual Memory) . . 29
2.2.2. Phân trang (Paging) . . . 29
2.2.3. So sánh giữa Windows với Linux . . 30
2.2.3.1. Các điểm tương đồng giữa hệ thống Quản lý bộ nhớ của Windows và
Linux . 30
2.2.3.2. Cấu trúc dữ liệu để mô tả không gian tiến trình . 30
2.2.3.3. Sự Phân phối không gian địa chỉ tiến trình. 31
2.2.3.4. Thay thế trang (Page Replacement): . 31
2.2.3.5. Kết luận về windows và Linux . 34
CHƯƠNG 3: THIẾT KẾ VÀ XÂY DỰNG CHƯƠNG TRÌNH .34
3.1. Phân tích chức năng: . . . 34
3.1.1. Lấy thông tin về bộ nhớ RAM, CPU: . . 35
3.1.1.1. Thông tin về hệ thống: Số Process, Số Handle, Số Thread, Commit,
CPU Usage . 35
3.1.1.2. Thông tin về RAM: % RAM Free, % RAM Used, Total RAM . 35
3.1.2. Hiển thị thông tin có được . . 35
3.1.2.1. Biểu đồ cột CPU Usage. . 35
3.1.2.2. Biểu đồ đường CPU Usage, RAM used. . 35
3.1.2.3. Biều đồ Chart 2D Ram used, free. 35
3.1.3. Cách tính CPU Usage: . . 35
4 Bộ môn mạng và truyền thông
3.1.3.1. Dùng hàmGetSystemTimes(). . 35
3.2. Xây dựng chức năng . . . 36
3.2.1. Lấy Thông tin về RAM . . 36
3.2.1.1. GlobalMemoryStatusEx(MEMORYSTATUSEX &); . 36
3.2.2. Lấy thông tin về hệ thống . . 36
3.2.2.1. GetPerformanceInfo(PERFORMANCEINFO&); . 36
3.2.2.2. GetSystemTimes(); . 36
3.2.3. Vẽ biểu đồ . . . 36
3.2.3.1. Affine.h để trợ giúp vẽ biểu đồ . 36
3.2.3.2. Draw.h vẽ các loại biểu đồ . 36
CHƯƠNG 4: TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT QUẢ .36
4.1. Môi trường triển khai . . . 36
4.2. Kết quả các chức năng của chương trình. . 36
4.3. Đánh giá và nhận xét . . . 37
CHƯƠNG 5: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN .38
5.1. Kết luận . . . 38
5.2. Hướng phát triển . . . 38
M của Windows 33 Hoàng An 1. Modified List: Các trang bị loại khỏi Working Set, vẫn còn liên quan đến tiến trình đã gọi nó. 2. Standby List: Các trang bị loại ra khỏi Modified List, cũng còn liên quan đến tiến trình gọi nó, nhưng có 1 bản sao trên vùng Paging File ở bộ nhớ ngoài, vì vậy có thể xóa bản gốc trên RAM nếu cần. 3. Free List: Các trang bị loại khỏi Standby List vì không còn gắn với tiến trình nào nữa. 4. Zeroed List: Các trang chuyển từ Free List và được ghi lại hoàn toàn bằng mã 0 Quá trình chuyển đổi giữa các danh sách này được xử lý bằng Working Set Manager và một số các tiến trình ngầm khác như tiến trình swapper,... Linux Linux 2,2, Máy ảo Linux đã tập trung vào đơn giản và mức thấp. Do đó nó khá nguyên thủy và có nhiều vấn đề, đặc biệt là dưới tải nặng. Nó bị ảnh hưởng bởi hệ thống V. Tuy nhiên Riel [20] đã làm việc rất nhiều trên Máy ảo Linux và cải thiện rất nhiều cho việc phát hành Linux (thảo luận của ông với Linux sử dụng một hệ thống nhu cầu phân trang không có phân trang trước. Cho đến 2.2 phiên bản hạt nhân, Linux sử dụng thuật toán NRU để thay thế trang, nhưng do các thiếu sót của thuật toán, họ đã thay đổi nó và thực hiện tương tự LRU được sử dụng trong bản 2,4. Sự lão hóa để có hiệu lực LRU là mang lại bằng cách tăng tuổi (một truy cập liên kết với một trang) được tham chiếu trong quá trình quét, và giảm theo cấp số nhân (chia 2) khi không tìm thấy tham chiếu. Phương pháp này xấp xỉ LRU khá tốt. Linux 2.4 phân chia các trang ảo thành 4 danh sách 1. Active list 2. Inactive-dirty list 3. Inactive-clean list 4. Free list Danh sách 3 chứa các trang được chọn cho việc thu hồi. Thông thường, các trang hoạt động trên danh sách 1. Tuy nhiên, theo thời gian, nếu một số trang không hoạt động, thì đó độ tuổi (age) của chúng giảm dần và xuống tới 0, và lúc đó nó là một ứng cử viên cho việc thu hồi. Trang này được chuyển từ danh sách 1 vào danh sách 2. Đối với Linux 2.4, kích thước danh sách đã không hoạt động được thay đổi. Bây giờ hệ thống sẽ quyết định có bao nhiêu trang không hoạt động nên giữ trong bộ nhớ cho các trường hợp cụ thế. Sự thống nhất của bộ đệm cache và bộ nhớ cache trang cache đã được hoàn thành trong 2,4. Một tối ưu hóa hiện diện trong nhân Linux là nhận ra ngay liên tục I / O, nghĩa là giảm các ưu tiên của trang "đằng sau" và vì vậy trang đó trở thành một ứng cử viên thu hồi lại sớm hơn. Trang ngầm trong Linux là “kswapd” được kích hoạt định kì sẽ giảm dần biến đếm tuổi (age) của trang, và giải phóng bộ nhớ nếu không có hiệu lực. Và flusing được thực hiện bởi “bdflush” daemon, đánh thức định kỳ để điền các trang bẩn vào đĩa. Flusing lấy ra từ danh sách không hoạt động, 34 Bộ môn mạng và truyền thông Hoàng An không xảy ra trong 1 kiểu nào đó, nhưng hệ thống chờ đợi đúng thời điểm, khi nhóm có thể được sử dụng, và đĩa đọc-viết có thể được giảm thiểu, do đó tối ưu hóa flushing. 2.2.3.5. Kết luận về windows và Linux Hai hệ thống có nguồn gốc từ 2 nền tảng khác nhau (Windows là sản phẩm thương mại và Linux là sản phẩm của các hacker). Cả hai hệ điều hành khá hiện đại và được sử dụng rộng rãi. Chúng có rất nhiều điểm chung, và có một vài sự khác biệt, về mặt công nghệ. Windows, được phát triển với động lực đồng tiền mạnh mẽ, đã trải qua nhiều nỗ lực trong thiết kế và phát triển của nó. Và các thiết kế được thực hiện ở các cấp độ khác nhau có xu hướng cho hiệu suất tốt hơn. Trong trường hợp của Linux, được tạo ra thường ưa thích sự đơn giản đối với hiệu suất. Vì vậy, Windows đã phát triển thành mã tinh vi phức tạp, trong khi đó UNIX đơn giản và thanh lịch nhưng vẫn hiện đại. Kết quả trong số đó là Windows có nhiều tính năng hơn nhưng khó để duy trì và cải thiện từ cách nhìn của các nhà phát triển, trong khi Unix có ít tính năng hơn nhưng dễ dàng hơn để duy trì và phát triển. Tuy nhiên, đối với người dùng cuối, Windows có thể cho hiệu suất tốt hơn khi chỉ thỉnh thoảng bị lỗi. Tuy nhiên nhiều nghiên cứu và phát triển được yêu cầu cho hệ thống mã nguồn mở, và có phạm vi cho nó. Tài liệu trên hệ điều hành mã nguồn mở như FreeBSD và Linux là thiếu, đặc biệt là cập nhật trên phạm vi rộng. Có vẻ như ngay sau khi một số tài liệu được hoàn thành, sự phát triển nhanh chóng của các hệ thống này hoạt động khiến chúng ngày càng bị lỗi thời. Tỷ lệ phát triển của các hệ điều hành mã nguồn mở được duy trì bởi hàng trăm và hàng ngàn hacker trên khắp thế giới. Hệ thống mã nguồn mở được mong đợi trong tương lai hoạt động trở nên ngang hoặc tốt hơn so với các dịch vụ thương mại. CHƯƠNG 3: THIẾT KẾ VÀ XÂY DỰNG CHƯƠNG TRÌNH 3.1. Phân tích chức năng: Xây dựng chương trình quản lý CPU và bộ nhớ RAM của Windows 35 Hoàng An Với yêu cầu xây dựng chương trình quản lý Ram và CPU, chúng em xây dựng chương trình mô phỏng theo Tab Peformance của TaskManager của Windows gồm các chức năng sau: 3.1.1. Lấy thông tin về bộ nhớ RAM, CPU: 3.1.1.1. Thông tin về hệ thống: Số Process, Số Handle, Số Thread, Commit, CPU Usage 3.1.1.2. Thông tin về RAM: % RAM Free, % RAM Used, Total RAM 3.1.2. Hiển thị thông tin có được 3.1.2.1. Biểu đồ cột CPU Usage. Mô phỏng tương tự như TaskManager. 3.1.2.2. Biểu đồ đường CPU Usage, RAM used. Mô phỏng tương tự như TaskManager. 3.1.2.3. Biều đồ Chart 2D Ram used, free. Thêm biểu đồ hình quạt 3D. 3.1.3. Cách tính CPU Usage: Cách lấy CPU Usage: Đã từ lâu rất nhiều người muốn lấy thông tin về CPU Usage, tất cả các giải pháp được đưa ra đều không phù hợp vì nó chỉ tương thích với một số phiên bản hệ điều hành. ( nói riêng trên C++). Vậy giải pháp đưa ra ở đây là gì? GetSystemTimes() hàm hữu dụng để làm điều này, phù hợp với các phiên bản hệ điều hành bây giờ và sau này 3.1.3.1. Dùng hàmGetSystemTimes(). Có 3 đối số truyền vào và hàm trả về nội dung trên chính 3 tham số đó: idleTime: Thời gian nghỉ của hệ thống. kerTime: Thời gian ánh xạ nhân. user: Thời gian hệ thống làm việc. Lời gọi hàm: GetSystemTimes(&idleTime,&kerTime,&userTime) Ta làm gì với 3 thông tin có được này? usr = userTime - last_userTime; ker = kerTime - last_kernelTime; idle = idleTime - last_idleTime; Ta có được Kết quả sau : Thời gian làm việc của hệ thống: sys = ker + usr. Thời gian nghỉ của hệ thống: res=idle. Ta sẽ sử dụng phép tính nhỏ sau để tính được CPU Usage: cpuUsage = int( (sys - res) *100 / sys ); 36 Bộ môn mạng và truyền thông Hoàng An 3.2. Xây dựng chức năng 3.2.1. Lấy Thông tin về RAM Xây dựng header MemoryManager có chức năng lấy thông tin về RAM, trong lớp có sử dụng các hàm sau: 3.2.1.1. GlobalMemoryStatusEx(MEMORYSTATUSEX &); MEMORYSTATUSEX là 1 cấu trúc do window định nghĩa Hàm này có chức năng lấy thông tin RAM 3.2.2. Lấy thông tin về hệ thống Xây dựng header CPUManager có chức năng lấy thông tin về CPU, tính CPU usage, trong lớp có sử dụng các hàm sau 3.2.2.1. GetPerformanceInfo(PERFORMANCEINFO&); PERFORMANCEINFO là cấu trúc do window định nghĩa Hàm này có chức năng lấy thông tin số process,handles,Threads 3.2.2.2. GetSystemTimes(); Hàm này lấy thông tin của CPU: Thời gian chạy, thời gian nghỉ, thời gian ánh xạ 3.2.3. Vẽ biểu đồ Xây dựng thêm các header phụ sau: 3.2.3.1. Affine.h để trợ giúp vẽ biểu đồ 3.2.3.2. Draw.h vẽ các loại biểu đồ CHƯƠNG 4: TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT QUẢ 4.1. Môi trường triển khai Để đảm bảo sự tương tác tốt nhất với hệ thống window nên chúng em dùng công cụ hỗ trợ là Visual C++ để xây dựng chương trình 4.2. Kết quả các chức năng của chương trình Xây dựng chương trình quản lý CPU và bộ nhớ RAM của Windows 37 Hoàng An Sau đây là kết quả Demo chạy chương trình: 4.3. Đánh giá và nhận xét Module quản lý bộnhớ phải tận dụng các ưu/khuyết điểm của các loại bộ nhớ máy tính để cung cấp cho người lập trình không gian làm việc thoả mãn càng nhiều yêu cầu càng tốt. Bộ nhớ chính là một trong những tài nguyên quan trọng của hệ thống, đây là thiết bị lưu trữ duy nhất mà CPU có thể truy xuất trực tiếp được. Các chương trình của người sử dụng muốn thực hiện được bởi CPU thì trước hết nó phải được hệ điều hành nạp vào bộ nhớ chính, chuyển đổi các địa chỉ sử dụng trong chương trình thành những địa chỉ mà CPU có thể truy xuất được. Khi chương trình, tiến trình có yêu cầu được nạp vào bộ nhớ thì hệ điều hành phải cấp phát không gian nhớ cho nó. Khi chương trình, tiến trình kết thúc thì hệ điều hành phải thu hồi lại không gian nhớ đã cấp phát cho chương trình, tiến trình trước đó. Trong các hệ thống đa chương hay đa tiến trình, trong bộ nhớ tồn tại nhiều chương trình/ nhiều tiến trình, hệ điều hành phải thực hiện nhiệm vụ bảo vệ các vùng nhớ đã cấp phát cho các chương trình/ tiến trình, tránh sự vi phạm trên các vùng nhớ của nhau. Tóm lại, bộ phận quản lý bộ nhớ chính của hệ điều hành thực hiện những nhiệm vụ sau: Cấp phát, thu hồi vùng nhớ. Ghi nhận trạng thái bộ nhớ chính. Bảo vệ bộ nhớ. Quyết định tiến trình nào được nạp vào bộ nhớ. 38 Bộ môn mạng và truyền thông Hoàng An CHƯƠNG 5: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 5.1. Kết luận Những kết quả đạt được: Xây dựng được chương trình mô phỏng theo tab Perfomance của TaskManager Tìm hiều được MFC Application Tìm hiều được về thư viện liên kết động DLL Biết được cách quản lý bộ nhớ Hiểu hơn về cách quản lý tiến trình Những mặt hạn chế: Chương trình chưa xem được các Tiến trình đang chạy trên hệ thống 5.2. Hướng phát triển Xây dưng thêm chức năng xem và theo dõi các tiến trình đang chạy PHỤ LỤC Code: Tài liệu tham khảo [1] Trần Hồ Thủy Tiên, Giáo trình nguyên lý hệ điều hành. Đại học Bách Khoa đà nẵng 2009 [2] E. G. Coffman and P. J. Denning. Operating Systems Theory. Prentice Hall, 1973. [3] Mark Russinovich’s 1999 article, “Linux and the Enterprise”: [4] Nguyễn Kim Tuấn, Giáo trình Nguyên Lý Hệ Điều Hành. Đại học khoa học Huế
File đính kèm:
- Đồ án Xây dựng chương trình quản lý CPU và RAM của Windows.pdf