Thảo luận - Tìm hiểu về hệ điều hành Windows 32bit | VN-Zoom | Cộng đồng Chia Sẻ Kiến Thức Công Nghệ và Phần Mềm Máy Tính

Adblocker detected! Please consider reading this notice.

We've detected that you are using AdBlock Plus or some other adblocking software which is preventing the page from fully loading.

We need money to operate the site, and almost all of it comes from our online advertising.

If possible, please support us by clicking on the advertisements.

Please add vn-z.vn to your ad blocking whitelist or disable your adblocking software.

×

Thảo luận Tìm hiểu về hệ điều hành Windows 32bit

Teplice

Offline
Thành viên BQT
Để mở đầu cho bài viết lần này, mình xin trích câu nói của tác giả cuốn sách nổi tiếng trong lĩnh vực RE “Reversing: Secrets of Reverse Engineering” – Eldad Eilam: “Operating systems play a key role in reversing” – “Hệ điều hành là chìa khóa quan trọng trong lĩnh vực RE. Chính vì vậy, chúng ta sẽ cùng trao đổi về một số khái niệm quan trọng của hệ điều hành Windows 32bit – hệ điều hành phổ biến nhất hiện nay.

Trước khi đi vào xem xét chi tiết xem Windows hoạt động như thế nào, chúng ta cùng nhìn qua về lịch sử phát triển của Windows 32bit.

Lịch sử:
Chúng ta sẽ cùng đề cập đến Windows NT – hệ điều hành đa nhiệm, đa xử lý với 32bit địa chỉ bộ nhớ – được phát triển từ những năm 1990 của hãng Microsoft. Windows NT hỗ trợ các ứng dụng DOS (16bit), Win32 GUI (32bit),… Windows NT cũng là nền tảng để phát triển nhiều hệ điều hành sau này như: Windows XP, Windows 7, Windows Server 2003, Windows Server 2008,…

Mô hình hình kiến trúc:
Windows NT được thiết kế theo lớp, hoạt động theo 2 mode:

  • User mode (người sử dụng).
  • Kernel mode (chế độ nhân hệ điều hành)
15846918199_01f8430d31_o.png


Hình ảnh mô tả tổng quan Windows NT(ảnh internet)

Chế độ User mode:
  • Các tiến trình của chế độ User mode phải được chế độ kernel mode cấp quyền trước khi thực thi.
  • Có khả năng truyền các yêu cầu I/O đến chế độ kernel mode phù hợp.
  • Được điều khiển bởi hệ thống quản lý vào/ra (I/O Manager)
  • Giao diện điều hành, với tất cả hệ thống con của chế độ User mode, xử lý các công việc liên quan tới vào ra, quản lý đối tượng, bảo mật và quản lý tiến trình.
16031072171_e16e19e4fb_o.png


Chế độ kernel mode:
  • Toàn quyền truy cập tới phần cứng và tài nguyên hệ thống.
  • Chạy các dòng mã trong vùng nhớ được bảo vệ.
  • Xác định luồng ưu tiên, quản lý bộ nhớ và làm việc với phần cứng.
  • Chế độ kernel mode ngăn các dịch vụ và ứng dụng của chế độ User mode vào việc truy cập tới vùng tài nguyên nguy hiểm.
15847259487_c9717e5062_o.png


Các tính năng cơ bản:
  • Kiến trúc thuần 32bit
  • Hỗ trợ bộ nhớ ảo (Virtual-Memory)
  • Linh động
  • Đa luồng
  • Đa xử lý
  • An toàn
  • Có tính tương thích
Ban đầu, Windows NT chỉ hỗ trợ kiến trúc nền tảng 32bit, nhưng sau nhiều bản cập nhật hỗ trợ, Windows NT đã hỗ trợ thêm kiến trúc 64bit như: AMD64, Intel IA-64 và Intel EMT64.
Sau đây, chúng ta sẽ đi vào trọng tâm của bài viết này, tìm hiểu những khái niệm cơ bản của hệ điều hành Windows 32bit.

