Tài liệu Kiến trúc máy tính (Computer Architecture)

pdf 183 trang vanle 2040
Bạn đang xem 20 trang mẫu của tài liệu "Tài liệu Kiến trúc máy tính (Computer Architecture)", để 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:

  • pdftai_lieu_kien_truc_may_tinh_computer_architecture.pdf

Nội dung text: Tài liệu Kiến trúc máy tính (Computer Architecture)

  1. LỜI NÓI ĐẦU Máy tính đang ngày càng trở thành một công cụ không thể thiếu cũng như không thể thay thế được trong đời sống thường nhật. Ứng dụng công nghệ thông tin trong sinh hoạt hàng ngày, trong sản xuất ra của cải vật chất cũng như trong công việc điều hành, quản lý ngày càng phổ biến. Có thể nói mọi người, không phân biệt giới tính hay tuổi tác, đều tìm được ở công cụ sắc bén này một niềm hứng khởi, say mê kể cả trong giải quyết công việc cũng như học hỏi, nghiên cứu sáng tạo hay giải trí. Cấu tạo máy tính ngày càng hiện đại, tinh vi, phức tạp, bao gồm nhiều thành phần chức năng và đòi hỏi sự liên kết, hợp tác của nhiều ngành khoa học, công nghệ mũi nhọn tạo nên. Kiến trúc máy tính (Computer Architecture) là ngành khoa học nghiên cứu nguyên lý hoạt động, tổ chức (organization) máy tính từ các thành phần chức năng cơ bản – cấu trúc và tổ chức phần cứng, tập lệnh – mà qua đó, các lập trình viên có thể nhận thấy, sử dụng, khai thác và sáng tạo để đáp ứng tốt hơn, đầy đủ hơn những yêu cầu của người dùng. Một máy tính không chỉ bao gồm các thành phần vật lý, các khổi chức năng – thường được gọi là phần cứng (hardware) – mà còn bao gồm một khối lượng đồ sộ các chương trình điều hành, quản lý, tiện ích và ứng dựng, được gọi là phần mềm (software). Giáo trình được biên soạn trên cơ sở bài giảng của tác giả tại Trường Đại học Công nghệ Thông tin và truyền thông, Đại học Thái Nguyên từ những năm 2002-2010, trường Đại học Thăng Long, và Học viện Công nghệ Bưu chính Viễn thông; giáo trình trình bày những vấn đề lý thuyết và những thành phần cơ bản nhất, chung nhất của kiến trúc máy tính. Giáo trình được biên soạn cho sinh viên học ngành Công nghệ thông tin tại các trường Đại học. Các thuật ngữ khoa học sử dụng trong tài liệu được trích dẫn bằng tiếng Anh – ngôn ngữ chung trong ngành Công nghệ thông tin. Tuy nhiên, tác giả cũng muốn tài liệu có thể dùng làm tham khảo cho những ai quan tâm hay yêu thích tìm hiểu những kiến thức cơ bản của lĩnh vực chuyên môn này. Nội dung giáo trình được trình bày trong 8 chương. Chương I nhắc lại những kiến thức cơ bản về mạch điện tử số, các cổng logic, mạch flip-flop, v.v , những phần tử cơ bản nhất cấu thành các mạch chức năng trong máy tính. Các kiến thức cơ bản về mạch tổ hợp, mạch tuần tự, mạch cộng dữ liệu nhị phân, thanh ghi dịch, , cũng được trình bày. Những kiến thức này rất cần thiết để sinh viên dễ dàng nắm bắt nguyên lý làm việc của các khối chức năng cơ bản trong máy tính. 1 Nguyễn Trung Đồng – Tel 0983 410 866
  2. Chương II giới thiệu những kiến thức tổng quan về kiến trúc máy tính, bắt đầu từ nguyên lý kiến trúc, chức năng, nhiệm vụ và các thành phần cơ bản tạo nên một máy tính theo nguyên lý Von Neumann. Nội dung chương phân biệt hai khái niệm kiến trúc, tổ chức máy tính với cấu trúc máy tính để dễ dàng nắm bắt các yêu cầu hiểu biết về CPU, về bộ nhớ, về các thiết bị ngoại vi và liên kết hệ thống giữa các đơn vị chức năng này. Nguyên lý và phương thức biểu diễn các thông tin số, thông tin không số cũng được trình bày trong chương này. Chương III trình bày kiến trúc và các bước thiết kế kiến trúc đơn vị xử lý trung tâm CPU, đơn vị điều khiển CU thông qua việc phân tích hoạt động chức năng thực thi lệnh, thực thi chương trình. Chương IV phân tích kiến trúc tập lệnh và phương thức CPU thực hiện lệnh, chu kỳ lệnh trong thực hiện chương trình, thông qua đó củng cố sâu thêm những hiểu biết về nguyên lý kiến trúc, chuẩn bị kiến thức cơ sở cho lập trình hệ thống. Thông qua truy xuất bộ nhớ để lấy lệnh, lấy dữ liệu, phân tích các phương pháp định vị ô nhớ trong cấu trúc lệnh. Chương V trình bày khái niệm BUS trong chức năng các kênh truyền dẫn thông tin, dữ liệu liên kết các thành phần chức năng của một máy tính. Nội dung chương đề cập các mối liên kết thông qua hệ thống BUS giữa CPU với bộ nhớ, giữa CPU với các thiết bị ngoại vi và các yêu cầu về định thời cho hoạt động trao đổi thông tin, dữ liệu. Chức năng truy cập trực tiếp bộ nhớ (Direct Memory Access), chức năng quản lý và điều khiển quá trình ngắt cũng được phân tích trong chương này. Trên cơ sở phân tích các nội dung trên, đưa ra yêu cầu thiết kế, xây dựng hệ thống BUS nhằm đảm bảo cho hệ thống máy tính hoạt động ổn định. Chương VI trình bày tổ chức và quản lý bộ nhớ. Các khái niệm phần tử nhớ, tạo từ nhớ từ các chip nhớ được đề cập cụ thể. Nội dung cũng đề cập phương thức quản lý bộ nhớ theo phân đoạn, phân trang, quản lý bộ nhớ trong chế độ bảo vệ, quản lý theo đặc quyền truy xuất. Các phương pháp tổ chức và quản lý bộ nhớ cache, thành phần nâng cao đáng kể hiệu suất hoạt động của CPU, được khảo sát kỹ trong chương này. Chương VII phân tích yêu cầu cơ bản của một vài thiết bị ngoại vi chủ yếu như thiết bị nhập liệu, thiết bị hiển thị kết quả xử lý. Chương VIII giới thiệu sơ lược về kỹ thuật và các công cụ phục vụ phát triển hệ thống phần mềm của máy tính. Những khái niệm cơ bản về lập trình hợp ngữ, chương trình dịch, chương trình thông dịch, và khái niệm hệ điều hành. Đây là những kiến thức tối thiểu và khái niệm phần mềm, thành phẫn cốt lõi thứ hai tạo nên một hệ thống máy tính. 2 Nguyễn Trung Đồng – Tel 0983 410 866
  3. Như đã nói ở trên, giáo trình này được biên soạn lại theo nội dung các bài giảng tác giả sử dụng lâu nay, mặc dù đã rất cố gắng, song chắc chắn còn nhiều thiếu sót. Mong các độc giả góp ý để tác giả rút kinh nghiệm và bổ sung. Tác giả xin chân thành cảm ơn các đồng nghiệp tại Viện Công nghệ Thông tin, Viện Hàn lâm Khoa học và Công nghệ Việt Nam, các đồng nghiệp tại bộ môn Khoa học máy tính, Kỹ thuật máy tính của các trường mà tác giả từng cùng tham gia giảng dạy đã luôn luôn động viên, góp ý trong quá trình biên soạn. Rất mong nhận được sự góp ý của quý độc giả theo địa chỉ Email dongnt@hn.vnn.vn. Xin chân thành cảm ơn Nguyễn Trung Đồng 3 Nguyễn Trung Đồng – Tel 0983 410 866
  4. Chương I. Những kiến thức cơ sở 1. Một số phần tử Logic cơ bản Các mạch logic cơ bản được tạo ra từ liên kết các phần tử điện tử thông dụng là transistor, diode, điện trở, tụ điện, Tuỳ theo công nghệ chế tạo các phần tử đó mà chúng có những tên gọi khác nhau như logic TTL, logic CMOS, logic HMOS, logic MOSFET v.v Hình I.1 cho ta thấy cấu trúc mạch nguyên lý của một phần tử TTL thực hiện chức năng đảo tích logic của hai giá trị đầu vào (NAND). Vcc R 1 R 2 R 3 T 3 F = AB T 1 A T 2 Output Inputs B F T 4 A R F 4 B Gnd Hình I.1. Sơ đồ nguyên lý mạch tạo phần tử NAND Phần tử logic cơ bản thực hiện các hàm của đại số Boole như NOT, AND, NAND, OR, XOR, v.v Từ các phần tử này, người ta xây dựng được các mạch tổ hợp (Combinational Circuits) các mạch lật (FlipFlop) với những đặc tính chuyển đổi trạng thái khác nhau như R-S FlipFlop, D-FlipFlop, T- FlipFlop, J-K FlipFlop mà nhờ chúng, ta xây dựng được các mạch tuần tự (Sequencial Circuits) và các máy hữu hạn (Finite State Machine), những mạch tích hợp tạo nên các đơn vị chức năng cơ bản trong máy tính. A A A Y Y Y A Y B B Y=A.B Y=A Y=A Y= A.B A Y A A Y Y B B Y=A Y=A.B Y=A.B A A A Y Y Y B B B Y=A+B Y=A+B Y=A B A Y A A Y B B Y B Y=A B Y=A+B Y=A+B Hình I.2. Một số phần tử logic cơ bản 4 Nguyễn Trung Đồng – Tel 0983 410 866
  5. Hình I.3 . Các phần tử mạch lật (FlipFlop) thông dụng Đặc biệt, mạch logic 3 trạng thái (Three-State Logic Circuit) là một mạch có ứng dụng rất quan trọng trong việc liên kết các phần tử chức năng của máy tính. Mạch logic 3 trạng thái có thể minh hoạ theo mô hình và bảng chân thực sau (Hình I.4), trạng thái có ký hiệu "HZ" là trạng thái thứ 3 của mạch, trạng thái trở kháng cao (High Impedance), khi mà lối vào có thể coi như được tách khỏi lối ra của mạch (không kết nối). Có hai loại mạch 3 trạng thái:, loại mạch có tín hiệu EN là tích cực cao, ứng với EN = "1" (Active High), loại thứ hai là mạch có tín hiệu EN tích cực thấp ứng với EN = "0" (Active Low). 5 Nguyễn Trung Đồng – Tel 0983 410 866
  6. Hình I.4. Phần tử 3 trạng thái (Three-State component) và bảng chân lý 2. Một số khái niệm cơ sở 2.1. Mạch logic tổ hợp (Combinational Circuit) Mạch logic tổ hợp là một mạch điện tử số mà giá trị các biến ở đầu ra chỉ phụ thuộc vào tổ hợp giá trị của các biến ở đầu vào (Hình I.5). i0 F0(i0,i1) i1 F1(i0,i1,i4) Mạch i F (i ,i ,i ,i ) 2 logic tổ 2 2 4 5 7 hợp in Fm(i2,i3,i6,in) Hình I.5. Mạch logic tổ hợp Các biến vào i0, i1, , in nhận giá trị là "1" hoặc "0" tương ứng với giá trị của một biến nhị phân, trong mạch điện, chúng được thể hiện bằng các trạng thái "có điện áp" hoặc "không có điện áp". Các giá trị của đầu ra là hàm trực tiếp của các biến đầu vào, và được thay đổi gần như tức thời khi có sự thay đổi giá trị của biến đầu vào (chỉ trễ một khoảng thời gian rất nhỏ - hàng nano giây - do sự trễ của các linh kiện tạo nên mạch điện). Có thể nói tập các giá trị đầu vào i0 ÷ in được áp vào các lối vào của mạch tổ hợp logic gây nên sự biến đổi trạng thái (giá trị) của các biến đầu ra F0 ÷ Fm . Các mạch tổ hợp thông dụng thường thấy là mạch mã hoá, mạch giải mã, mạch dồn kênh, v.v 6 Nguyễn Trung Đồng – Tel 0983 410 866
  7. 2.2. Mạch tuần tự (Sequencial Circuit) Mạch này còn được gọi là mạch dãy. Giá trị của biến ra phụ thuộc không những vào giá trị các biến số đầu vào ở thời điểm đang xét, mà còn phụ thuộc vào trạng thái trước đó của mạch. Để duy trì được trạng thái của các biến số vào trước đó, mạch cần thêm các phần tử nhớ. Mô hình của mạch như sau: Zi = Fi (x1, x2, , xn , y1 , y2 , , yp); Yj = Gj (x1, x2, , xn , y1 , y2 , , yp) Trong đó Fi là hàm truyền đạt của mạch và Gj là hàm truyền đạt trạng thái; xi (i = 1, 2, ,n), Zi (i = 1, 2, , m) là các tín hiệu vào và tín hiệu ra của mạch; y1 , y2 , , yp : trạng thái của mạch trước khi biến đổi; Y1 , Y2 , , Yp : trạng thái của mạch sau khi biến đổi. Các phần tử nhớ là các phần tử logic có hai trạng thái ổn định ứng với các giá trị của biến nhị phân "0" và "1", thường là các mạch FlipFlop loại RS, JK hoặc D. x1 Z1 Z2 Mạch xn Zm tổ hợp y1 Y1 Hình I.6. Mạch Các logic tuần tự phần tử nhớ yp Yp 2.3. Máy hữu hạn (Finite State Machine) Máy hữu hạn là một loại mạch logic khác có 7 Nguyễn Trung Đồng – Tel 0983 410 866
  8. trạng thái trong (internal state), đầu ra của loại mạch này là hàm của giá trị đầu vào tại thời điểm đang xét và trạng thái trong hiện tại khi có tác động của tín hiệu vào. Mạch được tạo thành từ một mạch tổ hợp logic và các phần tử trễ, thông thường là các phần tử Flip-Flop trên mạch hồi tiếp như là những phần tử lưu giữ trạng thái trong của mạch. 2.4. Thanh ghi (Register) Thanh ghi là một mạch điện tử đặc biệt có khả năng lưu giữ các giá trị của một dữ liệu nhị phân được biểu diễn bằng trạng thái tồn tại hay không tồn tại điện áp. Phần tử cơ bản tạo nên một thanh ghi là D-FlipFlop. Trên hình vẽ mô tả, dữ liệu nhị phân 4 bit D3D2D1D0 (tổ hợp của hai giá trị "0" và "1" trên lối vào D tương ứng của các D-FlipFlop) sẽ được chuyển tới lối ra Q3Q2Q1Q0 và lưu giữ nhờ tổ hợp tín hiệu điều khiển ghi Write WR, tín hiệu xung nhịp đồng hồ CLK và tín hiệu cho phép Enable EN (Hình 1.7). Lưu ý rằng, tín hiệu ra của thanh ghi được đưa qua phần tử 3 trạng thái để tạo khả năng kết nối với những dữ liệu ở lối ra của các thành phần khác. Cũng cần nói Hình I.7. Mạch tạo thanh thêm rằng: Thanh ghi ghi 4 bit hoàn toàn đảm nhận chức năng của một ô nhớ dữ liệu, vì mỗi khi giá trị dữ liệu nhị phân từ lối vào được ghi vào thanh ghi, dữ liệu đó không thay đổi cho đến thời điểm một dữ liệu mới được ghi vào. Dữ liệu lưu giữ trong ô nhớ có thể đọc ra được. Hình I.9. là sơ đồ nguyên lý của một thanh ghi dịch có khả năng ghi dịch theo các hướng trái, phải hoặc lưu giữ (Load) các dữ liệu nhị phân 4 bit D3D2D1D0 song song. 2.5. Mạch cộng hai số liệu nhị phân (Binary Adder) Mạch cộng đầy đủ 2 bit nhị phân có thể xây dựng như một mạch tổ hợp logic thực hiện phép cộng hai số nhị phân theo quy tắc trong bảng sau, trong đó Carry In là phần nhớ từ phép cộng của hàng bên phải trước đó, Operand A là giá trị của bit trong toán hạng A, Operand B là giá trị của bit trong toán hạng B. Kết quả phép cộng 2 bit cho ta tổng Sum và bit nhớ Carry Out. 8 Nguyễn Trung Đồng – Tel 0983 410 866
  9. Hình I.8. Sơ đồ nguyên lý mạch tạo thanh ghi dịch 4 bit Trong ví dụ là phép cộng hai số nhị phân 0100B (giá trị bằng 4 trong hệ thập phân) với số 0110B (giá trị bằng 6 trong hệ thập phân). Hàng trên là giá trị của bit nhớ theo quy luật cộng đã nêu. Kết quả cho ta là 1010B (tức bằng 10 trong hệ thập phân). A S B Sơ đồ mạch logic thực hiện phép cộng 2 bit nhị phân – Half Adder (HA) C Từ quy tắc trên, giả thiết ta xây dựng được một mạch cộng đầy đủ thực hiện phép toán cộng như bảng giá trị của hàm Si và Ci và ký hiệu là một mạch cộng đầy đủ (Full adder) với các đầu vào là Ai , Bi và Ci , đầu ra là Si và Ci+1, ta có thể xây dựng mạch cộng hai dữ liệu nhị phân 4 bit bằng cách 9 Nguyễn Trung Đồng – Tel 0983 410 866
  10. nối nối tiếp 4 mạch cộng đầy đủ như Hình I.11. , hoặc mạch cộng hai số nhị phân n bit với n mạch cộng đầy đủ. Ci Ai Si Bi Ci+1 Hình I.10. Sơ đồ mạch logic thực hiện phép cộng 2 bit có nhớ từ hàng trước – FullAdder (FA) Hình I.11. Sơ đồ mạch logic thực hiện phép cộng 2 dữ liệu 4 bit Hình I.12. Sơ đồ mạch logic thực hiện phép giải mã chọn 1 trong 4 tổ hợp 10 Nguyễn Trung Đồng – Tel 0983 410 866
  11. Ngoài ra, có thể tham khảo thêm các mạch dồn kênh, mạch mã hoá và giải mã trong các tài liệu Kỹ thuật điện tử số được nêu trong tài liệu tham khảo ở cuối giáo trình này. Lưu đồ trong Hình I.13 cho ta thấy sơ lược các bước cơ bản trong quá trình thiết kế một máy tính và phạm vi nghiên cứu về Kiến trúc và tổ chức máy tính. Software Hardware Logic designer Circuit designer System designer Computer Computer designer Application domains Application designer Electronic components High- Low- level Computer architecture level view view Computer organization 11 Nguyễn Trung Đồng – Tel 0983 410 866
  12. Chương II. Giới thiệu chung 1. Máy tính và kiến trúc máy tính 1.1. Mở đầu Máy tính được cấu thành từ các mạch điện tử tích hợp (integrated circuits – IC) rất phức tạp liên kết với nhau qua hệ thống kênh truyền dẫn được gọi là hệ thống BUS. Hình II.1 Các khối chức năng cơ bản được xây dựng với công nghệ tích hợp mật độ lớn gồm đơn vị xử lý trung tâm (CPU – Central Proccessing Unit), khối tạo xung nhịp (Clock), bộ nhớ (Memorry) và các chip tạo các cổng (Port Chips) ghép nối thiết bị ngoại vi như minh hoạ trên Hình II.1 CPU được xây dựng từ các mạch điện tử phức tạp, có khả năng thực thi tất cả các lệnh trong tập lệnh được mô phỏng trước. Bộ nhớ được xây dựng từ các chip nhớ, có khả năng lưu giữ các lệnh của chương trình và dữ liệu. Các chip tạo cổng điều khiển việc truy xuất đến các thiết bị ngoại vi như bàn phím (Keyboard), chuột (Mouse), màn hình (Monitor), máy in (Printer), các ổ đĩa (Disk Drivers). CPU chỉ truy xuất dữ liệu đến từ (input) và đi ra (output) thiết bị ngoại vi thông qua các chip tạo cổng. Cấu trúc chức năng của máy tính được mô phỏng trên Hình II.1, Hệ điều hành và Ngôn ngữ lập trình bậc cao điều khiển hoạt động của các mạch điện tử trong máy tính. Khi cấp nguồn, chương trình khởi tạo hệ thống sẽ nạp hệ điều hành 12 Nguyễn Trung Đồng – Tel 0983 410 866
  13. (boot hệ thống), ngôn ngữ lập trình sẽ được tải vào bộ nhớ nhờ hệ điều hành. Ở mức trên cùng, máy tính có thể thực thi các chương trình ứng dụng. Các chương trình ứng dụng được sử dụng nhiều như tạo các bảng tính, tạo văn bản, các bản vẽ, , được viết bằng các ngôn ngữ lập trình khác nhau như C, C++, hoặc là liên kết giữa các ngôn ngữ. Người ta sử dụng ngôn ngữ lập trình trong mối liên kết với hệ điều hành để điều khiển hoạt động chức năng của phần cứng. Ngôn ngữ máy là ngôn ngữ duy nhất bao gồm các chỉ lệnh (Instruction) mà phần cứng có thể hiểu và thực thi, được tạo ra từ các tổ hợp các số biểu diễn theo hệ nhị phân. Các mã nhị phân này được gọi là mã lệnh, chúng tạo nên tập lệnh của CPU, giá trị “0” hoặc “1” làm nhiệm vụ “ngắt” hoặc “đóng” dòng điện để điều khiển hoạt động của các phần tử logic trong mạch điện. Cần hiểu rằng, tất cả các CPU đều làm việc với mã máy. Một khi sử dụng ngôn ngữ lập trình bậc cao, sử dụng các phát biểu (Statements), các chương trình dịch (Compiler) sẽ chuyển đổi (dịch) chúng ra mã máy để CPU hiểu và thực hiện. Mặc dù vậy, vẫn có thể nói máy tính bao giờ cũng được cấu thành từ các khối chức năng chính sau: 1. Bộ nhớ trung tâm (Central Memory hoặc Main Memory). Bộ nhớ trung tâm là nơi lưu giữ chương trình và dữ liệu trước khi chương trình được thực hiện. 2. Đơn vị điều khiển (CU - Control Unit), điều khiển mọi hoạt động của tất cả các thành phần trong hệ thống máy tính theo chương trình mà máy tính cần thực hiện. 3. Đơn vị số học và Logic (ALU – Arithmetic & Logic Unit), thực hiện các thao tác xử lý dữ liệu thông qua các phép toán số học và Logic theo sự điều khiển của Đơn vị điều khiển. Đơn vị điều khiển CU và đơn vị số học-logic ALU được tích hợp trong một chip IC và được gọi là Đơn vị xử lý Trung tâm (CPU-Central Proccessing Unit). 4. Thiết bị vào (Input Device) thực hiện nhiệm vụ thu nhận các thông tin, dữ liệu từ thế giớ bên ngoài, biến đổi thành dạng tương thích với phương thức biểu diễn trong máy tính, đưa vào CPU xử lý hoặc ghi vào bộ nhớ. 5. Thiết bị ra (Output Device) thực hiện nhiệm vụ đưa thông tin, dữ liệu từ CPU hoặc bộ nhớ ra ngoài dưới các dạng thức được người sử dụng yêu cầu. Thiết bị vào và thiết bị ra được gọi chung là nhóm thiết bị ngoại vi (Peripherals). 13 Nguyễn Trung Đồng – Tel 0983 410 866
  14. Sau đây ta sẽ tìm hiểu nguyên lý kiến trúc và hoạt động của một máy tính thông qua một máy tính đơn giản nhất. Máy tính, ở dạng đơn giản nhất, được cấu thành từ bốn khối chức năng cơ bản sau: Khối điều khiển và xử lý dữ liệu: Khối chức năng này được tích hợp trong cùng một vi mạch gọi là Đơn vị xử lý trung tâm (CPU – Central Proccessing Unit). Khối lưu trữ dữ liệu được gọi là bộ nhớ (Memory). Khối chức năng cung cấp dữ liệu cho máy tính xử lý, hoặc phản ánh dữ liệu đã được xử lý do máy tính cung cấp, được gọi là khối các thiết bị nhập xuất (I/O devices). Các kênh truyền dẫn cung cấp sự liên lạc và trao đổi dữ liệu giữa các khối trên, được gọi là kênh liên kết hệ thống (BUS). Trong một máy tính, mỗi khối thực hiện các chức năng nói trên có thể tồn tại nhiều đơn vị, dưới các dạng khác nhau, trong đó CPU là quan trọng nhất. Đơn vị xử lý trung tâm (CPU) có thể xử lý được các lệnh với khuôn dạng từ lệnh, giả sử với độ dài 8 bit, như sau: B7 B6 B5 B4 B3 B2 B1 B0 Phần chứa mã lệnh Phần chứa địa chỉ toán hạng Lệnh được tạo từ hai phần: Mã lệnh và địa chỉ toán hạng Mã lệnh là một giá trị nhị phân 4 bit, mỗi tổ hợp là một lệnh có chức năng khác nhau, phần chứa địa chỉ toán hạng cũng là một giá trị nhị phân 4 bit, xác định vị trí của ô nhớ trong bộ nhớ. Phần địa chỉ xác định toán hạng mà lệnh trực tiếp xử lý. Đơn vị xử lý trung tâm gồm hai thành phần chức năng: Đơn vị số học- logic ALU (Arithmetic-Logic Unit) và đơn vị điều khiển CU (Control Unit) (Hình II.2.). Đơn vị điều khiển CU có chức năng lấy lệnh theo tuần tự được lưu giữ từ trong bộ nhớ, giải mã lệnh và tạo các tín hiệu điều khiển hoạt động của các khối chức năng bên trong và bên ngoài CPU. Lệnh đọc từ ô nhớ được đưa vào thanh ghi lệnh IR, được giải mã tại khối giải mã lệnh ID để xác định công việc CPU cần thực hiện. 14 Nguyễn Trung Đồng – Tel 0983 410 866
  15. S Flag s ALU Z C ACC TMP CP2 CP1 Thiết b ị ra MBR I/O MAR Thiết bị vào PC Bộ nhớ CU IR MEM RD ID CPi WR CPU Hình II.2. Sơ đồ cấu trúc máy tính đơn giản CU Đơn vị điều khiển CU gồm thanh ghi lệnh IR (Instruction Register), là nơi chứa lệnh mà CPU đọc về từ ô nhớ lệnh, bao gồm cả phần mã lệnh và phần địa chỉ toán hạng, khối giải mã lệnh ID (Instruction Decoder), mạch giải mã này giải mã lệnh để xác định nhiệm vụ mà lệnh yêu cấu CPU xử lý, tạo các tín hiệu điều khiển các tác vụ của CPU khi thực thi lệnh và thanh đếm chương trình PC (Program Counter). Thanh đếm chương trình PC làm nhiệm vụ con trỏ lệnh (Instruction Pointer), chứa địa chỉ của ô nhớ chứa lệnh sẽ thực thi trong tuần tự thực hiện chương trình. Do vậy sau khi CPU đọc được một lệnh từ bộ nhớ chương trình, sau khi được giải mã, thông qua điều khiển của CU thì PC được tăng nội dung lên để chỉ vào ô nhớ chứa lệnh tiếp theo. Trong trường hợp gặp lệnh rẽ nhánh hay lệnh gọi chương trình con, nội dung thanh đếm PC thay đổi tuỳ theo giá trị địa chỉ mà chương trình dịch gán cho nhãn hay tên chương trình con được xác định bởi người lập trình. CPU có các thanh ghi: thanh ghi gộp (Acc – Accummulator), thanh ghi tạm thời TEMP (temporary), thanh ghi đệm địa chỉ MAR (Memory Address Register), thanh ghi đệm bộ nhớ MBR (Memory Buffer Register), và thanh 15 Nguyễn Trung Đồng – Tel 0983 410 866
  16. ghi cờ Flags. Thanh ghi Acc được sử dụng để chứa nội dung một toán hạng, và thông thường là nơi chứa kết quả thực hiện phép toán, thanh ghi tạm thời chứa nội dung toán hạng thứ hai trong các phép toán hai ngôi. Nội dung thanh ghi MAR là địa chỉ của ô nhớ mà CPU đang truy xuất, còn nội dung thanh ghi MBR là dữ liệu đọc được từ bộ nhớ hoặc sẽ được ghi vào ô nhớ. Thanh ghi cờ Flags gồm các bit biểu diễn trạng thái của kết quả thực hiện phép toán xử lý dữ liệu của CPU, Trong trường hợp đơn giản, thanh ghi cờ có 3 bit, đó là bit dấu (S – Sign) biểu diễn giá trị dữ liệu là âm hay dương, bit không (Z-Zero) biểu diễn kết quả phép toán khác 0 hay bằng 0, bit nhớ (C – Carry) biểu diễn trạng thái kết quả phép toán có bit nhớ hay không có bit nhớ. Giá trị các bit cờ trạng thái được định nghĩa như sau: Kết quả là một số âm: (S) = 1 ; dấu ngoặc thể hiện nội dung của bit Kết quả bằng 0: (Z) = 1 Kết quả có nhớ: (C) = 1 Hoạt động thực thi một lệnh trong chương trình của máy tính có thể tóm tắt như sau: Chương trình và số liệu ban đầu được lưu giữ ở bộ nhớ trung tâm, đó là bộ nhớ ROM (Read Only Memory), RAM (Random Access Memory). 1. Bắt đầu chương trình, lệnh đầu tiên của chương trình trong vùng nhớ chương trình được đưa vào thanh ghi lệnh IR của đơn vị điều khiển (CU). Tác vụ được gọi là tác vụ nhận lệnh (Instruction Fetch). 2. CU tiến hành giải mã lệnh, xác định nội dung phép toán cần xử lý là phép tính nào, trên các dữ liệu nào. Đây là tác vụ giải mã lệnh (ID – Instruction Decoder). 3. Nếu lệnh đòi hỏi làm việc với các toán hạng (được xác định trong lệnh), CU xác định địa chỉ tương ứng của toán hạng trong vùng nhớ dữ liệu hoặc được nhập vào từ thiết bị ngoại vi. Tác vụ này được gọi là tạo địa chỉ toán hạng (GOA - Generate Operand Address). 4. Sau khi địa chỉ toán hạng được tạo, CU phát các tín hiệu điều khiển tới các thành phần liên quan để nhận toán hạng, đặt vào các thanh ghi xác định trong CPU. Tác vụ được gọi là nhận toán hạng (Operand Fetch). 16 Nguyễn Trung Đồng – Tel 0983 410 866
  17. 5. CU phát các tín hiệu điều khiển tới Đơn vị Số học-Logic (ALU). ALU thực hiện phép toán được yêu cầu trong mã lệnh. Tác vụ này gọi là thực hiện (Execute). 6. Kết quả xử lý được đặt trong thanh ghi gộp (Acc) hoặc được lưu vào bộ nhớ trong tuỳ thuộc sự xác định nơi lưu giữ thể hiện đích (destination) trong lệnh. Tác vụ được gọi là Ghi lại kết quả (Write Back). Trong trường hợp CU giải mã lệnh và đó là lệnh rẽ nhánh chương trình, CU tính địa chỉ ô nhớ chứa lệnh cần thực hiện tiếp và phát tín hiệu điều khiển để nhận lệnh về, công việc được tiến hành tuần tự như từ bước. Nếu không phải là lệnh rẽ nhánh chương trình, CPU phát các tín hiệu điều khiển để lấy về lệnh kế tiếp trong ô nhớ đứng ngay sau lệnh vừ thực hiện, hoạt động xẩy ra như từ bước 2. Khi máy tính được sử dụng để giám sát hay điều khiển một quá trình thực, việc giao tiếp giữa máy tính và con người được mô tả đơn giản hoá như ở Hình II.3. Thông qua chương trình giao tiếp và các thiết bị Vào/Ra, con người làm nhiệm vụ giám sát hoặc điều khiển hoạt động của máy móc hoặc quá trình. Computer Output Device Machine Input Device Man Hình II.3. Giao diện Máy tính - Con người - Máy móc Ở mức độ đơn giản và phổ biến nhất, con người giao tiếp trực tiếp với máy tính thông qua các thiết bị Vào và thiết bị Ra của nó. Các thiết bị này được gọi một tên chung là thiết bị ngoại vi (Peripherals hoặc I/O Devices). Con người gửi yêu cầu (lệnh hoặc dữ liệu) vào máy tính bằng cách sử dụng thiết bị nhập dữ liệu, máy tính xử lý dữ liệu và sau khi thực hiện xong gửi trả kết quả ra thiết bị xuất dữ liệu. Ở mức độ cao hơn con người sử dụng máy tính để điều khiển một đối tượng thứ ba (máy móc hoặc thiết bị). Con người gửi tín hiệu điều khiển vào máy tính, máy tính xử lý các dữ liệu được cung 17 Nguyễn Trung Đồng – Tel 0983 410 866
  18. cấp và trực tiếp gửi yêu cầu tới thiết bị để thiết bị thực hiện các thao tác đáp ứng yêu cầu của con người. Máy tính cũng có thể gửi kết quả xử lý ra thiết bị xuất để con người kiểm tra lại yêu cầu của mình. Với một mức độ tự động hóa cao hơn, con người chỉ gửi chương trình điều khiển thiết bị vào máy tính một lần, máy tính nhận dữ liệu, xử lý dữ liệu và gửi yêu cầu tới thiết bị. Về phần mình, thiết bị, sau khi đáp ứng yêu cầu của con người sẽ gửi trả kết quả về máy tính và trên cơ sở đó máy tính sẽ xử lý và gửi các tín hiệu điều khiển tiếp theo tới thiết bị. Như vậy máy tính là một thực thể có thể tương tác với môi trường bên ngoài. Máy tính nhận thông tin từ bên ngoài, xử lý thông tin nhận được và gửi trả lại kết quả. Đây là mối quan hệ trao đổi hai chiều, song luôn luôn xuất phát từ yêu cầu của con người. Máy tính không thể tự mình khởi đầu quá trình này. 1.2. Chức năng của máy tính Chức năng của máy tính là thực hiện chương trình thông qua xử lý một tập lệnh do người lập trình cung cấp. Chương trình là tập hợp các lệnh được người lập trình chọn lọc và sắp xếp theo một tuần tự chặt chẽ thông qua nguyên tắc xử lý, giải quyết một vấn đề cụ thể (hay còn gọi là thuật giải). Để thực hiện chức năng này, chương trình được lưu giữ trong bộ nhớ, việc thực hiện chương trình thực chất là các tác vụ thực thi lệnh theo tuần tự đã được người lập trình quy định. Quá trình thực thi 1 lệnh, như đã trình bày ở trên, gồm các giai đoạn sau: 1. Nhận lệnh IF-Instruction Fetch 2. Giải mã lệnh ID-Instruction Decoder 3. Tạo địa chỉ toán hạng GOA-Generate Operand Address 4. Nhận toán hạng OF-Operand Fetch 5. Xử lý lệnh EX-Execute 6. Lưu kết quả WB-Write Back Generate Instruction Instruction Operand Write Operand Execute Fetch Decode Fetch Back Address IF ID GOA OF EX WB Thời gian 18 Nguyễn Trung Đồng – Tel 0983 410 866
  19. Việc đảm bảo thực hiện chương trình theo tuần tự, như đã nói ở trên, là do CU đảm nhận thông qua việc điều khiển sự thay đổi nội dung của thanh đếm chương trình PC. Tuần tự các lệnh trong chương trình là do người lập trình quyết định thông qua việc viết chương trình theo thuật giải. Khi thực hiện một chương trình, thông thường máy tính thực hiện các công việc sau: Thứ nhất, Xử lý dữ liệu: Xử lý các yêu cầu của con người/thiết bị trên cơ sở các dữ liệu được nhập vào. Đây là chức năng quan trọng nhất. Dữ liệu có thể ở nhiều dạng khác nhau và các yêu cầu xử lý cũng rất khác biệt. Tuy nhiên máy tính chỉ có thể thực hiện được một số lượng hữu hạn các thao tác xử lý cơ bản, người lập trình dựa trên các khả năng xử lý dó mà tạo ra những khả năng xử lý các vấn đề lớn hơn và phức tạp hơn thông qua công việc lập trình. Thứ hai, Lưu trữ dữ liệu: Muốn công việc xử lý dữ liệu đạt hiệu quả cao, máy tính phải có khả năng lưu trữ tạm thời dữ liệu và lưu trữ dữ liệu dài hạn để tái sử dụng sau này. Thứ ba, Di chuyển dữ liệu: Để phục vụ việc xử lý, dữ liệu phải có thể di chuyển từ điểm này tới điểm khác bên trong máy tính. Ngoài ra, để có dữ liệu cho xử lý và gửi kết quả ra bên ngoài, máy tính phải có khả năng trao đổi dữ liệu với môi trường bên ngoài. Thứ tư, Điều khiển: Để thực hiện có hiệu quả ba chức năng nói trên, các tác vụ máy tính thực hiện phải được điều khiển một cách đồng bộ và hợp lý. Quy trình điều khiển này sẽ được thực hiện nhờ con người cung cấp lệnh cho máy tính thi hành thông qua một đơn vị điều khiển bên trong máy tính. Kiến trúc máy tính phải được thiết kế để máy tính có khả năng thực hiện những công việc này. Kênh dữ liệu liên kết hệ thống Hình II.4. Kênh dữ liệu liên I/O kết các thành phần chức năng #0 Program I/O I/O CPU Memory Interface . #1 . Data . . I/O Kênh liên kết trao đổi dữ liệu/lệnh #N 19 Nguyễn Trung Đồng – Tel 0983 410 866
  20. DMA Acknowledge Line DMA DMA Request Line Handshaking CLOCK Signals I/O #0 Program I/O I/O #1 Memory CPU . Interface . Data . . . . Control I/O #N Interrupt . Request . Logic . Interrupt Request Hình II.5. Kiến trúc Máy tính nhìn từ góc độ cấu trúc Signals 1.3. Kiến trúc máy tính và cấu trúc máy tính Để tìm hiểu kiến trúc máy tính, cần phân biệt rõ sự khác nhau cơ bản, thuộc về nguyên lý giữa kiến trúc (architecture) và tổ chức và cấu trúc (organization & structure) của một máy tính: Kiến trúc máy tính nghiên cứu những thuộc tính của một hệ thống mà người lập trình có thể nhìn thấy được, những thuộc tính quyết định trực tiếp đến việc thực thi một chương trình tính toán, xử lý dữ liệu Cấu trúc máy tính nghiên cứu về các thành phần chức năng và sự kết nối giữa chúng để tạo nên một máy tính, nhằm thực hiện những chức năng và tính năng kỹ thuật của kiến trúc. Những thuộc tính liên quan đến kiến trúc bao gồm tập lệnh cơ bản mà CPU có thể thực hiện, số bit được sử dụng để biểu diễn các loại dữ liệu khác nhau, cơ chế nhập/xuất dữ liệu, và các kỹ thuật đánh địa chỉ ô nhớ, v.v Cấu trúc máy tính lại bao gồm các thuộc tính kỹ thuật mà người lập trình không nhận biết được như các tín hiệu điều khiển, giao diện giữa máy tính và thiết bị ngoại vi, công nghệ xây dựng bộ nhớ, v.v 20 Nguyễn Trung Đồng – Tel 0983 410 866
  21. Chẳng hạn việc quyết định máy tính có cần một lệnh cơ bản để thực hiện phép nhân hay không là vấn đề về kiến trúc. Còn thể hiện lệnh nhân bằng các đơn vị vật lý cụ thể nào (chẳng hạn, một đơn vị thuộc phần cứng đặc biệt, hay thực hiện lặp nhiều phép cộng) lại là vấn đề về cấu trúc. Để làm ví dụ minh họa sự khác biệt đó ta có thể xem các máy tính ở Trung tâm nghiên cứu nào đó. Các máy tính này có thể có kiến trúc rất giống nhau theo quan điểm của người lập trình. Chúng có cùng số thanh ghi (tức là thiết bị lưu trữ tạm thời), có cùng một tập lệnh cơ bản và dạng các toán hạng được nạp vào bộ nhớ giống nhau. Tuy nhiên các hệ thống này khác nhau về mặt cấu trúc: số bộ vi xử lý khác nhau, kích thước bộ nhớ của chúng cũng khác hẳn nhau, cách thức dữ liệu được truyền từ bộ nhớ đến bộ vi xử lý cũng không giống nhau. Kiến trúc máy tính thường được ứng dụng trong khoảng thời gian dài, hàng chục năm; trong khi cấu trúc thường thay đổi cùng với sự phát triển của công nghệ. Trên cùng một kiến trúc, các hãng chế tạo máy tính có thể đưa ra nhiều loại máy tính khác nhau về cấu trúc, do đó các đặc trưng về hiệu suất, giá thành cũng khác nhau. Các sản phẩm của IBM là một ví dụ điển hình. Kiến trúc máy tính của IBM vẫn còn được ứng dụng cho tới ngày nay và là ngọn cờ của thương hiệu IBM. Trong lĩnh vực máy PC, người ta thường không phân biệt rõ ràng giữa kiến trúc và cấu trúc vì sự khác biệt giữa hai khái niệm này đã rút ngắn đáng kể. Sự phát triển của công nghệ không chỉ tác động lên cấu trúc mà còn tạo điều kiện phát triển các kiến trúc mạnh hơn và nhiều tính năng hơn; và do đó tác động qua lại giữa kiến trúc và cấu trúc thường xuyên hơn. Ngoài kiến trúc máy tính và cấu trúc máy tính còn có một lĩnh vực là kỹ thuật máy tính nghiên cứu việc xây dựng cụ thể các hệ thống: chẳng hạn như độ dài dây dẫn tạo BUS, kích cỡ các vi mạch, v.v. Người lập trình thường cần đến kiến thức về kiến trúc, đôi khi cần những hiểu biết về cấu trúc, nhưng thường rất ít khi cần đến những hiểu biết về kỹ thuật máy tính. Hiểu kiến trúc máy tính có thể giúp người lập trình nhận biết khi nào chương trình của mình tạo ra chạy chưa đạt hiệu suất tối đa của hệ thống, hiểu được các kỹ năng làm tăng hiệu suất chương trình, v.v. 1.4. Kiến trúc máy tính Von Neumann John von Neumann (Neumann János, 28 tháng 12, 1903 – 8 tháng 2, 1957) là một nhà toán học người Hungary và là một nhà bác học thông thạo nhiều lĩnh vực, đã có nhiều đóng góp vào các chuyên ngành vật lý lượng tử, giải tích hàm, lý thuyết tập hợp, kinh tế, khoa học máy tính, giải tích số, thủy 21 Nguyễn Trung Đồng – Tel 0983 410 866
  22. động lực học , thống kê và nhiều lĩnh vực toán học khác. Đáng chú ý nhất, von Neumann là nhà tiên phong của máy tính kỹ thuật số hiện đại và áp dụng của lý thuyết toán tử (operator theory) vào cơ học lượng tử. Năm 1945, ông đã đưa ra một đề nghị về kiến trúc máy tính như sau: Lệnh (Instruction) và dữ liệu (Data) phải được lưu giữ trong một bộ nhớ ghi/đọc được. Từng ô nhớ trong bộ nhớ phải được định vị bằng địa chỉ. Sự định địa chỉ là tuần tự và không phụ thuộc vào nội dung của từng ô nhớ. Chương trình xử lý, giải bài toán phải thực hiện tuần tự từ lệnh này đến lệnh tiếp theo, từ lệnh bắt đầu đến lệnh cuối cùng. 2. Tổng quan về kiến trúc máy tính Trên cơ sở nguyên lý kiến trúc Von Neumann, máy tính là một hệ thống bao gồm đơn vị xử lý trung tâm, bộ nhớ và các thiết bị vào/ra được kết nối với nhau. Hệ thống đường truyền dẫn liên kết các khối là một trong những vấn đề mà các hãng chế tạo máy tính gặp nhiều nan giải nhất. Để nắm được những kiến thức cơ bản về kiến trúc, chúng ta sẽ bắt đầu bằng việc tìm hiểu về hướng phát triển kiến trúc thông qua liên kết CPU với những khối chức năng cơ bản nhất trong hệ thống: bộ nhớ, thiết bị vào/ra, đơn vị điều khiển truy cập trực tiếp bộ nhớ, đơn vị điều khiển ngắt, đơn vị tạo xung nhịp, đơn vị diều khiển, v.v 2.1. Liên kết các khối khối chức năng 2.1.1. Bộ xử lý trung tâm (CPU) và bộ nhớ Nói đến máy tính tức là bàn luận về sự phối hợp giữa thực hiện xử lý (processing) dữ liệu và đưa ra kết luận (making decisions). Việc xử lý và đưa ra kết luận được thực hiện bởi Đơn vị xử lý trung tâm hay còn gọi là CPU của máy tính. Vậy thì “bộ não” của máy tính chính là CPU. CPU không phải là một bộ phận chức năng biết suy nghĩ và biết thực hiện công việc, song nó có khả năng thực hiện những ý đồ và công việc của người sử dụng thông qua các lệnh. Những ý tưởng của người sử dụng được thể hiện 22 Nguyễn Trung Đồng – Tel 0983 410 866
  23. qua chương trình. Chương trình là tập hợp các lệnh được chọn lọc và sắp xếp theo một tuần tự chặt chẽ thông qua nguyên tắc xử lý, giải quyết một vấn đề cụ thể (hay còn gọi là thuật giải). Chương trình và dữ liệu tương ứng được lưu giữ trong bộ nhớ của máy tính. Bộ nhớ được chia ra thành 2 phần: Phần lưu giữ chương trình được gọi là bộ nhớ chương trình hay Program Memory. Phần lưu giữ dữ liệu (dữ liệu để xử lý và dữ liệu kết quả) được gọi là bộ nhớ dữ liệu hay Data Memory. Program Memory CPU A Central L U Proccessing Data Unit Memory Kênh dữ liệu Kênh điều khiển Kênh địa chỉ Như vậy, CPU cần có bộ nhớ để lưu giữ chương trình và dữ liệu. Theo hình vẽ, thấy rằng CPU chỉ đọc chương trình, song với dữ liệu, nó phải đọc ra để xử lý và phải ghi lại kết quả, tương ứng với các mũi tên một chiều và mũi tên hai chiều trên hình. 2.1.2. CPU, bộ nhớ và thiết bị vào/ra CPU liên lạc với các thiết bị bên ngoài (hay còn gọi là thiết bị ngoại vi – peripherals) để đọc dữ liệu, lệnh và đưa ra kết quả đã được xử lý, ví dụ như bàn phím, máy in, màn hình Chức năng của các thiết bị này là giao diện giữa người sử dụng và máy tính. Các thiết bị này được gọi chung là thiết bị vào/ra, hay thiết bị nhập/xuất, (I/O device). Một máy tính có thể có rất nhiều thiết bị vào/ra. DMA Acknowledge Line DMA DMA Request Line Handshaking signals I/O #0 Program I/O I/O #1 Memory CPU Interface . Data . . . . . I/O Hình II.6. CPU trong liên kết với bộ nhớ, thiết bị vào/ra và khả năng #N 23 Nguyễn Trung Đồng – Tel 0983 410 866 truy cập trực tiếp bộ nhớ
  24. Thông thường, các thiết bị vào/ra không tương thích được với CPU về mặt mức tín hiệu (điện áp thể hiện mức logic “0” hoặc “1”) và tốc độ v.v , do đó ta cần phải bổ sung vào giữa chúng các khối phối ghép (hay còn gọi là giao diện – I/O interface). 2.1.3. CPU, bộ nhớ, thiết bị vào ra và khả năng truy cập trực tiếp bộ nhớ Rõ ràng, việc trao đổi dữ liệu giữa bộ nhớ và thiết bị ngoại vi đều phải thông qua CPU. Mặc dù có lúc nào đó CPU không có yêu cầu dữ liệu, nhưng nó điều khiển quá trình trao đổi dữ liệu của mọi thành phần trong máy tính. Điều đó làm cho CPU tham gia vào mọi hoạt động và tốc độ xử lý của CPU chậm đi rất nhiều. Để giải quyết vấn đề này, kiến trúc máy tính đưa ra giải pháp thiết bị vào/ra được phép truy cập trực tiếp bộ nhớ (DMA-Direct Memory Access). Để thay thế CPU trong việc truy cập trực tiếp vào bộ nhớ, thiết bị vào/ra được ghép thêm đơn vị điều khiển truy cập trực tiếp bộ nhớ DMAC (DMA Controler). Cơ chế này thực sự mang lại hiệu quả lớn trong các hệ thống máy tính thu thập và xử lý những khối dữ liệu phức tạp và được thực hiện như sau: Khi thiết bị vào ra yêu cầu truy cập vào bộ nhớ, thay vì CPU tham gia vào toàn bộ quá trình này, thiết bị vào/ra đưa ra yêu cầu thực hiện truy cập trực tiếp bộ nhớ tới CPU thông qua DMA Request Line. CPU nhận yêu cầu, thực hiện việc trao quyền sử dụng đường truyền dẫn dữ liệu cho thiết bị vào/ra (tức là treo dường truyền dẫn dữ liệu giữa bộ nhớ, thiết bị vào/ra và CPU), sau đó gửi thông báo nhận biết và đồng ý cho thiết bị vào/ra qua DMA Acknowledge Line). Những tín hiệu trao đổi này được gọi là tín hiệu bắt tay (Handshaking) Thiết bị vào/ra thực hiện việc Ghi hoặc Đọc bộ nhớ trực tiếp qua đường truyền dẫn dữ liệu không thông qua CPU. Như vậy CPU có thể tiếp tục thực hiện các thao tác xử lý khác. DMA Acknowledge Line DMA DMA Request Line I/O #0 Program I/O I/O #1 Memory CPU . Data Interface . . . . I/O Hình II.7. CPU, #N bộ nhớ, thiết bị vào ra Interrupt . và khả năng sử dụng Request Logic24 Nguyễn Trung. Đồng – Tel 0983 410 866 ngắt .
  25. 2.1.4. CPU, bộ nhớ, thiết bị vào ra và khả năng sử dụng ngắt Khối chức năng tiếp theo thực hiện việc đáp ứng yêu cầu phục vụ của CPU đối với các thiết bị vào/ra là thiết bị điều khiển ngắt (Interrupt Controller). Để hiểu ngắt cần thiết như thế nào, ta xét những khả năng sau: Thiết bị vào/ra chỉ cần đến CPU khi có sự trao đổi dữ liệu giữa CPU với thiết bị vào/ra. Một số thiết bị vào/ra hoạt động rất chậm so với khả năng xử lý của CPU, do vậy, việc CPU phải chờ đợi để trao đổi dữ liệu làm mất rất nhiều thời gian. Dựa trên thực tế này, kiến trúc máy tính đề nghị một giải pháp hữu hiệu nhằm làm tăng hiệu suất hoạt động xử lý dữ liệu của CPU cũng như của máy tính nói chung. Giải pháp dựa trên quy trình sau: Thiết bị ngoại vi muốn làm việc với CPU phải gửi yêu cầu ngắt đến CPU thông qua tín hiệu yêu cầu ngắt (Interrupt Request Signal). CPU tạm dừng tiến trình đang thực hiện, gửi tín hiệu chấp nhận phục vụ ngắt cho thiết bị vào/ra. CPU tiến hành phục vụ thiết bị vào/ra thực chất là thực hiện việc trao đổi dữ liệu, khi thực hiện xong thì quay về tiếp tục công việc đang bỏ dở. 2.1.5. Khối xung nhịp (Clock) và khối điều khiển (Control) Đã có thể nhìn thấy rằng, chỉ cần thêm vào 2 khối cơ bản nữa là ta có một cấu trúc máy tính hoàn chỉnh: Khối xung nhịp (Clock) và khối điều khiển (Control). Có thể nói khối điều khiển là sợi chỉ xuyên suốt, chỉ đạo mọi hoạt động của tất cả các khối chức năng nhằm đảm bảo hoạt động ổn định cho một máy tính, không bao giờ xẩy ra bất cứ sự tranh chấp nào. Khối tạo nhịp Clock thực hiện việc định thời cho mọi hoạt động trong máy tính được đồng bộ hoá. 2.2. Kiến trúc máy tính nhìn từ góc độ cấu trúc cơ bản Một hệ thống máy tính phải có các tính năng cơ bản sau: 1. Khả năng thực hiện Vào/Ra - là khâu nối hay giao diện giữa người sử dụng và máy tính 2. Khả năng Ngắt - cho phép máy tính hoạt động hiệu suất hơn và mềm dẻo hơn. 25 Nguyễn Trung Đồng – Tel 0983 410 866
  26. 3. Khả năng Truy Cập Trực tiếp Bộ Nhớ - cho phép các thiết bị vào/ra làm việc với bộ nhớ mà không ảnh hưởng đến tiến trình thực hiện chương trình của CPU Các khối chức năng chủ yếu gồm: 1. CPU - đó là bộ não của máy tính 2. Bộ nhớ - nơi lưu giữ mọi dữ liệu của máy tính 3. Khối điều khiển - Điều khiển sự lưu thông của các dòng dữ liệu trong tiến trình, đảm bảo không xẩy ra tranh chấp giữa các khối chức năng 4. Logic yêu cầu ngắt thiết lập quan hệ phục vụ hợp lý của CPU với các thiết bị vào/ra 5. Khối phối ghép vào/ra thực hiện việc đồng nhất hoá các loại tín hiệu, định thời giữa CPU và các thiết bị vào/ra 6. Tạo nhịp Clock thực hiện việc định thời cho toàn bộ hệ thống. DMA Acknowledge DMA Line DMA Request Line Handshaking CLOCK Signals I/O BUS DỮ LIỆU #0 BUS ĐỊA CHỈ Program I/O I/O #1 Memory CPU . Interface . Data . . . . Control I/O Các tín hiệu điều khiển #N Interrupt Request . Logic Các tín hiệu yêu cầu. ngắt . Interrupt Request Hình II.8. Kiến trúc Máy tính nhìn từ góc độ cấu trúc Thuật ngữ Kiến trúc máy tính được dùng để môSignals tả sơ đồ tổ chức nguyên lý. Thuật ngữ được dùng nhằm minh hoạ những khối chức năng cần thiết và các kênh truyền dẫn liên kết chúng để cấu thành một máy tính. 26 Nguyễn Trung Đồng – Tel 0983 410 866
  27. Trong các chương tiếp theo, chúng ta sẽ tìm hiểu phần kiến trúc các BUS hệ thống, kiến trúc CPU, kiến trúc khối điều khiển. “Kiến trúc” nôm na có nghĩa là các sơ đồ các tổ hợp liên kết các khối-chức năng và cấu hình hệ thống. 3. Biểu diễn thông tin trong máy tính Các máy tính xử lý các thông tin số và chữ. Các thông tin được biểu diễn dưới dạng mã nhất định. Bản chất vật lý của việc biểu diễn thông tin là điện áp (“0” ứng với không có điện áp, “1” ứng với điện áp ở mức quy chuẩn trong mạch điện tử) và việc mã hoá các thông tin số và chữ được tuân theo chuẩn quốc tế. Mã hiệu để mã hoá các thông tin cho máy tính xử lý là các giá trị của biến nhị phân "0" hoặc "1", tương ứng với biến logic "False" hoặc "True". Một biến chỉ nhận một trong hai giá trị duy nhất là “0” hoặc “1” được gọi là một bit (Binary Digit). Hai trạng thái này của bit, thực chất là các giá trị tương ứng với "False" hoặc "True", hay trạng thái "tắt" hoăc "đóng" của một công tắc điện, được sử dụng để mã hoá cho tất cả các ký tự (gồm số, chữ và các ký tự đặc biệt khác). Các bit được ghép lại thành các đơn vị mang thông tin đầy đủ - các mã tự - cho các ký tự biểu diễn các số, các ký tự chữ và các ký tự đặc biệt khác. Bit (BInary digiT) là đơn vị cơ bản mang thông tin trong hệ đếm nhị phân. Các mạch điện tử trong máy tính phát hiện sự khác nhau giữa hai trạng thái (điện áp mức “1” và điện áp mức “0”) và biểu diễn hai trạng thái đó dưới dạng một trong hai số nhị phân “1” hoặc “0”. Nhóm 8 bit ghép kề liền nhau, tạo thành đơn vị dữ liệu cơ sở của máy tính được gọi là 1 Byte. Do được lưu giữ tương đương với một ký tự (số, chữ hoặc ký tự đặc biệt) nên Byte cũng là đơn vị cơ sở để đo các khả năng lưu giữ, xử lý của các máy tính. Các thuật ngữ như KiloByte, MegaByte hay GigaByte thường được dùng làm bội số trong việc đếm Byte, dĩ nhiên theo hệ đếm nhị phân, nghĩa là: 1KiloByte = 1024 Bytes, 1MegaByte = 1024 KiloBytes, 1GigaByte = 1024 MegaBytes. Các đơn vị này được viết tắt tương ứng là KB, MB và GB. 3.1. Mã hoá các thông tin không số Có hai loại mã phổ cập nhất được sử dụng là mã ASCII và EBCDIC. Mã ASCII (American Standard Code for Information Interchange) dùng 7 bits để mã hoá các ký tự 27 Nguyễn Trung Đồng – Tel 0983 410 866
  28. Mã EBCDIC (Extended Binary Coded Decimal Interchange Code) dùng cả 8 bits (1 Byte) để mã hoá thông tin Loại mã trước đây được dùng nhiều trong ngành bưu điện, trong các máy teletype là mã BAUDOT, chỉ sử dụng 5 bits để mã hoá thông tin. Tồn tại nhiều loại mã khác nhau, nhưng hầu như không được sử dụng trong các máy tính thông dụng 3.2. Hệ đếm thập phân Từ xa xưa con người đã sử dụng công cụ tự nhiên và sẵn có nhất của mình để đếm các vật, đó là các ngón tay trên hai bàn tay của mình. Vì hai bàn tay chỉ có 10 ngón nên hệ đếm thập phân mà chúng ta sử dụng ngày nay là kết quả tự nhiên của cách đếm đó. Hệ đếm thập phân sử dụng 10 kí hiệu khác nhau để biểu diễn các số: 0, 1, 2, , 9. Để biểu diễn các số lớn hơn 10, hệ đếm thập phân sử dụng kí pháp vị trí. Theo kí pháp này giá trị mà kí hiệu biểu diễn phụ thuộc vào vị trí của nó trong dãy kí hiệu. Ví dụ 2 trong số 29 biểu diễn số 20, nhưng trong 92 biểu diễn số 2. Cũng cần nhắc lại rằng: tất cả các hệ đếm đều tuân thủ ký pháp vị trí. Với các số 0, 1, 2, , 9 và kí pháp vị trí chúng ta có thể biễu diễn mọi số tự nhiên lớn tùy ý. Quy tắc biểu diễn tổng quát một số tự nhiên trong hệ thập phân là nn 1 an a n 1 a 1 a 0 a n 10 a n 1 10 a 1 10 a 0 Ví dụ 2158 2 1032 1 10 5 10 8 Với các số thập phân chúng ta sử dụng lũy thừa âm của 10 với quy tắc tương tự: 1 2nn 1 0.a1 a 2 an 1 a n a 1 10 a 2 10 a n 1 10 a 1 10 0.2158 2 10 1 1 10 2 5 10 3 8 10 4 126.5 1 1021 2 10 6 5 10 Ở đây 10 được gọi là cơ số của hệ đếm và các số 10-n, , 10-1,101, 102, , 10n được gọi là các trọng số. Lưu ý rằng thay cho 10 chúng ta có thể sử dụng số tự nhiên a bất kỳ và kí pháp vị trí để biểu diễn mọi số cũng với quy tắc trên. Khi đó hệ đếm 28 Nguyễn Trung Đồng – Tel 0983 410 866
  29. được gọi là hệ đếm cơ số a. Ví dụ như hệ đếm cơ số 12 dùng để biểu diễn thời gian. 3.3. Hệ đếm nhị phân Máy tính số được xây dựng từ các mạch điện tử. Các mạch điện tử trong máy tính phân biệt được sự khác nhau giữa hai trạng thái (có dòng điện hay không, điệp áp cao hay thấp, v.v.) và biểu diễn các trạng thái đó dưới dạng một trong hai số 1 hoặc 0. Vì vậy các số 0 và 1 rất thích hợp và đủ để biểu diễn các số tùy ý trong máy tính. Việc chế tạo một mạch điện tin cậy có thể phân biệt được sự khác nhau giữa 1 và 0 tương đối dễ và rẻ, hơn nữa máy tính có khả năng xử lý nội bộ các số 0 và 1 rất chính xác. Các số 0 và 1 được gọi là các số nhị phân. Hệ đếm nhị phân là hệ đếm chỉ dùng các số 0 và 1 và kí pháp vị trí để biểu diễn các số. Trong hệ đếm này 2 là cơ số, các số , 2-2, 2-1, 20, 21, 22, v.v. là trọng số. Ví dụ số thập phân 126.5 được biểu diễn trong hệ nhị phân với dạng: 4 3 2 1 0 1 26.510 11010.1 2 1 2 1 2 0 2 1 2 0 2 1 2 (chỉ số dưới biểu diễn cơ số của hệ đếm). 4. Chuyển đổi giữa các hệ đếm 4.1. Chuyển đổi hệ thập phân sang hệ nhị phân Để chuyển đổi một số ở hệ thập phân sang hệ nhị phân cần thực hiện các bước sau: 1. Tách phần nguyên và phần thập phân; 2. Chuyển đổi phần nguyên và phần thập phân sang hệ nhị phân; 3. Ghép lại thành kết quả. 4.1.1 Chuyển đổi phần nguyên Lấy phần nguyên chia cho 2, được thương số và phần dư. Phần dư dùng làm kết quả chuyển đổi, phần thương số được tiếp tục chia cho 2. Thực hiện quá trình này cho đến khi thương số bằng 0 thì dừng. Các phần dư được viết ghép lại từ dưới lên theo chiều mũi tên. Ví dụ: Đổi số 173D ra số nhị phân 173 2 dư 1 k0 Vậy 173D = 10101101B 86 2 dư 0 k1 29 Nguyễn Trung Đồng – Tel 0983 410 866
  30. 43 2 dư 1 k2 21 2 dư 1 k3 10 2 dư 0 k4 5 2 dư 1 k5 2 2 dư 0 k6 1 2 dư 1 k7 0 4.1.2. Chuyển đổi phần thập phân Lấy phần thập phân nhân với 2. Nếu tích lớn hơn 1 thì lấy 1 làm kết quả và chỉ giữ lại phần thập phân; nếu tích nhỏ hơn 1 thì lấy 0 làm kết quả. Thực hiện quá trình này cho đến khi tích bằng 1 thì dừng. Các kết quả trong từng bước được viết ghép vào bên phải. Ví dụ: Chuyển đổi 19.62510 sang hệ nhị phân: Bước 1: Tách 19.62510 thành phần nguyên và phần thập phân ta được 19 và 0.625 Bước 2: Chuyển đổi phần nguyên 19 được 100112 và phần thập phân 0.625 được 0.1012. Bước 3: Ghép lại ta được kết quả 19.62510 =10011.1012. Ví dụ: Chuyển đổi số 0.8128 thành số nhị phân.Thực hiện phép nhân liên tiếp với 2, phần nguyên của tích bao giờ cũng là các giá trị hoặc bằng “0” hoặc bằng “1”, thu được kết quả sau: 0.8128 x 2 = 1.6256 = 1 + 0.6256 0.6256 x 2 = 1.2512 = 1 + 0.2512 0.2512 x 2 = 0.5024 = 0 + 0.5024 0.5024 x 2 = 1.0048 = 1 + 0.0048 0.0196 x 2 = 0.0392 = 0 + 0.0392 0.0392 x 2 = 0.0784 Quá nhỏ có thể bỏ qua Như vậy, 0.8128D  0.11010B 4.2 Chuyển đổi hệ nhị phân sang các hệ Hexa, Octal Dữ liệu số trong máy tính được biểu diễn theo hệ đếm nhị phân. Từ nhớ cơ bản của các loại máy tính đều tuân thủ chuẩn của IBM, nghĩa là theo từng Byte. Mỗi Byte gồm 8 bit nhị phân. Tuy nhiên, cách viết một số liệu nhị phân không thích hợp với chách nhìn và nhận biết độ lớn, nhất là khi dữ liệu là một số có độ dài nhiều Byte. Do vậy, ta hay sử dụng các phương pháp 30 Nguyễn Trung Đồng – Tel 0983 410 866
  31. biểu diễn theo hệ đếm Hexa (hệ đếm cơ số 16). Một thuận lợi cơ bản ở đây là một ký tự Hexa có thể đại diện cho một dữ liệu nhị phân 4 bit. Như vậy mỗi byte có thể biểu diễn một số nhị phân hoặc có thể tách ra hai nhóm, mỗi nhóm 4 bit và dữ liệu lưu trong mỗi byte có thể biểu diễn dưới dạng hai ký tự số hexa. Vì trong hệ hexa cần 16 kí hiệu khác nhau, ngoài các số 0, 1, , 9, người ta bổ sung thêm các chữ A, B, C, D, E và F với các trọng số tương ứng trong hệ đếm thập phân là: AH = 10D, BH = 11D, CH = 12D, DH = 13D, EH = 14D, FH = 15D. Ví dụ: số BBH = 187D, C7H = 199D. Sự tiện dụng của hệ đếm hexa là ở chỗ ta dễ dàng chuyển đổi số nhị phân thành hexa và ngược lại theo quy tắc sau: Giả sử cho số nhị phân 10001011B. Để đổi thành số hexa ta chia dãy này thành từng nhóm 4 số: 1000 và 1011. Thay các nhóm 4 số bằng số hexa tương ứng cho trong bảng sau, ta được 8BH. Ngược lại, nếu có số C7H, ta chỉ đơn giản ghép các nhóm số nhị phân tương ứng 1100 và 0111 sẽ được biểu diễn nhị phân 11000111B. Nhị phân Hexa Thập Nhị phân Hexa Thập phân phân 0000 0 0 1000 8 8 0001 1 1 1001 9 9 0010 2 2 1010 A 10 0011 3 3 1011 B 11 0100 4 4 1100 C 12 0101 5 5 1101 D 13 0110 6 6 1110 E 14 0111 7 7 1111 F 15 5. Các phép tính với số nhị phân Trong hệ đếm thập phân chúng ta đã quen thuộc với bốn phép tính cơ bản: cộng, trừ nhân và chia. Trong hệ nhị phân, chúng ta cũng dễ dàng thực hiện các phép tính này. 31 Nguyễn Trung Đồng – Tel 0983 410 866
  32. 5.1. Phép cộng Phép cộng được thực hiện với quy tắc: 0 + 0 =0 1 + 0 =1 0 + 1 = 1 1 + 1 = 0 và nhớ 1 Giá trị 1 + 1 = 2, nhưng vì trong hệ nhị phân chỉ có hai số 0 và 1, mặt 2 khác biểu diễn của 2 trong hệ nhị phân là 2 = 1 2 + 0 = 102 nên kết quả chính là 0 và nhớ 1. Ví dụ: 1 1 0 + 0 1 1 = 1 0 0 1 5.2. Phép trừ Phép trừ là phép toán ngược với phép cộng và được thực hiện với quy tắc: 0 - 0 =0 1 - 0 =1 1 - 1 = 0 0 - 1 = 1 và mượn 1 Trong quy tắc cuối cùng 0 - 1 = 1, vì số bị trừ nhỏ hơn số trừ nên phải mượn 1 từ số ở vị trí cao hơn (bên trái) Ví dụ: 1 1 0 - 0 1 1 = 0 1 1 5.3. Phép nhân Cũng giống như trong hệ thập phân, phép nhân được thực hiện với quy tắc: 0 0 = 0 1 0 = 0 32 Nguyễn Trung Đồng – Tel 0983 410 866
  33. 0 1 = 0 1 1 = 1 Ví dụ: 1 1 0 0 1 0 1 = 1 1 0 0 + 0 0 0 0 1 1 0 0 = 1 1 1 1 0 0 5.4. Phép chia Phép chia là phép ngược của phép nhân. Phép chia cho 0 không có nghĩa và: 0 : 1 = 0 1 : 1 = 1 Ví dụ: 1 1 0 0 1 : 1 0 1 = 1 0 1 6. Biểu diễn dữ liệu số trong máy tính 6.1. Biểu diễn số và số âm Trong máy tính các số được biểu diễn bằng dãy các số nhị phân, ví dụ 1910 = 100112. Mỗi số nhị phân trong dãy biểu diễn này được gọi là bit. Như vậy bit chỉ có thể nhận một trong hai giá trị "0" hoặc "1". Bit là đơn vị cơ bản nhất, nhỏ nhất để biểu diễn dữ liệu trong máy tính. Với 7 bit ta chỉ biểu diễn được các số từ 0 = 00000002 đến 11111112 (= 12710). Để biểu diễn được các giá trị âm từ -127 đến 0, tức từ -11111112 đến 00000002, ta cần sử dụng thêm 1 bit để đánh dấu. Đây là bit thứ 8, gọi là bit dấu và nằm ở vị trí cao nhất (bên trái) trong số nhị phân. Theo quy ước chung số dương có bit dấu là 0, số âm có bit dấu là 1. 6 5 4 3 2 1 0 Bit dấu 2 2 2 2 2 2 2 S D6 D5 D4 D3 D2 D1 D0 Trên thực tế người ta còn sử dụng số bù để biểu diễn số âm. Kỹ thuật này cho phép máy tính có thể thực hiện phép trừ như là phép cộng. 33 Nguyễn Trung Đồng – Tel 0983 410 866
  34. Trước hết ta minh họa phương pháp biểu diễn này trong hệ thập phân. Trong hệ thập phân số bù chính là số bù 10. Số bù 10 của một số được tạo bằng cách lấy 9 trừ đi mỗi chữ số và sau đó cộng 1 vào chữ số có ý nghĩa thấp nhất. Ví dụ số bù 10 của 88 là 12, của 23 là 77. Việc thực hiện phép trừ một số dương (số bị trừ) đi một số dương (số trừ) có thể được thực hiện thông qua phép cộng như sau: (1) Tạo số bù 10 của số trừ (2) Cộng số bị trừ với số bù 10 của số trừ (3) Nếu có nhớ ở chữ số cao nhất thì chữ số đó bị bỏ đi và kết quả là số dương. Nếu không kết quả là âm và kết quả thật là số bù 10 của số nhận được và thêm dấu – vào đằng trước. Ví dụ 1. 97 – 88 = 09 (1) Tạo số bù 10 của 88 là 12 (2) Cộng 97 với 12 được 109 (3) Có nhớ ở chữ số cao nhất: Kết quả là số dương và bằng 09. Ví dụ 2. 53 – 67 = -14 (1) Tạo số bù 10 của 67 là 33 (2) Cộng 53 với 33 được 86 (3) Không nhớ ở số cao nhất, kết quả là âm. (4) Lấy số bù 10 của 86 được 14. Kết quả thật là – 14. Trong hệ nhị phân, số bù được hiểu là số bù 2. Số bù 2 là số được tạo ra bằng cách lấy 1 trừ đi mỗi chữ số và cộng 1 vào số có giá trị thấp nhất, hoặc tương đương, đổi số 0 thành số 1, số 1 thành số 0 và cộng 1 vào số có giá trị thấp nhất. Ví dụ số bù 2 của 11000 là (00111 + 1) = 01000. Trong hệ nhị phân, sử dụng số bù 2 phép trừ cũng được thực hiện thông qua phép cộng. Ví dụ 1. Cả hai số là số dương: cộng từng số từ phải qua trái, kể cả bit dấu. Ký pháp bình thường 1000 + 0101 = 1101, Dạng dữ liệu trong máy tính 01000 + 00101 = 01101 34 Nguyễn Trung Đồng – Tel 0983 410 866
  35. Ví dụ 2. Một số dương và một số âm có trị tuyệt đối nhỏ hơn: Tạo bù 2 của của số âm, thêm bit dấu vào vị trí cao nhất. Bỏ bit nhớ trong kết quả và kết quả là số dương. Ký pháp bình thường 1000 + (-0101) = 0011, Dạng dữ liệu trong máy tính 01000 + 11011 =1 00011. Kết quả 00011 Ví dụ 3. Một số dương và một số âm có trị tuyệt đối lớn hơn: Thực hiện phép cộng, bit dấu không có nhớ. Kết quả là số âm dạng bù 2. Cần bỏ bit dấu để tạo số bù 2 để có kết quả thật Ký pháp bình thường 0101 + (-1000) = -0011, Dạng dữ liệu trong máy tính 00101 + 11000 = 11101. Kết quả -0011 Ví dụ 4. Hai số âm: Khi thực hiện phép công, có nhớ ở bit dấu. Cần bỏ bit nhớ và kết quả là số âm dạng bù 2. Ký pháp bình thường -0101 + (-1000) = -1101, Dạng dữ liệu trong máy tính 11011 + 11000 = 11000. Kết quả -1101 Trong máy tính hai số nhị phân 0 và 1 được biểu diễn và lưu giữ bằng các thiết bị hai trạng thái (có dòng điện/không có dòng điện, điện áp cao/điện áp thấp, v.v.). Một số, sau khi biểu diễn dưới dạng nhị phân, được biểu diễn và lưu trong máy tính bằng dãy các thiết bị hai trạng thái (được liên kết với nhau theo cách nào đấy). Dãy các thiết bị hai trạng thái đó được gọi là thanh ghi. Các thanh ghi được gán các tên khác nhau để phân biệt, ví dụ thanh ghi A, thanh ghi B. 6.2. Biểu diễn số dấu phẩy động (Floatting Point Number) Khi biểu diễn các số rất lớn hoặc rất nhỏ người ta thường dùng ký pháp dấu chấm động. Ví dụ 190000=0.49*106, 0.00023=0.23*10-3. Dạng biểu diễn tổng quát: Định trị * Cơ số Số mũ Chẳng hạn, trong hai số trên định trị là 0.19 và 0.23, cơ số = 10, số mũ là 6 và –3. Trong máy tính số biểu diễn theo dấu chấm động có hai dạng: 6.2.1. Dạng đơn giản Số dấu chấm động được lưu dưới dạng 32 bit: 31 30 23 22 0 35 Nguyễn Trung Đồng – Tel 0983 410 866
  36. S E F N = (-1)S 2E-127 1.F Bit đầu tiên là bit dấu, 8 bit tiếp theo là số nguyên nhị phân biểu diễn số mũ, 23 bit cuối cùng là số nhị phân biểu diễn phần sau dấu chấm nhị phân. Cơ số ở đây là 2 và phần định trị có dạng 1.F 6.2.2. Dạng chính xác gấp đôi Số dấu chấm động được lưu dưới dạng 64 bit: 63 62 53 52 0 S E F N = (-1)S 2E-1023 1.F 36 Nguyễn Trung Đồng – Tel 0983 410 866
  37. Chương III. Kiến trúc Trung tâm xử lý (CPU) 1. Kiến trúc CPU Để có hiểu biết về kiến trúc một CPU, cần thiết phải định nghĩa các chức năng cơ bản của nó. Càng nhiều chức năng thì CPU càng phức tạp, càng có giá thành cao. Đây chính là lý do CPU được phân loại thành CPU chuyên dụng. Chúng ta sẽ bắt đầu từ những yêu cầu cơ bản nhất đối với CPU: Có kiến trúc hợp lý nhất để thoả mãn những yêu cầu tối thiểu trong chức năng xử lý dữ liệu Có đầy đủ các tính năng để xây dựng một máy tính đáp ứng yêu cầu sử dụng Có khả năng ứng dụng được trong thực tế. 1.1. Chức năng và kiến trúc của CPU Trước hết, CPU phải thực hiện được các phép tính số học và phép tính lôgic cơ bản: cộng (addition), trừ (subtraction), VÀ logic (AND), đảo giá trị (NOT) và HOẶC logic (OR) và các lệnh vào/ra dữ liệu (INP, OUT). Kiến trúc CPU phải đáp ứng yêu cầu tối thiểu này, phải có các khối chức năng hiện thực hoá các phép tính trên. Khối chức năng đầu tiên là ALU (Arithmetic – Logic Unit) thực hiện các phép tính ADD, SUB, AND, NOT và OR). Như vậy, kiến trúc đòi hỏi CPU, ngoài ALU, phải có các thanh ghi toán hạng X, Y và thanh ghi kết quả tính toán A. Nếu cho rằng để đơn giản hoá cấu trúc CPU, ta sử dụng thanh ghi A làm thanh ghi cho một toán hạng, đồng thời là thanh ghi kết quả xử lý, xây dựng lại đường truyền dữ liệu ta có CPU đơn giản hơn như hinh sau: 37 Nguyễn Trung Đồng – Tel 0983 410 866
  38. Sau cùng, cần hiểu rằng khi xử lý dữ liệu, tính toán, có những kết quả trung gian (hoặc các toán hạng) cần được lưu giữ vì nhiều lý do khác, CPU cần thêm một vùng nhớ phụ với tốc độ truy nhập thật cao, hoặc còn gọi là các thanh ghi (đa dụng), cấu trúc sẽ được mở rộng thêm như sau: Với các thanh ghi (ô nhớ phụ) B, C, D, E, F, G cần thiết phải có mạch chọn thanh ghi (Register Selector) để chọn thanh ghi, tức là chọn đúng ô lưu giữ số liệu cần thiết cho ALU xử lý. 38 Nguyễn Trung Đồng – Tel 0983 410 866
  39. Và cuối cùng, một thanh ghi bất kỳ đều có thể chứa một trong các toán hạng ALU cần xử lý, hoặc là lưu giữ kết quả xử lý, chúng sẽ được liên kết với thanh ghi A và ALU như sau: Như vậy có thể tóm lược kiến trúc của CPU và khả năng trao đổi thông tin dữ liệu với các thiết bị ngoại vi trong mô hình sau: 1.2. Kiến trúc ALU ALU là thành phần của máy tính chịu trách nhiệm thực hiện các phép toán số học và logic trên các dữ liệu được cung cấp. Mọi thành phần khác như bộ điều khiển, các thanh ghi, bộ nhớ, thiết bị vào ra cung cấp dữ liệu để ALU xử lý và nhận dữ liệu đã xử lý từ đó. ALU thực chất là tổ hợp các vi mạch được thiết kế để lưu trữ dữ liệu và thực hiện các tính toán logic đơn giản. Hình sau đây minh họa sự kết nối của ALU với các thành phần khác của CPU: 39 Nguyễn Trung Đồng – Tel 0983 410 866
  40. Các tín hiệu điều khiển từ đơn vị điều khiển xác định tác vụ mà ALU phải thực hiện, dữ liệu cần xử lý có thể được nạp từ nội dung của các thanh ghi. Kết quả xử lý sẽ được lưu vào thanh ghi hoặc bộ nhớ, hoặc đưa ra thiết bị ngoại vi. Kết quả xử lý của ALU cũng tác động lên các cờ trạng thái kết quả phép toán. Như vậy, dữ liệu được cung cấp cho ALU từ các thanh ghi, và kết quả xử lý cũng được lưu trong các thanh ghi. Các thanh ghi này là các thiết bị lưu trữ tạm thời bên trong CPU và được kết nối với ALU. ALU cũng cho các tín hiệu cờ để ghi lại trạng thái của một hoạt động xử lý, ví dụ như tín hiệu cờ Overflow được đặt bằng 1 khi kết quả tính toán phải biểu diễn dưới dạng có độ dài vượt quá độ dài của thanh ghi được sử dụng để lưu kết quả. Các giá trị cờ cũng được lưu bên trong CPU. Cuối cùng, bộ điều khiển cung cấp các tín hiệu điều khiển các hoạt động xử lý và di chuyển dữ liệu của ALU. Số được biểu diễn dưới dạng nhị phân và được lưu trong thanh ghi- dãy các mạch lật (FlipFlop). Hình sau đây minh họa một biểu diễn đơn giản: Thành phần quan trọng nhất của ALU là các bộ cộng số học và bộ cộng logic. Như đã biết, phép trừ có thể thực hiện bằng cách sử dụng phép cộng với phần bù (complement). Như vậy, để hỗ trợ thực hiện các phép tính số học, kiến trúc của ALU cần có vi mạch chuyển một số nhị phân sang phần bù 2 của nó. Mặt khác, nếu để ý phép nhân hai số nhị phân, ví dụ 1 0 0 1 1 1 0 1 với quá trình thực hiện như sau: 40 Nguyễn Trung Đồng – Tel 0983 410 866
  41. 1 0 0 1 1 1 0 1 1 0 0 1 0 0 0 0 + 1 0 0 1 dịch trái số bị nhân 2 bit 1 0 0 1 dịch trái số bị nhân 3 bit 1 1 1 0 1 0 1 ta thấy rằng có hai thao tác cần thực hiện: Sao dữ liệu cần nhân vào thanh ghi, nếu nhân với 1; hoặc nạp 0 nếu nhân với 0; Dịch chuyển dữ liệu sang trái một số bit, tuỳ theo vị trí của giá trị “1” trong số nhân cộng dồn các dữ liệu trong từng bước để nhận được kết quả cuối cùng. Như vậy, để thực hiện phép nhân, ngoài mạch cộng hai số nhị phân chỉ cần thêm vi mạch dịch chuyển số nhị phân trong thanh ghi sang trái một hoặc nhiều vị trí. Tóm lại, kiến trúc bên trong của ALU cần có các thành phần chính sau đây: Các mạch số học và logic: Thực hiện các phép toán số học và logic trên dữ liệu được cung cấp. Mạch lấy phần bù (Complemeter): Lấy phần bù 2 của một số được lưu trong một thanh ghi để hỗ trợ cho việc tính toán. Mạch dịch (Shifter): Dịch chuyển các bit được lưu trong một thanh ghi sang trái hoặc sang phải một số bit xác định trước để hỗ trợ cho việc tính toán. Thanh ghi cờ: (Status Flag): Lưu các trạng thái xử lý dữ liệu (thành công hay không thành công, lý do ) để thông báo cho đơn vị điều khiển. Đối với các thanh ghi, hai thao tác cơ bản cần thực hiện được là: Di chuyển dữ liệu từ một thanh ghi sang một thanh ghi khác. 41 Nguyễn Trung Đồng – Tel 0983 410 866
  42. k x / c in k Adder / x y k c y / k out / y or y Add Sub Binary adder used as 2’s-complement adder/subtractor Const Var 00 No shift Shift function Constant 01 Logical left 5 2 10 Logical right amount 0 Amount 11 Arith right 00 Shift Variable 5 1 5 Shifter Function 01 Set less amount 10 Arithmetic class 32 11 Logic 5 LSBs Shifted y 2 0 x c 0 or 1 32 0 1 Shorthand s symbol x y MSB 32 Adder 2 for ALU 32 32 c Control y k c 31 32 3 / x Add Sub Func s ALU Logic 32- y Ovfl input Zero unit NOR AND 00 OR 01 2 XOR 10 Logic function Zero Ovfl NOR 11 A multifunction ALU with 8 control signals (2 for function class, 1 arithmetic, 3 shift, 2 logic) specifying the operation 42 Nguyễn Trung Đồng – Tel 0983 410 866
  43. Liên kết với thiết bị ngoại vi Cộng hoặc trừ nội dung một thanh ghi vào hoặc từ nội dung của một thanh ghi khác. Các phép toán số học được ALU thực hiện thường là dãy các thao tác thuộc hai loại trên. Các phép toán phức tạp hơn, chẳng hạn phép nhân, có thể bao gồm rất nhiều các thao tác cũng thuộc hai loại nói trên. Bộ cộng trong ALU thường được thiết kế từ các đơn vị sau: mạch bán cộng (half-adder) và mạch cộng đầy đủ (full-adder), thanh ghi dịch, mạch lấy phần bù . Cấu trúc của half-adder (HA) và full-adder (FA) được xây dựng từ các phần tử logic cơ bản và đã trình bày trong phần các kiến thức cơ bản, mục 2.5 của chương I : Mạch cộng hai số liệu nhị phân. 2. Phát triển kiến trúc CPU 2.1. Khái quát Giả thiết một CPU với chỉ 3 X Y A thanh ghi có độ dài (số bit) như nhau là X,Y và A. Thanh ghi X chứa một toán A L hạng, thanh ghi Y chứa toán hạng thứ 2 U và thanh ghi A chứa kết quả phép toán thực hiện trên hai toán hạng X và Y. Đơn vị số học ALU có khả năng thực hiện các phép toán số học cộng, trừ, các phép toán logic AND, OR. Thanh ghi A gọi là thanh ghi gộp (Accumulator- Acc). Các phép toán sẽ được thực hiện theo biểu thức: 43 Nguyễn Trung Đồng – Tel 0983 410 866
  44. Phép cộng: X + Y = A Load Load Phép trừ: X – Y = A A A Y Y Phép AND: X and Y = A A Phép OR: X or Y = A L U Vấn đề đặt ra là có thể tổ hợp hai thanh ghi X và A thành chỉ một thanh ghi, có thể sử dụng để chứa một toán hang, giả sử toán hạng X, và sau khi thực hiện phép toán, sẽ là nơi chứa kết quả. Xét về mặt cấu trúc, ta đã bớt đi được một thanh ghi, song phép toán sẽ được thực hiện như sau: Toán hạng X sẽ được nạp vào thanh gi A, toán hạng Y nạp vào thanh ghi Y, ALU thực hiện phép toán theo yêu cầu. Phép toán có thể mô hình như sau: Phép cộng: A  A + Y Phép trừ: A  A - Y Phép AND: A  A  Y Phép OR: A  A  Y Load A Load Y B C A Y D E A F G L U Một ý tưởng có thể thực hiện là: Sẽ là rất thuận lợi, cho dù có thể không cần thiết, nếu CPU có thêm một vùng nhớ với tốc độ truy xuất thật nhanh để làm nơi lưu giữ các kết quả trung gian trong những phép toán phức tạp hơn. Ví dụ ta phải thực hiện tính kết quả của một biểu thức trong đó có 6 phép toán, kết quả của phép thứ nhất cần được lưu giữ tạm thời để sử dụng trong phép toán thứ sáu. Như vậy một bộ nhớ trong (Internal Memory) là cần thiết để khả năng trên được thực hiện. Coi rằng, các thanh ghi làm nhiệm vụ bộ nhớ trong đó là những thanh ghi gộp phụ, giả sử là B, C, D, E, F và G chẳng hạn, ta được một cấu trúc CPU như hình trên. 44 Nguyễn Trung Đồng – Tel 0983 410 866
  45. Data Lines Internal Register Select Lines A Y B C A L Register D E U Selector F G Giả sử các thanh ghi A, B, C, D, E, F, và G có thể sử dụng như những thanh ghi gộp phụ, bằng cách liên kết chúng vợi các thanh ghi A và thanh ghi Y qua một BUS dữ liệu nội bộ (Data BUS Internal), thêm vào một mạch xác định thanh ghi nào sẽ được chọn để Ghi hoặc Đọc dữ liệu bằng khối Register Selector, ta sẽ được một cấu trúc CPU với các thanh ghi hoàn chỉnh hơn như ở hình trên. 2.2. Tổ chức thanh ghi trong CPU họ x86 8 0 8 0 31 16 8 0 8 0 AH ÂL AX EAX AH ÂL BH BL BX EBX BH BL CH CL CX ECX CH CL DH DL DX EDX DH DL BP EBP BP SI ESI SI DI EDI DI SP ESP SP CS CS DS DS SS SS ES ES IP EIP IP EFL FLAG FLAG AG 8086/88 80386, 80486, i486 và Pentium Hình III.1. Tổ chức các thanh ghi trong các CPU họ x86 45 Nguyễn Trung Đồng – Tel 0983 410 866
  46. Có Memory Interface iAPX 88 thể coi các thanh ghi  của các 4 CPU họ x86 3 2 như một bộ 1 ES BIU nhớ được CS Các thanh ghi SS đặt ngay đoạn CS, DS, ES DS và ES bên trong IP Control Unit CPU, có tốc Thanh ghi độ truy cập con trỏ lệnh IP cực kỳ nhanh, được EU dùng để chứa các AH AL Các thanh ghi toán hạng BH BL đa năng AX, ALU CH CL BX, CX và DX hoặc lưu DH DL giữ các dữ SP Các thanh ghi BP Con trỏ và chỉ số liệu và các SI SP, BP, SI và DI FLAGS kết quả tạm DI thời của các Hình III.1. Cấu trúc CPU 8088 của Intel quá trình tính toán, xử lý. Các thanh ghi trong họ CPU 80x86 có độ dài khác nhau, 16 bits với các trung tâm xử lý 8088/86, 80188/86 và 80286, 32 bits với các trung tâm 80386/486 trở đi và được mô tả trên Hình III.1. 1. Các thanh ghi đa năng: CPU 8086 có 8 thanh ghi đa năng với tên gọi là AH, AL, BH, BL, CH, CL, DH, DL. Những thanh ghi này có thể sử dụng riêng rẽ cho việc lưu giữ các dữ liệu nhị phân 8 bits. Cũng có thể sử dụng chúng thành từng cặp thanh ghi có tên gọi là AX (AH-AL), BX (BH-BL), CX (CH-CL), và DX (DH-DL) để lưu giữ các dữ liệu nhị phân 16 bits. Ưu điểm của việc sử dụng các thanh ghi này để lưu giữ tạm thời các dữ liệu là tốc độ truy cập của CPU với chúng nhanh hơn rất nhiều so với việc sử dụng các ô nhớ. 2. Các thanh ghi đoạn: CPU đưa ra BUS địa chỉ 20 bits để quản lý một không gian nhớ 1Mbyte (1.048.576 Bytes) bộ nhớ vật lý. Tuy nhiên, các thanh ghi trong CPU lại chỉ có độ dài 16 bits, do vậy, không gian nhớ được chia thành từng 46 Nguyễn Trung Đồng – Tel 0983 410 866
  47. đoạn (segment), mỗi đoạn dài 64Kbytes, địa chỉ của Byte đầu tiên được lấy làm địa chỉ đoạn. Hai đoạn nhớ kề cận cách nhau tối thiểu là 16 Bytes. Mỗi Ô Đầu đoạn Byte nhớ trong đoạn sẽ được xác định Offset bởi độ lệch (offset), tức là khoảng cách Độ Một ô tính từ Byte nhớ đó đến đầu đoạn. dài nhớ trong Địa chỉ vật lý = (Segment) x 10H + (offset) đoạn đoạn là µP8086 sử dụng 4 thanh ghi đoạn 64K riêng biệt là: Thanh ghi đoạn mã lệnh CS (Code Segment), thanh ghi đoạn ngăn Ô Cuối đoan Bộ nhớ xếp SS (Stack Segment), thanh ghi đoạn mở rộng ES (Extra Segment) và thanh ghi đoạn dữ liệu DS (Data Segment). Hình II. 17 Về khái niệm địa chỉ đoạn và địa chỉ offset Thanh ghi đoạn mã lệnh CS là thanh ghi chứa địa chỉ bắt đầu của đoạn chương trình hiện hành trong bộ nhớ Thanh ghi đoạn dữ liệu DS là thanh ghi địa chứa chỉ bắt đầu của đoạn chứa số liệu hiện hành trong bộ nhớ, hay còn gọi là nơi chứa các biến của chương trình Thanh ghi đoạn ngăn xếp SS là thanh ghi địa chứa chỉ bắt đầu của đoạn ngăn xếp (Stack) trong bộ nhớ (ô nhớ do thanh ghi này chỉ đến còn được gọi là đáy ngăn xếp), nơi lưu giữ địa chỉ và dữ liệu khi thực hiện các chương trình con, lệnh gọi chương trình con hoặc thủ tục Thanh ghi đoạn mở rộng ES là thanh ghi địa chứa chỉ bắt đầu của đoạn chứa các dữ liệu chuỗi, xâu ký tự Ngoài ra, trong các trung tâm i386/i486 còn có hai thanh ghi đoạn FS và GS. 3. Thanh ghi cờ FLAG: Chỉ có 9 trong số 16 bits của thanh ghi cờ trong các bộ vi xử lý µP8086 - µP80286 và 11 trong số 32 bits của thanh ghi cờ trong các bộ xử lý i386/i486 được sử dụng. Mỗi cờ có thể được lập (= “1”) hay xoá (= “0”) để biểu thị trạng thái kết quả của một phép xử lý trước đó hoặc trạng thái hiện tại của CPU. Các cờ IOP, N, R và V liên quan đến chế độ bảo vệ trong các bộ xử lý 80286 và i386/i486. Chín cờ còn lại gồm 6 cờ chỉ trạng thái và 3 cờ điều khiển. 47 Nguyễn Trung Đồng – Tel 0983 410 866
  48. 15 8 7 1 0 O D I T S Z A P C µP8086 N IOP O D I T S Z A P C 31 16 µP80286 V R N IOP O D I T S Z A P C i386/i486 Hình II.19 Vị trí các cờ trong thanh ghi cờ của họ Vi xử lý 80x86 Các cờ trạng thái gồm: Cờ nhớ CF (carry flag) được lập nếu một thao tác xẩy ra hiện tượng carry hoặc borrow đối với toán hạng đích. CF có thể lập bởi lệnh STC và xoá bởi lệnh CLC. Cờ chẵn lẻ PF (parity flag) được lập nếu kết quả của một phép xử lý có số bit bằng “1” là số chẵn. Cờ mang phụ AF (auxiliary flag) được dùng cho xử lý các mã BCD và được lập nếu thao tác xử lý gây hiện tượng carry hoặc borrow cho 4 bits thấp của toán hạng Cờ zero ZF (zero flag) được lập nếu kết quả xử lý số liệu có kết quả bằng 0 Cờ dấu SF (Sign flag) dấu tương ứng với MSB của kết quả phép toán, được lập với kết quả dương và xoá với kết quả âm Cờ tràn OF (Overflow flag) nếu kết quả phép toán là quá lớn cho toán hạng đích. Các cờ điều khiển gồm: Cờ hướng DF (direction flag) xác định hướng của phép toán xử lý xâu, chuỗi ký tự, nếu được lập, xâu, chuỗi sè được xử lý từ địa chỉ cao tới địa chỉ thấp và ngược lại. Cờ được lập bởi lệnh STD và xoá bằng lệnh CLD Cờ ngắt IF (Interrupt enable flag) nếu được lập, CPU sẽ chấp nhận yêu cầu ngắt cứng và phục vụ ngắt. Được lập bởi lệnh STI và xoá bằng lệnh CLI Cờ bẫy TF (Trap flag) Dùng trong gỡ rối chương trình (Debuger) Không thể lập hay xoá trực tiếp bởi lệnh của máy. 4. Thanh ghi con trỏ lệnh IP 48 Nguyễn Trung Đồng – Tel 0983 410 866
  49. Thanh ghi con trỏ lệnh IP (Instruction Pointer) – thanh ghi 16 bits dùng để lưu giữ phần offset của địa chỉ lệnh kế tiếp sẽ được thực hiện trong tuần tự thực hiện chương trình. Kết hợp với CS, IP giống như thanh đếm chương trình PC, mỗi lần từ lệnh được đọc ra từ bộ nhớ, BIU sẽ thay đổi giá trị IP tuỳ theo độ dài của từ lệnh (số bytes của từ lệnh) sao cho nó chỉ đến từ lệnh kế tiếp trong bộ nhớ chương trình. Cũng cần nói thêm rằng khi gặp các lệnh rẽ nhánh hoặc lệnh gọi chương trình con, gọi thủ tục , các giá trị của CS:IP sẽ thay đổi đột ngột không theo quy luật trên. Các giá trị mới của CS:IP do người lập trình cung cầp thông qua địa chỉ của các nhãn (Label) trong chương trình hoặc giá trị cụ thể. 5. Các thanh ghi dữ liệu Có 4 thanh ghi dữ liệu: Thanh ghi tích luỹ AX (Accummulator register) thường dùng để lưu giữ các kết quả xử lý Thanh ghi cơ sở BX (Base register) thường dùng chỉ địa chỉ cơ sở (đáy) của một vùng nhớ trong bộ nhớ Thanh ghi đếm CX (Counter register) thường dùng để khai báo số lần một thao tác nào đó phải được thực hiện trong các vòng lặp, phép dịch, phép quay , Giá trị của nội dung thanh ghi CX sẽ giảm đi một sau mỗi thao tác Thanh ghi số liệu DX (Data register) thường dùng để lưu giữ số liệu dùng làm thông số chuyển giao cho một chương trình. DX là thanh ghi duy nhất được dùng để chứa địa chỉ của các thiết bị vào/ra. Tất cả 4 thanh ghi trên đều được tạo thành từ cặp các thanh ghi 8bit, được gọi là byte thấp và byte cao: AH, AL, BH, BL, CH, CL và DH, DL. 6. Các thanh ghi con trỏ và chỉ số Có 2 thanh ghi con trỏ và 2 thanh ghi chỉ số: Thanh ghi con trỏ ngăn xếp SP (Stack Pointer) chứa địa chỉ đỉnh ngăn xếp (vùng nhớ đặc biệt, hoạt động theo nguyên tắc LIFO – Last In First Out – vào sau ra trước) sử dụng cho việc lưu giữ tạm thới các dữ liệu hay địa chỉ khi gọi chương trình con, khi phục vụ ngắt v.v giá trị nội dung của SP luôn luôn là phần offset của địa chỉ ngăn xếp kế tiếp 49 Nguyễn Trung Đồng – Tel 0983 410 866
  50. Thanh ghi con trỏ cơ sở BP (Base Pointer) có chức năng chứa giá trị offset tính từ địa chỉ SS nhưng còn được sử dụng để truy cập dữ liệu bên trong ngăn xếp Các thanh ghi chỉ số nguồn DI và thanh ghi chỉ số đích SI (Destination Index và Source Index) được dùng để lưu giữ các thành phần offset đối với những vùng dữ liệu được cất trong đoạn dữ liệu. Hai nội dung của hai thanh ghi này liên kết với nội dung thanh ghi đoạn DS để tạo ra địa chỉ nguồn và địa chỉ đích của vùng nhớ. Để hiểu rõ hơn về cấu trúc của ALU, ta có thể tham khảo sơ đồ nguyên lý mạch ALU xử lý 1 bit. Sơ đồ mạch ALU 1 bit thực hiện các phép Cộng, AND, OR và NOT (BitSlide), A, B là các bit đầu vào, F0 và F1 là tổ hợp bit xác định chức năng phép toán. Carry input A Logical Unit Output B F0 F1 Full Adder Carry Output Decoder Ai Bi BitSlide thực hiện được những phép toán số học và F0 C0F1 1-bit logic theo bảng sau: iC0 ALU i Ci Ci+1 F1F0 Phép toán BitSlide 00 Ai Bi Phép AND 01 Bi Phép NOT B 10 AiBi Phép OR 11 Ai+Bi+Ci Phép cộng 50 Nguyễn Trung Đồng – Tel 0983 410 866
  51. Giả sử cần xây dựng một đơn vị ALU thực hiện các phép toán với dữ liệu 8 bit, ta có thể ghép các BitSlide nối tiếp nhau, mỗi Slide thực hiện phép toán trên một bit, bit Carry Out sẽ dược chuyển lên Slide ké tiếp bên trái như hình vẽ sau, thực hiện các phép tính cộng số học, phép VÀ (Logic AND), phép HOẶC (Logic OR) trên hai dữ liệu nhị phân 8 bit A B. và phép ĐẢO (Logic NOT) đối với riêng toán hạng B. A7 B7 A6 B6 A5 B5 A4 B4 A3 B3 A2 B2 A1 B1 A0 B0 F0 F1 1-bit 1-bit 1-bit 1-bit 1-bit 1-bit 1-bit 1-bit Carry ALU ALU ALU ALU ALU ALU ALU ALU Out Carry in Carry out O7 O6 O5 O4 O3 O2 O1 O0 7 7 7 4 7 7 7 7 7 Xây7 dựng ALU7 8-bit từ7 8 "mảnh"7 BitSlide 7 7 7 Hình dưới7 là sơ7 đồ nguyên7 lý một7 đơn vị7 số học-logic7 của7 CPU xử7 lý các dữ liệu 32 bit trong các mối liên kết với các tín hiệu điều khiển các chức năng thực thi phép toán. Const Var 00 No shift Shift function Constant 01 Logical left 5 2 10 Logical right amount 0 Amount 11 Arith right 00 Shift Variable 5 1 5 Shifter Function 01 Set less amount 10 Arithmetic class 32 11 Logic 5 LSBs Shifted y 2 0 x c 0 or 1 32 0 1 Shorthand s symbol x y MSB 32 Adder 2 for ALU 32 32 c Control y k c 31 32 3 / x Add Sub Func s ALU Logic 32- y Ovfl input Zero unit NOR AND 00 OR 01 2 XOR 10 Logic function Zero Ovfl NOR 11 51 Nguyễn Trung Đồng – Tel 0983 410 866
  52. System Data Bus Bidirectional Data Bus Buffer Internal Data Bus A Y IR B C (8) (8) (8) (8) (8) Con ditio nal Flag Regis IR ter D E Dec Selec (8) (8) oder tor A F G CU L (8) (8) U U U Kiến trúc PC CPU (8) DBIN, DBOT, IO/M RD/W, Address Latch SYNC signal (16) Address Bus 3. Kiến trúc CU – Control Unit 3.1. Khái quát CU-Control Unit là đơn vị điều khiển, điều phối mọi hoạt động của các bộ phận chức năng trong CPU thông qua Control BUS. Có thể coi CU là khối dịch lệnh của CPU, nó tạo ra các tín hiệu tương ứng làm đầu vào cho 52 Nguyễn Trung Đồng – Tel 0983 410 866
  53. Controller để điều khiển hoạt động của các khối chức năng. Các tín hiệu do CU tạo ra có thể phân thành 2 loại: Tín hiệu định thời và tín hiệu điều hành hoạt động của CPU. Các tín hiệu định thời do CU tạo ra xác định trạng thái của CPU làm việc: Đang ở chế độ đọc dữ liệu vào (Input mode) Đang đưa dữ liệu ra (Output mode) Đang bắt đầu mộttác vụ khác (Beginning another operation). Các tín hiệu trạng thái của CPU xác định CPU đang: Đọc dữ liệu từ bộ nhớ (Memory Read) Ghi dữ liệu vào bộ nhớ (Memory Write) Nhận lệnh (Instruction Fetch) Đọc dữ liệu từ I/O (I/O Read) Đưa dữ liệu ra I/O (I/O Write) Cũng có thể có những thao tác không được nêu ở đây, nhưng chỉ các thao tác trên là quan trọng nhất. Các tín hiệu để phân biệt các tác vụ trên gồm: IO/M, RD/W và DBIN, DBOT. Cần hiểu rằng việc sử dụng mạch Logic Controller tạo các tín hiệu điều khiển dựa vào các tín hiệu trạng thái của CPU và tín hiệu định thời, có nghĩa là tạo tín hiệu gì và vào thời điểm nào. Để hiểu được kiến trúc khối CU, hãy tìm lời giải đáp cho câu hỏi: Sau khi nhận lệnh, CPU làm sao “ biết” phải thực hiện những thao tác nào để thực hiện lệnh? Tất cả các lệnh đều được biểu diễn dưới dạng mã nhị phân. Giả sử lệnh được biểu diễn bằng một mã 8 bits 01000111B (chuyển nội dung thanh ghi B sang thanh ghi A, ký hiệu là [A]  [B]). To Data BUS Intruction Register D Q D Q D Q D Q D Q D Q D Q Q D C C C C C C C Q Q Q Q Q Q Q C Q K K K K K K K K Clock from CU IR IR IR IRIR IR IR IR IR . 7 6 5 4 4 3 2 1 0 Decode Enable Signal Phát hiện lệnh MOVE E INTO A (0 1 0 0 0 1 1 1) (Logic “1” Detects Instruction to Enable) MOVE B INTO A from CU 53 Nguyễn Trung Đồng – Tel 0983 410 866
  54. Trước hết, lệnh phải được giải mã. Một mạch AND có thể sử dụng để tạo ra tín hiệu nhận biết lệnh (Hình 1) Đầu vào của mạch AND này được nối với đầu ra của thanh ghi lệnh. Đầu ra ở mức “1” xác nhận sự hiện diện của lệnh MOVE B TO A theo công thức (MOVE B TO A) = IR7.IR6.IR5.IR4.IR3.IR2.IR1.IR0. trong đó IRn là đầu ra của các flip-flop tương ứng với các giá trị nhị phân của mã lênh MOVE B TO A. Mạch AND nhận biết mã lệnh được gọi là mạch giải mã lệnh. Như vậy, nếu CPU sử dụng 8 bit để mã hoá các lệnh, có thể có 256 lệnh, và mạch giải mã lệnh cũng sẽ cần đến 256 mạch AND tương tự, tuy nhiên đầu vào của mỗi mạch là một tổ hợp duy nhất trong 256 tổ hợp có thể. Thanh ghi lệnh IR Các bit từ IR7 ÷ IR0 Các bit từ IR7 ÷ IR0 Giải mã lệnh Nhận biết lệnh 1 Nhận biết lệnh 2 Nhận biết lệnh 3 Nhận biết lệnh N Để thực hiện lệnh, khối điều khiển CU xúc tiến mọi thao tác ngay bên trong CPU bằng cách tạo ra các tín hiệu điều khiển và các xung nhịp để định thời cho các khối chức năng thực hiện các thao tác. DATA BUS Tín hiệu chọn B C A Y IR thanh ghi IR D E (8) (8) Decoder(8) Reg (8) (8) Select A CU F G L (8) (8) U CU (8) (8) Tín hiệu điều khiển Program Counter từ khối CU Hình 3a) Mô tả kiến trúc của CU, ADDRESS BUS 54 Nguyễn Trung Đồng – Tel 0983 410 866
  55. Sau khi nhận tín hiệu từ khối giải mã lệnh (Instruction Decoder), CU sẽ tạo ra các tín hiệu điều khiển và các xung nhịp. Tín hiệu điều khiển sẽ cho phép (Enable) khối chọn thanh ghi (Register Select) chọn thanh ghi B và thiết lập hệ thống đường truyền thông suốt giữa hai thanh ghi B và A. tiếp theo CU sẽ tạo các tín hiệu tương ứng để việc truyền dữ liệu giữa hai thanh ghi được thực hiện. Tiếp theo, CU điều khiển thanh đếm chương trình PC tăng lên 1 để nhận tiếp lệnh từ bộ nhớ. Vì CU có nhiệm vụ giám sát và điều khiển mọi thao tác của các thành phần chức năng trong CPU, nên các dây điều khiển phải được nối trực tiếp từ CU tới mọi khối chức năng trong CPU như trên hình 3a. Cũng cần nhận thức rằng, lệnh được CPU lấy từ bộ nhớ. Trong thực tế, dữ liệu để xử lý cũng có thể xuất phát từ bộ nhớ, và các thanh ghi cũng có thể được chọn bất ký ngoại trừ thanh ghi lệnh IR và thanh ddeems chương trình PC. Như vậy, lại cần thêm một thanh ghi liên lạc với BUS dữ liệu có nhiệm vụ truy nhập được vào bộ nhớ. Thanh ghi này làm trung gian giữa BUS dữ liệu bên ngoài và các thanh ghi đa năng khác, và nó được liên lạc với nhau thông qua BUS dữ liệu nội bộ (Internal Data BUS), một BUS mà các thanh ghi được truy xuất trực tiếp. CU phải làm nhiệm vụ xác định thanh ghi nào được truy xuất qua BUS dữ liệu nội bộ tại thời điểm đó. Cũng vì BUS dữ liệu nội bộ của CPU truy xuất đến BUS dữ liệu hệ thống, nên cần phải có một cách thức để hoặc cách ly chúng khi cần thiết, hoặc cho phép ghép nối, nên cần thiết phải có thêm thanh ghi đệm dữ liệu hai chiều. Và như vậy, CU phải làm nhiệm vụ điều khiển hướng di chuyển của dữ liệu khi đi qua thanh ghi đệm (xem hình 3b). Giả thiết rằng lối ra của khối CU (tạo các tín hiệu điều khiển) phải tạo ra 12 tín hiệu tại các cửa G1 – G12, 2 tín hiệu điều khiển bộ nhớ và 5 tín hiệu xung nhịp kích hoạt các thanh ghi PC (thanh đếm chương trình), MAR (thanh ghi đệm địa chỉ, MSR (thanh ghi đệm bộ nhớ), DO (thanh ghi dữ liệu) và IR (thanh ghi lệnh) để điều khiển quá trình nhận và thực hiện lệnh ADD. Các tín hiệu này được gửi tới để điều khiển hoạt động của các thành phần khác nhau trong CPU. Một chu trình thực hiện lệnh trên sẽ được thi hành. 55 Nguyễn Trung Đồng – Tel 0983 410 866
  56. SYSTEM DATA BUS Đệm BUS dữ liệu hai chiều INTERNAL DATA BUS Tín hiệu A Y IR chọn B C thanh ghi Regi- IR Decoder ster (8)D (8)E (8) (8) (8) Select A CU F G L (8) (8) U CU (8) (8) Tín hiệu điều khiển Program Counter từ khối CU Hình3b) Mô tả kiến trúc của CU ADDRESS BUS Điều khiển Các tín hiệu điều khiển cửa Các xung nhịp kích hoạt thanh ghi bộ nhớ Số bước G1 G2 G3 G4 G5 G6 G7 G8 G9 G10 G11 G12 EN E/W PC MAR MBR DO IR 1 1 0 0 0 0 0 0 0 0 0 0 0 0 x 0 1 0 0 0 2 0 1 0 0 0 0 0 0 0 0 0 0 0 x 1 0 0 0 0 3 0 0 0 0 0 1 0 0 0 0 1 0 1 1 0 0 1 0 0 4 0 0 0 0 0 0 1 0 0 0 0 0 0 x 0 0 0 0 1 5 0 0 1 0 0 0 0 0 0 0 0 0 0 x 0 1 0 0 0 6 0 0 0 0 0 1 0 0 0 0 1 0 1 1 0 0 1 0 0 7 0 0 0 0 0 0 1 0 0 1 0 0 0 x 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 0 0 1 0 x 0 0 0 1 0 Thực tế trong CPU của máy tính có từ 64 đến hơn 200 các tín hiệu điều khiển như thế. Sự khác nhau quan trọng giữa các lệnh và vi lệnh là ở chỗ vi lệnh có nhiều trường hơn. Tám bước trong bảng trên là một vi chương trình dịch một giai đoạn nhận lệnh (OPCODE FETCH) được thực thi sau lệnh cộng ADD. Như vậy một lệnh được dịch thành một chuỗi các vi lệnh, hay nói cách khác, mỗi mã lệnh có một vi chương trình. 56 Nguyễn Trung Đồng – Tel 0983 410 866
  57. Có thể thấy rằng, khối tạo các tín hiệu điều khiển: “Biết” phải thực hiện lệnh “như thế nào”, một khi lệnh từ IR (Instruction Register) được giải mã và chuyển sang cho nó “Giải quyết” việc thực hiện một lệnh bằng cách điều khiển các khối chức năng liên quan thực hiện các phần việc. Từ cách nhìn nhận trên, dễ dàng nhận ra rằng CU - khối tạo các tín hiệu điều khiển là bộ não thực thụ của CPU. Có thể coi khối này là một máy tính đặc dụng (Special-purpose Computer)(*) bên trong CPU. Nó là hạt nhân cơ bản nhất dành riêng cho việc thực hiện một lệnh. Để thiết kế và xây dựng được khối này, cần phải có một “chương trình” (program)(*) thật chi tiết. Chương trình dùng để xây dựng nên khối này cần phải có những thủ tục tuyệt đối chính xác nhằm mục đích thực hiện các lệnh. Chương trình đó được gọi là Vi chương trình (MicroProgram) và được chế tạo như là một phần tích hợp cứng bên trong CPU, người lập trình không thể thay thế cũng như không thể truy nhập vào được. Dễ thấy rằng để thục hiện một lệnh, CPU chia “công việc” ra thành một chuỗi các thao tác cơ bản. Mỗi một khối chức năng sẽ thao tác một hoặc một số chuỗi thao tác cơ bản đó theo một tuần tự nhất định (khái niệm Vi chương trình). Tín hiệu điều khiển các khối chức năng đó và xung nhịp để đảm bảo sự chính xác tuần tự và đồng bộ các thao tác đó là do CU tạo ra. Từ BUS dữ liệu Thanh ghi lệnh IR Gi ải mã lệnh DRCODER Đơn vị điều khiển Mô tả tuần tự hoạt Control Unit động Nhận lệnh Giải mã lệnh Tạo các tín hiệu điều khiển thực hiện lệnh Đ.khiển Đ.khiển Đ.khiển Đ.khiển Thao tác 1 Thao tác 2 Thao tác 3 Thao tác N  (*) Thuật ngữ được dùng trong tài liệu gốc (Manual) của hãng Intel 57 Nguyễn Trung Đồng – Tel 0983 410 866
  58. 3.3. Chức năng của CU CU - Control Unit là đơn vị điều khiển, điều phối mọi hoạt động của các bộ phận chức năng trong CPU thông qua Bus điều khiển. Có thể xem CU là khối dịch lệnh của CPU, nó tạo ra các tín hiệu tương ứng làm đầu vào cho Controller để điều khiển hoạt động của các khối chức năng. Các tín hiệu do CU tạo ra có thể phân thành 2 loại: Tín hiệu định thời và tín hiệu điều hành hoạt động của CPU. Các tín hiệu định thời do CU tạo ra xác định trạng thái của CPU làm việc: Đang ở chế độ đọc dữ liệu vào (Input mode) Đang đưa dữ liệu ra (Output mode) Đang bắt đầu một hoạt động khác (Beginning another operation). Các tín hiệu trạng thái của CPU xác định CPU đang: Đọc dữ liệu từ bộ nhớ (Memory Read) Ghi dữ liệu vào bộ nhớ (Memory Write) Nạp lệnh (Instruction Fetch) Đọc dữ liệu từ I/O (I/O Read) Đưa dữ liệu ra I/O (I/O Write) Cũng có thể có những hoạt động không được nêu ở đây, nhưng các thao tác trên là quan trọng nhất. Các tín hiệu để phân biệt các hoạt động trên gồm: IO/M, RD/W và DBIN, DBOT. Cần hiểu rằng việc sử dụng mạch Controller Logic tạo các tín hiệu điều khiển dựa vào các tín hiệu trạng thái của CPU và tín hiệu định thời, có nghĩa là tạo tín hiệu gì và vào thời điểm nào. 58 Nguyễn Trung Đồng – Tel 0983 410 866
  59. 3.4. Kiến trúc CU CU chỉ chấp nhận các lệnh có khả năng thực thi được thông qua vi chương trình. Các lệnh này tạo nên hệ lệnh của CPU, từ đó người lập trình xây dựng được các chương trình. Để hiểu về khái niệm hệ lệnh, hãy bắt đầu bằng một hệ lệnh được giả thiết cho cấu trúc CPU. Từ các từ nhớ có độ dài 8 bits, ta có thể thấy rằng tạo được 28 tổ hợp, hay nói cách khác có thể xây dựng 256 lệnh. Tất nhiên, có thể có số lượng lệnh ít hơn, song mỗi lệnh phải thực thi được một công việc cụ thể. Một tổ hợp 8 bits, tuỳ theo mạch CU được thiết kế, sẽ tạo ra các tín hiệu dựa trên các tín hiệu do thanh giải mã lệnh IR Decoder tạo ra. Ta có thể phân loại các lệnh thành các nhóm sau: 1. Nhóm lệnh điều khiển rẽ nhánh 2. Nhóm lệnh di chuyển dữ liệu 3. Nhóm lệnh số học và logic 4. Nhóm lệnh vào/ra dữ liệu. Ký hiệu 8 bits tạo nên lệnh là IR0 đến IR7, để quản lý 4 nhóm lệnh, ta cần 2 bits theo bảng sau: IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0 IR7 IR6 Loại lệnh 0 0 Lệnh rẽ nhánh 0 1 Lệnh di chuyển dữ liệu 1 0 Lệnh số học và logic 1 1 Lệnh I/O và thực hiện theo điều kiện Bảng mã các thanh ghi như sau: Mã nhị phân Thanh ghi 0 0 0 B 0 0 1 C 0 1 0 D 0 1 1 E 1 0 0 F 1 0 1 G 1 1 0 Y 1 1 1 A 59 Nguyễn Trung Đồng – Tel 0983 410 866
  60. Kết hợp hai bảng trên, ta đã có thể biết được lệnh chuyển nội dung thanh ghi B sang thanh ghi A (MOVE B TO A) sẽ có mã nhị phân là: 0 1 0 0 0 1 1 1 Chuyển dữ liệu Thanh ghi B Thanh ghi A Đây là cách thức đơn giản minh hoạ kiến trúc hệ lệnh của CPU. Giả sử phải thực hiện công việc sau: Nếu giá trị cờ Zero (Z) = 1, chuyển nội dung thanh ghi A sang thanh ghi E, nếu không thì tăng nội dung cặp thanh ghi B, C IF Z = 1 MOVE A TO E OTHERWISE INCREMENT (B, C) AND CONTINUE. Có thể phân tích như sau: IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0 1 1 Theo bảng I/O=1 Cờ điều kiện Increment RP 000 – S 00 – BC 001 – C 01 – DE 010 – P 10 – FG 011 – Z Theo các giá trị được100 - ACthể hiện ở trên, mã lệnh sẽ có giá trị nhị phân cụ thể như sau: IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0 1 1 0 0 1 1 0 0 Lệnh được Làm Mã địa chỉ Mã tăng nội thực hiện việc của các ô dung của theo điều với nhớ giá trị cặp thanh kiện thanh cờ Z ghi B và C ghi IF Z = 1 MOVE A TO E OTHERWISE INCREMENT (B, C) AND CONTINUE Có thể thấy rằng mã lệnh trên sẽ có thể thành lập được. Sử dụng hai bảng mã đã nêu, ta thấy rằng không thể sử dụng một lệnh 8 bits để biểu diễn 60 Nguyễn Trung Đồng – Tel 0983 410 866
  61. lệnh này. Và CPU biết rằng cần phải lấy lệnh tiếp theo theo các điều kiện là trạng thái của các thanh ghi Hai tổ hợp 8 bits liên tiếp biểu diễn yêu cầu IF Z = 1 MOVE A TO E OTHERWISE INCREMENT (B, C) AND CONTINUE được thành lập dựa trên hai bảng mã trên là: 1 1 0 0 1 1 0 0 (1) 0 1 1 1 1 0 1 1 (2) Khi IR chuyển tổ hợp (1) cho CU, CU giải mã tổ hợp này và thông qua (IR7 IR6 = 11) và vi chương trình, “biết” rằng, đây là lệnh được thực hiện theo điều kiện. Mã 011 (IR4 IR3 IR2) cho CU biết điều kiện chính là nội dung cờ Z. Nếu {Z}=1, thực hiện lệnh (2), nếu {Z}= 0, bỏ qua lệnh (2) và thực hiện lệnh tăng nội dung cặp thanh ghi BC, (IR1 IR0=00). Dispatch table 1 0 MicroPC 1 Microprogram 2 1 memory or PLA 3 Address Dispatch 0 table 2 Incr Data Microinstruction register op (from instruction Sequence register) Control signals to data path control ® 4. Vài nét về Kiến trúc CPU Pentium của Intel Để tìm hiểu kiến trúc của các CPU Pen tium, trước hết cần nhắc lại tuần tự thực hiện một chương trình trong máy tính. Khi sử dụng các hệ điều hành MS Windows, kích đúp vào một biểu tượng nào đó để chạy chương trình thì những gì sẽ xảy ra là: Chương trình đã lưu bên trong ổ đĩa cứng (HDD – Hard Disk) sẽ được đưa vào bộ nhớ RAM. Ở đây chương trình chính là một chuỗi các lệnh mà CPU sẽ thực thi. CPU sử dụng một mạch phần cứng được gọi là đơn vị điều 61 Nguyễn Trung Đồng – Tel 0983 410 866
  62. khiển bộ nhớ (memory controller unit) để tải lệnh và dữ liệu từ bộ nhớ RAM vào CPU để xử lý. Những gì diễn ra tiếp theo phụ thuộc vào nội dung chương trình vừa được nạp. CPU có thể tiếp tục tải và thực thi chương trình hoặc có thể thực hiện một công việc nào đó với dữ liệu đã được xử lý, ví dụ hiển thị kết quả xử lý lên màn hình. Đối với các máy tính các thế hệ cũ, CPU điều khiển việc trao đổi dữ liệu giữa ổ đĩa cứng (HDD) và bộ nhớ RAM. Do tốc độ truy cập HDD thấp hơn rất nhiều so với bộ nhớ RAM, nên hiệu suất làm việc của CPU bị thấp đi rất nhiều. Đó là cách thực hiện trao đổi giữa HDD và bộ nhớ theo phương thức PIO (Proccessor I/O hay Programed I/O). Trong máy tính hiện nay, công việc chuyển tải đó được thực hiện theo phương thức DMA (Direct Memorry Access) nhờ một thiết bị gọi là DMAC (Direct Memorry Access Controler). Thực thi công việc này là các chip cầu nối: Chip Cầu bắc và Chip Cầu nam trong các mạch tích hợp (IC) được gọi là Chipset. Tuy nhiên, các bộ xử lý của hãng AMD dựa trên các sockets 754, 939 và 940 sử dụng một Memory Controller được nhúng bên trong, do vậy CPU truy xuất trực tiếp bộ nhớ RAM không qua chipset. Chipset HDD Chip Cầu bắc Bộ nhớ Chip Cầu bắc CPU (Ổ đĩa cứng) (North Bridge) RAM (North Bridge) Hình Lệnh và Dữ liệu được chuyển vào CPU 4.1. Vai trò của chipset trong máy tính Chipset là một nhóm các mạch tích hợp được thiết kế để làm việc cùng nhau như một sản phẩm độc lập. Trong máy tính, thuật ngữ chipset nói về các chip đặc biệt trên bo mạch chủ hoặc CPU Hình Liên kết trên các card mở rộng. Với máy tính CPU-Bộ nhớ-I/O dùng Pentium CPU, chipset là hai chip trong bo mạch chủ: Chip Cầu bắc và RAM Chip Cầu nam. Các hãng sản xuất các AGP (Video Card) North chipset cho bo mạch chủ máy PC thông Bridge dụng là nVIDIA, ATI, VIA PCI BUS Technologies, SiS và Intel. Các máy Real Time Clock Power Management tính trước đây thường dùng chung một South USB loại chipset giá thành thấp sử dụng giao Bridge Other Devices diện SCSI cho các thiết bị lưu trữ, các 62 Nguyễn Trung Đồng – Tel 0983 410 866
  63. thiết bị nhúng và các máy tính cá nhân. Chip Cầu bắc, hay còn gọi là Memory Controller Hub (MCH), là một trong hai chipset trên một bo mạch chủ, chip còn lại là Chip Cầu nam. Mặc dù có tên gọi như vậy, nhưng đôi khi, cả hai chip này được tích hợp trong một chip. Chip Cầu bắc làm nhiệm vụ liên lạc giữa CPU, RAM và thiết bị AGP hoặc PCI Express, một vài loại còn chứa cả chương trình điều khiển video tích hợp, gọi là Graphics and Memory Controller Hub (GMCH). Vì các CPU và bộ nhớ RAM khác nhau yêu cầu các tín hiệu khác nhau, nên một Chip Cầu bắc chỉ làm việc với một vài loại CPU, và thông thường chỉ với một loại RAM. Ví dụ chipset Intel i875 chỉ làm việc với hệ thống Pentium IV hoặc Celeron có tốc độ lớn hơn 1,3GHz và DDR SDRAM, còn chipset Intel i915 làm việc với Pentium IV và Intel Celeron sử dụng bộ nhớ DDR hoặc DDR2. Cũng cần nhắc lại rằng, Chip Cầu bắc trong bo mạch chủ là nhân tố quyết định số lượng, tốc độ và loại CPU cũng như dung lượng, tốc độ và loại RAM có thể sử dụng được. Các máy tính với CPU Pentium thường chỉ quản lý được bộ nhớ tối đa là 128MB, trong khi với CPU Pentium IV, do sử dụng đến 36 bit địa chỉ, nên có thể quản lý được đến 64GB bộ nhớ. Tuy nhiên, các máy tính, do còn bị hạn chế bởi hệ điều hành, nên chúng chỉ hỗ trợ quản lý được một dung lượng RAM nhỏ hơn. Chip Cầu nam, hay còn gọi là I/O Controller Hub (ICH), đảm nhiệm việc giao tiếp với các thiết bị có tốc độ thấp hơn. Chip Cầu nam không được kết nối trực tiếp với CPU, hay nói đúng hơn, Chip Cầu bắc kết nối Chip Cầu nam với CPU. Thông thường, Chip Cầu nam được đặt xa CPU hơn, và thường làm việc với một vài Chip Cầu bắc khác, và mỗi cặp thường phải có thiết kế phù hợp mới có thể làm việc được với nhau. Giao tiếp chung giữa Chip Cầu bắc và Chip Cầu nam là BUS PCI, do vậy xuất hiện hiệu ứng cổ chai. 4.2. Vấn đề xung nhịp (Clock) Xung nhịp được dùng để đồng bộ hoá hoạt động của các khối chức năng trong máy tính. CPU “biết” được với mỗi lệnh cụ thể, nó cần bao nhiêu xung nhịp để thực thi thông qua một bảng liệt kê các thông tin này (trong vi mã - Microcode). Như vậy nếu 1 lệnh cần n xung nhịp để thực thi, thì xung nghịp thứ n+1 CPU sẽ thực thi lệnh tiếp theo. Nếu CPU có một số khối thực thi song song, chúng có thể thực thi lệnh thứ hai tại cùng thời điểm thực thi lệnh thứ nhất. Đây là nguyên lý của kiến trúc superscalar. Nếu so sánh 2 CPU cùng loại với nhau, CPU nào chạy với tần số xung nhịp cao hơn dĩ 63 Nguyễn Trung Đồng – Tel 0983 410 866
  64. nhiên sẽ nhanh hơn. Có nhiều vấn đề phải xem xét về hiệu suất làm việc của CPU, nếu cho rằng, các CPU có số lượng các khối thực thi khác nhau, và kích thước bộ nhớ cache khác nhau, thì cách truyền tải dữ liệu bên trong CPU cũng khác nhau. Cũng cần hiểu rằng, bo mạch chủ không thể làm việc với cùng tần số xung nhịp của CPU. Khái niệm nhân tần số xung nhịp được bắt đầu sử dụng ở CPU 486DX2. Với cơ chế nhân xung nhịp, CPU có một bộ tạo xung nhịp ngoài (External Clock) để sử dụng khi truyền tải dữ liệu vào/ra bộ nhớ RAM và một xung nhịp bên trong (Internal Clock) cao hơn. Ví dụ với Pentium IV 3,4GHz, tần số xung nhịp trong là tần số xung nhịp ngoài 200MHz nhân với hệ số 17. Như vậy, khi đọc dữ liệu từ RAM, CPU Pentium IV 3,4GHz phải giảm tốc độ 17 lần, và nó làm việc như một CPU với tốc độ tương ứng với xung nhịp 200MHz. Một số kỹ thuật được sử dụng để tối thiểu hoá ảnh hưởng của sự khác nhau về xung nhịp. Một là sử dụng bộ nhớ cache, hai là truyền tải nhiều dữ liệu trong một chu kỳ xung nhịp, ví dụ như CPU của hãng AMD chỉ truyền tải hai dữ liệu trong một chu kỳ xung nhịp, còn CPU của hãng Intel tuyền tải bốn dữ liệu. Xung Clock Truyền tải 1 D1 D2 D3 bình thường DDR 2 D1 D2 D3 D4 D5 D6 QDR 4 D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 D12 Kỹ thuật truyền tải hai dữ liệu trên một chu kỳ xung nhịp được gọi là DDR (Dual Data Rate), kỹ thuật truyền tải bốn dữ liệu trong một chu kỳ xung nhịp gọi là QDR (Quat Data Rate). Một điểm cần biết nữa là: BUS dữ liệu giữa bộ nhớ RAM và CPU thường là 64bit, hoặc 128bit nếu sử dụng cấu hình bộ nhớ kênh dual. Số lượng bit truyền tải và tốc độ xung nhịp được kết hợp trong một giá trị gọi là tốc độ truyền tải, tính theo MB/s, được tính bằng số bit nhân với tần số xung nhịp chia cho 8. Ví dụ bộ nhớ DDR400 có tốc độ truyền tải là 3200MB/s nếu sử dụng cấu hình kênh đơn 64bit, và là 6400MB/ nếu sử dụng cấu hình kênh dual 128bit. Di* fclock T tốc độ truyền tải dữ liệu T Di số bit của 1 dữ liệu 8 fclock tần số xung nhịp 64 Nguyễn Trung Đồng – Tel 0983 410 866
  65. 4.3. Kỹ thuật đường ống (Pipeline) và xử lý song song mức lệnh Kỹ thuật đường ống làm tăng đáng kể tốc độ xử lý của CPU. Chu kỳ thực hiện lệnh sẽ được thực hiện ở từng khối chức năng riêng, do vậy khối nhận lệnh sau khi nhận lệnh sẽ tiếp tục nhận lệnh khác để chuẩn bị chuyển cho khối giải mã, khi lệnh thứ nhất đã bước sang giai đoạn 3 của việc thực thi thì khối nhận lệnh nhận lệnh thứ 3 v.v CPU hiện đại có 11 tầng, có thể nhận 11 lệnh tại cùng một thời điểm. Thực tế, hầu như tất cả các CPU hiện nay đều theo kiến trúc superscalar, số lệnh đồng thời được nạp vào trong CPU sẽ cao hơn nhiều. Với đường ống của CPU có 11 tầng, một lệnh được thực thi hoàn toàn sẽ phải chuyển qua cả 11 khối. Lệnh đầu tien có thể sẽ mất 11 bước để được thực hiện xong, song lệnh thứ hai đi ngay sau đó sẽ được hoàn thành sớm hơn, chứ không phải là qua đến 11 bước như lệnh đầu Pentium là loại đơn vị xử lý trung tâm 32 bit và là loại đơn vị xử lý trung tâm đầu tiên sử dụng kỹ thuật ILP (Instruction Level Pararellism), kỹ thuật xử lý song song mức lệnh. Nếu coi rằng một lệnh thường được xử lý qua năm giai đoạn: 1. Nhập lệnh (FI Fetch the Instruction) 2. Giải mã lệnh (DI Decode the Instruction) 3. Tạo địa chỉ toán hạng (GOA Generate Operand Address) 4. Nhập toán hạng (FO Fetch Operands) 5. Thực hiện lệnh (EI Execute Instruction) Với kỹ thuật xử lý lệnh thông thường, đơn vị xử lý trung tâm phải tuần tự thực hiện xong tất cả các giai đoạn thực hiện một lệnh, thường là sau 5 chu kỳ máy, rồi mới chuyển sang nhập và thực hiện lệnh tiếp theo. Để tăng tốc độ xử lý lệnh mà không nhất thiết phải tăng tần số nhịp của máy, người ta sử dụng các kỹ thuật khác như kỹ thuật xử lý lệnh kiểu đường ống (Pipeline) và kỹ thuật xử lý lệnh song song (ILP). Chu kỳ máy 1 2 3 4 5 6 7 8 9 FI DI GOA FO EI FI DI GOA FO EI FI DI GOA FO EI FI DI GOA FO EI FI DI GOA FO EI Time 65 Nguyễn Trung Đồng – Tel 0983 410 866
  66. Kỹ thuật xử lý lệnh kiểu đường ống (Pipeline) Kỹ thuật xử lý lệnh kiểu đường ống được sử dụng trong các đơn vị xử lý trung tâm từ đời đơn vị xử lý trung tâm Intel 8086. Đường ống tương tự như dây chuyền sản xuất nhiều công đoạn. ở dây chuyền sản xuất, mỗi công đoạn thực hiện một thao tác sản xuất. Sản phẩm được chuyển và hình thành dần sau mỗi công đoạn sản xuất, cho đến khi được hoàn thành ở công đoạn cuối cùng. Trong kỹ thuật xử lý lệnh theo kiểu đường ống, việc thực hiện lệnh cũng được thực hiện qua 5 thao tác, mỗi thao tác được thực hiện trong một giai đoạn, giai đoạn nọ tiếp sau giai đoạn kia, cho đến khi thực hiện xong lệnh. Với một đường ống 5-giai đoạn, tại mỗi chu kỳ máy có 5 bộ dữ liệu thuộc 5 giai đoạn xử lý được gửi vào đường ống và 5 thao tác được thực hiện đồng thời, nhờ vậy mà sau mỗi chu kỳ máy lại có một lệnh được hoàn thành và một lệnh mới được nhập. Kỹ thuật đường ống với đường ống 5-giai đoạn cho phép tăng tốc độ thực hiện lệnh lên gấp 5 lần. Kỹ thuật ILP (xử lý song song mức lệnh) Kỹ thuật ILP là kỹ thuật thiết kế đơn vị xử lý trung tâm và chương trình dịch nhằm làm tăng tốc độ các thao tác máy (như ghi-đọc bộ nhớ) và thực hiện các phép tính. Trong các kỹ thuật ILP có kỹ thuật superscalar, Cache lệnh 8kbyte Dự báo rẽ nhánh Giải mã BTB lệnh Đpơn vị điều khiển CU Đơn vị BUS Tạo địa chỉ Tạo địa chỉ Đơn vị xử lý dấu toán hạng kênh toán hạng kênh phảy động U V BUS Các thanh ghi Các 32bit địa chỉ thanh ghi 64bit dữ liệu ALU ALU kênh U kênh V Cache dữ liệu 8kbyte trong đó tại một chu kỳ máy, nhiều lệnh được nhập và được thực hiện đồng thời trên nhiều đường ống khác nhau. Cấu trúc đơn vị xử lý trung tâm Pentium (CPU) 66 Nguyễn Trung Đồng – Tel 0983 410 866
  67. Pentium là loại đơn vị xử lý trung tâm được thiết kế theo kỹ thuật superscalar, trong đó hai lệnh được nhập và giải mã đồng thời. Pentium có hai đường ống thực hiện lệnh song song U và V. Quá trình thực hiện lệnh được mô tả như sau : Chu kỳ máy 1 2 3 4 5 6 7 FI DI GOA FO EI GOA FO EI FIFI D I GOA FO EI GOA FO EI GOA FO EI FI DI GOA FO EI 4.4. Về kiến trúc RISC, CISC RISC: (Reduced Instruction-Set Computer) CISC: (Complete Instruction-Set Computer) Cách đơn giản nhất để có thể khảo sát những ưu nhược điểm của kiến trúc RISC là so sánh việc thực hiện một phép toán đối với loại kiến trúc CISC trước đây. Giả sử ta phải thực hiện một lệnh nhân hai toán hạng được lưu giữ trong bộ nhớ. Hình II. mô tả tổ chức của một máy tính. Bộ nhớ được tạo từ các ô nhớ từ 1:1 (hàng 1: cột 1) đến 6:4 (hàng 6 : cột 4). Khối thực hiện lệnh có nhiệm vụ thực hiện các lệnh tính toán * (nhân), ÷ (chia), + (cộng) và – (trừ). Tất nhiên, khối thục hiện tính toán chỉ có thể làm việc với các dữ liệu (toán hạng) đã được chứa sẵn ở một trong các thanh ghi A,B,C,D,E hoặc F. Giả sử ta phải tìm tích 2 số, số thứ nhất được chứa ở ô 2:3 và số thứ hai ở ô 5:2, kết quả sẽ được lưu lại vào ô 2:3. Bây giờ ta sẽ tiếp cận cách giải quyết vấn đề trên hai loại CPU, CISC và 67 Nguyễn Trung Đồng – Tel 0983 410 866