Chào mừng bạn đến với Vimentor!

Hỏi đáp
Đăng ký

Giới thiệu cách xử lý của OS khi 1 process truy cập vào vùng nhớ không hợp lệ

Cùng Nhau Học Linux Kernel
Cùng Nhau Học Linux Kernel
24 bài viết — 24 Người theo dõi |
2
0

Theo phong trào vài ngày một topic ngẫu hứng. Hôm nay mình muốn chia sẻ với các bạn về cách hệ điều hành xử lý khi truy cập vào vùng nhớ không hợp lệ.

Chắc chắn trong chúng ta, ai chẳng đôi ba lần truy cập vào con trỏ không hợp lệ. Có thể chúng ta khai báo nhưng quên chưa trỏ nó vào một vùng nhớ hợp lệ. Lúc sau vì đãng trí, chúng ta truy cập vào nó để lấy dữ liệu và thế là...Bùm!!! Chương trình của chúng ta bị crash. Có bao giờ ta tự hỏi chuyện gì xảy ra bên trong hệ điều hành khiến chương trình của chúng ta bị crash không? Trong bài này mình sẽ giới thiệu về vấn đề đó.

Trong phần lớn các hệ điều hành ngày nay - bao gồm cả Linux đều sử dụng virtual memory. Tức là mỗi 1 process sẽ có 1 không gian địa chỉ bộ nhớ riêng. 2 process A và B có thể sẽ có 2 biến với cùng 1 địa chỉ nhưng lại nằm trên 2 vùng nhớ vật lý khác nhau. Trong CPU sẽ có 1 khối gọi là MMU, CPU sẽ không truy cập trực tiếp vào bộ nhớ mà sẽ truyền địa chỉ virtual cho MMU, MMU tiến hành tra cứu địa chỉ virtual đó xem nó trỏ vào địa chỉ vật lý nào. Sau khi có địa chỉ vật lý thì MMU sẽ truy cập vào đó đọc dữ liệu và trả lại cho CPU.

Quay lại một chút về vấn đề con trỏ. Mỗi một process sẽ có 1 bảng dữ liệu đi kèm gọi là process address table. Cái bảng đó sẽ có 2 cột - cột bên trái là địa chỉ virtual, cột bên phải là địa chỉ vật lý tương ứng. Mỗi khi process truy cập vào bất cứ một vùng nhớ nhớ nào, CPU sẽ gửi đi địa chỉ virtual mà process đang muốn truy cập và MMU sẽ xem địa chỉ virtual đó có nằm trong bảng trên hay không. Nếu MMU tìm được thì địa chỉ bộ nhớ mà process muốn truy cập là địa chỉ hợp lệ, ngược lại nó sẽ là không hợp lệ.

Vậy chuyện gì sẽ xảy ra khi process truy cập vào 1 địa chỉ không hợp lệ? Khi MMU không thể tìm được địa chỉ đó trong process address table, nó sẽ thông báo cho OS và OS sẽ gửi 1 terminate signal đến process đó. Process lúc này sẽ bị exit ngay lập tức - đây chính là hiện tượng crash mà chúng ta thường thấy. Do mỗi process khi sử dụng bất kỳ tài nguyên nào của OS thì đều phải đăng ký trước nên OS sẽ có 1 danh sách các tài nguyên mà process đang mượn (memory, file, ...) Sau khi process crash, OS sẽ giải phóng toàn bộ các tài nguyên mà process đã mượn nên việc process crash không hề ảnh hưởng đến hệ điều hành.

Tuy nhiên việc truy cập vào vùng nhớ không hợp lệ dưới kernel-space sẽ trở lên nghiêm trọng. Nguyên nhân là toàn bộ kernel-space cũng là 1 process do đó khi truy cập vào vùng nhớ không hợp lệ nó cũng nhận terminate signal. Và nó cũng phải exit ngay lập tức. Tuy nhiên do kernel điều khiển toàn bộ hệ thống nên khi nó crash chúng ta sẽ có hiện tượng kernel-panic. Lúc này hệ thống sẽ hiện thị log lỗi lên và reboot ngay lập tức.

Đây là những gì mình biết về việc truy cập vào vùng nhớ không hợp lệ. Mong nhận được sự góp ý của mọi người.

Không có văn bản thay thế tự động nào.

** Nếu bạn muốn viết các nội dung đặt biệt thì hãy làm theo hướng dẫn sau

Xem thêm 10 bình luận
Viết blog mới của bạn
Báo lỗi trang
Đang tải