Quản lý bộ nhớ (Memory Management):
Bộ nhớ máy tính là nơi lưu trữ mọi thông tin của máy tính, là tài nguyên vô cùng quan trọng của máy tính.
Bộ nhớ được phân cấp theo tốc độ truy nhập, được đặc trưng bởi kích thước và tốc độ truy nhập

16031061411_cfd04a83a0_o.png


Loại bộ nhớ
Kích thước
Tốc độ

Register Byte Tốc độ của CPU(ns)
Cache KB 10 ns
Cache 2 KB-MB 100 ns
Ram MB-GB ms
Disk Storage GB-TB ms
Bộ nhớ ngoài Unlimited 10 s



Tuân theo kiến trúc của Windows NT, việc quản lý bộ nhớ cũng được chia thành 2 chế độ:
  • User mode
  • Kernel mode
16032197922_70a570f030_o.png


Việc quản lý bộ nhớ của bất kì hệ điều hành nào cũng mong muốn đảm bảo các tiêu chí cơ bản như: an toàn, ổn định, hiệu quả,… Và để thỏa mãn các tiêu chí trên, hệ điều hành Windows 32bit (kiến trúc Windows NT) đã phát triển thêm một số khái niệm: Bộ nhớ ảo (Virtual Memory)Cơ chế phân trang (Paging),…

Bộ nhớ ảo (Virtual Memory):
Khái niệm bộ nhớ ảo là một khái niệm cũ. Từ những năm 1990, khái niệm bộ nhớ ảo được dùng để mô tả vùng bộ nhớ nằm trên ổ đĩa cứng, được sử dụng với việc mở rộng bộ nhớ “thực” (tức là RAM và ổ đĩa), nhưng hiện nay, khái niệm này còn có thêm một ý nghĩa khác là memory protection – bảo vệ bộ nhớ (bộ nhớ thực hay bộ nhớ vật lý). Điều này có nghĩa là mỗi chương trình phần mềm thay vì truy cập trực tiếp vào bộ nhớ vật lý, bộ vi xử lý và hệ điều hành sẽ tạo ra một lớp vô hình ở giữa chương trình phần mềm và bộ nhớ vật lý.

Vùng không gian địa chỉ cho mỗi tiến trình sẽ được cấp phát khi thực hiện chạy một chương trình. Địa chỉ đó được tạo ra theo 1 trong 3 con đường sau:


  • Load một hàm
  • Store một hàm
  • Fetching một hàm



Việc Load/Store tạo ra các địa chỉ dữ liệu, trong khi Fetching tạo ra địa chỉ hàm. Tất nhiên, bộ nhớ RAM không phân biệt giữa địa chỉ ảo và địa chỉ vật lý mà coi đó là một. Trong khi về bản chất, mỗi địa chỉ ảo đã được ánh xạ từ một địa chỉ vật lý.

Với Windows NT, mỗi tiến trình khi thực hiện sẽ được cấp phát một vùng không gian địa chỉ riêng biệt, mỗi không gian địa chỉ riêng biệt lại có page table(chứa các địa chỉ vật lý thực sự được sử dụng) riêng biệt. Một vùng không gian địa chỉ cho phép chương trình hay tiến trình hiện hành truy cập vào bộ nhớ tương ứng mà ngăn cản quá trình các ứng dụng truy cập page table. Điều này làm rõ ràng hơn về sự khác nhau giữa User mode và Kernel mode.

Ngoài ra, bộ nhớ ảo hỗ trợ:
  • Các tiến trình độc lập với nhau
  • Bảo vệ bộ nhớ
  • Không giới hạn bộ nhớ vật lý
  • Hỗ trợ việc quản lý rải rác các vùng không gian địa chỉ
  • Hỗ trợ việc chia sẻ dữ liệu giữa các vùng không gian địa chỉ
  • Hỗ trợ việc sao chép, ghi dữ liệu bộ nhớ
Kỹ thuật phân trang (Paging):
Không gian địa chỉ bộ nhớ vật lý được chia thành các phần có kích thước cố định bằng nhau, được đánh số địa chỉ bắt đầu từ 0 và được gọi là các khung trang (page frame). Không gian địa chỉ của các tiến trình cũng được chia thành các phần có kích thước bằng nhau (trong Windows NT là 4KB), được gọi là các trang (page) của tiến trình. Khi cần nạp một tiến trình để xử lý, các page của tiến trình sẽ được nạp vào những page frame còn trống.

