giao trinh ktruc1

Màu nền
Font chữ
Font size
Chiều cao dòng

ĐẶT VẤN ĐỀ

Ngày nay, kỹ thuật vi điện tử đã có những bước tiến rất dài và tạo ra những thành tựu lớn lao phục vụ cho các hoạt động khoa học kỹ thuật, kinh tế, ... của con người. Máy tính điện tử, với tư cách là một trong những thành quả vĩ đại, ngày càng khẳng định vai trò quan trọng của mình trong việc hỗ trợ mọi mặt của đời sống xã hội.

Với ý nghĩa đó, việc đưa vào giảng dạy và học tập môn học Cấu trúc máy tính cho các hệ đào tạo Đại học, Cao đẳng và Trung học chuyên nghiệp nhằm trang bị cho học sinh, sinh viên những kiến thức cơ bản về cấu trúc và hoạt động của máy tính IBM PC - là chuẩn máy tính cá nhân được sử dụng phổ biến nhất trên thế giới. Từ những kiến thức cơ bản đó, học sinh, sinh viên có thể từng bước hướng tới việc làm chủ máy tính và điều khiển được các thiết bị khác nhau thông qua máy tính.

Tập bài giảng môn học Cấu trúc máy tính phục vụ cho quá trình giảng dạy đối với hệ đào tạo đại học chính quy, dài hạn các chuyên ngành Điện tử viễn thông, Kỹ thuật điều khiển và Công nghệ thông tin trong thời gian 60 tiết bao gồm những nội dung chủ yếu sau đây:

Bài 1: TỔNG QUAN VỀ MÁY TÍNH

Bài này đề cập tới một số khái niệm cơ bản, ý nghĩa, ứng dụng, các nguyên lý xây dựng máy tính PC.

Bài 2: TỐ CHỨC CỦA MÁY TÍNH ĐIỆN TỬ

Bài này mô tả kiến trúc chung và các hoạt động điển hình của hệ thống máy tính, qua đó chỉ rõ chức năng cơ bản của từng thành phần cũng như mối quan hệ giữa những thành phần đó.

Bài 3: BỘ VI XỬ LÝ CỦA INTEL

Bài này trình bày kiến trúc điển hình của các thế hệ bộ vi xử lý của hãng Intel được sử dụng trong các hệ thống máy tính cá nhân hiện nay.

Bài 4: TỔ CHỨC HỆ THỐNG BUS

Bài này trình bày cấu trúc, chức năng, cơ chế hoạt động của hệ thống BUS trong máy tính, một số loại BUS trong một số loại máy tính thông dụng hiện nay.

Bài 5: TỔ CHỨC BỘ NHỚ MÁY TÍNH VÀ CƠ CHẾ DMA

Bài này đề cập tới khái niệm, chức năng, cách thức tổ chức và kiến trúc tống thể của bộ nhớ trong máy tính điện tử.

Bài 6: CỔNG TRAO ĐỔI THÔNG TIN SONG SONG VỚI NGOẠI VI

Bài này giới thiệu các chế độ trao đổi thông tin song song của máy tính, nguyên tắc làm việc và thiết bị hỗ trợ.

Bài 7: HOẠT ĐỘNG NGẮT VÀ TÀI NGUYÊN NGẮT CỦA MÁY TÍNH

Bài này đặt vấn đề về các cơ chế điều khiển hoạt động của máy tính PC khi tính đến khả năng ghép nối với nhiều thiết bị khác nhau; phần cứng và phần mềm điều khiển ngắt.

Bài 8: HOẠT ĐỘNG TRUYỀN TIN NỐI TIẾP CỦA PC

Bài này giới thiệu máy tính PC với vai trò là một thiết bị truyền thông tin với hai khả năng kết nối điển hình là qua cổng COM và giao diện tuần tự đa năng USB.

Bài 9: CÁC THIẾT BỊ NGOẠI VI

Bài này giới thiệu cấu tạo, chức năng và hoạt động của một số thiết bị ngoại vi thông dụng của máy tính như màn hình, bàn phím, chuột, ổ đĩa cứng, ổ đĩa mềm, ổ đĩa CD, ...

Để có thể tiếp thu tốt các nội dung của môn học, học sinh - sinh viên trước hết cần có kiến thức tốt về Kỹ thuật số, Kỹ thuật vi xử lý; có khả năng hiểu và sử dụng được một trong những ngôn ngữ lập trình điều khiển hệ thống trên máy tính như: ASSEMBLY, FORTRAN, C/C++, PASCAL/DELPHI,.... Các nguồn tài liệu tham khảo có thể kể đến là:

1. Cấu trúc máy tính - Nguyễn Tăng Cường, Phan Quốc Thắng - Học viện Kỹ thuật quân sự, 2002.

2. Giáo trình Kiến trúc máy tính - Hoàng Hải Xanh - Đại học Điện lực, 2006.

3. Kỹ thuật vi xử lý và lập trình ASSEMBLY cho hệ vi xử lý - Đỗ Xuân Tiến - NXB Khoa học và Kỹ thuật, 2002.

4. Máy tính IBM PC và lập trình ASSEMBLY cho IBM PC - Hoàng Đức Hải - NXB Khoa học và Kỹ thuật, 1999.

5. Kỹ thuật lập trình điều khiển hệ thống - Đỗ Xuân Tiến - NXB Khoa học và Kỹ thuật, 2002.

7. Các giáo trình, tài liệu liên quan đến các ngôn ngữ lập trình hệ thống thông dụng hiện nay.

NỘI DUNG BÀI GIẢNG

Bài 1: TỔNG QUAN VỀ MÁY TÍNH

1.1 Giới thiệu chung

1.1.1 Giới thiệu

Máy tính (computer) - còn gọi là máy điện toán - là những thiết bị hay hệ thống dùng để lưu trữ, xử lý thông tin. Máy tính được cấu thành bởi các thành phần chức năng cơ bản đã xây dựng trước. Quá trình tác động tương hỗ phức tạp của các thành phần này tạo cho máy tính có tiềm năng to lớn trong xử lý thông tin. Nếu chương trình máy tính được xây dựng một cách chính xác, máy tính có thể mô phỏng lại một số khía cạnh của một vấn đề hay của một hệ thống nào đó trong thế giới thực.

Kể từ khi ra đời từ những năm 1950, những tiến bộ trong khoa học và công nghệ không ngừng phát triển, các tính năng của máy tính được ngày càng hoàn thiện. Tuy nhiên, các nguyên lý hoạt động cũng như kiến trúc của máy tính vẫn chưa thay đổi đáng kể. Bài này tập trung giới thiệu các nguyên lý thiết kế máy tính cơ bản.

1.1.2 Máy tính điện tử

Do sự phát triển nhanh của lĩnh vực ứng dụng máy tính, đã có nhiều quan niệm khác nhau về máy tính điện tử. Theo nghĩa chung nhất, người ta quan niệm máy tính điện tử (người ta thường gọi tắt là máy tính) như sau : "máy tính điện tử là phương tiện được xây dựng dựa trên các linh kiện điện tử để thực hiện các phép tính toán, biến đổi toán học,...".

Có hai loại máy tính điện tử đó là :

- Máy tính số (Digital Computer) là máy tính có nhiệm vụ xử lý dữ liệu được biểu diễn dưới dạng các đại lượng rời rạc như : bóng đèn, transistor,....

- Máy tính tương tự làm việc với các dữ liệu được biểu diễn dưới dạng các đại lượng liên tục điện từ, điện áp,...

Hệ thống máy tính thường được cấu thành bởi hai thành phần đó là phần cứng và phần mềm :

- Phần cứng (Hardware) là các đối tượng vật lý hữu hình như : bản mạch chính (Mainboard), bộ nhớ trong (RAM), đĩa cứng (HardDisk), màn hình (Display Screen),...

- Phần mềm (Software): là các chương trình được cài đặt trên máy tính nhằm thực hiện các thao tác theo yêu cầu của con người. Mỗi phần mềm máy tính là một ánh xạ của phần cứng máy tính, hay còn gọi là máy ảo.

1.1.3 Phân loại máy tính

Dựa vào kích thước vật lý, hiệu suất và lĩnh vực sử dụng, người ta chia máy tính số thành 5 loại cơ bản sau, các loại có thể trùm lên nhau một phần:

- MicroComputer: còn gọi là PC (personal computer), là những máy tính có kích thước nhỏ, năng lực lưu trữ và tính toán thấp. MicroComputer thường được dùng bởi một người và thực thi các ứng dụng phục vụ cho công việc cá nhân như các ứng dụng văn phòng, giải trí, ...

- MiniComputer: là những máy tính cỡ trung bình, kích thước thường lớn hơn PC. MiniComputer có khả năng hỗ trợ hàng trăm người sử dụng đồng thời, và thường dùng để thực hiện các ứng dụng có khối lượng tính toán lớn như dịch vụ Web, dịch vụ Mail,....

- Mainframe: là loại máy tính cỡ lớn, có khả năng hỗ trợ hàng ngàn người sử dụng tính đa dụng. Nó có thể dùng cho các ứng dụng quản lý hoặc xử lý các giao dịch như trong ngân hàng,...cũng như các tính toán khoa học. Mainframe thường dùng kỹ thuật xử lý song song và có hệ thống vào/ra mạnh. Giá một máy tính lớn có thể từ vài trăm ngàn USD đến hàng triệu USD.

- SuperComputer: Đây là các siêu máy tính, đắt tiền nhất và tính năng kỹ thuật cao nhất, được thiết kế đặc biệt để đạt được tốc độ thực hiện các phép tính dấu phẩy động cao nhất có thể được. Các siêu máy tính thường là các máy tính vectơ hay các máy tính dùng kỹ thuật vô hướng và được thiết kế để tính toán khoa học, mô phỏng các hiện tượng. Các siêu máy tính được thiết kế với kỹ thuật xử lý song song với rất nhiều bộ xử lý (hàng ngàn đến hàng trăm ngàn bộ xử lý trong một siêu máy tính).

1.2 Nguyên lý thiết kế máy tính cơ bản

1.2.1 Nguyên lý Turing

Alan Turing (1912 - 1954) là một nhà toán học người Anh đã đưa ra một thiết bị tính đơn giản gọi là máy Turing. Về lý thuyết, mọi quá trình tính toán có thể được thì đều có thể mô phỏng lại trên máy Turning. Máy Turning gồm có :

- Một bộ điều khiển trạng thái hữu hạn (finite control), trong đó có các trạng thái đặc biệt như trạng thái khởi đầu và trạng thái kết thúc.

- Một băng ghi (tape) chứa tín hiệu trong các ô.

- Một đầu đọc (head) và ghi có thể di chuyển theo 2 chiều trái hoặc phải một đơn vị.

Hình 1.1: Sơ đồ máy Turing

Ðầu đọc/ghi mang chức năng thông tin nối giữa Bộ điều khiển hữu hạn và băng ghi. Ðầu bằng cách đọc dấu hiệu từ băng và cũng dùng nó để thay đổi dấu hiệu trên băng. Bộ kiểm soát vận hành theo từng bước riêng biệt; mỗi bước nó thực hiện 2 chức năng tùy thuộc vào trạng thái hiện tại của nó và tín hiệu hiện tại của băng:

(1) Ðặt bộ điều khiển ở trạng thái ban đầu q1, băng trắng và đầu đọc/ghi chỉ vào ô khởi đầu.

(2) Nếu:

(a) trạng thái hiện tại q trùng với trạng thái kết thúc qo thì máy sẽ dừng. (b) ngược lại, trạng thái q sẽ chuyển qua q, tín hiệu trên băng s thành s và đầu đọc dịch chuyển sang phải hoặc trái một đơn vị. Máy hoàn thành xong một bước tính toán và sẵn sàng cho bước tiếp theo.

1.2.2 Nguyên lý Von Neumann

Năm 1946, nhà toán học Mỹ Von Neumann (1903 - 1957) đã đề ra một nguyên lý máy tính hoạt động theo một chương trình được lưu trữ và truy nhập theo địa chỉ. Nguyên lý này được trình bày ở một bài báo nổi tiếng nhan đề: "Thảo luận sơ bộ về thiết kế logic của máy tính điện tử". Nội dung nguyên lý Von Neumann gồm:

(i) Máy tính có thể hoạt động theo một chương trình đã được lưu trữ Theo Von Neumann, chúng ta có thể tập hợp các lệnh cho máy thi hành theo một chương trình được thiết kế và coi đó như một tập dữ liệu. Dữ liệu này được cài vào trong máy và được truyền bằng xung điện. Ðây là một cuộc cách mạng mới cho máy tính nhằm tăng tốc độ tính toán vào thời đó vì trước kia máy chỉ có thể nhận được các lệnh từ băng giấy hoặc bìa đục lỗ và nạp vào bằng tay. Nếu gặp bài toán lặp lại nhiều lần thì cũng tiếp tục bằng cách nạp lại một cách thủ công như vậy gây hạn chế trong tính toán sử dụng.

(ii)Bộ nhớ được địa chỉ hóa Mỗi dữ liệu đều có một địa chỉ của vùng nhớ chứa số liệu đó. Như vậy để truy nhập dữ liệu ta chỉ cần xác định địa chỉ của nó trên bộ nhớ. (iii) Bộ đếm của chương trình Nếu mỗi câu lệnh phải dùng một vùng nhớ để chứa địa chỉ của câu lệnh tiếp theo thì không gian bộ nhớ sẽ bị thu hẹp. Ðể khắc phục hạn chế này, máy được gắn một thanh ghi để chỉ ra vị trí của lệnh tiếp theo cần được thực hiện và nội dung của nó tự động được tăng lên mỗi lần lệnh được truy cập. Muốn đổi thứ tự lệnh ta chỉ cần thay đổi nội dung thanh ghi bằng một địa chỉ của lệnh cần được thực hiện tiếp.

Bài 2: TỔ CHỨC CỦA MÁY TÍNH

2.1 Kiến trúc chung của máy tính Kể từ khi ra đời cho đến nay, kiến trúc cơ sở của các máy vi tính ngày nay không thay đổi nhiều. Mọi máy tính số đều được hình thành từ các thành phần chính sau: bộ xử lý trung tâm (CPU: Central Processing Unit), bộ nhớ trong, bộ phận Vào/Ra thông tin. Các bộ phận trên được kết nối với nhau thông qua các hệ thống Bus. Hệ thống Bus bao gồm: bus địa chỉ, bus dữ liệu và bus điều khiển. Bus địa chỉ và bus dữ liệu dùng trong việc chuyển dữ liệu giữa các bộ phận trong máy tính. Bus điều khiển làm cho sự trao đổi thông tin giữa các bộ phận được đồng bộ. Thông thường người ta phân biệt một bus hệ thống dùng trao đổi thông tin giữa CPU và bộ nhớ trong (thông qua cache), và một bus Vào/Ra dùng trao đổi thông tin giữa các bộ phận Vào/Ra và bộ nhớ trong. Một chương trình sẽ được sao chép từ đĩa cứng vào bộ nhớ trong cùng với các thông tin cần thiết cho chương trình hoạt động, các thông tin này được nạp vào bộ nhớ trong từ các bộ phận các thiết bị vào dữ liệu (ví dụ như một bàn phím hay một đĩa từ). Bộ xử lý trung tâm sẽ đọc các lệnh và dữ liệu từ bộ nhớ, thực hiện các lệnh và lưu các kết quả trở lại bộ nhớ trong hay cho xuất kết quả ra bộ phận xuất thông tin (màn hình hay máy in).

Hình 2.1: Kiến trúc chung của máy tính

Thành phần cơ bản của một máy tính bao gồm :

Bộ nhớ trong: Đây là một tập hợp các ô nhớ, mỗi ô nhớ có một số bit nhất định và chứa một thông tin được mã hoá thành số nhị phân mà không quan tâm đến kiểu của dữ liệu mà nó đang chứa. Các thông tin này là các lệnh hay số liệu. Mỗi ô nhớ của bộ nhớ trong đều có một địa chỉ. Thời gian thâm nhập vào một ô nhớ bất kỳ trong bộ nhớ là như nhau. Vì vậy, bộ nhớ trong còn được gọi là bộ nhớ truy cập ngẫu nhiên (RAM - Random Access Memory). Độ dài của một từ máy tính (computer word) là 32 bit (hay 4 byte), tuy nhiên dung lượng một ô nhớ thông thường là 8 bit (1 Byte).

Bộ xử lý trung tâm (CPU - Central Processing Unit): Đây là bộ phận thi hành lệnh của máy tính, CPU lấy lệnh và lấy các số liệu mà lệnh đó xử lý từ bộ nhớ trong để tiến hành xử lý. Bộ xử lý trung tâm gồm có hai phần: phần thi hành lệnh và phần điều khiển. Phần thi hành lệnh bao gồm bộ số học và logic (ALU: Arithmetic And Logic Unit) và các thanh ghi. Nó có nhiệm vụ làm các phép toán trên số liệu. Phần điều khiển có nhiệm vụ đảm bảo thi hành các lệnh một cách tuần tự và tác động các mạch chức năng để thi hành các lệnh.

Hình 2.2 : Sơ đồ hoạt động của máy tính PC

Bộ phận Vào/ Ra (I/O - Input/Output): đây là bộ phận xuất nhập thông tin, bộ phận này thực hiện sự giao tiếp giữa máy tính và người dùng hay giữa các máy tính với môi trường (như là các hệ thống khác trọng mạng máy tính, ...). Các bộ phận Vào/Ra thường gặp là: bộ lưu trữ ngoài, màn hình, máy in, bàn phím, chuột, máy quét ảnh, các giao diện mạng cục bộ hay mạng diện rộng...

Sự khác biệt quan trọng nhất của các hệ máy tính là kích thước và tốc độ. Sự phát triển không ngừng của các thế hệ máy tính nhờ vào hai yếu tố quan trọng, đó là sự phát triển của công nghệ chế tạo IC và công nghệ chế tạo bộ nhớ.

2.2 Hoạt động chung của hệ thống máy tính

Các đơn vị chức năng và mối quan hệ của chúng có thể được minh họa bằng hình 2.3 dưới đây (Các đường vẽ bằng nét đứt chỉ mối quan hệ điều khiển. Các đường vẽ bằng nét liền là các con đường truyền dữ liệu). Có thể mô tả sự hoạt động của máy tính một cách khái quát như sau:

Trước hết các chương trình và số liệu ban đầu được đưa vào bộ nhớ trong, đó thường là bộ nhớ bán dẫn RAM. Khi bắt đầu thi hành chương trình, lệnh đầu tiên trong tập lệnh đã được tích lũy ở bộ nhớ trong được đưa vào đơn vị điều khiển - CU.

CU tiến hành giải mã lệnh, nếu việc giải mã cho thấy lệnh cần một hay một số toán hạng thì nó sẽ xác định xem toán hạng đó nằm ở đâu trong bộ nhớ, việc này thường được gọi là tính địa chỉ các toán hạng. Toán hạng là thành phần tham gia phép tính cơ bản. Ví dụ như một phép cộng có thể có hai toán hạng là hai số hạng tham gia phép cộng. Còn khi cộng một dãy hơn hai số hạng thì phải thực hiện theo một thuật toán chẵng hạn như công liên tiếp từng số hạng với tổng.

Sau khi tính địa chỉ các toán hạng, CU sẽ phát ra tín hiệu điều khiển tới các thành phần cần thiết của hệ thống để lấy các toán hạng về, đặt vào các thanh ghi bên trong đơn vị tính toán ALU. CU phát tín hiệu điều khiển tới ALU để ALU thực hiện phép toán trên các toán hạng đã lấy về. Kết quả phép toán có thể được để trong ALU để nó tham gia vào các phép toán tiếp theo hoặc đưa vào bộ nhớ trong. Điều này tùy thuộc vào mã lệnh mà CU đã nhận vào và giải mã. Nếu CU giải mã và thấy rằng, mã lệnh cho biết cần tiến hành rẽ nhánh chương trình, nó sẽ tính địa chỉ bộ nhớ của lệnh kế tiếp cần thực hiện và phát ra các tín hiệu điều khiển để lấy lệnh kế tiếp về, sau đó mọi việc lại diễn ra lặp lại tương tự như quá trình trên trên.

Nếu sau khi giải mã, CU thấy rằng không cần rẽ nhánh chương trình, nó sẽ phát ra tín hiệu điều khiển để lấy về lệnh ngay sau nó trong bộ nhớ, sau đó mọi việc lại diễn ra lặp lại tương tự như quá trình trên.

Hình 2.3: Mối quan hệ logic giữa các thành chức năng trong máy tính

Quan hệ giữa bộ nhớ trong và ALU là quan hệ 2 hướng, tức là số liệu sau khi đã được đưa vào xử lý trong ALU theo đúng ý muốn của người lập chương trình sẽ lại được đưa ra bộ nhớ trong để sau đó khi có lệnh từ CU số liệu này có thể được đưa ra thiết bị ra.

Qua mối quan hệ nêu trên ta thấy rằng, CU, ALU và Bộ nhớ trong tham gia trực tiếp vào quá trình xử lý số liệu, chính vì vậy mà chúng còn được gọi là Đơn vị xử lý trung tâm - CPU.

Tập hợp các thiết bị vào và thiết bị ra thường được gọi bằng một cái tên chung là thiết bị ngoại vi (thuật ngữ tiếng Anh là Peripherals, hoặc I/O Devices). Có những thiết bị trong quá trình hoạt động của máy tính khi thì đóng vai trò của thiết bị vào, khi thì đóng vai trò của thiết bị ra ví dụ như đĩa cứng, đĩa CD. Thông tin trao đổi giữa bộ nhớ ngoài và hệ thống máy tính luôn thông qua bộ nhớ trong, dưới sự điều khiển của CU. Bộ nhớ ngoài của các máy tính ngày nay được sử dụng thường xuyên nên tốc độ hoạt động của chúng có ảnh hưởng nhiều tới tốc độ chung của hệ thống máy tính.

2.3 Sự phân mức của hệ thống máy tính

2.3.1 Giới thiệu

Máy tính được tạo ra nhằm giải quyết các vấn đề bằng cách thực hiện các chỉ thị do con người cung cấp. Chuỗi các chỉ thị này gọi là chương trình. Các mạch điện tử trong một máy tính số sẽ thực hiện một số giới hạn các chỉ thị đơn giản cho trước, tập chỉ thị này gọi là tập lệnh của máy tính. Ví dụ như chỉ thị cộng hai số, so sánh với số 0, các phép toán logic,... Tất cả các chương trình muốn thực thi đều phải được biến đổi sang tập lệnh trước khi được thi hành.

Tập lệnh của máy tính tạo thành một ngôn ngữ giúp con người có thể điều khiển hoạt động của máy tính, ngôn ngữ này gọi là ngôn ngữ máy. Tuy nhiên, hầu hết các ngôn ngữ máy đều đơn giản để thực hiện. Người ta đã thiết kế và xây dựng tập các lệnh từ tập các chỉ thị ban đầu của máy tính để có thể thực hiện được các yêu cầu phức tạp hơn, tập các lệnh này thích hợp với con người hơn. Ngôn ngữ máy sẽ được gọi là ngôn ngữ cấp 1 (L1) và ngôn ngữ vừa được hình thành gọi là ngôn ngữ cấp 2 (L2). Một phương pháp thực thi chương trình L2 là chuyển một lệnh trong L2 bằng một chuỗi các lệnh tương đương trong L1. Kết quả là sẽ tạo thành một chương trình L1 và máy tính sẽ thực hiện chương trình tương đương L1 thay vì thực hiện chương trình L2, kỹ thuật này gọi là biên dịch (compile). Một cách thực hiện chương trình L2 khác là mỗi lệnh trong chương trình L2 sẽ được ánh xạ sang một chuỗi lệnh tương đương trong L1 sau đó tiến hành thực hiện lệnh, tiếp đến là tiến hành thực hiện câu lệnh tiếp theo của chương trình L2 một cách tương tự, quá trình này lặp cho đến câu lệnh cuối cùng trong chương trình L2 được thực hiện. Kỹ thuật thực hiện này được gọi là thông dịch (interprete), nó không yêu cầu tạo ra một chương trình mới trong L1.

Biên dịch và thông dịch đều thực hiện chương trình L2 thông qua tập lệnh trong chương trình L1. Chúng khác nhau ở chỗ là khi biên dịch thì toàn bộ chương trình L2 sẽ được chuyển thành chuỗi lệnh L1 rồi sau đó mới được thực thi còn đối với phương pháp thông dịch thì sẽ thực thi từng lệnh trong L2. Để thuận tiện hơn, ta giả sử tồn tại một máy tính sử dụng ngôn ngữ máy là L2, ta gọi máy tính này là máy ảo (virtual machine). Tuy nhiên, trong thực tế, để có thể thực hiện biên dịch và thông dịch, các ngôn ngữ L1 và L2 không được khác nhau nhiều. Do đó, ngôn ngữ L2 cũng không thật sự thuận lợi cho người lập trình. Vì vậy, người ta đã xây dựng một tập lệnh dựa trên sử dụng các lệnh trong tập lệnh L2, tập lệnh mới này tạo thành một ngôn ngữ và ta gọi là ngôn ngữ L3. Ta có thể viết các chương trình trong L3 như là đã tồn tại máy tính sử dụng ngôn ngữ L3 (máy ảo L3). Các chương trình này sẽ được dịch sang ngôn ngữ L2 và được thực thi bằng một chương trình dịch L2 tương đương như việc ánh xạ chương trình L2 sang L1.

Việc xây dựng toàn bộ chuỗi các ngôn ngữ, mỗi ngôn ngữ được tạo ra sẽ thích hợp hơn ngôn ngữ trước đó sẽ có thể tiếp tục cho đến khi nhận được ngôn ngữ thích hợp nhất. Tuy nhiên, ngôn ngữ càng ở mức cao thì độ linh hoạt và mềm dẻo càng kém, do người lập trình phụ thuộc nhiều vào tập lệnh của ngôn ngữ sử dụng. Sơ đồ một máy ảo n cấp có thể biểu diễn như sau:

Hình 2.4: Sự phân mức của hệ thống máy tính

Một máy tính số có n cấp có thể xem như có n-1 máy ảo khác nhau, mổi máy ảo có một ngôn ngữ máy riêng. Các chương trình viết trên các máy ảo này không thể thực thi trực tiếp mà phải dịch thành các ngôn ngữ máy cấp thấp hơn. Chỉ có máy thật dùng ngôn ngữ máy L1 mới có thể thực thi trực tiếp bằng các mạch điện tử. Một lập trình viên sử dụng máy ảo cấp n không cần biết tất cả các trình dịch này. Chương trình trong máy ảo cấp n sẽ được thực thi bằng cách dịch thành ngôn ngữ máy cấp thấp hơn và ngôn ngữ máy này sẽ được dịch thành ngôn ngữ máy thấp hơn nữa hay dịch trực tiếp thành ngôn ngữ máy L1 và thực thi trực tiếp trên các mạch điện tử.

2.3.2 Sự phân mức của hệ thống máy tính

Hầu hết các máy tính hiện nay gồm có 6 cấp như sau:

Hình 2.5: Sự phân mức của hệ thống máy tính

Cấp 0 chính là phần cứng của máy tính. Các mạch điện tử của cấp này sẽ thực thi các chương trình ngôn ngữ máy của cấp 1. Trong cấp logic số, đối tượng quan tâm là các cổng logic. Các cổng này được xây dựng từ một nhóm các transistor. Cấp 1 là cấp ngôn ngữ máy thật sự. Cấp này có một chương trình gọi là vi chương trình (microprogram), vi chương trình có nhiệm vụ thông dịch các chỉ thị của cấp 2. Hầu hết các lệnh trong cấp này là di chuyển dữ liệu từ phần này đến phần khác của máy hay thực hiện việc một số kiểm tra đơn giản.

Mỗi máy cấp 1 có một hay nhiều vi chương trình chạy trên chúng. Mỗi vi chương trình xác định một ngôn ngữ cấp 2. Các máy cấp 2 đều có nhiều điểm chung ngay cả các máy cấp 2 của các hãng sản xuất khác nhau. Các lệnh trên máy cấp 2 được thực thi bằng cách thông dịch bởi vi chương trình mà không phải thực thi trực tiếp bằng phần cứng.

Cấp thứ 3 thường là cấp hỗn hợp. Hầu hết các lệnh trong ngôn ngữ của cấp máy này cũng có trong ngôn ngữ cấp 2 và đổng thời có thêm một tập lệnh mới, một tổ chức bộ nhớ khác và khả năng chạy 2 hay nhiều chương trình song song. Các lệnh mới thêm vào sẽ được thực thi bằng một trình thông dịch chạy trên cấp 2, gọi là hệ điều hành. Nhiều lệnh cấp 3 được thực thi trực tiếp do vi chương trình và một số lệnh khác được thông dịch bằng hệ điều hành (do đó, cấp này là cấp hỗn hợp).

Cấp 4 thật sự là dạng tượng trưng cho một trong các ngôn ngữ. Cấp này cung cấp một phương pháp viết chương trình cho các cấp 1, 2, 3 dễ dàng hơn. Các chương trình viết bằng hợp ngữ được dịch sang các ngôn ngữ của cấp 1, 2, 3 và sau đó được thông dịch bằng các máy ảo hay thực tương ứng.

Cấp 5 bao gồm các ngôn ngữ được thiết kế cho người lập trình nhằm giải quyết một vấn đề cụ thể. Các ngôn ngữ này được gọi là cấp cao. Một số ngôn ngữ cấp cao như Basic, C, Cobol, Fortran, Lisp, Prolog, Pascal và các ngôn ngữ lập trình hướng đối tượng như C++, J++, ... Các chương trình viết bằng các ngôn ngữ này thường được dịch sang cấp 3 hay 4 bằng các trình biên dịch (compiler).

2.3.3 Lịch sử phát triển của máy tính nhiều cấp

Các máy tính đầu tiên trong thập niên 40 chỉ có 2 cấp: cấp máy quy ước và cấp logic số. Các lập trình viên phải làm việc trên cấp máy quy ước và chương trình được thực thi trên cấp logic số. Trong thập niên 50, Wikes đề xuất ý tưởng thiết kế máy tính 3 cấp. Máy tính này có một trình thông dịch cài đặt sẵn, không thay đổi, có nhiệm vụ thực thi các chương trình trong cấp máy quy ước. Như vậy, phần cứng chỉ thực thi các vi chương trình với số lệnh giới hạn nên các mạch điện tử cũng đơn giản hơn.

Trình dịch hợp ngữ (assembler) và các trình biên dịch cho ngôn ngữ cấp cao (compiler) phát triển vào những năm 50 tạo điều kiện dễ dàng hơn cho lập trình viên. Tuy nhiên, vào lúc này, lập trình viên phải tự điều hành máy. Vào những năm 60, việc tự động hóa công việc điều hành bắt đầu được thực hiện. Một chương trình gọi là hệ điều hành (operating system) luôn được lưu trữ bên trong máy tính. Lập trình viên cung cấp các thẻ điều khiển và chương trình, chúng sẽ được đọc và thực thi bằng hệ điều hành.

Trong nhiều năm tiếp theo, hệ điều hành càng trở nên phức tạp. Các lệnh, tiện ích và đặc trưng mới được thêm vào cấp máy quy ước cho đến khi xuất hiện một cấp mới. Một số lệnh của cấp mới này giống như cấp máy quy ước nhưng một số lệnh lại hoàn toàn khác, nhất là các lệnh xuất nhập. Vào những năm đầu thập niên 60, các nghiên cứu ở đại học Dartmouth, MIT đã phát triển các hệ điều hành cho phép lập trình viên có thể tác động trực tiếp lên máy tính. Trong các hệ thống này, thiết bị đầu cuối từ xa được nối với máy tính trung tâm qua các đường điện thoại. Một lập trình viên có thể gõ chương trình và nhận kết quả trả về tức thời ở bất cứ nơi nào có thiết bị đầu cuối. Các hệ thống này gọi là hệ thống chia sẻ thời gian (time-sharing system).

2.4 Phần cứng và phần mềm

Các chương trình viết bằng ngôn ngữ máy (cấp 1) được thực thi trực tiếp bằng các mạch điện tử của máy tính, không có trình thông dịch và biên dịch nào can thiệp vào. Các mạch điện tử cùng với bộ nhớ và các thành phần xuất / nhập tạo nên phần cứng máy tính. Phần cứng bao gồm các mạch tích hợp, các board mạch in, cable, nguồn cung cấp, bộ nhớ, thiết bị đầu cuối,... Phần mềm bao gồm các giải thuật và các biểu diễn của các giải thuật này gọi là chương trình. Nó chính là tập hợp các lệnh tạo thành một chương trình, chứ không phải là các phương tiện vật lý lưu trữ chúng. Một dạng trung gian giữa phần mềm và phần cứng gọi là phần dẻo (firmware). Nó chính là thành phần bao gồm phần mềm được đặt vào bên trong các mạch điện tử trong quá trình sản xuất. Phần dẻo được dùng khi chương trình không thay đổi hay hiếm khi phải thay đổi như chương trình điều khiển đặt trong ROM BIOS. Một thao tác bất kỳ thực thi bằng phần mềm có thể được gắn trực tiếp vào phần cứng và một lệnh bất kỳ thực thi bằng phần cứng cũng có thể được mô phỏng bằng phần mềm. Quyết định đặt một số chức năng vào phần mềm và các chức năng khác vào phần cứng dựa trên các yếu tố giá thành, tốc độ, độ tin cậy. Trên nhiều máy tính đầu tiên, phần cứng và phần mềm được phân biệt rõ ràng. Phần cứng thực hiện vài lệnh đơn giản như cộng và nhảy, các thủ tục khác phải do lập trình viên tự thiết kế. Sau đó, một số thao tác thường xuyên thực thi đòi hỏi các nhà thiết kế hướng đến yêu cầu xây dựng các mạch điện từ thực thi các thao tác này. Kết quả là hình thành xu hướng di chuyển các thao tác theo hướng từ cấp cao xuống cấp thấp hơn. Một số thao tác trước đây được lập trình ở cấp máy quy ước, sau đó được chuyển xuống thực thi ở phần cứng.

