Hệ điều hành NGUYÊN LÝ HỆ ĐIỀU HÀNH Phạm Đăng Hải haipd@soict hust edu vn Bộ môn Khoa học Máy tính Viện Công nghệ Thông tin & Truyền Thông Ngày 14 tháng 2 năm 20201 / 98 Chương 3 Quản lý bộ nhớ Chương[.]
Hệ điều hành Chương 3: Quản lý nhớ NGUYÊN LÝ HỆ ĐIỀU HÀNH Chương Quản lý nhớ Phạm Đăng Hải haipd@soict.hust.edu.vn Bộ mơn Khoa học Máy tính Viện Công nghệ Thông tin & Truyền Thông Ngày 14 tháng năm 2020 / 98 Chương 3: Quản lý nhớ / 98 Chương 3: Quản lý nhớ Giới thiệu Giới thiệu Mục đích hệ thống máy tính: thực chương trình Mục đích hệ thống máy tính: thực chương trình Chương trình liệu (toàn phần) phải nằm nhớ thực Byte tích cực:Những byte nội dung thực thời điểm quan sát: Phần chương trình chưa đưa vào nhớ lưu nhớ thứ cấp (VD: đĩa cứng )⇒ Bộ nhớ ảo Chương trình liệu (toàn phần) phải nằm nhớ thực Byte tích cực:Những byte nội dung thực thời điểm quan sát: Phần chương trình chưa đưa vào nhớ lưu nhớ thứ cấp (VD: đĩa cứng )⇒ Bộ nhớ ảo Cho phép lập trình viên khơng lo lắng giới hạn nhớ vật lý Cho phép lập trình viên khơng lo lắng giới hạn nhớ vật lý Để s/d CPU hiệu tăng tốc độ đáp ứng hệ thống: Cần luân chuyển CPU thường xuyên tiến trình Điều phối CPU (Phần 3- Chương ) Cần nhiều tiến trình sẵn sàng nhớ Hệ số song song hệ thống: Số tiến trình đồng thời tồn hệ thống / 98 / 98 Chương 3: Quản lý nhớ Chương 3: Quản lý nhớ Giới thiệu Nội dung Mục đích hệ thống máy tính: thực chương trình Chương trình liệu (toàn phần) phải nằm nhớ thực Byte tích cực:Những byte nội dung thực thời điểm quan sát: Phần chương trình chưa đưa vào nhớ lưu nhớ thứ cấp (VD: đĩa cứng )⇒ Bộ nhớ ảo Tổng quan Các chiến lược quản lý nhớ Bộ nhớ ảo Quản lý nhớ VXL họ Intel Cho phép lập trình viên khơng lo lắng giới hạn nhớ vật lý Để s/d CPU hiệu tăng tốc độ đáp ứng hệ thống: Cần luân chuyển CPU thường xuyên tiến trình Điều phối CPU (Phần 3- Chương ) Cần nhiều tiến trình sẵn sàng nhớ Hệ số song song hệ thống: Số tiến trình đồng thời tồn hệ thống Tồn nhiều sơ đồ quản lý nhớ khác Nhiều sơ đồ đòi hỏi trợ giúp từ phần cứng Thiết kế phần cứng tích hợp chặt chẽ với HDH / 98 Chương 3: Quản lý nhớ Tổng quan / 98 Chương 3: Quản lý nhớ Tổng quan 1.1 Ví dụ Nội dung 1 Tổng quan Các chiến lược quản lý nhớ Bộ nhớ ảo Tổng quan Ví dụ Bộ nhớ chương trình Liên kết địa Các cấu trúc chương trình Quản lý nhớ VXL họ Intel / 98 / 98 Chương 3: Quản lý nhớ Tổng quan 1.1 Ví dụ Chương 3: Quản lý nhớ Tổng quan 1.1 Ví dụ Ví dụ 1: Tạo chương trình thực thi dùng ngơn ngữ máy Demo: Chu lệnh Tạo file thực thi dùng ngôn ngữ máy Tạo file thực thi từ nhiều modul / 98 Chương 3: Quản lý nhớ Tổng quan 1.1 Ví dụ Ví dụ 1: Kết File toto.com có kích thước 19 bytes #include char buf[19]={ 0xEB,0x08,0x48,0x65,0x6C, 0x6C,0x6F,0x21,0x24,0x90, 0xB4,0x09,0xBA,0x02,0x01,0xCD,0x21,0xCD,0x20}; int main(int argc, char *argv[]){ int i; FILE * f = fopen("Toto.com","w+"); for(i= 0; i < 19;i++) fprintf(f,"%c",buf[i]); fclose(f); return 0; } / 98 Chương 3: Quản lý nhớ Tổng quan 1.1 Ví dụ Ví dụ 1: Nội dung file Dùng debug xem nội dung file dịch ngược hợp ngữ Nội dung câu lệnh chương trình thực thi toto.com? / 98 10 / 98 Chương 3: Quản lý nhớ Tổng quan 1.1 Ví dụ Chương 3: Quản lý nhớ Tổng quan 1.1 Ví dụ Ví dụ 1: Thực file toto.com Nội dung file Toto.com (19 bytes) EB 08 48 65 6C 6C 6F 21 24 90 B4 09 Ví dụ 1: Thực file toto.com BA 02 01 CD 21 CD 20 Nội dung file Toto.com (19 bytes) EB 08 48 65 6C 6C 6F 21 24 90 B4 09 BA 02 01 CD 21 CD 20 BA 02 01 CD 21 CD 20 Dịch ngược JMP 010A DB ’Hello!$’ NOP MOV AH, MOV DX, 0102 INT 21 INT 20 11 / 98 11 / 98 Chương 3: Quản lý nhớ Tổng quan 1.1 Ví dụ Chương 3: Quản lý nhớ Tổng quan 1.1 Ví dụ Ví dụ 1: Thực file toto.com Nội dung file Toto.com (19 bytes) EB 08 48 65 6C 6C 6F 21 24 90 B4 09 Ví dụ 1: Thực file toto.com BA 02 01 CD 21 CD 20 CS:0000 PSP: Program Segment Prefix CS:0100 JMP 010A ⇐CS:IP CS:0102 ’Hello!$’ CS:0109 NOP CS:010A MOV AH, CS:010C MOV DX, 0102 CS:010F INT 21 CS:0111 INT 20 CS:0113 Khi thực hiện, nạp toto.com vào nhớ địa CS:0100 Dịch ngược JMP 010A DB ’Hello!$’ NOP MOV AH, MOV DX, 0102 INT 21 INT 20 11 / 98 Các ghi đoạn CS, ES, DS,SS trỏ tới PSP Thanh ghi IP có giá trị 100 (CS:IP trỏ đến lệnh đầu tiên) SP trỏ tới cuối đoạn; Các ghi thơng dụng bị xóa (0) Nội dung file Toto.com (19 bytes) EB 08 48 65 6C 6C 6F 21 24 90 B4 09 CS:0000 PSP: Program Segment Prefix CS:0100 JMP 010A CS:0102 ’Hello!$’ CS:0109 NOP CS:010A MOV AH, ⇐CS:IP CS:010C MOV DX, 0102 CS:010F INT 21 CS:0111 INT 20 CS:0113 Khi thực hiện, nạp toto.com vào nhớ địa CS:0100 Dịch ngược JMP 010A DB ’Hello!$’ NOP MOV AH, MOV DX, 0102 INT 21 INT 20 11 / 98 Các ghi đoạn CS, ES, DS,SS trỏ tới PSP Thanh ghi IP có giá trị 100 (CS:IP trỏ đến lệnh đầu tiên) SP trỏ tới cuối đoạn; Các ghi thơng dụng bị xóa (0) Chương 3: Quản lý nhớ Tổng quan 1.1 Ví dụ Chương 3: Quản lý nhớ Tổng quan 1.1 Ví dụ Ví dụ 1: Thực file toto.com Nội dung file Toto.com (19 bytes) EB 08 48 65 6C 6C 6F 21 24 90 B4 09 Ví dụ 1: Thực file toto.com BA 02 01 CD 21 CD 20 CS:0000 PSP: Program Dịch ngược Segment Prefix CS:0100 JMP 010A JMP 010A CS:0102 ’Hello!$’ DB ’Hello!$’ CS:0109 NOP NOP CS:010A MOV AH, MOV AH, CS:010C MOV DX, 0102 ⇐CS:IP MOV DX, 0102 CS:010F INT 21 INT 21 CS:0111 INT 20 INT 20 CS:0113 Khi thực hiện, nạp toto.com vào nhớ địa CS:0100 11 / 98 Các ghi đoạn CS, ES, DS,SS trỏ tới PSP Thanh ghi IP có giá trị 100 (CS:IP trỏ đến lệnh đầu tiên) SP trỏ tới cuối đoạn; Các ghi thơng dụng bị xóa (0) Chương 3: Quản lý nhớ Tổng quan 1.1 Ví dụ BA 02 01 CD 21 CD 20 CS:0000 PSP: Program Dịch ngược Segment Prefix CS:0100 JMP 010A JMP 010A CS:0102 ’Hello!$’ DB ’Hello!$’ CS:0109 NOP NOP CS:010A MOV AH, MOV AH, CS:010C MOV DX, 0102 MOV DX, 0102 CS:010F INT 21 ⇐CS:IP INT 21 CS:0111 INT 20 INT 20 CS:0113 Khi thực hiện, nạp toto.com vào nhớ địa CS:0100 11 / 98 Các ghi đoạn CS, ES, DS,SS trỏ tới PSP Thanh ghi IP có giá trị 100 (CS:IP trỏ đến lệnh đầu tiên) SP trỏ tới cuối đoạn; Các ghi thơng dụng bị xóa (0) B4 09 Ví dụ 1: Thực file toto.com BA 02 01 CD 21 CD 20 CS:0000 PSP: Program Hello! Segment Prefix CS:0100 JMP 010A CS:0102 ’Hello!$’ CS:0109 NOP CS:010A MOV AH, CS:010C MOV DX, 0102 CS:010F INT 21 CS:0111 INT 20 ⇐CS:IP CS:0113 Khi thực hiện, nạp toto.com vào nhớ địa CS:0100 Dịch ngược JMP 010A DB ’Hello!$’ NOP MOV AH, MOV DX, 0102 INT 21 INT 20 11 / 98 B4 09 Chương 3: Quản lý nhớ Tổng quan 1.1 Ví dụ Ví dụ 1: Thực file toto.com Nội dung file Toto.com (19 bytes) EB 08 48 65 6C 6C 6F 21 24 90 Nội dung file Toto.com (19 bytes) EB 08 48 65 6C 6C 6F 21 24 90 Các ghi đoạn CS, ES, DS,SS trỏ tới PSP Thanh ghi IP có giá trị 100 (CS:IP trỏ đến lệnh đầu tiên) SP trỏ tới cuối đoạn; Các ghi thơng dụng bị xóa (0) Nội dung file Toto.com (19 bytes) EB 08 48 65 6C 6C 6F 21 24 90 B4 09 BA 02 01 CD 21 CD 20 CS:0000 PSP: Program Hello! Segment Prefix terminated CS:0100 JMP 010A CS:0102 ’Hello!$’ CS:0109 NOP CS:010A MOV AH, CS:010C MOV DX, 0102 CS:010F INT 21 CS:0111 INT 20 CS:0113 Khi thực hiện, nạp toto.com vào nhớ địa CS:0100 Dịch ngược JMP 010A DB ’Hello!$’ NOP MOV AH, MOV DX, 0102 INT 21 INT 20 11 / 98 Các ghi đoạn CS, ES, DS,SS trỏ tới PSP Thanh ghi IP có giá trị 100 (CS:IP trỏ đến lệnh đầu tiên) SP trỏ tới cuối đoạn; Các ghi thơng dụng bị xóa (0) Chương 3: Quản lý nhớ Tổng quan 1.1 Ví dụ Chương 3: Quản lý nhớ Tổng quan 1.1 Ví dụ Ví dụ 2: Q trình xử lý toto project Ví dụ 2: Tạo file thực thi từ nhiều modul Toto project file main.c #include extern int x, y; extern void toto(); int main(int argc, char *argv[]){ toto(); printf("KQ: %d \n",x * y); return 0; } file M1.c int y = 10; file M2.c int x; extern int y; void toto(){ x = 10 * y; } int y=10; M1.c extern int x,y; extern void toto(); int main(){ toto() printf() } Compiler (tcc -c) main.c int x; extern int y; toto() Ket qua KQ: 1000 M2.c 12 / 98 13 / 98 Chương 3: Quản lý nhớ Tổng quan 1.1 Ví dụ Chương 3: Quản lý nhớ Tổng quan 1.1 Ví dụ Ví dụ 2: Q trình xử lý toto project Ví dụ 2: Q trình xử lý toto project Thư viện [printf] int y=10; [y←10] M1.c extern int x,y; extern void toto(); int main(){ toto() printf() } main.c int x; extern int y; toto() M2.c 13 / 98 M1.o Compiler (tcc -c) x y toto printf main.o [x] y [toto] M2.o int y=10; [y←10] M1.c extern int x,y; extern void toto(); int main(){ toto() printf() } main.c int x; extern int y; toto() M2.c 13 / 98 M1.o Compiler (tcc -c) x y toto printf main.o [x] y [toto] M2.o Link (tlink) Chương 3: Quản lý nhớ Tổng quan 1.1 Ví dụ Chương 3: Quản lý nhớ Tổng quan 1.1 Ví dụ Ví dụ 2: Quá trình xử lý toto project Ví dụ 2: Q trình xử lý toto project Thư viện [printf] int y=10; M1.c extern int x,y; extern void toto(); int main(){ toto() printf() } main.c [y←10] [x] [y←10] M1.o x y Compiler toto printf (tcc -c) main.o int x; extern int y; toto() M2.c 13 / 98 Chương 3: Quản lý nhớ Tổng quan 1.2 Bộ nhớ chương trình [x] y [toto] M2.o Link (tlink) Thư viện Header [printf] [toto] x y toto printf x y toto.exe [printf] int y=10; [y←10] [x] [y←10] M1.c M1.o extern int x,y; extern void toto(); int main(){ toto() printf() } Compiler (tcc -c) main.c x y toto printf Header Link (tlink) main.o [printf] [toto] x y toto printf x y C:\>tcc - c -I\Tc\Include main.c m1.c m2.c M2.c M2.o toto.exe C:\>tlink \Tc\Lib\c0s +m1+m2+main, main.exe , , \Tc\Lib\cs.lib 13 / 98 [x] y [toto] int x; extern int y; toto() Chương 3: Quản lý nhớ Tổng quan 1.2 Bộ nhớ chương trình Phân cấp nhớ Bộ nhớ tài nguyên quan trọng hệ thống Tổng quan Ví dụ Bộ nhớ chương trình Liên kết địa Các cấu trúc chương trình 14 / 98 Chương trình phải nằm nhớ để thực 15 / 98 Chương 3: Quản lý nhớ Tổng quan 1.2 Bộ nhớ chương trình Chương 3: Quản lý nhớ Tổng quan 1.2 Bộ nhớ chương trình Phân cấp nhớ Phân cấp nhớ Bộ nhớ tài nguyên quan trọng hệ thống Bộ nhớ tài nguyên quan trọng hệ thống Chương trình phải nằm nhớ để thực Bộ nhớ đặc trưng kích thước tốc độ truy nhập Chương trình phải nằm nhớ để thực Bộ nhớ đặc trưng kích thước tốc độ truy nhập Bộ nhớ phân cấp theo tốc độ truy nhập Loại nhớ Kích thước Thanh ghi (Registers) Cache VXL Cache mức Bộ nhớ Bộ nhớ lưu trữ (Disk) Băng từ, đĩa quang 15 / 98 Chương 3: Quản lý nhớ Tổng quan 1.2 Bộ nhớ chương trình Bộ nhớ Chương trình 00000 00001 Tồn thiết bị lưu trữ Là file nhị phân thực thi Vùng tham số file Lệnh máy (mã nhị phân), Vùng liệu (biến toàn cục), Memory Dùng lưu trữ liệu chương trình 16 / 98 Tốc độ CPU(ηs) 10 nano seconds 100 nanoseconds Micro-seconds Mili-Seconds 10 Seconds 15 / 98 Chương 3: Quản lý nhớ Tổng quan 1.2 Bộ nhớ chương trình FFFFE FFFFF bytes Kilo Bytes KiloByte-MegaByte MegaByte-GigaByte GigaByte-Terabytes Khơng giới hạn Tốc độ Là mảng ô nhớ kiểu bytes, words Mỗi nhớ có địa riêng Địa vật lý: địa x/hiện chân VXL 17 / 98 Chương 3: Quản lý nhớ Tổng quan 1.2 Bộ nhớ chương trình Chương 3: Quản lý nhớ Tổng quan 1.2 Bộ nhớ chương trình Chương trình Chương trình Tồn thiết bị lưu trữ Là file nhị phân thực thi Tồn thiết bị lưu trữ Là file nhị phân thực thi Vùng tham số file Lệnh máy (mã nhị phân), Vùng liệu (biến toàn cục), Vùng tham số file Lệnh máy (mã nhị phân), Vùng liệu (biến toàn cục), Phải đưa vào nhớ đặt tiến trình để thực (tiến trình thực chương trình) Phải đưa vào nhớ đặt tiến trình để thực (tiến trình thực chương trình) Hàng đợi vào (input queue) 17 / 98 Tập tiến trình nhớ ngồi (thơng thường disk) Đợi để đưa vào nhớ thực hiên 17 / 98 Chương 3: Quản lý nhớ Tổng quan 1.2 Bộ nhớ chương trình Thực chương trình Nạp chương trình vào nhớ Chương 3: Quản lý nhớ Tổng quan 1.2 Bộ nhớ chương trình Thực chương trình Nạp chương trình vào nhớ Đọc phân tích (dịch) file thực thi (VD file *.com, file *.exe) Xin vùng nhớ để nạp chương trình từ file đĩa Thiết lập tham số, ghi tới giá trị thích hợp Đọc phân tích (dịch) file thực thi (VD file *.com, file *.exe) Xin vùng nhớ để nạp chương trình từ file đĩa Thiết lập tham số, ghi tới giá trị thích hợp Thực thi chương trình CPU lấy lệnh nhớ vị trí xác định đếm chương trình (Program counter ) Cặp ghi CS:IP với VXL họ Intel (Ví dụ : 80x86 ) CPU giải mã lệnh Có thể lấy thêm toán hạng từ nhớ Thực lệnh với toán hạng Nếu cần thiết, lưu kết vào nhớ địa xác định 18 / 98 18 / 98 Chương 3: Quản lý nhớ Tổng quan 1.2 Bộ nhớ chương trình Thực chương trình Nạp chương trình vào nhớ Chương 3: Quản lý nhớ Tổng quan 1.2 Bộ nhớ chương trình Thực chương trình Nạp chương trình vào nhớ Đọc phân tích (dịch) file thực thi (VD file *.com, file *.exe) Xin vùng nhớ để nạp chương trình từ file đĩa Thiết lập tham số, ghi tới giá trị thích hợp Thực thi chương trình Đọc phân tích (dịch) file thực thi (VD file *.com, file *.exe) Xin vùng nhớ để nạp chương trình từ file đĩa Thiết lập tham số, ghi tới giá trị thích hợp Thực thi chương trình CPU lấy lệnh nhớ vị trí xác định đếm chương trình (Program counter ) CPU lấy lệnh nhớ vị trí xác định đếm chương trình (Program counter ) Cặp ghi CS:IP với VXL họ Intel (Ví dụ : 80x86 ) Cặp ghi CS:IP với VXL họ Intel (Ví dụ : 80x86 ) CPU giải mã lệnh CPU giải mã lệnh Có thể lấy thêm tốn hạng từ nhớ Có thể lấy thêm toán hạng từ nhớ Thực lệnh với toán hạng Nếu cần thiết, lưu kết vào nhớ địa xác định Thực xong Thực lệnh với toán hạng Nếu cần thiết, lưu kết vào nhớ địa xác định Thực xong Giải phóng vùng khơng gian nhớ dành cho chương trình Giải phóng vùng khơng gian nhớ dành cho chương trình Vấn đề Chương trình nạp vào vị trí nhớ Khi thực chương trình sinh chuỗi địa nhớ 18 / 98 Chương 3: Quản lý nhớ Tổng quan 1.3 Liên kết địa Truy nhập địa nhớ nào? 18 / 98 Chương 3: Quản lý nhớ Tổng quan 1.3 Liên kết địa Các bước xử lý chương trình ứng dụng Chương trình nguồn Dịch Các modul đối tượng khác Modul đối tượng Liên kết Modul thực Nạp Thư viện hệ thống 19 / 98 20 / 98 Thư viện hệ thống nạp động Liên kết động Tổng quan Ví dụ Bộ nhớ chương trình Liên kết địa Các cấu trúc chương trình Chương trình nhớ Bộ nhớ ... file toto .com Nội dung file Toto .com (19 bytes) EB 08 48 65 6C 6C 6F 21 24 90 Nội dung file Toto .com (19 bytes) EB 08 48 65 6C 6C 6F 21 24 90 Các ghi đoạn CS, ES, DS,SS trỏ tới PSP Thanh ghi IP... nhớ đặc trưng kích thước tốc độ truy nhập Bộ nhớ phân cấp theo tốc độ truy nhập Loại nhớ Kích thước Thanh ghi (Registers) Cache VXL Cache mức Bộ nhớ Bộ nhớ lưu trữ (Disk) Băng từ, đĩa quang 15... nhớ Tổng quan 1.1 Ví dụ Ví dụ 1: Thực file toto .com Nội dung file Toto .com (19 bytes) EB 08 48 65 6C 6C 6F 21 24 90 B4 09 Ví dụ 1: Thực file toto .com BA 02 01 CD 21 CD 20 CS:0000 PSP: Program