16032884365_a540055e59_o.png


Mô hình phân trang bộ nhớ

Ở đây, chúng ta sẽ tập trung vào cơ chế chuyển đổi từ địa chỉ logic (địa chỉ ảo) thành địa chỉ vật lý (địa chỉ tuyệt đối) để cung cấp địa chỉ logic đáp ứng yêu cầu của các chương trình hay tiến trình và địa chỉ vật lý để nạp các chương trình hay tiến trình đó vào bộ nhớ chính.

16032197662_006fb6c907_o.png


Nhìn vào hình ảnh trên, ta có thể thấy rằng Khối quản lý bộ nhớ (MMU) ánh xạ địa chỉ bộ nhớ ảo sang địa chỉ vật lý.
Dưới đây là hình ảnh cơ chế ánh xạ từ địa chỉ ảo sang địa chỉ vật lý

15845452018_86d836a147_o.png


Hình ảnh cơ chế ánh xạ từ địa chỉ ảo sang địa chỉ vật lý

Bước đầu tiên trong quá trình chuyển địa chỉ ảo là việc trích xuất 10 bits cao nhất xác định offset – địa chỉ tương đối – tương ứng thứ nhất và được gọi là page directory. Với mỗi page directory có kích thước 4KB sẽ phân chia thành 1024 giá trị 4 byte, các giá trị này được gọi là các page-directory entries (PDEs). Tiếp đó, mỗi PDE sẽ được sử dụng để định danh cho một page khác của bộ nhớ – page này có tên là page table. 10 bits tiếp sau được sử dụng để định danh cho giá trị 4 byte có tên page-table entry (PTE) theo cách thức tương tự với page directory. Các PTE sẽ định danh cho các page frame. 12 bits cuối trong địa chỉ ảo được sử đụng để đánh địa chỉ các byte của bộ nhớ trong page frame được định danh bởi PTE (có tối đa 212 = 4096 bytes trong page frame)

Có vẻ khá rắc rối! Nhưng chúng ta sẽ hình dung đơn giản như sau: một virtual memory được coi là một quyển sách. Quyển sách này có rất nhiều trang, trong đó có trang mục lục (tương ứng với khái niệm page directory). Trang mục lục này chứa 1024 con số (tương ứng với khái niệm page-directory entry). Các con số này sẽ định danh cho các trang tiêu đề của mỗi đề mục (tương ứng với khái niệm page table). Khi tiến đến các trang tiêu đề này, ta sẽ lại bắt gặp 1024 con số khác (tương ứng với khái niệm page-table entry), dùng để định danh cho từng mục bài viết. Và cuối cùng các viết này tương ứng với khái niệm page frame.

Quay lại với hình vẻ ở trên, chúng ta thấy có khái niệm TLB (Translation Lookaside Buffer). Đây là bộ đệm hỗ trợ việc chuyển dịch địa chỉ và có thể coi là một page table nhỏ bởi lẽ, TLB sẽ chứa các giá trị “hay sử dụng” giúp việc xác định offset nhanh hơn. Nếu việc tìm kiếm trong TLB lỗi (tức là không tồn tại giá trị cần tìm trong TLB) thì virtual address sẽ phải đến các page table thực sự. Thậm chí, page table thật sự cũng không có giá trị cần tìm tức là page fault, lúc này, virtual address sẽ cần tới sự can thiệp của hệ điều hành để bộ nhớ thứ cấp nạp lại các page trên bộ nhớ vật lý, từ đó update lại page table và bảng TLB.

Trên đây, chúng ta đã có cái nhìn cơ bản về cơ chế quản lý bộ nhớ của hệ điều hành Windows 32bit và cụ thể là trên Windows NT. Các bạn có thể tìm đọc thêm các khái niệm và các ví dụ có liên quan trong tài liệu
 

donaltqt89

Búa Đá
Win NT kia à :D
 


Top