Tuy nhiên, khi xuất hiện thế hệ máy tính dùng vi lập trình và thế hệ máy tính nhiều cấp, lại xuất hiện xu hướng ngược lại, nghĩa là di chuyển các thao tác từ cấp thấp lên cấp cao hơn. Ví dụ như lệnh cộng sẽ được thực hiện trực tiếp bằng phần cứng ở các máy trước kia. Đối với máy tính được vi lập trình hóa, lệnh cộng của cấp máy quy ước được thông dịch bằng một vi chương trình chạy trên cấp thấp nhất và được thực thi bằng một chuỗi các bước nhỏ: tìm lệnh, nạp lệnh, xác định lệnh, định vị dữ liệu, tìm và nạp dữ liệu từ bộ nhớ, thực thi phép cộng và lưu trữ kết quả.

Một số đặc trưng trước đây được lập trình ở cấp máy quy ước, sau đó được thực hiện bằng phần cứng hay vi chương trình:

- Các lệnh nhân, chia số nguyên.

- Các lệnh xử lý dấu chấm động.

- Các lệnh gọi thủ tục và quay về từ lệnh gọi thủ tục.

- Các lệnh đếm.

- Các lệnh quản lý chuỗi ký tự.

- Các đặc trưng làm tăng tốc độ tính toán chuỗi: định địa chỉ chỉ số và định địa chỉ gián tiếp.

- Các đặc trưng cho phép chương trình di chuyển trong bộ nhớ sau khi đã thực thi (cấp phát lại bộ nhớ).

- Các xung clock cho thủ tục định thời.

- Các ngắt báo hiệu cho máy tính.

- Khả năng chuyển đổi quá trình.

Như vậy, ta thấy ranh giới giữa phần cứng và phần mềm là không nhất định và thường xuyên thay đổi. Theo quan điểm của lập trình viên, cách thức thực thi một lệnh là không quan trọng, ngoại trừ tốc độ thực thi. Như vậy, phần cứng của người này có thể là phần mềm của người kia. Từ đó dẫn đến ý tưởng thiết kế máy tính có cấu trúc (structured computer). Đó là cấu trúc một máy tính thành một chuỗi các cấp, lập trình viên làm việc trên cấp n không quan tâm đến các cấp khác.

Bài 3: BỘ VI XỬ LÝ CỦA INTEL

Có thể nói, lịch sử phát triển của máy tính PC gắn liền với lịch sử phát triển của các thế hệ bộ vi xử lý. Bộ vi xử lí trong bản mạch chính là thành phần quan trọng nhất của máy tính của PC. Có hai thuật ngữ dùng để chỉ bộ phận này là: Bộ vi xử lý (MicroProcessor - MP) hoặc Đơn vị xử lý trung tâm (Central Processing Unit - CPU). Nó được phát triển trên cơ sở công nghệ chế tạo các mạch vi điện tử có độ tích hợp rất lớn với các phần tử cơ bản là các transistor trường MOS có độ tiêu hao công suất rất nhỏ. Trong họ vi xử lý 80x86, chúng thực hiện tất cả các hoạt động logic và số học. Nói chung, vi xử lí đọc số liệu từ bộ nhớ, xử lí nó theo cách được xác định bởi lệnh và sau đó ghi kết qủa vào bộ nhớ hoặc thiết bị ngoại vi.

3.1 Cấu trúc chung của bộ vi xử lý 80286 Intel

Các bộ vi xử lý tiên tiến hiện nay đã đạt đến tốc độ xử lý hàng trăm triệu, thậm chí hàng tỷ phép tính trong một giây do có mật độ tích hợp vô cùng lớn cộng với việc áp dụng những giải pháp kỹ thuật nhằm tối ưu hoá hiệu năng tính toán. Tuy nhiên, cấu trúc chung của các bộ vi xử lý cho đến nay vẫn dựa trên những nguyên tắc thiết kế cơ bản từ đầu những năm 70 của thế kỷ XX. Intel là hãng đi đầu trong công nghệ chế tạo bộ vi xử lý và bài này trình bày cấu trúc của bộ vi xử lý 80286 - bộ vi xử lý được đánh giá là có vai trò đi tiên phong trong việc tiếp cận với các hệ điều hành đa nhiệm.

Sơ đồ chân tín hiệu của 80286 được thể hiện như hình 3.1. Những đặc trưng cơ bản của 80286 là:

- Tần số xung nhịp là 16MHz.

- Khả năng địa chỉ hoá được 16MB bộ nhớ vật lý và 1GB nhớ ảo.

- Có hai chế độ hoạt động là chế độ thực và chế độ ảo (chế độ bảo vệ).

- Có khả năng làm việc với bộ đồng xử lý.

Hình 3.1: Sơ đồ bố trí chân tín hiệu của 80286

Các tín hiệu của 80286 được phân theo nhóm và được tổ chức thành 3 nhóm cơ bản:

a. Nhóm tín hiệu địa chỉ:

A0 - A23 là 24 chân tín hiệu địa chỉ dùng để địa chỉ hoá cho các bộ nhớ vật lý và các cổng vào/ra. Dung lượng bộ nhớ tối đa có thể địa chỉ hoá trực tiếp được là 224 = 16MB. Khi làm việc với các cổng vào/ra thì các chân địa chỉ A16 - A23 được ghim ở mức logic 0, do đó 80286 có thể quản lý trực tiếp 16K cổng vào/ra.

b. Nhóm tín hiệu dữ liệu:

D0 - D15 là 16bit của kênh dữ liệu 2 chiều, ba trạng thái và có mức tích cực là logic 1.

c. Nhóm tín hiệu điều khiển và đồng bộ:

- CLK là tín hiệu xung đồng bộ cho bộ vi xử lý. Tần số vào CLK sẽ được chia đôi ở bên trong 80286 và tạo thành đồng hồ ngoại vi PCLK. Mỗi CLK được gọi là 1 pha của 80286.

- Cap là chân gắn tụ lọc nhiễu. Tụ này có giá trị 0,047μF ± 20% có tác dụng khử nhiễu xung của nguồn nuôi.

- /BHE là tín hiệu cho phép chọn phần cao của kênh dữ liệu. Tín hiệu này kết hợp với A0 cho phép cho biết dữ liệu được truyền theo byte hay word:

BHE

A0

Chøc n¨ng

0 0 D÷ liÖu--WORD tõ D15-D0

0 1 D÷ liÖu--BYTE cao tõ D15-D8

1 0 D÷ liÖu--BYTE thÊp tõ D7-D0

1 1 Kh«ng sö dông

- M/IO là tín hiệu dùng để phân biệt bộ nhớ và cổng vào/ra thông tin khi mà bộ vi xử lý cần quy chiếu chúng, nếu quy chiếu bộ nhớ thì M/IO = 1 còn quy chiếu cổng vào/ra thì M/IO = 0.

- Các tín hiệu COD/INTA cùng với các tín hiệu M/IO, /S1, /S0 cho phép phân biệt các chu kỳ máy khác nhau theo bảng sau:

COD/INTA

M/Io

S1

S0

Chu kú m¸y cña 80286

0 0 0 0 Tr¶ lêi ng¾t

0 0 0 1 Ch­a sö dông

0 0 1 0 Ch­a sö dông

0 0 1 1 Kh«ng lµ chu kú m¸y

0 1 0 0 A1=1 dõng A1=0 ®ãng

0 1 0 1 Chu kú m¸y MR

0 1 1 0 Chu kú m¸y MW

0 1 1 1 Khéng lµ chu kú m¸y

1 0 0 0 Ch­a sö dông

1 0 0 1 Chu kú m¸y IOR

1 0 1 0 Chu kú m¸y IOW

1 0 1 1 Ch­a sö dông

1 1 0 0 Ch­a sö dông

1 1 0 1 Chu kú m¸y OF

1 1 1 0 Ch­a sö dông

1 1 1 1 Kh«ng lµ chu kú m¸y

- /READY là tín hiệu sẵn sàng làm việc của thiết bị ngoại vi, đây là tín hiệu được dùng để hỗ trợ cho hoạt động của CPU khi giao tiếp với thiết bị ngoại vi có tốc độ chậm.

- INTR là tín hiệu yêu cầu ngắt của ngoại vi, /INTA là tín hiệu trả lời ngắt của CPU, NMI là tín hiệu ngắt không che được (các tín hiệu này được đề cập chi tiết trong bài Hoạt động ngắt của máy tính).

- HOLD và HLDA là tín hiệu phục vụ cho chế độ thâm nhập bộ nhớ trực tiếp DMA (sẽ được đề cập trong bài tổ chức bộ nhớ cho máy tính PC).

- LOCK là tín hiệu cấm các bộ vi xử lý khác (trong chế độ làm việc song song) dành quyền làm chủ kênh hệ thống. Lệnh LOCK khởi động tín hiệu trên và nó sẽ trở thành mức tích cực một cách tự động khi thực hiện lệnh XCHG hoặc ở chu kỳ /INTA hoặc trong thời gian thâm nhập bảng các bộ mô tả.

- PEREQ và /PEACK phục vụ chế độ đối thoại giữa bộ vi xử lý 80286 với các bộ đồng xử lý ví dụ như bộ đồng xử lý 80287. Tín hiệu PEREQ ở mức logíc 1 là tín hiệu yêu cầu 80286 gửi một toán hạng cho bộ đồng xử lý. Tín hiệu /PEACK thông báo cho bộ đồng xử lý biết toán hạng mà nó yêu cầu đang được chuyển tới.

- /BUSY và /ERROR là tín hiệu điều khiển cho bộ đồng xử lý. /BUSY thông báo cho 80286 biết rằng bộ đồng xử lý đang bận. Lúc này bộ vi xử lý 80286 thực hiện các lệnh ESC và WAIT để đợi bộ đồng xử lý. Tín hiệu /ERROR sẽ báo cho 80286 biết rằng bộ đồng xử lý phát hiện điều kiện ngoại lệ không che được.

- RESET là tín hiệu khởi động có mức tích cực là mức logíc 1. Tín hiệu này sẽ lập trạng thái ban đầu cho tất cả các thành phần cần thiết của hệ máy tính. Khi có RESET thì các tín hiệu ra có mức logíc như sau:

Các tín hiệu ra Trạng thái

/S1, /S0, /PEACK, A0-A23 1

/BHE, /LOCK 1

M/IO, CLD/INTA, HLDA 0

D0-D15 Trở kháng cao

Hình 3.2 biểu diễn sơ đồ khối chức năng (bên trong) của bộ vi xử lý 8028:

Hình 3.2: Sơ đồ khối cấu trúc của 80286

Bộ vi xử lý 80286 được cấu tạo từ 4 đơn vị có thể làm việc song song (hình 2.2). Đó là các đơn vị: BU (BUS UNIT), IU (INSTRUCTION UNIT), EU (EXECUTE UNIT) và AU (ADDRESSED UNIT).

Đơn vị BU phát sinh các tín hiệu địa chỉ, dữ liệu và thông tin điều khiển để thâm nhập vào bộ nhớ hay vào các cổng vào/ra. Nó cho phép thiết lập các quan hệ với các bộ đồng xử lý hoặc với các bộ xử lý đang làm chủ kênh. Đơn vị này cho phép quá trình nhận lệnh diễn ra song song với các quá trình khác nhờ có tệp đệm 6 byte. Nó cho phép loại trừ thời gian chết khi nhận lệnh từ bộ nhớ.

Đơn vị lệnh IU nhận lệnh từ tệp đệm, giải mã rồi đưa vào tệp đợi. Tệp đợi chứa được 3 lệnh.

Đơn vị thực hiện EU sẽ thực hiện lệnh đã được giải mã trong tệp đợi. Nó liên hệ nới bộ nhớ và cổng vào/ra thông qua đơn vị BU.

Đơn vị địa chỉ AU bảo đảm việc bảo vệ, quản lý bộ nhớ và chuyển địa chỉ logíc (địa chỉ ảo) thành địa chỉ vật lý (địa chỉ thực) cho đơn vị điều khiển kênh BU.

Ngoài ra, để hỗ trợ cho các hoạt động của mình, bên trong CPU có một tập hợp các thanh ghi được chia thành các nhóm theo hình sau:

8086-80286 i386/i486/ Pentium

AX AH AL EAX AH AL

BX BH BL EBX BH BL

CX CH CL ECX CH CL

DX DH DL EDX DH DL

BP EBP BP

SI ESI SI

DI EDI DI

SP ESP SP

CS CS

DS DS

SS SS

ES ES

FS

GS

IP EIP IP

Flag EFlag Flag

Hình 3.3 : Các thanh ghi của họ 80x86

Trong đó:

AX (AH, AL): Thanh ghi tích luỹ

CX (CH, CL): Thanh ghi đếm

BP: Thanh ghi con trỏ cơ sở

DI: thanh ghi chỉ số đích

CS: Thanh ghi đoạn mã

SS: Thanh ghi đoạn ngăn xếp

IP: Thanh ghi con trỏ lệnh BX( BH, BL): Thanh ghi cơ sở

DX (DH, DL): Thanh ghi số liệu

SI: Thanh ghi chỉ số nguồn

SP: Thanh ghi con trỏ ngăn xếp

DS: Thanh ghi đoạn số liệu

ES: Thanh ghi đoạn phụ

F: Thanh ghi cờ.

Có thể liệt kê các nhóm thanh ghi điển hình như sau:

Thanh ghi con trỏ lệnh IP

IP dùng để lưu trữ địa chỉ của lệnh kế tiếp sẽ được chạy trong đoạn chương trình hiện tại. IP giống như bộ đếm chương trình của các laọi CPU trước. Mỗi lần một từ lệnh được đọc ra từ bộ nhớ, BIU sẽ thay đổi giá trị của IP sao cho nó đến địa chỉ của từ lệnh kế tiếp trong bộ nhớ.

Các thanh ghi dữ liệu

- Thanh ghi tích lũy AX, thường được sử dụng để tích luỹ các kết quả tính toán (cộng, trừ, nhân, chia...)

- Thanh ghi cơ sở BX, thường dùng chỉ địa chỉ cơ sở (đáy) của một vùng nhớ trong bộ nhớ.

- Thanh ghi đếm CX, 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 CX tăng lên môt với một tác động.

- Thanh ghi số liệu DX, thường dùng để lưu trữ dữ 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 dùng cho việc truy nhập các địa chỉ vào/ra trên 255 (FFh).

Các thanh ghi con trỏ và chỉ số

- Thanh ghi con trỏ ngăn xếp SP, chứa địa chỉ đỉnh ngăn xếp, Ngăn xếp là một vùng nhớ đặc biệt, hoạt động liên quan đến các chỉ thị của CPU. Địa chỉ cũng như kích thước của nó do chương trình ấn định. SP cho phép truy xuất dễ dàng các địa chỉ trong đoạn ngăn xếp SS. Giá trị trong SP mô tả phần offset của địa chỉ ngăn xếp kế tiếp, so với địa chỉ hiện tại đang được lưu trong SS.

- Thanh ghi con trỏ cơ sở BP, cũng có chức năng mô tả offset tính từ SS nhưng còn được sử dụng để truy nhập dữ liệu bên trong ngăn xếp.

- Các thanh ghi chỉ số (index regiters): được dùng để lưu trữ các địa chỉ offset đối với những lệnh truy nhập dữ liệu được cất trong thanh ghi đoạn dữ liệu. Do đó chúng luôn liên quan tới các trị số trong thanh ghi đoạn số liệu DS (data segment). Chúng bao gồm thanh ghi chỉ số nguồn (source index) và thanh ghi chỉ số đích (destination index).

Các thanh ghi đoạn

Bộ nhớ PC được chia thành các đoạn lôgic dài 64 kbyte một đoạn như sẽ nói dưới đây. CPU có thể truy nhập một lần tới bốn đoạn. Địa chỉ của đoạn (địa chỉ cơ sở - địa chỉ bắt đầu thấp nhất của vùng nhớ) chứa trong các thanh ghi đoạn. Có các thanh ghi đoạn sau:

- Thanh ghi đoạn mã CS (code segment register), dùng để nhận diện đị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 (data segment register), dùng để nhận diện địa chỉ bắt đầu của đoạn số liệu hiệnhành trong bộ nhớ, nghĩa là nơi chứa các biến của chương trình.

- Thanh ghi đoạn ngăn xếp SS (stack segment register), chứa địa chỉ lôgic là địa chỉ bắt đầu của ngăn xếp trong bộ nhớ.

- Thanh ghi đoạn mở rộng ES (extra segment register), thường dùng để lưu trữ dữ liệu các chuỗi (string).

Thanh ghi cờ

Chỉ có chín trong số 16 bit của thanh ghi này được sử dụng. Mỗi cơ hiệu (là mỗi bit) có thể được đắt (=1) hay xoá (=0) để chỉ thị kết quả của một thao tác trước đó hoặc trạng thái hiện tại của bộ xử lí. Tuỳ từng loại cụ thể, họ 80x86 có một số cờ như sau:

- 6 bit mô tả trạng thái (cờ trạng thái)

+ Cờ nhớ CF (carry): được đặt nếu một thao tác phát ra một tín hiệu carry hoặc borrow cho toán hạng đích. Thí dụ, khi kết quả của phép lấy tổng hai toán hạng 8 bit quá 225 (= 28 -1). Cờ này có thể được đặt bởi lệnh STC (set carry), được xoá bởi lệnh CLC (clear carry) hoặc cộng thêm 1 bởi lệnh CMC (complement carry).

+ Cờ chẵn lẻ PF (parity): được đặt nếu kết quả của một phép toán có chứa số bit được đặt (=1).

+ Cờ mang phụ AF (auxiliary carry): được dùng cho mã BCD và được đặt nếu thao tác phát ra mộ tín hiệu carry hoặc borrow cho 4 bit thấp của toán hạng.

+ Cờ zê - rô ZF (zero): được đặt nếu kết quả của phép toán bằng không (=0)

+ Cờ đấu SF (sign): đấu tương ứng với bit nhiều ý nghĩa nhất của kết quả phép toán được đặt (0 = kết quả đương, 1 = kết quả âm).

+ Cờ tràn OF (overflow): được đặt nếu kết quả của phép toán quá lớn hoặc quá nhỏ cho toán hạng đích.

- 3 bit cờ điều khiển:

+ Cờ báo hướng DF (direction): xác định hướng của phép toán xử lí chuỗi. Nếu hướng được đặt, chuỗi sẽ được xử lí từ địa chỉ cao tới địa chỉ thấp và ngược lại. Cờ này có thể được đặt bởi lệnh STD và được xoá bởi lệnh CLD.

+ Cờ ngắt IF (interrup enable): nếu được đặt, CPU sẽ chấp nhận một yêu cầu ngắt cứng IRQs và phục vụ ngắt. Cờ này có thể được đặt bởi lệnh STI và được xoá bởi lệnh CLI.

+ Cờ bước TF (trap): nếu được đặt, CPU sẽ phát ra ngắt số 1 sau mỗi bước chương trình dùng cho việc gỡ rối (debug). Trong trường hợp này, chương trình được chạy từng bước một. Cờ này có thể không được đặt hay xoá trực tiếp bởi lệnh máy mà phải dùng với sự phụ trợ của ngăn xếp.

3.2 Hoạt động của bộ vi xử lý 80286

Một phương án kết nối bộ vi xử lý 80286 trong máy tính PC được chỉ ra ở hình 3.3. Ta sẽ mô tả 2 hoạt động điển hình của nó là hoạt động đọc/ghi thông tin và hoạt động quản lý bộ nhớ.

Hình 3.3: Sơ đồ ghép nối CPU với các vi mạch bổ trợ

Ghi chú:

82284: vi mạch phát xung nhịp đồng hồ 8284

asynchronous READY: tín hiệu READY không đồng bộ

Sychr, READY: tín hiệu READY đồng bộ Address Buffer: đệm địa chỉ

Data Buffer: đệm số liệu:

Ports: các cổng

Bus Controller: bộ điều khiển bus

3.2.1 Hoạt động đọc/ghi thông tin:

Chu kỳ máy đọc thông tin có thể chia làm 6 pha: A, B, C, D, E, F.

Tại pha A (φ2 của Tc thuộc chu kỳ trước) bộ vi xử lý 80286 đưa ra kênh tín hiệu địa chỉ A23- A0 và các tín hiệu M/IO, COD/INTA để thông báo là chu kỳ máy quy chiếu bộ nhớ hay quy chiếu cổng vào/ra.

Tại pha B (φ1 của Ts thuộc chu kỳ đọc) tín hiệu /S1/S0= 01 chỉ ra mã của chu kỳ máy đọc. ở pha này tín hiệu /BHE cũng có hiệu lực, nếu sử dụng 8 bít cao của kênh dữ liệu D15-D8.

Pha C (φ2 của Ts thuộc chu kỳ đọc) sẽ đưa tín hiệu ALE ra để chốt các tín hiệu địa chỉ vào mạch 74533 (74373).

Tại pha D (φ1 của Tc thuộc chu kỳ đọc) các tín hiệu /MRDC và DT/R được đưa về mức tích cực âm. Tín hiệu DEN được đưa về mức tích cực để chọn các mạch truyền dữ liệu. Các tín hiệu trạng thái /S0/S1 chuẩn bị cho chu kỳ tiếp theo.

Tại pha E (φ2 của Tc thuộc chu kỳ đọc) các tín hiệu M/IO và COD/INTA được thiết lập cho chu kỳ máy tiếp theo. Nếu chu kỳ mới là chu kỳ trả lời ngắt hay chu kỳ treo kênh thì các tín hiệu này ở phần trạng thái trở kháng cao.

Cuối pha E, bộ vi xử lý 80286 kiểm tra tín hiệu /READY. Nếu /READY= 0 thì chu kỳ máy đọc thông tin sẽ kết thúc. Dữ liệu đã sẵn sàng trên kênh dữ liệu và bộ vi xử lý 80286 đọc dữ liệu này. Nếu /READY= 1, bộ vi xử lý 80286 đưa ra một trạng thái Tc nữa và cứ như thế đến khi /READY= 0.

Tại pha F (φ1 của Ts của chu kỳ tiếp theo) chu kỳ đọc kết thúc, các tín hiệu DEN, /MRDC, DT/R trở về trạng thái không tích cực. Mạch 82284 đưa tín hiệu /READY về mức cao.

Chu kỳ ghi thông tin của 80286 bao gồm các pha A, B, C, D, E, F và G.

Tại pha A (φ2 của Tc của chu kỳ trước) bộ vi xử lý 80286 đưa ra kênh địa chỉ A23-A0, các tín hiệu M/IO và COD/INTA. Quá trình giải mã địa chỉ có thể bắt đầu.

Tại pha B (φ1 của Ts thuộc chu kỳ đang thực hiện) các tín hiệu /S1/S0= 00 chỉ ra rằng chu kỳ máy ghi thông tin đang được thực hiện. Tín hiệu sẽ có giá trị 0 hay 1 tuỳ theo các đường dữ liệu là 8 bít cao hay không.

Tại pha C (φ2 của Ts thuộc chu kỳ đang thực hiện) bộ vi xử lý 80286 truyền dữ liệu ra kênh. Tín hiệu ALE chốt địa chỉ còn DEN chọn các mạch truyền dữ liệu. Vì dữ liệu đi từ kênh cục bộ sang kênh hệ thống nên tín hiệu DT/R= 1.

Tại pha D (φ1 của Tc thuộc chu kỳ đang thực hiện), 80286 đưa các tín hiệu /S1/S0 về logíc 1, ALE về lôgíc 0 còn tín hiệu /MWTE có hiệu lực.

Tại pha E (φ2 của Tc thuộc chu kỳ đang thực hiện) các tín hiệu địa chỉ, M/IO và COD/INTA của chu kỳ tiếp theo được đưa ra giải mã. Như vậy, chu kỳ máy mới đang được tiến hành ngay khi chu kỳ máy cũ còn đang thực hiện để hoàn tất lệnh. Cuối pha E tín hiệu /READY được trích mẫu, nếu /READY= 0, chu kỳ ghi thông tin sẽ kết thúc, ngược lại thì một trạng thái Tc sẽ lại bắt đầu và cứ tiếp tục cho đến khi /READY= 0.

Tại pha F (φ1 của Ts thuộc chu kỳ tiếp theo) các tín hiệu /MWTC và /READY được đưa về mức không tích cực.

Tại pha G (φ2 của Ts thuộc chu kỳ tiếp theo) dữ liệu được đưa vào bộ nhớ, tín hiệu DEN trở về mức thụ động và do đó kênh dữ liệu được giải phóng.

3.2.2 Hoạt động quản lý bộ nhớ thực:

Không gian nhớ trong chế độ địa chỉ thực là không gian nhớ mà bộ vi xử lý có thể quản lý trực tiếp bằng giá trị con trỏ do cặp thanh ghi mảng và thanh ghi OFFSET quy định (SEG : OFFSET). Không gian nhớ cực đại sẽ phụ thuộc vào số bit của kênh địa chỉ mà bộ vi xử lý dành cho chế độ này. Thí dụ, bộ vi xử lý 80286 sử dụng 20 bit địa chỉ A19-A0 dành cho chế độ địa chỉ thực thì không gian nhớ cực đại sẽ bằng 220 byte tức bằng 1MB. Nếu hệ vi xử lý có IC nhớ (ROM, RAM) nằm ra ngoài không gian này thì bộ vi xử lý 80286 không thể quản lý được.

Trong quá trình hoạt động, khối quản lý bộ nhớ của bộ vi xử lý 80286 cho phép chuyển các giá trị con trỏ do cặp thanh ghi mảng và thanh ghi OFFSET thành những địa chỉ thực và đưa ra kênh hệ thống để kích hoạt các đối tượng tương ứng như bộ nhớ trung tâm hay các cổng vào/ra.

Hình 3.4: Cơ chế tính địa chỉ vật lý từ địa chỉ logic

Để chuyển địa chỉ logic (SEG:OFFSET) 32 bit bên trong thành địa chỉ vật lý 20 bit (A19 - A0) trên kênh địa chỉ, AU sẽ thực hiện dịch trái SEG đi 4 bit rồi cộng với giá trị của OFFSET.

Trong chế độ thực, bộ vi xử lý 80286 có 6 phương pháp địa chỉ hoá:

• Địa chỉ trực tiếp cho phép thâm nhập trực tiếp vào toán hạng có địa chỉ là giá trị của SEG:OFFSET.

• Địa chỉ gián tiếp cho phép thâm nhập trực tiếp vào toán hạng có địa chỉ là giá trị của SEG:(SI hoặc DI hoặc BX).

• Địa chỉ tương đối cho bởi giá trị của OFFSET cho phép thâm nhập vào toán hạng có địa chỉ là giá trị của tổng giá trị dịch chuyển chứa trong lệnh và nội dung của các thanh ghi cơ sở BX và BP.OFFSET= (BX hay BP) + Dịch chuyển.

• Địa chỉ hoá theo chỉ số cho bởi OFFSET cho phép thâm nhập vào toán hạng có địa chỉ là giá trị của tổng giá trị dịch chuuyển chứa trong lệnh và nội dung của thanh ghi SI hay DI.

OFFSET= (SI hay DI) + Dịch chuyển

• Địa chỉ tương đối theo chỉ số cho bởi OFFSET cho phép thâm nhập vào toán hạng có địa chỉ là giá trị của tổng nội dung thanh ghi cơ sở và nội dung thanh ghi chỉ số.

OFFSET= (BX hay BP) + (SI hay DI)

Khi ta có một vùng dữ liệu động và muốn làm việc với các phần tử của vùng thì chế độ địa chỉ này là thích hợp. Thanh ghi cơ sở phục vụ chọn vùng, còn thanh ghi chỉ số trỏ đến bên trong của vùng xác định.

• Địa chỉ tương đối theo chỉ số và giá trị dịch chuyển cho bởi OFFSET cho phép thâm nhập đến toán hạng có địa chỉ là giá trị là tổng nội duing của thanh ghi cơ sở, nội dung của thanh ghi chỉ số và giá trị dịch chuyển chứa trong lệnh.

OFFSET= (BX hay BP) + (SI hay DI) + dịch chuyển

Nhờ có thanh ghi cơ sở, chế độ địa chỉ này cho phép lặp lại một cấu trúc mà ở trong đó có các vùng dữ liệu cần tìm. Chỉ số cho phép chọn phần tử xác định bên trong vùng dữ liệu này.

3.2.3 Hoạt động quản lý bộ nhớ ảo:

Không gian nhớ trong chế độ địa chỉ ảo là không gian nhớ mà bộ vi xử lý có thể quản lý vượt dung lượng không gian nhớ thực rất nhiều. Khả năng này có được là do tổ chức phần cứng bên trong của bộ vi xử lý được cài cấy một cơ cấu đặc biệt đó là phần ẩn của các thanh ghi quản lý.

Hình 3.5: Mô tả mảng nhớ trong chế độ ảo

Khối quản lý bộ nhớ của bộ vi xử lý 80286 cho phép chuyển các giá trị địa chỉ ảo (hay còn gọi là địa chỉ lôgíc) thành những địa chỉ thực cho bộ nhớ trung tâm.

Nguyên tắc cơ bản của chế độ địa chỉ ảo là phương thức tạo mảng nhớ. Một mảng nhớ được định nghĩa như là một tập hợp các ngăn nhớ liên tiếp có dung lượng không quá 64 KB và mảng này có thể trao đổi giữa bộ nhớ trung tâm và bộ nhớ ngoài.

Mỗi mảng nhớ được xác định từ ba tham số: địa chỉ cơ sở, kích thước mảng dung lượng của mảng nhớ) và đặc quyền thâm nhập. Mỗi mảng nhớ có cấu trúc như được biểu diễn trên hình 3.5.

Nhiệm vụ trong phương thức quản lý địa chỉ ảo được hiểu là việc thực hiện một tập hợp các tiến trình gắn với một trạng thái xác định của bộ vi xử lý.

Không gian nhớ luôn luôn gắn với nhiệm vụ. Không gian nhớ được dành riêng cho một nhiệm vụ gọi là không gian nhớ cục bộ. Không gian nhớ mà tất cả các nhiệm vụ đều có thể thâm nhập tới gọi là không gian nhớ toàn cục.

Hình 3.6: Tổ chức không gian nhớ dành cho các nhiệm vụ

Một địa chỉ trong chương trình chạy trên vi xử lý 80286 gồm có hai thành phần: bộ chọn mảng 16 bít và OFFSET 16 bít. 32 bít địa chỉ này có ý nghĩa khác nhau khi 80286 làm việc ở chế độ thực và chế độ bảo vệ. Trong chế độ thực, bộ chọn mảng biểu diễn các bít cao của địa chỉ cơ sở của mảng nhớ. Trong chế độ bảo vệ bộ chọn mảng có ý nghĩa như sau: hai bít thấp dùng để thể hiện mức đặc quyền của các yêu cầu RPL (Reqested Privelege level); bít TI (Table Indicator) được sử dụng để xác định không gian nhớ. Nếu TI= 0, không gian nhớ là không gian toàn cục còn nếu TI= 1 thì không gian nhớ là không gian cục bộ. Mười ba bít cao của bộ chọn mảng dành cho chỉ số nên nó xác định được 213= 8192 mảng nhớ trong không gian nhớ toàn cục và 8192 mảng nhớ trong không gian nhớ cục bộ. Như vậy bộ chọn mảng địa chỉ hoá được cho 16384 mảng nhớ khác nhau.

Dung lượng lớn nhất của một mảng nhớ là 64 KB nên không gian nhớ ảo dành cho một nhiệm vụ có dung lượng cực đại là 214.216= 230= 1GB. Lưu ý là dung lượng bộ nhớ ở chế độ thực chỉ là 24.216= 220= 1MB.

Hình 3.7: Con trỏ địa chỉ ảo

Chỉ số giữ vai trò con trỏ đến bảng các bộ mô tả. Bảng này thiết lập quan hệ giữa 32 bít địa chỉ ảo và 24 bít địa chỉ thực của bộ vi xử lý. Bộ vi xử lý quản lý hai loại bảng các bộ mô tả là GDT (Global Descriptor table) tức là bảng các bộ mô tả không gian nhớ toàn cục và bảng các bộ mô tả không gian nhớ cục bộ LDT (Local Deseriptor table). Các bộ mô tả của 80286 bao gồm: bộ mô tả mảng dữ liệu, bộ mô tả mảng lệnh, bộ mô tả mảng hệ thống và bộ mô tả mảng các cổng giao tiếp.

