Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 46 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
46
Dung lượng
189,02 KB
Nội dung
CHƯƠNG QUẢN LÝ BỘ NHỚ TRONG THỜI GIAN THỰC THI 7.1 Các phần tử yêu cầu cấp phát nhớ thời gian thực thi Tất phần tử cần cấp phát nhớ, bao gồm: Đoạn mã chương trình biên dịch Các chương trình hệ thống cần thiết thời gian thực thi Cấu trúc liệu người sử dụng định nghóa Các điểm trở chương trình Môi trường tham khảo Các vị trí nhớ tạm cho việc tính trị biểu thức Nhập, xuất đệm Các bảng, trạng thái thông tin Ngoài liệu chương trình biên dịch, tác vụ cần nhớ: 1) Gọi chương trình tác vụ trở 2) Khởi tạo hủy bỏ cấu trúc liệu 3) Tác vụ thêm vào loại bỏ phần tử 7.2 Các vấn đề ngôn ngữ nguồn Chương trình Mô 7.1 Chương trình Pascal đọc xếp thứ tự số nguyên (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) program sort (input, output); var a: array [0…10]; procedure readarray; var i: integer; begin for i := to read (a [1]); end; function partition (y, z: integer): integer; var i, j, x, v: integer; begin … end; procedure quicksort (m, n: integer); (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) var i: integer; begin if (n > m) then begin i := partition (m, n); quicksort (m, i – 1); quicksort (i + 1, n); end; end; begin a[0] := -9999; a[10] := 9999; readarray; quicksort (1, 9); end Cây hoạt động (activation tree) Cây hoạt động dùng để miêu tả đường mà điều khiển vào khỏi hoạt động chương trình Một số tính chất hoạt động: Mỗi nút tượng trưng cho hoạt động chương trình Nút gốc (root) tượng trưng cho hoạt động chương trình Nút a cha nút b dòng điều khiển từ hoạt động a sang hoạt động b Nút a bên trái nút b thời gian sống a xuất trước thời gian sống b Mô 7.2 Các phát biểu in chương trình mô 7.1 miêu tả thực thi Sự thực thi chương trình bắt đầu vào readarray khỏi readarra vào quicksort (1,9) vào partition (1,9) khỏi partition (1,9) vào quicksort (1,3) …… khỏi quicksort (1,3) vào quicksort (5,9) …… khỏi quicksort (5,9) khỏi quicksort (1,9) Sự thực thi kết thúc Thí dụ 6.1 s: viết tắt cho sort r: viết tắt cho readarray p: viết tắt cho partition q: viết tắt cho quicksort S r p(1,9) p(1,3) q(1,9) q(5, 9) q(7,9) q(1,3) p(5,9) q(5,5) p(7,9) q(7,7) q(2,3) q(1,0) p(2,3) q(2,1) q(3,3) Hình 7.1 Cây hoạt động xây dựng từ chuỗi xuất mô 7.2 Stack điều khiển (Control stack) S r p(1,9) q(1,9) q(1,3) p(1,3) q(2.3) q(1,0) Hình 7.2 Stack điều khiển bao gồm nút đường từ s đến q (2,3) trở • Tầm vực khai báo Khai báo tường minh, Var I: integer khai báo ngầm Fortran, ta dùng tên biến i mà không khai báo, Fortran hiểu i biến nguyên Tầm ảnh hưởng khai báo quy tắc tầm vực định • Sự ràng buộc tên Môi trường tên hàm, ánh xạ tên đến vị trí nhớ trạng thái hàm ánh xạ từ vị trí nhớ đến trị mà lưu giữ tên vị trí nhớ trị Hình 7.3 Phép chiếu hai mức từ tên đến trị Sự ràng buộc động khai báo, thời gian thực thi Bảng 7.1 Các khái niệm tónh động chương trình Khái niệm tónh Bản động Định nghóa chương trình Sự hoạt động chương trình Khai báo tên Sự ràng buộc tên với vị trí nhớ Tầm vực ý nghóa khai báo Thời gian sống ràng buộc tên 7.3 Tổ chức ký ức Sự phân chia nhớ thời gian thực thi Trong thời gian dịch, trình biên dịch tính toán kích thước nhớ dành cho chương trình đối tượng, bao gồm: Mã chương trình đối tượng Các đối tượng liệu Một phần stack điều khiển (stack trung tâm) lưu giữ ghi hoạt động chương trình Mô 7.2 Sự phân chia nhớ thời gian thực thi cho vùng mã chương trình vùng liệu Mã chương trình đối tượng Dữ liệu tónh Stack điều khiển heap Không phải tất ngôn ngữ lập trình dùng stack điều khiển heap, Pascal C dùng hai Bản ghi hoạt động (Activation record) Vùng giá trị Vùng thông số Đường liên kết động Đường liên kết tónh Các trạng thái máy Vùng liệu cục Vùng nhớ tạm Thí dụ 7.6 Cho chương trình type VECT = array [1 3] of integer; procedure SUB2 (var I, J: integer); begin I := I + 1; J := J + 1; write (I, J); end; procedure SUB1; var A: VECT; K :integer; begin A[1] := 7; A[2] := 8; A[3] := 9; K :=2: SUB2 (K, A[K]); for K := to write (A [K]); end; Stack trung taâm stack trung tâm sub sub liên kết liên kết A[1] A[1] A[2] A[2] A[3] A[3] K K sub lieân kết Thunk tính toán K I J a) sub liên kết I Thunk tính toán A[k] J b) Hình 7.23 Phương pháp truyền thông số tên tham khảo Chương trình đóng vai trò thông số Thí dụ 7.7 Cho chương trình program MAIN; var X : real; procedure SUB2 (X, Y: real; function F (u: real): real); var z: real; begin z := abs (Y - X); z := (F (X) + F (Y)) * Z/2; write (Z); end; procedure SUB1; var Y :real; function FUNC: (V: real): real; begin FUNC := X + V + Y end; begin Y := SUB2 (0, 1, FUNC) end; begin X := 3; SUB1; end Nhìn vào chương trình thấy trình tự thực thi chương trình sau: MAIN gọi SUB1 gọi SUB2 (0, 1, FUNC) gọi FUNC Bảng 7.3 Stack trung tâm chương trình gọi chương trình khác thông qua thông số hình thức Bước Sự thực thi Stack trung tâm MAIN liên kết tónh MAIN X=3 SUB2 SUB1 MAIN gọi SUB1 liên kết tónh X=3 SUB2 SUB1 MAIN liên kết tónh Y=1 SUB1 FUNC SUB1 gọi SUB2 liên kết tónh MAIN X=1 SUB2 SUB1 SUB1 liên kết tónh Y=1 FUNC liên kết tónh X Y F địa phần mã FUNC SUB2 z SUB2 gọi FUNC liên kết tónh MAIN X=1 SUB2 SUB1 SUB1 liên kết tónh Y FUNC SUB2 liên kết tónh X Y F địa phần mã FUNC Z FUNC liên kết tónh V ... Tổ chức ký ức Sự phân chia nhớ thời gian thực thi Trong thời gian dịch, trình biên dịch tính toán kích thước nhớ dành cho chương trình đối tượng, bao gồm: Mã chương trình đối tượng Các đối tượng... hoạt động b Nút a bên trái nút b thời gian sống a xuất trước thời gian sống b Mô 7. 2 Các phát biểu in chương trình mô 7. 1 miêu tả thực thi Sự thực thi chương trình bắt đầu vào readarray khỏi... động chương trình Mô 7. 2 Sự phân chia nhớ thời gian thực thi cho vùng mã chương trình vùng liệu Mã chương trình đối tượng Dữ liệu tónh Stack điều khiển heap Không phải tất ngôn ngữ lập trình