Bài giảng Kiến trúc máy tính - Hoàng Xuân Dậu
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 - Hoàng Xuân Dậu", để 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:
- bai_giang_kien_truc_may_tinh_hoang_xuan_dau.pdf
Nội dung text: Bài giảng Kiến trúc máy tính - Hoàng Xuân Dậu
- HỌC VIỆN CÔNG NGHỆ BƢU CHÍNH VIỄN THÔNG HOÀNG XUÂN DẬU BÀI GIẢNG KIẾN TRÚC MÁY TÍNH HÀ NỘI 2010
- 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. Môn học Kiến trúc máy tính là môn học cơ sở chuyên ngành trong chƣơng trình đào tạo công nghệ thông tin hệ đại học và cao đẳ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, bao gồm 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 và các thành phần của 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 của bộ nhớ, bộ nhớ trong, bộ nhớ cache và các loại bộ nhớ ngoài; hệ thống bus và các thiết bị vào ra. Kiến trúc máy tính là một 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, 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 sáu 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 3 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ỉ. Chƣơng cũng giới thiệu 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 4 trình bày về bộ nhớ trong: 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 5 giới thiệu về bộ nhớ ngoài, bao gồm các loại đĩa từ, đĩa quang, các hệ thống RAID, NAS và SAN. Bộ nhớ ngoài là dạng bộ nhớ thƣờng có dung lƣợng lớn và dùng để lƣu trữ thông tin ổn định, không phụ thuộc nguồn điện nuôi. 1
- Chƣơng 6 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. 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 trong nhiều năm của tác giả tại 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 các ngành công nghệ thông tin và điện tử viễn thông. Trong quá trình biên soạn, mặc dù tác giả đã rất cố gắng song không thể tránh khỏi có những thiếu sót. 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 8 năm 2010 Tác giả TS. Hoàng Xuân Dậu Email: dauhx@ptit.edu.vn 2
- MỤC LỤC CHƢƠNG 1 GIỚI THIỆU CHUNG 5 1.1 KHÁI NIỆM VỀ KIẾN TRÚC VÀ TỔ CHỨC MÁY TÍNH 5 1.2 CẤU TRÚC VÀ CHỨC NĂNG các thành phẦN CỦA MÁY TÍNH 5 1.2.1 Sơ đồ khối chức năng 5 1.2.2 Các thành phần của máy tính 6 1.3 LỊCH SỬ PHÁT TRIỂN MÁY TÍNH 8 1.3.1 Thế hệ 1 (1944-1959) 8 1.3.2 Thế hệ 2 (1960-1964) 8 1.3.3 Thế hệ 3 (1964-1975) 8 1.3.4 Thế hệ 4 (1975-1989) 8 1.3.5 Thế hệ 5 (1990 - nay) 8 1.4 KIẾN TRÚC MÁY TÍNH VON-NEUMANN 9 1.4.1 Sơ đồ kiến trúc máy tính von-Neumann 9 1.4.2 Các đặc điểm của kiến trúc von-Neumann 9 1.5 KIẾN TRÚC MÁY TÍNH HARVARD 10 1.6 CÁC HỆ SỐ ĐẾM VÀ TỔ CHỨC DỮ LIỆU TRÊN MÁY TÍNH 10 1.6.1 Các hệ số đếm 10 1.6.2 Tổ chức dữ liệu trên máy tính 11 1.6.3 Số có dấu và số không dấu 12 1.6.4 Bảng mã ASCII 13 1.7 CÂU HỎI ÔN TẬP 14 CHƢƠNG 2 KHỐI XỨ LÝ TRUNG TÂM 15 2.1 SƠ ĐỒ KHỐI TỔNG QUÁT VÀ chu trình xỬ LÝ LỆNH 15 2.1.1 Sơ đồ khối tổng quát của CPU 15 2.1.2 Chu trình xử lý lệnh 16 2.2 CÁC THANH GHI 16 2.2.1 Giới thiệu về thanh ghi 16 2.3 KHỐI ĐIỀU KHIỂN 18 2.4 KHỐI SỐ HỌC VÀ LOGIC 19 2.5 BUS TRONG CPU 20 2.6 CÂU HỎI ÔN TẬP 20 CHƢƠNG 3 TẬP LỆNH MÁY TÍNH 21 3.1 GIỚI THIỆU VỀ TẬP LỆNH MÁY TÍNH 21 3.1.1 Lệnh máy tính là gì? 21 3.1.2 Chu kỳ thực hiện lệnh 21 3.2 DẠNG VÀ CÁC THÀNH PHẦN CỦA LỆNH 21 3.3 CÁC DẠNG ĐỊA CHỈ / TOÁN HẠNG 22 3.3.1 Toán hạng dạng 3 địa chỉ 22 3.3.2 Toán hạng dạng 2 địa chỉ 22 3.3.3 Toán hạng dạng 1 địa chỉ 22 3.3.4 Toán hạng dạng 1,5 địa chỉ 23 3.3.5 Toán hạng dạng 0 địa chỉ 23 3.4 CÁC CHẾ ĐỘ ĐỊA CHỈ 23 3.4.1 Giới thiệu về chế độ địa chỉ 23 3.4.2 Các chế độ địa chỉ 24 3.5 MỘT SỐ DẠNG LỆNH THÔNG DỤNG 27 3.5.1 Các lệnh vận chuyển dữ liệu 27 3.5.2 Các lệnh toán học và logic 27 1
- 3.5.3 Các lệnh điều khiển chƣơng trình 28 3.5.4 Các lệnh vào ra 29 3.6 GIỚI THIỆU CƠ CHẾ ỐNG LỆNH (PIPELINE) 30 3.6.1 Giới thiệu cơ chế ống lệnh 30 3.6.2 Các vấn đề của cơ chế ống lệnh và hƣớng giải quyết 31 3.7 CÂU HỎI ÔN TẬP 35 CHƢƠNG 4 BỘ NHỚ TRONG 36 4.1 PHÂN LOẠI BỘ NHỚ MÁY TÍNH 36 4.1.1 Phân loại bộ nhớ 36 4.1.2 Tổ chức mạch nhớ 36 4.2 CẤU TRÚC PHÂN CẤP BỘ NHỚ MÁY TÍNH 37 4.2.1 Giới thiệu cấu trúc phân cấp hệ thống nhớ 37 4.2.2 Vai trò của cấu trúc phân cấp hệ thống nhớ 38 4.3 BỘ NHỚ rom VÀ ram 39 4.3.1 Bộ nhớ ROM 39 4.3.2 Bộ nhớ RAM 40 4.4 BỘ NHỚ CACHE 42 4.4.1 Cache là gì? 42 4.4.2 Vai trò và nguyên lý hoạt động 42 4.4.3 Các dạng kiến trúc cache 45 4.4.4 Các dạng tổ chức/ánh xạ cache 46 4.4.5 Các phƣơng pháp đọc ghi và các chính sách thay thế 52 4.4.6 Hiệu năng cache và các yếu tố ảnh hƣởng 53 4.4.7 Các phƣơng pháp giảm miss cho cache 55 4.5 CÂU HỎI ÔN TẬP 56 CHƢƠNG 5 BỘ NHỚ NGOÀI 57 5.1 ĐĨA TỪ 57 5.1.1 Giới thiệu 57 5.1.2 Đĩa cứng 58 5.2 ĐĨA QUANG 62 5.2.1 Giới thiệu và nguyên lý 62 5.2.2 Các loại đĩa quang 63 5.2.3 Giới thiệu cấu tạo một số đĩa quang thông dụng 64 5.3 RAID 66 5.3.1 Giới thiệu RAID 66 5.3.2 Các kỹ thuật tạo RAID 66 5.3.3 Giới thiệu một số loại RAID thông dụng 67 5.4 NAS 69 5.5 SAN 70 5.6 CÂU HỎI ÔN TẬP 71 CHƢƠNG 6 HỆ THỐNG BUS VÀ CÁC THIẾT BỊ NGOẠI VI 72 6.1 GIỚI THIỆU CHUNG VỀ HỆ THỐNG BUS 72 6.2 GIỚI THIỆU MỘT SỐ LOẠI BUS THÔNG DỤNG 73 6.2.1 Bus ISA và EISA 73 6.2.2 Bus PCI 74 6.2.3 Bus AGP 77 6.2.4 Bus PCI Express 78 6.3 GIỚI THIỆU CHUNG VỀ CÁC THIẾT BỊ NGOẠI VI 78 6.3.1 Giới thiệu chung 78 6.3.2 Các cổng giao tiếp 79 6.4 GIỚI THIỆU MỘT SỐ THIẾT BỊ VÀO RA THÔNG DỤNG 81 6.4.1 Bàn phím 81 2
- 6.4.2 Chuột 82 6.4.3 Màn hình 83 6.4.4 Máy in 86 6.5 CÂU HỎI ÔN TẬP 89 TÀI LIỆU THAM KHẢO 90 3
- 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 Buýt 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ý 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 Buýt theo chuẩn công nghiệp ISA Architecture Extended ISA EISA Buýt 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 Buýt 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 4
- 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
- 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 để 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 6
- Chương 1- Giới thiệu chung 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 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), 7
- Chương 1- Giới thiệu chung 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 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. 8
- Chương 1- Giới thiệu chung 1.4 KIẾN TRÚC MÁY TÍNH VON-NEUMANN 1.4.1 Sơ đồ 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 1.4.2 Các đặc điểm của kiến trúc von-Neumann 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 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ó). 9
- Chương 1- Giới thiệu chung 1.5 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.6 CÁC HỆ SỐ ĐẾM VÀ TỔ CHỨC DỮ LIỆU TRÊN MÁY TÍNH 1.6.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.6.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ụ: 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 10
- Chương 1- Giới thiệu chung 1.6.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.6.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.6.2 Tổ chức dữ liệu trên máy tính 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. 11
- Chương 1- Giới thiệu chung 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 1.6.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 12
- Chương 1- Giới thiệu chung - 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.6.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. Hình 12 Bảng mã ASCII - Một số ký tự điều khiển 13
- Chương 1- Giới thiệu chung Hình 13 Bảng mã ASCII - Các ký tự in đƣợc 1.7 CÂU HỎI ÔN TẬP 1. Phân biệt khái niệm kiến trúc & tổ chức máy tính. 2. Nêu sơ đồ khối và mô tả chức năng từng khối của máy tính? 3. So sánh hai kiến trúc von-Neumann và Harvard. 4. Các hệ đếm 2, 10 và 16. 5. Các đơn vị lƣu trữ dữ liệu trên máy tính. 14
- CHƢƠNG 2 KHỐI XỨ LÝ TRUNG TÂM 2.1 SƠ ĐỒ KHỐI TỔNG QUÁT VÀ CHU TRÌNH XỬ LÝ LỆNH 2.1.1 Sơ đồ khối tổng quát của CPU CU A IR Y Internal Bus 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)
- 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.2 CÁC THANH GHI 2.2.1 Giới thiệu về 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.2.1.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ị 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. 16
- Chương 2- Khối xử lý trung tâm Ví dụ về việc sử dụng thanh ghi A trong phép toán: x + y s . Nạp toán hạng x vào thanh ghi A . Nạp toán hạng y vào thanh ghi tạm thời Y . ALU thực hiện phép cộng A + Y và lƣu kết quả vào thanh ghi Z . Kết quả phép tính từ Z đƣợc chuyển về thanh ghi A. . Kết quả trong thanh ghi A đƣợc lƣu vào ô nhớ s. 2.2.1.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.2.1.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.2.1.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.2.1.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.2.1.6 Con trỏ ngăn xếp SP SP Stack Hình 15 Con trỏ ngăn xếp SP 17
- Chương 2- Khối xử lý trung tâm 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: 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.2.1.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.2.1.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.3 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 18
- Chương 2- Khối xử lý trung tâm 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 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 Control Unit ALU CLK CU Flags IR Hình 17 Khối điều khiển CU và các tín hiệu 2.4 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. 19
- Chương 2- Khối xử lý trung tâm IN IN ADD SUB N SHL EG MUL DIV SHR ROL NOT OR AND ROR XOR OUT Hình 18 Bộ tính toán ALU 2.5 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.6 CÂU HỎI ÔN TẬP 1. Nêu sơ đồ khối tổng quát và các thành phần chính của CPU? 2. Nêu chu trình xử lý lệnh của CPU? 3. Nêu vai trò và chức năng của các thanh ghi của CPU? 4. Nêu sơ đồ và chức năng của CU và ALU? 20
- CHƢƠNG 3 TẬP LỆNH MÁY TÍNH 3.1 GIỚI THIỆU VỀ TẬP LỆNH MÁY TÍNH 3.1.1 Lệnh máy tính là gì? 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ớ. 3.1.2 Chu kỳ 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. 3.2 DẠNG VÀ CÁC THÀNH PHẦN CỦA LỆNH 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 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ỉ. Chi tiết về từng dạng toán hạng đƣợc trình bày trong mục 3.3.
- Chương 3- Tập lệnh máy tính 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 3.3 CÁC DẠNG ĐỊA CHỈ / TOÁN HẠNG 3.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ớ. 3.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ớ. 3.3.3 Toán hạng dạng 1 địa chỉ Dạng: opcode addr2 Đị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. 22
- Chương 3- Tập lệnh máy tính 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ớ. 3.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ớ. 3.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 3.4 CÁC CHẾ ĐỘ ĐỊA CHỈ 3.4.1 Giới thiệu về 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) 23
- Chương 3- Tập lệnh máy tính 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 mục 3.4.2. 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: 3.4.2 Các chế độ địa chỉ 3.4.2.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. 3.4.2.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. LOAD R1, 1000 200 R 200 1 Hình 21 Tham chiếu với chế độ địa chỉ trực tiếp 24
- Chương 3- Tập lệnh máy tính 3.4.2.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). 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. 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. Hình 22 Tham chiếu trong chế độ địa chỉ gián tiếp 25
- Chương 3- Tập lệnh máy tính 3.4.2.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ố 3.4.2.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ố. Hình 24 Tham chiếu trong chế độ địa chỉ tƣơng đối 26
- Chương 3- Tập lệnh máy tính 3.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. 3.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. 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. 3.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ừ. 27
- Chương 3- Tập lệnh máy tính 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. 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) 3.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 28
- Chương 3- Tập lệnh máy tính 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); . 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. 3.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). 29
- Chương 3- Tập lệnh máy tính 3.6 GIỚI THIỆU CƠ CHẾ ỐNG LỆNH (PIPELINE) 3.6.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. 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 Hình 25 minh hoạ cơ chế thực hiện lệnh (a) không pipeline và (b) có pipeline. 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. 30
- Chương 3- Tập lệnh máy tính 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 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 3.6.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. 3.6.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. 31
- Chương 3- Tập lệnh máy tính 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 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. 3.6.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; 32
- Chương 3- Tập lệnh máy tính 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. 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 với 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 3.6.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. 33
- Chương 3- Tập lệnh máy tính 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 34
- Chương 3- Tập lệnh máy tính 3.7 CÂU HỎI ÔN TẬP 1. Khái niệm lệnh và tập lệnh? Chu kỳ lệnh và các giai đoạn thực hiện lệnh. 2. Dạng lệnh và các dạng địa chỉ toán hạng. 3. Khái niệm chế độ địa chỉ và các chế độ địa chỉ. 4. Nêu một số dạng lệnh thông dụng. 5. Nguyên lý hoạt động của cơ chế ống lệnh của CPU? 6. Các vấn đề của cơ chế ống lệnh của CPU và hƣớng khắc phục. 35
- CHƢƠNG 4 BỘ NHỚ TRONG 4.1 PHÂN LOẠI BỘ NHỚ MÁY TÍNH 4.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, 4.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à 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.
- Chương 4- Bộ nhớ trong 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 RD = 0 sẽ cho phép đọc dữ liệu từ các ô nhớ trong một dòng. 4.2 CẤU TRÚC PHÂN CẤP BỘ NHỚ MÁY TÍNH 4.2.1 Giới thiệu 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, 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 33 Cấu trúc phân cấp hệ thống nhớ 37
- Chương 4- Bộ nhớ trong 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). 4.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. 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 38
- Chương 4- Bộ nhớ trong 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. 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. 4.3 BỘ NHỚ ROM VÀ RAM 4.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 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. 39
- Chương 4- Bộ nhớ trong 4.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. 4.3.2.1 Bộ nhớ SRAM C C B B E E Một mạch lật (flip-flop) đơn giản Một ô nhớ SRAM loại 6T 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. 4.3.2.2 Bộ nhớ DRAM 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 40
- Chương 4- Bộ nhớ trong 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ồ; 41
- Chương 4- Bộ nhớ trong . 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ồ; . 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ồ. 4.4 BỘ NHỚ CACHE 4.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 4.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, , 128KB; với các hệ thống máy tính gần đây, dung lƣợng cache lớn hơn, khoảng 256KB, 512KB, 1MB, 2MB, 4MB, 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. 4.4.2 Vai trò và nguyên lý hoạt động 4.4.2.1 Vai trò của cache Do 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ớ 42
- Chương 4- Bộ nhớ trong 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. 4.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ự, 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. 43
- Chương 4- Bộ nhớ trong 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 4.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. 4.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. 44
- Chương 4- Bộ nhớ trong 4.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. 4.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 – 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ớ controller trong bộ nhớ System bus 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 4.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. 45
- Chương 4- Bộ nhớ trong CPU Cache Tag SRAM controller RAM Main Memory Hình 43 Kiến trúc cache kiểu Look Through 4.4.4 Các dạng tổ chức/ánh xạ cache 4.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 Nhƣ đã trình bày trong mục 4.2, 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 độ 46
- Chương 4- Bộ nhớ trong 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à á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. 4.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. 47
- Chương 4- Bộ nhớ trong 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 = 210 có 210 / 25 = 25 dòng, vậy Line = 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ỉ – Line – Word = 32 – 5 – 5 = 22 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. 4.4.4.3 Ánh xạ kết hợp đầy đủ 48
- Chương 4- Bộ nhớ trong 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 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. 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 49
- Chương 4- Bộ nhớ trong - 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 đủ chỉ thích hợp với các cache có dung lƣợng nhỏ. 4.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. 50
- Chương 4- Bộ nhớ trong 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 độ 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: 51
- Chương 4- Bộ nhớ trong - Kích thƣớc dòng Line = 32 byte = 25 , vậy Word = 5 bit - Dung lƣợng Cache = 1MB = 210 có 210 / 2 đƣờng / 25 = 24 dòng / đƣờng, vậy Set = 4 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 – 4 – 5 = 23 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. 4.4.5 Các phƣơng pháp đọc ghi và các chính sách thay thế 4.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ộ 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. 52
- Chương 4- Bộ nhớ trong 4.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 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. 4.4.6 Hiệu năng cache và các yếu tố ảnh hƣởng 4.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 53
- Chương 4- Bộ nhớ trong 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. 4.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% 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 54
- Chương 4- Bộ nhớ trong 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ớ. 4.4.7 Các phƣơng pháp giảm miss cho cache 4.4.7.1 Các loại miss của cache Một hệ thống nhớ với cache tốt cần đạt đƣợc các yếu tố: (1) hệ số hit cao, (2) hệ số miss thấp và (3) nếu xảy ra miss thì không quá chậm. Để có thể có giải pháp giảm miss hiệu quả, ta cần phân biệt rõ các loại miss. Cụ thể, tồn tại ba loại miss chính: miss bắt buộc (Compulsory misses), miss do dung lượng (Capacity misses) và miss do xung đột (Conflict misses). Miss bắt buộc thƣờng xảy ra tại thời điểm chƣơng trình đƣợc kích hoạt, khi mã chƣơng trình đang đƣợc tải vào bộ nhớ và chƣa đƣợc nạp vao cache. Miss do dung lƣợng lại thƣờng xảy ra do kích thƣớc của cache hạn chế, đặc biệt trong môi trƣờng đa nhiệm. Do kích thƣớc cache nhỏ nên mã của các chƣơng trình thƣờng xuyên bị tráo đổi giữa bộ nhớ và cache. Theo một khía cạnh khác, miss do xung đột xảy ra khi có nhiều dòng bộ nhớ cùng cạnh tranh một dòng cache. 4.4.7.2 Các phương pháp giảm miss cho cache Trên cơ sở các loại miss đã đƣợc đề cập, hai phƣơng pháp giảm miss có thể phối hợp áp dụng nhằm đạt hiểu quả giảm miss tối đa, gồm: tăng kích thước dòng cache và tăng mức độ liên kết cache. Biện pháp tăng kích thƣớc dòng cache có thể giúp giảm miss bắt buộc do dòng có kích thƣớc lớn sẽ có khả năng bao phủ các mục tin lân cận tốt hơn. Tuy nhiên, biện pháp này sẽ làm tăng miss xung đột, do dòng kích thƣớc lớn sẽ làm giảm số dòng cache, dẫn đến tăng mức độ cạnh tranh của các dòng nhớ đến một dòng cache. Ngoài ra, dòng kích thƣớc lớn có thể gây lãng phí dung lƣợng cache do có thể có nhiều phần của dòng cache lớn không bao giờ đƣợc sử dụng. Hiện nay, kích thƣớc dòng cache thƣờng dùng hiện nay là 64 bytes. Biện pháp tăng mức độ liên kết cache hay tăng số đƣờng cache có thể giúp giảm miss xung đột, do tăng số đƣờng cache làm tăng tính mềm dẻo của ánh xạ trang bộ nhớ đến đƣờng cache do có nhiều lựa chọn hơn. Tuy nhiên, nếu tăng số đƣờng cache quá lớn, có thể làm cache chậm do tăng không giam tìm kiếm các đƣờng cache. Hiện nay, số đƣờng cache hợp lý cho miss tối ƣu thƣờng dùng là khoảng 8 đƣờng. 55