Bộ mô tả mảng dữ liệu được sử dụng để quy chiếu tới mảng dữ liệu và mảng STACK. Tám byte của bộ mô tả chứa các thông tin về mảng: địa chỉ cơ sở, dung lượng (độ dài) của mảng, một byte đặc quyền thâm nhập vào mảng. Lưu ý rằng hai byte đầu dành cho các bộ vi xử lý cấp cao của hãng Intel (80386, 80486, 80586 ...), do đó khi khởi động phải nạp giá trị 0 vào cho chúng.

Hình 3.8: Bộ mô tả mảng dữ liệu

Byte chứa giá trị quyền thâm nhập có các bít sau:

Bít P (Present)= 1 nếu mảng dữ liệu mà bộ mô tả quy chiếu tới đã được nạp trong bộ nhớ, còn nếu chưa thì bit P= 0. Khi chương trình thâm nhập vào mảng dữ liệu chưa có trong bộ nhớ sẽ gây ra ngoại lệ 11 hay 12. Chương trình xử lý ngoại lệ này sẽ nạp mảng dữ liệu cần thiết vào bộ nhớ từ thiết bị ngoại vi (từ ổ đĩa).

Bít DPL (Descriptor Privilege Level) cho biết mức đặc quyền cuả mảng dữ liệu mà bộ mô tả quy chiếu.

Bít E (Executable)= 0 thông báo rằng bộ mô tả là bộ mô tả mảng dữ liệu.

Bít ED (Expansion Direction) chỉ ra chiều tiến triển của mảng dữ liệu. Nếu ED= 1 thì mảng dữ liệu sẽ thuộc loại STACK. Địa chỉ bắt đầu của mảng sẽ là tổng của địa chỉ cơ sở và độ dài cực đại của mảng, tức là nó phát triển từ vùng địa chỉ cao nhất tới địa chỉ thấp nhất. Nếu ED= 0 thì chiều phát triển của mảng sẽ đi từ địa chỉ thấp nhất tăng dần tới địa chỉ giới hạn.

Bít W (Writable)= 1 thì mảng dữ liệu có thể vừa đọc vừa ghi ra được RW (Read - Write). Nếu W= 0 thì mảng dữ liệu được bảo vệ, tức là cấm ghi, chỉ đọc được thôi, do đó nó có ký hiệu là RO (Read - Only).

Bít A (Accesed)= 1 nếu mảng nhớ mà bộ mô tả đã được sử dụng. Một khi A đã được lập thì chỉ có thể xoá nó bằng chương trình. Bít Accesed giúp cho việc thống kê tần xuất thâm nhập vào mảng dữ liệu của một chương trình.

Bộ mô tả mảng lệnh dùng để quy chiếu tới mảng nhớ chứa chương trình. Bộ mô tả lệnh có cấu trúc tương tự như bộ mô tả mảng dữ liệu, riêng byte quyền thâm nhập có một số bít thay đổi.

Hình 3.9: Bộ mô tả mảng mã lệnh

Nếu P= 1 có nghĩa là bộ mô tả quy chiếu tới mảng lệnh.

Nếu R= 0 thì chương trình chứa trong mảng lệnh chỉ có chức năng thực hiện và được ký hiệu là EO (Executable Only) còn nếu R= 1 thì chương trình chứa trong mảng lệnh không những thực hiện được mà còn đọc được nên nó có ký hiệu là ER (Executable and Read).

Nếu C= 0 thì chương trình con được gọi sẽ thực hiện với đặc quyền bằng DPL trong bộ mô tả của mảng chứa chương trình con. Nếu C= 1 thì chương trình con được gọi sẽ thực hiện với đặc quyền bằng DPL trong bộ mô tả quy chiếu mảng chứa chương trình con đó.

Bộ mô tả mảng hệ thống dùng để quy chiếu tới các mảng chứa thông tin cần cho hệ thống.

Hình 3.10: Bộ mô tả mảng hệ thống

Nếu kiểu = 1, thì bộ mô tả quy chiếu tới mảng chứa trạng thái của nhiệm vụ TSS (Task State Segment). Nhiệm vụ này không ở trạng thái thực hiện. Nếu kiểu = 3, bộ mô tả quy chiếu mảng TSS của một nhiệm vụ đang hoạt động. Nếu kiểu = 2, bộ mô tả quy chiếu mảng chứa bảng các bộ mô tả cục bộ.

Thông tin trong bảng các bộ mô tả bao gồm thông tin trong GDT và LDT.Trong GDT chứa các bộ mô tả mảng tương ứng vói tất cả các mảng nhớ trong không gian nhớ toàn cục, còn trong LDT chứa các bộ mô tả mảng nhớ trong không gian nhớ cục bộ của một nhiệm vụ.

Mỗi bảng các bộ mô tả cũng chính là một mảng nhớ được định nghĩa bằng một bộ mô tả mảng đặc biệt, thuộc nhóm bộ mô tả mảng hệ thống.

GDT là một bảng duy nhất nên không cần xác định trước bằng một bộ mô tả riêng. Địa chỉ và kích thước của mảng GDT được chứa trong một thanh ghi đặc biệt, gọi là thanh ghi bảng các bộ mô tả toàn cục GDTR (Global Descriptor Table register).

Bộ mô tả các cổng giao tiếp có dạng như hình 3.11. Các lệnh CALL và JMP chỉ có thể thâm nhập vào mảng lệnh có mức đặc quyền cao hơn thông qua một cổng nối ghép gọi là cổng giao tiếp. Có tất cả bốn loại cổng giao tiếp: cổng kiểu gọi (CALL GATE); cổng kiểu bẫy (TRAP GATE); cổng theo nhiệm vụ (TASK GATE).

Hình 3.11: Bộ mô tả mảng giao tiếp

Cơ chế thâm nhập vào một mảng nhớ trong chế độ địa chỉ ảo thông qua các bộ mô tả mảng nhìn chung được mô tả như sau:

Hình 3.12: Cơ chế truy cập vào một mảng nhớ trong chế độ địa chỉ ảo

Từ cơ chế truy cập nêu trên, ta dễ dàng chỉ ra phương pháp tính địa chỉ thực từ địa chỉ ảo như sau:

Hình 3.13: Cách tính địa chỉ thực từ địa chỉ ảo

Địa chỉ ảo của 80286 có 32 bít bao gồm 16 bít của bộ chọn và 16 bít OFFSET. Bộ chọn có ba thành phần: chỉ số, TI, và RPL. TI cho biết bộ mô tả thuộc GDT hay LDT. Vì mỗi bộ mô tả mảng có 8 byte nên địa chỉ của bộ mô tả trong bảng sẽ là địa chỉ cơ sở cộng với chỉ số nhân 8 lần. 80286 sẽ tìm thấy trong bộ mô tả địa chỉ cơ sở của mảng nhớ thực và giới hạn của nó. Cộng 24 bít địa chỉ cơ sở với 16 bít OFFSET trong địa chỉ ảo sẽ cho 24 bít địa chỉ thực của mảng nhớ.

Quản lý bộ nhớ ảo được thực hiện nhờ có các thanh ghi quản lý bộ nhớ đặc biệt. Các thanh ghi mảng CS, DS, ES, SS có hai phần: phần hở là bộ chọn 16 bít, phần kín 48 bít bao gồm: một byte thể hiện đặc quyền thâm nhập, ba byte địa chỉ cơ sở của mảng và hai byte kích thước mảng.

Bộ chọn 16 bít được nạp giá trị bằng các lệnh LDS, LES, MOV. Các lệnh này làm thay đổi nội dung của SS, DS và ES. Các lệnh CALL và JMP làm thay đổi nội dung của CS.

Trong khi thực hiện các lệnh này, bộ chọn của địa chỉ logíc được nạp vào phần cao của các thanh ghi. 80286 sử dụng bộ chọn (chỉ số TI) để thâm nhập vào bộ mô tả 48 bít và nó được tự động sao sang phần kín của thanh ghi mảng. Quá trình này được thể hiện qua hình 2.24.

Như vậy, thông qua thanh ghi mảng, bộ vi xử lý 80286 biết tất cả các tính chất của mảng nhớ đang sử dụng. 80286 dùng nội dung của thanh ghi này cùng 16 bít OFFSET của địa chỉ lôgíc thâm nhập vào bên trong mảng, tránh được những tìm kiếm trong các bảng ở bộ nhớ.

Thanh ghi GDTR chứa địa chỉ cơ sở và giới hạn của mảng GDT. Bộ vi xử lý sử dụng các lệnh LGDT (Load) và SGDT (Store) để nạp hoặc cất giữ nội dung của nó.

Vấn đề cần quan tâm cuối cùng là khởi động (RESET) bộ vi xử lý, sau khi khởi động, các trạng thái của bộ vi xử lý được xác lập như sau:

 Tín hiệu INTR bị che.

 Bộ vi xử lý 80286 ở chế độ thực, không làm việc với bộ đồng xử lý (PE= 0, EM= 0, MP= 0).

 Bảng các véc tơ ngắt xác định ở địa chỉ 000000.

 DS, ES, SS được khởi động để cho phép thâm nhập vào 64 KB đầu của bộ nhớ.

 Tổ hợp CS:IP là địa chỉ bắt đầu của chương trình sau RESET:

F0000h

0FFF0h

FFFF0h

 Vùng nhớ chứa chương trình khởi động của hệ thống là 64 KB cuối cùng của không gian nhớ.

Bảng mô tả giá trị các thanh ghi khi khởi động bộ vi xử lý

Các Thanh Ghi Giá trị (HEX)

F 0002

MSW FFF0

IP FFF0

Bộ chọn CS F000

Bộ chọn DS 0000

Bộ chọn SS 0000

Bộ chọn ES 0000

Địa chỉ cơ sở của CS FF0000

Địa chỉ cơ sở của DS 000000

Địa chỉ cơ sở của SS 000000

Địa chỉ cơ sở của ES 000000

Giới hạn của CS FFFF

Giới hạn của DS FFFF

Giới hạn của SS FFFF

Giới hạn của ES FFFF

Hình 3.14: Bố trí bộ nhớ sau khi RESET

Bài 4: TỔ CHỨC HỆ THỐNG BUS

Để tạo ra khả năng liên lạc, trao đổi thông tin giữa các thành phần bên trong và bên ngoài bảng mạch chính (Main Board), máy tính được trang bị hệ thống Bus bao gồm:

Bus địa chỉ (Address Bus): là bus một chiều hướng từ bộ vi xử lý ra các thiết bị. Bộ vi xử lý sử dụng kênh này để quản lý các thành phần bằng cách gán cho mỗi thành phần một địa chỉ xác định.

Bus dữ liệu (Data Bus): là bus hai chiều dùng để trao đổi thông tin giữa bộ vi xử lý và các thành phần có trong hệ.

Bus điều khiển (Control Bus): là tập hợp các đường dây tín hiệu điều khiển để giám sát và đồng bộ toàn bộ hoạt động của hệ thống.

4.1 Chức năng và thông số của BUS

Một trong những hoạt động và chức năng cơ bản của máy tính là truyền số liệu. Sự hoạt động của máy tính do các bộ vi xử lý điều khiển, bộ vi xử lý và các chip hỗ trợ khác thường xuyên phải truyền số liệu giữa các khối, bộ phận trong và ngoài chúng với nhau.

Vì có rất nhiều các bộ phận, khối riêng rẽ trong bản thân các Chip cũng như số lượng và chủng loại các thiết bị rất phong phú nên các dạng truyền dữ liệu cũng có thể được phân ra thành truyền dữ liệu giữa các thành phần trong cùng một chip, giữa các chip với nhau và giữa các chip với các thiết bị khác.

Hình 4.1 : Các bus trong một hệ thống máy tính.

Các bộ phận, khối được kết nối lên hệ thống bus phải thoả mãn một yêu cầu là có khả năng được huỷ bỏ hoặc kết nối trở lại theo lệnh điều khiển. Quy tắc nghiêm ngặt của truyền số liệu là tại mỗi thời điểm, tối đa chỉ có một luồng dữ liệu được chiếm dụng bus.

4.2 BUS trong máy vi tính

4.2.1 Bus trong vi xử lý và bus bộ xử lý

Trong các bộ vi xử lý có một hệ thống các bus dùng để truyền số liệu, lệnh, các tín hiệu điều khiển,...giữa các khối bên trong của nó. Ngoài ra có một hệ thống các bus đưa ra ngoài qua các chân của nó. Các đường bus trong được điều khiển bởi khối điều khiển tuỳ thuộc hoặc vào nội dung lệnh đuợc giải mã hoặc theo các điều khiển ngắt của bên ngoài đưa vào vi xử lý. Các đường bus này hoạt động theo nhịp của một clock bên trong vi xử lý.

Bus bộ vi xử lý là đường truyền dẫn giữa CPU và các chip hỗ trợ trung gian. Những chip hỗ trợ này được gọi là bộ chip (chip set). Bus này dùng để truyền dữ liệu giữa CPU và bus hệ thống chính hoặc giữa CPU và cache ngoài.

Vì mục đích của bus bộ xử lý để gửi hoặc nhận thông tin từ CPU với tốc độ nhanh nhất có thể, nên bus này hoạt động nhanh hơn nhiều so với bất kỳ bus nào khác trong hệ thống và đảm bảo tránh hiện tượng tắc nghẽn ở đây. Bus bộ xử lý bao gồm bus dữ liệu, bus địa chỉ và bus điều khiển. Trong một hệ thống thiết kế cho vi xử lý Pentium, bus bộ xử lý có 64 đường dữ liệu, 32 đường địa chỉ. Pentium Pro và Pentium II có 36 đường địa chỉ. Bus bộ xử lý hoạt động ở tốc độ đồng hồ cơ sở giống như CPU chạy ngoại trú. Ví dụ Pentium II 333MHz chạy ở tốc độ đồng hồ 333MHz nội trú nhưng chỉ ở 66,6 MHz ngoại trú. Tốc độ truyền của bus bộ xử lý được xác định bằng cách nhân độ rộng dữ liệu với tốc độ đồng hồ cơ sở rồi chia cho 8.

Khi thiết kế các bộ vi xử lý, có thể tuỳ ý lựa chọn loại bus bên trong vi xử lý, còn với các bus liên hệ với bên ngoài cần phải xác định rõ các quy tắc làm việc cũng như các đặc điểm kỹ thuật về điện và cơ khí để người thiết kế bảng mạch chính (Main Board) có thể ghép nối vi xử lý với các thiết bị khác. Nói cách khác, các bus này phải tuân theo một chuẩn nhất định. Tập các quy tắc của chuẩn còn được gọi là giao thức bus.

Trong thế giới máy tính có rất nhiều loại bus khác nhau được sử dụng, các bus này nói chung là không tương thích với nhau. Sau đây là một số loại bus được dùng phổ biến:

Tên bus Lĩnh vực áp dụng

- Camac Vật lý hạt nhân

- EISA Một sô hệ thống dùng bộ VXL 8036

- IBM PC, PC/AT Máy tính IBM PC, IBM/PC/AT

- Massbus Máy PDP - 1 và VAX

- Microchannel Máy PS/2

- Multibus I Một số hệ thống có VXL 8088, 8086

- Multibus II Một số hệ thống có VXL 80386

- Versabus Một số hệ thống dùng VXL Motorola

- VME Một số hệ thống dùng VXL 68x0 của Motorola.

Người ta thường phân loại bus theo ba cách sau:

1. Theo tổ chức phần cứng (như các loại bus nêu trên)

2. Theo nghi thức truyền thông (bus đồng bộ và không đồng bộ).

3. Theo loại tín hiệu truyền trên bus (bus địa chỉ, bus dữ liệu ...)

Hoạt động của các bus

Thường có nhiều thiết bị nối với bus, một số là thiết bị tích cực và có thể đòi hỏi truyền thông tin trên bus, trong khi đó lại có các thiết bị thụ động chờ các yêu cầu từ các thiết bị khác. Các thiết bị tích cực được gọi là chủ bus (master), còn các thiết bị thụ động là tớ (slave).

Khi CPU ra lệnh cho bộ điều khiển đĩa đọc/ ghi một khối dữ liệu thì CPU là master cò bộ điều khiển đĩa là slave. Tuy nhiên khi bộ điều khiển đĩa ra lệnh cho bộ nhớ nhận dữ liệu mà nó đọc từ đĩa thì nó lại giữ vai trò của master.

Bus Driver và Bus Receiver

Tín hiệu điện mà các thiết bị trong máy tính phát ra thường không đủ mạnh để điều khiển được bus, nhất là khi bus khá dài và có nhiều thiết bị nối với nó. Chính vì vậy mà hầu hết các bus master được nối với bus thông qua một chip được gọi là bus driver, về căn bản đó là bộ khuyếch đại tín hiệu số. Tương tự như vậy, hầu hết các slave bus được nối với bus thông qua bus receiver. Đối với các thiết bị có thể khi thì đóng vai trò master, khi thì đóng vai trò slave, người ta sử dụng một chip kết hợp, gọi là transceiver. Các chip này đóng vai trò ghép nối và thường là các thiết bị 3 trạng thái, cho phép có thể ở trạng thái thứ ba: hở mạch (còn gọi là thả nổi).

Giống như MPU (Micro Processor Unit), bus có các đường địa chỉ, đường số liệu và đường điều khiển. Tuy nhiên không nhất thiết phải có ánh xạ một - một giữa các tín hiệu ở các chân ra của MPU và các đường dây của bus.

Những vấn đề quan trọng nhất liên quan đến thiết kế bus là: Nhịp đồng hồ bus (sự phân chia thời gian, hay còn gọi là bus clocking), cơ chế trọng tài bus (bus arbitration), xử lý ngắt và xử lý lỗi.

Các bus có thể được chia theo giao thức truyền thông tin thành hai loại riêng biệt là bus đồng bộ và bus không đồng bộ phụ thuộc vào việc sử dụng nhịp đồng hồ bus.

4.2.2 Bus đồng bộ

Bus đồng bộ (Synchronous bus) có một đường dây điều khiển bởi một bộ dao động thạch anh, tín hiệu trên đường dây này có dạng sóng vuông, với tần số thường nằm trong khoảng 5MHz - 50 MHz. Mọi hoạt động bus xảy ra trong một số nguyên lần chu kỳ này và được gọi là chu kỳ bus.

Giản đồ thời gian của một bus đồng bộ với tần số đồng hồ là 4MHz, như vậy chu kỳ bus là 250nS.

- T1 bắt đầu bằng sườn lên của tín hiệu đồng hồ , trong một phần thời gian của T1, MPU đặt địa chỉ của byte cần đọc lên bus địa chỉ. Sau khi tín hiệu địa chỉ được thiết lập giá trị mới, MPU đặt các tín hiệu và tích cực. Tín hiệu (memory request, truy cập bộ nhớ) chứ không phải thiết bị I/O; còn tín hiệu (Read) chọn Read.

- T2 là thời gian cần thiết để bộ nhớ giải mã địa chỉ và đưa dữ liệu lên bus dữ liệu.

- T3 tại sườn xung xuống của T3, MPU nhận dữ liệu trên bus dữ liệu, chứa vào thanh ghi bên trong MPU và chốt dữ liệu. Sau đó MPU đảo các tín hiệu và .

Như vậy đã kết thúc một thao tác đọc, tại chu kỳ máy tiếp theo MPU có thể thực hiện một thao tác khác.

- TAD : theo giản đồ thời gian, TAD 110ns, đây là thông số do nhà sản xuất đảm bảo, MPU sẽ đưa ra tín hiệu địa chỉ không chậm hươn 110ns tính từ thời điểm giữa sườn lên của T1.

- TDS : Giá trị nhỏ nhất là 50ns, thông số này cho phép dữ liệu được đưa ra ổn định trên bus dữ liệu ít nhất là 50ns trước thời điểm giữa sườn xuống của T3. Yêu cầu về thời gian này đảm bảo cho MPU đọc dữ liệu liệu tin cậy.

Khoảng thời gian bắt buộc đối với TAD và TDS cũng nói lên rằng, trong trường hợp xấu nhất, bộ nhớ chỉ có 250 + 250+ 125 - 110 - 50 = 465ns tính từ thời điểm có tín hiệu địa chỉ cho tới khi nó đưa dữ liệu ra bus địa chỉ. Nếu bộ nhớ không đáp ứng đủ nhanh, nó cần phải phát tín hiệu xin chờ trước sườn xuống của T2. Thao tác này đưa thêm vào một trạng thái chờ (wait state), khi bộ nhớ đã đưa ra dữ liệu ổn định, nó sẽ đảo tín hiệu thành WAIT.

- TML: Đảm bảo rằng tín hiệu địa chỉ sẽ được thiết lập trước tín hiệu ít nhất là 60ns. Khoảng thời gian này là quan trọng nếu tín hiệu điều khiển sự tạo ra tín hiệu chọn chip CS, bởi vì một số chip nhớ đòi hỏi phải nhận được tín hiệu địa chỉ trước tín hiệu chọn chip. Như vậy không thể chọn chip nhớ với thời gian thiết lập là 75ns.

- TM, TRL: Các giá trị bắt buộc đối với 2 đại lượng này có ý nghĩa là cả hai tín hiệu và sẽ là tích cực trong khoảng thời gian 85ns tính từ thừi điểm xuống của xung đồng hồ T1. Trong trường hợp xấu nhất, chip nhớ chỉ có 250 + 250 - 85- 50 = 365ns sau khi hai tín hiệu trên là tích cực để đưa dữ liệu ra bus. Sự bắt buộc về thời gian này bổ sung thêm sự bắt buộc thời gian với tín hiệu đồng hồ.

- TMH, TRH: Hai đại lượng này cho biết cần có bao nhiêu thời gian để các tín hiệu và sẽ được đảo sau khi dữ liệu đã được MPU đọc vào.

- TDH: Cho biết bộ nhớ cần phải lưu dữ liệu bao lâu trên bus sau khi tín hiệu đã đảo.

Truyền tải khối dữ liệu.

Ngoài các chu kỳ đọc/ ghi, một số bus đồng bộ còn hỗ trợ truyền dữ liệu theo khối. Khi một thao tác đọc/ ghi bắt đầu, bus master báo cho slave biết có bao nhiêu byte cần truyền đi, sau đó slave sẽ liên tục đưa ra mỗi chu kỳ một byte, cho đến khi đủ số byte được thông báo. Như vậy, khi đọc dữ liệu theo khối, n byte dữ liệu cần n+2 chu kỳ, thay cho 3n chu kỳ như trước.

Cách khác làm cho bus truyền dữ liệu nhanh hơn là làm cho các chu kỳ ngắn lại. Trong ví dụ trên, mỗi byte được truyền đi trong 750ns, vậy bus có dải thông là 1.33MBs. Nếu xung đồng hồ là 8MHz, thời gian một chu kỳ chỉ còn một nửa, giải thông sẽ là 2.67MBs.

Tuy vậy việc giảm chu kỳ bus dẫn đến các khó khăn về mặt kỹ thuật, các bit tín hiệu truyền trên các đường dây khác nhau trong bus không phải luôn có cùng vận tốc, dẫn đến một hiệu ứng, gọi là bus skew.

Khi nghiên cứu về bus cần phải quan tâm đến vấn đề tín hiệu tích cực nên là mức thấp hay mức cao. Điều này tuỳ thuộc vào người thiết kế bus xác định mức nào là thuận lợi hơn.

Ký hiệu Tham số Min Max

TAD Thời gian trễ của tín hiệu địa chỉ 110

TML Thời gian địa chỉ ổn định trước tín hiệu 60

TM Thời gian trễ của so với sườn xuống của tín hiệu đồng hồ T1 85

TRL Thời gian trễ của so với sườn xuống của tín hiệu đồng hồ T1 85

TDS Thời gian thiết lập dữ liệu trước sườn xuống của tín hiệu đồng hồ T3 50

TMH Thời gian trễ của so với sườn xuống của tín hiệu đồng hồ T3 85

TRH Thời gian trễ của so với sườn xuống của tín hiệu đồng hồ T3 85

TDH Thời gian lưu trữ dữ liệu từ lúc đảo tín hiệu 0

Giá trị của một số thông số thời gian

4.2.3 Bus không đồng bộ

Bus không đồng bộ (asynchronous bus) không sử dụng một xung đồng hồ định nhịp. Chu kỳ của nó có thể kéo dài tuỳ ý và có thể khác nhau đối với các cặp thiết bị trao đổi tin khác nhau.

Làm việc với bus đồng bộ dễ dàng hơn do nó được định thời một cách gián đoạn, tuy vậy chính đặc điểm này cũng dẫn đến nhược điểm. Thứ nhất là: mọi công việc được tiến hành trong những khoảng thời gian là bội số nhịp đồng hồ bus, nếu một thao tác nào đó của CPU hay bộ nhớ có thể hoàn thành trong 3,2 chu kỳ thì nó sẽ phải kéo dài thành 4 chu kỳ. Điều hạn chế lớn nữa là đã chọn chu kỳ bus và đã xây dựng bộ nhớ, I/O Card cho bus này thì khó có thể tận dụng được được những tiến bộ của công nghệ. Chẳng hạn sau khi đã xây dựng bus với sự định thời như trên, công nghệ mới đưa ra các chip CPU và chip nhớ có thời gian chu kỳ là 100ns (thay cho 250ns như cũ), chúng vẫn cứ phải chạy với tốc độ thấp như các CPU và chip nhớ loại cũ, bởi vì nghi thức bus đòi hỏi chip nhớ phải đưa ra dữ liệu và ổn định dữ liệu ngay trước thời điểm ứng với sườn xuống của T3. Nếu có nhiều thiết bị khác nhau nối với một bus, trong đó có một số thiết bị có thể hoạt động nhanh hơn các thiết bị khác thì cần phải đặt bus hoạt động phù hợp với thiết bị chậm nhất.

Bus không đồng bộ ra đời nhằm khắc phục các nhược điểm của bus đồng bộ. Hình 5.3 minh hoạ sự hoạt động của bus không đồng bộ, trong đó master yêu cầu đọc bộ nhớ.

Trước hết master cần phát ra địa chỉ nhớ mà nó muốn truy cập, sau đó phát tín hiệu tích cực để báo rằng nó muốn truy cập bộ nhớ chứ không phải cổng I/O. Tín hiệu này là cần thiết vì bộ nhớ và các cổng I/O đều có thể dùng chung một miền địa chỉ. Tiếp theo master phải phát tín hiệu tích cực để bên slave biết rằng master sẽ thực hiện thao tác đọc chứ không phải là thao tác ghi.

Các tín hiệu và được đưa ra sau tín hiệu định địa chỉ bao lâu tuỳ thuộc vào tốc độ của master. Sau khi hai tín hiệu này đã ổn định, master sẽ phát tín hiệu đặc biệt, là (Master SYNchronization) ở mức tích cực để báo cho slave biết rằng các tín hiệu cần thiết đã sẵn sàng trên bus, slave có thể nhận lấy. Khi slave nhận các tín hiệu này, nó sẽ thực hiện công việc với tốc độ nhanh nhất có thể được (nhanh chóng đưa dữ liệu của ô nhớ yêu cầu lên bus dữ liệu). Khi hoàn thành, slave sẽ phát tín hiệu (Slave SYNchronization) tích cực.

Khi master nhận được tín hiệu tích cực, nó biết rằng dữ liệu của slave đã sẵn sàng và thực hiện việc chốt dữ liệu, sau đó đảo các đường địa chỉ cũng như các tín hiệu và và .

Khi slave nhận được sự đảo tín hiệu thành không tích cực, nó biết rằng một chu kỳ đã kết thúc và đảo tín hiệu . Bây giờ bus lại trở lại trạng thái ban đầu, mọi tín hiệu đều là không tích cực, tất cả sẵn sàng chờ bus master mới.

Trên giản đồ thời gian của bus không đồng bộ, ta sử dụng mũi tên để thể hiện nguyên nhân và kết quả. Việc đưa lên mức tích cực dẫn đến việc truyền dữ liệu ra bus dữ liệu và đồng thời cũng dẫn đến việc slave phát ra tín hiệu tích cực. Đến lượt mình, tín hiệu lại gây ra sự đảo mức của các đường địa chỉ, và và . Cuối cùng sự đảo mức của lại gây ra sự đảo mức tín hiệu và kết thúc một chu kỳ đọc.

Full handshake

Tập các tín hiệu phối hợp với nhau như vậy được gọi là Full handshake, nó chủ yếu gồm có 4 sự kiện sau:

1. được đặt lên mức tích cực.

2. được đặt tích cực để đáp lại tín hiệu

3. được đảo để đáp lại tín hiệu

4. được đảo để đáp lại tín hiệu thành không tích cực.

Ta có thể nhận thấy Full handshake là quan hệ nhân quả, độc lập với thời gian. Nếu một cặp master-slave nào đó hoạt động chậm hoặc thời gian bị kéo dài thì cặp master-slave kế tiếp không hề bị ảnh hưởng.

Tuy ưu điểm của bus không đồng bộ rất rõ ràng, nhưng trong thực tế phần lớn các bus đang được sử dụng là loại bus đồng bộ. Lý do căn bản là các hệ thống sử dụng bus đồng bộ là dễ thiết kế hơn. CPU chỉ cần chuyển các mức tín hiệu cần thiết sang trạng thái tích cực là các chip nhớ đáp ứng ngay, không cần tín hiệu phản hồi. Chỉ cần các chip được chọn phù hợp thì mọi hoạt động đều trôi chảy.

4.3 Trọng tài bus

Trong hệ thống máy tính không phải chỉ có CPU làm bus master, thực tế các chip I/O cũng có lúc phải làm chủ bus để có thể đọc hoặc ghi vào bộ nhớ và để gọi ngắt; các bộ đồng xử lý cũng có thể làm chủ bus. Như vậy cần phải giải quyết vấn đề tranh chấp khi có từ hai thiết bị trở lên đồng thời muốn làm chủ bus. Để giải quyết vấn đề này cần có một cơ chế trọng tài để tránh sự xung đột. Cơ chế trọng tài có thể là tập trung hoặc không tập trung.

4.3.1 Trọng tài bus tập trung

Hình 5.4 là một ví dụ đơn giản về trọng tài bus tập trung. ở đây, một trọng tài bus duy nhất sẽ quyết định thiết bị nào được là chủ bus tiếp theo. Nhiều bộ VXL có đơn vị trọng tài bus được thiết kế ngay trong chip VXL, trong một số máy tính mini, đơn vị trọng tài bus nằm ngoài CPU.

Theo cơ chế này, trọng tài chỉ có thể biết là có yêu cầu chiếm dụng bus hay không, chứ không biết có bao nhiêu đơn vị muốn chiếm bus. Khi trọng tài bus nhận được một yêu cầu, nó sẽ phát ra một tín hiệu cho phép trên đường dây bus grant (cho dùng bus). Đường dây này nối qua tất cả các thiết bị vào/ ra theo kiểu nối tiếp.

Khi thiết bị nằm gần trọng tài nhất nhận được tín hiệu cho phép, nó sẽ kiểm tra xem có phải chính nó đã phát yêu cầu chiếm bus không? Nếu đúng thì nó sẽ chiếm lấy bus và không truyền tiếp tín hiêuh cho phép trên đường dây. Nếu nó kiểm tra thấy không phải là yêu cầu của mình thì tiếp tục truyền tín hiệu cho phép tới thiết bị kế tiếp trên đường dây.

Một số loại bus có nhiều mức độ ưu tiên, với mỗi mức ưu tiên có một đường dây yêu cầu bus và một đường dây cho chiếm bus. Hình 5.5 là một ví dụ về bus có hai mức (các bus trong thực tế thường có 4, 8 hay 16 mức). Mỗi thiết bị trong hệ thống máy tính nối với một trong các mức yêu cầu bus, các thiết bị thường được sử dụng hơn được gắn với đường dây có mức ưu tiên cao hơn.

Hình 4.2: Trọng tài bus tập trung có một mức, mắc nối tiếp.

Nếu có một số thiết bị ở các mức ưu tiên khác nhau cùng yêu cầu, trọng tài bus sẽ chỉ phát tín hiệu cho phép đối với yêu cầu có mức ưu tiên cao nhất. Trong số các thiết bị có cùng mức ưu tiên, thiết bị gần trọng tài bus hơn sẽ có quyền ưu tiên cao hơn.

Hình 4.3: Trọng tài bus tập trung có hai mức, mắc nối tiếp.

Một số trọng tài bus có đường dây thứ ba nối tới các thiết bị để các thiết bị xác nhận việc nhận được tín hiệu cho phép và chiếm dụng bus, gọi là đường dây biên nhận acknowledgement (ACK). Ngay sau khi một thiết bị phát tín hiệu tích cực trên đường dây ACK, trọng tài bus có thể đảo tín hiệu trên các đường dây trên các đường dây yêu cầu bus và cho phép dùng bus thành mức không tích cực. Kết quả là các thiết bị khác có thể đòi hỏi chiếm dụng bus trong khi thiết bị đầu tiên đang dùng bus. Khi kết thúc phiên làm việc hiện thời, bus master kế tiếp sẽ được lựa chọn. Cách làm việc như vậy làm tăng hiệu quả sử dụng bus, nhưng cần thêm một đường truyền tín hiệu ACK và cấu trúc của các thiết bị cũng phức tạp hơn. Các chip của Motorola sử dụng các bus loại này.

4.3.2 Trọng tài bus không tập trung

Trong cơ chế trọng tài bus không tập trung, không cần sử dụng một đơn vị riêng làm trọng tài bus, nhờ vậy giảm được giá thành phần cứng. Trong một số loại máy tính khác nhau, người ta đã sử dụng một vài kiểu trọng tài bus theo cơ chế này.

