Bài giảng Kiến trúc máy tính và hệ điều hành

pdf 144 trang phuongnguyen 3060
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Kiến trúc máy tính và hệ điều hành", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_kien_truc_may_tinh_va_he_dieu_hanh.pdf

Nội dung text: Bài giảng Kiến trúc máy tính và hệ điều hành

  1. HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG NGUYỄN THỊ NGỌC VINH BÀI GIẢNG KIẾN TRÚC MÁY TÍNH VÀ HỆ ĐIỀU HÀNH HÀ NỘI 2013
  2. LỜI NÓI ĐẦU Kiến trúc máy tính là một trong các lĩnh vực khoa học cơ sở của ngành Khoa học máy tính nói riêng và Công nghệ thông tin nói chung. Kiến trúc máy tính là khoa học về lựa chọn và ghép nối các thành phần phần cứng của máy tính nhằm đạt được các mục tiêu về hiệu năng cao, tính năng đa dạng và giá thành thấp. Hệ điều hành là thành phần quan trọng trong hệ thống máy tính. Nắm vững kiến thức hệ điều hành là cơ sở cho việc hiểu biết sâu sắc hệ thống máy tính nói chung. Môn học Kiến trúc máy tính và hệ điều hành là môn học cơ sở trong chương trình đào tạo cao đẳng và đại học ngành điện tử viễn thông. Mục tiêu của môn học là cung cấp cho sinh viên các kiến thức cơ sở của kiến trúc máy tính và hệ điều hành, bao gồm: kiến trúc máy tính tổng quát, kiến trúc bộ xử lý trung tâm, kiến trúc tập lệnh máy tính, cơ chế ống lệnh, hệ thống phân cấp bộ nhớ, hệ thống bus và thiết bị ngoài ra; và khái niệm, nguyên lý hoạt động tổng quát của hệ điều hành nói chung như một thành phần quan trọng của hệ thống máy tính. Kiến trúc máy tính và hệ điều hành là lĩnh vực đã được phát triển trong một thời gian tương đối dài với lượng kiến thức đồ sộ, nhưng do khuôn khổ của tài liệu có tính chất là bài giảng môn học, nhóm tác giả cố gắng trình bày những vấn đề cơ sở nhất phục vụ mục tiêu môn học. Nội dung của tài liệu được biên soạn thành hai phần với sáu chương như sau: Phần 1 là nội dung về lĩnh vực kiến trúc máy tính, được cấu trúc thành bốn chương. Chương 1 là phần giới thiệu các khái niệm cơ sở của kiến trúc máy tính, như khái kiệm kiến trúc và tổ chức máy tính; cấu trúc và chức năng các thành phần của máy tính; các kiến trúc máy tính von-Neumann và kiến trúc Harvard. Khái niệm về các hệ đếm và cách tổ chức dữ liệu trên máy tính cũng được trình bày trong chương này. Chương 2 giới thiệu về khối xử lý trung tâm, nguyên tắc hoạt động và các thành phần của nó. Khối xử lý trung tâm là thành phần quan trọng và phức tạp nhất trong máy tính, đóng vai trò là bộ não của máy tính. Thông qua việc thực hiện các lệnh của chương trình bởi khối xử lý trung tâm, máy tính có thể thực thi các yêu cầu của người sử dụng. Chương 2 cũng giới thiệu về tập lệnh của máy tính, bao gồm các khái niệm về lệnh, dạng lệnh, các thành phần của lệnh; các dạng địa chỉ và các chế độ địa chỉ, một số dạng lệnh thông dụng kèm ví dụ minh hoạ. Ngoài ra, cơ chế ống lệnh – xử lý xen kẽ các lệnh cũng được đề cập. Chương 3 trình bày về hệ thống nhớ: khái quát về hệ thống bộ nhớ và cấu trúc phân cấp của hệ thống nhớ; giới thiệu các loại bộ nhớ ROM và RAM. Một phần rất quan trọng của chương là phần giới thiệu về bộ nhớ cache - một bộ nhớ đặc biệt có khả năng giúp tăng tốc hệ thống nhớ nói riêng và cả hệ thống máy tính nói chung. Chương này cũng giới thiệu về một số bộ nhớ ngoài điển hình: đĩa từ và đĩa quang 1
  3. Chương 4 trình bày về hệ thống bus và các thiết bị ngoại vi. Phần trình bày về hệ thống bus đề cập đến các loại bus như ISA, EISA, PCI, AGP và PCI-Express. Phần giới thiệu các thiết bị vào ra đề cập đến nguyên lý hoạt động của một số thiết bị vào ra thông dụng, như bàn phím, chuột, màn hình và máy in. Phần 2 là nội dung về lĩnh vực hệ điều hành, được chia thành hai chương 5 và 6. Chương 5 bao gồm những khái niệm chung về hệ điều hành, các thành phần chức năng và một số kiểu kiến trúc thông dụng. Chương này cũng tóm tắt quá trình hình thành và phát triển của hệ điều hành, qua đó trình bày một số khái niệm và kỹ thuật quan trọng. Chương 6 giới thiệu về các thành phần chức năng chính của hệ điều hành: quản lý hệ thống file, quản lý bộ nhớ và quản lý tiến trình. Trong chương này, các phương pháp, thuật toán cơ bản để hệ điều hành thực hiện việc quản lý hệ thống file, cấp phát bộ nhớ và điều độ tiến trình cũng được trình bày. Tài liệu được biên soạn dựa trên kinh nghiệm giảng dạy môn học Kiến trúc máy tính và Hệ điều hành trong nhiều năm của tác giả và đồng nghiệp trong bộ môn Khoa học máy tính, Khoa Công nghệ thông tin 1, Học viện Công nghệ Bưu chính – Viễn thông, kết hợp tiếp thu các đóng góp của đồng nghiệp và phản hồi từ sinh viên. Tài liệu có thể được sử dụng làm tài liệu học tập cho sinh viên hệ đại học và cao đẳng ngành điện tử viễn thông. Trong quá trình biên soạn, mặc dù nhóm tác giả đã rất cố gắng song không thể tránh khỏi có những thiếu sót. Nhóm tác giả rất mong muốn nhận được ý kiến phản hồi và các góp ý cho các thiếu sót, cũng như ý kiến về việc cập nhật, hoàn thiện nội dung của tài liệu. Hà nội, tháng 9 năm 2013 Tác giả 2
  4. MỤC LỤC CHƯƠNG 1 GIỚI THIỆU CHUNG 8 1.1 KHÁI NIỆM VỀ KIẾN TRÚC VÀ TỔ CHỨC MÁY TÍNH 8 1.2 CẤU TRÚC VÀ CHỨC NĂNG CÁC THÀNH PHẦN CỦA MÁY TÍNH 8 1.2.1 Sơ đồ khối chức năng 8 1.2.2 Các thành phần của máy tính 9 1.3 LỊCH SỬ PHÁT TRIỂN MÁY TÍNH 11 1.3.1 Thế hệ 1 (1944-1959) 11 1.3.2 Thế hệ 2 (1960-1964) 11 1.3.3 Thế hệ 3 (1964-1975) 11 1.3.4 Thế hệ 4 (1975-1989) 11 1.3.5 Thế hệ 5 (1990 - nay) 11 1.4 KIẾN TRÚC MÁY TÍNH VON-NEUMANN VÀ HARVARD 12 1.4.1 Kiến trúc máy tính von-Neumann 12 1.4.2 Kiến trúc máy tính Harvard 13 1.5 CÁC HỆ SỐ ĐẾM VÀ TỔ CHỨC DỮ LIỆU TRÊN MÁY TÍNH 13 1.5.1 Các hệ số đếm 13 1.5.2 Tổ chức dữ liệu trên máy tính 14 1.5.3 Số có dấu và số không dấu 16 1.5.4 Bảng mã ASCII 16 CHƯƠNG 2 KHỐI XỨ LÝ TRUNG TÂM 18 2.1 KHỐI XỬ LÝ TRUNG TÂM 18 2.1.1 Sơ đồ khối tổng quát và các thành phần chức năng của CPU 18 2.1.2 Chu trình xử lý lệnh 19 2.1.3 Các thanh ghi 19 2.1.4 Khối điều khiển 21 2.1.5 Khối số học và logic 22 2.1.6 Bus trong CPU 23 2.2 tập lệnh máy tính 23 2.2.1 Khái niệm lệnh, tập lệnh và các thành phần của lệnh 23 1
  5. 2.2.2 Chu kỳ và các pha thực hiện lệnh 23 2.2.3 Các dạng toán hạng 23 2.2.4 Các chế độ địa chỉ 26 2.2.5 Một số dạng lệnh thông dụng 29 2.3 GIỚI THIỆU CƠ CHẾ ỐNG LỆNH 32 2.3.1 Giới thiệu cơ chế ống lệnh 32 2.3.2 Các vấn đề của cơ chế ống lệnh và hướng giải quyết 34 CHƯƠNG 3 hệ thống nhớ 38 3.1 PHÂN LOẠI BỘ NHỚ MÁY TÍNH 38 3.1.1 Phân loại bộ nhớ 38 3.1.2 Tổ chức mạch nhớ 38 3.2 CẤU TRÚC PHÂN CẤP BỘ NHỚ MÁY TÍNH 39 3.2.1 Giới thiệu cấu trúc phân cấp hệ thống nhớ 39 3.2.2 Vai trò của cấu trúc phân cấp hệ thống nhớ 40 3.3 BỘ NHỚ ROM VÀ RAM 41 3.3.1 Bộ nhớ ROM 41 3.3.2 Bộ nhớ RAM 42 3.4 BỘ NHỚ CACHE 44 3.4.1 Cache là gì? 44 3.4.2 Vai trò và nguyên lý hoạt động 44 3.4.3 Các dạng kiến trúc cache 46 3.4.4 Các dạng tổ chức/ánh xạ cache 48 3.4.5 Các phương pháp đọc ghi và các chính sách thay thế 53 3.4.6 Hiệu năng cache và các yếu tố ảnh hưởng 55 3.5 bộ nhớ ngoài 56 3.5.1 Đĩa từ 56 3.5.2 Đĩa quang 61 CHƯƠNG 4 HỆ THỐNG BUS VÀ CÁC THIẾT BỊ NGOẠI VI 66 4.1 GIỚI THIỆU CHUNG VỀ HỆ THỐNG BUS 66 4.2GIỚI THIỆU MỘT SỐ LOẠI BUS THÔNG DỤNG 68 4.2.1Bus ISA và EISA 68 4.2.2Bus PCI 69 2
  6. 4.2.3Bus AGP 72 4.2.4Bus PCI Express 72 4.3GIỚI THIỆU CHUNG VỀ CÁC THIẾT BỊ NGOẠI VI 73 4.3.1Giới thiệu chung 73 4.3.2Các cổng giao tiếp 74 4.4GIỚI THIỆU MỘT SỐ THIẾT BỊ VÀO RA chính 75 4.4.1Bàn phím 75 4.4.2Chuột 77 4.4.3Màn hình 78 4.4.4Máy in 81 CHƯƠNG 5 TỔNG QUAN VỀ HỆ ĐIỀU HÀNH 85 5.1 KHÁI NIỆM hệ điều hành 85 5.1.1 Quản lý tài nguyên 85 5.1.2 Quản lý việc thực hiện các chương trình 86 5.2 các dịch vụ do hệ điều hành cung cấp 87 5.3 quá trình phát triển của hệ điều hành 88 5.3.1 Các hệ thống đơn giản 88 5.3.2 Xử lý theo mẻ 89 5.3.3 Đa chương trình 89 5.3.4 Chia sẻ thời gian 91 5.4 cấu trúc hệ điều hành 91 5.4.1 Các thành phần của hệ điều hành 91 5.4.2 Nhân của hệ điều hành 94 5.4.3 Một số kiểu cấu trúc hệ điều hành 94 5.5 Một số hệ điều hành thông dụng 97 5.5.1 Unix 97 5.5.2 Minix 97 5.5.3 Linux 98 5.5.4 MS-DOS 99 5.5.5 Win NT 99 CHƯƠNG 6 CÁC THÀNH PHẦN CỦA HỆ ĐIỀU HÀNH 100 6.1 Quản lý hệ thống file 100 3
  7. 6.1.1 Các khái niệm liên quan tới file 100 6.1.2 Thư mục 103 6.1.3 Cấp phát không gian cho file 108 6.1.4 Độ tin cậy và bảo mật cho hệ thống file 114 6.2 quản lý bộ nhớ 116 6.2.1 Khái niệm phân chương bộ nhớ 116 6.2.2 Khái niệm phân trang bộ nhớ 120 6.2.3 Khái niệm phân đoạn bộ nhớ 121 6.2.4 Bộ nhớ ảo 123 6.3 quản lý tiến trình 128 6.3.1 Các khái niệm 128 6.3.2 Điều độ tiến trình 133 TÀI LIỆU THAM KHẢO 141 4
  8. DANH MỤC CÁC THUẬT NGỮ TIẾNG ANH VÀ VIẾT TẮT Thuật ngữ tiếng Anh Từ viết tắt Thuật ngữ tiếng Việt/Giải thích Central Processing Unit CPU Bộ/Đơn vị xử lý trung tâm Control Unit CU Bộ/Đơn vị điều khiển Arithmethic and Logic Unit ALU Bộ/Đơn vị tính toán số học và logic Program Counter PC Bộ đếm chương trình System Bus Bus hệ thống Memory Bộ nhớ Cache Bộ nhớ đệm / bộ nhớ kết Random Access Memory RAM Bộ nhớ truy cập ngẫu nhiên Read Only Memory ROM Bộ nhớ chỉ đọc Basic Input Output System BIOS Hệ thống vào ra cơ sở Pipeline Cơ chế ống lệnh hay cơ chế xử lý xen kẽ các lệnh Hit Đoán trúng – là sự kiện CPU truy tìm một mục tin và tìm thấy trong cache. Miss Đoán trượt – là sự kiện CPU truy tìm một mục tin và không tìm thấy trong cache. Advanced Technology ATA Chuẩn ghép nối đĩa cứng ATA Attachments Parallel Advanced PATA Chuẩn ghép nối đĩa cứng PATA – hay ATA song song Technology Attachments Integrated Drive Electronics IDE Chuẩn ghép nối đĩa cứng IDE Serial ATA SATA Chuẩn ghép nối đĩa cứng SATA – hay ATA nối tiếp Small Computer System SCSI Chuẩn ghép nối đĩa cứng SCSI Interface Redundant Array of RAID Công nghệ lưu trữ RAID – tạo thành từ một mảng liên Independent Disks kết các đĩa cứng vật lý 5
  9. Network Attached Storage NAS Hệ thống lưu trữ gắn vào mạng Storage Area Network SAN Mạng lưu trữ Industrial Standard ISA Bus theo chuẩn công nghiệp ISA Architecture Extended ISA EISA Bus theo chuẩn công nghiệp mở rộng EISA Peripheral Component PCI Bus PCI Interconnect Accelerated Graphic Port AGP Cổng tăng tốc đồ hoạ AGP PCI Express PCIe Bus PCIe Cathode Ray Tube CRT Màn hình ống điện tử âm cực Liquid Crystal Display LCD Mình hình tinh thể lỏng File Allocation Table FAT Hệ thống cấp phát file New Technology File System NTFS Hệ thống file công nghệ mới Extended File System EXT Hệ thống file mở rộng (các phiên bản cụ thể Ext2, Ext3, Ext3) 6
  10. PHẦN 1: KIẾN TRÚC MÁY TÍNH
  11. Chương 1- Giới thiệu chung CHƯƠNG 1 GIỚI THIỆU CHUNG 1.1 KHÁI NIỆM VỀ KIẾN TRÚC VÀ TỔ CHỨC MÁY TÍNH Kiến trúc máy tính (Computer Architecture) và Tổ chức máy tính (Computer Organization) là hai trong số các khái niệm cơ bản của ngành Công nghệ máy tính (Computer Engineering). Có thể nói kiến trúc máy tính là bức tranh toàn cảnh về hệ thống máy tính, còn tổ chức máy tính là bức tranh cụ thể về các thành phần phần cứng của hệ thống máy tính. Kiến trúc máy tính là khoa học về việc lựa chọn và kết nối các thành phần phần cứng để tạo ra các máy tính đạt được các yêu cầu về chức năng (functionality), hiệu năng (performance) và giá thành (cost). Yêu cầu chức năng đòi hỏi máy tính phải có thêm nhiều tính năng phong phú và hữu ích; yêu cầu hiệu năng đòi hỏi máy tính phải đạt tốc độ xử lý cao hơn và yêu cầu giá thành đòi hỏi máy tính phải càng ngày càng rẻ hơn. Để đạt được cả ba yêu cầu về chức năng, hiệu năng và giá thành là rất khó khăn. Tuy nhiên, nhờ có sự phát triển rất mạnh mẽ của công nghệ vi xử lý, các máy tính ngày nay có tính năng phong phú, nhanh hơn và rẻ hơn so với máy tính các thế hệ trước. Kiến trúc máy tính được cấu thành từ 3 thành phần con: (i) Kiến trúc tập lệnh (Instruction Set Architecture), (ii) Vi kiến trúc (Micro Architecture) và Thiết kế hệ thống (System Design). . Kiến trúc tập lệnh: là hình ảnh của một hệ thống máy tính ở mức ngôn ngữ máy. Kiến trúc tập lệnh bao gồm các thành phần: tập lệnh, các chế độ địa chỉ, các thanh ghi, khuôn dạng địa chỉ và dữ liệu. . Vi kiến trúc: là mô tả mức thấp về các thành phần của hệ thống máy tính, phối ghép và việc trao đổi thông tin giữa chúng. Vi kiến trúc giúp trả lời hai câu hỏi (1) Các thành phần phần cứng của máy tính kết nối với nhau như thế nào? và (2) Các thành phần phần cứng của máy tính tương tác với nhau như thế nào để thực thi tập lệnh? . Thiết kế hệ thống: bao gồm tất cả các thành phần phần cứng của hệ thống máy tính, bao gồm: Hệ thống phối ghép (các bus và các chuyển mạch), Hệ thống bộ nhớ, Các cơ chế giảm tải cho CPU (như truy nhập trực tiếp bộ nhớ) và Các vấn đề khác (như đa xử lý và xử lý song song). Tổ chức máy tính hay cấu trúc máy tính là khoa học nghiên cứu về các bộ phận của máy tính và phương thức làm việc của chúng. Với định nghĩa như vậy, tổ chức máy tính khá gần gũi với vi kiến trúc – một thành phần của kiến trúc máy tính. Như vậy, có thể thấy rằng, kiến trúc máy tính và khái niệm rộng hơn, nó bao hàm cả tổ chức hay cấu trúc máy tính. 1.2 CẤU TRÚC VÀ CHỨC NĂNG CÁC THÀNH PHẦN CỦA MÁY TÍNH 1.2.1 Sơ đồ khối chức năng Hình 1 minh hoạ sơ đồ khối chức năng của một hệ thống máy tính. Theo đó, hệ thống máy tính gồm bốn thành phần chính: (1) CPU – Khối xử lý trung tâm, (2) Bộ nhớ trong, gồm bộ nhớ ROM và bộ nhớ RAM, (3) Các thiết bị ngoại vi, gồm các thiết bị vào và các thiết bị ra và (4) Bus hệ thống, là hệ thống kênh dẫn tín hiệu ghép nối các thành phần kể trên. Ngoài ra, còn 8
  12. Chương 1- Giới thiệu chung có các giao diện ghép nối vào và ghép nối ra dùng để ghép nối các thiết bị ngoại vi vào bus hệ thống. Mục 1.2.2 tiếp theo sẽ mô tả chi tiết chức năng của từng khối. Bộ nhớ trong ROM RAM CPU Bus hệ thống Ghép nối vào Ghép nối ra Thiết bị vào Thiết bị ra Bàn phím Màn hình chuột Máy in Ổ đĩa Ổ đĩa Máy quét Các thiết bị ngoại vi Hình 1. Sơ đồ khối chức năng của hệ thống máy tính 1.2.2 Các thành phần của máy tính 1.2.2.1 Khối xử lý trung tâm Khối xử lý trung tâm (Central Processing Unit - CPU) là thành phần quan trọng nhất - được xem là bộ não của máy tính. Các yêu cầu của hệ thống và của người sử dụng thường được biểu diễn thành các chương trình máy tính, trong đó mỗi chương trình thường được tạo thành từ nhiều lệnh của CPU. CPU đảm nhiệm việc đọc các lệnh của chương trình từ bộ nhớ, giải mã và thực hiện lệnh. Thông qua việc CPU thực hiện các lệnh của chương trình, máy tính có khả năng cung cấp các tính năng hữu ích cho người sử dụng. CPU là vi mạch tích hợp với mật độ rất cao, được cấu thành từ bốn thành phần con: (1) Bộ điều khiển (Control Unit - CU), (2) Bộ tính toán số học và logic (Arithmetic and Logic Unit - ALU), (3) Các thanh ghi (Registers) và bus trong CPU (Internal Bus). Bộ điều khiển có nhiệm vụ đọc, giải mã và điều khiển quá trình thực hiện lệnh. Bộ tính toán số học và logic chuyên thực hiện các phép toán số học như cộng trừ, nhân, chia, và các phép toán lôgic như và, hoặc, phủ định và các phép dịch, quay. Các thanh ghi là kho chứa lệnh và dữ liệu tạm thời cho CPU xử lý. Bus trong CPU có nhiệm vụ truyền dẫn các tín hiệu giữa các bộ phận trong CPU và kết nối với hệ thống bus ngoài. Hình 2 minh hoạ hai CPU của hãng Intel là 8086 ra đời năm 1978 và Core 2 Duo ra đời năm 2006. 1.2.2.2 Bộ nhớ trong Bộ nhớ trong, còn gọi là bộ nhớ chính (Internal Memory hay Main Memory) là kho chứa lệnh và dữ liệu của hệ thống và của người dùng phục vụ CPU xử lý. Bộ nhớ trong thường là bộ nhớ bán dẫn, bao gồm hai loại: (1) Bộ nhớ chỉ đọc (Read Only Memory – ROM) và (2) Bộ nhớ truy cập ngẫu nhiên (Random Access Memory – RAM). ROM thường được sử dụng để 9
  13. Chương 1- Giới thiệu chung lưu lệnh và dữ liệu của hệ thống. Thông tin trong ROM được nạp từ khi sản xuất và thường chỉ có thể đọc ra trong quá trình sử dụng. Hơn nữa thông tin trong ROM luôn tồn tại kể cả khi không có nguồn điện nuôi. Hình 2. CPU của hãng Intel: 8086 và Core 2 Duo Khác với bộ nhớ ROM, bộ nhớ RAM thường được sử dụng để lưu lệnh và dữ liệu của cả hệ thống và của người dùng. RAM thường có dung lượng lớn hơn nhiều so với ROM. Tuy nhiên, thông tin trong RAM chỉ tồn tại khi có nguồn điện nuôi. Hình 3 minh hoạ vi mạch bộ nhớ ROM và các vi mạch nhớ RAM gắn trên một thanh nhớ RAM. Hình 3 Bộ nhớ ROM và RAM 1.2.2.3 Các thiết bị vào ra Các thiết bị vào ra (Input – Output devices), hay còn gọi là các thiết bị ngoại vi (Peripheral devices) đảm nhiệm việc nhập dữ liệu vào, điều khiển hệ thống và kết xuất dữ liệu ra. Có hai nhóm thiết bị ngoại vi: (1) Các thiết bị vào (Input devices) và (2) Các thiết bị ra (Output devices). Các thiết bị vào dùng để nhập dữ liệu vào và điều khiển hệ thống, gồm: bàn phím (keyboard), chuột (mouse), ổ đĩa (Disk Drives), máy quét ảnh (Scanners), Các thiết bị ra 10
  14. Chương 1- Giới thiệu chung dùng để xuất dữ liệu ra, gồm: màn hình (Screen), máy in (Printers), ổ đĩa (Disk Drives), máy vẽ (Plotters), 1.2.2.4 Bus hệ thống Bus hệ thống (System Bus) là một tập các đường dây kết nối CPU với các thành phần khác của máy tính. Bus hệ thống thường gồm ba bus con: Bus địa chỉ – Bus A (Address bus), Bus dữ liệu – Bus D (Data bus), Bus điều khiển - Bus C (Control bus). Bus địa chỉ có nhiệm vụ truyền tín hiệu địa chỉ từ CPU đến bộ nhớ và các thiết bị ngoại vi; Bus dữ liệu vận chuyển các tín hiệu dữ liệu theo hai chiều đi và đến CPU; Bus điều khiển truyền tín hiệu điều khiển từ CPU đến các thành phần khác, đồng thời truyền tín hiệu trạng thái của các thành phần khác đến CPU. 1.3 LỊCH SỬ PHÁT TRIỂN MÁY TÍNH Lịch sử phát triển máy tính có thể được chia thành 5 thế hệ chính phục thuộc vào sự phát triển của mạch điện tử. 1.3.1 Thế hệ 1 (1944-1959) Máy tính thế hệ 1 sử dụng đèn điện tử làm linh kiện chính và băng từ làm thiết bị vào ra. Mật độ tích hợp linh kiện vào khoảng 1000 linh kiện / foot3 (1 foot = 30.48 cm). Đại diện tiêu biểu của thế hệ máy tính này là siêu máy tính ENIAC (Electronic Numerical Integrator and Computer), trị giá 500.000 USD. 1.3.2 Thế hệ 2 (1960-1964) Máy tính thế hệ 2 sử dụng bóng bán dẫn (transitor) làm linh kiện chính. Mật độ tích hợp linh kiện vào khoảng 100.000 linh kiện / foot3. Các đại diện tiêu biểu của thế hệ máy tính này là UNIVAC 1107, UNIVAC III, IBM 7070, 7080, 7090, 1400 series, 1600 series. Máy tính UNIVAC đầu tiên ra đời vào năm 1951, có giá khởi điểm là 159.000 USD. Một số phiên bản kết tiếp của UNIVAC có giá nằm trong khoảng 1.250.000 – 1.500.000 USD. 1.3.3 Thế hệ 3 (1964-1975) Máy tính thế hệ 3 sử dụng mạch tích hợp (IC – Integrated Circuit) làm linh kiện chính. Mật độ tích hợp linh kiện vào khoảng 10.000.000 linh kiện / foot3. Các đại diện tiêu biểu của thế hệ máy tính này là UNIVAC 9000 series, IBM System/360, System 3, System 7. 1.3.4 Thế hệ 4 (1975-1989) Máy tính thế hệ 4 sử dụng mạch tích hợp loại lớn (LSI – Large Scale Integrated Circuit) làm linh kiện chính. Mật độ tích hợp linh kiện vào khoảng 1 tỷ linh kiện / foot3. Các đại diện tiêu biểu của thế hệ máy tính này là IBM System 3090, IBM RISC 6000, IBM RT, Cray 2 XMP. 1.3.5 Thế hệ 5 (1990 - nay) Máy tính thế hệ 5 sử dụng mạch tích hợp loại siêu lớn (VLSI – Very Large Scale Integrated Circuit) làm linh kiện chính. Mật độ tích hợp linh kiện rất cao với các công nghệ 0.180µm – 0.045µm (kích thước transitor giảm xuống còn 180 – 45 nano mét). Các đại diện tiêu biểu của thế hệ máy tính này là máy tính sử dụng CPU Intel Pentium II, III, IV, M, D, Core Duo, Core 11
  15. Chương 1- Giới thiệu chung 2 Duo, Core Quad, Máy tính thế hệ 5 đạt hiệu năng xử lý rất cao, cung cấp nhiều tính năng tiến tiến, như hỗ trợ xử lý song song, tích hợp khả năng xử lý âm thanh và hình ảnh. 1.4 KIẾN TRÚC MÁY TÍNH VON-NEUMANN VÀ HARVARD 1.4.1 Kiến trúc máy tính von-Neumann Kiến trúc máy tính von-Neumann được nhà toán học John von-Neumann đưa ra vào năm 1945 trong một báo cáo về máy tính EDVAC như minh hoạ trên Hình 4 - Kiến trúc máy tính von-Neumann nguyên thuỷ. Hình 4 Kiến trúc máy tính von-Neumann nguyên thuỷ Các máy tính hiện đại ngày nay sử dụng kiến trúc máy tính von-Neumann cải tiến – còn gọi là kiến trúc máy tính von-Neumann hiện đại, như minh hoạ trên Hình 5. Đơn vị xử lý trung tâm (CPU) Đơn vị điều khiển (CU) Bộ nhớ chính Các thiết bị Đơn vị số (Main memory) vào ra (I/O) học-logic (ALU) Các thanh ghi (Registers) Bus hệ thống Hình 5 Kiến trúc máy tính von-Neumann hiện đại Kiến trúc von-Neumann dựa trên 3 khái niệm cơ sở: (1) Lệnh và dữ liệu được lưu trữ trong bộ nhớ đọc ghi chia sẻ - một bộ nhớ duy nhất được sử dụng để lưu trữ cả lệnh và dữ liệu, (2) Bộ nhớ được đánh địa chỉ theo vùng, không phụ thuộc vào nội dung nó lưu trữ và (3) Các lệnh 12
  16. Chương 1- Giới thiệu chung của một chương trình được thực hiện tuần tự. Quá trình thực hiện lệnh được chia thành 3 giai đoạn (stages) chính: (1) CPU đọc (fetch) lệnh từ bộ nhớ, (2) CPU giải mã và thực hiện lệnh; nếu lệnh yêu cầu dữ liệu, CPU đọc dữ liệu từ bộ nhớ; và (3) CPU ghi kết quả thực hiện lệnh vào bộ nhớ (nếu có). 1.4.2 Kiến trúc máy tính Harvard Kiến trúc máy tính Harvard là một kiến trúc tiên tiến như minh hoạ trên Hình 6. Hình 6 Kiến trúc máy tính Harvard Kiến trúc máy tính Harvard chia bộ nhớ trong thành hai phần riêng rẽ: Bộ nhớ lưu chương trình (Program Memory) và Bộ nhớ lưu dữ liệu (Data Memory). Hai hệ thống bus riêng được sử dụng để kết nối CPU với bộ nhớ lưu chương trình và bộ nhớ lưu dữ liệu. Mỗi hệ thống bus đều có đầy đủ ba thành phần để truyền dẫn các tín hiệu địa chỉ, dữ liệu và điều khiển. Máy tính dựa trên kiến trúc Harvard có khả năng đạt được tốc độ xử lý cao hơn máy tính dựa trên kiến trúc von-Neumann do kiến trúc Harvard hỗ trợ hai hệ thống bus độc lập với băng thông lớn hơn. Ngoài ra, nhờ có hai hệ thống bus độc lập, hệ thống nhớ trong kiến trúc Harvard hỗ trợ nhiều lệnh truy nhập bộ nhớ tại một thời điểm, giúp giảm xung đột truy nhập bộ nhớ, đặc biệt khi CPU sử dụng kỹ thuật đường ống (pipeline). 1.5 CÁC HỆ SỐ ĐẾM VÀ TỔ CHỨC DỮ LIỆU TRÊN MÁY TÍNH 1.5.1 Các hệ số đếm Trong đời sống hàng ngày, hệ đếm thập phân (Decimal Numbering System) là hệ đếm thông dụng nhất. Tuy nhiên, trong hầu hết các hệ thống tính toán hệ đếm nhị phân (Binary Numbering System) lại được sử dụng để biểu diễn dữ liệu. Trong hệ đếm nhị phân, chỉ 2 chữ số 0 và 1 được sử dụng: 0 biểu diễn giá trị Sai (False) và 1 biểu diễn giá trị Đúng (True). Ngoài ra, hệ đếm thập lục phân (Hexadecimal Numbering System) cũng được sử dụng. Hệ thập lục phân sử dụng 16 chữ số: 0-9, A, B, C, D, E, F. 1.5.1.1 Hệ đếm thập phân Hệ đếm thập phân là hệ đếm cơ số 10, sử dụng 10 chữ số: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Mỗi số trong hệ 10 có thể được biểu diễn thành một đa thức: n-1 n-2 0 anan-1 a1 = an*10 an-1*10 * *a1*10 Ví dụ: 13
  17. Chương 1- Giới thiệu chung 123 = 1*102 + 2 * 101 + 3*100 = 100 + 20 + 3 123,456 = 1*102 + 2 * 101 + 3*100 + 4*10-1 + 5*10-2 + 6*10-3 = 100 + 20 + 3 + 0.4 + 0.05 + 0.006 1.5.1.2 Hệ đếm nhị phân Hệ đếm nhị phân là hệ đếm cơ số 2, chỉ sử dụng 2 chữ số: 0 và 1. Mỗi số trong hệ 2 cũng có thể được biểu diễn thành 1 đa thức: n-1 n-2 0 (anan-1 a1)2 = an*2 an-1*2 * *a1*2 Ví dụ: 7 6 5 4 3 2 1 0 (11001010)2 = 1*2 + 1*2 + 0*2 + 0*2 + 1*2 + 0*2 + 1*2 + 0*2 = 128 + 64 + 8 + 2 = (202)10 Việc chuyển đổi số hệ thập phân sang số hệ nhị phân có thể được thực hiện theo thuật toán đơn giản như minh hoạ trên Hình 7. Hình 7 Chuyển đổi số hệ thập phân sang số hệ nhị phân 1.5.1.3 Hệ đếm thập lục phân Hệ đếm thập lục phân là hệ đếm cơ số 16, sử dụng 16 chữ số: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. Mỗi số trong hệ 16 được biểu diễn bởi 4 chữ số trong hệ nhị phân như minh hoạ trên Hình 8. Ưu điểm của hệ thập lục phân là số thập lục phân có thể chuyển đổi sang số hệ nhị phân và ngược lại một cách dễ dàng và cần ít chữ số hơn hệ nhị phân để biểu diễn cùng một đơn vị dữ liệu. Hình 8 Giá trị các số thập lục phân theo hệ thập phân và nhị phân 1.5.2 Tổ chức dữ liệu trên máy tính 14
  18. Chương 1- Giới thiệu chung Dữ liệu trên máy tính được biểu diễn theo các đơn vị (unit). Các đơn vị biểu diễn dữ liệu cơ sở gồm: bit, nibble, byte, word và double-word. Bit là đơn vị dữ liệu nhỏ nhất: mỗi bit chỉ lưu được tối đa 2 giá trị: 0 hoặc 1, hay đúng hoặc sai. Nibble là đơn vị kế tiếp bit. Mỗi nibble là một nhóm 4 bit. Một nibble có thể lưu tối đa 16 giá trị, từ (0000)2 đến (1111)2, hoặc một chữ số thập lục phân. Byte là đơn vị dữ liệu kế tiếp nibble. Một byte là một nhóm của 8 bits hoặc 2 nibbles. Một byte có thể lưu đến 256 giá trị, từ (0000 0000)2 đến (1111 1111)2, hoặc từ (00)16 đến (FF)16. Hình 9 minh hoạ đơn vị biểu diễn dữ liệu Byte. Hình 9 Đơn vị biểu diễn dữ liệu Byte Word (từ) là đơn vị dữ liệu kế tiếp byte. Một word là một nhóm của 16 bits, hoặc 2 bytes. Một 16 word có thể lưu đến 2 (65536) giá trị, từ (0000)16 đến (FFFF)16. Hình 10 minh hoạ đơn vị biểu diễn dữ liệu word. Hình 10 Đơn vị biểu diễn dữ liệu Word Double words (từ kép) là đơn vị biểu diễn dữ liệu cơ sở lớn nhất. Một double word là một nhóm 32 bits, hoặc 4 bytes, hoặc 2 words. Một double word có thể lưu đến 232 giá trị, từ (0000 0000)16 đến (FFFF FFFF)16. Hình 11 minh hoạ đơn vị biểu diễn dữ liệu double word. Hình 11 Đơn vị biểu diễn dữ liệu Double word 15
  19. Chương 1- Giới thiệu chung 1.5.3 Số có dấu và số không dấu Trong các hệ thống tính toán, với cùng một số bit có thể biểu diễn các giá trị khác nhau nếu số được biểu diễn là có dấu hoặc không dấu. Để biểu diễn số có dấu, người ta sử dụng bit cao nhất (bên trái nhất) để biểu diễn dấu của số - gọi là bit dấu, chẳng hạn bít dấu có giá trị 0 là số dương và bít dấu có giá trị 1 là số âm. Với số không dấu, tất cả các bit được sử dụng để biểu diễn giá trị của số. Như vậy, miền giá trị có thể biểu diễn của một số gồm n bít như sau: . Số có dấu: miền biểu diễn từ từ -2n-1 đến + 2n-1 - 8 bits: từ -128 đến +128 - 16 bits: từ -32768 đến +32768 - 32 bits: từ -2.147.483.648 đến +2.147.483.648 . Số không dấu: từ 0 đến 2n - 8 bits: từ 0 đến 256 - 16 bits: từ 0 đến 65536 - 32 bits: từ 0 đến 4.294.967.296 1.5.4 Bảng mã ASCII Bảng mã ASCII (American Standard Code for Information Interchange) là bảng mã các ký tự chuẩn tiếng Anh dùng cho trao đổi dữ liệu giữa các hệ thống tính toán. Bảng mã ASCII sử dụng 8 bít để biểu diễn 1 ký tự, cho phép định nghĩa tổng số 256 ký tự, đánh số từ 0 đến 255. 32 ký tự đầu tiên và ký tự số 127 là các ký tự điều khiển (không in ra được). Các ký tự từ số 32 đến 126 là các ký tự có thể in được (gồm cả dấu trắng). Các vị trí còn lại trong bảng (128- 255) để dành cho sử dụng trong tương lai. Hình 12 và Hình 13 lần lượt là minh hoạ các ký tự điều khiển và các ký tự in được của bảng mã ASCII. 16
  20. Chương 1- Giới thiệu chung Hình 12 Bảng mã ASCII - Một số ký tự điều khiển Hình 13 Bảng mã ASCII - Các ký tự in được 17
  21. Chương 2- Khối xử lý trung tâm CHƯƠNG 2 KHỐI XỨ LÝ TRUNG TÂM 2.1 KHỐI XỬ LÝ TRUNG TÂM 2.1.1 Sơ đồ khối tổng quát và các thành phần chức năng của CPU CU A IR Y InternalBus PC ALU A Bus MAR Z D Bus MBR FR Hình 14 Sơ đồ khối tổng quát của CPU Hình 14 trình bày sơ đồ khối nguyên lý tổng quát của CPU. Các thành phần của CPU theo sơ đồ này gồm: . Bộ điều khiển (Control Unit – CU) . Bộ tính toán số học và logic (Arithmetic and Logic Unit) . Bus trong CPU (CPU Internal Bus) . Các thanh ghi của CPU: - Thanh ghi tích luỹ A (Accummulator) - Bộ đếm chương trình PC (Program Counter) - Thanh ghi lệnh IR (Instruction Register) - Thanh ghi địa chỉ bộ nhớ MAR (Memory Address Register) - Thanh ghi đệm dữ liệu MBR (Memory Buffer Register) - Các thanh ghi tạm thời Y và Z - Thanh ghi cờ FR (Flag Register)
  22. Chương 2- Khối xử lý trung tâm 2.1.2 Chu trình xử lý lệnh Như đã trình bày trong chương 1, nhiệm vụ chủ yếu của CPU là đọc lệnh từ bộ nhớ, giải mã và thực hiện lệnh của chương trình. Khoảng thời gian để CPU thực hiện xong một lệnh kể từ khi CPU cấp phát tín hiệu địa chỉ ô nhớ chứa lệnh đến khi nó hoàn tất việc thực hiện lệnh được gọi là chu kỳ lệnh (Insruction Cycle). Mỗi chu kỳ lệnh của CPU được mô tả theo các bước sau: 1. Khi một chương trình được kích hoạt, hệ điều hành (OS - Operating System) nạp mã chương trình vào bộ nhớ trong; 2. Địa chỉ của ô nhớ chứa lệnh đầu tiên của chương trình được nạp vào bộ đếm chương trình PC; 3. Địa chỉ ô nhớ chứa lệnh từ PC được chuyển đến bus địa chỉ thông qua thanh ghi MAR; 4. Bus địa chỉ chuyển địa chỉ ô nhớ đến đơn vị quản lý bộ nhớ (MMU - Memory Management Unit); 5. MMU chọn ra ô nhớ và thực hiện lệnh đọc nội dung ô nhớ; 6. Lệnh (chứa trong ô nhớ) được chuyển ra bus dữ liệu và tiếp theo được chuyển tiếp đến thanh ghi MBR; 7. MBR chuyển lệnh đến thanh ghi lệnh IR; IR chuyển lệnh vào bộ điều khiển CU; 8. CU giải mã lệnh và sinh các tín hiệu điều khiển cần thiết, yêu cầu các bộ phận chức năng của CPU, như ALU thực hiện lệnh; 9. Giá trị địa chỉ trong bộ đếm PC được tăng lên 1 đơn vị lệnh và nó trỏ đến địa chỉ của ô nhớ chứa lệnh tiếp theo; 10. Các bước từ 3-9 được lặp lại với tất cả các lệnh của chương trình. 2.1.3 Các thanh ghi Thanh ghi (registers) là các ô nhớ bên trong CPU, có nhiệm vụ lưu trữ tạm thời lệnh và dữ liệu cho CPU xử lý. Thanh ghi thường có kích thước nhỏ, nhưng tốc độ làm việc rất cao - bằng tốc độ CPU. Các CPU cũ (80x86) có khoảng 16-32 thanh ghi. Các CPU hiện đại (như Pentium 4 và Core Duo) có thể có đến hàng trăm thanh ghi. Kích thước thanh ghi phụ thuộc vào thiết kế CPU. Các kích thước thông dụng của thanh ghi là 8, 16, 32, 64, 128 và 256 bit. CPU Intel 8086 và 80286 có các thanh ghi 8 bit và 16 bit. CPU Intel 80386 và Pentium II có các thanh ghi 16 bit và 32 bit. Các CPU Pentium 4 và Core Duo có các thanh ghi 32 bit, 64 bit và 128 bit. 2.1.3.1 Thanh tích luỹ A Thanh tích luỹ A (Accummulator) là một trong các thanh ghi quan trọng nhất của CPU. Thanh ghi A không những được sử dụng để lưu toán hạng vào mà còn dùng để chứa kết quả ra. Ngoài ra, thanh ghi A còn thường được dùng trong các lệnh trao đổi dữ liệu với các thiết bị 19
  23. Chương 2- Khối xử lý trung tâm vào ra. Kích thước của thanh ghi A bằng kích thước từ xử lý của CPU: 8 bit, 16 bit, 32 bit hoặc 64 bit. 2.1.3.2 Bộ đếm chương trình PC Bộ đếm chương trình PC (Program Counter) hoặc con trỏ lệnh (IP – Instruction pointer) luôn chứa địa chỉ của ô nhớ chứa lệnh kế tiếp được thực hiện. Đặc biệt, PC chứa địa chỉ của ô nhớ chứa lệnh đầu tiên của chương trình khi chương trình được kích hoạt và được hệ điều hành nạp vào bộ nhớ. Khi CPU thực hiện xong một lệnh, địa chỉ của ô nhớ chứa lệnh tiếp theo được nạp vào PC. Kích thước của PC phụ thuộc vào thiết kế CPU. Các kích thước thông dụng của PC là 8 bit, 16 bit, 32 bit và 64 bit. 2.1.3.3 Thanh ghi lệnh IR Thanh ghi lệnh IR (Instruction register) lưu lệnh đang thực hiện. IR nhận lệnh từ MBR và chuyển tiếp lệnh đến CU giải mã và thực hiện. 2.1.3.4 Các thanh ghi MAR và MBR MAR là thanh ghi địa chỉ bộ nhớ (Memory address register) - giao diện giữa CPU và bus địa chỉ. MAR nhận địa chỉ ô nhớ chứa lệnh tiếp theo từ PC và chuyển tiếp ra bus địa chỉ. MBR là thanh ghi đệm dữ liệu (Memory buffer register) - giao diện giữa CPU và bus địa chỉ. MBR nhận lệnh từ bus địa chỉ và chuyển tiếp lệnh đến IR thông qua bus trong CPU. 2.1.3.5 Các thanh ghi tạm thời CPU thường sử dụng một số thanh ghi tạm thời để chứa toán hạng đầu vào và kết quả đầu ra, như các thanh ghi tạm thời X, Y và Z. Ngoài ra, các thanh ghi tạm thời còn tham gia trong việc hỗ trợ xử lý song song (thực hiện nhiều lệnh cùng một thời điểm) và hỗ trợ thực hiện lệnh theo cơ chế thực hiện tiên tiến kiểu không theo trật tự (OOO – Out Of Order execution). 2.1.3.6 Con trỏ ngăn xếp SP SP Stack Hình 15 Con trỏ ngăn xếp SP Ngăn xếp (Stack) là bộ nhớ đặc biệt hoạt động theo nguyên lý vào sau ra trước (LIFO). Con trỏ ngăn xếp SP (Stack Pointer) là một thanh ghi luôn chứa địa chỉ đỉnh ngăn xếp. Có hai thao tác chính với ngăn xếp: . Push - đẩy dữ liệu vào ngăn xếp: 20
  24. Chương 2- Khối xử lý trung tâm SP  SP + 1 ; tăng địa chỉ đỉnh ngăn xếp {SP}  Dữ liệu ; nạp dữ liệu vào ngăn xếp . Pop - lấy dữ liệu ra khỏi ngăn xếp Thanh ghi  {SP} ; chuyển dữ liệu từ đỉnh ngăn xếp vào thanh ghi SP  SP – 1 ; giảm địa chỉ đỉnh ngăn xếp 2.1.3.7 Các thanh ghi tổng quát Các thanh ghi tổng quát (General Purpose Registers) là các thanh ghi đa năng, có thể được sử dụng cho nhiều mục đích: để chứa toán hạng đầu vào hoặc chứa kết quả đầu ra. Chẳng hạn, CPU Intel 8086 có 4 thanh ghi tổng quát: AX - Thanh tích luỹ, BX - thanh ghi cơ sở, CX - thanh đếm và DX - thanh ghi dữ liệu. 2.1.3.8 Thanh ghi trạng thái FR Thanh ghi trạng thái (SR - Status Register) hoặc thanh ghi cờ (FR – Flag Register) là một thanh ghi đặc biệt của CPU: mỗi bít của thanh ghi cờ lưu trạng thái của kết quả của phép tính ALU thực hiện. Có hai loại bít cờ: cờ trạng thái (CF, OF, AF, ZF, PF, SF) và cờ điều khiển (IF, TF, DF). Các bít cờ thường được sử dụng như là các điều kiện trong các lệnh rẽ nhánh để tạo logic chương trình. Kích thước của thanh ghi FR phụ thuộc thiết kế CPU. Hình 16 Các bit của thanh ghi cờ FR 8 bit Hình 16 biểu diễn các bit của thanh ghi cờ FR. Ý nghĩa cụ thể của các bit như sau: . ZF: Cờ Zero, ZF=1 nếu kết quả=0 và ZF=0 nếu kết quả<>0. . SF: Cờ dấu, SF=1 nếu kết quả âm và SF=0 nếu kết quả dương. . CF: Cờ nhớ, CF=1 nếu có nhớ/mượn, CF=0 trong trường hợp khác. . AF: Cờ nhớ phụ, AF=1 nếu có nhớ/mượn ở nửa thấp của toán hạng. . OF: Cờ tràn, OF=1 nếu xảy ra tràn, OF=0 trong trường hợp khác. . PF: Cờ chẵn lẻ, PF=1 nếu tổng số bit 1 trong kết quả là lẻ và PF=0 nếu tổng số bit 1 trong kết quả là chẵn. . IF: Cờ ngắt, IF=1: cho phép ngắt, IF=0: cấm ngắt. 2.1.4 Khối điều khiển Khối điều khiển (Control Unit – CU) là một trong các khối quan trọng nhất của CPU. CU đảm nhiệm việc điều khiển toàn bộ các hoạt động của CPU theo xung nhịp đồng hồ. CU sử dụng nhịp đồng hồ để đồng bộ các đơn vị chức năng trong CPU và giữa CPU với các bộ phận bên ngoài. Hình 17 minh hoạ phương thức làm việc của khối điều khiển CU. Khối điều khiển CU nhận ba tín hiệu đầu vào: (1) Lệnh từ thanh ghi lệnh IR, (2) Giá trị các cờ trạng thái của 21
  25. Chương 2- Khối xử lý trung tâm ALU và (3) Xung nhịp đồng hồ CLK và CU sản sinh hai nhóm tín hiệu đầu ra: (1) Nhóm tín hiệu điều khiển các bộ phận bên trong CPU (Internal control signal) và (2) Nhóm tín hiệu điều khiển các bộ phận bên ngoài CPU (External control signal). Internal External control control signal signal ALU CLK Control Unit CU Flags IR Hình 17 Khối điều khiển CU và các tín hiệu 2.1.5 Khối số học và logic Khối số học và logic (Arithmetic and Logic Unit – ALU) đảm nhiệm chức năng tính toán trong CPU. ALU bao gồm một loạt các đơn vị chức năng con để thực hiện các phép toán số học trên số nguyên và logic: . Bộ cộng (ADD), bộ trừ (SUB), bộ nhân (MUL), bộ chia (DIV), . Các bộ dịch (SHIFT) và quay (ROTATE) . Bộ phủ định (NOT), bộ và (AND), bộ hoặc (OR) và bộ hoặc loại trừ (XOR) Hình 18 minh hoạ các khối con của ALU cũng như các cổng vào và cổng ra của ALU. Hai cổng vào IN nhận các toán hạng đầu vào từ các thanh ghi và một cổng OUT kết nối với bus trong để chuyển kết quả tính toán đến thanh ghi. IN IN ADD SUB NEG SHL EG MUL DIV SHR ROL NOT OR AND ROR XOR OUT Hình 18 Bộ tính toán ALU 22
  26. Chương 2- Khối xử lý trung tâm 2.1.6 Bus trong CPU Bus trong CPU (Internal bus) là kênh giao tiếp giữa các bộ phận bên trong CPU, cụ thể giữa bộ điều khiển CU với các thanh ghi và bộ tính toán ALU. Bus trong hỗ trợ kênh giao tiếp song công (full duplex) và cung cấp giao diện để kết nối với bus ngoài (bus hệ thống). So với bus ngoài, bus trong thường có băng thông lớn hơn và có tốc độ nhanh hơn. 2.2 TẬP LỆNH MÁY TÍNH 2.2.1 Khái niệm lệnh, tập lệnh và các thành phần của lệnh Có thể nói, nếu coi phần mạch điện tử của CPU là “phần xác” thì tập lệnh (Instruction Set) chính là “phần hồn” của bộ não máy tính. Nhờ có tập lệnh, CPU có khả năng lập trình được để thực hiện các công việc hữu ích cho người dùng. Vậy lệnh máy tính là gì? Có thể định nghĩa lệnh máy tính một cách đơn giản: Lệnh máy tính (Computer Instruction) là một từ nhị phân (binary word) được gán một nhiệm vụ cụ thể. Các lệnh của chương trình được lưu trong bộ nhớ và chúng lần lượt được CPU đọc, giải mã và thực hiện. Tập lệnh máy tính thường gồm nhiều lệnh có thể được chia thành một số nhóm theo chức năng: nhóm các lệnh vận chuyển dữ liệu (data movement), nhóm các lệnh tính toán (computational), nhóm các lệnh điều kiện và rẽ nhánh conditonal and branching) và một số lệnh khác. Việc thực hiện lệnh có thể được chia thành các pha (phase) hay giai đoạn (stage). Mỗi lệnh có thể được thực hiện theo 4 giai đoạn: (1) Đọc lệnh (Instruction fetch - IF): lệnh được đọc từ bộ nhớ về CPU; (2) Giải mã (Instruction decode - ID): CPU giải mã lệnh; (3) Thực hiện lệnh (Instruction execution – EX): CPU thực hiện lệnh; và (4) Lưu kết quả (Write back - WB): kết quả thực hiện lệnh (nếu có) được lưu vào bộ nhớ. 2.2.2 Chu kỳ và các pha thực hiện lệnh Chu kỳ thực hiện lệnh (Instruction execution cycle) được định nghĩa là khoảng thời gian mà CPU thực hiện xong một lệnh. Một chu kỳ thực hiện lệnh có thể gồm một số giai đoạn thực hiện lệnh và một giai đoạn thực hiện lệnh có thể gồm một số chu kỳ máy. Một chu kỳ máy có thể gồm một số chu kỳ đồng hồ. Cụ thể hơn, chu kỳ thực hiện lệnh có thể gồm các thành phần sau: . Chu kỳ đọc lệnh . Chu kỳ đọc bộ nhớ (dữ liệu) . Chu kỳ ghi bộ nhớ (dữ liệu) . Chu kỳ đọc thiết bị ngoại vi . Chu kỳ ghi thiết bị ngoại vi . Chu kỳ bus rỗi 2.2.3 Các dạng toán hạng Dạng tổng quát của lệnh máy tính như minh hoạ trên Hình 19, gồm có 2 phần chính: (1) mã lệnh (opcode – operation code) và (2) địa chỉ của các toán hạng (Addresses of Operands). Mỗi 23
  27. Chương 2- Khối xử lý trung tâm lệnh có một mã lệnh riêng và được biểu biễn bằng một số bit. Chẳng hạn, mã lệnh của CPU Intel 8086 được biểu diễn bởi 6 bit. Mỗi lệnh có thể có một hoặc nhiều toán hạng và mỗi toán hạng là một địa chỉ. Tựu chung, có 5 dạng toán hạng của lệnh: 3 địa chỉ, 2 địa chỉ, 1 địa chỉ, 1,5 địa chỉ và 0 địa chỉ. Opcode Addresses of Operands Opcode Destination addr. Source addr. Hình 19 Dạng và các thành phần của lệnh 2.2.3.1 Toán hạng dạng 3 địa chỉ Dạng: opcode addr1, addr2, addr3 Mỗi địa chỉ addr1, addr2, addr3 tham chiếu đến một ô nhớ hoặc một thanh ghi. Ví dụ: ADD R1, R2, R3; R1  R2 + R3; R2 cộng với R3, kết quả lưu vào R1. Ri là thanh ghi của CPU. ADD A, B, C; M[A]  M[B] + M[C]; Lấy nội dung của ô nhớ B cộng với nội dung của ô nhớ C, kết qua lưu vào ô nhớ A A, B, C là địa chỉ các ô nhớ. M[ ] quy ước là phép tham chiếu nội dung ô nhớ. 2.2.3.2 Toán hạng dạng 2 địa chỉ Dạng: opcode addr1, addr2 Mỗi địa chỉ addr1, addr2 tham chiếu đến một ô nhớ hoặc một thanh ghi. Ví dụ: ADD R1, R2; R1  R1 + R2; R1 cộng với R2, kết quả lưu vào R1. Ri là thanh ghi của CPU. ADD A, B; M[A]  M[A] + M[B]; Lấy nội dung của ô nhớ A cộng với nội dung của ô nhớ B, kết qua lưu vào ô nhớ A A, B là địa chỉ các ô nhớ. 2.2.3.3 Toán hạng dạng 1 địa chỉ Dạng: opcode addr2 24
  28. Chương 2- Khối xử lý trung tâm Địa chỉ addr2 tham chiếu đến một ô nhớ hoặc một thanh ghi. Ngoài ra, thanh ghi tích luỹ Racc được sử dụng và có vai trò như addr1 trong toán hạng dạng 2 địa chỉ. Ví dụ: ADD R2; Racc  Racc + R2; Racc cộng với R2, kết quả lưu vào Racc. R2 là thanh ghi của CPU. ADD B; Racc  Racc + M[B]; Lấy nội dung của thanh ghi Racc cộng với nội dung của ô nhớ B, kết qua lưu vào Racc. A là địa chỉ một ô nhớ. 2.2.3.4 Toán hạng dạng 1,5 địa chỉ Dạng: opcode addr1, addr2 Một địa chỉ tham chiếu đến một ô nhớ và địa chỉ còn lại tham chiếu đến một thanh ghi. Dạng 1,5 địa chỉ là dạng toán hạng hỗn hợp giữa ô nhớ và thanh ghi. Ví dụ: ADD R1, A; R1  R1 + M[A]; Lấy nội dung của R1 cộng nội dung của ô nhớ A, kết quả lưu vào R1. R1 là thanh ghi của CPU và A là địa chỉ ô nhớ. 2.2.3.5 Toán hạng dạng 0 địa chỉ Toán hạng 0 địa chỉ thường được sử dụng trong các lệnh thao tác với ngăn xếp: PUSH và POP như minh hoạ trên Hình 20. Hình 20 Thao tác PUSH và POP với ngăn xếp 25
  29. Chương 2- Khối xử lý trung tâm 2.2.4 Các chế độ địa chỉ Chế độ địa chỉ (Addressing modes) là phương thức hoặc cách thức CPU tổ chức các toán hạng của lệnh. Chế độ địa chỉ cho phép CPU kiểm tra dạng lệnh và tìm các toán hạng của lệnh. Số lượng các chế độ địa chỉ phụ thuộc vào thiết kế của CPU. Sau đây là một số chế độ địa chỉ thông dụng: 1. Tức thì (Immediate) 2. Trực tiếp (Direct ) 3. Gián tiếp (indirect ) 4. Chỉ số (Indexed ) 5. Tương đối (Relative) Mô tả chi tiết từng chế độ địa chỉ được thực hiện trong các mục tiếp theo. Các ví dụ minh hoạ các chế độ địa chỉ sử dụng lệnh LOAD (nạp) với dạng sau: LOAD Ý nghĩa: Nạp giá trị của vào Hay:  2.2.4.1 Chế độ địa chỉ tức thì (Immediate) Trong chế độ địa chỉ tức thì, giá trị hằng của toán hạng nguồn (source operand) được đặt nằm ngay sau mã lệnh, còn toán hạng đích có thể là 1 thanh ghi hoặc 1 địa chỉ ô nhớ. Ví dụ: LOAD R1, #1000; R1  1000 ; Nạp giá trị 1000 vào thanh ghi R1. LOAD B, #100; M[B]  100 ; Nạp giá trị 100 vào ô nhớ B. 2.2.4.2 Chế độ địa chỉ trực tiếp (Direct) Khác với chế độ địa chỉ tức thì, chế độ địa chỉ trực tiếp sử dụng một hằng để biểu diễn địa chỉ một ô nhớ làm một toán hạng. Toán hạng còn lại có thể là 1 thanh ghi hoặc 1 địa chỉ ô nhớ. Ví dụ: LOAD R1, 1000; R1  M[1000] Nạp nội dung ô nhớ có địa chỉ 1000 vào thanh ghi R1. Hình 21 minh hoạ việc tham chiếu trong chế độ địa chỉ trực tiếp ở ví dụ trên. Địa chỉ 1000 trỏ đến ô nhớ chứa giá trị 200 và giá trị này được nạp vào thanh ghi R1. 26
  30. Chương 2- Khối xử lý trung tâm LOAD R1, 1000 200 R  200 1 Hình 21 Tham chiếu với chế độ địa chỉ trực tiếp 2.2.4.3 Chế độ địa chỉ gián tiếp (Indirect) Trong chế độ địa chỉ gián tiếp, một thanh ghi hoặc một ô nhớ được sử dụng để lưu địa chỉ một ô nhớ làm một toán hạng. Toán hạng còn lại có thể là một hằng, một thanh ghi hoặc địa chỉ một ô nhớ. Nếu thanh ghi được sử dụng để lưu địa chỉ ô nhớ ta có chế độ địa chỉ gián tiếp qua thanh ghi (register indirect); ngược lại nếu ô nhớ được dụng để lưu địa chỉ ô nhớ khác ta có chế độ địa chỉ gián tiếp qua ô nhớ (memory indirect). Hình 22 Tham chiếu trong chế độ địa chỉ gián tiếp Ví dụ: Gián tiếp qua thanh ghi: LOAD Rj, (Ri); Rj  M[Ri] Nạp nội dung ô nhớ có địa chỉ lưu trong thanh ghi Ri vào thanh ghi Rj. 27
  31. Chương 2- Khối xử lý trung tâm Gián tiếp qua ô nhớ: LOAD Ri, (1000); Ri  M[M[1000]] Nạp nội dung ô nhớ có địa chỉ lưu trong ô nhớ 1000 vào thanh ghi Ri. Hình 22 minh hoạ việc tham chiếu trong chế độ địa chỉ gián tiếp qua thanh ghi và gián tiếp qua ô nhớ. Có thể thấy rằng, chế độ địa chỉ gián tiếp qua thanh ghi chỉ yêu cầu một tham chiếu bộ nhớ cho một truy nhập, còn chế độ địa chỉ gián tiếp qua ô nhớ phải cần tới hai tham chiếu bộ nhớ cho một truy nhập. 2.2.4.4 Chế độ địa chỉ chỉ số (Indexed) Trong chế độ địa chỉ chỉ số, địa chỉ của 1 toán hạng được tạo thành bởi phép cộng giữa 1 hằng và thanh ghi chỉ số (index register). Toán hạng còn lại có thể là một hằng, một thanh ghi hoặc địa chỉ một ô nhớ. Ví dụ: LOAD Ri, X(Rind); Ri  M[X+Rind] X là một hằng và Rind là thanh ghi chỉ số. Hình 23 minh hoạ phép tham chiếu trong chế độ địa chỉ chỉ số. Hình 23 Tham chiếu trong chế độ địa chỉ chỉ số 2.2.4.5 Chế độ địa chỉ tương đối (Relative) Trong chế độ địa chỉ tương đối, địa chỉ của 1 toán hạng được tạo thành bởi phép cộng giữa 1 hằng và bộ đếm chương trình PC (program counter). Toán hạng còn lại có thể là một hằng, một thanh ghi hoặc địa chỉ một ô nhớ. Ví dụ: LOAD Ri, X(PC); Ri  M[X+PC] X là một hằng và PC là bộ đếm chương trình. Hình 24 minh hoạ phép tham chiếu trong chế độ địa chỉ chỉ số. 28
  32. Chương 2- Khối xử lý trung tâm Hình 24 Tham chiếu trong chế độ địa chỉ tương đối 2.2.5 Một số dạng lệnh thông dụng Phụ thuộc thiết kế CPU, tập lệnh của CPU có thể có số lượng các lệnh rất khác nhau, từ vài chục lệnh đến vài trăm lệnh. Tuy nhiên, một hầu hết các tập lệnh máy tính thường bao gồm các nhóm lệnh cơ sở sau: (1) Các lệnh vận chuyển dữ liệu (Data Movement Instructions), (2) Các lệnh toán học và logic (Arithmetic and Logical Instructions), (3) Các lệnh điều khiển chương trình (Control/Sequencing Instructions) và (4) Các lệnh vào ra (Input/Output Instructions). Phần tiếp theo của mục này trình bày một số lệnh thông dụng thuộc các nhóm lệnh kể trên. 2.2.5.1 Các lệnh vận chuyển dữ liệu Các lệnh vận chuyển dữ liệu vận chuyển dữ liệu giữa các bộ phận của máy tính. Cụ thể, vận chuyển dữ liệu giữa các thanh ghi của CPU, nạp dữ liệu từ các ô nhớ về các thanh ghi của CPU và ngược lại ghi dữ liệu từ các thanh ghi ra các ô nhớ. Ngoài ra, dữ liệu cũng có thể được vận chuyển giữa các ô nhớ trong bộ nhớ trong. Ví dụ: Vận chuyển dữ liệu giữa các thanh ghi của CPU: MOVE Ri, Rj; Ri  Rj Chuyển (sao chép) nội dung của thanh ghi Rj sang thanh ghi Ri. Vận chuyển dữ liệu giữa 1 thanh ghi của CPU và một ô nhớ: MOVE 1000, Rj; M[1000]  Rj Lưu nội dung của thanh ghi Rj vào ô nhớ có địa chỉ 1000. Vận chuyển dữ liệu giữa các ô nhớ: MOVE 1000, (Rj); M[1000]  M[Rj] Chuyển (sao chép) nội dung của ô nhớ có địa chỉ chứa trong thanh ghi Rj sang số nhớ có địa chỉ 1000. 29
  33. Chương 2- Khối xử lý trung tâm Một số lệnh vận chuyển dữ liệu thông dụng Tên lệnh Ý nghĩa MOVE Chuyển dữ liệu giữa thanh ghi – thanh ghi, ô nhớ - thanh ghi và ô nhớ - ô nhớ. LOAD Nạp nội dung 1 ô nhớ vào 1 thanh ghi. STORE Lưu nội dung 1 thanh ghi ra 1 ô nhớ. PUSH Đẩy dữ liệu vào ngăn xếp. POP Lấy dữ liệu ra khỏi ngăn xếp. 2.2.5.2 Các lệnh toán học và logic Các lệnh tính toán số học và logic được sử dụng để thực hiện các thao tác tính toán trên nội dung các thanh ghi và / hoặc nội dung các ô nhớ. Các lệnh tính toán hỗ trợ hầu hết các phép toán số học thông dụng như cộng, trừ, nhân, chia các số nguyên và các phép toán logic, như phủ định, và, hoặc, hoặc loại trừ. Ví dụ: Lệnh cộng: ADD R1, R2, R3; R1  R2 + R3 Cộng nội dung 2 thanh ghi R2 và R3, kết quả lưu vào thanh ghi R1. ADD A, B, C; M[A]  M[B] + M[C] Cộng nội dung 2 ô nhớ B và C, kết quả lưu vào ô nhớ A. Lệnh trừ: SUBSTRACT R1, R2, R3; R1  R2 - R3 Lấy nội dung thanh ghi R2 trừ đi nội dung thanh ghi R3, kết quả lưu vào thanh ghi R1. Lệnh logic: NOT R1; R1  !( R1) Lấy giá trị đảo (phủ định) của nội dung thanh ghi R1. AND R1, R2; R1  R1  R2 Nhân bit nội dung 2 thanh ghi R1 và R2, kết quả lưu vào R1. 30
  34. Chương 2- Khối xử lý trung tâm Một số lệnh tính toán và logic thông dụng Tên lệnh Ý nghĩa ADD Cộng các toán hạng SUBSTRACT Trừ các toán hạng MULTIPLY Nhân các toán hạng DIVIDE Chia các toán hạng INCREMENT Tăng một đơn vị DECREMENT Giảm một đơn vị NOT Phủ định bit AND Phép và (nhân) bit OR Phép hoặc (cộng) bit XOR Phép hoặc loại trừ bit COMPARE So sánh 2 toán hạng SHIFT Phép dịch bit (dịch trái, dịch phải) ROTATE Phép quay bit (quay trái, quay phải) 2.2.5.3 Các lệnh điều khiển chương trình Các lệnh điều khiển chương trình được sử dụng để thay đổi trật tự thực hiện các lệnh khác trong chương trình hay làm thay đổi logic chương trình. Đây là nhóm lệnh gây ra các rẽ nhánh (branching), hoặc nhảy (jumping) làm cho quá trình thực hiện chương trình phức tạp hơn. Một trong các đặc tính của các lệnh này là chúng làm thay đổi nội dung của bộ đếm chương trình PC – nơi chứa địa chỉ ô nhớ chứa lệnh tiếp theo được thực hiện, có nghĩa là yêu cầu CPU thực hiện chương trình từ một vị trí mới thay vì thực hiện lệnh kế tiếp lệnh đang thực hiện. Các lệnh điều khiển chương trình sử dụng các cờ của ALU (lưu trong thanh ghi cờ FR) để xác định điều kiện rẽ nhánh hoặc nhảy. Có thể chia các lệnh điều khiển chương trình thành 3 loại chính sau: . Các lệnh nhảy / rẽ nhánh có điều kiện (CONDITIONAL BRANCHING/ CONDITIONAL JUMP); . Các lệnh nhảy/ rẽ nhánh không điều kiện (UNCONDITIONAL BRANCHING / JUMP); 31
  35. Chương 2- Khối xử lý trung tâm . Các lệnh gọi thực hiện (CALL) và trở về (RETURN) từ chương trình con. Ví dụ: Cộng nội dung 100 ô nhớ cạnh nhau, bắt đầu từ địa chỉ 1000. Kết quả lưu vào R0. LOAD R1, #100; R1  100 LOAD R2, #1000; R2  1000 LOAD R0, #0; R0  0 Loop: ADD R0, (R2); R0  R0 + M[R2] INCREMENT R2; R2  R2 + 1 DECREMENT R1; R1  R1 – 1 BRANCH-IF-GREATER-THAN Loop; ; Quay lại thực hiện lệnh sau nhãn Loop nếu R1 còn lớn hơn 0. Một số lệnh điều khiển chương trình thông dụng Tên lệnh Ý nghĩa BRANCH-IF-CONDITION Chuyển đến thực hiện lệnh ở địa chỉ mới nếu điều kiện là đúng. JUMP Chuyển đến thực hiện lệnh ở địa chỉ mới. CALL Chuyển đến thực hiện chương trình con. RETURN Trở về (từ chương trình con) thực hiện tiếp chương trình gọi. 2.2.5.4 Các lệnh vào ra Các lệnh vào ra (I/O instructions) được sử dụng để vận chuyển dữ liệu giữa máy tính và các thiết bị ngoại vi. Các thiết bị ngoại vi giao tiếp với máy tính thông qua các cổng vào ra chuyên dụng (IO dedicated ports). Mỗi cổng vào ra được gán một địa chỉ riêng biệt. Có hai lệnh vào ra cơ bản: . INPUT: sử dụng để chuyển dữ liệu từ thiết bị vào (input devices) đến CPU; . OUTPUT: sử dụng để chuyển dữ liệu từ CPU đến thiết bị ra (output devices). 2.3 GIỚI THIỆU CƠ CHẾ ỐNG LỆNH 2.3.1 Giới thiệu cơ chế ống lệnh Cơ chế ống lệnh (pipeline) hay còn gọi là cơ chế thực hiện xen kẽ các lệnh của chương trình là một phương pháp thực hiện lệnh tiên tiến, cho phép đồng thời thực hiện nhiều lệnh, giảm thời gian trung bình thực hiện mỗi lệnh và như vậy tăng được hiệu năng xử lý lệnh của CPU. 32
  36. Chương 2- Khối xử lý trung tâm Việc thực hiện lệnh được chia thành một số giai đoạn và mỗi giai đoạn được thực thi bởi một đơn vị chức năng khác nhau của CPU. Nhờ vậy CPU có thể tận dụng tối đa năng lực xử lý của các đơn vị chức năng của mình, giảm thời gian chờ cho từng đơn vị chức năng. (a) Không pipeline (b) Có pipeline Hình 25 Thực hiện lệnh (a) không pipeline và (b) có pipeline Error! Reference source not found. minh hoạ cơ chế thực hiện lệnh (a) không pipeline và b) có pipeline của một hệ thống load-store đơn giản. Trong đó, việc thực hiện lệnh được chia thành 5 giai đoạn: . Instruction Fetch - IF: Đọc lệnh từ bộ nhớ (hoặc cache); . Instruction Decode - ID: giải mã lệnh và đọc các toán hạng; . Execute - EX: thực hiện lệnh; nếu là lệnh truy nhập bộ nhớ: tính toán địa chỉ bộ nhớ; . Memory Access - MEM: Đọc/ghi bộ nhớ; no-op nếu không truy nhập bộ nhớ; no-op là giai đoạn chờ, tiêu tốn thời gian CPU, nhưng không thực hiện thao tác có nghĩa; . Write Back - WB: Ghi kết quả vào các thanh ghi. Có thể thấy, với cơ chế thực hiện không pipeline, tại mỗi thời điểm chỉ có một lệnh được thực hiện và chỉ có một đơn vị chức năng của CPU làm việc, các đơn vị chức năng khác trong trạng thái chờ. Ngược lại, với cơ chế thực hiện có pipeline, có nhiều lệnh đồng thời được thực hiện gối nhau trong CPU và hầu hết các đơn vị chức năng của CPU liên tục tham gia vào quá trình xử lý lệnh. Số lượng lệnh được xử lý đồng thời đúng bằng số giai đoạn thực hiện lệnh. Với 5 giai đoạn thực hiện lệnh, để xử lý 5 lệnh, CPU cần 9 nhịp đồng hồ với cơ chế thực hiện có pipeline, trong khi CPU cần đến 25 nhịp đồng hồ để thực hiện 5 lệnh với cơ chế thực hiện không pipeline. Hình 26 minh hoạ việc các đơn vị chức năng của CPU phối hợp thực hiện lệnh trong cơ chế pipeline. Việc lựa chọn số giai đoạn thực hiện lệnh sao cho phù hợp là một trong các vấn đề quan trọng của cơ chế ống lệnh. Về mặt lý thuyết, thời gian thực hiện lệnh trung bình sẽ giảm khi tăng số giai đoạn thực hiện lệnh. Cho đến hiện nay, không có câu trả lời chính xác về số giai đoạn thực hiện lệnh tối ưu mà nó phụ thuộc nhiều vào thiết kế của CPU. Với các CPU cũ (họ Intel 33
  37. Chương 2- Khối xử lý trung tâm 80x86 và tương đương) số giai đoạn là 3 đến 5. Với các CPU Intel Pentium III và Pentium M, Core Duo, Core 2 Duo số giai đoạn là khoảng 10 đến 15. Riêng họ Intel Pentium IV có số giai đoạn vào khoảng 20 và cá biệt phiên bản Intel Pentium IV Prescott chia việc thực hiện lệnh thành 31 giai đoạn. Hình 26 Thực hiện lệnh theo cơ chế pipeline với các đơn vị chức năng của CPU 2.3.2 Các vấn đề của cơ chế ống lệnh và hướng giải quyết Như đã trình bày, cơ chế ống lệnh giúp giảm thời gian trung bình thực hiện từng lệnh và tăng đáng kể hiệu suất xử lý lệnh của CPU. Tuy nhiên, cơ chế ống lệnh cũng gặp phải một số vấn đề làm giảm hiệu suất thực hiện lệnh. Tựu chung, có ba vấn đề thường gặp với cơ chế ống lệnh: (1) Vấn đề xung đột tài nguyên (resource conflicts), (2) Vấn đề tranh chấp dữ liệu (Data hazards) và (3) Vấn đề nảy sinh do các lệnh rẽ nhánh (Branch instructions). Trong phạm vi của bài giảng này, hướng giải quyết các vấn đề của cơ chế ống lệnh chỉ dừng ở mức giới thiệu phương pháp. 2.3.2.1 Vấn đề xung đột tài nguyên Vấn đề xung đột tài nguyên xảy ra khi hệ thống không cung cấp đủ tài nguyên phần cứng phục vụ CPU thực hiện đồng thời nhiều lệnh trong cơ chế ống lệnh. Hai xung đột tài nguyên thường gặp nhất là xung đột truy cập bộ nhớ và xung đột truy cập các thanh ghi. Giả sử bộ nhớ chỉ hỗ trợ một truy cập tại mỗi thời điểm và nếu tại cùng một thời điểm, có hai yêu cầu truy cập bộ nhớ đồng thời từ 2 lệnh được thực hiện trong ống lệnh (đọc lệnh – tại giai đoạn IF và đọc dữ liệu – tại giai đoạn ID) sẽ nảy sinh xung đột. Điều tương tự cũng có thể xảy ra với các thanh ghi khi có 2 hay nhiều lệnh đang thực hiện đồng yêu cầu đọc/ghi cùng một thanh ghi. Giải pháp tối ưu cho vấn đề xung đột tài nguyên là nâng cao năng lực phục vụ của các tài nguyên phần cứng. Với xung đột truy cập bộ nhớ có thể sử dụng hệ thống nhớ hỗ trợ nhiều lệnh đọc ghi đồng thời, hoặc sử dụng các bộ nhớ tiên tiến như bộ nhớ cache. Với xung đột 34
  38. Chương 2- Khối xử lý trung tâm truy cập các thanh ghi, giải pháp là tăng số lượng thanh ghi vật lý và có cơ chế cấp phát thanh ghi linh hoạt khi thực hiện các lệnh. 2.3.2.2 Vấn đề tranh chấp dữ liệu Tranh chấp dữ liệu cũng là một trong các vấn đề lớn của cơ chế ống lệnh và tranh chấp dữ liệu kiểu đọc sau khi ghi (RAW – Read After Write) là dạng xung đột dữ liệu hay gặp nhất. Để hiểu rõ tranh chấp dữ liệu kiểu RAW, ta xem xét hai lệnh sau: ADD R1, R2, R3; R1  R2 + R3 (1) SUB R4, R1, R2; R4  R1 + R2 (2) Hình 27 Tranh chấp dữ liệu kiểu RAW Hình 27 minh hoạ tranh chấp dữ liệu kiểu RAW giữa hai lệnh ADD và SUB được thực hiện kề nhau trong cơ chế ống lệnh. Có thể thấy lệnh SUB sử dụng kết quả của lệnh ADD (thanh ghi R1 là kết quả của ADD và là đầu vào cho SUB) và như vậy hai lệnh có sự phụ thuộc dữ liệu. Tuy nhiên, lệnh SUB đọc thanh ghi R1 tại giai đoạn giải mã (ID), trước khi lệnh ADD ghi kết quả vào thanh ghi R1 ở giai đoạn lưu kết quả (WB). Như vậy, giá trị SUB đọc được từ thanh ghi R1 là giá trị cũ, không phải là kết quả tạo ra bởi ADD. Để SUB đọc được giá trị mới nhất của R1, giai đoạn ID của SUB phải lùi 3 nhịp, đến vị trí giai đoạn WB của ADD kết thúc. Có một số giải pháp cho vấn đề tranh chấp dữ liệu kiểu RAW. Cụ thể: 1. Nhận dạng tranh chấp RAW khi nó diễn ra; 2. Khi tranh chấp RAW xảy ra, tạm dừng (stall) ống lệnh cho đến khi lệnh phía trước hoàn tất giai đoạn WB; 3. Có thể sử dụng trình biên dịch (compiler) để nhận dạng tranh chấp RAW và thực hiện: . Chèn thêm các lệnh NO-OP vào giữa các lệnh có thể gây ra tranh chấp RAW; NO-OP là lệnh rỗng, không thực hiện tác vụ hữu ích mà chỉ tiêu tốn thời gian CPU. . Thay đổi trật tự các lệnh trong chương trình và chèn các lệnh độc lập vào giữa các lệnh có thể gây ra tranh chấp RAW; 35
  39. Chương 2- Khối xử lý trung tâm Mục đích của cả hai phương pháp kể trên là lùi việc thực hiện lệnh gây tranh chấp dữ liệu cho đến khi lệnh trước nó hoàn tất việc lưu kết quả. 4. Sử dụng phần cứng để nhận dạng tranh chấp RAW và dự đoán trước giá trị dữ liệu phụ thuộc. Hình 28 minh hoạ giải pháp khắc phục tranh chấp RAW bằng cách chèn thêm các lệnh NO-OP và Hình 29 minh hoạ giải pháp khắc phục tranh chấp RAW bằng cách chèn thêm các lệnh độc lập giữa hai lệnh có tranh chấp. Các lệnh độc lập có thể có được bằng cách thay đổi trật tự thực hiện các lệnh của chương trình mà không thay đổi kết quả thực hiện nó. Cũng có thể sử dụng giải pháp kết hợp chèn NO-OP và lệnh độc lập. Hình 28 Khắc phục tranh chấp RAW bằng chèn thêm NO-OP Hình 29 Khắc phục tranh chấp RAW bằng chèn các lệnh độc lập 2.3.2.3 Vấn đề nảy sinh do các lệnh rẽ nhánh Theo thống kê, tỷ lệ các lệnh rẽ nhánh trong chương trình khoảng 10-30%. Do lệnh rẽ nhánh thay đổi nội dung của bộ đếm chương trình, chúng có thể phá vỡ tiến trình thực hiện tuần tự các lệnh trong ống lệnh vì lệnh được thực hiện sau lệnh rẽ nhánh có thể không phải là lệnh liền sau nó mà là một lệnh ở vị trí khác. Như vậy, do kiểu thực hiện gối đầu, các lệnh liền sau lệnh rẽ nhánh đã được nạp và thực hiện dở dang trong trong ống lệnh sẽ bị đẩy ra làm cho ống lệnh bị trống rỗng và hệ thống phải bắt đầu nạp mới các lệnh từ địa chỉ đích rẽ nhánh. Hình 30 minh hoạ vấn đề nảy sinh trong ống lệnh do lệnh rẽ nhánh. Các lệnh sau lệnh rẽ nhánh LOAD và ADD bị đẩy ra và hệ thống nạp mới các lệnh từ địa chỉ đích rẽ nhánh 1000. 36
  40. Chương 2- Khối xử lý trung tâm Hình 30 Vấn đề nảy sinh do lệnh rẽ nhánh Có nhiều giải pháp khắc phục các vấn đề nảy sinh do các lệnh rẽ nhánh, như sử dụng đích rẽ nhánh (branch targets), làm chậm rẽ nhánh (delayed branching) và dự đoán rẽ nhánh (branch prediction). Tài liệu này chỉ giới thiệu phương pháp làm chậm rẽ nhánh. Ý tưởng chính của phương pháp làm chậm rẽ nhánh là lệnh rẽ nhánh sẽ không gây ra sự rẽ nhánh tức thì mà được làm “trễ” một số chu kỳ, phụ thuộc vào chiều dài của ống lệnh. Phương pháp này cho hiệu quả khá tốt với các ống lệnh ngắn, thường là 2 giai đoạn và với ràng buộc lệnh ngay sau lệnh rẽ nhánh luôn được thực hiện, không phụ thuộc vào kết quả của lệnh rẽ nhánh. Cách thực hiện của phương pháp chậm rẽ nhánh là chèn thêm một lệnh NO-OP hoặc một lệnh độc lập vào ngay sau lệnh rẽ nhánh. Hình 31 minh hoạ vấn đề nảy sinh do lệnh rẽ nhánh có điều kiện JNE (nhảy nếu R1 không bằng 0), giải pháp chèn một lệnh NO-OP hoặc một lệnh độc lập vào sau lệnh nhảy để khắc phục. Hình 31 Khắc phục vấn đề lệnh rẽ nhánh bằng cách chèn NO-OP hoặc lệnh độc lập 37
  41. Chương 3 – Hệ thống nhớ CHƯƠNG 3 HỆ THỐNG NHỚ 3.1 PHÂN LOẠI BỘ NHỚ MÁY TÍNH 3.1.1 Phân loại bộ nhớ Bộ nhớ máy tính gồm nhiều thành phần với tốc độ truy cập và và dung lượng khác nhau được kết hợp với nhau tạo thành hệ thống nhớ. Có nhiều cách phân loại bộ nhớ máy tính. Tựu chung, có thể chia bộ nhớ máy tính dựa trên ba tiêu chí: (1) kiểu truy cập, (2) khả năng duy trì dữ liệu và (3) công nghệ chế tạo. Dựa trên kiểu truy cập, có thể chia bộ nhớ máy tính thành ba loại: Bộ nhớ truy cập tuần tự (Serial Access Memory - SAM), bộ nhớ truy nhập ngẫu nhiên (Random Access Memory - RAM), và bộ nhớ chỉ đọc (Read Only Memory - ROM). Trong bộ nhớ truy cập tuần tự, các ô nhớ được truy cập một cách tuần tự, có nghĩa là muốn truy cập đến ô nhớ sau phải duyệt qua ô nhớ trước nó. Tốc độ truy cập các ô nhớ có vị trí khác nhau là không giống nhau. Ngược lại, trong bộ nhớ truy nhập ngẫu nhiên, các ô nhớ có thể được truy cập ngẫu nhiên, không theo một trật tự định trước. Với bộ nhớ chỉ đọc, thông tin được ghi vào bộ nhớ một lần nhờ một thiết bị đặc biệt và sau đó chỉ có thể đọc ra. Dựa trên khả năng duy trì dữ liệu, có hai loại bộ nhớ: bộ nhớ ổn định (Non-volatile memory) và bộ nhớ không ổn định (Volatile memory). Bộ nhớ ổn định có khả năng duy trì dữ liệu kể cả khi không có nguồn nuôi. Đại diện tiêu biểu cho bộ nhớ ổn định là bộ nhớ ROM. Ngược lại, thông tin trong bộ nhớ không ổn định chỉ tồn tại khi có nguồn nuôi và sẽ mất khi mất nguồn nuôi. Đại diện tiêu biểu cho bộ nhớ không ổn định là bộ nhớ RAM. Dựa trên công nghệ chế tạo, có ba loại bộ nhớ: bộ nhớ bán dẫn (Semiconductor memory), bộ nhớ từ tính (Magnetic memory), bộ nhớ quang học (Optical memory). Bộ nhớ bán dẫn được chế tạo bằng vật liệu bán dẫn, thường có tốc độ truy cập rất cao, nhưng giá thành đắt. Đại diện cho bộ nhớ bán dẫn là bộ nhớ ROM và RAM. Bộ nhớ từ tính là bộ nhớ dựa trên từ tính của các vật liệu có khả năng nhiễm từ để lưu trữ và đọc / ghi thông tin. Đại diện cho bộ nhớ từ tính là các loại đĩa từ (đĩa mềm, đĩa cứng) và băng từ. Bộ nhớ quang học là bộ nhớ hoạt động dựa trên các nguyên lý quang – điện. Đại diện cho bộ nhớ quang học là các loại đĩa quang, như đĩa CD, DVD, 3.1.2 Tổ chức mạch nhớ Một mạch nhớ (memory chip) thường gồm nhiều ô nhớ (memory cells) được tổ chức thành một ma trận nhớ gồm một số hàng và một số cột. Hình 32 minh hoạ tổ chức một mạch nhớ RAM. Ngoài ma trận nhớ gồm các ô nhớ, mạch nhớ còn gồm các đường địa chỉ (Address lines), bộ giải mã địa chỉ (Address decoder), các đường dữ liệu (Data lines) và các tín hiệu điều khiển như tín hiệu chọn mạch (Chip Select - CS), tín hiệu cho phép đọc (Read Enable - RE) và tín hiệu cho phép ghi (Write Enable - WE). Các đường địa chỉ là một tập các chân tín hiệu kết nối với bus địa chỉ nhận các tín hiệu địa chỉ ô nhớ từ CPU. Bộ giải mã địa chỉ giải mã các tín hiệu địa chỉ ô nhớ thành các địa chỉ hàng và
  42. Chương 3- Hệ thống nhớ cột để có thể chọn ra được ô nhớ. Các đường dữ liệu là một tập các chân tín hiệu kết nối với bus dữ liệu để nhận tín hiệu dữ liệu từ CPU và gửi tín hiệu dữ liệu đọc được từ ô nhớ về CPU. Hình 32 Tổ chức mạch nhớ Các tín hiệu điều khiển có nhiệm vụ điều khiển hoạt động của mạch nhớ theo các tín hiệu lệnh gửi đến từ CPU. Tín hiệu chọn mạch CS cho phép kích hoạt mạch nhớ làm việc với CPU khi CS = 0. Thông thường, tại mỗi thời điểm chỉ có một mạch nhớ được chọn kích hoạt làm việc với CPU, còn các mạch khác ở trạng thái không được kích hoạt. Tín hiệu cho phép ghi WE = 0 sẽ cho phép ghi thông tin vào các ô nhớ trong một dòng. Tương tự, tín hiệu cho phép đọc RE = 0 sẽ cho phép đọc dữ liệu từ các ô nhớ trong một dòng. 3.2 CẤU TRÚC PHÂN CẤP BỘ NHỚ MÁY TÍNH 3.2.1 Giới thiệu cấu trúc phân cấp hệ thống nhớ Hình 33 Cấu trúc phân cấp hệ thống nhớ Hầu hết hệ thống nhớ trong các thiết bị tính toán hiện đại được tổ chức theo cấu trúc phân cấp (hierachical structure). Cấu trúc phân cấp không chỉ được sử dụng trong các hệ thống nhớ mà nó còn sử dụng rộng rãi trong đời sống xã hội, như cấu trúc tổ chức các cơ quan nhà nước, 39
  43. Chương 3- Hệ thống nhớ doanh nghiệp và cả các trường học. Hình 33 minh hoạ cấu trúc phân cấp hệ thống nhớ, gồm các phần chính: các thanh ghi của CPU (CPU Registers), bộ nhớ cache (Cache), bộ nhớ chính (Main Memory) và bộ nhớ ngoài (Secondary / Tertiary Storage). Hình 34 Dung lượng, thời gian truy cập và giá thành các loại bộ nhớ Trong cấu trúc phân cấp hệ thống nhớ, dung lượng các thành phần tăng theo chiều từ các thanh ghi của CPU đến bộ nhớ ngoài. Ngược lại, tốc độ truy nhập hay băng thông và giá thành một đơn vị nhớ tăng theo chiều từ bộ nhớ ngoài đến các thanh ghi của CPU. Như vậy, các thanh ghi của CPU có dung lượng nhỏ nhất nhưng có tốc độ truy cập nhanh nhất và cũng có giá thành cao nhất. Bộ nhớ ngoài có dung lượng lớn nhất, nhưng tốc độ truy cập thấp nhất. Bù lại, bộ nhớ ngoài có giá thành rẻ nên có thể được sử dung với dung lượng lớn. Các thanh ghi được tích hợp trong CPU và thường hoạt động theo tần số làm việc của CPU, nên đạt tốc độ truy cập rất cao. Tuy nhiên, do không gian trong CPU rất hạn chế nên tổng dung lượng của các thanh ghi là khá nhỏ, chỉ khoảng vài chục byte đến vài kilobyte. Các thanh ghi thường được sử dụng để lưu toán hạng đầu vào và kết quả đầu ra của các lệnh phục vụ CPU làm việc. Bộ nhớ cache có dung lượng tương đối nhỏ, khoảng từ vài chục kilobyte đến vài chục megabyte (khoảng 64KB đến 32MB với các máy tính hiện nay). Tốc độ truy cập cache cao, nhưng giá thành còn khá đắt. Cache được coi là bộ nhớ “thông minh” do có khả năng đoán trước được nhu cầu lệnh và dữ liệu của CPU. Cache “đoán” và tải trước các lệnh và dữ liệu CPU cần sử dụng từ bộ nhớ chính, nhờ vậy giúp CPU giảm thời gian truy cập hệ thống nhớ, tăng tốc độ xử lý. Bộ nhớ chính gồm có bộ nhớ ROM và bộ nhớ RAM, có dung lượng khá lớn (khoảng từ 256MB đến 4GB với các hệ thống 32 bit), nhưng tốc độ truy cập tương đối chậm so với cache. Giá thành bộ nhớ chính tương đối thấp nên có thể sử dụng với dung lượng lớn. Bộ nhớ chính được sử dụng để lưu lệnh và dữ liệu của hệ thống và của người dùng. Bộ nhớ ngoài hay bộ nhớ thứ cấp, gồm các loại đĩa từ, đĩa quang và băng từ. Bộ nhớ ngoài thường có dung lượng rất lớn, khoảng 20GB đến 1000GB, nhưng tốc độ truy cập rất chậm. Bộ nhớ ngoài có ưu điểm là giá thành rẻ và thường được sử dụng để lưu trữ dữ liệu lâu dài dưới dạng các tệp (files). 3.2.2 Vai trò của cấu trúc phân cấp hệ thống nhớ Không hoàn toàn giống với vai trò của cấu trúc phân cấp trong các cơ quan và doanh nghiệp là “chia để trị”, cấu trúc phân cấp trong hệ thống nhớ có hai vai trò chính: (1) tăng hiệu năng hệ thống thông qua việc giảm thời gian truy cập các ô nhớ và (2) giảm giá thành sản xuất. 40
  44. Chương 3- Hệ thống nhớ Sở dĩ cấu trúc phân cấp trong hệ thống nhớ có thể giúp tăng hiệu năng hệ thống là do nó giúp dung hoà được CPU có tốc độ cao và phần bộ nhớ chính và bộ nhớ ngoài có tốc độ thấp. CPU sẽ chủ yếu trực tiếp truy cập bộ nhớ cache có tốc độ cao, và cache sẽ có nhiệm vụ chuyển trước các dữ liệu cần thiết về từ bộ nhớ chính. Nhờ vậy, CPU sẽ không phải thường xuyên truy cập trực tiếp bộ nhớ chính và bộ nhớ ngoài để tìm dữ liệu – các thao tác tốn nhiều thời gian do các bộ nhớ này có tốc độ chậm. Như vậy, có thể nói rằng, thời gian trung bình CPU truy nhập dữ liệu từ hệ thống nhớ tiệm cận thời gian truy nhập bộ nhớ cache. Cùng với việc có thể giúp cải thiện hiệu năng, cấu trúc phân cấp trong hệ thống nhớ có thể giúp giảm giá thành chế tạo hệ thống. Cơ sở chính là trong hệ thống nhớ phân cấp, các thành phần có tốc độ cao và đắt tiền được sử dụng với dung lượng rất nhỏ, còn các thành phần có tốc độ thấp và rẻ tiền được sử dụng với dung lượng lớn hơn. Nhờ vậy có thể giảm được giá thành chế tạo hệ thống nhớ mà vẫn đảm bảo được tốc độ cao cho cả hệ thống. Có thể nói rằng, nếu ta có hai hệ thống nhớ hoạt động với cùng tốc độ thì hệ thống nhớ phân cấp sẽ có giá thành thấp hơn. 3.3 BỘ NHỚ ROM VÀ RAM 3.3.1 Bộ nhớ ROM ROM (Read Only Memory) là bộ nhớ chỉ đọc, có nghĩa là thông tin lưu trữ trong ROM chỉ có thể đọc ra mà không được ghi vào. Trên thực tế, việc ghi thông tin vào ROM chỉ có thể được thực hiện bằng các thiết bị chuyên dùng hoặc phương pháp đặc biệt. Thông tin trong ROM thường được các nhà sản xuất ghi sẵn, gồm các thông tin về hệ thống như thông tin về cấu hình máy và hệ thống các mô đun phần mềm phục vụ việc vào ra cơ sở (BIOS - Basic Input Output System). ROM thuộc loại bộ nhớ bán dẫn và là bộ nhớ ổ định - thông tin trong ROM vẫn được duy trì kể cả khi không có nguồn điện nuôi. Hình 35 minh hoạ vi mạch nhớ ROM- BIOS được gắn trên bảng mạch chính. Hình 35 Vi mạch nhớ ROM-BIOS Quá trình phát triển ROM đã trải qua nhiều thế hệ. ROM các thế hệ đầu tiên hay còn gọi là ROM nguyên thuỷ (Ordinary ROM) sử dụng tia cực tím để ghi thông tin. Trong thế hệ tiếp theo - ROM có thể lập trình được (PROM - Programmable ROM), thông tin có thể được ghi vào PROM nhờ một thiết bị đặc biệt gọi là bộ lập trình PROM. Tiến thêm một bước, với ROM có thể lập trình và xoá được (EPROM - Erasable programmable read-only memory), thông tin trong EPROM có thể xoá được sử dụng tia cực tím có cường độ cao. Kế tiếp EPROM, EEPROM (Electrically Erasable PROM) là loại ROM tiến tiến nhất hiện nay. EEPROM có thể xoá được bằng điện và có thể ghi được thông tin sử dụng phần mềm chuyên 41
  45. Chương 3- Hệ thống nhớ dụng. Bộ nhớ Flash là một dạng bộ nhớ EEPROM được dùng phổ biến làm thiết bị lưu trữ trong các thiết bị cầm tay. Flash có tốc độ đọc ghi thông tin nhanh hơn EEPROM và thông tin được đọc ghi theo từng khối. 3.3.2 Bộ nhớ RAM Bộ nhớ RAM được chế tạo theo công nghệ bán dẫn và thuộc loại bộ nhớ không ổn định, tức là, thông tin trong RAM chỉ tồn tại khi có nguồn điện nuôi và mất khi không còn nguồn điện nuôi. RAM là bộ nhớ cho phép truy cập ngẫu nhiên – các ô nhớ của RAM có thể được truy cập một cách ngẫu nhiên không theo trật tự nào và tốc truy cập các ô nhớ là tương đương nhau. RAM thường có dung lượng lớn hơn nhiều so với ROM và thường được sử dụng để lưu trữ các thông tin của hệ thống và của người dùng. Có hai loại RAM cơ bản: RAM tĩnh (Static RAM hay SRAM) và RAM động (Dynamic RAM hay DRAM). Mỗi bit RAM tĩnh cấu tạo dựa trên một mạch lật (flip flop) – còn gọi là mạch trigơ lưỡng ổn (bistable latching circuit). Thông tin trong SRAM luôn ổn định và không phải “làm tươi” định kỳ. Tốc độ truy nhập SRAM cũng nhanh hơn nhiều so với DRAM. Ngược lại, mỗi bit DRAM cấu tạo dựa trên một tụ điện. Do bản chất của tụ điện luôn có khuynh hướng tự phóng điện tích, thông tin trong bit DRAM sẽ dần bị mất. Vì vậy, DRAM cần được làm tươi (refresh) định kỳ để bảo toàn thông tin. DRAM thường có tốc độ truy cập thấp hơn so với SRAM, nhưng bù lại, DRAM có cấu trúc gọn nhẹ nên có thể tăng mật độ cấy linh kiện dẫn đến giá thành một đơn vị nhớ DRAM thấp hơn SRAM. 3.3.2.1 Bộ nhớ SRAM C C B B E E Một mạch lật (flip-flop) Một ô nhớ SRAM loại 6T đơn giản Hình 36 Cấu tạo một mạch lật trong bộ nhớ SRAM Hình 36 minh hoạ cấu tạo một mạch lật đơn giản gồm 2 transitor và một mạch lật phức tạp hơn với 6 transitor (6T) – hình thành một bit nhớ của SRAM. Thông thường, mỗi bit nhớ của SRAM được cấu tạo từ một mạch lật 6T, 8T hoặc 10T. SRAM có tốc độ truy cập cao là do các bit SRAM có cấu trúc đối xứng và thông tin trong bit SRAM ổn định nên không cần quá trình làm tươi. Tuy nhiên, do mỗi bit SRAM cần nhiều transitor và có cấu trúc khá phức tạp nên mật độ cấy linh kiện thường thấp và giá thành SRAM khá cao. 3.3.2.2 Bộ nhớ DRAM 42
  46. Chương 3- Hệ thống nhớ Khác với SRAM, các bit DRAM được hình thành dựa trên tụ điện. Hình 37 minh hoạ một bit DRAM và mạch nhớ DRAM tổ chức thành ma trận nhớ gồm các hàng và cột. Mỗi bit DRAM có cấu tạo khá đơn giản, gồm 1 tụ điện và 1 transitor cấp nguồn. Mức điện tích trong tụ điện được sử dụng để biểu diễn các giá trị 0 và 1, chẳng hạn mức đầy điện tích ứng với mức 1, không tích điện ứng với mức 0. Transistor Capacitor Một bit DRAM Hình 37 Một bit DRAM và mạch nhớ DRAM Do bản chất tụ thường tự phóng điện nên điện tích trong tụ có xu hướng giảm dần dẫn đến thông tin trong tụ cũng bị mất theo. Để tránh bị mất thông tin, điện tích trong tụ cần được nạp lại thường xuyên – quá trình này được gọi là quá trình làm tươi các bit DRAM. DRAM thường có tốc độ truy cập chậm hơn so với SRAM là do: (1) có trễ khi nạp điện vào tụ, (2) cần quá trình làm tươi cho tụ và (3) các mạch DRAM thường dùng kỹ thuật dồn kênh (địa chỉ cột/hàng) để tiết kiệm đường địa chỉ. Tuy nhiên, do mỗi bit DRAM có cấu trúc đơn giản, sử dụng ít transitor nên mật độ cấy linh kiện thường cao và giá thành rẻ hơn nhiều so với SRAM. Trong các loại DRAM, SDRAM (Synchronous DRAM) được sử dụng phổ biến nhất. SDRAM là DRAM hoạt động đồng bộ với nhịp đồng hồ của bus. SDRAM được chia thành 2 loại theo khả năng truyền dữ liệu: (1) SRD SDRAM (Single Data Rate SDRAM) – SDRAM có tỷ suất dữ liệu đơn, chấp nhận một thao tác đọc/ghi và chuyển 1 từ dữ liệu trong 1 chu kỳ đồng hồ với các tần số làm việc 100MHz và 133MHz và (2) DDR SDRAM (Double Data Rate SDRAM) - SDRAM có tỷ suất dữ liệu kép, chấp nhận hai thao tác đọc/ghi và chuyển 2 từ dữ liệu trong 1 chu kỳ đồng hồ. DDR SDRAM có 3 loại cho đến hiện nay: . DDR1 SDRAM: tần số làm việc 266, 333, 400 MHz: có khả năng chuyển 2 từ dữ liệu trong 1 chu kỳ đồng hồ; . DDR2 SDRAM: tần số làm việc 400, 533, 800 MHz: có khả năng chuyển 4 từ dữ liệu trong 1 chu kỳ đồng hồ; 43
  47. Chương 3- Hệ thống nhớ . DDR3 SDRAM: tần số làm việc 800, 1066, 1333, 1600 MHz: có khả năng chuyển 8 từ dữ liệu trong 1 chu kỳ đồng hồ. 3.4 BỘ NHỚ CACHE 3.4.1 Cache là gì? Cache hay còn gọi là bộ nhớ đệm, bộ nhớ khay là một thành phần của cấu trúc phân cấp của hệ thống bộ nhớ như trình bày trong mục 3.2. Cache đóng vai trong trung gian, trung chuyển dữ liệu từ bộ nhớ chính về CPU và ngược lại. Hình 38 minh hoạ vị trí của bộ nhớ cache trong hệ thống nhớ. Với các hệ thống CPU cũ sử dụng công nghệ tích hợp thấp, bộ nhớ cache thường nằm ngoài CPU; với các CPU mới sử dụng công nghệ tích hợp cao, bộ nhớ cache thường được tích hợp vào trong CPU nhằm nâng cao tốc độ và băng thông trao đổi dữ liệu giữa CPU và cache. CPU Cache Main memory Hình 38 Vị trí của bộ nhớ cache trong hệ thống nhớ Dung lượng của bộ nhớ cache thường nhỏ so với dung lượng của bộ nhớ chính và bộ nhớ ngoài. Với các hệ thống máy tính cũ, dung lượng cache là khoảng 16KB, 32KB, 64KB, 128KB, 256KB, 512KB; với các hệ thống máy tính gần đây, dung lượng cache lớn hơn, khoảng 1MB, 2MB, 3MB, 4MB, 6MB, 8MB và 16MB. Cache có tốc độ truy cập nhanh hơn nhiều so với bộ nhớ chính, đặc biệt với cache được tích hợp vào CPU. Tuy nhiên, giá thành bộ nhớ cache (tính theo bit) thường đắt hơn nhiều so với bộ nhớ chính. Với các hệ thống CPU mới, cache thường được chia thành hai hay nhiều mức (levels): mức 1 có dung lượng khoảng 16-32KB có tốc độ truy cập rất cao và mức 2 có dung lượng khoảng 1-16MB có tốc độ truy cập thấp hơn. 3.4.2 Vai trò và nguyên lý hoạt động 3.4.2.1 Vai trò của cache Bộ nhớ cache là một thành phần của hệ thống nhớ phân cấp, nên vai trò của cache tương tự như vai trò của cấu trúc phân cấp hệ thống nhớ: tăng hiệu năng hệ thống vào giảm giá thành sản xuất. Sở dĩ cache có thể giúp tăng hiệu năng hệ thống là nhờ cache có khả năng dung hoà được CPU có tốc độ cao và bộ nhớ chính có tốc độ thấp làm cho thời gian trung bình CPU truy nhập dữ liệu từ bộ nhớ chính tiệm cận thời gian truy nhập cache. Ngoài ra, do cache là một loại bộ nhớ “thông minh” có khả năng đoán và chuẩn bị trước các dữ liệu cần thiết cho CPU xử lý nên xác xuất CPU phải trực tiếp truy nhập dữ liệu từ bộ nhớ chính là khá thấp và điều này cũng giúp làm giảm thời gian trung bình CPU truy nhập dữ liệu từ bộ nhớ chính. Tuy cache có giá thành trên một đơn vị nhớ cao hơn bộ nhớ chính, nhưng do tổng dung lượng cache thường khá nhỏ nên cache không làm tăng giá thành hệ thống nhớ quá mức. Nhờ vậy, cache hoàn toàn phù hợp với cấu trúc phân cấp và có thể giúp làm giảm giá thành sản xuất trong tương quan với tốc độ của cả hệ thống nhớ. Có thể kết luận rằng, nếu hai hệ thống nhớ có cùng giá thành, hệ thống nhớ có cache có tốc độ truy cập nhanh hơn; và nếu hai hệ thống nhớ có cùng tốc độ, hệ thống nhớ có cache sẽ có giá thành rẻ hơn. 44
  48. Chương 3- Hệ thống nhớ 3.4.2.2 Nguyên lý hoạt động của cache Cache sở dĩ được coi là bộ nhớ “thông minh” là do nó có khả năng đoán trước yêu cầu về dữ liệu và lệnh của CPU. Dữ liệu và lệnh cần thiết được chuyển trước từ bộ nhớ chính về cache và CPU chỉ cần truy nhập cache, giúp giảm thời gian truy nhập hệ thống nhớ. Để có được sự thông minh, cache hoạt động dựa trên hai nguyên lý cơ bản: nguyên lý lân cận về không gian (Spatial locality) và nguyên lý lân cận về thời gian (Temporal locality). Neighbour cell Current cell Neighbour cell Hình 39 Lân cận về không gian trong không gian chương trình Nguyên lý lân cận về không gian có thể phát biểu như sau: “Nếu một ô nhớ đang được truy nhập thì xác xuất các ô nhớ liền kề với nó được truy nhập trong tương lai gần là rất cao”. Lân cận về không gian thường được áp dụng cho nhóm lệnh hoặc dữ liệu có tính tuần tự cao trong không gian chương trình, như minh hoạ trên Hình 39. Do các lệnh trong một chương trình thường tuần tự, đặc biệt tính tuần tự thường rất cao trong từng khối lệnh, cache có thể đọc cả khối lệnh từ bộ nhớ chính và khối lệnh đọc được bao phủ cả các ô nhớ lân cận (neighbour cell) của ô nhớ đang được truy nhập (current cell). Khác với nguyên lý lân cận về không gian, nguyên lý lân cận về thời gian chú trọng hơn đến tính lặp lại của việc truy nhập các mẩu thông tin trong một khoảng thời gian tương đối ngắn. Có thể phát biểu nguyên lý này như sau: “Nếu một ô nhớ đang được truy nhập thì xác xuất nó được truy nhập lại trong tương lai gần là rất cao”. Lân cận về thời gian được áp dụng cho dữ liệu và nhóm các lệnh trong vòng lặp như minh hoạ trên Hình 40. Với các phần tử dữ liệu, chúng được CPU cập nhập thường xuyên trong quá trình thực hiện chương trình nên có tính lân cận cao về thời gian. Với các lệnh trong vòng lặp, chúng thường được CPU thực hiện lặp đi lặp lại nhiều lần nên cũng có tính lân cận cao về thời gian; nếu cache nạp sẵn khối lệnh chứa cả vòng lặp sẽ phủ được tính lân cận về thời gian. 45
  49. Chương 3- Hệ thống nhớ Start of loop Instruction 1 Instruction 2 Instruction 3 Instruction 4 End of loop Instruction 5 Hình 40 Lân cận về thời gian với việc thực hiện vòng lặp 3.4.2.3 Trao đổi dữ liệu giữa CPU – cache – bộ nhớ chính CPU Cache Memory Individual Block of data items: data: 16, 32, byte, word 64 bytes Hình 41 Trao đổi dữ liệu giữa CPU với cache và bộ nhớ chính Hình 41 minh hoạ việc trao đổi dữ liệu giữa CPU với cache và bộ nhớ chính: CPU trao đổi dữ liệu với cache theo các đơn vị cơ sở như byte, từ và từ kép. Còn cache trao đổi dữ liệu với bộ nhớ chính theo các khối, với kích thước 16, 32 hoặc 64 bytes. Sở dĩ CPU trao đổi dữ liệu với cache theo các đơn vị cơ sở mà không theo khối do dữ liệu được lưu trong các thanh ghi của CPU – vốn có dung lượng rất hạn chế. Vì vậy, CPU chỉ trao đổi các phần tử dữ liệu cần thiết theo yêu cầu của các lệnh. Ngược lại, cache trao đổi dữ liệu với bộ nhớ chính theo các khối, mỗi khối gồm nhiều byte kề nhau với mục đích bao phủ các mẩu dữ liệu lân cận theo không gian và thời gian. Ngoài ra, trao đổi dữ liệu theo khối (hay mẻ) với bộ nhớ chính giúp cache tận dụng tốt hơn băng thông đường truyền và nhờ vậy có thể tăng tốc độ truyền dữ liệu. 3.4.2.4 Các hệ số Hit và Miss Hit (đoán trúng) là một sự kiện mà CPU truy nhập một mục tin và mục tin ấy có ở trong cache. Xác suất để có một hit gọi là hệ số hit, hoặc H. Dễ thấy hệ số hit H thuộc khoảng (0, 1). Hệ số hit càng cao thì hiệu quả của cache càng cao. Ngược lại, Miss (đoán trượt) là một sự kiện mà CPU truy nhập một mục tin và mục tin ấy không có ở trong cache. Xác suất của một miss gọi là hệ số miss, hoặc 1-H. Cũng có thể thấy hệ số miss 1-H thuộc khoảng (0, 1). Hệ số miss càng thấp thì hiệu quả của cache càng cao. 3.4.3 Các dạng kiến trúc cache Kiến trúc cache đề cập đến việc cache được bố trí vào vị trí nào trong quan hệ với CPU và bộ nhớ chính. Có hai loại kiến trúc cache chính: kiến trúc Look Aside (cache được đặt ngang hàng với bộ nhớ chính) và kiến trúc Look Through (cache được đặt giữa CPU và bộ nhớ chính). Mỗi kiến trúc cache kể trên có ưu điểm và nhược điểm riêng. 46
  50. Chương 3- Hệ thống nhớ 3.4.3.1 Kiến trúc Look Aside Trong kiến trúc Look Aside, cache và bộ nhớ chính cùng được kết nối vào bus hệ thống. Như vậy, cả cache và bộ nhớ chính đều “thấy” chu kỳ bus của CPU tại cùng một thời điểm. Hình 42 minh hoạ kiến trúc cache kiểu Look Aside. Kiến trúc Look Aside có thiết kế đơn giản, dễ thực hiện. Tuy nhiên, các sự kiện hit của kiến trúc này thường chậm do cache kết nối với CPU sử dụng bus hệ thống dùng chung – thường có tần số làm việc không cao và băng thông hẹp. Bù lại, các sự kiện miss của kiến trúc Look Aside thường nhanh hơn do khi CPU không tìm thấy mục tin trong cache, nó đồng thời tìm mục tin trong bộ nhớ chính tại cùng một chu kỳ xung nhịp. CPU SRAM SRAM: RAM lưu dữ liệu cache Cache Tag RAM: RAM lưu địa chỉ dòng nhớ trong controller bộ nhớ bus System Cache controller: bộ điều khiển cache Tag RAM Main memory: bộ nhớ chính System bus: bus hệ thống Main Memory Hình 42 Kiến trúc cache kiểu Look Aside 3.4.3.2 Kiến trúc Look Through Trong kiến trúc kiểu Look Through, cache được đặt nằm giữa CPU và bộ nhớ chính như minh hoạ trên Hình 43. Như vậy cache có thể “thấy” chu kỳ bus của CPU trước, rồi nó mới “truyền” lại cho bộ nhớ chính. Cache kết nối với CPU bằng hệ thống bus riêng tốc độ cao và băng thông lớn, thường là bus mặt sau (BSB – Back Side Bus). Cache kết nối với bộ nhớ chính thông qua bus hệ thống hay bus mặt trước (FSB – Front Side Bus). FSB thường có tần số làm việc và băng thông thấp hơn nhiều so với BSB. Kiến trúc Look Through phức tạp hơn kiến trúc Look Aside. Ưu điểm chính của kiến trúc này là các sự kiện hit của kiến trúc này thường rất nhanh do CPU kết nối với cache bằng kênh riêng có tốc độ cao. Tuy nhiên, các sự kiện miss của kiến trúc Look Through thường chậm hơn do khi CPU không tìm thấy mục tin trong cache, nó cần tìm mục tin đó trong bộ nhớ chính tại một chu kỳ xung nhịp tiếp theo. 47
  51. Chương 3- Hệ thống nhớ CPU Cache Tag SRAM controller RAM Main Memory Hình 43 Kiến trúc cache kiểu Look Through 3.4.4 Các dạng tổ chức/ánh xạ cache 3.4.4.1 Giới thiệu tổ chức/ánh xạ cache Hình 44 Quan hệ giữa các khối của bộ nhớ chính và dòng của cache Kích thước của cache thường rất nhỏ so với kích thước bộ nhớ chính. Do vậy, tại mỗi thời điểm, chỉ có một phần nhỏ thông tin của bộ nhớ chính được chuyển vào cache. Câu hỏi đặt ra là, phải xây dựng mô hình tổ chức / ánh xạ trao đổi dữ liệu giữa các phần tử nhớ bộ nhớ chính và các phần tử nhớ của cache như thế nào để hệ thống nhớ đạt được tốc độ truy cập tối ưu. Cho đến hiện nay, có ba phương pháp tổ chức / ánh xạ cache đã được sử dụng, bao gồm: Ánh xạ trực tiếp (Direct mapping), Ánh xạ kết hợp đầy đủ (Fully associative mapping) và Ánh xạ tập kết hợp (Set associative mapping). Phương pháp ánh xạ trực tiếp có ưu điểm là thiết kế đơn giản và nhanh. Tuy nhiên, đây là dạng ánh xạ cố định dễ gây xung đột dẫn đến hiệu quả cache không cao. Phương pháp ánh xạ kết hợp đầy đủ sử dụng ánh xạ mềm, ít gây xung đột và có thể đạt hệ số hit rất cao. Tuy nhiên, phương pháp này có thiết kế phức tạp và có tốc độ chậm. Phương pháp ánh xạ tập kết hợp là sự kết hợp của hai phương pháp ánh xạ trực tiếp và 48
  52. Chương 3- Hệ thống nhớ ánh xạ kết hợp đầy đủ, tận dụng được ưu điểm của cả hai phương pháp: nhanh, ít xung đột và không quá phức tạp, cho hiệu quả cao. 3.4.4.2 Ánh xạ trực tiếp Hình 45 minh hoạ phương pháp ánh xạ trực tiếp bộ nhớ - cache. Cache được chia thành n dòng (line) đánh số từ 0 đến n-1. Bộ nhớ chính được chia thành m trang (page), đánh số từ 0 đến m- 1. Mỗi trang nhớ lại được chia thành n dòng (line) đánh số từ 0 đến n-1. Kích thước mỗi trang của bộ nhớ chính bằng kích thước cache và kích thước một dòng trong trang bộ nhớ cũng bằng kích thước một dòng cache. Ánh xạ từ bộ nhớ chính vào cache được thực hiện theo quy tắc sau: . Line0 của các trang (page0 đến pagem-1) ánh xạ đến Line0 của cache; . Line1 của các trang (page0 đến pagem-1) ánh xạ đến Line1 của cache; . . Linen-1 của các trang (page0 đến pagem-1) ánh xạ đến Linen-1 của cache. Page m-1 Page 1 Page 0 Line n-1 Line n-1 Line 1 Line 1 Line 0 Line 0 Memory Cache Hình 45 Phương pháp ánh xạ trực tiếp bộ nhớ - cache Có thể thấy với phương pháp ánh xạ trực tiếp, tại mọi thời điểm luôn có cố định m dòng bộ nhớ cùng cạnh tranh một dòng cache. Khi biết được địa chỉ của dòng trong bộ nhớ, ta biết vị trí của nó trong cache – vì thế phương pháp ánh xạ trực tiếp còn gọi là ánh xạ cứng hay ánh xạ cố định. Để có thể quản lý được các ô nhớ được nạp, cache sử dụng địa chỉ ánh xạ trực tiếp gồm 3 thành phần: Tag, Line và Word như minh hoạ trên Hình 46. Tag (bit) là địa chỉ trang trong bộ nhớ chứa dòng được nạp vào cache, Line (bit) là địa chỉ dòng trong cache và Word (bit) là địa chỉ của từ trong dòng. 49
  53. Chương 3- Hệ thống nhớ Tag Line Word Hình 46 Địa chỉ ô nhớ trong ánh xạ trực tiếp Ví dụ tính các thành phần địa chỉ ô nhớ trong ánh xạ trực tiếp: . Vào: - Dung lượng bộ nhớ = 4GB - Dung lượng cache = 1MB - Kích thước dòng = 32 byte . Ra: - Kích thước dòng Line = 32 byte = 25 , vậy Word = 5 bit - Dung lượng Cache = 1MB = 220 có 220 / 25 = 215 dòng, vậy Line = 15 bit - Địa trang Tag: 4GB = 232, cần 32 bít địa chỉ tổng cộng để địa chỉ hoá các ô nhớ: Tag = 32 bit địa chỉ – Line – Word = 32 – 15 – 5 = 12 bit. Phương pháp ánh xạ trực tiếp có thiết kế đơn giản và rất nhanh do không tốn nhiều thời gian truy tìm địa chỉ ô nhớ trong cache. Do các ánh xạ là cố định, nên khi biết địa chỉ ô nhớ có thể tìm được vị trí của nó trong cache rất nhanh chóng. Tuy nhiên, cũng do ánh xạ cố định nên phương pháp này dễ gây xung đột vì có thể tạo ra nhiều dòng cache bị nút cổ chai trong quá trình hoạt động của cache. Có thể có nhiều dòng cache rảnh rỗi hay ít được sử dụng, nhưng cũng có nhiều dòng cache quá tải do bị nhiều dòng bộ nhớ cùng cạnh tranh. Cũng vì lý do dễ gây xung đột nên hiệu quả tận dụng không gian cache của phương pháp ánh xạ trực tiếp không cao và hệ số hit thấp. 3.4.4.3 Ánh xạ kết hợp đầy đủ Phương pháp ánh xạ kết hợp đầy đủ hay còn gọi là ánh xạ liên kết đầy đủ được minh hoạ trên Hình 47. Cache được chia thành n dòng (line) đánh số từ 0 đến n-1. Bộ nhớ chính được chia thành m dòng (line), đánh số từ 0 đến m-1. Kích thước một dòng bộ nhớ bằng kích thước một dòng cache. Do bộ nhớ chính có kích thước lớn hơn nhiều kích thước cache, nên m >> n. Ánh xạ từ bộ nhớ chính vào cache được thực hiện theo quy tắc sau: . Một dòng trong bộ nhớ chính có thể ánh xạ đến một dòng bất kỳ trong cache, hay . Linei (i = 0 ÷ m-1) của bộ nhớ chính ánh xạ đến Linej (j = 0 ÷ n-1) của cache; Có thể thấy với phương pháp ánh xạ kết hợp đầy đủ, có n dòng cache để lựa chọn ánh xạ – vì thế phương pháp ánh xạ kết hợp đầy đủ còn gọi là ánh xạ mềm hay ánh xạ không cố định. Ngược lại với phương pháp ánh xạ trực tiếp, khi biết được địa chỉ của dòng trong bộ nhớ, ta chưa biết vị trí của nó trong cache. Để có thể quản lý được các ô nhớ được nạp, cache sử dụng địa chỉ ánh xạ kết hợp đầy đủ chỉ gồm 2 thành phần: Tag và Word như minh hoạ trên Hình 46. Tag (bit) là địa chỉ dòng trong bộ nhớ được nạp vào cache và Word (bit) là địa chỉ của từ trong dòng. Phần địa chỉ Line như trong địa chỉ ánh xạ trực tiếp bị bỏ do bộ nhớ chính chỉ còn là một trang duy nhất với m dòng. 50
  54. Chương 3- Hệ thống nhớ Line m-1 Line n-1 Line 1 Line 0 Cache Line 1 Line 0 Memory Hình 47 Phương pháp ánh xạ kết hợp đầy đủ bộ nhớ - cache Tag Word Hình 48 Địa chỉ ô nhớ trong ánh xạ kết hợp đầy đủ Ví dụ tính các thành phần địa chỉ ô nhớ trong ánh xạ kết hợp đầy đủ: . Vào: - Dung lượng bộ nhớ = 4GB - Dung lượng cache = 1MB - Kích thước dòng = 32 byte . Ra: - Kích thước dòng Line = 32 byte = 25 , vậy Word = 5 bit - Địa trang Tag: 4GB = 232, cần 32 bít địa chỉ tổng cộng để địa chỉ hoá các ô nhớ: Tag = 32 bit địa chỉ – Word = 32 – 5 = 27 bit. Phương pháp ánh xạ kết hợp đầy đủ sử dụng ánh xạ không cố định nên có ưu điểm là mềm dẻo, giảm được xung đột sử dụng dòng cache. Việc sử dụng các dòng cache có thể được điều phối hướng đến phân bố hợp lý hơn, giảm hiện tượng tạo các dòng bị nút cổ chai với mức độ cạnh tranh lớn. Nhờ vậy, phương pháp này có hiệu suất sử dụng không gian cache cao hơn và có khả năng cho hệ số hit cao. Tuy nhiên, cũng do việc sử dụng ánh xạ không cố định, nên việc truy tìm địa dòng nhớ trong cache tốn nhiều thời gian, gây chậm trễ, đặc biệt với các cache có kích thước lớn. Ngoài ra, phương pháp này cũng có thiết kế phức tạp hơn so với phương pháp ánh xạ trực tiếp do cần bổ sung thêm các bộ so sánh địa chỉ dòng cache nhằm tăng tốc cho quá trình truy tìm địa dòng nhớ trong cache. Do vậy, phương pháp ánh xạ kết hợp đầy đủ thường chỉ thích hợp với các cache có dung lượng nhỏ. 51
  55. Chương 3- Hệ thống nhớ 3.4.4.4 Ánh xạ tập kết hợp Phương pháp ánh xạ tập kết hợp hay còn gọi là ánh xạ liên kết nhóm được minh hoạ trên Hình 49. Cache được chia thành k đường (way) đánh số từ 0 đến k-1. Mỗi đường cache lại được chia thành n dòng (line) đánh số từ 0 đến n-1. Bộ nhớ chính được chia thành m trang (page), đánh số từ 0 đến m-1. Mỗi trang lại được chia thành n dòng (line) đánh số từ 0 đến n- 1. Kích thước mỗi trang của bộ nhớ chính bằng kích thước một đường của cache và kích thước một dòng trong trang bộ nhớ cũng bằng kích thước một dòng của đường cache. Ánh xạ từ bộ nhớ chính vào cache được thực hiện theo quy tắc sau: . Ánh xạ trang bộ nhớ đến đường cache (ánh xạ không cố định): - Một trang của bộ nhớ có thể ánh xạ đến một đường bất kỳ của cache. . Ánh xạ dòng của trang đến dòng của đường (ánh xạ cố định): - Line0 của pagei của bộ nhớ ánh xạ đến Line0 của wayj của cache; - Line1 của pagei của bộ nhớ ánh xạ đến Line1 của wayj của cache; - - Linen-1 của pagei của bộ nhớ ánh xạ đến Linen-1 của wayj của cache. Page m-1 Page 1 Way 0 Way 1 Page 0 Line n-1 Line n-1 Line n-1 Line 1 Line 1 Line 1 Line 0 Line 0 Line 0 Cache Bộ nhớ Hình 49 Phương pháp ánh xạ tập kết hợp bộ nhớ - cache Có thể thấy phương pháp ánh xạ tập kết hợp đảm bảo được sự kết hợp hài hoà giữa ánh xạ mềm từ trang nhớ đến đường cache và ánh xạ cố định từ dòng của trang nhớ đến dòng của đường cache. Do số đường cache không lớn (thường chỉ khoảng 4, 8, 16, 32 hoặc 64 đường) nên việc tìm kiếm địa chỉ trang nhớ trong các đường cache không ảnh hưởng nhiều đến tốc độ 52
  56. Chương 3- Hệ thống nhớ truy cập cache. Hơn nữa, do ánh xạ từ dòng của trang nhớ đến dòng của đường cache là cố định, có thể nhanh chóng xác định được vị trí của dòng nhớ trong đường cache khi biết địa chỉ của nó. Để có thể quản lý được các ô nhớ được nạp, cache sử dụng địa chỉ ánh xạ trực tiếp gồm 3 thành phần: Tag, Set và Word như minh hoạ trên Hình 50. Tag (bit) là địa chỉ trang trong bộ nhớ chứa dòng được nạp vào cache, Set (bit) là địa chỉ dòng trong đường cache và Word (bit) là địa chỉ của từ trong dòng. Tag Set Word Hình 50 Địa chỉ ô nhớ trong ánh xạ tập kết hợp kết hợp Ví dụ tính các thành phần địa chỉ ô nhớ trong ánh xạ tập kết hợp: . Vào: - Dung lượng bộ nhớ = 4GB - Dung lượng cache = 1MB, 2 đường - Kích thước dòng = 32 byte . Ra: - Kích thước dòng Line = 32 byte = 25 , vậy Word = 5 bit - Dung lượng Cache = 1MB = 220 có 220 / 2 đường / 25 = 214 dòng / đường, vậy Set = 14 bit - Địa trang Tag: 4GB = 232, cần 32 bít địa chỉ tổng cộng để địa chỉ hoá các ô nhớ: Tag = 32 bit địa chỉ – Set – Word = 32 – 14 – 5 = 13 bit. Phương pháp ánh xạ tập kết hợp tận dụng được ưu điểm của cả hai phương pháp ánh xạ trực tiếp và ánh xạ kết hợp đầy đủ: nhanh do ánh xạ trực tiếp được sử dụng cho ánh xạ dòng - chiếm số lớn ánh xạ và mềm dẻo, ít xung đột do ánh xạ từ các trang bộ nhớ đến các đường cache là không cố định. Nhờ vậy, phân bố sử dụng không gian cache đồng đều hơn và đạt hệ số hit cao hơn. Nhược điểm lớn nhất của phương pháp này là có độ phức tạp thiết kế và điều khiển cao do cache được chia thành một số đường, thay vì chỉ một đường duy nhất. 3.4.5 Các phương pháp đọc ghi và các chính sách thay thế 3.4.5.1 Các phương pháp đọc ghi cache Việc trao đổi thông tin giữa CPU – cache và giữa cache – bộ nhớ chính là một trong các vấn đề có ảnh hưởng lớn đến hiệu năng cache. Câu hỏi đặt ra là cần có chính sách trao đổi hay đọc ghi thông tin giữa các thành phần này như thế nào để đạt được hệ số hit cao nhất và giảm thiểu miss. Xét trường hợp đọc thông tin và nếu đó là trường hợp hit (mẩu tin cần đọc có trong cache): mẩu tin được đọc từ cache vào CPU và bộ nhớ chính không tham gia. Như vậy thời gian CPU truy nhập mẩu tin bằng thời gian CPU truy nhập cache. Ngược lại, nếu đọc thông tin và đó là trường hợp miss (mẩu tin cần đọc không có trong cache): mẩu tin trước hết được chuyển từ bộ 53
  57. Chương 3- Hệ thống nhớ nhớ chính vào cache, sau đó nó được đọc từ cache vào CPU. Đây là trường hợp xấu nhất: thời gian CPU truy nhập mẩu tin bằng thời gian truy nhập cache cộng với thời gian cache truy nhập bộ nhớ chính – còn gọi là miss penalty (gấp đôi thời gian truy cập khi đoán trượt). Với trường hợp ghi thông tin và nếu đó là trường hợp hit, có thể áp dụng một trong 2 chính sách ghi: ghi thẳng (write through) và ghi trễ (write back). Với phương pháp ghi thẳng, mẩu tin cần ghi được lưu đồng thời ra cache và bộ nhớ chính. Phương pháp ghi này luôn đảm bảo tính nhất quá dữ liệu giữa cache và bộ nhớ chính, nhưng có thể gây chậm trễ và tốn nhiều băng thông khi tần suất ghi lớn với nhiều mẩu tin có kích thước nhỏ. Ngược lại, với phương pháp ghi trễ, mẩu tin trước hết được ghi ra cache và dòng cache chứa mẩu tin sẽ được ghi ra bộ nhớ chính khi nó bị thay thế. Như vậy, mẩu tin có thể được ghi ra cache nhiều lần, nhưng chỉ được ghi ra bộ nhớ chính một lần duy nhất, giúp tăng tốc độ và giảm băng thông sử dụng. Phương pháp ghi trễ đang được ứng rộng rãi trong các hệ thống cache hiện nay. Với trường hợp ghi thông tin và nếu đó là trường hợp miss, cũng có thể áp dụng một trong hai chính sách ghi: ghi có đọc lại (write allocate / fetch on write) và ghi không đọc lại (write non- allocate). Với phương pháp ghi có đọc lại, mẩu tin trước hết được ghi ra bộ nhớ chính, và sau đó dòng nhớ chứa mẩu tin vừa ghi được đọc vào cache. Việc đọc lại mẩu tin vừa ghi từ bộ nhớ chính vào cache có thể giúp giảm miss đọc kế tiếp áp dụng nguyên lý lân cận theo thời gian: mẩu tin vừa được truy nhập có thể được truy nhập lại trong tương lai gần. Với phương pháp ghi không đọc lại, mẩu tin chỉ được ghi ra bộ nhớ chính. Không có thao tác đọc dòng nhớ chứa mẩu tin vừa ghi vào cache. 3.4.5.2 Các chính sách thay thế dòng cache Như đã đề cập, với cả ba phương pháp ánh xạ bộ nhớ chính – cache, luôn có nhiều dòng nhớ cùng ánh xạ đến một dòng cache. Do có nhiều dòng bộ nhớ chia sẻ một dòng cache, các dòng bộ nhớ được nạp vào cache sử dụng một thời gian và được thay thế bởi dòng nhớ khác theo yêu cầu thông tin phục vụ CPU. Các chính sách thay thế (replacement policies) xác định các dòng cache nào được chọn để thay thế bởi các dòng khác từ bộ nhớ nhằm đạt hệ số hit cao nhất. Có ba chính sách thay thế được sử dụng hiện nay: thay thế ngẫu nhiên (Random Replacement), thay thế kiểu vào trước ra trước (FIFO – First In First Out) và thay thế các dòng ít được sử dụng gần đây nhất (LRU – Least Recently Used). Thay thế ngẫu nhiên là phương pháp đầu tiên được sử dụng do có thiết kế đơn giản và dễ cài đặt. Các dòng cache được lựa chọn để thay thế một cách ngẫu nhiên, không theo một quy luật nào. Do vậy, phương pháp thay thế ngẫu nhiên thường có hệ số miss cao do phương pháp này không xem xét đến các dòng cache đang thực sự được sử dụng. Nếu một dòng cache đang được sử dụng và bị thay thế sẽ xảy ra miss và nó lại cần được đọc từ bộ nhớ chính vào cache. Trong phương pháp thay thế kiểu vào trước ra trước, các dòng nhớ được nạp vào cache trước sẽ được chọn để thay thế trước. Phương pháp này luôn có khuynh hướng loại bỏ các dòng cache có thời gian sử dụng lâu nhất, hay “già nhất”. Nó có khả năng cho hệ số miss thấp hơn so với thay thế ngẫu nhiên do phương pháp này có xem xét đến yếu tố lân cận theo thời gian – các dòng nhớ có thời gian tồn tại trong cache lâu nhất có thể có xác suất được sử dụng thấp hơn. Tuy nhiên, phương pháp này vẫn chưa thực sự xem xét đến các dòng cache đang thực sự được sử dụng - một dòng cache “già” vẫn có thể đang được sử dụng. Một nhược điểm khác 54
  58. Chương 3- Hệ thống nhớ của thay thế kiểu vào trước ra trước là thiết kế và cài đặt phức tạp hơn, do cần phải có mạch mạch điện tử chuyên dụng để theo dõi trật tự nạp các dòng bộ nhớ vào cache. Phương pháp thay thế các dòng ít được sử dụng gần đây nhất hoạt động theo nguyên tắc: các dòng cache được lựa chọn để thay thế là các dòng ít được sử dụng gấn đây nhất. Phương pháp này cho hệ số miss thấp nhất so với thay thế ngẫu nhiên và thay thế FIFO, do thay thế LRU có xem xét đến các dòng đang thực sự được sử dụng – tuân theo yếu tố lân cận theo thời gian một cách chặt chẽ. Nhược điểm duy nhất của phương pháp này là thiết kế và cài đặt phức tạp hơn, do cần phải có mạch điện tử chuyên dụng để theo dõi tần suất sử dụng các dòng cache. 3.4.6 Hiệu năng cache và các yếu tố ảnh hưởng 3.4.6.1 Hiệu năng cache Hiệu năng của cache (Cache Performance) có thể được đánh giá tổng thể theo thời gian truy nhập trung bình của CPU đến hệ thống nhớ. Thời gian truy nhập trung bình của một hệ thống nhớ có cache được tính như sau: taccess = (Hit cost) + (miss rate) * (miss penalty) taccess = tcache + (1 - H) * (tmemory) trong đó, taccess là thời gian truy nhập trung bình hệ thống nhớ, tmemory là thời gian truy nhập bộ nhớ chính, tcache là thời gian ruy nhập cache và H là hệ số hit. Nếu tcache = 5ns, tmemory = 60ns và H=80%, ta có: taccess = 5 + (1 – 0.8) * (60) = 5+12 = 17ns Nếu tcache = 5ns, tmemory = 60ns và H=95%, ta có: taccess = 5 + (1 – 0.95) * (60) = 5+3 = 8ns Như vậy, thời gian truy nhập trung bình hệ thống nhớ tiệm cận thời gian truy nhập cache với trường hợp cache đạt hệ số hit cao. 3.4.6.2 Các yếu tố ảnh hưởng Có nhiều yếu tố ảnh hưởng đến hiệu năng cache, trong đó ba vấn đề (1) kích thước cache, (2) chia tách cache và (3) tạo cache nhiều mức có ảnh hưởng lớn nhất. Chúng ta lần lượt xem xét ảnh hưởng của từng yếu tố đến hiệu năng cache. Vấn đề kích thước cache Vấn đề kích thước cache liên quan đến việc trả lời câu hỏi: nên lựa chọn kích thước cache lớn hay nhỏ? Nhiều số liệu thống kê cho thấy, kích thước cache không ảnh hưởng nhiều đến hệ số miss và hệ số miss của cache lệnh thấp hơn nhiều so với cache dữ liệu: 8KB cache lệnh có hệ số miss nhỏ hơn 1% 256KB cache lệnh có hệ số miss nhỏ hơn 0.002% như vậy, tăng kích thước cache lệnh không giảm miss hiệu quả. 8KB cache dữ liệu có hệ số miss nhỏ hơn 4% 256KB cache dữ liệu có hệ số miss nhỏ hơn 3% 55
  59. Chương 3- Hệ thống nhớ như vậy, tăng kích thước cache dữ liệu lên 32 lần, hệ số miss giảm 25%. Trên thực tế, xu hướng chung mong muốn kích thước cache càng lớn trong giới hạn cho phép của giá thành. Với kích thước lớn, có thể tăng được số dòng bộ nhớ lưu trong cache và nhờ vậy giảm tần suất tráo đổi các dòng cache của các chương trình khác nhau với bộ nhớ chính. Đồng thời, cache lớn hỗ trợ đa nhiệm, xử lý song song và các hệ thống CPU nhiều nhân tốt hơn do không gian cache lớn có khả năng chứa đồng thời thông tin của nhiều chương trình. Nhược điểm của cache lớn là chậm, do có không gian tìm kiếm lớn hơn cache nhỏ. Vấn đề chia tách cache Cache có thể được tách thành cache lệnh (I-Cache) và cache dữ liệu (D-Cache) để cải thiện hiệu năng, do: . Dữ liệu và lệnh có tính lân cận khác nhau; . Dữ liệu thường có tính lân cận về thời gian cao hơn lân cận về không gian; lệnh có tính lân cận về không gian cao hơn lân cận về thời gian; . Cache lệnh chỉ cần hỗ trợ thao tác đọc; cache dữ liệu cần hỗ trợ cả 2 thao tác đọc và ghi và tách cache giúp tối ưu hoá dễ dàng hơn; . Tách cache hỗ trợ nhiều lệnh truy nhập đồng thời hệ thống nhớ, nhờ vậy giảm xung đột tài nguyên cho CPU pipeline. Vấn đề tạo cache nhiều mức Khi cache được chia thành nhiều mức với kích thước tăng dần và tốc độ truy nhập giảm dần sẽ giúp cải thiện được hiệu năng hệ thống do hệ thống cache nhiều mức có khả năng dung hoà tốt hơn tốc độ của CPU với tốc độ của bộ nhớ chính. Ví dụ: xem xét 2 hệ thống nhớ có số mức cache khác nhau: hệ thống 3 mức cache (L1, L2 và L3) và hệ thống 1 mức cache (L1). Giả thiết CPU có thời gian truy nhập là 1ns, các mức cache L1, L2, L3 có thời gian truy nhập lần lượt là 5ns, 15ns và 30ns. Bộ nhớ chính có thời gian truy nhập là 60ns. CPU L1 L2 L3 Bộ nhớ chính Cache 3 mức: 1ns 5ns 15ns 30ns 60ns Cache 1 mức: 1ns 5ns 60ns Có thể thấy hệ thống nhớ với nhiều mức cache có khả năng dung hoà tốc độ giữa các thành phần tốt hơn và có thời gian truy nhập trung bình hệ thống nhớ thấp hơn. Trên thực tế, đa số cache được tổ chức thành 2 mức: L1 và L2. Một số cache có 3 mức: L1, L2 và L3. Ngoài ra, nhiều mức cache có thể giúp giảm giá thành hệ thống nhớ. 3.5 BỘ NHỚ NGOÀI 3.5.1 Đĩa từ 3.5.1.1 Giới thiệu Đĩa từ (Magnetic Disks) là một trong các loại thiết bị lưu trữ được sử dụng rộng rãi nhất trong các thiết bị tính toán nói chung và các máy tính cá nhân nói riêng. Đĩa từ thuộc loại bộ nhớ ổn 56
  60. Chương 3- Hệ thống nhớ định – thông tin lưu trên đĩa từ luôn được duy trì, không phụ thuộc vào nguồn điện nuôi bên ngoài. Đĩa từ cũng là bộ nhớ kiểu khối có dung lượng lớn, đặc biệt là các đĩa cứng, dùng để lưu trữ thông tin lâu dài dưới dạng các tệp (files). Để lưu được thông tin, đĩa từ sử dụng các đĩa nhựa hoặc đĩa kim loại có phủ lớp bột từ trên bề mặt. Bột từ được sử dụng thường là oxit sắt hoặc các hợp kim của sắt. Có hai dạng đĩa từ chủ yếu là đĩa từ mềm (gọi tắt là đĩa mềm – Floppy Disks) và đĩa từ cứng (gọi tắt là đĩa cứng – Hard Disks). Đĩa mềm làm bằng plastic, có dung lượng nhỏ, tốc độ chậm và dễ bị hư hỏng. Người ta sử dụng ổ đĩa mềm (FDD – Floppy Disk Drive) để đọc ghi đĩa mềm. Hình 51 minh hoạ đĩa mềm và ổ đĩa mềm dung lượng 1,44MB với kích thước đĩa 3,5 inches. Ngày nay, do sự phát triển mạnh mẽ của các loại đĩa quang và đặc biệt là các thẻ nhớ flash kết nối qua cổng USB, đĩa mềm ngày càng ít được sử dụng. Nhiều hệ thống máy tính lắp mới không đi kèm ổ đĩa mềm. Hình 51 Đĩa mềm và ổ đĩa mềm kích thước 3,5 inches Khác với đĩa mềm, đĩa cứng thường được gắn cố định trong ổ đĩa và được bọc trong một hộp kim loại bảo vệ như minh hoạ trên hình Hình 52. Đĩa cứng được làm bằng kim loại hoặc bằng thuỷ tinh, có dung lượng lớn và tốc độ cao hơn nhiều lần so với đĩa mềm. Hiện nay, các ổ đĩa cứng thường có dung lượng rất lớn, từ vài chục gigabyte đến hàng ngàn gigabyte và là thiết bị lưu trữ chủ yếu của các hệ thống máy tính. Do đĩa từ mềm ngày càng ít được sử dụng, phần tiếp theo của chương này chỉ đề cập đến đĩa từ cứng và ổ đĩa cứng. 57