Trọng tài bus không tập trong trong multibus

Trong Multibus, người ta cho phép có thể lựa chọn cơ chế trọng tài bus tập trung hoặc không tập trung, cơ chế trọng tài bus không tập trung được thực hiện theo sơ đồ trên hình 3.4. Người ta chỉ sử dụng 3 đường dây, không phụ thuộc vào số lượng thiết bị nối với bus. Bao gồm:

+ Yêu cầu chiếm dụng bus (bus request)

+ Trạng thái bus (bus busy), được bus master đặt ở mức tích cực

+ Trọng tài bus, được mắc nối tiếp qua các thiết bị

Hình 4.4: Trọng tài bus không tập trung trong Multibus.

Khi không có thiết bị nào yêu cầu chiếm bus, đường dây trọng tài bus truyền mức tích cực tới tất cả các thiết bị. Khi một đơn vị nào đó muốn chiếm dụng bus, đầu tiên nó kiểm tra bus có rỗi không và kiểm tra đầu vào của đường trọng tài bus, nếu thấy có điện áp IN = 5V thì nó có thể xin bus bằng cách đưa tín hiệu yêu cầu bus (Request) và xoá tín hiệu OUT, tức là đặt OUT = 0V. Do đó các thiết bị ưu tiên thấp hơn sẽ không xin được bus. Lúc này nó trở thành bus master.

4.4 Xử lý ngắt

Một chức năng quan trọng của bus là xử lý ngắt. Khi CPU ra lệnh cho một thiết bị trong máy tính thực hiện việc đọc, ghi hay xử lý tin, nó thường chờ đợi tín hiệu ngắt do thiết bị I/O phát ra khi hoàn thành công việc được CPU yêu cầu. Khi nhận được tín hiệu ngắt, CPU đáp ứng ngay, đó có thể là việc nhận dữ liệu do thiết bị I/O chuyển về, cũng có thể là việc tiếp tục gửi dữ liệu tới thiết bị I/O hoặc CPU sử dụng bus cho một thao tác khác ... . Như vậy chính ngắt phát ra tín hiệu yêu cầu bus.

Vì có thể có nhiều thiết bị ngoại vi cùng phát tín hiệu ngắt, cho nên cũng cần có một cơ chế trọng tài giống như đối với các bus thông thường. Giải pháp thường dùng là gán các mức độ ưu tiên cho các thiết bị và sử dụng một trọng tài tập trung để trao quyền ưu tiên cho các thiết bị và sử dụng một trongh tài tập trung để trao quyền ưu tiên cho các thiết bị quan trọng thường xuyên được sử dụng.

4.5 Một số bus thông dụng

4.5.1 Bus IBM PC

Đây là ví dụ điển hình về một loại bus được sử dụng trong các hệ thống thương mại, nó được sử dụng rộng rãi trong các hệ thống vi xử lý dựa trên chip 8088. Hầu hết họ PC, kể cả các máy tương thích đều sử dụng bus này. Chính bus IBM PC tạo nên cơ sở cho bus IBM PC/AT và nhiều loại bus khác.

Tín hiệu Số dây In Out giải thích

OSC 1 x Chân dao động (14,31818 MHz)

CLK 1 x Xung đồng hồ (4,77 MHHz)

RESET 1 x Tín hiệu reset CPU và các thiết bị I/O

A0 - A19 20 x Các đường dây địa chỉ

D0 - D7 8 x Các đường truyền dữ liệu

ALE 1 x Chốt địa chỉ

(MEMR) 1 x Đọc bộ nhớ

(MEMW) 1 x Ghi vào bộ nhớ

(IOR) 1 x Đọc cổng I/O

(IOW) 1 x Ghi ra cổng I/O

AEN 1 x Adress ENable, yêu cầu bus địa chỉ

(IOCHCHK) 1 x I/O Chanel Check

IOCHRDY 1 x I/O Chanel Ready

IRQ2 - IRQ7 6 x Các đường yêu cầu ngắt

DRQ1 - DRQ3 3 x DMA Request

DACK0 - DACK3 4 x DMA Acknowleage

T/C 1 x Terminal/Count

Power 5

GND 3

Reserved 1

Các thông số của hệ thống BUS IBM PC

Bus này có 62 đường dây, trong đó có 20 đường địa chỉ, 8 đường số liệu và các đường tín hiệu khác...được liệt kê trong bảng 3.2.

Về mặt vật lý, bus IBM PC được thiết kế ngay trên board mạch chính và có khoảng gần chục đầu nối dạng khe cắm (slot) để cắm các card mở rộng, trên mỗi khe cắm có 62 chân được chia thành hai hàng.

Tín hiệu đồng hồ OSC và CLK

Các máy IBM PC đầu tiên sử dụng các phần tử dao động thạch anh, ở tần số 14,31818 MHz, tần số này được chọn phải thoả mãn việc tạo ra tín hiệu đồng bộ màu hệ NTSC. Tần số này cao hơn so với chuẩn 8088 (tần số cực đại là 5 MHz), do đó nó được chia ba thành 4,77MHz. Tần số 4,77 MHz được dùng làm đồng hồ chính để xác định chu kỳ bus. Tín hiệu tần số 4,77 MHz cũng có trên bus IBM PC và ký hiệu là CLK. Tín hiệu này không cân xứng như tín hiệu đông hồ 14,31818 MHz mà trong một chu kỳ bao gồm 2/3 thời gian ở mức thấp và 1/3 thời gian ở mức cao.

Tín hiệu RESET

Tín hiệu RESET trên bus do chip 8284A tạo ra. Để RESET CPU, các mạch điện bên ngoài gửi tín hiệu tới 8284A, nó sẽ đặt tín hiệu reset lên mức tchs cực, buộc CPU và các thiết bị I/O khở tạo lại.

Các đường địa chỉ và dữ liệu

CPU không nối trực tiếp với các đường địa chỉ và đương số liệu của bus, mà thông qua các chip khác. Các đường địa chỉ được chốt bằng cách dùng 3 chip 74LS373, mỗi chip là một bộ 8 thanh ghi chốt, tuy nhiên chỉ sử dụng 20 trong số 24 đường có thể.

Các đường dữ liệu sẽ được lấy mẫu (đọc nhanh giá trị) hoặc cung cấp giá trị trong những thời gian xác định, như trong sườn dương của một tín hiệu đồng hồ nào đó, vì vậy không cần chốt. Các đường dữ liệu của bus được điều khiển bởi bus transceiver (chip 74LS245). Chân DIR xác định hướng của tín hiệu là đi đến hay đi ra từ CPU.

Lý do chính của việc nối các chân của MPU với bên ngoài thông qua các bộ đệm chính là vì nó được chế tạo theo công nghệ MOS, CPU không có khả năng cung cấp đủ dòng để điều khiển tất cả các phần tử nối với bus. Các chip làm bộ đệm dùng công nghệ TTL có khả năng cung cấp đủ dòng cho cả các thiết bị nối với bus.

Ngoài ra còn lý do khác là, khi có một thiết bị nào đó khác CPU muốn trở thành bus master (như DMAC), CPU cần phải thả nổi các bus. Phương pháp đơn giản nhất được áp dụng là thiết bị đó phải phát tín hiệu AEN (Address ENable) để đảo tín hiệu cho phép đưa ra trên các thanh ghi chốt và transceiver, làm cho các bus được thả nổi.

Tín hiệu ALE (Address Latch Enable)

Tín hiệu ALE được đặt mức tích cực khi CPU đang điều khiển các đường tín hiệu địa chỉ, cho phép các chip 74LS373 biết khi nào cần chốt địa chỉ lại. Tín hiệu này của bus cũng cho bộ nhớ và các chip I/O biết khi nào các tín hiệu trên bus địa chỉ là hợp lệ.

Các đường tín hiệu , , ,

Để điều khiển việc đọc/ ghi vào bộ nhớ hoặc các thiết bị vào/ra. Nhờ các tín hiệu này, bus cung cấp hai thông gian địa chỉ riêng biệt, một cho MEM và một cho I/O. Bộ nhớ sẽ không phản ứng khi thấy tín hiệu , ở mức tích cực.

CPU sử dụng các tín hiệu - đưa vào chip điều khiển bus 8288 để tạo ra các tín hiệu , , , cùng với tín hiệu ALE. Chip điều khiển bus cũng nhận tín hiệu điều khiển ANE từ bus, tín hiệu này do một thiết bị muốn trở thành bus master đưa ra, khi nhận được tín hiệu ANE, chip điều khiển bus sẽ phát tín hiệu điều khiển các chip chốt địa chỉ nà chip bus transceiver thả nổi bus.

Tín hiệu (I/O CHanel CHeck)

Tín hiệu này sẽ tích cực khi có lỗi chẵn /lẻ bị phát hiện trên bus. Tín hiệu này sẽ tác động mmọt ngắt NMI.

Tín hiệu IOCHRDY (I/O CHanel ReaDY)

Tín hiệu này do bộ nhớ đưa ra khi tốc độ hoạt động của nó thấp, yêu cầu CPU cho thêm một số chu kỳ để đợi, bằng cách chèn wait states vào các chu kỳ đọc/ghi bộ nhớ.

Các tín hiệu IRQ2-IRQ7.

Là các tín hiệu do các thiết bị ngoại vi đưa ra, đưa đến chip điều khiển ngắt 8259A. Khi có tín hiệu gửi đến chip điều khiển ngắt, nó sẽ kiểm soát các tín hiệu này và đưa ra một tín hiệu yêu cầu ngắt tới CPU và đặt số hiệu vectơ ngắt lên đường dữ liệu khi CPU cần đến. IRQ0 thường được mạch đồng hồ và IRQ1 được bàn phím sử dụng.

Các tín hiệu liên quan đến DMA

Các tín hiệu còn lại nói chung liên quan đến hoạt động DMA, chẳng hạn khi CPU yêu cầu ổ đĩa đọc một khối dữ liệu, mạch điều khiển ổ đĩa sẽ chờ nhận được byte đầu tiên từ ổ đĩa đưa ra, sau đó phát ra một yêu cầu trở thành bus master để ghi byte đó vào bộ nhớ.

Chip 8237A được INTEL thiết kế nhằm quản lý các nghi thức bus và thực hiện DMA trong đó có việc taưng địa chỉ bộ nhớ và giảm con đếm sau khi truyền mỗi byte. Việc này nó thực hiện thay cho các thiết bị I/O, giúp giảm giá thành của chúng.

Về căn bản, chip 8237A là một CPU nhỏ, có các chương trình được ghi sẵn bên trong. Khi 8088 muốn bắt đầu hoạt động DMA đối với một thiết bị ngoại vi nào đó, nó nạp số hiệu vào thiết bị, địa chỉ ô nhớ, số byte, hướng truyền và các thông tin khác vào các thanh ghi bên trong 8237A. Khi chip điều khiển đã sẵn sàng đọc hoặc ghi byte đầu tiên, nó đặt mức tích cực lên một trong các đường DRQ của bus để đưa vào chip 8237A. Khi nhận được tín hiệu, 8237A đòi chiếm bus và sẵn sàng truyền một byte. Chip 8237A phát tín hiệu tới chip điều khiển báo cho nó biết hãy ghi hoặc đọc byte của mình (trong thao tác đọc hoặc ghi tương ứng). Trong khoảng một chu kỳ này, chip 8237A điều khiển hoạt động của bus như một bus master.

Chip 8237A có 4 kênh độc lập và có thể quản lý đồng thời 4 đường truyền, cấu trúc và hoạt động của nó sẽ được trình bày chi tiết trong bài sau.

Tín hiệu T/C (Terminal/Count)

Đường T/C được chip 8237A đặt mức tích cực khi bộ đếm byte (byte count) bàng 0, báo cho bộ điều khiển I/O biết rằng công việc yêu cầu đã hoàn tất, đã đến lúc báo hiệu cho 8258A gọi ngắt tới CPU.

4.5.2 Bus IBM PC/AT

Bus IBM PC/AT là bước phát triển tiếp theo của thế hệ bus IBM PC nhằm phát huy được những khả năng hơn hẳn của bộ VXL 80286 so với 8088 trước nó. Với bus địa chỉ 24 dây, có khả năng đánh địa chỉ cho 224 = 16MB bộ nhớ và có bus dữ liệu 16 bit.

Với giải pháp mở rộng PC bus, bổ sung thêm vào các khe cắm cũ một đoạn khe cắm ngắn, trên đó có 36 dây tín hiệu, tăng thêm cho bus địa chỉ 4 dây, bus dữ liệu 8 dây, các đường yêu cầu ngắt, kênh DMA, ... . Nhờ vậy các card mở rộng trước đây vẫn dùng cho IBM PC có thể dùng cho IBM PC/AT.

Ngoài việc mở rộng bus, tần số tín hiệu đồng hồ bus cũng được tăng từ 4,77 MHz ở PC bus thành 8MHz, nhờ đó tốc độ truyền thông trên bus cũng tăng lên nhiều.

Năm 1991 tổ chức IEEE (Institute of Electrical and Electronic Engineers) đã đưa ra tiêu chuẩn quốc tế cho bus của máy AT, gọi là bus ISA (Industrial Standard Architecture)

Các nhà sản xuất PC khác đã đưa ra một chuẩn khác, đó là bus EISA (Extended ISA), về căn bản bus này là sự mở rộng bus PC/AT thành 32 bit, giữ nguyên tính tương thích với các máy tính và các card mở rộng đã có.

Ở thế hệ PS/2, thế hệ sau của IBM PC/AT một bus hoàn toàn mới được áp dụng, bus Micro chanel.

4.5.3 Bus PCI

Vào đầu năm 1992, Intel đã thành lập nhóm công nghệ mới. Nhằm nghiên cứu cải thiện các đặc tính kỹ thuật và những hạn chế của các bus hiện có như: bus ISA, bus EISA.

PCI (Peripheral Component Interconnect, liên kết các thành phần ngoại vi). Định chuẩn bus PCI đã được đưa ra vào tháng 6 năm 1992 và được cập nhật vào tháng 4 năm 1993, đã thiết kế lại bus PC truyền thống bằng cách bổ sung thêm một bus khác vào giữa CPU và bus I/O.

Bus PCI thường được gọi là bus mezzanine vì nó bổ sung thêm một tầng khác vào cấu hình bus truyền thống. PCI bỏ qua bus I/O tiêu chuẩn, nó sử dụng bus hệ thống để tăng tốc độ đồng hồ bus lên và khai thác hết lợi thế của đường dẫn dữ liệu của CPU.

Thông tin được truyền qua bus PCI ở 33MHz và độ rộng dữ liệu đầy đủ của CPU. Khi bus ấy được sử dụng để nối với CPU 32 bit, dải thông là 132 MBit/s, được tính theo công thức: 33MHz*32bit/8 = 132MBit/s. Khi bus ấy được sử dụng với những hệ thống bổ sung 64 bit, dải thông tăng gấp đôi, nghĩa là tốc đọ truyền dữ liệu đạt tới 264MBs. Lý do chíng mà bus PCI đã tăng tốc độ nhanh hơn các bus khác là nó có thể hoạt động đồng thời với bus vi xử lý. CPU có thể được xử lý dữ liệu trong các cache ngoại trú, trong khi bus PCI phải truyền thông tin liên tục giữa các thành phần khác của hệ thống, đây là ưu điểm thiết kế chính của bus PCI.

Định chuẩn PCI có ba cấu hình, mỗi cấu hình được thiết kế cho một kiểu hệ thống riêng biệt với những quy định nguồn riêng. Định chuẩn 5V cho những hệ thống máy tính văn phòng, định chuẩn 3,3V cho các hệ thống máy tính xách tay và những định chuẩn chung cho những board mẹ và các cạc hoạt động trong hai kiểu ấy.

Bài 5: TỔ CHỨC BỘ NHỚ MÁY TÍNH VÀ CƠ CHẾ DMA

Một trong các hoạt động cơ bản của máy tính là lưu trữ dữ liệu dạng nhị phân. Các dữ liệu này là các chương trình hoặc số liệu mà Vi xử lý đưa ra hoặc đọc vào tuỳ theo yêu cầu. Bộ nhớ là các thiết bị để thực hiện nhiệm vụ lưu trữ dữ liệu của máy vi tính. Mỗi ô nhớ được xác định bởi một địa chỉ, thông thường mỗi ô nhớ có dung lượng là 1 byte, các byte được ghép thành từ. Những máy tính 16 bit số liệu thì tổ chức 2 byte/từ, còn các máy 32 bit số liệu thì độ dài từ gấp đôi (4 byte/từ).

5.1 Kiến trúc tổng thể của bộ nhớ

Xét một cách tổng thể, bộ nhớ của máy tính có kiến trúc phân cấp (hierarchy) trải dài từ bộ nhớ ngoài đến bộ nhớ trong và cuối cùng là đến bộ nhớ đệm (cache) trong và ngoài CPU.

Hình 5.1: Kiến trúc tổng thể của bộ nhớ

Bộ nhớ trong có thể chia làm hai loại đó là ROM và RAM. ROM (Read-only Memory) là bộ nhớ chỉ đọc và RAM(Random-Access Memory) là bộ nhớ truy xuất ngẫu nhiên. Nói chung, ROM chứa các dữ liệu một cách cố định và không thể thay đổi, trong khi đó RAM có thể đọc ra và có thể ghi vào.

Khái niệm truy xuất ngẫu nhiên có nghĩa là bất kỳ một vị trí nhớ nào cũng có thể được mở ra hoặc được gọi ra ở bất kỳ lúc nào, các thông tin không cần phải đọc ra hay ghi vào một cách tuần tự. Về thực chất, cả RAM và ROM đều là truy xuất ngẫu nhiên. Chỉ có điều khác nhau cơ bản là ROM chỉ cho phép đọc mà không thể ghi vào nó, còn RAM là bộ nhớ có thể đọc và ghi, vì thế RAM được gọi là "bộ nhớ đọc/ghi".

5.1.1 Cấu trúc chung của bộ nhớ

Hình sau mô tả sơ đồ khối của một mạch nhớ. Mạch nhớ được nối với các bộ phận khác trong máy tính thông qua các đường đây địa chỉ và các đường dây dữ liệu của nó. Kiểm soát mạch nhớ bằng đường dây cho phép (enable), riêng đối với RAM còn có thêm đường dây kiểm soát đọc/ghi (Read/write).

Các mạch nhớ nói chung được tổ chức dưới dạng ma trận, gồm những hàng và những cột để xác định vị trí hay địa chỉ nhớ. Mỗi ô trong ma trận gọi là một phần tử (cell) hay vị trí nhớ (memory location). Vị trí hay phần tử nhớ được dò tìm bằng cách chọn địa chỉ nhờ mạch giải mã địa chỉ. Mạch này gồm hai phần: mạch chọn địa chỉ hàng RAS (row-address selector) và mạch chọn địa chỉ cột CAS (Column-address selector). Các đường dây địa chỉ sẽ chọn địa chỉ hàng và cột. Đường dây enable dùng để mở các mạch điện lối ra bộ nhớ theo ba trạng thái. Còn đường dây Read/write quyết định dạng thao tác sẽ thực hiện.

Bộ nhớ có loại được tổ chức theo bit, có loại được tổ chức từ. Bộ nhớ tổ chức theo bit có thể lưu giữ một bit đơn trong mỗi vị trí địa chỉ. Bộ nhớ tổ chức theo từ sẽ được lựa chọn cả một nhóm phần tử nhớ cùng một lúc với mỗi vị trí địa chỉ. Mỗi nhóm phần tử nhớ thường là một byte (8 bit), hoặc một từ (16 bit).

Số đường dây địa chỉ của mạch nhớ sẽ quyết định số vị trí nhớ cực đại tính theo công thức sau:

Số vị trí nhớ cực đại = 2N.

trong đó, N là số lượng các đường địa chỉ.

Hình 5.2: Sơ đồ chung của một chip nhớ

Hình 5.3: Cấu trúc của một chip nhớ

5.1.2 ROM-BIOS

Bất cứ hệ máy tính nào cũng có một vi mạch ROM, vi mạch này chứa chương trình Vào/ Ra cơ sở BIOS (basic input/output system) của hệ điều hành. Chương trình này dùng để khởi động máy và cài đặt chế độ làm việc cơ sở cho các thiết bị ngoại vi.

Người ta chia ROM thành bốn loại sau:

- ROM mặt nạ (maskable ROM) là loại ROM do nhà sản xuất đã nạp sẵn dữ liệu, khi đó dữ liệu không thể thay đổi được nữa.

- ROM có thể nạp chương trình (PROM - programable ROM) là loại mạch mà người dùng có thể nạp dữ liệu vào thông qua thiết bị "đốt" PROM. Khi đã nạp thì các dữ liệu trong PROM cũng không thể thay đổi.

- PROM có thể xoá, còn gọi là EPROM (erasable PROM) là loại ROM mà người dùng có thể nạp dữ liệu vào và các dữ liệu đó có thể xoá hoặc thay đổi bằng một thiết bị đặc biệt. EPROM có thể xoá bằng điện (electric EPROM) là loại ROM có thể nạp và xoá dữ liệu bằng điện được mà không phải sử dụng tia cực tím như với EPROM.

Trong các máy tính hiện đại, người ta thường sử dụng Flash BIOS dùng EEPROM. Như vậy nội dung BIOS của máy tính có thể được thay đổi để tương thích với những mở rộng và nâng cấp hệ thống, mà điều này là không thể thực hiện đối với những máy tính thế hệ cũ sử dụng BIOS dùng PROM hoặc EPROM.

BIOS gồm nhiều chương trình và hàm. Phần đầu của chương trình BIOS dùng để kiểm tra hệ thống máy tính, quá trình này gọi là POST. Nếu hệ thống sử dụng các Card (thẻ cắm) Plug and Play thì giai đoạn này chính là lúc máy tính truy nhập tham số của thẻ. BIOS nào cũng có chương trình "Setup BIOS" để người dùng tự chỉnh tham số các thiết bị ngoại vi.

5.1.3 RAM

Người ta chia RAM thành hai hoại:

- RAM tĩnh (SRAM), có khả năng lưu giữ số liệu mãi mãi nếu như không mất nguồn nuôi.

- RAM động (DRAM), là loại RAM phải được "làm tươi" (refresh) tức là phải nạp lại dữ liệu đang được lưu trữ theo từng chu kỳ. "Làm tươi" thường bằng cách thực hiện thao tác đọc hoặc ghi và cũng có thể "làm tươi" bằng những thao tác đặc biệt khác. Loại DRAM có mật độ phần tử nhớ cao nên giá thành khá rẻ so với SRAM. Các mạch nhớ DRAM được dùng phổ biến trong các thế hệ máy tính hiện nay.

Hình 5.4: Sơ đồ khối DRAM 16.384 bits(16Kb).

Để tiết kiệm số đường địa chỉ và giảm số chân trên IC, hầu hết các loại DRAM đều dùng phương pháp địa chỉ multiplex. Trong quá trình đọc hay ghi các đường địa chỉ đầu tiên chứa các thông tin về hàng rồi tiếp sau mang thông tin về cột. Để kiểm soát thao tác này, người ta dùng đường dây và như trên hình 2-3. Khi thấp thì thông tin trên các đường địa chỉ sẽ được mở thông qua mạch chốt địa chỉ hàng (row-address latch). Khi thấp thì thông tin trên các đường địa chỉ sẽ được mở thông qua mạch chốt địa chỉ cột (column-address latch).

Mạch điều khiển "làm tươi" phải chọn tuần tự từng hàng các phần tử nhớ, cứ mỗi hàng một lần, cho đến khi tất cả các hàng đều được "làm tươi". Đó là phương pháp làm tươi từng đợt. Trong quá trình đó không được đọc hay ghi dữ liệu vào bộ nhớ cho đến khi kết thúc quá trình. Một cách khác là "làm tươi" từng hàng trong các chu kỳ rời rạc và gọi là làm tươi theo chu kỳ đơn.

Hình 5.5: Giản đồ thời gian chung của bộ nhớ

5.2 Đơn vị quản lý bộ nhớ

Công việc quản lý bộ nhớ của máy vi tính chủ yếu là do bộ vi xử lý đảm nhiệm. Dên cạnh đó còn có DMAC (Direct Memory Acess Controller) cũng tham gia quản lý bộ nhớ trong việc truyền số liệu giữa controller ổ đĩa với bộ nhớ và "làm tươi" bộ nhớ. Ở những máy có bộ nhớ Cache thì việc thực hiện các công việc truyền số liệu giữa Cache Memory và RAM do Cache Memory Controller đảm nhận.

Bản chất của việc quản lý bộ nhớ là các thanh ghi của vi xử lý đưa ra các địa chỉ của ô nhớ hoặc của cổng I/O qua bus địa chỉ, cùng các lệnh điều khiển/ trạng thái khác và đọc vào/ ghi ra các số liệu của các ô nhớ đó. Các bộ phận bên ngoài vi xử lý sẽ giải mã các địa chỉ và các tín hiệu điều khiển/ trạng thái đó để trỏ vào các byte/ từ/ từ kép... của bộ nhớ để thực hiện các thao tác tương ứng.

Đối với các ổ đĩa trở, việc quản lý bộ nhớ là thực hiện các lệnh của hệ điều điều hành lên các file (có địa chỉ 3 chiều là C-H-S), cụ thể là truyền số liệu nhờ DMAC giữa vùng đệm (buffer) của bộ điều khiển ổ đĩa với bộ nhớ RAM.

Các bộ vi xử lý Intel từ thế hệ 286 trở đi phân biệt hai mode địa chỉ: mode địa chỉ thực (chỉ quản lý 20 bit địa chỉ vật lý của bộ nhớ) và mode địa chỉ logic (quản lý tới 32 bit địa chỉ ảo nhờ các thanh ghi ẩn trong bộ vi xử lý).

Trong các thiết bị ngoại vi, như bộ điều khiển ổ đĩa, bộ điều khiển màn hình, máy in... cũng có tổ chức bộ nhớ riêng của chúng để tiện cho việc cất giữ và xử lý với các đặc thù riêng.

Các bộ nhớ RAM-ROM và các vùng nhớ của bộ nhớ ngoài (trên các ổ đĩa), khác nhau về cách mã hoá các bit, cách tổ chức, do đó cả cách truy nhập cũng khác nhau.

5.3 Tổ chức bộ nhớ của vi xử lý

Bộ nhớ của vi xử lý có thể xem như bao gồm có bộ nhớ ROM và bộ nhớ RAM. Bộ nhớ RAM của vi xử lý chính là các thanh ghi (thanh ghi chung, thanh ghi chỉ số, thanh ghi đoạn, thanh ghi ngăn xếp, thanh ghi trạng thái, thanh ghi cờ, các bộ đệm số liệu/ địa chỉ/ điều khiển...). Còn bộ nhớ RAM là bộ phận giải mã lệnh để phát ra các vi lệnh.

Nhằm mục đích quản lý được số lượng địa chỉ nhớ (ảo) nhiều hơn số đường địa chỉ của bộ vi xử lý và bảo vệ các vùng nhớ của các nhiệm vụ khác nhau (task) và của hạt nhân (kernal) chống truy nhập không hợp pháp, các vi xử lý có các cách tổ chức đặc biệt các thanh ghi địa chỉ (bộ phận phân trang, điều khiển đoạn của các nhiệm vụ).

Các bộ vi xử lý từ thế hệ 486 trở đi còn có một bộ nhớ Cache Memory với kích thước nhiều Kbyte để chứa mảng các lệnh và số liệu đang thường dùng lấy từ bộ nhớ RAM, nhằm tăng tốc độ truy nhập.

Để tăng tốc độ tính toán các phép toán dấu chấm động, trong các bộ vi xử lý từ 486 trở đi còn có bộ phận dấu chấm động (FPU - Floating Point Unit), bộ phận này cũng có các thanh ghi FPU phục vụ riêng cho nó.

5.4 Tổ chức bộ nhớ trong của máy vi tính

Bộ nhớ trong của máy tính dùng để chứa chương trình và số liệu của phần chương trình hạt nhân và các nhiệm vụ. Mỗi byte được gán cho một địa chỉ để vỉ lý và DMAC có thể truy nhập tới.

Bộ nhớ RAM ở những máy từ 386 trở đi có thể được tách riêng ra bộ nhớ đệm (cache memory), là RAM tĩnh với thời gian truy nhập nhanh, có kích thước dưới 1Mb được nối ngay vào bus nội bộ của máy tính sát ngay vi xử lý và được điều khiển bởi Cache controller. Phần còn lại là DRAM, chậm hơn nhưng rẻ hơn và có dung lượng lớn hơn. Hình 5.6 thể hiện sơ đồ khối bên trong một máy 386. Trong sơ đồ: Vi xử lý là 80386, đồng xử lý toán là 80387, cache controller 82385 được nối trực tiếp với nhau thành một bus cục bộ. Các đường địa chỉ A2-A31 của 386 nối trực tiếp tới các đường cùng tên của 82385DX, các đường số liệu D0-D31 của 386 được nối trực tiếp tới các đường số liệu cùng tên của 387DX. Hơn nữa, các chân quy định chu kỳ bus D/C#, W/R# và M/IO# được nối trực tiếp tới các chân tương ứng của 82385DX.

Từ bus local của VXL, các đường địa chỉ được đệm ra bằng các chốt địa chỉ 8 bit 74373 (không vẽ trong hình). Các đường số liệu của bus local được đệm hai chiều bằng Data Buffer 82345. Controller ISA 82344 nối giữa bus local của CPU với bus hệ thống để làm các chức năng giao tiếp với CPU, system controller 346, data buffer 345, ROM, bus, các thiết bị ngoại vi như sau:

- Nhận các tín hiệu BE0# - BE3# của CPU, ROM8# và IOCHRDY từ bus ISA để sinh ra các tín hiệu chọn byte chẵn và byte lẻ SA0# và SBHE#

- Tạo các tín hiệu giao tiếp giữa 344, 345 và 346.

Hình 5.6: Phần trung tâm máy tính AT 386

- Chứa khối điều khiển ngoại vi Peripheral Control gồm các vi mạch có độ tích hợp cực cao (VLSI) quen thuộc: hai 82C59 (ngắt), hai chip 82C37A (DMAC), vi mạch định thời 82C54, thanh ghi địa chỉ trang 74LS612, bộ driver cho loa, port B parallel I/O, đồng hồ thời gian thực và bộ đếm làm tươi bộ nhớ.

- Giải mã địa chỉ để tạo ra các tín hiệu chọn chip CS8042# cho controller bàn phím 8042 và ROMCS# để cho phép chọn ROM BIOS.

Vi mạch Peripheral Combo 82341 được ghép vào bus mở rộng của bus ISA, nó chứa các VLSI để thực hiện một số chức năng của các thiết bị ngoại vi sau đây:

- Hai cổng nối tiếp không đồng bộ 16C450

- Một cổng song song cho máy in

- Đồng hồ thời gian thực

- RAM sổ tay, các controller cho bàn phím và chuột.

- Interface cho đĩa cứng (tiêu chuẩn IDE).

Controller đĩa mềm 82077 có thể điều khiển tới 4 ổ đĩa mềm các loại 5"1/2 và 3"1/2.

5.6 Cơ chế truy nhập bộ nhớ trực tiếp DMA (Direct Memory Access)

Phương pháp ngắt đảm bảo thời gian trả lời yêu cầu vào/ra số liệu của ngoại vi là rất ngắn. Nhưng việc phục vụ quá trình vào/ra lạ được thực hiện bằng phần mềm, do đó một số ngoại vi (như bộ hiển thị màn hình CRT) phương pháp ngắt không đủ nhanh để đáp ứng yêu cầu chuyển số liệu rất cao. Lúc này phải dùng giải pháp bằng phần cứng. Chương trình con thực hiện chuyển số liệu giữa ngoại vi và bộ nhớ được thay bằng một dơn vị điều khiển điện tử đặc biệt là chip truy nhập bộ nhớ trực tiếp DMAC (direct memory access controller). Phương pháp này cho phép vào/ra số liệu rất nhanh. Tốc độ chuyển số liệu chỉ hạn chế bởi thời gian truy nhập của bộ nhớ. CPU không cần phải đọc, giải mã và thực hiện các lệnh chuyển số liệu, các lệnh điều chỉnh địa chỉ và các lệnh kiểm tra độ dài mảng đã chuyển để biết thời điểm kết thúc. Nó hoàn toàn chuyển quyền điều khiển bus cho chip DMAC và số liệu được truyền trực tiếp giữa ngoại vi và bộ nhớ dưới sự điều khiển của chip này. Chip DMAC sẽ tạo địa chỉ, các tín hiệu điều khiển đọc/ ghi ngoại vi, tính số từ đã chuyển và thông báo khi chuyển xong mảng số liệu.

Hình sau cho thấy có các được liên hệ trực tiếp giữa bộ nhớ chính và các ngoại vi qua chip DMAC mà không qua CPU.

Hình 5.7: Các đường liên hệ trực tiếp giữa bộ nhớ chính và ngoại vi

Một phép DMA gồm các bước sau:

- Thông báo cho CPU về yêu cầu thực hiện DMA.

- Điều khiển bus hệ thống mà không làm ảnh hưởng tới hoạt động bình thường của CPU hoặc không gây xung đột bus.

- Xác định và tạo địa chỉ, tính số từ đã chuyển.

- Thông báo kết thúc DMA.

Có hai phương pháp DMA:

- Lấy lén chu kì (cycle stealing): chip DMAC sử dụng những chu kì mà CPU không truy nhập bộ nhớ, như vậy nó có thể sử dụng bus mà không cần thông báo cho CPU. Nhược điểm của phương pháp này là yêu cầu về thời gian rất khắt khe.

Phương pháp thông dụng hơn là bắt CPU phải tự treo (trở về trạng thái trở kháng cao) và nhường quyền điều khiển bus cho chip DMAC. Thay vì gửi yêu cầu ngắt đến CPU, ngoại vi gửi đến chip DMAC yêu cầu số liệu DQR. Lúc đó chip DMAC phát ra tín hiệu đặc biệt HOLD gửi tới CPU . CPU sẽ kết thúc chu kì máy hiện đại , thông báo cho chip DMAC trạng thái của mình bởi tín hiệu "ghi nhận treo". HLDA và sau đó tự treo, thả nổi bus. Chip DMAC lấy quyền điều khiển bus, tạo địa chỉ, ghi nhận yêu cầu số liệu của ngoại vi bằng tín hiệu DACK và tạo tín hiệu điều khiển đọc/ghi bộ nhớ MEMRD, MEMWR và đọc/ghi ngoại vi IORD, IOWR. Số liệu lúc này được chuyển trực tiếp giữa ngoại vi và bộ nhớ. Thông thường chip DMAC chuyển liên tục cả mảng số liệu, nên trong nó có thanh đếm số từ (word count register) cho mỗi kênh. Sau mỗi lần chuyển được một từ, nội dung thanh đếm giảm đi 1, địa chỉ DMA được hiệu chỉnh lại (hoặc tăng hoặc giảm 1). Khi nội dung thanh đếm số từ bằng 0, chip DMAC thông báo kết thúc hoạt động DMA bằng tín hiệu TC (terminal count) được tạo từ thanh đếm số từ.

5.5.1 Cấu trúc của chip DMA - 8237

Chip DMA - 8237 gồm ba khối chính:

- Khối điều khiển và phân chia thời gian cho các hoạt động bên trong và tạo tín hiệu điều khiển cho bên ngoài.

- Khối điều khiển giải mã lệnh do CPU đưa tới trước khi phục vụ DMA và giải mã từ điều khiển chế độ để chọn kiểu DMA.

- Khối mã hoá ưu tiên làm trọng tài giải quyết ưu tiên cho những kênh DMA yêu cầu phục vụ trong cùng một thời điểm.

Hình 5.8 là sơ đồ các chân tín hiệu:

(chân số 1): chỉ thị rằng chip DMAC đang đọc số liệu từ ngoại vi qua địa chỉ cổng.

(chân số 2): DMAC đang ghi số liệu tới ngoại vi qua cổng.

(chân số 3): số liệu được đọc từ bộ nhớ chính.

(chân số 4) : số liệu đang được ghi vào bộ nhớ chính.

READY (chân số 6): tín hiệu vào từ bộ nhớ hoặc ngoại vi.

HLDA (chân số 7): CPU hoặc bus master báo cho biết nó đã rời khỏi bus cho DMAC.

ADSTB (chân số 8): nhận byte cao vào chốt địa chỉ ngoài của DMAC.

AEN (chân số 9): kích hoạt chốt địa chỉ của DMAC.

HRQ (chân số 10): tín hiệu yêu cầu DMA từ chip DMA - 8237.

(chân số 11): tín hiệu chọn chip.

CLK (chân số 12): lối vào xung nhịp đồng hồ (4,77 MHz hoặc 7,16 MHz trong PC).

RESET (chân số 13)

(chân số 25, 24, 14, 15): chấp nhận DMA.

DREQ0 - DREQ3 (chân số 19 - 16) : đòi hỏi DMA từ ngoại vi.

DB0 - DB7 (chân số 30 - 26, 23 - 21): bus số liệu 2 hướng.

A0 - A3 (chân số 32 - 35): ở trạng thái standby, CPU dùng nibble này để định địa chỉ các thanh ghi. Khi 8237 được kích hoạt, đây là 4 bit địa chỉ thấp.

A4 - A7 (chân số 37 - 40): ở trạng thái standby, 4 chân này bị cấm. Khi DMA - 8237 được kích hoạt, đây là 4 bit địa chỉ.

(chân số 36): kết thúc xử lí DMA.

Vcc (chân số 5, 31): nguồn nuôi +5V

GND (chân số 20): nối đất 0V.

Hình 5.8: Sơ đồ chân tín hiệu DMA

5.5.2 Các trạng thái

Vi xử lý 8237 làm việc trong hai chu kì máy cơ bản: chu kì nghỉ và chu kì hoạt động. Mỗi chu kì máy DMA bao gồm một số trạng thái. Có tất cả 7 trạng thái, mỗi trạng thái chiếm một chu kì nhịp đồng hồ.

SI: Trạng thái không hoạt động. 8237ở trạng thái này khi không có yêu cầu DMA hợp lệ, chip chỉ nhận lệnh từ CPU khi đang ở trạng thái này.

S0: là trạng thái đầu của quá trình phục vụ DMA, khi chip DMAC đã gửi yêu cầu treo cho CPU nhưng chưa nhận được tín hiệu ghi nhận treo. Khi nhận được tín hiệu ghi nhận treo, chip DMAC chuyển sang trạng thái SI.

S1, S2, S3, S4: các trạng thái làm việc của DMAC. Lúc này chip DMAC trực tiếp điều khiển chuyển số liệu bằng các địa chỉ, tín hiệu điều khiển đọc/ghi do chính mình tạo ra.

SW: là trạng thái đợi được xen vào giữa S3 và S4 do tác động của đầu vào READY của chip DMAC. SW cần thiết khi thời gian thâm nhập của bộ nhớ quá lớn.

5.5.3 Các bộ nhớ nội bộ

Các bộ nhớ nội bộ được chia thành hai nhóm:

Nhóm các thanh ghi điều khiển, trạng thái và nhóm các thanh ghi làm việc. Bảng sau liệt kê các thanh ghi đó:

Tên thanh ghi Độ dài (bit) Số lượng

Địa chỉ gốc

Số từ gốc

Địa chỉ tức thời

Số từ tức thời

Trạng thái

Lệnh

Tạm thời

Chế độ

Mặt nạ

Yêu cầu DMA 16

16

16

16

8

8

8

6

4

4 4

4

4

4

1

1

1

4

1

1

Độ dài và số lượng các thanh ghi

5.5.4 Chu kì nghỉ

Khi không có yêu cầu DMA, 8237ở chu kì nghỉ bằng cách liên tục thực hiện trạng thái SI. Nó kiểm tra các đường yêu cầu số liệu DRQ vào tất cả các chu kì đồng hồ, đồng thời kiểm tra chân chọn mạch để xem CPU có ý định gửi lệnh đến hoặc đọc/ghi thông số, trạng thái, chế độ DMA từ (hoặc vào) chip DMAC hay không. Nếu = 0 và HRQ = 0, 8237 tuân theo sự điều khiển bằng chương trình của CPU. A0 - A3 là những đầu vào địa chỉ để chọn các thanh ghi trong của 8237. Những thanh ghi này được ghi vào hoặc đọc ra tuỳ thuộc vào tín hiệu điều khiển đọc/ghi và của CPU.

5.5.5 Chu kì hoạt động

Lúc này chip DMAC phát yêu cầu treo HRQ cho CPU. Số liệu được chuyển bằng DMA trong những chu kì này theo một trong những chế độ sau:

- Chế độ chuyển từng từ (Single Transfer Mode)

- Chế độ chuyển mảng (Block Transfer)

- Chế độ chuyển theo nhu cầu (Demand Transfer)

- Chế độ ghép tầng (Cascade mode)

5.5.6 Các chế độ ưu tiên

Vi xử lý 8237 có thể làm việc ở hai chế độ ưu tiên khác nhau theo quy định phần mềm từ CPU:

Chế độ ưu tiên cố định: kênh 0 có mức ưu tiên cao nhất, kênh 3 có mức ưu tiên thấp nhất. Chế độ ưu tiên vòng: kênh vừa được phục vụ sẽ có mức ưu tiên thấp nhất, lúc mới lập chế độ kênh 0 ở mức cao nhất.

5.5.7 Làm việc với CPU

Trước khi để DMAC làm việc, CPU cần phải lập cho nó trật tự ưu tiên, mặt nạ cho từng kênh.v.v... và quy định cho từng kênh địa chỉ DMA, độ dài mảng (số đếm từ) bằng cách ghi vào các thanh ghi trong của 8237 tuân theo quy định về mã của chúng. Hình sau mô tả cụ thể ý nghĩa mã của các thanh ghi lệnh, thanh ghi chế độ, thanh ghi yêu cầu và thanh ghi mặt nạ.

Trong quá trình hoạt động, 8237 luôn cập nhập trạng thái của mình vào thanh ghi trạng thái để CPU có thể đọc ở bất cứ thời điểm nào. Thông tin trạng thái cho biết kênh DMA nào đã đạt đến số đếm kết thúc TC (terminal count) tức là đã chuyển xong mảng số liệu có độ dài quy định ở thanh ghi số đếm từ gốc, hoặc bị bắt buộc kết thúc chuyển do tác động của tín hiệu EOP đang chờ phục vụ ở bất cứ kênh nào nếu có.

5.5.8 Cấu trúc DMA trong PC

Trong PC/XT một chip DMAC chỉ có khả năng phục vụ các ngoại vi 8 bit (các thiết bị chỉ có các thanh ghi 8 bit). Trong máy PC/AT (16 bit) có thêm một chip DMAC nữa gọi là chủ (master) được nối với CPU. Các chân HRQ và HLDA của chip DMAC tớ được nối với kênh 0 của chip chủ để nhằm cho các kênh 0-3 có mức ưu tiên cao hơn 3 kênh của chip chủ. Các kênh 0-3 của chủ được quy ước là kênh DMA từ 4-7 của máy AT. Bốn kênh của chip tớ phục vụ cho ngoại vi 8 bit, trong khi đó 3 kênh từ 5 đến 7 không sử dụng được cấu hình cho các thiết bị 16 bit.

Kênh Bộ điều khiển Độ rộng Dùng cho

0 1 8 bit làm tươi bộ nhớ

1 1 8 bit SDLC (synch, data link Control)

2 1 8 bit bộ điều khiển đĩa mềm

3 1 8 bit PC/XT: bộ điều khiển đĩa cứng,

AT: không dùng

4 2* 16 bit nối tầng DMAC, sang DMAC

5 2* 16 bit dự trữ

6 2* 16 bit dự trữ

7 2* 16 bit dự trữ

*: chỉ có trong AT

Cấu trúc DMA trong PC

Bảng sau liệt kê địa chỉ vào/ ra thanh ghi điều khiển và trạng thái của DMA - 8237

DMA (1) DMA(2) Đọc/ghi (R/W) Thanh ghi

08h D0h R trạng thái

08h D0h W lệnh

09h D2h W yêu cầu DMA

0Ah D4h W che kênh

0Bh D6h R chế độ DMA

0Fh DEh W mặt nạ

Thanh ghi trạng thái của DMA - 8237

(1): chủ trong PC/XT, tớ trong AT; (2): chủ trong AT

Các địa chỉ vào/ra của thanh ghi địa chỉ và đếm số từ được liệt kê dưới đây:

DMA (1) DMA (2) Thanh ghi

00h C0h địa chỉ kênh 0/4

01h C1h đếm kênh 0/4

02h C2h địa chỉ kênh 1/5

03h C3h đếm kênh 1/5

04h C4h địa chỉ kênh 2/6

05h C5h đếm kênh 2/6

06h C6h địa chỉ kênh 3/7

07h C7h đếm kênh 3/7

Bài 6: CỔNG TRAO ĐỔI THÔNG TIN SONG SONG VỚI NGOẠI VI

Máy tính PC luôn có nhu cầu trao đổi thông tin với các thiết bị ngoại vi, hoạt động trao đổi thông tin với ngoại vi được thực hiện thông qua các cổng (Port). Các thông số cơ bản khi tổ chức một cổng là địa chỉ của cổng, hướng truyền thông tin của cổng và độ rộng kênh dữ liệu của cổng. Trong bài này ta sẽ đi sâu vào nghiên cứu cổng trao đổi dữ liệu. Có nhiều phương pháp điều khiển sự trao đổi dữ liệu như: vào/ra điều khiển bằng chương trình, vào/ra điều khiển bằng ngắt, vào/ra điều khiển bằng phần cứng. Trong nhóm thứ nhất, chương trình sẽ nắm quyền điều khiển quá trình trao đổi dữ liệu vào/ra. Nhóm thứ hai là nhóm ngoại vi chủ động đưa yêu cầu cho hệ vi xử lý khi ngoại vi có nhu cầu trao đổi dữ liệu. Nhóm thứ ba là nhóm trao đổi dữ liệu được điều khiển bằng phần cứng. Máy tính PC sử dụng phối hợp cả ba phương pháp trên.

6.1 Các chế độ vào/ra thông tin trong máy tính

6.1.1 Vào/ra thông tin tách biệt

Trong chế độ này, chỉ có lệnh IN và OUT thực hiện trao đổi dữ liệu với ngoại vi (cách dùng các lệnh này đề nghị xem trong phụ lục tham khảo). Bộ vi xử lý 80x86 sử dụng 16bit địa chỉ để gán địa chỉ cho các cổng vào/ra nên nó quản lý được tối đa 65.536 cổng vào và 65.536 cổng ra. Số lượng cổng như vậy là quá đủ cho mọi ứng dụng giao tiếp với ngoại vi. Thực tế rất ít khi sử dụng tới giá trị cực đại về số lượng đó. Hình sau mô tả cơ chế đánh địa chỉ cho các cổng vào/ra:

Hình 6.1: Tổ chức địa chỉ cổng vào/ra của 80x86

Lệnh IN và OUT đòi hỏi một số chu kỳ máy để thực hiện: chu kỳ máy thứ nhất là chu kỳ nhận lệnh OF, chu kỳ máy thứ hai để đưa địa chỉ cổng từ thanh ghi DX (nếu địa chỉ này >255) hay địa chỉ trực tiếp ghi trong lệnh ra kênh địa chỉ. Chu kỳ tiếp theo có thể là IORD hoặc IOWR. Trong chu kỳ máy này, lệnh OUT gửi dữ liệu từ bộ vi xử lý ra thiết bị ngoại vi, lệnh IN nhận dữ liệu từ thiết bị ngoại vi vào bộ vi xử lý. Trong chu kỳ máy IORD hoặc IOWR, các tín hiệu /IORD và /IOWR xác định thời điểm để chốt cổng ba trạng thái hoặc để chốt cổng ra.

Sơ đồ phần cứng chọn thiết bị được thiết kế phụ thuộc vào số lượng thiết bị vào/ra mà hệ yêu cầu. Không cần phải giải mã địa chỉ nếu như hệ chỉ có một cổng vào và một cổng ra. Tín hiệu điều khiển với /IORD sẽ tạo xung đọc và /IOWR để tạo xung ghi. Các xung nhịp này điều khiển trực tiếp thanh ghi đệm vào và thanh ghi chốt ra. Nếu trong hệ có nhiều cổng vào và cổng ra, cần phải giải mã địa chỉ để tạo xung chọn thiết bị cho mỗi cổng.

Phương pháp địa chỉ đơn giản nhất là chọn tuyến tính. Phương pháp này không đòi hỏi phần cứng, song chỉ sử dụng cho hệ có tổng số cổng vào/ra không lớn hơn 16. Ở đây mỗi bit địa chỉ có quan hệ loại trừ với cổng vào/ra và tổ hợp với các giá trị logic /IORD hoặc /IOWR để tạo ra xung chọn thiết bị, cách lựa chọn này được mô tả đơn giản như sau:

Hình 6.2: Tạo tín hiệu chọn cổng bằng giải mã tuyến tính đơn giản

Bất lợi của phương pháp giải mã địa chỉ tuyến tính là lỗi chương trình có thể gây nên nhầm lẫn địa chỉ (tức là địa chỉ không đơn trị). Khi đó có thể sẽ có hai hay nhiều cổng vào đồng thời kích hoạt kênh dữ liệu.

Để lựa chọn nhiều cổng vào/ra và đảm bảo sự lựa chọn là đơn trị, người ta sử dụng bộ giải mã địa chỉ. Để có nhiều xung chọn thiết bị, ta cần các bộ giải mã có nhiều đầu vào vì như vậy sẽ giảm số IC cần thiết. Ví dụ các bộ giải mã có n đầu vào và 2n đầu ra hay được sử dụng hơn cả. Hình 6.3 mô tả cấu trúc của bộ giải mã địa chỉ 74LS138.

Ngoài các tín hiệu địa chỉ cơ sở dùng để lựa chọn các đầu ra của các mạch giải mã địa chỉ theo kiểu 74LS138, các tín hiệu địa chỉ còn lại và các tín hiệu chốt (/IORD và /IOWR) cũng tham gia vào quá trình lựa chọn nhằm mục đích tạo ra tính đơn trị và phân tách các cổng vào/ra.

Hình 6.3: Sơ đồ tín hiệu của 74LS138

Ngoài ra, khi sử dụng các bộ giải mã có đầu vào Enable mắc nối tiếp nhau ta còn có thể tạo ra rất nhiều tín hiệu "chọn thiết bị". Trong thực tế, máy tính PC thường sử dụng kết hợp phương pháp giải mã địa chỉ "cứng" bằng cách sử dụng một số vi mạch 74LS138 (139), 8205 và phương pháp giải mã địa chỉ mềm sử dụng vi mạch PAL LS68 (vi mạch giải mã địa chỉ lập trình được).

6.1.2 Vào/ra thông tin theo địa chỉ bộ nhớ

Các lệnh tham chiếu bộ nhớ cũng có khả năng trao đổi dữ liệu với thiết bị ngoại vi nếu cổng vào/ra được gán cho vùng địa chỉ của bộ nhớ. Các thanh ghi liên quan tới cổng vào/ra được coi như là các ngăn nhớ.

Khi vào/ra thông tin theo địa chỉ bộ nhớ, CPU thực hiện giải mã toàn bộ 20bit địa chỉ (80286) hoặc nhiều hơn (386 trở lên). Mạch logic bên ngoài sinh ra xung chọn thiết bị vào/ra chỉ khi các tín hiệu điều khiển có các giá trị tương ứng /MEMRD = 0 hoặc /MEMWR = 0.

Có thể nói, đây là một biện pháp "đánh lừa" CPU vì khi gửi địa chỉ và các tín hiệu điều khiển để đọc thông tin từ bộ nhớ, nó không cần xác định nơi gửi dữ liệu vào là bộ nhớ hay thiết bị vào/ra. CPU chỉ cần nơi gửi dữ liệu duy trì khoảng thời gian tối thiểu để dữ liệu có thể ổn định hoặc nó sử dụng đầu vào READY để tạo thêm một số trạng thái đợi (WAIT) cần thiết. Tương tự như vậy, khi CPU ghi thông tin vào bộ nhớ, nó chỉ cung cấp địa chỉ, dữ liệu và xung đồng bộ rồi tiếp tục chức năng của nó. Mạch logic bên ngoài sẽ xác định là bộ nhớ hay cổng vào/ra nào phải tiếp nhận dữ liệu đưa ra.

Như vậy, có thể tóm tắt những điểm khác nhau cơ bản trong hai chế độ vào ra thông tin của CPU (ngoài việc sử dụng các lệnh và giải mã địa chỉ) như sau:

- Đối với mạch phối ghép vào/ra theo bản đồ nhớ, các tín hiệu điều khiển là /MEMRD và /MEMWR, còn vào ra tách biệt là /IORD và /IOWR.

- Ở vào/ra thông tin tách biệt, số cổng bị hạn chế đến 65.536 cổng vào và 65.536 cổng ra còn vào ra theo địa chỉ bộ nhớ, số cổng có thể lên tới 220 cổng. Tất nhiên, không bao giờ cần đến nhiều cổng như vậy.

- Đối với vào/ra theo địa chỉ bộ nhớ, có thể thực hiện các phép tính số học và logic trực tiếp trên các dữ liệu vào/ra mà không cần phải chuyển chúng vào các thanh ghi tích luỹ. Dữ liệu có thể chuyển tới mọi thanh ghi chứ không nhất thiết phải là thanh ghi tích luỹ.

- Nhược điểm quan trọng của vào/ra theo địa chỉ bộ nhớ là do nó chiếm không gian địa chỉ nhớ nên dẫn đến việc phân mảng không gian nhớ.

6.2 Vi mạch ghép nối ngoại vi lập trình được PPI 8255A

Trong mục này, ta sẽ nghiên cứu vi mạch ghép nối ngoại vi lập trình được PPI 8255A (PPI - Programmable Peripheral Interfacing còn A - Advance với ý nghĩa là "cải tiến"), một trong những chip vào/ra được sử dụng rộng rãi nhất. Chip này có thể được dùng cho cả vào/ra tách biệt và vào/ra theo địa chỉ bộ nhớ. Đó là IC được đóng vỏ dạng DIP (Dual In Package) 40 chân. Hình sau đây mô tả cấu trúc bên ngoài của 8255A:

Hình 6.4: Sơ đồ chân vi mạch PPI 8255A

8255A có ba cổng truy nhập độc lập là PA, PB và PC do vậy nó kinh tế hơn nhiều so với các cổng đơn thiết kế trên các bộ đệm/chốt 74LS373 và 74LS374. Điều quan trọng nữa là có thể lập trình riêng cho từng cổng của 8255A thành cổng vào hay cổng ra hoặc chuyển đổi chúng một cách linh hoạt. Ngoài ra, 8255A còn có thể được sử dụng để CPU giao tiếp với các thiết bị thông qua tín hiệu bắt tay (Handshaking Signals).

6.2.1 Các chân của 8255A

PA0 -- PA7: Cổng PA (8 bit) có thể được lập trình thành cổng vào, cổng ra hoặc tất cả các bit là vào/ra hai chiều.

PB0 -- PB7: Cổng PB (8 bit) có thể được lập trình thành cổng vào hoăc cổng ra. PB không thể sử dụng làm cổng vào/ra hai chiều.

PC0 -- PC7: Cổng PC (8 bit), có thể là cổng vào hoặc cổng ra. Các chân này cũng có thể được chia thành hai phần: phần cao PCH (PC4 -- PC7) và phần thấp PCL (PC0 -- PC3), mỗi phần có thể được dùng làm cổng vào hoặc cổng ra. Ngoài ra, còn có thể lập trình riêng cho từng bit từ PC0 đến PC7.

/RD và /WR: Là hai chân vào đưa tới 8255A dùng để điều khiển quá trình đọc/ghi thông tin. Các tín hiệu này thường nối với /IORD và /IOWR trong chế độ vào/ra tách biệt hoặc /MEMRD và /MEMWR trong chế độ vào/ra theo địa chỉ bộ nhớ.

RESET: Là tín hiệu vào mức tích cực cao để thiết lập 8255A về chế độ ngầm định (các cổng là cổng vào để tránh xung đột). Chân này thường nối với tín hiệu RESET của máy tính.

A0, A1 và /CS: /CS là tín hiệu chọn chip còn A0 và A1 dùng để chọn từng thành phần trong 8255. Kết hợp các tín hiệu này như bảng sau:

/CS A0 A1 Chọn

0 0 0 Cổng PA

0 0 1 Cổng PB

0 1 0 Cổng PC

0 1 1 Thanh ghi từ điều khiển (CWR)

1 x x Không chọn 8255A

D0 -- D7: Là các chân dữ liệu của 8255A dùng để trao đổi thông tin với CPU, thường thì các chân này nối tới phần thấp của kênh dữ liệu hệ thống.

GND và Vcc: Là các chân dùng để nối đất và cấp nguồn cho 8255A.

6.2.2 Điều khiển hoạt động của 8255A

Bên trong 8255A có một thanh ghi từ điều khiển. Bằng cách ghi các giá trị từ điều khiển khác nhau lên thanh ghi này, ta có thể đưa 8255A vào các chế độ hoạt động khác nhau. Có hai loại từ điều khiển cho 8255A:

- Từ điều khiển định nghĩa cấu hình cho các cổng PA, PB, PC.

- Từ điều khiển lập/xoá (Set/Reset) từng bit ở đầu ra PC.

Thanh ghi từ điều khiển có 8 bit, bit D7 của nó được dùng làm cờ (Flag). Khi D7 = 1 thì đó là từ điều khiển định cấu hình cho các cổng còn khi D7 = 0 thì đó là từ điều khiển lập/xoá từng bit cho PC. Ta lần lượt xét hai loại từ điều khiển này.

Từ điều khiển định nghĩa cấu hình cho các cổng:

D7 D6 D5 D4 D3 D2 D1 D0

F=1 MA1 MA0 A CA MB B CB

Các bit điều khiển nhóm A

* MA1 và MA0 chọn chế độ cho nhóm A:

00: Mode 0

01: Mode 1

1x: Mode 2

* Bit A định nghĩa PA:

A = 0 : Cổng ra

A= 1 : Cổng vào

* Bit CA định nghĩa PCH:

CA = 0 : Cổng ra

CA = 1 : Cổng vào

Các bit điều khiển nhóm B

* Bit MB dùng chọn chế độ cho nhóm B:

MB = 0 : Mode 0

MB = 1 : Mode 1

* Bit B định nghĩa PB:

B = 0 : Cổng ra

B = 1 : Cổng vào

* Bit CB định nghĩa PCL:

CB = 0 : Cổng ra

CB = 1 : Cổng vào

Từ điều khiển lập/xoá từng bit đầu ra cổng PC:

D7 D6 D5 D4 D3 D2 D1 D0

F=0 0 0 0 S/R

Ngầm định D7 -- D4 = 0 Chọn bit PCi tương ứng với tổ hợp (D3 D2 D1) 0: Xoá PCi

1: Lập PCi

6.2.3 PPI 8255A ở các chế độ cụ thể

Mode 0: Chế độ vào/ra đơn giản

Intel gọi chế độ 0 là chế độ vào ra cơ sở. Tên gọi khác phổ biến hơn là vào/ra đơn giản. Trong chế độ này, các cổng A, B, C đều có thể được lập trình thành cổng vào hoặc ra (lưu ý rằng không thể đồng thời vừa là cổng vào vừa là cổng ra). Một đặc điểm quan trọng là hai nửa của cổng C có thể lập trình để truy vấn độc lập.

+ Ví dụ sau đây khởi tạo cho PPI 8255A ở địa chỉ cơ sở 60h, lấy dữ liệu từ cổng PA rồi gửi tới cổng PB và PC:

MOV AL, 90h; byte điều khiển PA - vào, PB và PC - ra.

OUT 53h, AL; đưa tới thanh ghi từ điều khiển

IN AL, 50h; lấy dữ liệu từ PA

OUT 51h, AL; gửi tới PB

OUT 52h, AL; gửi tới PC

+ Ví dụ tiếp theo khởi tạo cho 8255A ở địa chỉ 78h, lấy dữ liệu từ PA gửi sang PB đồng thời lấy dữ liệu từ PCL gửi sang PCH:

MOV AL, 83h; byte điều khiển PA - vào, PB - ra, PCL - vào và PCH - ra

OUT 7Bh, AL: đưa ra thanh ghi từ điều khiển

IN AL, 78h; lấy dữ liệu từ PA

OUT 79h, AL: đưa ra PB

IN AL, 7Ah; lấy dữ liệu từ PCL

MOV CL, 4; biến đếm có giá trị 4

SHL AL, CL; dịch trái AL 4 bit để chuyển các bit D0 -- D3 → D4 -- D7

OUT 7Ah, AL; đưa ra cổng PCH

Mode 1: Vào/ra với khả năng bắt tay

Một trong những điểm mạnh nhất của PPI 8255A khiến nó vẫn đang được sử dụng phổ biến hiện nay là khả năng quản lý các tín hiệu bắt tay (Handshaking). Bắt tay là phương thức trao đổi thông tin qua lại giữa các thiết bị thông minh. Một ví dụ điển hình là quá trình truyền tin giữa PC và máy in (Printer): nếu PC đơn thuần chỉ gửi dữ liệu đến cho máy in thì chưa đủ, máy in phải được thông báo về sự tồn tại của dữ liệu đồng thời phải thông báo trạng thái của mình cho máy tính. 8255A trong chế độ 1 có khả năng quản lý tín hiệu bắt tay, ta mô tả sơ lược như sau:

Chế độ 1 là chế độ áp dụng cho 2 cổng PA và PB (bằng cách ghi từ điều khiển có tổ hợp MA1 MA0 = 01 hoặc MB = 1). Trong chế độ này, cổng PA và PB có thể được lập trình là cổng vào hoặc ra (1 chiều) còn PC trở thành các tín hiệu bắt tay (PCH dùng cho PA còn PCL dùng cho PB). Các tín hiệu bắt tay có thể kể đến là:

* Nếu PA (PB) là cổng vào:

/STB (Stroble - chốt): là tín hiệu vào mức tích cực thấp. Khi thiết bị ngoại vi đưa byte dữ liệu tới A (B) nó sẽ thông báo cho 8255 qua chân STB để chốt dữ liệu vào thanh ghi bên trong. Thời gian tác động của /STB là hữu hạn và phụ thuộc vào từng loại thiết bị ngoại vi.

IBFa (IBFb) (Input Buffer port A (B) Full - Bộ đệm vào đầy): là tín hiệu ra tích cực cao. Để trả lời tín hiệu /STB, 8255A chốt vào thanh ghi bên trong các dữ liệu tại PA (PB) và thông qua tín hiệu này để báo rằng dữ liệu đã được chốt nhưng chưa được CPU đọc.

INTR (INTerrupt Request - Yêu cầu ngắt): là tín hiệu ra tích cực cao, hỗ trợ cho hoạt động trao đổi thông tin với 8255A sử dụng cơ chế ngắt. Thường thì tín hiệu này được nối đến đầu vào của một trong các vi mạch xử lý ngắt ưu tiên (sẽ xét ở bài sau).

INTEa (INTEb) (INTerrupt Enable - Cho phép ngắt): là tín hiệu của một mạch lật bên trong dùng để cho phép/cấm ngắt INTR

Từ trạng thái (Status word): Hỗ trợ cho việc trao đổi thông tin với 8255A sử dụng cơ chế hỏi vòng. Trạng thái của các tín hiệu bắt tay được nhập từ cổng C và được xem xét khi đọc cổng C.

* Nếu PA (PB) là cổng ra:

/OBFa (b) (Output Buffer port A (B) Full - Bộ đệm ra đầy): là tín hiệu có mức tích cực thấp dùng để thông báo cho ngoại vi biết là CPU đã ghi byte dữ liệu tới cổng A. Tín hiệu này thường được nối tới tín hiệu STROBE của thiết bị nhận tin.

/ACKa (b) (ACKnowlege for port A (B) - báo nhận cổng A (B)): là tín hiệu vào tích cực thấp để thông báo rằng thiết bị thu đã nhận được byte dữ liệu.

INTRa (b) (INTerrupt Request for port A (B) - Yêu cầu ngắt phục vụ cổng A (B)): là tín hiệu ra tích cực cao dùng để hỗ trợ cho việc truyền thông tin theo cơ chế ngắt. Tín hiệu này được kích hoạt bằng sườn lên của /ACK và thông báo cho CPU biết thiết bị thu đã nhận xong byte dữ liệu cuối cùng.

INTEa (b) (INTerrupt Enable for port A (B) - Cho phép ngắt cổng A (B)): là tín hiệu của một mạch lật bên trong dùng để cho phép/cấm ngắt INTR.

Từ trạng thái (Status): hỗ trợ cho việc giám sát trạng thái của các tín hiệu bắt tay.

Mode 2: Vào/ra hai chiều với tín hiệu bắt tay

Để có thể truyền dữ liệu cả vào và ra qua cùng một cổng với khả năng bắt tay. người ta sử dụng cổng A ở chế độ 2. Khi cổng A ở chế độ 2, cổng B có thể ở chế độ 0 hoặc 1.

Mode BSR (Bit Set/Reset): Chế độ lập/xoá từng bit cho PC.

Đặc trưng mạnh nhất của cổng C là có khả năng điều khiển từng bit một. Chế độ này cho phép đặt từng bit PC0 - PC7 lên cao hoặc xuống thấp và người ta có thể sử dụng để thực hiện một số nhiệm vụ đặc thù.

6.2.4 Sử dụng PPI 8255A trong máy tính PC

Trong các máy tính IBM PC/XT và tương thích, 8255 là chip được sử dụng đầu tiên cho việc xuất nhập dữ liệu đến các cổng. Máy tính PC/XT và tương thích sử dụng IC 74LS138 để giải mã địa chỉ cổng. Trong các thế hệ máy tính này, ba cổng của 8255 được lập trình để truy xuất độc lập. Cổng A được dùng cho hai mục đích: cổng vào cho bàn phím và cổng vào cho chuyển mạch DIP. Chuyển mạch DIP dùng để thông báo cho PC về các ngoại vi bổ sung như lượng RAM, loại màn hình và số lượng ổ đĩa. Các thiết lập chuyển mạch DIP được BIOS đọc và lưu lại thông tin này về sau không cần phải đọc lại. Sau đó, hệ thống sẽ sử dụng cổng A để nhận dữ liệu từ bàn phím. Trong các thế hệ máy hiện nay, người ta không dùng chuyển mạch để thiết lập cấu hình hệ thống như trên nữa. Thay vào đó, thông tin cấu hình hệ thống được cất trong RAM CMOS với nguồn pin riêng (người ta còn gọi đây là NV RAM - NonVolatile RAM). Vì vậy, cổng A chỉ được dùng để nhận dữ liệu từ bàn phím. Cổng B được khởi tạo với vai trò cổng ra với mỗi bit của nó mang một ý nghĩa riêng, dùng để điều khiển nhiều thiết bị khác nhau như bộ Timer, loa hệ thống, kiểm tra Parity trong RAM, ... Cổng C được khởi tạo là cổng vào đa chức năng dùng để kiểm tra và nhận một số thông tin từ hệ thống.

Cũng cần phải nói thêm rằng, hiện nay, vi mạch 8255A cũng không còn được sử dụng độc lập trên bảng mạch do người ta đưa vào bên trong mạch tích hợp hỗ trợ (Chipset) cùng với nhiều vi mạch khác như mạch điều khiển ngắt, mạch điều khiển kênh, mạch định thời, ...

Bài 7: HOẠT ĐỘNG NGẮT VÀ TÀI NGUYÊN NGẮT CỦA MÁY TÍNH

Trong máy tính PC có hai cơ chế được dùng để hỗ trợ cho hoạt động điều khiển các thiết bị khác nhau. Đó là cơ chế hỏi vòng và cơ chế ngắt.

Hỏi vòng là một cơ chế đồng bộ, được thực hiện tại những khoảng thời gian nhất định (thường được gọi là "Khe thời gian - Time Slot") trong các chu kỳ làm việc của CPU. Trong các khe thời gian đó, CPU kiểm tra những thiết bị cần thiết (thường thì những thiết bị này cũng được chế tạo để phù hợp với cơ chế hỏi vòng) để xử lý hoặc đưa ra những yêu cầu đối với thiết bị.

Tuy nhiên, đại đa số các yêu cầu từ phía thiết bị lại là các yêu cầu không đồng bộ, nghĩa là thời điểm xuất hiện không được biết trước. Để tránh mất thông tin, và nguy hại hơn là mất đồng bộ hệ thống, CPU được trang bị một cơ chế đáp ứng không đồng bộ đối với mọi thiết bị ngoại vi - đó là cơ chế ngắt.

7.1 Định nghĩa và phân loại ngắt

7.1.1 Định nghĩa:

Cơ chế ngắt là một hoạt động đặc biệt được trang bị cho bộ vi xử lý nhằm đáp ứng một cách mềm dẻo và linh hoạt các yêu cầu không đồng bộ từ thiết bị ngoại vi theo cách thức: Bộ vi xử lý tiến hành công việc chính của mình, chỉ khi nào xuất hiện yêu cầu từ phía thiết bị ngoại vi thì bộ vi xử lý mới tạm dừng công việc hiện tại để phục vụ việc trao đổi dữ liệu với ngoại vi đó. Sau khi hoàn thành việc trao đổi dữ liệu, bộ vi xử lý quay trở về thực hiện tiếp công việc đã bị gián đoạn. Có thể mô tả hoạt động ngắt một cách đơn giản như hình vẽ sau:

Hình 7.1: Mô tả đơn giản hoạt động ngắt

7.2.2 Phân loại ngắt

a. Ngắt mềm

Ngắt mềm là ngắt được gọi bằng một lệnh ở trong chương trình ngôn ngữ máy. Lệnh đó là INT mn (trong đó INT là mã lệnh, mn là số hiệu ngắt). Các ngắt mềm cho phép gọi trực tiếp các chương trình con phục vụ ngắt chứa trong thư viện chương trình. Nói cách khác, lệnh ngắt mềm bản chất là một lệnh gọi chương trình con đặc biệt, nó được gọi một cách chủ động bằng chương trình của người lập trình.

b. Ngắt cứng

Là các yêu cầu ngắt CPU do các tín hiệu đưa đến từ các chân INTR và NMI. Khác với ngắt mềm, ngắt cứng không được khởi động bởi chương trình mà bởi các thành phần có trong phần cứng của hệ vi xử lý (các thiết bị ngoại vi bên trong và bên ngoài). Loại ngắt này là một cơ cấu đơn giản và hiệu quả để bộ vi xử lý phản ứng kịp thời với các sự kiện không đồng bộ xảy ra trong hệ vi xử lý.

Ví dụ minh hoạ đơn giản là hoạt động của ngắt bàn phím. Mỗi khi ấn hay nhả một phím thì ngắt bàn phím sẽ được kích hoạt. Chương trình xử lý ngắt bàn phím sẽ được khởi động bằng cách chuyển ký tự được ấn vào vùng bộ đệm của bàn phím, xếp ngay sau ký tự được ấn lần trước. Cũng như mọi ngắt khác, việc thực hiện chương trình chính sẽ được khôi phục ngay sau khi chương trình con xử lý ngắt bàn phím kết thúc.

Ngắt cứng thường được chia ra thành ngắt che được (Maskable Interruption) và ngắt không che được (NonMaskable Interruption).

Ngắt che được là tất cả các yêu cầu ngắt được đưa tới chân INTR của CPU. CPU có thể cấm (che)/phục vụ các ngắt này phụ thuộc vào giá trị của cờ ngắt IF (IF = 0 - cấm, IF = 1 - cho phép). Các lệnh Assembly như CLI (xoá cờ ngắt) và STI (thiết lập cờ ngắt) sẽ tác động đến cờ này. Khi một ngắt bị che, thì mặc dù được gọi, chương trình con phục vụ ngắt tương ứng cũng không được thực hiện.

Ngắt không che được là tất cả các yêu cầu ngắt được đưa tới chân NMI của CPU. Các ngắt này luôn được phục vụ bất chấp giá trị của cờ IF. Chương trình con phục vụ ngắt loại này thường là các chương trình có chức năng thông báo các sự kiện quan trọng nhất của hệ thống như sự cố nguồn nuôi, sự cố thời gian thực,...

Ngoài ra, ngắt cứng còn có thể được phân ra thành ngắt trong và ngắt ngoài. Ngắt trong (ngắt nội bộ) được kích hoạt bởi các phần cứng có ngay trên bảng mạch (như các IC hỗ trợ) còn ngắt ngoài được kích hoạt từ các thiết bị bên ngoài hệ (được kết nối với hệ thông qua các cổng).

7.1.3 Hoạt động chung của ngắt

CPU xử lý ngắt (cứng và mềm) thông qua các bước sau:

1. Cất thanh ghi cờ (FR) vào ngăn xếp và giảm SP đi 2 đơn vị (vì thanh ghi cờ là thanh ghi 2 byte)

2. Xoá cả hai cờ cho phép ngắt IF và cờ bẫy TF. Khi đó sẽ che các yêu cầu ngắt khác đưa đến chân INTR và huỷ bỏ chế độ chạy từng lệnh trong khi CPU thực hiện CTCPVN. Tuỳ thuộc vào chế độ ngắt mà người lập trình có thể huỷ bỏ việc che chân INTR bằng lệnh STI.

3. Cất CS hiện hành vào ngăn xếp và giảm SP đi 2 đơn vị.

4. Cất IP hiện hành vào ngăn xếp và giảm SP đi 2 đơn vị.

5. Thực hiện truy cập vào bảng vector ngắt bằng cách xác định địa chỉ vật lý của vector ngắt thông qua số hiệu ngắt tương ứng, qua đó cập nhật giá trị CS và IP mới của CTCPVN.

6. Với cặp CS:IP mới, CPU bắt đầu nhận và thực hiện các lệnh của CTCPVN.

7. Lệnh cuối cùng của CTCPVN là lệnh IRET. Lệnh này thông báo để CPU tải lại giá trị IP, CS và thanh ghi cờ từ ngăn xếp và nhờ vậy, CPU có thể thực hiện tiếp chương trình tại nơi nó bị ngắt.

7.2 Tài nguyên ngắt của máy tính

Để hỗ trợ cho hoạt động ngắt của máy tính, người ta trang bị cho nó một hệ thống các chương trình con phục vụ ngắt (CTCPVN). Mỗi một ngắt (kể cả ngắt cứng và ngắt mềm) đều có một CTCPVN tương ứng. Tổng số ngắt cứng và ngắt mềm có thể có trong một hệ máy tính PC là 256 ngắt. Các ngắt này lần lượt được gán cho các số hiệu từ 00h đến FFh. Mỗi khi một ngắt có số hiệu N kích hoạt, CTCPVN ứng với nó sẽ được gọi. CPU sẽ thực hiện chương trình này tại điểm vào của nó được xác định bởi cặp con trỏ chương trình CS:IP. Cặp địa chỉ này (có tính chất như một vector) được chứa tại một vùng nhớ đặc biệt được gọi là bảng vector ngắt. Thường thì máy tính PC được cài đặt sẵn cỡ khoảng hơn 20 CTCPVN, số còn lại do các lập trình viên cài đặt phụ thuộc vào mục đích sử dụng. Toàn bộ các CTCPVN cùng với bảng vector ngắt hợp thành "tài nguyên ngắt của máy tính" (hay còn gọi là "tài nguyên phần mềm của máy tính") với ý nghĩa ngoài việc được sử dụng như là công cụ hỗ trợ cho máy tính thì chúng còn được con người khai thác trong nhiều kỹ thuật lập trình hệ thống chuyên sâu khác nhau (như chặn bắt ngắt, đánh tráo ngắt,...).

7.2.1 Bảng vector ngắt

Intel quy định bảng vector ngắt là một vùng nhớ có dung lượng 1KB hoặc 2KB (phụ thuộc vào thế hệ bộ vi xử lý) nằm trong bộ nhớ trung tâm có địa chỉ bắt đầu từ 0000:0000h (vì có tất cả 256 ngắt, mỗi vector ngắt lại có tối thiểu 4byte để chứa địa chỉ đầy đủ cho CS:IP của CTCPVN tương ứng). Theo quy ước đó, ví dụ đối với 80286, nếu đi từ địa chỉ thấp nhất, mỗi vector ngắt gồm 4 byte, hai byte có địa chỉ thấp dùng để chứa giá trị IP, hai byte tiếp theo dùng để chứa giá trị CS. Do vậy, từ số hiệu ngắt N cho trước, CPU dễ dàng xác định địa chỉ của vector ngắt trong bảng vector ngắt:

(IP)N = N*4 còn (CS)N = N*4 + 2.

Hình 7.2: Cấu trúc của bảng vector ngắt

7.2.2 Các chương trình con phục vụ ngắt có sẵn trong PC

Các máy tính PC hiện nay thường được thiết kế để hỗ trợ tối đa cho các lập trình viên hệ thống. Vì vậy, trong số 256 ngắt được phân bổ cho máy tính, có một số ngắt đã được cài đặt sẵn CTCPVN và khi cần, có thể được sử dụng cho nhiều mục đích khác nhau. Ta điểm qua một số ngắt được hỗ trợ từ những thế hệ PC đầu tiên cho đến nay:

INT 00h (lỗi phép chia cho 0): Ngắt này thuộc nhóm ngắt ngoại lệ (Exception Interrupts). Chúng được bộ vi xử lý kích hoạt mỗi khi có những điều kiện mà CPU không có khả năng xử lý được, ví dụ như phép chia cho 0. Thông thường, CTCPVN phục vụ ngắt này sẽ đưa ra một thông báo (Message) về lỗi phép chia cho 0 (CPU không thể đưa ra kết quả). Ngoài ra, INT 00h cũng bị kích hoạt trong trường hợp nếu thương số quá lớn so với thanh ghi lưu kết quả của lệnh chia (DIV).

INT 01h (chạy từng lệnh): Trong quá trình thực hiện chương trình, thường có nhu cầu kiểm tra nội dung ác thanh ghi của CPU và bộ nhớ hệ thống. Vấn đề này được giải quyết bằng cách cho chương trình chạy từng lệnh một, sau mỗi lệnh lại kiểm tra các thanh ghi và các byte nhớ. Intel thiết kế riêng INT 01h phục vụ cho quá trình này. Để bắt đầu, phải đặt cờ bẫy TF (bit D8 trong thanh ghi cờ) lên 1. Sau đó, cứ mỗi một lệnh thực hiện xong thì CPU sẽ gọi CTCPVN INT 01h để hiển thị nội dung các thanh ghi lên màn hình.

Cờ bẫy TF được đặt và xoá thông qua ngăn xếp (không có lệnh đặt xoá trực tiếp như IF). Ví dụ sau đây sẽ thực hiện xoá cờ bẫy TF thông qua ngăn xếp:

PUSHF ; cất giá trị thanh ghi cờ

POP AX ; lấy giá trị thanh ghi cờ đưa vào AX

AND AX, 0FEFFh ; xoá bit D8

PUSH AX ; lưu lại vào vị trí cũ

POPF ; đưa vào thanh ghi cờ

Bằng cách thay lệnh AND bằng lệnh OR, ta có thể đặt cờ TF lên 1.

INT 02h (Ngắt không che được NMI): Tất cả các bộ vi xử lý của Intel đều có tín hiệu NMI - là tín hiệu vào mức tích cực cao dùng để báo hiệu các ngắt cứng không che được. Mỗi khi chân này được kích hoạt, CPU luôn luôn gọi CTCPVN INT 02h để thực hiện.

INT 03h (Điểm dừng - Break): Intel sử dụng INT 03h để thực hiện các điểm dừng. Trong chế độ chạy từng bước, thông qua ngắt này có thể giám sát được CPU và bộ nhớ hệ thống sau từng lệnh được thực hiện. Ở các thế hệ máy gần đây, các chương trình gỡ rối (Debug) mạnh còn sử dụng cả INT 01h và INT 03h.

INT 04h (Tràn số có dấu): Lệnh này được kích hoạt khi xảy ra tràn số có dấu. Có một lệnh Assembly tương ứng là INTO (Ngắt khi có tràn - INTerrupt if Overflow). Nếu lệnh INTO đưocự đặt ngay sau phép toán logic hay số học đối với các số có dấu như IMUL, ADD, IDIV thì CPU sẽ kích hoạt INT 04h nếu cờ OF = 1. Khi OF = 0, lệnh INTO không được thực hiện mà bị bỏ qua và có ý nghĩa như lệnh NOP (No OPeration).

Xét ví dụ sau:

MOV AL, Data_1

MOV BL, Data_2

ADD AL, BL

INTO

Giả sử trong chương trình trên, Data_1 = +64 = 01000000 và Data_2 = +64 = 01000000. Lệnh INTO được thực hiện và CPU nhảy đến địa chỉ vật lý 00010h là vị trí vector ngắt của INT 04h. Phép cộng trên có nhớ từ D6 sang D7 làm cờ tràn chuyển lên 1 và kết quả không phải là +128 như mong đợi.

Cần phải nhắc lại rằng, trong số 256 ngắt khả dụng của CPU, một số được thiết bị ngoại vi sử dụng, một số được hệ điều hành (MS DOS và cao hơn) sử dụng, số còn lại dành cho người lập trình. Chi tiết các ngắt dùng trong IBM PC được giới thiệu trong các tài liệu thuyết minh kỹ thuật đối với từng thế hệ máy.

7.3 Ngắt ưu tiên và xử lý ngắt ưu tiên

7.3.1 Ngắt ưu tiên

Nếu tại một thời điểm cùng có nhiều yêu cầu ngắt khác nhau cùng đòi hỏi bộ vi xử lý phục vụ thì bộ vi xử lý sẽ xử lý như thế nào? Trong trường hợp như vậy, bộ vi xử lý sẽ thực hiện gán các mức ưu tiên cho các yêu cầu ngắt và xử lý các yêu cầu ngắt đó theo nguyên tắc:

- Nếu có nhiều yêu cầu ngắt cùng tác động thì CPU sẽ phục vụ yêu cầu ngắt nào có mức ưu tiên cao nhất hiện hành trước, sau đó mới đến các yêu cầu ngắt khác theo thứ tự giảm dần mức ưu tiên.

- Trong thời gian phục vụ một yêu cầu ngắt, nếu có yêu cầu ngắt khác với mức ưu tiên cao hơn kích hoạt thì tạm dừng phục vụ yêu cầu này để chuyển sang phục vụ yêu cầu có mức ưu tiên cao hơn.

Cũng cần nói thêm rằng, ngay trong cấu trúc phần cứng của bộ vi xử lý đã quy định mức ưu tiên khác nhau như đầu vào ngắt NMI có mức ưu tiên cao hơn đầu vào INTR.

Để có thể xử lý ngắt theo nguyên tắc trên, máy tính IBM PC được trang bị một cơ cấu phần cứng đặc biệt - đó là vi mạch điều khiển ngắt ưu tiên PIC 8259A (PIC - Priority Interrupt Controller).

7.3.2 Vi mạch điều khiển ngắt ưu tiên PIC 8259A

Vi mạch điều khiển ngắt ưu tiên được chế tạo để phục vụ cho việc mở rộng các đầu vào ngắt để đáp ứng nhu cầu mở rộng số lượng ngắt khi có nhiều thiết bị ngoại vi được ghép nối và làm việc theo cơ chế ngắt, đồng thời đảm bảo nguyên tắc xử lý ngắt ưu tiên đã đề cập ở trên. Cấu trúc, phương pháp ghép nối và điều khiển các PIC 8259A riêng lẻ được đề cập chi tiết trong các giáo trình "Kỹ thuật vi xử lý". Trong máy tính PC hiện nay, PIC 8259A được tích hợp ngay bên trong bộ vi mạch hỗ trợ (Chipset). Vì vậy, trong mục này chỉ giới thiệu sơ lược về cấu trúc của PIC 8259A, thông qua đó trình bày hoạt động hoàn chỉnh của một ngắt cứng có sự trợ giúp của PIC.

Cấu trúc phần cứng của một PIC có dạng như hình vẽ sau:

Hình 7.3: Sơ đồ cấu trúc của vi mạch điều khiển ngắt ưu tiên PIC 8259A

Các chân tín hiệu của PIC 8259A bao gồm:

IR0 -- IR7 (Interrupt Request): Các đầu vào tín hiệu yêu cầu ngắt.

SP/EN (Slave Program/ENable Buffer): Lập trình cho PIC ở chế độ thợ (Slave)/Mở đệm bus dữ liệu. Khi PIC làm việc ở chế độ không có đệm bus dữ liệu thì đây là tín hiệu vào dùng để lập trình biến PIC đó thành mạch thợ (SP = 0) hoặc mạch chủ (SP = 1). Khi PIC làm việc với đệm dữ liệu thì chân này là tín hiệu ra EN dùng để mở đệm bus PIC thông vào bus dữ liệu hệ thống.

CAS0 -- CAS2 (Cascades): Tín hiệu nối tầng giữa các PIC với nhau theo mô hình chủ/thợ (Master/Slave) để tăng thêm số lượng đầu vào yêu cầu ngắt cần xử lý.

A0: Là tín hiệu địa chỉ dùng để lựa chọn 2 thanh ghi bên trong (thanh ghi chẵn và thanh ghi lẻ) để đưa các từ lệnh khởi tạo và điều khiển hoạt động đến PIC.

/CS: Là tín hiệu chọn chip.

/RD và /WR: Là các tín hiệu điều khiển đọc ghi, thường được ghép với các tín hiệu /IORD và /IOWR của kênh hệ thống.

INT: Là tín hiệu yêu cầu ngắt gửi đến chân INTR của CPU.

/INTA: Là tín hiệu báo nhận ngắt, được nối tới tín hiệu /INTA của CPU.

Các khổi chức năng bên trong của PIC 8259A:

IRR (Interrupt Request Register) - Thanh ghi chứa yêu cầu ngắt: Ghi nhớ các yêu cầu ngắt có tại đầu vào IRi. Bất cứ ngoại vi nào có yêu cầu ngắt (trường hợp cực đại là cả 8 đầu vào đều có yêu cầu) sẽ được thanh ghi này ghi nhận.

ISR (Interrupt Serviced Register) - Thanh ghi yêu cầu ngắt đang được phục vụ: Ghi nhớ yêu cầu ngắt đang được phục vụ trong số các yêu cầu ngắt IRi trong mạch.

IMR (Interrupt Mask Register) - Thanh ghi mặt nạ ngắt: Ghi nhớ mặt nạ ngắt đối với các yêu cẩu ngắt IRi.

PR (Priority Resolve) - Khối giải quyết ưu tiên: Thực hiện kiểm tra mức ưu tiên của yêu cầu ngắt tác động và xử lý ngắt ưu tiên theo nguyên tắc đã xét ở trên.

Khối logic điều khiển: Có nhiệm vụ gửi yêu cầu ngắt tới CPU qua INTR khi có tín hiệu tại các chân IRi và nhận tín hiệu /INTA từ phía CPU rồi điều khiển quá trình đưa số hiệu ngắt lên kênh dữ liệu.

Đệm kênh dữ liệu (Data Buffer): Dùng để phối ghép PIC với kênh dữ liệu hệ thống.

Khối điều khiển đọc ghi: Dùng cho việc đưa các từ điều khiển ra cho PIC và đọc các từ trạng thái của PIC.

Khối điều khiển nối tầng: Ghi nhớ và so sánh số hiệu của các mạch PIC có mặt trong hệ thống.

Điều khiển hoạt động của PIC 8259A:

Để mạch PIC 8259A có thể hoạt động được theo yêu cầu, sau khi bật nguồn cấp điện, PIC cần phải được lập trình bằng cách ghi vào thanh ghi (được quản lý như cổng vào/ra) bên trong nó các từ mã điều khiển khởi tạo (ICW - Initial Control Word) và tiếp theo đó là các từ mã điều khiển hoạt động (OCW - Operation Control Word).

Các từ điều khiển khởi tạo dùng để tạo nên các chế độ (Mode) làm việc cơ bản cho PIC còn các từ mã điều khiển hoạt động sẽ quyết định cách thức làm việc cụ thể của PIC. Từ điều khiển hoạt động sẽ được ghi khi ta muốn thay đổi hoạt động của PIC.

7.3.3 Hoạt động ngắt có sự hỗ trợ của PIC 8259A

1. Khi có yêu cầu ngắt từ thiết bị ngoại vi tác động vào một trong các chân IRi của PIC 8259A thì PIC sẽ đưa tín hiệu INT = 1 (trong trường hợp đầu vào đó không bị che bởi IMR) đến chân INTR của bộ vi xử lý.

2. Bộ vi xử lý đưa ra xung /INTA thứ nhất đến đầu vào /INTA của PIC 8259A.

3. PIC 8259A dùng xung /INTA thứ nhất đó như là thông báo để hoàn tất các xử lý nội cần thết kể cả xử lý ưu tiên nếu có nhiều yêu cầu ngắt cùng xảy ra.

4. Bộ vi xử lý đưa ra xung /INTA thứ hai đến PIC 8259A.

5. Xung /INTA thứ hai buộc PIC đưa ra kênh dữ liệu byte chứa thông tin về số hiệu ngắt của yêu cầu ngắt vừa được nhận biết.

6. Bộ vi xử lý dùng sô hiệu ngắt để tính ra địa chỉ vector ngắt trong bảng vector ngắt.

7. Bộ vi xử lý lưu trữ thanh ghi cờ vào ngăn xếp, xoá các cờ IF và TF, sau đó lưu trữ địa chỉ trở về CS:IP vào ngăn xếp.

8. Bộ vi xử lý gán địa chỉ CS:IP của chương trình con phục vụ ngắt từ bảng vector ngắt và thực hiện chương trình đó.

Bài 8: HOẠT ĐỘNG TRUYỀN TIN NỐI TIẾP CỦA MÁY TÍNH

Máy tính PC và mạng máy tính PC là những phương tiện quan trọng trong quá trình xử lí thông tin, xây dựng các phần mềm điều khiển và tổ chức truyền thông tin đi xa . . . Bản chất máy tính PC là một bộ vi xử lý đa năng, ngoài chức năng được ấn định nó còn được bổ xung một loạt về cấu hình để có thể thực hiện một loạt các thao tác để biến nó thành một hệ thống phục vụ cho những bài toán cụ thể đặt ra, tuỳ theo yêu cầu của người tổ chức điều khiển. Thông qua máy tính và những thiết bị phụ trợ, việc xử lí thông tin và truyền tin tức trở nên thuận tiện hơn, nhanh hơn, đáp ứng được các yêu cầu cần thiết và ứng dụng rộng rãi trong truyền thông.

8.1 Cơ sở truyền tin nối tiếp của PC

8.1.1 Các phương thức truyền tin trong PC

Máy tính truyền số liệu bằng hai phương pháp: truyền nối tiếp và truyền song song.

Truyền số liệu song song: Là phương pháp truyền số liệu mà sử dụng số đường dây bằng với số bit truyền mỗi lần, mỗi đường dây sẽ đảm nhận truyền một bit số liệu. Truyền song song có ưu điểm là tốc độ truyền cao, tín hiệu được truyền một cách trực tiếp giúp cho việc thu và phát tín hiệu đơn giản hơn, nó được ứng dụng rất rộng rãi trong việc truyền số liệu ở Bus nội bộ máy tính và truyền dữ liệu giữa máy tính với ổ đĩa, máy in...

Nhưng truyền song song chỉ thuận lợi khi truyền ở cự li ngắn, do việc sử dụng nhiều đường dây để truyền đi xa sẽ rất tốn kém và dễ bị ảnh hưởng lẫn nhau của nhiễu giữa các dây.

Truyền số liệu nối tiếp: Là phương pháp truyền số liệu từng bit một trên một đường dây. Với phương pháp truyền nối tiếp, tín hiệu không thể truyền đơn giản mà phải được chuyển đổi từ dạng song song sang nối tiếp nhờ các thanh ghi dịch, sau đó truyền ra đường dữ liệu. Bên phía thu cũng phải có thanh ghi dịch để nhận tín hiệu và đưa dạng nối tiếp về song song. Việc truyền tín hiệu nối tiếp trong khoảng cách ngắn không cần đến điều chế tín hiệu, nhưng để thông tin truyền được đi xa thì việc điều chế tín hiệu là hết sức quan trọng, và một trong những hình thức để truyền số liệu nối tiếp đi xa là sử dụng MODEM để điều chế tín hiệu sang dải âm tần hình sin và truyền trên đường điện thoại.

Truyền số liệu nối tiếp có ưu điểm rất lớn là truyền được ở cự li rất xa và rất thuận tiện khi sử dụng đường truyền của mạng viễn thông, mặt khác nó lại có khả năng chống nhiễu tốt, giá thành lại hạ do chỉ cần dùng một đường dây để truyền. Song tốc độ truyền nối tiếp rõ ràng không nhanh bằng truyền song song, việc tổ chức chuyển từ các bit song song sang nối tiếp và ngược lại đòi hỏi khá phức tạp, việc sử dụng điều chế và giải điều chế tín hiệu cũng ảnh hưởng nhiều đến tốc độ truyền.

Với những ưu điểm của mình, cộng với khả năng tận dụng tốt hệ thống thông tin cơ sở mà truyền tin nối tiếp ngày càng được ứng dụng rộng rãi, đặc biệt là trong lĩnh vực Internet.

8.1.2 Các phương pháp truyền tin nối tiếp của PC

Máy tính truyền số liệu nối tiếp theo hai phương pháp: Truyền đồng bộ và truyền không đồng bộ.

Phương pháp truyền tin không đồng bộ:

Trong phương pháp truyền tín hiệu không đồng bộ (Asynchronous Communication) thì các nhóm bit (tương ứng các ký hiệu) được truyền đi theo một khung tin độc lập, mỗi khung tin được bắt đầu và kết thúc bằng các bit đặc biệt (Bit Start và Bit Stop) với mục đích tạo đồng bộ giữa bên thu và bên phát. Thời điểm bắt đầu truyền các nhóm bit là bất kỳ và độc lập nhau. Bit Start luôn phải là 0. Bit Stop có thể là 1 bit, 1 + 1/2 bit hoặc 2 bit với giá trị luôn phải là 1. Bit Parity có thể được cài vào để thực hiện phát hiện sai sơ bộ cho bên thu. Tuỳ theo loại mã sử dụng mà số lượng bit trong khung tin có thể là 5, 6, 7 hay 8. Ở một số hệ thống, nhằm tăng khả năng bảo toàn của dữ liệu, người ta còn thêm vào khung dữ liệu bit bậc (hay còn gọi là các bit chẵn lẻ). Bit bậc có thể là bậc chẵn hoặc lẻ. Bit bậc lẻ có tổng các số 1 của các bit dữ liệu cùng với bit bậc là lẻ, tương tự các bit bậc chẵn là khi tổng các số 1 của các bit dữ liệu và bit bậc là chẵn.

Ưu điểm của phương pháp này là yêu cầu đồng bộ giữa thu và phát không đòi hỏi chặt chẽ nhờ có bit Start và bit Stop xác định thời điểm đầu và cuối của nhóm bit cho nên sự sai pha tích luỹ chỉ diễn ra trong thời gian thu nhóm bit đó. Chính điều đó dẫn đến ưu điểm là thiết bị trong hệ thống khá đơn giản, giá thành hệ thống thấp.

Bit 1 Bit 2 Bit 3 Bit 4 Bit 5 Bit 6 Bit 7 Bit 8

Nhược điểm của phương pháp truyền không đồng bộ là hiệu quả sử dụng kênh thấp do phải truyền nhiều bit Start và bit Stop là những bit không mang tin. Mặt khác tốc độ truyền tin cũng bị hạn chế. Các Modem có tốc độ không lớn hơn 1200 bit/s thường sử dụng phương pháp này.

Phương pháp truyền tin đồng bộ:

Phương pháp truyền tín hiệu đồng bộ (Synchronous Communication) khắc phục được các nhược điểm của phương pháp không đồng bộ. Bản chất của phương pháp này là các tín hiệu số được gửi đi một cách liên tục với tốc độ không đổi. Trong trường hợp này, thiết bị thu đầu cuối cần phải tạo ra và duy trì tần số nhịp đồng bộ với tín hiệu số đầu vào (tức là đồng bộ với tần số nhịp bên phát) trong suốt thời gian làm việc. ở phương pháp này, từng khối gồm nhiều byte được định khung giữa các mã điều khiển và sau đó mới được truyền đi. Tuỳ vào giao thức (Protocol) khác nhau mà mã điều khiển cũng khác nhau. Có 2 giao thức đồng bộ chuẩn được sử dụng rộng rãi đó là BISYNC và SDLC.

SYN SYN SOH HEADER STX TEXT ETX BCC

Khuôn dạng khối tin của giao thức BISYNC

(Binary Synchronous Communication)

01111110

Cờ bắt đầu Trường địa chỉ 8 bit Trường điều khiển 8 bit Trường thông tin Kiểm tra khung 16 bit 01111110 Cờ kết thúc

Khuôn dạng khối tin của giao thức SDLC (Serial Data Link Control)

Đối với giao thức BISYNC không có các bit khởi động và bit dừng, thay vào đó ở mỗi khối dữ liệu có một hoặc một vài byte gọi là các ký tự đồng bộ. Độ lớn của khối tin BISYNC có thể lên tới hàng ngàn byte.

SYN: Ký tự đồng bộ. Sau khi phát hiện hai ký tự đặc biệt dùng làm tín hiệu đồng bộ đã biết trước, thiết bị thu bắt đầu ghi nhận ký tự SOH.

SOH (Start Of Header): là byte mở đầu, xác định kích thước và các đặc tính của trường Header.

HEADER: Trường này có độ dài thay đổi, có thể dùng để chứa địa chỉ nơi nhận tin.

STX (Start of Text): chỉ ra rằng ngay sau byte này là phần bắt đầu của văn bản.

TEXT: Trường này có độ dài thay đổi, chứa đựng các ký tự mã ASCII hoặc nội dung tin tức cần truyền.

ETX (End of Text) là byte đánh dấu sự kết thúc của khối tin văn bản.

BCC (Block Check Character) là khối tổng kiểm tra dùng để phát hiện lỗi.

Với giao thức SDLC, là một giao thức truyền đồng bộ do IBM đề xuất và được sử dụng rộng rãi trong một số mạng máy tính. Giao thức này chuyển byte 01111110 thay cho byte SYN và được xem là byte cờ. Tiếp theo byte cờ là byte chứa địa chỉ đích trên mạng, nơi chứa dữ liệu được gửi trên mạng máy tính. Tiếp theo là byte điều khiển trong đó có thông tin về trình tự dữ liệu. Tiếp theo là dữ liệu, ở đây là các bit, trường dữ liệu của giao thức SDLC tới hàng ngàn bit và có thể đạt tới 200.000 bit/khung. Tiếp theo là trường 16 bit để kiểm tra lỗi và cuối cùng là byte cờ để chỉ thị kết thúc khung dữ liệu.

8.1.3 Truyền số liệu qua mạng điện thoại và hệ thống thông tin vô tuyến:

Mạng điện thoại công cộng (Public Telephone Network) là hệ thống thông tin được ứng dụng rộng rãi nhất với qui mô lớn ở mọi quốc gia. Chức năng chính của nó là đảm bảo kết nối và truyền dẫn các cuộc thoại ở các phạm vi khác nhau.

Việc ứng dụng rộng rãi các hệ thống vi xử lý trong mọi lĩnh vực đời sống, kinh tế đặt ra một vấn đề bức thiết là tổ chức hệ thống thông tin số với các qui mô khác nhau. Đối với các hệ thống thu phát thông tin hiện nay, phương án thông dụng nhất là sử dụng chính mạng điện thoại công cộng và các máy thông tin vô tuyến (ở đây là các máy thông tin sóng ngắn và cực ngắn) với các thiết bị ghép nối thích hợp đó là MODEM.

Hình 8.1: Truyền số liệu qua mạng điện thoại và mạng thông tin vô tuyến

MODEM với chức năng phối hợp biến đổi dạng tín hiệu số thành dạng tín hiệu tương tự phù hợp với kênh thoại khi truyền tin và biến đổi ngược lại khi nhận tin, hai quá trình đó là điều chế và giải điều chế (Modulation - Demodulation gọi tắt là MODEM). MODEM đảm bảo việc truyền dẫn số liệu nên người ta thường gọi là thiết bị truyền dẫn số liệu (Data Communication Equipment - DCE). Tuỳ theo thuật toán làm việc và mức độ thông minh của MODEM mà tốc độ truyền tin cũng như chất lượng thông tin có thể cải thiện được rất nhiều. MODEM có thể cắm bên trong trực tiếp vào các khe cắm của máy (khe PCI chẳng hạn) hay bên ngoài máy tính qua cổng COM với chuẩn RS232. Với nội dung đề tài này ta chỉ xét với MODEM ngoài thông qua cổng COM của PC.

Các MODEM có các phương thức cho truyền song công, đơn công, không đồng bộ, đồng bộ. Cùng một MODEM có thể chuyển đổi được các tốc độ khác nhau. Các MODEM thông dụng hiện nay thường có tốc độ 56Kb/s.

8.1.4 Tổ chức đường truyền tín hiệu nối tiếp qua cổng COM của PC

Để tổ chức đường truyền nối tiếp với hệ vi xử lý và để giảm tối đa các mạch phụ thêm bên ngoài, công nghệ vi điện tử đã chế tạo ra các vi mạch tổ hợp cỡ lớn lập trình được, có khả năng thực hiện phần lớn các chức năng truyền dẫn và phối ghép với hệ vi xử lý. Đó là mạch thu phát dị bộ vạn năng UART (Universal Asynchronous Receiver Transmitter) 8250(16450) và mạch thu phát đồng bộ - dị bộ vạn năng USART (Universal Synchronous and Asynchronous and Receiver Transmitter) 8251.

Với các mạch phối ghép như trên, việc truyền tin sẽ được thực hiện nhờ một UART (USART) ở đầu phát và một UART (USART) khác ở đầu thu. Khi có kí tự để phát 8250 (8251) tạo ra khung cho ký tự bằng cách gắn thêm vào mã ký tự các bit Start và bit Stop rồi gửi liên tiếp từng bit ra đường truyền. Bên phía thu, một 8250 (8251) khác sẽ nhận ký tự, tháo bỏ khung, kiểm tra Parity rồi chuyển sang dạng song song để CPU đọc.

Các tín hiệu nối tiếp được đưa đi là các tín hiệu xung điện áp 0 và 1. Để truyền được đi xa bằng hệ thống viễn thông, tín hiệu đó được MODEM điều chế thành tín hiệu xung âm tần, gửi qua đường truyền. Bên nhận có một MODEM thu để giải điều chế, chuyển nó về dạng các xung 0 và 1 và được UART nhận và đưa vào máy.

• Lúc bắt đầu làm việc DTE1 đưa ra xung /DTR (Data Terminal Ready) = 0 để báo cho DCE1 biết nó sẵn sàng làm việc. DCE1 cũng vậy, khi bắt đầu làm việc nó đưa ra xung /DSR (Data Set Ready) = 0 để báo cho DTE1 biết là nó đã sẵn sàng thu phát thông tin. Sau đó DCE1 được điều khiển để phát xung gọi sang phía bên kia để kết nối liên lạc.

• Nếu DTE2 sẵn sàng làm việc nó sẽ gửi trả lời sang phía bên DTE1 những xung âm tần theo qui ước.

• Khi DTE1 có ký tự cần gửi, nó đưa ra đầu /RTS (Request To Send) = 0 DCE1 sẽ đưa ra /DCD (Data Carrier Detect) = 0 để báo là đường truyền đã thông và nó sẵn sàng nhận dữ liệu để chuyển đi thì nó sẽ đưa ra /CTS (Clear To Send) = 0. Nhận được thông báo này DTE1 gửi các ký tự sang DCE1 qua đầu phát TxD. Sau khi truyền xong ký tự này, DTE1 đưa ra /RTS = 1 để báo kết thúc. DCE1 cũng kết thúc công việc và đưa ra /CTS = 1 để thông báo.

Hình 8.2: Ghép UART với MODEM

Trong thực tế, người ta ghép nối PC và MODEM qua cổng COM nhờ các cáp nối theo chuẩn RS 232C. Trong bài này ta sẽ nghiên cứu kỹ phương pháp ghép nối và điều khiển việc truyền tin nối tiếp qua cổng COM gắn liền với chuẩn RS 232C.

8.2 Cấu trúc cổng truyền thông COM của IBM PC và chuẩn RS 232

Các máy tính hiện nay được thiết kế với các cổng vào/ra (I/O Ports) để trao đổi số liệu với thiết bị ngoại vi và cổng COM là một trong các cổng truyền thông tương ứng với phương thức truyền nối tiếp. Các máy tính PC thường được trang bị hai cổng truyền nối tiếp ký hiệu là COM1 và COM2. Mỗi cổng gồm một mạch điều khiển và phối hợp tín hiệu mà phần tử quan trọng nhất là các mạch tích hợp ISN 8250 thực hiện toàn bộ chức năng truyền tin nối tiếp không đồng bộ như biến đổi số liệu song song thành nối tiếp và ngược lại, điều khiển tốc độ truyền v.v...

Giao diện giữa UART với thiết bị truyền dẫn (DCE) là các chuẩn của CCITT như RS232, RS422, RS423, X21, V24, V28,... Chuẩn RS 232 là chuẩn ra đời sớm nhất gồm 25 tín hiệu và sau đó được cải tiến thành chuẩn RS232-C chỉ sử dụng 10 tín hiệu của RS232. Sơ đồ khối tổng quát của cổng truyền thông COM được mô tả trên hình vẽ:

Hình 8.3: Sơ đồ khối tổng quát của cổng COM

Hình 8.4: Giao diện kết nối cổng COM và MODEM 56K

8.2.1 Tổ chức của UART 8250A

UART 8250 là mạch phối ghép vào ra không đồng bộ, lập trình được dùng để chuyển thông tin song song (từ máy tính) thành nối tiếp (ra đường truyền) và ngược lại. Nó là chip IC chuyên dụng loại LSI 40 chân. Sơ đồ chân tín hiệu của nó được trình bày trên hình vẽ sau:

Hình 8.5: Sơ đồ chân tín hiệu chip UART 8250A

Các chân tín hiệu của UART 8250 được trình bày theo nhóm như sau:

Nhóm các tín hiệu địa chỉ:

- Các chân CS0, CS1, /CS2 là các chân tín hiệu chipselect, nếu chúng ở mức tích cực thì UART được bộ vi xử lý kích hoạt.

- A0, A1, A2 là các chân tín hiệu địa chỉ cho phép chọn 10 thanh ghi bên trong UART 8250.

- CSOUT (Chip Select Out) ở mức cao cho biết hệ vi xử lý đã chọn vi mạch 8250 bằng các tín hiệu chip select.

- /ADS (Address Select): ở mức thấp thông báo rằng tín hiệu địa chỉ và các tín hiệu chọn chíp đã ổn định.

Nhóm tín hiệu số liệu:

- D0-D7: Kênh dữ liệu vào/ra hai chiều.

- SIN (Serial In): Lối vào cổng nối tiếp của số liệu từ ngoại vi.

- /WR (/DOSTR) hay /DOUTS: Các lối vào để hệ vi xử lý ghi số liệu hoặc lệnh điều khiển vào các thanh ghi bên trong của 8250.

- /RD (DISTR) hay /DINS: Các lối vào để hệ vi xử lý đọc số liệu hoặc từ trạng thái của các thanh ghi bên trong 8250.

- /DDIS ở mức thấp chỉ vi xử lý đang đọc số liệu từ 8250.

Nhóm tín hiệu nhịp:

- XTAL1, XTAL2 là các lối vào của phần tử dao động thạch anh.

- RCLK (Receiver Clock) là lối vào xung đồng hồ.

- /BaudOut là lối ra xung nhịp.

Nhóm điều khiển MODEM:

- DTR (Data Terminal Ready): Thiết bị đầu cuối sẵn sàng.

- /DSR (Data Set Ready): Thiết bị truyền thông sẵn sàng.

- /RTS (Request to Send): Yêu cầu phát.

- /CTS (Clear to Send): Sẵn sàng nhận.

- /DCD (Detect Carrier Data): Phát hiện sóng mang.

- /RI (Ring Indicator): Chỉ thị chuông.

Nhóm điều khiển khác:

- /INTR: Yêu cầu ngắt.

- /OUT1, /OUT2: Dùng cho người sử dụng với các ứng dụng không phải chuẩn RS 232.

- VCC, GND, Reset: Nguồn nuôi, đất chung và tín hiệu khởi động.

Khối điều khiển ngắt:

- Logic điều khiển ngắt.

- Thanh ghi điều khiển ngắt.

- Thanh ghi nhận dạng ngắt.

Khối phát tín hiệu:

- Bộ tạo BAUD.

- Các bộ chia tần số LSB, MSB để tạo tốc độ phát.

- Điều khiển và định thời gian cho khối phát.

- Điều khiển và định thời gian cho khối thu.

Khối điều khiển MODEM:

- Logic điều khiển MODEM.

- Thanh ghi điều khiển MODEM.

Khối phát:

- Thanh ghi dịch phát.

- Thanh ghi đệm phát.

Khối thu:

- Thanh ghi dịch thu.

- Thanh ghi đệm thu.

Khối điều khiển chung:

- Thanh ghi điều khiển đường dây.

- Thanh ghi trạng thái đường dây.

Các thanh ghi bên trong của 8250:

DLAB A2 A1 A0 Thanh ghi được chọn

0 0 0 0 Thanh ghi đệm thu (RBR)

Thanh ghi đệm phát (THR).

0 0 0 1 Thanh ghi cho phép ngắt (IER).

1 0 0 0 Thanh ghi chốt / bộ chia phần thấp (LSB).

1 0 0 1 Thanh ghi chốt / bộ chia phần cao (MSB).

x 0 1 0 Thanh ghi nhận dạng ngắt (IIR).

x 0 1 1 Thanh ghi điều khiển đường đây (LCR).

x 1 0 0 Thanh ghi điều khiển MODEM (MCR).

x 1 0 1 Thanh ghi trạng thái đường dây(LSR).

x 1 1 0 Thanh ghi trạng thái MODEM (MSR).

x 1 1 1 Thanh ghi nháp (SPR).

8250 có 3 tín hiệu A2, A1,A0 cùng tín hiệu DLAB (Division Latch Access Bit - Bit truy cập bộ chia tần số) để chọn ra các thanh ghi bên trong của 8250.

Mỗi thanh ghi bên trong của 8250 có chức năng riêng và dạng thức cụ thể của chúng cho phép người dùng sử dụng 8250 vào các mục đích khác nhau. Ta có thể khái quát chức năng chính của chúng như sau:

Thanh ghi điều khiển đường truyền (Line Control Register - LCR): Cho phép ấn định độ dài của dữ liệu truyền đi (tính bằng bit), đặt chế độ tạo và kiểm tra parity chẵn, lẻ,...

Thanh ghi trạng thái đường truyền (Line Status Register - LSR): Cho biết trạng thái của việc truyền tín hiệu trên đường đây. Nó là thanh ghi thông báo trạng thái đường truyền - phát hiện Break (dòng tin bị ngắt), các lỗi máy thu (tràn khung, chẵn lẻ, tràn số, số liệu sẵn sàng và trạng thái không có số liệu truyền TxE).

Thanh ghi đệm phát (Transmitter Holding Register - THR): Ký tự cần phát đi phải được lấy từ CPU, ghi vào thanh ghi này với bit DLAB = 0. Sau đó 8250 tạo khung tin cho nó như đã địnhvà đưa từng bit ra chân Sout.

Thanh ghi đệm thu (Receiver Buffer Register - RBR): Khi 8250 nhận được 1 ký tự qua chân SIN, nó tháo bỏ khung cho ký tự và lưu ký tự tại thanh ghi đệm thu để CPU đọc. CPU sẽ đọc được ký tự trong thanh ghi này khi bit DLAB = 0.

Thanh ghi cho phép ngắt (Interrupt Enable Register - IER): Thanh ghi này dùng để cho phép hay cấm các nguyên nhân gây ngắt khác nhau.

Trong khi 8250 đang hoạt động, có thể tác động tới CPU thông qua chân INTRPT của nó để tạo ra 4 loại ngắt. Mỗi bit trong số D3, D2, D1, D0 ở mức cao sẽ cho phép các hiện tượng tương ứng với bit đó được đưa ra yêu cầu ngắt đối với CPU.

Thanh ghi nhận dạng ngắt (Interrupt Identifcatim Register - IIR): Thanh ghi này được đọc mỗi khi có yêu cầu ngắt từ 8250. CPU đọc bit D0 của thanh ghi này để biết có yêu cầu ngắt và kiểm tra bit D2, D1 để xác định nguồn gốc của yêu cầu ngắt. Khi UART bị Reset, chỉ có ngắt ưu tiên 1 được phục vụ, tuy nhiên có thể thay đổi điều này bằng cách dùng mặt nạ để che đi yêu cầu ngắt nào đó.

Thanh ghi điều khiển MODEM (MODEM Control Register - MCR): Thanh ghi này điều khiển các tín hiệu ra của MODEM, nó cho phép điều khiển các tín hiệutại các chân /DTR và /RTS của UART.

Thanh ghi trạng thái MODEM (MODEM Status Register - MSR): Thanh ghi này còn được gọi là thanh ghi trạng thái vào của RS232C, nó cho biết trạng thái hiện thời của các tín hiệu điều khiển MODEM từ đường dây.

Bộ chia tần tạo tốc độ truyền tin: Bộ chia này gồm hai byte là LSB và MSB, dùng để chia tần số xung nhịp nhằm tạo tốc độ mong muốn. Hệ số chia được tính theo công thức:

Hệ số chia = (Tần số nhịp chuẩn)/(Tốc độ Baud yêu cầu x 16)

XTAL là các chân để cắm thạch anh dùng cho mạch dao động bên trong của 8250. Trường hợp sử dụng tín hiệu đồng hồ chuẩn từ bên ngoài thì đưa xung đồng hồ vào chân XTAL1, bỏ lửng chân XTAL2 . Chân RLSD (Rceiver Line Signal Detect) là chân báo hiệu thấy sóng mang, tức là đã thiết lập được đường truyền.

Hình 8.6: Sơ đồ ghép nối UART với máy tính

Tín hiệu /RI là tín hiệu chuẩn của RS232C để MODEM thông báo là có xung réo chuông. Tín hiệu INTRPT là tín hiệu để yêu cầu ngắt CPU trong trường hợp 8250 được lập trình để có khả năng gây ngắt CPU.

Để 8250 hoạt động, người ta phải tiến hành ghép nối nó với máy tính và đặt các chế độ thu, phát cho nó thông qua các thanh ghi bên trong. Sơ đồ nối ghép 8250 với máy tính được thể hiện như hình 8.6.

Kênh dữ liệu: D0 - D7 từ 8250 được nối đến máy tính qua cổng đệm như 74245. Hướng truyền tin của nó được điều khiển bằng tổ hợp /IORD, /IOWR của máy tính và /CS của UART 8250. Thông qua kênh dữ liệu có thể điều khiển được các thanh ghi bên trong của UART 8250 và cấp dữ liệu để UART chuyển thành nối tiếp và truyền tới MODEM.

Tín hiệu ngắt của các 8250 sẽ nối đến đầu ngắt của bộ vi xử lý hay đầu vào IRi của 8259 qua tín hiệu khống chế OUT2.

Nhóm tín hiệu nối với MODEM để điều khiển và khống chế thu phát tin dưới dạng nối tiếp thông qua mạch tương thích RS232C. Có thể kiểm tra UART bằng cách nối vòng đầu phát TxD với đầu thu RxD qua Opto Coupler.

Nhóm tín hiệu địa chỉ A0, A1, A2, và chọn chip CS được nối với các tín hiệu tương ứng của máy tính để khống chế đọc, ghi 8250 và chọn các thanh ghi bên trong 8250 theo địa chỉ từ 3F8h đến 3FFh (Theo cách tổ chức như trên).

Tín hiệu nhịp dùng cho 8250 lấy chung từ bộ dao động ngoài nên chân XTAL1 không cần sử dụng. Tốc độ thu phát do bộ chia tần quyết định và do vậy đầu ra Baud Out được nối với RCLK.

8.2.2 Chuẩn truyền thông RS 232:

Chuẩn RS 232 được hiệp hội Công nghiệp điện tử Mỹ EIA đưa ra năm 1960 nhằm đảm bảo sự tương thích giữa các thiết bị truyền tin của các nhà sản xuất. Năm 1963, chuẩn này được cải tiến và gọi là RS232A, RS232B, RS232C vào những năm 1965 và 1969. Ngày nay RS 232 là chuẩn giao diện I/O được sử dụng rộng rãi nhất. Tuy nhiên do chuẩn này ra đời đã khá lâu, trước khi có họ mạch vi điện tử họ TTL, vì vậy, các mức điện áp vào/ra của nó không tương thích với TTL. Do đó, để nối bất kỳ RS232 nào vào máy tính đều phải qua bộ chuyển đổi điện áp như MCI488, MCI489 để chuyển đổi các mức logic của TTL sang mức điện áp của RS232 và ngược lại. Cụ thể, MCI488 được dùng để biến đổi từ TTL sang RS232 còn MCI489 thì thực hiện biến đổi ngược lại.

Chân Tín hiệu Chân Tín hiệu

1 Protective Ground 14 Secondary Transmitted Data

2 Transmitted Data 15 Transmitter Signal Element Timing

3 Received Data 16 Secondary Received Data

4 Request To Send 17 Receiver Signal Element Timing

5 Clear To Send 18 Unassigned

6 Data Set Ready 19 Secondary Request To Send

7 Signal Ground 20 Data Terminal Ready

8 Data Carrier Detect 21 Signal Quality Detector

9/10 Reserved For Data Set Testing 22 Ring Indicator

11 Unassigned 23 Data Signal Rate Selector

12 Secondary Data Carrier Detect 24 Transmitter Signal Element Timing

13 Secondary Clear To Send 25 Unassigned

Trên đây là bảng các chân của đầu nối RS 232 (Thường gọi là đầu nối DB - 25), trong đó DB - 25P là đầu đực còn DB - 25S là đầu cái. Do không phải tất cả các chân của DB - 25 đều được máy tính sử dụng nên IBM đã đưa ra một phiên bản chuẩn I/O truyền tin nối tiếp DB - 9 chỉ có 9 chân như bảng sau:

Cổng COM 9 chân

Chân Tín hiệu Chân Tín hiệu

1 Data Carrier Detect 6 Data Set Ready

2 Received Data 7 Request to Send

3 Transmitted Data 8 Clear to Send

4 Data Terminal Ready 9 Ring Indicator

5 Signal Ground

Để đảm bảo việc truyền dữ liệu nhanh và tin cậy giữa hai thiết bị, dữ liệu cần phải được phối hợp với nhau. Truyền dữ liệu có các tín hiệu bắt tay để thiết bị tìm có thể thông báo cho thiết bị phát biết để dừng phát dữ liệu khi nó không có khả năng tiếp nhận. Một số chân của RS 232 được sử dụng làm các tín hiệu bắt tay. Đó là:

- DTR: Thiết bị đầu cuối sẵn sàng. Sau khi được cấp nguồn và sau khi kết thúc qua trình tự kiểm tra, thiết bị đầu cuối (hoặc cổng COM máy tính) gửi tín hiệu DTR để báo rằng thiết bị đã sẵn sàng để truyền tin. Nếu có lỗi ở cổng COM, tín hiệu này sẽ không được kích hoạt. Đây là tín hiệu tích cực thấp và có thể được dùng để báo cho MODEM biết rằng máy tính đang hoạt động. Đây là chân ra từ DTE (cổng COM của máy tính) và đưa vào MODEM.

- DSR: Dữ liệu sẵn sàng. Khi thiết bị truyền thông DCE (ví dụ như MODEM) được cấp nguồn và tiến hành xong quá trình tự kiểm tra, tín hiệu DSR được sử dụng để xác nhận dữ liệu đã sẵn sàng cho việc truyền tin. Như vậy DSR là chân ra từ MODEM (DCE) và vào máy tính (DTE).Tín hiệu này có mức tích cực thấp. Nếu vì một lý do nào đó MODEM không thể kết nối được vào mạng điện thoại thì tín hiệu này sẽ không được kích hoạt để báo cho máy tính (hoặc thiết bị đầu cuối) rằng nó không thể nhận hoặc gửi dữ liệu.

- RST: Yêu cầu gửi dữ liệu. Tín hiệu RST được dùng đểbáo cho MODEM biết thiết bị DTE (ví dụ như máy tính) có một byte cần gửi. RTS là đầu ra tích cực thấp từ thiết bị DTE vào thiết bị DCE.

- CTS: Tín hiệu thông. Để trả lời tín hiệu RST và khi đã sẵn sàng, MODEM gửi tín hiệu CTS đến thiết bị DTE báo cho nó biết là MODEM đang sẵn sàng nhận dữ liệu.

- CD: Dò sóng mang, hoặc DCD - dò sóng mang dữ liệu. MODEM gửi tín hiệu DCD để báo cho thiết bị DTE (PC) rằng đã phát hiện được sóng mang và sự kết nối giữa thiết bị DTE với MODEM đã được thiết lập. DCD là tín hiệu ra từ MODEM và đưa vào DTE (PC).

- RI: Chỉ thị chuông. Đây là tín hiệu ra từ MODEM để báo rằng điện thoại đang réo chuông. Tín hiệu này tắt hoặc mở đồng bộ với tiếng chuông. Trong 6 tín hiệu bắt tay, đây là tín hiệu ít được sử dụng nhất.

Từ sự phân tích trên cho thấy, muốn truyền dữ liệu qua cổng COM của PC trước hết phải xác lập được các thông số cho 8250 bằng cách gửi các thông số ra các thanh ghi điều khiển và thanh ghi chốt số chia của nó cũng như tổ chức phần cứng để các thiết bị có khả năng phối hợp hoạt động. Cuối cùng là xây dựng chương trình phần mềm để đảm bảo cho việc truyền dữ liệu diễn ra theo đúng yêu cầu thực tiễn.

Đối với việc thiết lập các thông số cho 8250, chúng ta có thể dễ dàng thực hiện được thông qua việc lập trình cổng COM dùng ngắt INT 14h của BIOS . Các tuỳ chọn của ngắt INT 14h được thiết lập qua thanh ghi AH của CPU. Kể từ máy tính PS2 và tất cả các máy thế hệ sau, hàm AH = 04h cho phép người lập trình đạt tốc độ truyền đến 19200. Có hai cách tổ chức phối hợp hoạt động cho các thiết bị, tương ứng với hai kiểu tổ chức các tín hiệu bắt tay. Đó là:

Tổ chức bắt tay bằng phần mềm:

Để thực hiện bắt tay bằng phần mềm, các chân điều khiển MODEM và các chân tín ở đầu ra RS 232 phải được nối như sau:

Hình 8.7: Ghép nối để tổ chức bắt tay bằng phần mềm

Bình thường, khi không có dữ liệu truyền, phần phát trong trạng thái dấu (Mark) luôn phát tín hiệu mức logic 1 ở đầu ra SOUT của phần thu đối phương (chú ý là các đầu ra và đầu vào đều qua các bộ chuyển mức và lấy đảo, nên đầu ra TxD của SOUT khi đó có giá trị -12V). Khi có một ký tự truyền đi, bit Start có mức logic 0 được đưa đến đầu vào thu, khối điều khiển thu khởi động, thu nhận ký tự vào thanh ghi đệm thu. Khi đó bit RxRD trong thanh ghi trạng thái đường truyền được đặt lên 1 và gây ra một ngắt.

Chương trình được viết cho phần thu đầu tiên phải đọc thanh ghi trạng thái đường truyền và kiểm tra giá trị bit RxRD. Nếu bit = 0 thì quay vòng kiểm tra lại. Nếu bit = 1 thì đọc dữ liệu từ thanh ghi đệm thu vào CPU.

Chương trình viết cho phần phát là đọc thanh ghi trạng thái đường truyền và kiểm tra bit TBE. Nếu TBE = 1 nghĩa là thanh ghi giữ phát đang rỗng. Chương trình đưa một ký tự từ CPU ra thanh ghi giữ phát.

Nhược điểm của sơ đồ này là có khả năng bị thu đè, tức là ký tự trong thanh ghi đệm thu chưa được đọc vào CPU đã có ký tự khác thu đè lên. Để khắc phục nhược điểm này, người lập trình phải tính khoảng thời gian giữa hai lần đọc thanh ghi đệm thu trong chương trình để chọn ra tốc độ baud cho thích hợp.

Bắt tay bằng phần cứng:

Bằng cách tổ chức các tín hiệu điều khiển MODEM làm thành các tín hiệu bắt tay như sau ta có thể loại trừ hiện tượng thu đè:

Hình 8.8: Ghép nối bắt tay bằng phần cứng

Trường hợp truyền dữ một chiều, khi đầu phát muốn phát dữ liệu, chương trình đặt đường tín hiệu ra RTS lên mức cao (đầu ra /RTS của 8250 tích cực thấp) và giữ nguyên cho đến khi tín hiệu nhận về CTS chuyển sang trạng thái tích cực (mức cao). Nếu CTS giữ nguyên trạng thái không kích hoạt thì có nghĩa là bộ nhận đang bận, chưa có thể nhận dữ liệu. Nếu CTS có mức tích cực, chương trình sẽ gửi dữ liệu ra thanh ghi giữ phát, đồng thời đặt bit RTS về mức không tích cực. Đầu thu dữ liệu , chương trình kiểm tra thanh ghi trạng thái MODEM. Nếu bit CTS và DCTS đều có mức 1, có nghĩa là đã có một yêu cầu truyền dữ liệu từ bên phát, 8250 sẽ phát tín hiệu mức tích cực RTS đến CTS của phát. Khi đầu tín hiệu CTS của phần thu bị thay đổi mức, chương trình kiểm tra bit RxRD và đọc dữ liệu từ bộ đệm nhận vào CPU và chuyển trạng thái cho đường dây RTS.

Nếu việc truyền dữ liệu diễn ra theo hai chiều, cả thu và phát thì ta sử dụng thêm các đường điều khiển DSR, DTR cho quá trình thu phát theo chiều ngược lại, tương tự như RTS và CTS.

Việc trao đổi dữ liệu với hệ vi xử lý trong các trường hợp trên dược thực hiện theo phương pháp hỏi vòng (polling). Ta cũng có thể sử dụng điều khiển theo phương pháp ngắt. Khi đó, đầu ra INTR của 8250 được đưa tới mạch điều khiển ngắt (8259) và chương trình con xử lý ngắt đầu tiên phải đọc thanh ghi nhận dạng ngắt IIR và xác định nguồn yêu cầu ngắt do nguyên nhân nào gây ra thực hiện yêu cầu ngắt đó.

Như vậy, trên đây ta đã xem xét cách tổ chức cơ bản cho một đường truyền dữ liệu nối tiếp qua cổng COM trên cơ sở sử dụng các tín hiệu của RS 232 làm các tín hiệu bắt tay. Việc lập trình điều khiển truyền tin qua cổng COM của PC được thực hiện qua ngắt 14h của BIOS (xem phụ lục tham khảo).

8.3. Giao diện tuần tự đa năng USB (Universal Serial Bus)

Nếu tính từ thời điểm chính thức đ¬a ra thị trường, cổng song song và cổng nối tiếp đã gắn bó với thiết bị ngoại vi gần hai thập niên. Ngoại trừ lần đư¬a ra tính năng Plưug and Play trong hệ điều hành Windows 95 thì công nghệ I/O trên PC không có thay đổi lớn nào so với mẫu thiết kế ban đầu năm 1981. Cho đến nay băng thông của giao tiếp song song và nối tiếp đủ so với nhu cầu của thiết bị ngoại vi, như¬ng với những ứng dụng mới thì cổng song song và nối tiếp không còn đáp ứng được nữa. Nó do các nguyên nhân sau:

- Ở cổng nối tiếp, băng thông tối đa đạt đư¬ợc là 115,2 Kpbs còn cổng song song thì băng thông là 500Kpbs. Nh¬ư vậy cả cổng nối tiếp và song song, băng thông đều hoàn toàn không đáp ứng đủ nhu cầu của khá nhiều thiết bị, ví dụ đơn giản là máy ảnh số chẳng hạn.

- Khi kết nối các thiết bị mà dùng cổng nối tiếp và song song không phải lúc nào cũng đơn giản, đặc biệt là khi muốn điều khiển các thiết bị liên kết với nhau theo dạng chuỗi. Thêm vào đó, kích thư¬ớc của các cổng này cũng có phần gây bất tiện trong các thao tác ứng dụng.

- Đối với các cổng nối tiếp và song song, mỗi cổng đòi hỏi một yêu cầu ngắt (IRQ - interrupt request) trong khi mỗi PC chỉ có thể đáp ứng đư¬ợc cỡ 20 yêu cầu ngắt, sau khi cài đặt hệ thống chỉ còn khoảng 5 IRQ dành cho thiết bị ngoại vi. Nh¬ư vậy có thể nói khi dùng các cổng song song và nối tiếp thì tài nguyên phần cứng sẽ bị hạn chế.

- Cuối cùng, một khó khăn nữa hạn chế đối với việc sử dụng các cổng này là số lư¬ợng cổng hạn chế, hầu hết các PC đều có hai cổng nối tiếp và một cổng song song. Có thể tăng số l¬ượng cổng nối tiếp và song song lên nh¬ưng sẽ phải hy sinh IRQ.

Trong những năm gần đây, công nghệ I/O là một lĩnh vực có nhiều đột phá, trong đó có USB. Chính USB đã nâng khái niệm Plưug-and-Play lên một tầm cao mới và giúp đơn giản hoá việc kết nối dữ liệu giữa máy tính với nhiều thiết bị ngoại vi. USB là cổng truyền thông nối tiếp sử dụng dạng đầu nối nhỏ, phù hợp với tất cả thiết bị I/O thông th¬ường nhằm giảm bớt số lư¬ợng cổng và đầu nối. Người ta có thể kết nối tới 127 thiết bị với máy tính thông qua USB theo kiểu nối tiếp hoặc dùng hub. Trung bình mỗi hub cho phép gắn 7 thiết bị và cũng có thể mắc nối tiếp các hub USB để tăng số lượng thiết bị kết nối với máy tính.

Về mặt tốc độ, USB v¬ợt qua giới hạn tốc độ của chip UART là cốt lõi của giao tiếp tuần tự. USB 1.1 đạt tốc độ 12Mpbs - quá đủ so với yêu cầu của thiết bị ngoại vi, và ngày nay với USB 2.0 băng thông có thể lên đến 480 Mbps, quá tuyệt vời đối với việc truyền thông tin tốc độ cao.

Đối với việc kết nối, USB thực sự thân thiện với người sử dụng nhờ công nghệ Plug and Play (Cắm và chạy), do vậy cực kỳ thuận tiện trong ứng dụng, tháo lắp cũng nh¬ định dạng thiết bị của hệ thống. Với tính năng này, USB không yêu cầu cao về card mở rộng cũng nh¬ư cấu hình của hệ thống, thay vào đó, bus cho phép thiết bị ngoại vi tự cấu hình khi gắn và định trạng thái nối hoặc tách trong máy tính, thiết bị đang hoạt động. Đặc biệt là không cần phải cài đặt trình điều khiển nh¬ ở cổng song song và nối tiếp, và tất nhiên là loại bỏ bớt đi việc chọn lựa IRQ, DMA, địa chỉ I/O. Sở dĩ USB làm được điều này là nhờ biết chuyển việc quản lý kết nối thiết bị cho bộ điều khiển chủ (thường tích hợp trên bo mạch chủ hoặc card bổ sung). Bộ điều khiển chủ phối hợp cùng các bộ điều khiển con trong hub thực hiện nhiệm vụ quản lý thiết bị nên giảm tải cho bộ xử lý và nâng hiệu năng chung của hệ thống. Đến l¬ợt mình phần mềm hệ thống USB cài trong hệ điều hành lại quản lý bộ điều khiển chủ. Dữ liệu được truyền trên một "con đường" hai chiều d¬ới sự "chỉ dẫn" của bộ điều khiển hub. Một số phiên bản quản lý bus có khả năng dành một phần băng thông cho thiết bị được chỉ định để truyền dữ liệu đẳng thời (isochronous). Ngoài ra trong tuyến bus USB có đường cấp điện 5V; 0,5A nên một số loa hoặc máy quét cầm tay không cần nguồn riêng. Hệ thống tự động nhận biết sự hiện diện của thiết bị và cấp nguồn. Với sự phát triển tốt và đang dần hoàn thiện nh¬ư vậy thì cổng USB trong tương lai hoàn toàn có thể thay thế toàn bộ nhiệm vụ của cổng song song và cổng nối tiếp, và một "cổng kết nối chung" nh¬ư vậy là hoàn toàn hợp lý, nó tránh cho người sử dụng phiền toái trong việc kết nối và ứng dụng các tính năng của thiết bị ngoại vi.

Thực chất, cấu trúc, cơ chế điều khiển và giao thức USB rất phức tạp. Việc tìm hiểu chi tiết được giới thiệu trong nhiều tài liệu tham khảo. Trong mục này, ta chỉ giới thiệu những nét khái lược về USB.

8.3.1 Các thành phần của USB

Chủ USB:

Thành phần đầu tiên và quan trọng nhất trong cấu trúc USB là chủ USB - tức là máy vi tính. Đây là máy vi tính cá nhân với hệ điều hành có khả năng quản lý USB. Vi mạch PCI - Chipset đảm nhiệm về phần cứng điều khiển mạng USB. Giao diện USB bao gồm 2 modul: Động cơ giao diện tuần tự SIE (Serial Interface Engine) chịu trách nhiệm về giao thức bus và bộ hub gốc (Root hub) chịu trách nhiệm mở rộng các cổng USB. Cấu trúc phần mềm điều khiển USB được chia thành các phần nh¬ư sau:

- Phần điều khiển chủ để kết nối phần cứng USB với phần còn lại của cấu trúc phần mềm.

- Phần mềm hệ thống USB có tác dụng nh¬ một lớp (layer) giữa phần điều khiển chủ và phần mềm điều khiển chủ.

- Phần mềm khách cho phép trao đổi với thiết bị ngoại vi USB.

Một mạng USB chỉ được phép có một chủ USB. Máy tính sử dụng phần cứng và phần mềm USB làm việc nh¬ một chủ bus. Máy tính nhận biết việc cắm thêm hay rút ra một thiết bị ngoại vi để khởi động quá trình đánh số (enumeration) các quá trình truyền dữ liệu khác trong bus. Máy tính cũng có trách nhiệm kiểm tra trạng thái, thống kê hoạt động và kiểm tra ghép nối điện trở giữa bộ điều khiển chủ và các thiết bị USB ngoại vi.

Cáp USB:

Cáp USB bao gồm 4 dây: hai dây (D+, D-) được sử dụng để truyền dữ liệu theo phương pháp vi sai. Hai dây còn lại là dây nguồn (Vbus = 5V) và dây tiếp đất (GND). Nguồn cho thiết bị USB có thể lấy từ thiết bị chủ (Host) (VD: máy tính) , từ Hub hoặc thiết bị có thể "tự cấp nguồn". Cáp rẻ tiền và không có vỏ chắn bảo vệ thường được dùng cho thiết bị chậm (1,5Mpbs). Thiết bị nhanh (12Mpbs) đòi hỏi cáp được chắn bảo vệ. Cấu trúc cáp USB có thể được biểu diễn nh¬ sau:

Ổ và phích cắm USB có 4 chân và chia làm hai loại có cấu tạo cơ học khác nhau. Loại A dùng cho máy tính PC hoặc hub có dạng hình chữ nhật, còn ổ và phích cắm cho các thiết bị có dạng hình vuông và có tên gọi là kiểu B. Hai kiểu này dĩ nhiên không lắp lẫn cho nhau được. ở phía các thiết bị ngoại vi, các đầu D+ và D- được bảo vệ bởi điện trở cuối. Thiết bị tốc độ nhanh cần có điện trở nối đất cho đầu D+, thiết bị chậm cần điện trở nối nguồn cho đầu D-. Những điện trở này tạo ra các mức điện thế khác nhau giữa D+ và D-, giúp cho máy chủ phát hiện được việc cắm hay rút một thiết bị ra khỏi mạng USB.

Thiết bị USB:

Các thiết bị USB có chức năng tớ trong mạng bus. Có hai dạng thiết bị USB nh¬ sau:

- Hub thường có một bộ điều khiển hub và một bộ lặp (repeater). Một hub có nhiệm vụ chuyển một ổ cắm USB thành nhiều ổ cắm. Ví dụ một hub có thể có một ổ cắm hướng về máy chủ (ngược) và 4 ổ cắm ra thiết bị (xuôi) dùng để cắm hub với các thiết bị chức năng.

- Thiết bị chức năng là các thiết bị ngoại vi của máy tính nh¬ư chuột, bàn phím, joystick, camera, ... Để đơn giản hoá việc ghép nối, màn hình và bàn phím còn được cấy thêm một hub để có thể nối tiếp đến các thiết bị khác. Mọi thiết bị USB đều phải tuân thủ theo quy ¬ước USB để máy chủ có thể phát hiện được chúng.

Nhìn chung thì mọi thiết bị USB đều được thiết kế từ ba thành phần chính:

- Một động cơ giao diện tuần tự SIE (Serial Interface Engine) là một vi mạch tích hợp silic. Thành phần này chịu trách nhiệm nhận và gửi dữ liệu theo giao thức USB.

- Một tổ hợp giữa phần cứng và firmware chịu trách nhiệm truyền dữ liệu giữa SIE và điểm cuối của thiết bị qua những giao diện (hay còn gọi là ống - pipe) thích hợp của chúng.

- Thành phần thứ ba là phần chức năng của thiết bị ngoại vi (chức năng bàn phím, chức năng chuột, ...).

Điểm cuối là đầu nguồn hay đầu phát của một thiết bị ngoại vi USB. Chúng là những thanh ghi dữ liệu có thể được đọc hay ghi tuỳ theo chiều truyền dữ liệu. Đường ống (pipe) là phần mềm quản lý điểm cuối của thiết bị USB chủ (máy tính). Có thể hiểu chúng là những kênh phần mềm, được gọi lên trong phần mềm điều hành USB và có nhiệm vụ truyền tin đến những điểm cuối của thiết bị ngoại vi. Mọi thiết bị trong mạng USB sẽ cùng chia dải tần qua một giao thức khung truy nhập máy chủ (hostisceduled token - based protocol). Khi máy chủ đ¬a một khung truy nhập (token) vào mạng USB, thiết bị tương ứng sẽ phát hiện ra địa chỉ của nó gài trong khung và trả lời lại máy chủ.

8.3.2 Các loại truyền dữ liệu của USB

Thông tin có thể đi theo hai chiều hay một chiều. Máy chủ xử lý việc trao đổi dữ liệu với từng thiết bị ngoại vi một cách độc lập. USB quản lý bốn loại truyền dữ liệu: điều khiển , ngắt, đồng bộ cách biệt (isochronous) và khối.

Truyền điều khiển (Control transfer) là phương pháp có thể truyền hai chiều, nhưng chỉ truyền được một chiều trong một thời điểm. Loại truyền này được sử dụng để nghiên cứu cài đặt hay định dạng thiết bị ngoại vi. Giao thức truyền điều khiển bao gồm một giai đoạn "Thiết lập", giai đoạn "Dữ liệu" và giai đoạn "Trạng thái". Mọi thiết bị ngoại vi USB đều phải xử lý được loại truyền này. Ngoài ra phương pháp truyền này có thể dùng để truyền dữ liệu với một lượng dữ liệu nhỏ.

Truyền ngắt (Interrupt transfer) là truyền một chiều. Loại truyền này được dùng cho các thiết bị ngoại vi nh¬ bàn phím, chuột và joystick. Vì chủ USB (máy tính) không thể bị ngắt từ thiết bị ngoại vi được xử lý trong vòng đợi, người lập trình hệ thống có nhiệm vụ xử lý vòng đợi này. Giao thức truyền ngắt khởi động khi máy chủ bắt đầu bằng một khung IN (IN token). Thiết bị ngoại vi trả lời bằng một gói dữ liệu. Khi nhận hết dữ liệu máy chủ sẽ trả lời bằng một gói ACK nếu dữ liệu không có lỗi hoặc không trả lời gì nếu có lỗi. Nếu bị nghẽn ở điểm cuối của thiết bị ngoại vi, nó sẽ gửi đến máy chủ gói STALL và đợi phần mềm hệ thống xử lý.

Truyền đồng bộ cách biệt (Isochronous transfer) là phương pháp truyền một chiều. Hướng của cuộc truyền có thể từ thiết bị ngoại vi ra máy chủ hoặc ngược lại. Vì thế cuộc truyền cần hai điểm cuối ở thiết bị ngoại vi hoặc hai đường ống phần mềm ở phía máy chủ. Giao thức truyền đồng bộ cách biệt bắt đầu bằng một gói IN hoặc OUT từ máy chủ tuỳ theo hướng truyền và loại điểm cuối. Ví dụ, trong trường hợp gói OUT, máy chủ tiếp tục bằng cách truyền dữ liệu. Truyền đồng bộ cách biệt không dùng gói bắt tay để thông báo kết quả truyền. Vì thế thông tin có thể bị thất lạc. Phương pháp truyền đồng bộ cách biệt chấp nhận hi sinh độ chính xác của dữ liệu để đảm bảo thời gian phân phối dữ liệu. Loại truyền này thường được sử dụng cho điện thoại, loa để bảo đảm thu được âm thanh.

Truyền khối là phương pháp truyền hai chiều. Hướng truyền có thể từ điểm cuối về máy chủ hay ngược lại. Nh¬ vậy, một thiết bị ngoại vi cần cả hai chiều dữ liệu sẽ cần có hai điểm cuối. Giao thức truyền khối gồm ba giai đoạn: khung, dữ liệu và bắt tay. Nếu thiết bị kẹt sẽ không có giai đoạn dữ liệu mà chỉ có khung và bắt tay. Dữ liệu sẽ được truyền qua ống từ một vùng đệm dữ liệu trong bộ nhớ của chương trình tương ứng tới một điểm cuối của thiết bị ngoại vi. Phương pháp truyền khối được sử dụng khi đòi hỏi sự chính xác của dữ liệu mà tốc độ của việc truyền dữ liệu không yêu cầu quan trọng lắm.

Phương pháp truyền khối và truyền đồng bộ cách biệt bổ xung cho nhau trong phương thức truyền USB và đây là hai phương pháp thường được sử dụng để truyền các dữ liệu lớn của USB.

8.3.3 Hoạt động của USB

Sau đây là phương thức của dòng dữ liệu thông dụng tới thiết bị khi mà nó cắm vào bus của Chủ USB. Nên nhớ rằng ở đây Chủ USB là Hub USB bên trong và các Hub bên ngoài có thể được nối thuận chiều từ Hub của Chủ USB:

1. Chủ USB nhận ra thiết bị được nối vào một trong các Hub USB của nó. Nó nhận thấy điều này nhờ một bộ phân áp đơn giản được nối tới đôi dây dữ liệu vi sai trên Bus USB. Các điện trở này ở bên trong hub USB và thiết bị.

2. Chủ USB gửi yêu cầu Get_Port_Status tới Hub để tìm hiểu thêm về thiết bị được lắp vào. Nó có thể là một Hub khác hoặc một thiết bị được kết nối trực tiếp tới Hub gốc của Chủ USB, hoặc một thiết bị được nối vào Hub thuận chiều.

3. Sau khi nhận được trả lời từ Hub thì Chủ USB định lệnh Set_Port_Feature lên Hub mà phát ra lệnh Reset trên đôi dây dữ liệu nhưng chỉ với thiết bị mới được kết nối với bus USB.

4. Chủ USB sau đó kiểm tra để biết được nếu thiết bị đã hết trạng thái Reset nhờ phát lệnh Get_Port_Status tới Hub. Sau khi Reset, thiết bị được ở trạng thái Defaut (mặc định) và chỉ chấp nhận dòng lớn nhất là 100mA. Trong chế độ Defaut thiết bị có thể truyền thông với Chủ USB thông qua điểm cuối 0

5. Hub bây giờ sẽ dò tốc độ của thiết bị bằng cách sử dụng bộ phân áp được nối tới Bus USB. Hub gửi tốc độ của thiết bị trở lại Chủ USB.

6. Chủ USB gửi lệnh Get_Descriptor tới Hub mà ở Hub đó lấy kích th¬ước gói của thiết bị thông dụng và gửi kết quả lại tới Chủ USB

7. Chủ USB bây giờ gửi lệnh Set_Address tới Hub đã gửi thông tin này tới thiết bị. Thiết bị báo cho biết bằng lệnh gửi trả lại tới Chủ USB và định địa chỉ bên trong.

8. Để biết thêm về thiết bị này, Chủ USB gửi 1 lệnh Get_Descriptor tới địa chỉ mà thiết bị mới nhận. Thông tin trở lại Chủ USB chứa nhiều đặc điểm khác nhau của thiết bị mà Chủ USB cần biết cho hoạt động của nó. Các câu hỏi của Chủ USB tiếp tục thêm 2 lần nữa để tìm tất cả các thông tin cần thiết.

9. Trên cơ sở các thông tin nhận được từ thiết bị, Chủ USB xác định driver tối ¬u của thiết bị để sử dụng cho truyền thông với nó.

10. Driver của thiết bị trong Chủ USB bây giờ tiếp nhận bằng lệnh đề nghị Set_Configuration. Có thể có một vài cấu hình cho một thiết bị, và driver của thiết bị xác định cái nào sử dụng cơ sở của thông tin nhận được từ thiết bị trong phúc đáp lệnh Get_Descriptor.

11. Thiết bị bây giờ đã sẵn sàng để sử dụng.

Ta có thể thấy rằng, giao thức USB là một tổ hợp sắp xếp rõ ràng. Mẫu câu hỏi và phúc đáp chính xác, chặt chẽ, tuy nhiên, quan trọng hơn cả là nó làm giảm bớt xung khắc trên bus. Khi có thiết bị gắn vào USB, thông qua các lệnh cụ thể nh¬ trên, USB sẽ đánh số cho thiết bị một cách chính xác và trên cơ sở đó quản lý thiết bị trong hoạt động của mình.

Bài 9: CÁC THIẾT BỊ NGOẠI VI

Bộ xử lý của máy tính điện tử liên hệ với môi trường bên ngoài nhờ các thiết bị ngoại vi. Các thiết bị ngoại vi được chia ra hai loại:

Thiết bị vào (Input Device): Là các thiết bị có chức năng thu nhận các thông tin từ môi trường bên ngoài rồi mã hoá chúng sang dạng số và chuyển vào cho máy tính để lưu trữ hoặc xử lý. Một số thiết bị vào như: bàn phím, chuột, Camara, Scanner, ...

Thiết bị ra (Output Device): Là các thiết bị có chức năng chuyển các thông tin ở dạng số trong máy tính ra bên ngoài theo các dạng phù hợp với các mục đích khác nhau. Một số thiết bị ra thông dụng như : màn hình, máy in, loa, ...

Thiết bị nhớ ngoài như đĩa mềm, đĩa cứng, đĩa mềm, đĩa CD, thẻ nhớ, ... là các thiết bị vừa có chức năng của thiết bị vào vừa có chức năng của thiết bị ra. Theo một nghĩa nào đó, có thế xem các thiết bị này như là các thiết bị ngoại vi.

9.1 Đĩa mềm và ổ đĩa mềm

9.1.1 Đĩa mềm

Đĩa mềm gồm một đĩa từ bằng nhựa dẻo được bảo vệ bằng một bao giấy hay nhựa cứng. Trên bao có khoét một lỗ dài cho phép đầu đọc của ổ đĩa có thể tiếp xúc với mặt đĩa để đọc / ghi dữ liệu. Có 2 loại đĩa mềm: đường kính 5.25 inch (hầu như không còn sử dụng) và đường kính 3.5 inch (chỉ dùng dung lượng 1.44 MB). Mỗi đĩa mềm được tổ chức thành các đơn vị sau:

- Track (rãnh từ): là vùng đường tròn đồng tâm lưu trữ dữ liệu. Mật độ ghi dữ liệu tính bằng đơn vị track/inch. Track được đánh số bắt đầu từ 0 kể từ vòng ngoài vào.

- Sector (cung từ): mỗt track sẽ được chia thành nhiều sector, mỗi sector chứa 512 bytedữ liệu. Số sector/track tùy thuộc vào từng loại đĩa (từ 8 ÷ 36). Sector được đánh số từ 1.

- Cluster (liên cung): là một nhóm gồm 2, 4 hay 8 sector.

Dung lượng đĩa mềm = số track × số sector/track × số mặt × 512 byte

Hình 9.1: Đĩa mềm 3.5 inch

Bảng mô tả thông tin của một số loại đĩa mềm

Chương trình định dạng đĩa mềm (format) cho phép tạo ra các track và sector trên đĩa. Ngoài 512 byte dữ liệu, các track và sector còn chứa các byte lưu trữ thông tin dùng cho mục đích định vị và đồng bộ.

9.1.2 Ổ đĩa mềm

Ổ đĩa mềm cho phép CPU đọc / ghi dữ liệu lên đĩa mềm. Khi đó, đĩa được quay bằng một động cơ điều khiển với tốc độ 300 vòng/phút đối với đĩa 300 KB hay 360 vòng/phút đối với các loại đĩa khác. Đĩa mềm có hai mặt thì phải cần hai đầu từ đọc / ghi dữ liệu. Đầu từ được gắn ở đầu cần truy xuất (arm access). Chuyển động quay của một động cơ bước sẽ biến thành chuyển động tịnh tiến theo phương bán kính của cần truy xuất qua cơ cấu bánh răng. Đầu từ có một cuộn dây cảm ứng. Khi đọc, sự biến thiên từ thông của phần tử lưu trữ tạo thành điện thế cảm ứng ở hai đầu ra cuộn dây tạo nên tín hiệu dữ liệu. Khi ghi, cuộn dây sẽ phát ra từ trường qua khe từ để từ hóa bột oxide sắt trên mặt đĩa thành các trạng thái tương ứng với mức dữ liệu 0 và 1.

Mạch điều khiển ổ đĩa mềm:

Mạch điều khiển ổ đĩa mềm thường được cắm trên một khe cắm mở rộng. Bộ điều khiển có một vi xử lý riêng với chương trình trong ROM của nó, thông thường là NEC µPD765 hay Intel 8207A. Việc ghi dữ liệu được thực hiện qua các bước sau:

- Dữ liệu truyền từ bus vào bộ giao tiếp bus.

- Bộ điều khiển xác định byte CRC (Cycle Redundancy Check), đổi dữ liệu song song thành nối tiếp và định dạng thích hợp

- Bộ tách dữ liệu đổi chuỗi dữ liệu thành chuỗi mã FM hay MFM (Modified FM) và phát ra các xung đánh dấu.

- Mạch giao tiếp SA-450 truyền chuỗi dữ liệu đã mã hóa tới ổ đĩa.

- Đầu từ ghi số liệu đã mã hóa lên đĩa.

9.2 Đĩa cứng

Dù rằng công nghệ mới không ngừng phát minh nhiều loại bộ phận lưu trữ một lượng thông tin lớn nhưng đĩa từ vẫn giữ vị trí quan trọng từ năm 1965. Đĩa từ có hai nhiệm vụ trong máy tính.

- Lưu trữ dài hạn các tập tin.

- Thiết lập một cấp bộ nhớ bên dưới bộ nhớ trong để làm bộ nhớ ảo lúc chạy chương trình.

Dưới đây mô tả một cách khái quát cấu tạo, cách vận hành cũng như đề cập đến các tính chất quan trọng của đĩa cứng.

Một đĩa cứng chứa nhiều lớp đĩa (từ 1 đến 4) quay quanh một trục khoảng 3.600-15.000 vòng mỗi phút. Các lớp đĩa này được làm bằng kim loại với hai mặt được phủ một chất từ tính (hình V.1). Đường kính của đĩa thay đổi từ 1,3 inch đến 8 inch. Mỗi mặt của một lớp đĩa được chia thành nhiều đường tròn đồng trục gọi là rãnh. Thông thường mỗi mặt của một lớp đĩa có từ 10.000 đến gần 30.000 rãnh. Mỗi rãnh được chia thành nhiều cung (sector) dùng chứa thông tin. Một rãnh có thể chứa từ 64 đến 800 cung. Cung là đơn vị nhỏ nhất mà máy tính có thể đọc hoặc viết (thông thường khoảng 512 bytes). Chuỗi thông tin ghi trên mỗi cung gồm có: số thứ tự của cung, một khoảng trống, số liệu của cung đó bao gồm cả các mã sửa lỗi, một khoảng trống, số thứ tự của cung tiếp theo.

Với kỹ thuật ghi mật độ không đều, tất cả các rãnh đều có cùng một số cung, điều này làm cho các cung dài hơn ở các rãnh xa trục quay có mật độ ghi thông tin thấp hơn mật độ ghi trên các cung nằm gần trục quay.

Hình 9.2: Cấu tạo của đĩa cứng

Với công nghệ ghi với mật độ đều, người ta cho ghi nhiều thông tin hơn ở các rãnh xa trục quay. Công nghệ ghi này ngày càng được dùng nhiều với sự ra đời của các chuẩn giao diện thông minh như chuẩn SCSI.

Hình 9.3: Mật độ ghi dữ liệu trên các loại đĩa cứng

Để đọc hoặc ghi thông tin vào một cung, ta dùng một đầu đọc ghi di động áp vào mỗi mặt của mỗi lớp đĩa. Các đầu đọc/ghi này được gắn chặt vào một thanh làm cho chúng cùng di chuyển trên một đường bán kính của mỗi lớp đĩa và như thế tất cả các đầu này đều ở trên những rãnh có cùng bán kính của các lớp đĩa. Từ "trụ" (cylinder) được dùng để gọi tất cả các rãnh của các lớp đĩa có cùng bán kính và nằm trên một hình trụ. Người ta luôn muốn đọc nhanh đĩa từ nên thông thường ổ đĩa đọc nhiều hơn số dữ liệu cần đọc. Để quản lý các phức tạp khi kết nối (hoặc ngưng kết nối) lúc đọc (hoặc ghi) thông tin, và việc đọc trước, ổ đĩa cần có bộ điều khiển đĩa.

Công nghiệp chế tạo đĩa từ tập trung vào việc nâng cao dung lượng của đĩa mà đơn vị đo lường là mật độ trên một đơn vị bề mặt.

Đặc trưng Mô tả

Dung lượng tối đa Có thể đạt 500 GB

Số lượng đầu đọc 1-8

Số đĩa 1-4

Cache 2-16(MB)

Sector 512 Byte

Tốc độ quay của đĩa 3600-15000

Mật độ Có thể đạt 95Gb/inch2

Mật độ ghi Có thể đạt 702000 bit/Inch

Tốc độ dữ liệu tối đa Có thể đạt 900 Mb/1s

Tốc độ truyền dữ liệu với ngoại vi Có thể đạt 320 Mb/1s

Thời gian chuyển track (R/W) Có thể đạt 15ms

Thời gian quay nửa vòng Có thể đạt 6ms

Bảng thông số kỹ thuật của đĩa cứng

9.3 Đĩa quang

Ngày nay, đĩa quang đã được sử dụng phổ biến, chúng có mật độ ghi thông tin cao hơn đĩa từ thông thường. Các đĩa quang dựa trên cùng một cộng nghệ được sử dụng trong Compact Disc để ghi âm nên được gọi tên là CD ROM. Các thiết bị lưu trữ quang rất thích hợp cho việc phát hành các sản phẩm văn hoá, sao lưu dữ liệu trên các hệ thống máy tính hiện nay. Ra đời vào năm 1978, đây là sản phẩm của sự hợp tác nghiên cứu giữa hai công ty Sony và Philips trong công nghiệp giải trí. Từ năm 1980 đến nay, công nghiệp đĩa quang phát triển mạnh trong cả hai lĩnh vực giải trí và lưu trữ dữ liệu máy tính. Quá trình đọc thông tin dựa trên sự phản chiếu của các tia laser năng lượng thấp từ lớp lưu trữ dữ liệu. Bộ phận tiếp nhận ánh sáng sẽ nhận biết được những điểm mà tại đó tia laser bị phản xạ mạnh hay biến mất do các vết khắc (pit) trên bề mặt đĩa. Các tia phản xạ mạnh chỉ ra rằng tại điểm đó không có lỗ khắc và điểm này được gọi là điểm nền (land). Bộ nhận ánh sáng trong ổ đĩa thu nhận các tia phản xạ và khuếch tán được khúc xạ từ bề mặt đĩa. Khi các nguồn sáng được thu nhận, bộ vi xử lý sẽ dịch các mẫu sáng thành các bit dữ liệu hay âm thanh. Các lỗ trên CD sâu 0,12 micron và rộng 0,6 micron (1 micron bằng một phần ngàn mm). Các lỗ này được khắc theo một track hình xoắn ốc với khoảng cách 1,6 micron giữa các vòng, khoảng 16.000 track/inch. Các lỗ (pit) và nền (land) kéo dài khoản 0,9 đến 3,3 micron. Track bắt đầu từ phía trong và kết thúc ở phía ngoài theo một đường khép kín các rìa đĩa 5mm. Dữ liệu lưu trên CD thành từng khối, mỗi khối chứa 2.352 byte. Trong đó, 304 byte chứa các thông tin về bit đồng bộ, bit nhận dạng (ID), mã sửa lỗi (ECC), mã phát hiện lỗi (EDC). Còn lại 2.048 byte chứa dữ liệu. Tốc độ đọc chuẩn của CD-ROM là 75 khối/s hay 153.600 byte/s hay 150KB/s (1X). Dưới đây là một số loại đĩa quang thông dụng.

CD (Compact Disk): Đĩa quang không thể xoá được, dùng trong công nghiệp giải trí (các đĩa âm thanh được số hoá). Chuẩn đĩa có đường kính 12 cm, âm thanh phát từ đĩa khoảng 60 phút (không dừng).

CD-ROM (Compact Disk Read Only Memory): Đĩa không xoá dùng để chứa các dữ liệu máy tính. Chuẩn đĩa có đường kính 12 cm, lưu trữ dữ liệu hơn 650 MB. Khi phát hành, đĩa CD-ROM đã có chứa nội dung. Thông thường, dĩa CD-ROM được dùng để chứa các phần mềm và các chương trình điều khiển thiết bị.

CD-R (CD-Recordable): Giống như đĩa CD, đĩa mới chưa có thông tin, người dùng có thể ghi dữ liệu lên đĩa một lần và đọc được nhiều lần. Dữ liệu trên đĩa CD-R không thể bị xoá.

CD-RW (CD-Rewritable): Giống như đĩa CD, đĩa mới chưa có thông tin, người dùng có thể ghi dữ liệu lên đĩa, xoá và ghi lại dữ liệu trên đĩa nhiều lần.

DVD (Digital Video Disk - Digital Versatile Disk): Ra đời phục vụ cho công nghiệp giải trí, đĩa chứa các hình ảnh video được số hoá. Ngày nay, DVD được sử dụng rộng rãi trong các ứng dụng công nghệ thông tin. Kích thước đĩa có hai loại: 8cm và 12 cm. Đĩa DVD có thể chứa dữ liệu trên cả hai mặt đĩa, dung lượng tối đa lên đến 17GB. Các thông số kỹ thuật của đĩa DVD-ROM (loại đĩa chỉ đọc) so với CD-ROM. Tốc độ đọc chuẩn (1X) của DVD là 1.3MB/s (1X của DVD tương đương khoảng 9X của CDROM).

DVD-R (DVD-Recordable): Giống như đĩa DVD-ROM, người dùng có thể ghi dữ liệu lên đĩa một lần và đọc được nhiều lần. Đĩa này chỉ có thể ghi được trên một mặt đĩa, dung lượng ghi trên mỗi mặt tối đa là 4.7 GB.

DVD-RW (DVD-Rewritable): Giống như đĩa DVD-ROM, người dùng có thể ghi, xoá và ghi lại dữ liệu lên đĩa nhiều lần.. Đĩa này cũng có thể ghi được trên một mặt đĩa, dung lượng ghi trên mỗi mặt tối đa là 4.7 GB.

Đặc trưng CD ROM DVD ROM

Kích thước pit 0.834 micron 0.4 micron

Khảng cách rãnh 1.6 micron 0.74 micron

Số lớp dữ liệu trên đĩa 1 lớp 2 lớp

Số mặt đĩa 1 mặt 1-2 mặt

Dung lượng 640-700MB 1.36 - 17GB

Độ phân giải 320x200 720x640

So sánh một số thông tin hai loại đĩa CDROM và DVDROM

9.4 Bàn phím

9.4.1 Cấu trúc và chức năng

Chip xử lý bàn phím liên tục kiểm tra trạng thái của ma trận quét (scan matrix) để xác định công tắc tại các tọa độ X,Y đang được đóng hay mở và ghi một mã tương ứng vào bộ đệm bên trong bàn phím. Sau đó mã này sẽ được truyền nối tiếp tới mạch ghép nối bàn phím trong PC. Cấu trúc của SDU cho việc truyền số liệu này và các chân cắm của đầu nối bàn phím.

STRT: bit start (luôn bằng 0)

DB0 - DB7: bit số liệu từ 0 đến 7.

PAR: bit parity (luôn lẻ)

STOP: bit stop (luôn bằng 1).

Hình 5.4: Sơ đồ nguyên lý và các ghép nối của bàn phím

Tín hiệu xung nhịp dùng cho việc trao đổi dữ liệu thông tin nối tiếp đồng bộ với mạch ghép nối bàn phím (keyboard interface) trên main board được truyền qua chân số 1. Một bộ điều khiển bàn phím đã được lắp đặt trên cơ sở các chíp 8042, hoặc 8742,8741. Nó có thể được chương trình hóa (thí dụ khóa bàn phím) hơn nữa số liệu có thể truyền theo 2 hướng từ bàn phím và mạch ghép nối, do vậy vi mã của chíp bàn phím có thể giúp cho việc nhận lệnh điều khiển từ PC, thí dụ như đặt tốc độ lặp lại của nhấn bàn phím,....

Hình 5.5: Đầu cắm bàn phím PS/2

9.4.2 Mã quét bàn phím

Mỗi phím nhấn sẽ được gán cho 1 mã quét (scan code) gồm 1 byte. Nếu 1 phím được nhấn thì bàn phím phát ra 1 mã make code tương ứng với mã quét truyền tới mạch ghép nối bàn phím của PC. Ngắt cứng INT 09h được phát ra qua IRQ1. Chương trình xử lý ngắt sẽ xử lý mã này tuỳ theo phím SHIFT có được nhấn hay không. Ví dụ: nhấn phím SHIFT trước, không rời tay và sau đó nhấn 'C': make code được truyền - 42(SHIFT) - 46 ('C').

Nếu rời tay nhấn phím SHIFT thì bàn phím sẽ phát ra break code và mã này được truyền như make code. Mã này giống như mã quét nhưng bit 7 được đặt lên 1, do vậy nó tương đương với make code công với 128. Tuỳ theo break code, chương trình con xử lý ngắt sẽ xác định trạng thái nhấn hay rời của các phím. Thí dụ, phím SHIFT và 'C' được rời theo thứ tự ngược lại với thí dụ trên: break code được truyền 174 ( bằng 46 cộng 128 tương ứng với 'C') và 170 (bằng 42 cộng 128 tương ứng với SHIFT). Phần cứng và phần mềm xử lý bàn phím còn giải quyết các vấn đề vật lý sau:

- Nhấn và nhả phím nhưng không được phát hiện.

- Khử nhiễu rung cơ khí và phân biệt 1 phím được nhấn nhiều lần hay được nhấn chỉ 1 lần nhưng được giữ trong một khoảng thời gian dài.

9.5 Chuột

9.5.1 Cấu tạo

Cấu tạo của chuột rất đơn giản, phần trung tâm là 1 viên bi thép được phủ keo hoặc nhựa được quay khi dịch chuyển chuột. Chuyển động này được truyền tới 2 thanh nhỏ được đặt vuông góc với nhau. Các thanh này sẽ biến chuyển động của chuột theo 2 hướng X,Y thành sự quay tưong ứng của 2 đĩa gắn với chúng. Trên 2 đĩa có những lỗ nhỏ liên tục đóng và ngắt 2 chùm sáng tới các sensor nhạy sáng để tạo ra các xung điện. Số các xung điện tỷ lệ với lượng chuyển động của chuột theo các hướng X,Y và số xung trên 1 sec biểu hiện tốc độ của chuyển động chuột. Kèm theo đó có 2 hay 3 phím bấm.

Hình 5.6: Sơ đồ cấu tạo chuột

9.5.2 Mạch ghép nối và chương trình điều khiển chuột

Hầu hết chuột được nối với PC qua cổng nối tiếp, qua đó chuột cũng được cấp nguồn nuôi từ PC. Khi dịch chuyển hoặc nhấn, nhả các phím chuột, nó sẽ phát ra một gói các số liệu tới mạch giao tiếp và mạch sẽ phát ra 1 ngắt. Phần mềm điều khiển chuột làm các nhiệm vụ: chuyển ngắt tới mạch giao tiếp nối tiếp xác định, đọc gói số liệu và cập nhật các giá trị bên trong liên quan tới trạng thái của bàn phím cũng như vị trí của chuột. Hơn nữa, nó còn cung cấp 1 giao tiếp mềm qua ngắt của chuột là 33h để định các giá trị bên trong này cũng như làm dịch chuyển con trỏ chuột trên màn hình tương ứng với vị trí của chuột. Có thể chọn kiểu con trỏ chuột cứng hoặc mềm trong chế độ văn bản hay con trỏ chuột đồ hoạ trong chế độ đồ họa. Các hàm 09h và 0Ah trong ngắt 33h cho phép định nghĩa loại và dạng con trỏ chuột.

Bạn đang đọc truyện trên: Truyen2U.Pro

#jelylee