TRƢỜNG ĐẠI HỌC PHẠM VĂN ĐỒNG KHOA KỸ THUẬT – CÔNG NGHỆ
BÀI GIẢNG CẤU TRÚC MÁY TÍNH VÀ GIAO DIỆN Bậc học: Cao đẳng
Giảng viên: Nguyễn Phạm Hoàng Dũng Bộ môn: Điện – Điện tử Khoa: Kỹ thuật – Công nghệ Quảng Ngãi, tháng 12/2015
TRƢỜNG ĐẠI HỌC PHẠM VĂN ĐỒNG KHOA KỸ THUẬT – CÔNG NGHỆ
BÀI GIẢNG CẤU TRÚC MÁY TÍNH VÀ GIAO DIỆN Bậc học: Cao đẳng
(Số tiết: 30)
Giảng viên: Nguyễn Phạm Hoàng Dũng Bộ môn: Điện – Điện tử Khoa: Kỹ thuật – Công nghệ Quảng Ngãi, tháng 12/2015
MỤC LỤC
LỜI NÓI ĐẦU ........................................................................................................... 1
DANH SÁCH CÁC TỪ VIẾT TẮT ........................................................................ 2
Chƣơng 1 . GIỚI THIỆU HỆ THỐNG SỐ ............................................................ 3
1.1. Các hệ đếm ....................................................................................................... 3
1.1.1. Hệ thập phân (decimal) ............................................................................. 3
1.1.2. Hệ nhị phân (binary) ................................................................................. 3
1.1.3. Hệ thập lục phân (hexadecimal) ................................................................ 5
1.2. Các phép toán ................................................................................................... 7
1.2.1. Các phép toán logic ................................................................................... 7
1.2.2. Các phép toán số học ................................................................................ 8
1.3. Biểu diễn số .................................................................................................... 11
1.4. Biểu diễn ký tự ............................................................................................... 14
Chƣơng 2 . GIỚI THIỆU CÁC HỆ MÁY TÍNH ................................................. 17
2.1. Các thế hệ máy tính ........................................................................................ 17
2.1.1. Thế hệ zero .............................................................................................. 17
2.1.2. Thế hệ đầu tiên (1945 – 1953) ................................................................ 18
2.1.3. Thế hệ thứ hai (1954 – 1965) .................................................................. 19
2.1.4. Thế hệ thứ ba (1965 – 1980) ................................................................... 20
2.1.5. Thế hệ thứ tư (1980 đến nay) .................................................................. 20
2.2. Chức năng máy tính ....................................................................................... 21
2.3. Cấu trúc và tổ chức máy tính ......................................................................... 22
2.4. Phân loại ......................................................................................................... 23
2.4.1. Phân loại theo cấu trúc tập lệnh .............................................................. 23
2.4.2. Phân loại theo khả năng xử lý của máy tính ........................................... 25
2.5. Máy tính Von Neumann ................................................................................. 26
Chƣơng 3 . CẤU TRÚC TỔNG QUÁT ................................................................ 28
3.1. Thùng máy – nguồn ....................................................................................... 28
3.2. Mainboard ...................................................................................................... 30
3.3. CPU ................................................................................................................ 33
3.4. RAM ............................................................................................................... 36
3.5. BIOS VÀ CMOS RAM ................................................................................. 39
3.6. Interfaces ........................................................................................................ 40
3.7. Chipset ............................................................................................................ 43
3.8. Ổ đĩa cứng ...................................................................................................... 44
3.9. Ổ đĩa quang .................................................................................................... 48
3.10. Màn hình ...................................................................................................... 49
Chƣơng 4 . CẤU TRÚC BÊN TRONG MÁY TÍNH ........................................... 50
4.1. Vi xử lý ........................................................................................................... 50
4.1.1. Kiến trúc .................................................................................................. 50
4.1.2. Cấu trúc pipeline ..................................................................................... 51
4.1.3. Kỹ thuật superscalar ................................................................................ 54
4.1.4. Thanh ghi ................................................................................................ 54
4.1.5. Tập lệnh ................................................................................................... 56
4.2. Bộ nhớ ............................................................................................................ 58
4.2.1. Phân loại bộ nhớ ...................................................................................... 59
4.2.2. Cấu trúc cơ bản ....................................................................................... 62
4.3. Hệ thống kết nối (bus) .................................................................................... 63
4.3.1. Phân loại .................................................................................................. 63
4.3.2. Chức năng ............................................................................................... 65
4.4. Hệ thống cache ............................................................................................... 68
4.4.1. Giới thiệu ................................................................................................. 68
4.4.2. Chức năng ............................................................................................... 69
4.4.3. Cache nhiều tầng ..................................................................................... 70
4.4.4. Phân loại .................................................................................................. 71
Chƣơng 5 . HỆ THỐNG XUẤT NHẬP ................................................................ 73
5.1. Hệ thống ngắt ................................................................................................. 74
5.2. Truy cập trực tiếp bộ nhớ ............................................................................... 77
5.3. Thiết bị bên ngoài ........................................................................................... 80
5.4. Các ngoại vi .................................................................................................... 82
TÀI LIỆU THAM KHẢO ...................................................................................... 84
LỜI NÓI ĐẦU
Bài giảng “Cấu trúc máy tính và giao diện” được biên soạn dùng làm tài liệu
học tập cho sinh viên bậc cao đẳng chính qui ngành công nghệ kỹ thuật Điện – Điện
tử trường Đại học Phạm Văn Đồng. Bài giảng bao gồm 5 chương, cung cấp cho
sinh viên những kiến thức cơ bản về quá trình phát triển của máy vi tính, cấu trúc cơ
bản của một máy vi tính hiện đại, các chuẩn và thông số kỹ thuật của các thành
phần tạo nên một chiếc máy tính, một số kỹ thuật xử lý nhằm cải thiện tốc độ xử lý
của máy tính theo thời gian, một số chi tiết của hệ thống máy tính như: bộ xử lý
trung tâm, bộ nhớ, cache, … Bài giảng này cũng góp phần giúp sinh viên cập nhật
những công nghệ mới thông qua các ví dụ thực tế.
Nội dung chi tiết của bài giảng như sau:
- Chương 1: Giới thiệu hệ thống số
- Chương 2: Giới thiệu các hệ máy tính
- Chương 3: Cấu trúc tổng quát
- Chương 4: Cấu trúc bên trong máy tính
- Chương 5: Hệ thống xuất nhập
Trong quá trình biên soạn không thể tránh khỏi những thiếu sót, rất mong
nhận được sự góp ý của bạn đọc để bài giảng được hoàn thiện hơn. Mọi ý kiến đóng
góp xin gửi về địa chỉ: Bộ môn Điện – Điện tử, Khoa Kỹ thuật – Công nghệ,
Trường Đại học Phạm Văn Đồng.
Tác giả xin chân thành cảm ơn!
1
DANH SÁCH CÁC TỪ VIẾT TẮT
Ý nghĩa
Từ viết tắt CPU MSB LSB
for ASCII
Đơn vị xử lý trung tâm Bit có trọng số lớn nhất Bit có trọng số thấp nhất Chuẩn mã trao đổi thông tin Hoa Kỳ Tích hợp cỡ lớn Máy tính cá nhân VLSI PC
Instruction Set Máy tính có tập lệnh phức tạp CISC
Instruction Set Máy tính có tập lệnh đơn giản RISC Từ đầy đủ Central Processing Unit Most Significant Bit Least Significant Bit American Standard Code Information Interchange Very Large Scale Integration Personal Computer Complex Computing Reduced Computing
Random Access Memory RAM
SRAM DRAM
Bộ nhớ DRAM đồng bộ SDRAM
DDR ROM BIOS
Metal-Oxide- CMOS
Bộ nhớ truy cập dữ liệu ngẫu nhiên Static Random Access Memory Bộ nhớ RAM tĩnh Dynamic Random Access Memory Bộ nhớ RAM động Synchronous Dynamic Random Access Memory Double Data Rate Real-Only Memory Basic Input/Output System Complementary Semiconductor Hard Disk Drive Solid-State Drive Arithmetic Logic Unit HDD SSD ALU
Direct Memory Access DMA
Direct Memory Access Controller DMAC Gấp đôi tốc độ dữ liệu Bộ nhớ chỉ đọc Hệ thống xuất nhập cơ bản Bộ nhớ RAM lưu trữ thông tin cấu hình máy tính Ổ đĩa cứng cơ truyền thống Ổ đĩa cứng thể rắn Đơn vị tính toán số học Giao thức truy cập trực tiếp bộ nhớ Bộ điều khiển truy cập trực tiếp bộ nhớ
2
Chƣơng 1. GIỚI THIỆU HỆ THỐNG SỐ
Một hệ thống máy tính bao gồm rất nhiều thành phần, trong đó bộ xử lý
trung tâm (hay còn gọi là CPU) chính là bộ não của cả hệ thống. CPU sẽ tiếp nhận
và xử lý mọi thông tin trong hệ thống. Thông tin hay còn được gọi là dữ liệu trong
một hệ thống máy tính được biểu diễn dưới dạng số nhị phân. Hệ số nhị phân còn
gọi là hệ cơ số hai chỉ bao gồm hai chữ số 0 và 1. Trong máy tính nói riêng và trong
các mạch điện tử số nói chung, các giá trị này được mã hóa dưới dạng các tín hiệu
điện với các giá trị điện áp hoặc dòng điện tương ứng khác nhau. Việc tính toán, xử
lý dữ liệu nhị phân trong máy tính cũng được thực hiện tương tự như trong toán
học.
1.1. Các hệ đếm
1.1.1. Hệ thập phân (decimal)
Hệ thập phân là hệ cơ số rất quen thuộc đối với chúng ta, đây là hệ cơ số
được sử dụng trong cuộc sống hàng ngày để biểu diễn các giá trị số, còn được gọi là
hệ cơ số mười hay hệ mười.
Hệ thập phân sử dụng 10 chữ số để biểu diễn hệ thống số. Mười chữ số này
là: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Số dương và số âm được biểu diễn bằng dấu “+” và “-“
trước mỗi số. Để phân biệt với hệ cơ số khác, ta thường thêm chữ cái „D‟ vào phía
cuối để chỉ ra rằng đó là một số trong hệ thập phân, ta cũng có thể bỏ „D‟ đi mà vẫn
ngầm hiểu đó là số thuộc hệ thập phân.
1.1.2. Hệ nhị phân (binary)
Cũng như hệ thập phân, nhị phân cũng là một hệ thống số trong đó các giá trị
số được biểu diễn chỉ bằng hai chữ số 0 và 1. Để phân biệt với các hệ cơ số khác, ta
thường thêm chữ cái „B‟ vào phía cuối số nhị phân.
Ví dụ: 10B, 11B, 100B, 1100B, 10100110B…
Mỗi giá trị trong hệ nhị phân tương ứng với một giá trị trong hệ thập phân và
ngược lại. Việc chuyển đổi qua lại giữa các giá trị trong hệ thập phân và hệ nhị phân
được thực hiện như sau.
+ Chuyển một số từ hệ nhị phân sang hệ thập phân
3
Việc chuyển đổi từ số nhị phân sang số thập phân được thực hiện bằng cách
tính tổng các tích giữa các hệ số của số nhị phân với các trọng số 2i tương ứng.
) là các Giả sử ta có số nhị phân như sau: bn bn-1…b1b0B, trong đó bi (i =
hệ số của số nhị phân, có thể nhận một trong hai giá trị 0 hoặc 1. Khi đó 2i sẽ là
trọng số tương ứng của hệ số bi. Số nhị phân này được chuyển đổi sang hệ thập
phân bằng công thức sau:
bn*2n + bn-1*2n-1 + … + b1*21 + b0*20
3
2
1
0
1
0
1
1
b3
b2
b1
b0
Ví dụ: ta có số nhị phân: 1011B
Số thập phân tương ứng sẽ là:
b3*23 + b2*22 + b1*21 + b0*20 = 1*23 + 0*22 + 1*21 + 1*20 = 11
Như vậy, số 1011B sẽ tương ứng với số 11 trong hệ thập phân.
Ví dụ: số nhị phân: 110011B 1*25 + 1*24 + 0*23 + 0*22 + 1*21 + 1*20 = 32 + 16 + 0 + 0 + 2 +1 = 51
Như vậy, số 110011B tương ứng với số 51 trong hệ thập phân.
+ Chuyển một số từ hệ thập phân sang hệ nhị phân
Việc chuyển đổi một số từ hệ thập phân sang hệ nhị phân được thực hiện
bằng cách lấy số cần đổi chia cho 2 và ghi nhớ phần dư, tiếp theo lấy thương của
phép chia trước đó chia cho 2 và ghi nhớ phần dư. Làm như vậy cho tới khi được
thương bằng 0. Đảo ngược thứ tự dãy số dư ta sẽ được các chữ số của hệ nhị phân
cần tìm.
Ví dụ: hình 1.1 mô tả cách đổi số 50 sang hệ nhị phân
Số dư (số gạch dưới) được sắp xếp theo chiều mũi tên, như vậy 50 =
110010B
4
Hình 1.1. Đổi một số thập phân sang hệ nhị phân
Hệ nhị phân là hệ cơ số được sử dụng trong máy tính nói riêng và trong các
mạch điện tử số nói chung. Các giá trị 0 và 1 được hiểu là các mức điện áp (hoặc
dòng điện) khác nhau trong mạch (một số ví dụ như đã đề cập ở phần trên). Trong
thế giới máy tính, các số 0 và 1 được gọi là các bit. Một nhóm 4 bit sẽ tạo thành 1
nibble, nhóm 8 bit sẽ tạo thành một byte, nhóm 16 bit sẽ tạo thành một word. Bit
đầu tiên bên trái trong chuỗi bit được gọi là bit MSB, bit cuối cùng bên phải trong
chuỗi bit được gọi là bit LSB.
Ví dụ:
+ Bit: 0B, 1B
+ Nibble: 1011B, 1110B, 1000B, …
+ Byte: 01011110B, 11110000B, 11000001B, …
+ Word: 1000010111100001B, 1111000010101100B, …
MSB 1 1 0 1 0 1 0 LSB 0
Từ các ví dụ trên ta có thể thấy, một nibble có thể biểu diễn được số lớn nhất
là 15, một byte có thể biểu diễn được số lớn nhất là 255, một word có thể biểu diễn
số lớn nhất là 65535. Để biểu diễn những số lớn hơn ta phải dùng những chuỗi bit
dài hơn, điều này rất bất tiện cho con người trong việc ghi chép, tính toán trên giấy.
Để khắc phục nhược điểm trên người ta thường sử dụng hệ thập lục phân.
1.1.3. Hệ thập lục phân (hexadecimal)
Hệ thập lục phân hay còn gọi là hệ cơ số 16, cũng là một hệ thống số trong
đó các giá trị số được biểu diễn bằng các chữ số từ 0 đến 9 và các chữ cái từ A đến
5
F, tương ứng với giá trị thập phân từ 0 đến 15. Để phân biệt với các hệ cơ số khác,
ta thương thêm chữ cái „H‟ vào phía cuối số thập lục phân.
Ví dụ: 19H, AB5H, 2F0CH, E104DH, …
Như đã đề cập ở trên, hệ thập lục phân ra đời nhằm khắc phục nhược điểm
của số trong hệ nhị phân, đó là việc sử dụng một chuỗi số nhị phân quá dài để biểu
diễn một giá trị lớn. Để việc biểu diễn một kết quả nhị phân gọn lại, người ta
thường chuyển các kết quả này thành các số thập lục phân bằng cách nhóm 4 bit số
nhị phân thành một số thập lục phân.
Ví dụ: chuyển số 110001111000001011101011B thành số thập lục phân
1100 C 0111 7 1000 8 0010 2 1110 E 1011 B
Ta sẽ nhóm từng 4 bit số nhị phân lại để tạo thành một số thập lục phân:
1100B có giá trị là 12 tương ứng với „C‟, 0111B có giá trị 7 tương ứng với 7,
1000B có giá trị 8 tương ứng với 8, 0010B có giá trị 2 tương ứng với 2, 1110B có
giá trị 14 tương ứng với „E”, 1011B có giá trị 11 tương ứng với „B‟ trong hệ thập
lục phân. Do đó, số nhị phân đã cho sẽ có giá trị tương ứng là C782EB trong hệ
thập lục phân.
Đối với các số nhị phân có số bit không chia hết cho 4, ta thêm các bit 0 vào
phía liền trước bit MSB để được số bit chia hết cho 4 rồi nhóm lại theo cách trên.
Ví dụ: chuyển số 11101011011111B thành số thập lục phân
Do số bit của số nhị phân trên là 14 không chia hết cho 4 nên ta phải thêm 2
bit 0 vào phía liền trước bit MSB để tạo thành số 0011101011011111B, sau đó
nhóm lại như sau:
0011 3 1010 A 1101 D 1111 F
Như vậy, số nhị phân 11101011011111B tương ứng với số 3ADFH
Việc chuyển từ số thập lục phân thành số nhị phân được thực hiện theo cách
ngược lại, tức là một chữ số thập lục phân được phân tích thành 4 bit nhị phân.
Ví dụ: chuyển số A3C5H thành số nhị phân
A 3 C 5 1010 0011 1100 0101
6
Ta có, „A‟ có giá trị 10 ứng với 1010B, 3 có giá trị 3 ứng với số 0011B, „C‟
có giá trị 12 ứng với số 1100B, 5 có giá trị 5 ứng với số 0101B. Như vậy, A3C5
trong hệ thập lục phân tương ứng với số 1010001111000101 trong hệ nhị phân.
1.2. Các phép toán
1.2.1. Các phép toán logic
Các phép toán logic bao gồm 4 phép toán cơ bản, đó là: NOT, AND, OR,
XOR, thường dùng để diễn tả một kết quả từ các điều kiện cho trước. Các phép
toán này được thực hiện với các toán hạng là các bit 0 (điều kiện sai) và 1 (điều kiện
đúng), kết quả cuối cùng cũng là một bit 0 (kết quả sai) hoặc 1 (kết quả đúng). Sau
đây ta sẽ xét từng phép toán.
a. Phép toán AND
Giả sử z = x AND y
Kết quả của phép toán AND chỉ bằng 1 khi cả hai toán hạng đều bằng 1, tức
x 0 0 1 1 y 0 1 0 1 z 0 0 0 1
là kết quả chỉ đúng khi cả hai điều kiện đều đúng.
b. Phép toán OR
Giả sử z = x OR y
Kết quả của phép toán OR chỉ bằng 0 khi cả hai toán hạng đều bằng 0, tức là
x 0 0 1 1 y 0 1 0 1 z 0 1 1 1
kết quả chỉ sai khi cả hai điều kiện đều sai.
c. Phép toán XOR
Giả sử z = x XOR y
7
Kết quả của phép toán XOR bằng 0 khi hai toán hạng giống nhau, tức là kết
x 0 0 1 1 y 0 1 0 1 z 0 1 1 0
quả chỉ sai khi hai điều kiện giống nhau (cùng đúng hoặc cùng sai)
d. Phép toán NOT
Phép toán này chỉ có một toán hạng. Giả sử y = NOT x
Kết quả y được gọi là bù của toán hạng x.
x 0 1 y 1 0
1.2.2. Các phép toán số học
Việc thực hiện các phép toán số học (cộng, trừ, nhân, chia, …) trong hệ thập
phân đã quá quen thuộc với chúng ta, do đó, nội dung phần này chỉ trình bày cách
thực hiện các phép toán số học trong hệ nhị phân.
a. Phép cộng
Phép cộng trong hệ nhị phân được thực hiện giống như trong hệ thập phân
(cộng cột theo cột), chỉ có sự khác biệt ở điểm: hệ thập phân có 10 chữ số (từ 0 đến
9) còn hệ nhị phân chỉ có 2 chữ số (0 và 1). Phép cộng hai chữ số 0 và 1 được thực
hiện theo quy tắc sau đây.
Xét phép cộng y = a+b, số nhớ là c
Cũng giống như số thập phân, số nhớ sẽ được cộng vào bit cao hơn kế tiếp.
a 0 0 1 1 b 0 1 0 1 c 0 0 0 1 y 0 1 1 0
Xét các ví dụ sau.
Ví dụ: thực hiện phép cộng 001B + 100B
8
Trong hệ thập phân, phép cộng này tương ứng là 1+4=5 (001B = 1, 100B =
4, 101B = 5). Đây là phép cộng không có số nhớ. Xét ví dụ tiếp theo với phép cộng
có sử dụng số nhớ.
Ví dụ: thực hiện phép cộng 0011B + 0110B
Trong hệ thập phân, phép cộng này tương ứng là 3+6=9
Số nhớ Số hạng thứ nhất Số hạng thứ hai Tổng 11 0011 0110 1001
Ví dụ: thực hiện phép cộng 1011B + 0101B
Trong hệ thập phân, phép cộng này tương ứng là 13+7=20. Các số hạng
Số nhớ Số hạng thứ nhất Số hạng thứ hai Tổng 1111 1101 0111 10100
trong phép cộng là các số 4 bit, tổng 20 là một số 5 bit. Do đó, trong trường hợp
tổng quát, nếu số hạng lớn hơn có n bit thì tổng sẽ có n+1 bit.
b. Phép trừ
Phép trừ trong hệ nhị phân cũng được thực hiện tương tự như trong hệ thập
phân. Quy tắc trừ các bit nhị phân được cho như sau.
Xét phép trừ y=a-b, số mượn là c
Cũng giống như số thập phân, số mượn sẽ được trừ vào bit cao hơn kế tiếp.
a 0 0 1 1 b 0 1 0 1 y 0 1 1 0 c 0 1 0 0
Xét các ví dụ sau đây.
Ví dụ: thực hiện phép trừ 101B – 001B
Trong hệ thập phân, phép trừ này tương ứng với 5-1=4. Phép trừ này không
sử dụng số mượn. Xét ví dụ tiếp theo với phép trừ sử dụng số mượn.
9
Ví dụ: thực hiện phép trừ 1010B – 0110B
Trong hệ thập phân, phép trừ này tương ứng với 10-6=4.
Số mượn Số bị trừ Số trừ Hiệu 1 1010 0110 0100
c. Phép nhân
Phép nhân trong hệ nhị phân cũng được thực hiện tương tự như trong hệ thập
phân.
Ví dụ: thực hiện phép nhân 1011B x 1101B
Phép nhân trên trong hệ thập phân tương ứng với 11x13=143
Khi nhân một số n bit với một số m bit, tích số sẽ có m+n bit
d. Phép chia Phép chia trong hệ nhị phân cũng được thực hiện tương tự như trong hệ thập
phân.
Ví dụ: thực hiện phép chia 11011001B:1011B
Trong hệ thập phân, phép chia này tương ứng với 217:11 được thương số là
19 và số dư là 8.
10
1.3. Biểu diễn số
Trong các nội dung trên, ta chỉ đề cập đến các số nguyên không có dấu.
Trong phần này ta sẽ tìm hiểu cách biểu diễn một số nguyên có dấu và số thập phân.
a. Số có dấu
Trong hệ nhị phân, số có dấu được biểu diễn bằng số bù 2. Số bù 2 được tính
từ số bù 1, cách tính được trình bày như trong phần sau.
Số bù 1
Số bù 1 của một số nhị phân là một số nhị phân mà khi cộng với số nhị phân
đã cho thì tổng bằng 1 ở tất cả các bit. Để tìm số bù 1 của một số nhị phân bất kỳ, ta
chỉ cần đổi bit 0 thành 1 và 1 thành 0
Ví dụ:
Số nhị phân 01011 110100 1010011 Số bù 1 10100 001011 0101100
Số bù 2
Số bù 2 của một số nhị phân bằng số bù 1 của nó cộng thêm 1
Ví dụ:
Số nhị phân 10011 110100 1010011 Số bù 1 01100 001011 0101100 Số bù 2 01101 001100 0101101
Số có dấu được biểu diễn bằng số bù 2 như sau:
- Bit có trọng số lớn nhất (MSB) là bit dấu. Số dương có bit dấu bằng 0, số
âm có bit dấu bằng 1
- Các bit còn lại biểu diễn giá trị thực của số dương hay trị bù 2 của số âm - Số có dấu n bit biểu diễn các giá trị từ –(2n-1) đến (2n-1-1)
Trong cách biểu diễn số có dấu, để tìm số đối của một số, ta chỉ cần tìm số
bù 2 của số đó.
Ví dụ: tìm số nhị phân biểu diễn cho số -5
Để biểu diễn số -5 (trong tầm từ -8 đến 7), ta cần số nhị phân có n=4 bit
- Số 5 tương ứng với số nhị phân 4 bit là: 0101
- Số bù 1 của 0101B là: 1010B
11
- Số bù 2 của 0101B là: 1010B + 1 = 1011B
Do đó, số -5 tương ứng với số nhị phân: 1011B
Ví dụ: số có dấu và không dấu 4 bit được cho như trong Bảng 1.1
Bảng 1.1. Số có dấu và không dấu 4 bit
Số thập phân (có dấu) Số thập phân (không dấu)
Như ta đã biết, trong hệ thập phân, phép trừ có thể được thực hiện thông qua
Số nhị phân 0111 0110 0101 0100 0011 0010 0001 0000 1111 1110 1101 1100 1011 1010 1001 1000 7 6 5 4 3 2 1 0 -1 -2 -3 -4 -5 -6 -7 -8 7 6 5 4 3 2 1 0 15 14 13 12 11 10 9 8
phép cộng với số âm, ví dụ như: 14 - 5 có thể thực hiện bằng phép cộng 14 + (-5).
Do đó, trong hệ số nhị phân phép trừ cũng có thể được thực hiện bằng cách cộng
với số bù 2. Sau đây ta xét ví dụ thực hiện phép trừ bằng cách như vậy.
Ví dụ: thực hiện phép trừ 14 – 5
Để thực hiện phép trừ trên trước hết ta phải xác định số bit (n) dùng để biểu
diễn hai số trừ và số bị trừ. Trong trường hợp trên, để biểu diễn được cả hai số 14
và -5, số bit n=5
Trong hệ nhị phân biểu diễn số có dấu: 14 = 01110B và -5 = 11011B. Do đó,
phép trừ trên tương ứng với 01110B + 11011B
Lưu ý: ta cần phải loại bỏ bit có trọng số 2n (nếu có) để có kết quả đúng.
12
Trong trường hợp trên bit có trọng số 25 là 1, do đó ta cần phải loại bỏ bit
này. Kết quả cuối cùng của phép trừ trên là: 01001B (tương ứng với số 9 trong hệ
thập phân).
Khi thực hiện cộng trừ với số có dấu cần chú ý: nếu kết quả nằm ngoài phạm
vi biểu diễn của số có dấu n bit thì kết quả sai. Để sửa sai ta phải tăng số bit biễu
diễn.
Ví dụ: thực hiện phép tính -4 – 5
Phép tính trên tương ứng với phép cộng -4 + (-5). Để biễu diễn được -4 và -5
trong hệ nhị phân ta cần n=4 bit, -4 = 1100B, -5 = 1011B
Kết quả phép tính là 0111B, tức là +7 thay vì -9 như mong muốn. Ở ví dụ
này, kết quả sai vì -9 nằm ngoài phạm vi biểu diễn của số có dấu 4 bit. Để có kết
quả đúng, ta phải tăng số bit biểu diễn lên 5 bit, -4 = 11100B, -5 = 11011B
Phép tính cho kết quả là 10111B, tức là -9
b. Số thập phân
Để biễu diễn số thập phân trong hệ nhị phân ta cũng dùng dấu chấm tương tự
như trong hệ thập phân.
Ví dụ: 1100.1011B, 100.11B, 10.0101B, …
Cách chuyển đổi các số nhị phân dạng này sang hệ thập phân cũng được thực
hiện như bình thường, các trọng số tương ứng của các số sau dấu chấm có số mũ
âm.
Ví dụ: chuyển số nhị phân 1100.1011B sang hệ thập phân
-2 0 -3 1
3 1 b3 2 1 b2 1 0 b1 0 0. b0 -4 -1 1 1 b-1 b-2 b-3 b-4
Trong hệ thập phân, số này là:
13
1*23 + 1*22 + 0*21 + 0*20 + 1*2-1 + 0*2-2 + 1*2-3 + 1*2-4 = 12.6875
Để chuyển một số thập phân trong hệ thập phân sang hệ nhị phân ta thực
hiện các bước sau:
- Phần nguyên: chuyển đổi bình thường như đã mô tả trong phần 1.2
- Phần thập phân: lấy phần thập phân nhân cho 2, ghi nhận lại phần nguyên,
còn phần thập phân tiếp tục nhân cho 2. Lặp lại nhiều lần như vậy cho tới độ chính
xác mà ta mong muốn. Phần thập phân là tập hợp các phần nguyên của phép nhân.
Trong đó, số đầu tiên có trọng số lớn nhất của phần thập phân.
Ví dụ: chuyển số 12.6875 sang hệ nhị phân
- Phần nguyên 12 tương ứng trong hệ nhị phân là 1100B
- Phần thập phân là 0.6875, để chuyển sang hệ nhị phân ta lấy phần này lần
lượt nhân cho 2
Phép nhân phần thập phân cho 2 Phần nguyên của phép nhân 0.6875 0.375 0.75 0.5 1 (trọng số lớn nhất) 0 1 1 x2 = 1.375 x2 = 0.75 x2 = 1.5 x2 = 1
Do đó, phần thập phân trong hệ nhị phân là: .1011B
Ghép phần nguyên và phần thập phân ta được kết quả chuyển đổi là:
1100.1011B
1.4. Biểu diễn ký tự
Như đã giới thiệu trong phần đầu của chương, tất cả các thông tin trong máy
tính đều được biểu diễn dưới dạng các số 0 và 1. Để biểu diễn một ký tự (chữ cái,
chữ số, dấu câu, …), người ta thường dùng một tổ hợp các bit 0 và 1. Một tập hợp
các cách biểu diễn cho tất cả các ký tự gọi là một bảng mã hay gọi tắt là mã. Một số
bảng mã chuẩn đã được xây dựng để dùng trong máy tính hoặc trong truyền thông
như: ASCII, Unicode, EBCDIC, … Sau đây là một số mã được sử dụng phổ biến
trong máy tính hiện nay.
a. Mã ASCII
Mã ASCII được tổ chức mã chuẩn của Mỹ xây dựng để dùng trong trao đổi
thông tin. Mã ASCII sử dụng một tổ hợp 7 bit nhị phân để biểu diễn một ký tự, vì
14
vậy mã này biểu diễn được tối đa 128 (27) ký tự. Cách biểu diễn các ký tự được mô
tả như Bảng 1.2.
Bảng 1.2. Bảng mã ASCII
Các ký tự có giá trị từ 0000000 đến 0011111 và 1111111 là các ký tự không
in được, nghĩa là không thể hiện thị trên màn hình hoặc bản in.
Ví dụ: từ Bảng 1.2, ta thấy mã ASCII của một số ký tự như sau:
- Chữ cái “a”: 1100001
- Chữ cái “B”: 1000010
- Chữ số “6”: 0110110
- Dấu chấm than (!): 0100001
b. Mã Unicode
Như đã đề cập ở phần trên, bảng mã ASCII có thể biểu diễn được tối đa 128
ký tự, nghĩa là có thể biễu diễn được bộ chữ Latinh, các dấu câu và một số ký tự đặc
biệt. Tuy nhiên, khả năng biểu diễn như vậy vẫn chưa đầy đủ do trên thế giới còn
rất nhiều ngôn ngữ với nhiều nhiều mẫu chữ khác nhau như tiếng Việt có thêm các
chữ „ă‟, „â‟, „ê‟, „ư‟, „ơ‟, „ừ‟, … Do đó, một số công ty công nghệ lớn như
Microsoft, IBM, Google, Apple, Yahoo, Oracle … đã thống nhất đưa ra một bảng
mã ký tự mới có khả năng biểu diễn được tất cả các ngôn ngữ trên thế giới, đó là
15
Unicode. Mã Unicode biểu diễn ký tự bằng một tổ hợp 16 bit, do đó, mã này có khả năng biểu diễn được 216 = 65536 ký tự. Với số lượng như vậy, mã Unicode có khả
năng biểu diễn gần như tất cả các ngôn ngữ khác nhau trên thế giới, kể cả các ngôn
ngữ sử dụng ký tự tượng hình phức tạp như Tiếng Trung Quốc, Tiếng Thái, …
CÂU HỎI ÔN TẬP CHƢƠNG 1
1. Chuyển các số sau sang số nhị phân: 30; 52; 87; 100; 225; 65,625; 90,84375
2. Chuyển các số sau sang số thập lục phân: 90; 125; 241; 512; 1023
3. Biểu diễn số 8 bit bù 2 của các số sau: 79; -49; -125; -100; 115; -128
4. Cho chuỗi ký tự sau: “DH Pham Van Dong”, hãy biểu diễn chuỗi ký tự này bằng
mã ASCII.
5. Thực hiện các phép trừ sau bằng cách thực hiện phép cộng với số bù 2
a. 10 – 15 b. 6 – 30 c. 63 – 31 d. 7 – 50
16
Chƣơng 2. GIỚI THIỆU CÁC HỆ MÁY TÍNH
Ngày nay, máy tính đã trở nên quá quen thuộc với chúng ta. Chúng được sử
dụng rộng rãi cho nhiều mục đích, trong nhiều lĩnh vực khác nhau, từ y học, giáo
dục, kinh tế đến chính trị, kỹ thuật, an ninh, quốc phòng, … Để có được hình dáng
nhỏ gọn, tiện lợi và hữu ích như ngày nay, máy tính đã trải qua quá trình phát triển
lâu dài. Trong chương này chúng ta sẽ tìm hiểu về lịch sử các thế hệ máy tính, các
thành phần cơ bản nhất của một chiếc máy tính qua các thời kỳ và một số cách phân
loại máy tính. Phần cuối cùng sẽ trình bày về chiếc máy tính theo kiến trúc Von
Neumann – Turring.
2.1. Các thế hệ máy tính
Trong phần này chúng ta chia sự phát triển của máy tính thành những giai
đoạn nhỏ, gọi là thế hệ. Mỗi thế hệ được đặc trưng bằng công nghệ dùng để xây
dựng nên chiếc máy tính.
2.1.1. Thế hệ zero
Đây là thế hệ các máy tính cơ khí, bắt đầu từ năm 1642, khi nhà toán học
người Pháp, Blaise Pascal, hoàn thành việc xây dựng một cỗ máy tính toán có khả
năng thực hiện được phép cộng có nhớ và phép trừ. Đây là thiết bị hoàn toàn bằng
cơ khí sử dụng các bánh răng và được cung cấp lực nhờ một cánh tay quay. Khoảng
30 năm sau đó, chiếc máy tính toán tiếp theo mới ra đời, đó là phát minh của nhà
toán học người Đức, Leibniz. Chiếc máy này có nhiều tính năng hơn chiếc máy của
Pascal, ngoài khả năng cộng, trừ, nó còn có thể thực hiện được cả phép nhân và
chia. Nhưng cả hai có một điểm chung nhất, đó là không có khả năng lập trình,
chúng được thực hiện hoàn toàn thủ công.
Chiếc máy tính tiếp theo được phát minh vào năm 1822, khi giáo sư toán
trường đại học Cambridge, Charles Babbage, xây dựng một máy có khả năng tính
các phép cộng, trừ dựa trên thuật toán sai phân nên còn được gọi là máy sai phân.
Bên cạnh đó, năm 1833 ông cũng bắt đầu nghiên cứu và xây dựng một chiếc máy
khác, gọi là máy phân tích, có nhiều ưu điểm hơn so với máy sai phân. Máy phân
tích có khả năng thực hiện được bất kỳ một phép tính toán học nào. Cấu tạo của
máy phân tích cũng bao gồm nhiều thành phần giống như một chiếc máy tính hiện
17
đại như: đơn vị xử lý toán học, bộ nhớ, các thiết bị xuất và nhập dữ liệu. Máy phân
tích có khả năng thực hiện được một loạt các phép tính dựa trên một kế hoạch cho
trước, còn được gọi là chương trình. Dữ liệu được đưa vào máy bằng các thẻ đục lỗ,
mỗi chương trình có dữ liệu khác nhau, tương ứng với các thẻ đục lỗ khác nhau.
Công việc viết kế hoạch cho máy còn được gọi là lập trình. Babbage đã thuê một
người tên là Ada lập trình cho mình. Do đó, Ada được xem là lập trình viên đầu tiên
trên thế giới. Tên của Ada sau này được đặt cho một ngôn ngữ lập trình hiện đại.
Máy sai phân và máy phân tích đều là các máy cơ, vì vậy, để thực hiện các phép
tính lớn, Babbage cần rất nhiều các bánh răng được chế tạo với độ chính xác nhất
định. Tuy nhiên, công nghệ ở thế kỷ 19 không đủ khả năng đáp ứng được điều kiện
này. Mặc dù không thành công, nhưng những ý tưởng của Babbage đã vượt thời
gian, thậm chí ngày nay hầu hết các máy tính đều có cấu trúc tương tự như máy
phân tích. Do đó, ông được xem như cha đẻ của máy tính.
2.1.2. Thế hệ đầu tiên (1945 – 1953)
Đây là thế hệ các máy tính sử dụng đèn chân không. Vào năm 1930, một
sinh viên kỹ thuật người Đức, tên là Konrad Zuse đã tìm hiểu lại thiết kế của
Babbage và đã có ý tưởng cải tiến thiết kế này bằng cách thay các bánh răng bằng
các rơle. Chiếc máy tính của Zuse ra đời có tên là Z1. Z1 cũng có khả năng lập trình
được, có bộ nhớ, đơn vị tính toán, đơn vị điều khiển. Các công trình của Zuse sau
đó không còn được phát triển do bị phá hủy trong chiến tranh, nhưng Zuse vẫn được
xem là một trong những người đi tiên phong trong việc chuyển đổi chiếc máy tính
từ cơ sang điện.
Chiếc máy tính được xem là hoàn toàn bằng điện tử đầu tiên được John
Mauchley và J.Presper Eckert chế tạo và được giới thiệu vào năm 1946. Chiếc máy
này có tên là ENIAC, sử dụng 17.648 bóng đèn chân không, chiếm diện tích khoảng 167m2 (1800 ft2), nặng khoảng 30 tấn và tiêu thụ công suất khoảng 174KW. ENIAC
có 20 thanh ghi, mỗi thanh ghi có khả năng lưu trữ một số thập phân 10 chữ số.
Các máy tính đèn chân không sau đó tiếp tục ra đời dựa trên kiến thức của
Mauchley và Eckert là: EDSAC (năm 1949) được thiết kế tại đại học Cambridge,
ILLIAC ở đại học Illinois, WEIZAC tại viện Weizmann ở Israel.
18
Mauchley và Eckert sau đó lập công ty riêng và tiếp tục phát triển chiếc máy
tính tiếp theo là EDVAC. Công ty máy tính Mauchley – Eckert là tiền thân của công
ty Univac và hiện tại là Unisys. Cùng thời gian này, một người trong nhóm dự án
ENIAC, John von Neumann đã tách ra xây dựng chiếc máy tính của riêng mình,
mang tên IAS. Máy của Neumann có 5 phần cơ bản: bộ nhớ, đơn vị số học, đơn vị
điều khiển, thiết bị nhập và thiết bị xuất. IAS là chiếc máy tính có khả năng lưu trữ
chương trình đầu tiên, là cơ sở cho các máy tính số hiện nay.
Năm 1953, IBM cũng sản xuất ra chiếc máy tính đầu tiên của công ty, đó là
701. Các năm sau đó, IBM tiếp tục cải tiến và cho ra đời các dòng sản phẩm có bộ
nhớ lớn hơn và thực hiện được nhiều chức năng hơn, đó là 704 (năm 1956) và 709
(năm 1958).
2.1.3. Thế hệ thứ hai (1954 – 1965)
Đây là thế hệ các máy tính sử dụng transistor. Năm 1948, ba nhà nghiên cứu
tại phỏng thí nghiệm Bell (Bell Lab), John Bardeen, Walter Brattain và William
Shockley đã phát minh ra transistor. Đây là một công nghệ mới mang tính cách
mạng trong ngành công nghiệp máy tính nói riêng và điện tử nói chung. Vì
transistor tiêu thụ ít năng lượng hơn, nhỏ hơn rất nhiều và hoạt động tin cậy hơn so
với đèn chân không, do đó, mạch máy tính cũng trở nên nhỏ hơn và hoạt động chính
xác hơn. Mặc dù vậy, máy tính trong thời kỳ này vẫn khá đắt và kềnh càng. Chỉ các
trường đại học, chính phủ hoặc các công ty lớn mới có đủ khả năng mua máy tính.
Một số công ty lớn, nổi bật trong nền công nghiệp máy tính thời kỳ này là: IBM,
DEC (Digital Equipment Corporation) và Univac (hiện nay là Unisys).
Một số máy tính trong thời kỳ này là PDP-1, PDP-8 của công ty DEC, 7090,
7094 và 1401 của IBM, 6600 của CDC. Các dòng máy của DEC rẻ hơn nhiều so
với của IBM do tốc độ của các máy này thấp hơn rất nhiều so với các máy IBM.
Các dòng 7090, 7094 là các phiên bản cải tiến của thế hệ máy tính sử dụng đèn chân
không 709, trong khi 1401 là dòng máy được IBM phát triển mới, nhỏ gọn, giá rẻ.
Một khái niệm lần đầu tiên được sử dụng cho máy CDC 6600, đó là xử lý song
song. Trong đơn vị xử lý trung tâm có các thành phần chuyên thực hiện các phép
tính toán số học, tiết kiệm thời gian để bộ xử lý trung tâm thực hiện các thao tác
19
khác như quản lý xuất, nhập, … Do đó, máy CDC6600, sản xuất năm 1964, có tốc
độ nhanh hơn cả máy IBM 7094. Đây cũng là một cột mốc quan trọng trong ngành
công nghiệp máy tính.
2.1.4. Thế hệ thứ ba (1965 – 1980)
Đây là thế hệ các máy tính sử dụng mạch tích hợp. Mạch tích hợp (còn gọi là
IC) được nghiên cứu và chế tạo từ những năm 1950. Ý tưởng về mạch tích hợp
được đề xuất lần đầu tiên bởi Jack Kilby, khi đó mạch được làm bằng Germani. Sau
đó, mạch tích hợp gặp một số vấn đề trong quá trình sản xuất và hoạt động nên
Robert Noyce (đồng sáng lập các công ty Fairchild Semiconductor năm 1957 và
Intel năm 1968) đã đề xuất sử dụng Silic để chế tạo các mạch tích hợp. Kỹ thuật này
được sử dụng cho đến ngày nay.
Một mạch tích hợp cho phép ghép nhiều transistor trên một mạch đơn và
đóng gói lại thành một linh kiện duy nhất gọi là chip. Vì vậy, mạch tích hợp có kích
thước nhỏ hơn, tốc độ hoạt động cao hơn so với mạch ghép các transistor riêng lẻ.
Mạch tích hợp ra đời mở ra thời kỳ phát triển bùng nổ của máy tính. Các máy tính
thời kỳ này trở nên nhỏ gọn hơn, tốc độ cao hơn và đặc biệt là tiêu thụ năng lượng ít
hơn. Trong giai đoạn này, IBM đã giới thiệu một thế hệ máy tính hoàn toàn mới, đó
là các máy tính thuộc họ System 360. Điểm nổi bật của các máy tính thuộc họ này
là chúng hoàn toàn tương thích với nhau, nghĩa là các máy trong họ sử dụng cùng
một hợp ngữ, do đó, không cần phải viết lại chương trình khi nâng cấp một máy nhỏ
lên máy lớn hơn. Cùng thế hệ này còn có các máy tính PDP-8 và PDP-11 của DEC
và Cray-1 của Cray Research Corporation, một công ty máy tính do Seymour Cray
sáng lập. Seymour Cray là một kỹ sư của công ty CDC, thuộc nhóm xây dựng máy
tính CDC 6600. Cray-1 có khả năng thực hiện trên 160 triệu lệnh trong một giây và
hỗ trợ bộ nhớ 8 Megabytes
2.1.5. Thế hệ thứ tƣ (1980 đến nay)
Đây là thế hệ các máy tính sử dụng mạch tích hợp cỡ lớn VLSI. Theo thời
gian, kỹ thuật chế tạo vi mạch ngày càng được cải tiến, do đó mức độ tích hợp của
vi mạch ngày càng lớn. Các vi mạch có mức độ tích hợp nhỏ (SSI) chứa từ 10 đến
100 transistor trên một chip, các vi mạch có mức độ tích hợp trung bình (MSI) chứa
20
từ 100 đến 1000 transistor trên một chip, các vi mạch tích hợp lớn (LSI) chứa từ
1000 đến 10000 transistor trên một chip, các vi mạch tích hợp siêu lớn (VLSI) chứa
trên 10000 transistor trên một chip. Mức cuối cùng (VLSI) đánh dấu sự khởi đầu
của thế hệ máy tính thứ tư.
Với vi mạch VLSI, Intel đã chế tạo bộ vi xử lý đầu tiên trên thế giới vào năm
1971, đó là 4004. Intel 4004 là vi xử lý 4 bit, chạy ở tần số 108KHz. Cùng thời
điểm này, Intel cũng giới thiệu bộ nhớ truy cập ngẫu nhiên (RAM) với dung lượng
của một chip nhớ là 4Kilobit (Kb).
Công nghệ VLSI ngày càng phổ biến, với mật độ tích hợp ngày càng cao làm
cho máy tính ngày càng nhỏ và rẻ. Nếu như ở các thế hệ trước, chỉ có một số trường
đại học, doanh nghiệp lớn hoặc tổ chức chính phủ mới trang bị được máy tính thì
đến giai đoạn này, các cá nhân đã có thể mua được máy tính. Năm 1981, IBM đã
giới thiệu chiếc máy tính cá nhân (PC) đầu tiên, khởi đầu thời đại máy tính cá nhân.
Hiện nay máy tính đã được sử dụng rộng rãi trên toàn thế giới với nhiều mục
đích khác nhau. Do đó, các công ty cũng đã sản xuất ra rất nhiều loại máy tính phù
hợp với từng yêu cầu. Ví dụ nếu một cá nhân sẽ trang bị cho mình một máy tính để
bàn (desktop) hoặc laptop nhỏ gọn, phục vụ cho các nhu cầu đơn giản trong công
việc và cuộc sống, thì một ngân hàng phải trang bị một máy tính cỡ lớn (thường gọi
là mainframe), các máy chủ phải là các siêu máy tính có tốc độ rất cao, xử lý một
khối lượng lớn công việc, phục vụ cho nhiều máy nhỏ khác.
2.2. Chức năng máy tính
Một cách tổng quát, một máy tính có bốn chức năng cơ bản sau:
+ Chuyển dữ liệu: máy tính phải có chức năng chuyển hoặc trao đổi dữ liệu
với thế giới bên ngoài. Quá trình máy tính truyền hoặc nhận dữ liệu còn gọi là quá
trình vào ra và các thiết bị phục vụ cho quá trình này gọi là các thiết bị ngoại vi.
Một số thiết bị ngoại vi phục vụ cho quá trình nhận (vào) dữ liệu như: chuột, bàn
phím, micro … Một số thiết bị ngoại vi phục vụ cho quá trình truyền (ra) dữ liệu
như: màn hình, máy in, loa, … Khoảng cách di chuyển dữ liệu có thể rất xa (như
giao tiếp với máy chủ thông qua mạng internet) hoặc cũng có thể rất gần (như giao
tiếp với USB, bàn phím, chuột, …).
21
+ Xử lý dữ liệu: đây là chức năng cơ bản qua các thế hệ máy tính từ trước tới
nay. Có thế nói đây là chức năng trung gian giữa nhập dữ liệu và xuất hoặc lưu trữ
dữ liệu, tức là sau khi nhận dữ liệu, máy tính phải có bước xử lý dữ liệu để có các
dạng dữ liệu phù hợp trước khi xuất ra các thiết bị ngoại vi hoặc lưu trữ vào bộ nhớ.
Một số thành phần bên trong giúp máy tính thực hiện chức năng này, trong đó, đơn
vị xử lý trung tâm (còn được gọi là CPU) là thành phần chính. Các thành phần này
hầu hết đều ở mức thấp, tức là mức mà người sử dụng máy tính không giao tiếp trực
tiếp.
+ Lưu trữ dữ liệu: chức năng này giúp máy tính ghi nhớ những công việc đã
làm. Có hai dạng lưu trữ dữ liệu: lưu trữ dài lâu (như việc lưu trữ các tập tin trong
máy tính) và lưu trữ dữ liệu tạm thời (các dữ liệu này thường được tạo ra trong quá
trình hoạt động, chạy các ứng dụng của máy tính). Các thiết bị lưu trữ dữ liệu dài
lâu như: ổ đĩa cứng, USB, thẻ nhớ, … Các thiết bị lưu trữ tạm thời như: ổ đĩa cứng.
RAM, bộ nhớ cache, …
+ Điều khiển: chức năng này dùng để điều khiển ba chức năng trên hoạt
động một cách nhịp nhàng, đúng theo mong muốn của người sử dụng. Thành phần
chính giúp máy tính thực hiện chức năng này cũng là bộ xử lý trung tâm.
2.3. Cấu trúc và tổ chức máy tính
Dựa trên chức năng cơ bản, tổ chức của một máy tính hiện đại cơ bản bao
gồm các thành phần như hình 2.1
Hình 2.1. Tổ chức cơ bản của một máy tính hiện đại
Tổ chức cơ bản của một máy tính hiện đại gần giống với máy phân tích,
được xây dựng ở thế kỷ 19. Tổ chức này bao gồm ba thành phần cơ bản: đơn vị xử
lý trung tâm, bộ nhớ và các ngoại vi xuất/nhập. Các thành phần này được kết nối
22
với nhau thông qua các bus. Đơn vị xử lý trung tâm đọc lệnh từ bộ nhớ, lấy dữ liệu
từ bộ nhớ hoặc các thiết bị nhập. Kết quả sau khi thực thi sẽ được xuất ra thông qua
các thiết bị xuất hoặc lưu trở lại vào bộ nhớ.
Cấu trúc máy tính là mô hình hiện thực của tổ chức máy tính, bao gồm các
thành phần, thiết bị kết nối, giao tiếp với nhau để cho cả hệ thống hoạt động một
cách nhịp nhàng. Cách thức kết nối và giao tiếp cũng khác nhau tùy theo thiết bị.
Cấu trúc máy tính thay đổi qua các thế hệ theo chiều hướng ngày càng phức tạp với
sự xuất hiện của ngày càng nhiều ngoại vi hỗ trợ đắc lực cho người sử dụng. Ví dụ,
bộ nhớ di động trước kia là đĩa mềm với dung lượng thấp, chỉ khoảng 1,44MB, tốc
độ đọc/ghi chậm và dễ hư hỏng, ngày nay được thay thế bằng các USB hoặc thẻ nhớ
nhỏ gọn, dung lượng lên tới hàng chục GB, tốc độ đoc/ghi dữ liệu rất nhanh và rất
bền. Do đó, các ổ đĩa mềm chiếm diện tích lớn trên thân máy cũng dần được thay
thế bằng các cổng USB nhỏ gọn. Ngoài ra, cổng USB còn thay thế một số các cổng
khác như: cổng COM, cổng máy in (LPT), theo xu hướng này các thiết bị sử dụng
cổng COM hay LPT cũng dần được thay đổi và chuyển sang sử dụng cổng USB.
Nhìn chung, xu hướng cải tiến của các thiết bị là tốc độ ngày càng cao, kích thước
ngày càng nhỏ, tiện lợi cho người sử dụng và dễ dàng kết nối với nhiều thiết bị bên
ngoài..
2.4. Phân loại
Có rất nhiều cách phân loại máy tính, nội dung bài giảng này chỉ đề cập đến
hai cách phân loại phổ biến nhất hiện nay, đó là phân loại theo cấu trúc tập lệnh của
bộ xử lý máy tính và phân loại theo khả năng xử lý của máy tính.
2.4.1. Phân loại theo cấu trúc tập lệnh
Cách phân loại này chủ yếu dựa trên bộ vi xử lý trung tâm của máy tính. Như
ta đã biết, nguyên lý hoạt động của một vi xử lý là đọc và thực thi lần lượt các lệnh
của một chương trình được lưu trong bộ nhớ, còn gọi là mã máy. Mã máy do người
lập trình xác định. Đối với các máy tính thế hệ đầu tiên, khi chưa có trình biên dịch,
việc lập trình mã máy được thực hiện bằng cách xác định các số nhị phân dùng để
biểu diễn cho một lệnh. Dó đó, để việc lập trình được ngắn gọn và đơn giản, các nhà
phát triển thường có xu hướng tích hợp nhiều chức năng vào một lệnh (tức là một
23
lệnh thực hiện được nhiều chức năng), tương ứng phần cứng cũng phải được phát
triển để thực thi lệnh này, vì thế mọi phức tạp đều tập trung vào việc thiết kế phần
cứng. Do cấu trúc của bộ vi xử lý là cố định, để bao quát tất cả các trường hợp có
thể có, các máy tính này thường có rất nhiều lệnh và chiều dài (tính bằng bit) của
mỗi lệnh cũng khác nhau tùy vào độ phức tạp của từng lệnh. Các máy này được gọi
là máy CISC, hay còn được gọi là máy có tập lệnh phức tạp. Bảng 2.1 mô tả đặc
tính của một vài máy CISC.
Bảng 2.1. Đặc tính của một vài máy CISC
Bộ xử lý IBM 370/168 DEC 11/780 iAPX 432
Năm sản xuất 1973 1978 1982
Số lệnh 208 303 222
Chiều dài lệnh (bit) 16-48 16-456 6-321
Từ các đặc tính trên, ta thấy máy CISC có một số khuyết điểm như: tập lệnh
quá dài, không linh hoạt, phải tốn nhiều thời gian để giải mã các lệnh phức tạp làm
chậm tốc độ xử lý. Do đó, những năm đầu thập niên 1980, ý tưởng về việc cải tiến
hiệu suất của bộ vi xử lý bằng cách thay đổi tập lệnh bắt đầu ra đời. Các thay đổi
này tập trung chủ yếu vào việc giảm bớt số lệnh, làm cho chiều dài các lệnh bằng
nhau. Ý tưởng này cũng tương tự như việc thực hiện nhiều phép cộng để có được
phép nhân, do đó chỉ cần lệnh cộng thay vì vừa có cả lệnh cộng và lệnh nhân. Các
máy này còn được gọi là máy RISC, hay còn được gọi là máy có tập lệnh rút gọn.
Các lệnh của máy RISC có chiều dài cố định, dạng đơn giản, dễ giải mã. Một lệnh
của máy RISC được chia thành nhiều khâu như: gọi lệnh, giải mã lệnh, thực thi
lệnh, trả về kết quả. Với sự ra đời của kỹ thuật đường ống, các khâu này được thực
hiện song song, và trên lý thuyết một lệnh của máy RISC thực thi chỉ tốn một chu
kỳ máy. Bảng 2.2 mô tả đặc tính của vài máy RISC.
Từ Bảng 2.2 ta thấy, số lệnh của các vi xử lý RISC đã giảm đáng kể so với
CISC nhưng vẫn đảm bảo được chức năng của một vi xử lý. Để đảm bảo được điều
này, một lệnh của máy CISC sẽ tương đương với một nhóm lệnh của máy RISC và
thực hiện cùng chức năng. Lúc này độ phức tạp của chương trình phụ thuộc khá
nhiều vào việc lập trình phần mềm. Tuy nhiên, với sự phát triển của công nghệ phần
24
mềm, các trình biên dịch ra đời làm cho việc viết chương trình trở nên trực quan và
ngày càng đơn giản hơn so với việc xác định mã máy thông qua các số nhị phân.
Đây cũng là một yếu tố góp phần thúc đẩy sự phát triển và làm cho máy RISC phổ
biến như hiện nay. Tuy nhiên, việc sử dụng CISC hay RISC còn phụ thuộc vào các
công ty công nghệ. Họ vi xử lý Intel x86 sử dụng kiến trúc CISC trong khi các dòng
vi xử lý ARM, PowerPC của IBM, MIPS, SuperH sử dụng kiến trúc RISC
Bảng 2.2. Đặc tính của một vài máy RISC
Bộ xử lý IBM 801 RISC1 MIPS
Năm sản xuất 1980 1982 1983
Số lệnh 120 39 55
Chiều dài lệnh (bit) 32 32 32
2.4.2. Phân loại theo khả năng xử lý của máy tính
Theo cách phân loại này, máy tính được chia thành 4 loại dựa trên khả năng
xử lý và một số yếu tố khác như: kích thước vật lý, hiệu suất, các lĩnh vực ứng
dụng.
a. Siêu máy tính
Siêu máy tính là một máy tính vượt trội trong khả năng và tốc độ xử lý.
Thuật ngữ siêu tính toán được sử dụng lần đầu tiên vào năm 1920 để nói đến những
bản tính lớn của IBM làm cho trường đại học Columbia. Tốc độ của các siêu máy
tính được đo bằng khả năng thực hiện các phép tính có dấu chấm động trong một
giây, còn được gọi là flop. Các siêu máy tính hiện nay có tốc độ xử lý hàng trăm
teraflop (một teraflop tương ứng với một nghìn tỷ phép tính trong một giây). Các
siêu máy tính được sử dụng trong một số ứng dụng cần có khối lượng tính toán lớn,
phức tạp như dự báo thời tiết, …
b. Máy tính lớn (Mainframe)
Đây là loại máy tính có kích thước lớn được sử dụng chủ yếu bởi các công ty
lớn như các ngân hàng, các công ty bảo hiểm, … để chạy các ứng dụng lớn, cần xử
lý khối lượng lớn dữ liệu như kết quả điều tra dân số, thống kê khách hàng và doanh
nghiệp, … Hiện nay, IBM chiếm 99% thị trường máy tính lớn, bình thường thời
gian hoạt động của máy tính lớn là 24/24 giờ tất cả các ngày trong năm.
25
c. Siêu máy tính cỡ nhỏ
Loại máy tính này ra đời nhằm đáp ứng nhu cầu của một số hệ thống lớn
nhưng không phức tạp đến mức phải sử dụng các mainframe. Các máy tính loại này
giúp giảm giá thành hệ thống, thường được sử dụng làm máy chủ trên mạng.
d. Máy tính cá nhân
Đây là loại máy tính có cấu hình và tốc độ xử lý thấp nhất so với các loại
máy tính trên nhưng được sử dụng phổ biến nhất. Máy tính cá nhân ngày nay đã
tương đối nhỏ gọn, một số máy thậm chí có thể mang theo như laptop, máy tính
bảng và đặc biệt là giá rẻ phù hợp với nhu cầu cá nhân.
2.5. Máy tính Von Neumann
Năm 1945, John Von Neumann, nhà toán học người Hungary, đã đề xuất ý
tưởng về cấu trúc cơ bản mà một máy tính cần có. Theo ý tưởng này, máy tính hoạt
động theo một chương trình được lưu trong bộ nhớ. Máy tính giao tiếp với thế giới
bên ngoài thông qua các bộ điều khiển xuất/nhập dữ liệu. Khái niệm máy tính có
chương trình được lưu trữ ra đời và tồn tại cho tới ngày nay. Do đó, khi nói đến các
máy tính có chương trình được lưu trữ là nói đến máy tính có kiến trúc Von
Neumann. Ngày nay, kiến trúc Von Neumann đã có nhiều cải tiến, nhưng về cơ bản
vẫn phải có những thành phần sau:
- Đơn vị xử lý trung tâm, còn được gọi là CPU: có chức năng đọc và thực thi
chương trình được lưu trữ trong bộ nhớ. Các lệnh trong chương trình được đọc và
thực thi một cách tuần tự, tại một thời điểm chỉ có một lệnh được thực thi.
- Bộ nhớ: là nơi lưu trữ chương trình thực thi của đơn vị xử lý trung tâm và
các dữ liệu cần thiết
- Các bộ điều khiển xuất/nhập dữ liệu, còn gọi là các ngoại vi của máy tính,
có chức năng giúp đơn vị xử lý trung tâm giao tiếp với thế giới bên ngoài
- Các thành phần trên kết nối với nhau thông qua các đường dây dẫn gọi là
bus như hình 2.2.
26
Hình 2.2. Mô hình kiến trúc Von Neumann
Từ mô hình trên ta thấy, lệnh trong chương trình thực thi và dữ liệu chia sẻ
chung một bus, do đó, trong lúc CPU đọc lệnh thì không thể đọc/ghi dữ liệu và
ngược lại trong lúc đọc/ghi dữ liệu thì không thể đọc lệnh để thực thi. Điều này làm
hạn chế tốc độ xử lý của CPU, đây chính là nhược điểm của kiến trúc Von
Neumann, còn gọi là tình trạng thắt cổ chai Von Neumann. Để khắc phục tình trạng
này người ta đã thiết kế thêm bộ nhớ cache bên trong vi xử lý. Do đó, ngày nay kiến
trúc Von Neumann vẫn là kiến trúc phổ biến trong các máy tính.
CÂU HỎI ÔN TẬP CHƢƠNG 2
1. Vẽ mô hình và nêu chức năng cơ bản của các thành phần trong máy tính Von
Neumann. Nhược điểm của kiến trúc Von Neumann là gì?
2. Máy CISC là gì? Máy RISC là gì? Nêu những điểm khác nhau giữa hai loại máy
này.
3. Trình bày các chức năng cơ bản của một máy tính.
4. Trình bày cấu trúc của một máy tính hiện đại.
5. Trình bày những đặc trưng cơ bản của các thế hệ máy tính từ trước đến nay.
27
Chƣơng 3. CẤU TRÚC TỔNG QUÁT
Máy tính bao gồm rất nhiều thành phần như: thùng máy, nguồn, bản mạch
chính, ổ đĩa cứng, bàn phím, chuột, … Trong đó, một số thành phần bắt buộc phải
có và một số không bắt buộc, đóng vai trò hỗ trợ chức năng cho máy tính. Mỗi
thành phần đều có những thông số kỹ thuật riêng. Do đó, để có thể lắp ráp được một
chiếc máy tính cá nhân hoàn chỉnh, có tính tương thích cao, hoạt động tốt, ta cần
phải lựa chọn các thành phần thích hợp. Sau đây, ta sẽ lần lượt tìm hiểu về từng
thành phần cấu tạo nên một chiếc máy tính cá nhân.
3.1. Thùng máy – nguồn
a. Thùng máy
Thùng máy tính (còn được gọi là case) là một bộ phận bên ngoài, có tác
dụng bao bọc các thành phần bên trong của máy, giữ chúng luôn sạch sẽ, thoáng
mát và tránh được các tác nhân, tác động không mong muốn từ bên ngoài. Tại Việt
Nam, thùng máy có nhiều chủng loại, mẫu mã đến từ các thương hiệu uy tín như:
CoolerMaster, Corsair, Patriot, Deluxe, … Chúng khá đa dạng về kiểu dáng, kích
thước, màu sắc, chất liệu cấu thành, một số còn hỗ trợ các tính năng cao cấp như:
quản lý dây cáp, khay tháo lắp nhanh ổ cứng, hỗ trợ tản nhiệt nước.
Hình 3.1. Một số kiểu thùng máy
Thùng máy có rất nhiều chuẩn kích thước: full tower, mid tower, case nằm,
… như hình 3.1. Việc lựa chọn thùng máy phải bảo đảm đủ không gian để chứa các
thành phần bên trong như: bản mạch chính, nguồn, cáp, tản nhiệt, các card rời như
card đồ họa, …
28
Để hệ thống vận hành một cách mát mẻ, ổn định, vấn đề tản nhiệt cũng rất
quan trọng. Hầu hết các thùng máy đều có chỗ để đặt quạt tản nhiệt, một số thùng
máy trang bị sẵn quạt tản nhiệt bên trong. Một số thùng máy cao cấp còn trang bị hệ
thống tản nhiệt nước, khi đó hệ thống tản nhiệt có nhiều ống, tương đối phức tạp.
Do đó, việc lắp ráp thùng máy phải hết sức cẩn thận, tỉ mỉ, tránh ảnh hưởng đến
hoạt động của các thành phần bên trong thùng máy. Trong quá trình sử dụng, nếu
nhiệt độ bên trong thùng máy nóng bất thường thì ta cần phải vệ sinh lại thùng máy,
đặc biệt là các lỗ thông gió, bố trí lại dây cáp, hay lắp thêm các quạt tản nhiệt để gia
tăng lưu lượng gió lưu thông trong thùng máy.
Thông thường, các khay để các ổ đĩa như ổ đĩa cứng, ổ đĩa quang, … đã
được làm sẵn trên thùng máy và có kích thước phù hợp với từng loại ổ đĩa. Chỉ có
một số thùng máy dòng mini tower hoặc nhỏ hơn , ta cần phải xem xét bố trí các
linh kiện, ổ đĩa cho thích hơp do không gian bên trong thùng máy này khá chật hẹp.
Một số thùng máy còn hỗ trợ các kiểu kết nối như: cổng USB, lỗ cắm headphone ở
phía trước hay bên hông thùng máy rất tiện lợi trong quá trình sử dụng.
b. Nguồn máy tính
Nguồn máy tính (còn gọi là PSU) là thành phần cấp nguồn cho toàn bộ hoạt
động của máy tính. Việc lựa chọn nguồn rất quan trọng, nếu việc lựa chọn nguồn
không tốt hoặc nguồn hoạt động không ổn định sẽ ảnh hưởng đến tuổi thọ của các
thành phần của máy tính. Hình 3.2 là hình ảnh thực tế của một bộ nguồn máy tính
(hình (a)) và các ngõ ra của bộ nguồn (hình (b)). Một số thông số ta cần phải chú ý
khi lựa chọn nguồn máy tính.
- Công suất danh định: là công suất lớn nhất mà nguồn có thể cung cấp, quá
giá trị này bộ nguồn có thể bị cháy hoặc hệ thống hoạt động không ổn định. Giá trị
này thường được nhà sản xuất in trên bộ nguồn. Ta cần phải dự tính các thành phần
có trong hệ thống để có thể chọn được bộ nguồn thích hợp, không gây quá tải công
suất. Do các nhà sản xuất thường làm bộ nguồn có một vài mức công suất cụ thể,
nên việc lựa chọn nguồn một phần cũng dựa nhiều vào kinh nghiệm. Ví dụ, thông
thường, bộ nguồn có công suất từ 500 đến 600W là đủ cho hệ thống Intel Core-i
mới, có sử dụng card đồ họa.
29
- Hiệu suất: thể hiện mức độ sử dụng điện năng hiệu quả của bộ nguồn, có
giá trị nhỏ hơn 1. Trong quá trình hoạt động, một lượng điện năng thất thoát ra
ngoài dưới dạng nhiệt, do đó, công suất tiêu thụ thực tế thường lớn hơn công suất
trên lý thuyết, công suất này được tính qua hiệu suất của bộ nguồn. Ví dụ, một hệ
thống tiêu thụ công suất 400W, bộ nguồn có hiệu suất 80% thì công suất tiêu thụ
thực tế khi hoạt động là 400/0,8 = 500W. Ta nên chọn bộ nguồn có hiệu suất càng
lớn càng tốt.
(b) (a)
Hình 3.2. Bộ nguồn máy tính
- Điện thế và dòng điện ra: thường được các nhà sản xuất in trên bộ nguồn.
Điện thế ra đã được chuẩn hóa, bao gồm các mức: +12V, +5V, +3,3V, -5V và -12V.
Với mỗi mức điện thế ra, các dòng điện ra sẽ khác nhau tùy vào nhà sản xuất.
Thông thường, ta chỉ chú ý đến việc lựa chọn bộ nguồn có dòng ra thích hợp khi
trong hệ thống có thành phần cần dòng lớn như card đồ họa.
Hầu hết các nhà cung cấp đều trang bị cho bộ nguồn các tính năng bảo vệ
như: bảo vệ quá công suất, bảo vệ quá dòng, bảo vệ ngắn mạch. Các bộ nguồn
thường ngưng hoạt động khi xảy ra các sự cố trên.
Một số thương hiệu nguồn nổi tiếng ở Việt Nam: Arrow, ACbel, Cooler
Master, Cosair, Fsp, …
3.2. Mainboard
30
Mainboard (còn được gọi là bản mạch chính) là một bản mạch in chứa các
linh kiện điện tử điều khiển hoạt động của máy tính, các đế cắm (socket) và các khe
cắm (slot) để kết nối các thành phần mở rộng hỗ trợ cho máy tính như hình 3.3.
Hình 3.3. Mainboard máy tính
Ngoài ra, từ hình 3.4 ta thấy mainboard còn chứa các cổng ngõ ra để kết nối
với các thiết bị ngoại vi như: USB (kết nối với các thiết bị lưu trữ, chuột, bàn phím,
máy in, …), VGA (còn gọi là D-Sub, kết nối với màn hình, máy chiếu), PS/2 (kết
nối với chuột, bàn phím), HDMI, DVI (kết nối với màn hình, tivi, máy chiếu),
ethernet (kết nối mạng), các lỗ cắm micro và loa, … Các mainboard đời cũ còn có
thêm các cổng như: COM, máy in (LPT). Sau đây, ta sẽ tìm hiểu một số thông số kỹ
thuật của mainboard.
Hình 3.4. Các cổng ra trên mainboard
31
- Chipset: là bộ phận quyết định đến công nghệ và các chức năng của
mainboard, nó xử lý giao tiếp giữa các thành phần có trên mainboard và các thiết bị
ngoại vi. Hiện nay, hai thương hiệu cung cấp chipset nổi tiếng là Intel và AMD. Các
chipset đi kèm với mainboard nên các nhà sản xuất thường lấy mã số chipset để đặt
tên cho chủng loại mainboard. Ví dụ, mainboard Asus H81M-A sử dụng chipset
Intel H81, mainboard Gigabyte F2A68HM-HD2 sử dụng chipset AMD A68H.
- CPU: thông số này cho biết mainboard hỗ trợ loại CPU (đơn vị xử lý trung
tâm) nào. Các thương hiệu cung cấp chipset là Intel và AMD, cũng đồng thời cung
cấp các loại CPU. Chipset của thương hiệu nào sẽ hỗ trợ cho CPU của thương hiệu
đó. Một thông số khác cũng cần phải chú ý thường đi kèm với CPU, đó là socket.
Thông số này cho biết chuẩn chân cắm của CPU mà mainboard hỗ trợ. Ví dụ,
mainboard Asus H81M-A có các thông số: sk LGA 1150, S/p Intel 4th, có nghĩa là,
mainboard này hỗ trợ các CPU Intel thế hệ thứ 4 và có chuẩn chân cắm là Socket
LGA 1150
- RAM: cho biết loại RAM, tốc độ bus và số lượng khe cắm RAM mà
mainboard đó hỗ trợ. Ví dụ, mainboard Asus H81M-A có thông số như sau: 2x
DDR3 1600/1333/1066, có nghĩa là trên mainboard có 2 khe cắm RAM loại DDR3,
hỗ trợ các tốc độ bus là 1600/1333/1066MHz.
- VGA onboard: thông số này cho biết, mainboard có tích hợp sẵn card đồ
họa. Các mainboard cũ trước đây thường có bộ xử lý đồ họa riêng, đi kèm với
mainboard giống như chipset. Hiện nay, hầu hết các thành phần xử lý đồ họa đã
được tích hợp trong CPU. Các mainboard tích hợp card đồ họa thường có các thông
tin về các loại cổng xuất tín hiệu video trên mainboard. Ví dụ, mainboard có thông
số như sau: VGA onboard S/p D-Sub/DVI/HDMI, có nghĩa là mainboard có hỗ trợ
các ngõ ra video D-Sub, DVI và HDMI.
- PCI Express: thông số này cho biết số lượng và tốc độ khe cắm PCI có trên
mainboard. Ví dụ, 1x PCI-E 2.0 (x16), 2x PCI-E 2.0 (x1), 1x PCI, có nghĩa là trên
mainboard có 1 khe cắm PCI Express, tốc độ x16, 2 khe cắm PCI Express, tốc độ
x1 và 1 khe cắm PCI. Các thông số x16, x1 cho biết tốc độ của cổng PCI thế hệ mới
(PCI Express), số càng lớn cho tốc độ càng cao.
32
- USB: cho biết số lượng và loại cổng USB trên mainboard. Ví dụ,
mainboard có thông số như sau: 2x USB 3.0, 8x USB 2.0, có nghĩa là trên
mainboard có 2 cổng USB loại 3.0 (thế hệ mới) và 8 cổng USB loại 2.0.
- ATA, SATA: cho biết số lượng và loại chân cắm cho ổ đĩa cứng và ổ đĩa
quang. ATA là chuẩn cũ có 40 chân. SATA là chuẩn mới sử dụng dây cắm nhỏ gọn
và tốc độ cao hơn. Ngoài ra, một số mainboard còn sử dụng thêm công nghệ RAID,
cho phép sử dụng nhiều ổ đĩa cứng để tăng dung lượng lưu trữ và an toàn dữ liệu.
Ví dụ, mainboard có thông số như sau: 6x SATA3 (RAID 0, 1, 5, 10), nghĩa là trên
mainboard có 6 chân cắm SATA3 (tốc độ 6Gb/s) và có hỗ trợ chức năng RAID.
- Một số thông số khác: card mạng tích hợp sẵn trên mainboard thường được
biểu diễn bằng thông số: Gigabit LAN hoặc 1Gb/s. Card âm thanh được tích hợp
trên mainboard với các thông số như: 2CH (2 kênh, sử dụng loa stereo), 6CH (6
kênh, sử dụng loa 5.1), 8CH (8 kênh, sử dụng loa 7.1), … Một số mainboard đời cũ
có thêm các cổng COM, LPT (máy in) cũng được thể hiện trong thông số kỹ thuật.
Trên đây là một số thông số cơ bản của mainboard, ta cần phải chú ý tới các
thông số này để có thể lựa chọn mainboard thích hợp với mục đích sử dụng và các
linh kiện phù hợp với mainboard
3.3. CPU
CPU hay còn gọi là đơn vị xử lý trung tâm, được xem là bộ não của hệ thống
máy tính. Ở Việt Nam hiện nay, có hai thương hiệu cung cấp CPU nổi tiếng là Intel
và AMD. Hình 3.5 là Intel Core i7, một trong những CPU thuộc dòng Core i của
Intel.
Hình 3.5. CPU Intel core i7
33
Trước khi công nghệ CPU đa (nhiều) nhân xuất hiện, kỹ thuật chính để tăng
sức mạnh xử lý cho máy tính là bổ sung thêm các CPU. Điều này đỏi hỏi mainboard
phải có nhiều đế cắm CPU hơn, phải có thêm nhiều phần cứng để kết nối CPU với
RAM và nhiều tài nguyên khác. Một hệ thống như vậy được gọi là hệ thống đa
CPU, thường được sử dụng trong các siêu máy tính, máy chủ và các hệ thống cao
cấp. Tuy nhiên, khi đó hệ thống sẽ phức tạp, tiêu tốn nhiều điện năng hơn và đây
không phải là xu hương của công nghệ.
Các CPU thế hệ mới của hai thương hiệu kể trên đều có từ 2 nhân trở lên.
Mỗi nhân là một CPU riêng biệt. Ngày nay, khi công nghệ chế tạo ngày càng phát
triển, kích thước của một transistor ngày càng nhỏ làm cho mật độ tích hợp ngày
càng cao. Người ta đã có thể chế tạo được nhiều CPU kết nối với nhau và đặt trên
cùng một chip (vi mạch đã được đóng gói như hình 3.5). Khi đó chip này được gọi
là một CPU có chứa các CPU nhỏ hơn ở bên trong, được gọi là các nhân hay còn
được gọi là core. Ví dụ, CPU Intel Core i5-2520M có 2 core, nghĩa là CPU này
thuộc thế hệ thứ hai và có 2 nhân, CPU Intel Core i5-4460 có 4 core, nghĩa là CPU
này thuộc thế hệ thứ tư và có 4 nhân. Việc sử dụng công nghệ tiên tiến, tích hợp
nhiều nhân trên cùng một CPU cho phép máy tính có thể thực hiện nhiều công việc
cùng một lúc, nâng cao tốc độ xử lý của máy tính, hạn chế việc bổ sung phần cứng
trên mainboard mà vẫn tiết kiệm điện năng hơn công nghệ cũ.
Các nhân trong CPU như được đề cập trong phần trên là các nhân vật lý.
Trong một số CPU của Intel, mỗi nhân vật lý có thể được chia thành hai nhân nhỏ
hơn, có khả năng xử lý song song, được gọi là các nhân luận lý. Công nghệ chế tạo
này được gọi là siêu phân luồng của Intel. Chỉ có các hệ điều hành hỗ trợ công nghệ
siêu phân luồng mới nhận biết và sử dụng được các nhân luận lý. Đối với hệ điều
hành Window, tất cả các hệ điều hành từ XP trở về sau này đều có hỗ trợ công nghệ
siêu phân luồng. Công nghệ siêu phân luồng Intel giúp hệ điều hành sử dụng tài
nguyên của bộ xử lý hiệu quả hơn, cho phép nhiều luồng xử lý chạy đồng thời trên
mỗi nhân. Trong các bảng thông số kỹ thuật của một CPU, số nhân vật lý được gọi
là core, đối với các CPU của Intel, số nhân luận lý được gọi là thread. Những CPU
có hỗ trợ siêu phân luồng sẽ có số thread gấp đôi số core. Ví dụ, CPU Intel Core i5-
34
4460 không hỗ trợ siêu phân luồng, có 4 core và 4 thread, CPU Intel Core i7-4790
hỗ trợ siêu phân luồng, có 4 core và 8 thread. Một số hệ điều hành có cung cấp các
thông tin này khá rõ, như hệ điều hành Window 8.1 trong hình 3.6.
Hình 3.6. Thông tin về CPU trong hệ điều hành Window 8.1
Một số yếu tố khác ảnh hưởng đến tốc độ xử lý của CPU
- Xung nhịp (xung clock) hoạt động của CPU: tần số xung nhịp càng lớn thì
tốc độ xử lý càng nhanh. Trong bảng thông số kỹ thuật, xung nhịp của CPU là tần
số xung nhịp của từng nhân bên trong CPU. Ví dụ, CPU Intel Core i5-2520M,
2,5GHz, có 2 nhân, nghĩa là ở chế độ bình thường, mỗi nhân hoạt động với tần số
xung nhịp 2,5GHz.
- Bộ nhớ cache: được tích hợp cùng với các nhân bên trong CPU. Cache là
nơi lưu trữ các lệnh và dữ liệu đã từng được thực thi. Cache là các bộ nhớ RAM
tĩnh (SRAM), có tốc độ cao hơn rất nhiều so với bộ nhớ RAM động (DRAM). Do
đó, việc truy cập bộ nhớ cache nhanh hơn rất nhiều so với truy cập bộ nhớ DRAM.
Tuy nhiên, bộ nhớ cache rất đắt và chiếm diện tích lớn nên dung lượng của cache
cũng thường bị hạn chế. Hiện nay, các CPU thường được trang bị nhiều tầng cache,
35
gọi là L1 cache, L2 cache, L3 cache … Tầng cache L1 thường được chia thành
cache chứa lệnh và cache chứa dữ liệu riêng biệt, các tầng cache sau là tầng dùng
chung để chứa cả lệnh và dữ liệu. Tầng cache sau cùng thường có dung lượng lớn
nhất. CPU có dung lượng cache càng lớn thì tốc độ gọi và thực thi lệnh càng cao.
Thông tin về bộ nhớ cache cũng được thể hiện khá rõ trong một số hệ điều hành
như Window 8.1 như trong hình 3.6.
Ngoài ra, bên trong hầu hết các CPU đều được tích hợp bộ xử lý đồ họa
(Intel HD Graphic hoặc AMD Radeon HD), do đó, các máy tính sử dụng các loại
CPU này không cần phải lắp ráp thêm card đồ họa.
Các thế hệ CPU khác nhau sẽ có kiểu chân (socket) khác nhau. Ví dụ, CPU
Intel thế hệ thứ 3 có kiểu chân 1155, thế hệ thứ 4 có kiểu chân 1150, thế hệ thứ 6 có
kiểu chân 1151, CPU AMD dòng A (A-series) có kiểu chân FM2, Phenom II và
Athlon II có kiểu chân AM3. Do đó, ta cần phải lựa chọn mainboard có kiểu socket
phù hợp với CPU đã chọn.
3.4. RAM
RAM còn được gọi là bộ nhớ truy cập ngẫu nhiên, được điều khiển bằng
mạch điều khiển bộ nhớ được đặt trên chipset (đối với các mainboard hỗ trợ CPU
của Intel) hoặc trên CPU (đối với các mainboard hỗ trợ CPU của AMD). Một đặc
điểm của bộ nhớ này là: dữ liệu trong bộ nhớ sẽ bị xóa khi không được cung cấp
điện. Do đó, RAM còn được gọi là bộ nhớ tạm. Đây là một trong những thành phần
cơ bản và cần thiết nhất bên cạnh CPU và mainboard để có thể khởi động được một
chiếc máy tính. Chương trình thường được lưu trên ổ đĩa cứng. Khi một máy tính
muốn thực thi một chương trình, trước tiên chương trình này sẽ được chép vào bộ
nhớ RAM (có tốc độ cao hơn ổ đĩa cứng), sau đó CPU sẽ đọc và thực thi chương
trình từ bộ nhớ RAM. Vì vậy, dung lượng và tốc độ của RAM có ảnh hưởng rất lớn
đến tốc độ hoạt động của hệ thống. Mainboard thường có các khe cắm RAM để
trống như hình 3.7, ta phải lựa chọn loại RAM thích hợp để cắm vào các khe này.
Hiện nay, RAM máy tính để bàn có ba loại, đó là: DDR2, DDR3 và loại mới
nhất là DDR4, tên gọi đầy đủ là: DDR2 SDRAM, DDR3 SDRAM và DDR4
SDRAM. Loại sau là nâng cấp của loại trước, nên thường có dung lượng lớn hơn,
36
tốc độ cao hơn và công nghệ tiên tiến hơn. Như trong hình 3.8, ta thấy hình dạng
các loại RAM này không tương thích với nhau. Do đó, ta không thể lấy loại RAM
này cắm vào khe cắm của loại RAM khác. Thông thường, một mainboard chỉ có
một loại khe cắm RAM, chỉ có một số ít mainboard hỗ trợ hai loại khe cắm như
hình 3.7.
b) DDR3 và DDR4
Hình 3.7. Các khe cắm RAM trên mainboard
a) DDR2 và DDR3
Hình 3.8. Sự khác biệt giữa các loại RAM
RAM hoạt động dựa trên xung nhịp được cung cấp từ mạch điều khiển. Tần
số của xung nhịp này được quy ước là các giá trị cố định tính bằng MHz như: 800
(DDR2), 1333, 1600, 1866 (DDR3), 2400 (DDR3, DDR4), 2133, 2800, 3000
(DDR4), … Các thông số này thường đi kèm với tên RAM như: DDR3 1333 hoặc
DDR3 bus 1333. Tuy nhiên, do đặc tính của các loại RAM dạng DDR, có khả năng
truyền hai dữ liệu trong cùng một chu kỳ nên tốc độ dữ liệu trên lý thuyết của RAM
DDR là: 2 x tốc độ xung nhịp x số bit truyền của mỗi dữ liệu / 8, đơn vị tính là
MB/s. Hầu hết các loại RAM hiện tại có đường bus dữ liệu 32 bit, do đó tốc độ của
37
RAM là: 2 x tốc độ xung nhịp x 32 / 8 = 8 x tốc độ xung nhịp. Ví dụ, đối với DDR3
bus 1600, tốc độ dữ liệu trên lý thuyết sẽ là: 8 x 1600 = 12800 (MB/s), được thể
hiện dưới dạng PC12800. Hai thông số này thường đi kèm với nhau trong đặc tính
kỹ thuật của RAM như DDR3 bus 1600 PC12800. Các mainboard hiện nay chỉ hỗ
trợ một hoặc hai loại RAM (đối với các mainboard đời cũ) và một số tốc độ bus
RAM nhất định, do đó ta cần phải chú ý tới các thông số này để lựa chọn loại RAM
và tốc độ bus phù hợp với mainboard nhằm tối ưu hóa tốc độ hoạt động của hệ
thống.
Công nghệ dual channel (kênh đôi) cho phép tăng gấp đôi độ rộng đường dữ
liệu của RAM, do đó tăng tốc độ truy xuất dữ liệu đến RAM, cải thiện tốc độ của hệ
thống. Chỉ những bộ nhớ RAM giống nhau và đi theo từng cặp mới sử dụng được
công nghệ này. Để có thể kích hoạt công nghệ dual channel, ta cần phải có một số
điều kiện như sau:
Chipset và mainboard (đối với CPU của Intel) hoặc CPU (đối với CPU của
AMD) phải hỗ trợ công nghệ dual channel.
Số thanh RAM cắm trên mainboard phải là số chẵn (2 hoặc 4 RAM)
Các thanh RAM cắm trên mainboard phải hoàn toàn giống nhau (loại RAM,
tốc độ bus)
Hầu hết các mainboard hiện nay đều hỗ trợ công nghệ dual channel, các khe
cắm RAM dual channel trên các mainboard này thường có màu sắc giống nhau. Ví
dụ, mainboard trong hình 3.7 có các khe cắm cùng màu (đỏ, vàng, lục) hỗ trợ công
nghệ dual channel. Thông thường, hệ thống sẽ tự động kích hoạt dual channel khi
hai thanh RAM được cắm vào đúng vị trí (cùng màu). Do đó, để tối ưu tốc độ hệ
thống bằng cách sử dụng công nghệ dual channel ta nên lựa chọn dung lượng RAM
và số thanh RAM là một số chẵn. Ví dụ, thay vì chọn một thanh RAM DDR3 2GB
ta nên chọn hai thanh RAM DDR3 1GB giống nhau và cắm trên hai khe cắm cùng
màu của mainboard.
Dung lượng RAM cũng có nhiều mức: 256MB, 512MB (các RAM đời cũ),
1GB, 2GB hoặc 4GB. Với kỹ thuật thiết kế ngày càng cao, công nghệ chế tạo ngày
càng tiên tiến, hiện nay dung lượng các loại RAM đời mới có thể đạt đến 8GB
38
(DDR3, DDR4) và 16GB (DDR4). Tuy nhiên, mỗi phiên bản hệ điều hành khác
nhau sẽ có mức giới hạn dung lượng RAM tối đa khác nhau. Bảng 3.1 là một ví dụ
đối với hệ điều hành Window 7. Theo đó, các hệ điều hành Window 7 nền tảng 32
bit (trừ Starter) có giới hạn dung lượng RAM đến 4GB, có nghĩa là dù hệ thống có
nhiều hơn 4GB RAM thì các hệ điều hành loại này cũng chỉ sử dụng được tối đa
4GB RAM. Muốn sử dụng được nhiều dung lượng RAM hơn ta phải cài các phiên
bản hệ điều hành 64 bit. Do đó, ta cần chú ý tới đặc điểm này để chọn RAM và hệ
điều hành phù hợp, tránh tình trạng lãng phí dung lượng RAM.
Bảng 3.1. Giới hạn dung lƣợng RAM của các phiên bản hệ điều hành Win 7
Phiên bản Window 7
Giới hạn trên 32 bit 4 GB 4 GB 4 GB 4 GB 4 GB 2 GB Giới hạn trên 64 bit 192 GB 192 GB 192 GB 16 GB 8 GB Không có phiên bản này
Window 7 Ultimate Window 7 Enterprise Window 7 Professional Window 7 Home Premium Window 7 Home Basic Window 7 Starter 3.5. BIOS VÀ CMOS RAM
BIOS là chương trình quản lý các thao tác khởi động máy tính và chứa các
thông tin về thành phần cơ bản của mainboard . Tất cả các mainboard đều có một bộ
nhớ ROM để chứa chương trình BIOS nên bộ nhớ này còn gọi là ROM BIOS. Một
số nhà sản xuất ROM BIOS lớn hiện nay là: Phoenix, AMI, Award, … Thông
thường, ta không thể thay đổi được nội dung của ROM BIOS do ROM là bộ nhớ chỉ
đọc, tuy nhiên, ngày nay, bộ nhớ ROM truyền thống đã được thay thế bằng bộ nhớ
flash, do đó, ta có thể nạp lại BIOS bằng các kit nạp và chương trình nạp thích hợp.
ROM BIOS có hai loại: loại được cắm trên socket của mainboard (hình 3.9 (a)) và
loại được hàn cứng trên mainboard (hình 3.9 (b)).
Mainboard chỉ chứa các thành phần cơ bản của máy tính, trong quá trình
hoạt động, mainboard có thể được kết nối với rất nhiều thiết bị với rất nhiều cấu
hình khác nhau, do đó không thể lưu cố định cấu hình của hệ thống trong ROM
BIOS. Để khắc phục vấn đề này, người ta sử dụng một bộ nhớ RAM có khả năng
đọc/ghi để chứa cấu hình của hệ thống, gọi là bộ nhớ NVRAM hay là CMOS RAM.
Người dùng có thể sử dụng chương trình BIOS SETUP chứa trong BIOS để thay
39
đổi một số thông tin trong CMOS RAM như: thứ tự đọc đĩa khởi động (boot), ngày
giờ hệ thống, bật/tắt các cổng xuất/nhập, mật khẩu đăng nhập vào hệ thống, … Do
dữ liệu trong CMOS RAM bị mất khi ngừng cấp điện, nên để duy trì dữ liệu trong
CMOS, người ta dùng một viên pin riêng, gọi là pin CMOS. Khi pin CMOS yếu,
ngày giờ hệ thống sẽ chạy sai hoặc ta nhận được thông báo chạy BIOS SETUP mỗi
khi khởi động máy.
(b) (a)
Hình 3.9. Các loại ROM BIOS
Khi khởi động máy tính, BIOS gọi chương trình kiểm tra phần cứng có trong
hệ thống, gọi là chương trình POST. Trong quá trình này, nếu phát hiện một số
thông số phần cứng không phù hợp với các thông tin được lưu trữ trong CMOS
RAM, POST sẽ yêu cầu chạy chương trình BIOS SETUP để khai báo lại cho đúng.
Ví dụ, khi ta gắn thêm RAM, ổ đĩa cứng hoặc ổ đĩa quang … một số hệ thống sẽ tự
động cập nhật, một số khác sẽ yêu cầu người dùng vào BIOS SETUP để cập nhật
các thông tin này.
Sau quá trình POST, BIOS sẽ quét qua tất cả các ổ đĩa có thể có trong hệ
thống để tìm ổ đĩa khởi động đầu tiên (thứ tự quét được định trong CMOS RAM và
có thể thay đổi được). Quá trình này gọi là BOOTSTRAP của BIOS. Sau quá trình
này, hệ thống khởi động vào hệ điều hành và BIOS nhường lại quyền kiểm soát hệ
thống cho hệ điều hành.
3.6. Interfaces
Interfaces còn được gọi là giao diện máy tính. Đây là các thành phần giúp
máy tính có thể giao tiếp với con người và thế giới bên ngoài, phổ biến nhất là các
cổng chuột, bàn phím, màn hình, máy chiếu, Ethernet, eSATA, USB, COM, lỗ cắm
loa, mic, …
40
Cổng giao tiếp chuột và bàn phím: còn được gọi là cổng PS/2 (hình 3.10).
Cổng màu xanh lam thường để kết nối với bàn phím, màu xanh lục để kết nối với
chuột.
Hình 3.10. Các cổng PS/2 dùng cho chuột và bàn phím
Cổng giao tiếp với màn hình và máy chiếu: được gọi là cổng VGA (còn gọi
là D-SUB). Một số chuẩn mới giao tiếp với màn hình như: HDMI, DVI (hình 3.11)
ngoài khả năng truyền tải hình ảnh còn có thể truyền cả âm thanh. Do đó, các chuẩn
này thường được sử dụng cho màn hình tivi.
(a) D-SUB (b) DVI (c) HDMI
Hình 3.11 Các cổng xuất tín hiệu video
Cổng USB: hiện nay có hai chuẩn giao tiếp USB phổ biến với các tốc độ
truyền dữ liệu khác nhau. Chuẩn USB 2.0 ra đời năm 2001, có tốc độ truyền dữ liệu
tối đa 480Mbps và chuẩn USB 3.0 ra đời năm 2009 có tốc độ truyền dữ liệu tối đa
4,8Gbps. USB 3.0 có khả năng tương thích ngược với các thế hệ USB trước, do đó,
hình dạng bên ngoài của cổng USB 3.0 chuẩn A hoàn toàn giống chuẩn A của cổng
USB 2.0. Để phân biệt hai loại cổng USB này ta dựa vào màu sắc hoặc biểu tượng
đi kèm. Cổng USB 2.0 thường có hai màu đen hoặc trắng trong khi cổng USB 3.0
có nhiều màu sắc khác như xanh lam, xanh lục, … Biểu tượng của các chuẩn USB
này cũng có sự khác biệt như trong hình 3.12. USB là cổng đa chức năng, hình dạng
nhỏ, gọn nên ngoài chức năng kết nối với bộ nhớ USB flash, cổng USB còn được sử
41
dụng để kết nối với rất nhiều thiết bị như: chuột, bàn phím, máy in, điện thoại di
động, …
Hình 3.12. Biểu tƣợng của các chuẩn USB 2.0 và 3.0
Cổng Ethernet: còn gọi là cổng RJ45 (hình 3.13), kết nối máy tính với mạng
máy tính bên ngoài.
Hình 3.13. Cổng Ethernet
Cổng eSATA: là một biến thể của cổng SATA, dùng để giao tiếp với các ổ
đĩa cứng rời. Tốc độ truyền dữ liệu tối đa của eSATA là 3GBps. Tuy có tốc độ cao
nhưng cáp eSATA chỉ có chiều dài tối đa 2m và không thể cung cấp nguồn nên phải
sử dụng cáp cấp nguồn riêng. Để khắc phục nhược điểm này, hiện nay đã có cổng
eSATAp có thể cung cấp nguồn cho ổ đĩa. Để cho thuận tiên, các nhà sản xuất đã
kết hợp cổng eSATA và USB 2.0 thành một cổng duy nhất gọi là eSATA/USB
Combo (hình 3.14), có thể kết nối cả cáp eSATA và USB.
Hình 3.14. Cổng eSATA/USB Combo
42
Các đường âm thanh vào/ra: dùng để kết nối máy tính với micro và loa. Hiện
nay, hầu hết các mainboard đều hỗ trợ chế độ âm thanh vòm 5.1 hoặc 7.1.
3.7. Chipset
Chipset như đã giới thiệu là một bộ xử lý trên mainboard, có chức năng như
một cầu nối giúp các thành phần trên mainboard (bao gồm cả CPU) có thể giao tiếp
với nhau. Cấu trúc của các chipset thường dựa trên nền tảng của đơn vị xử lý trung
tâm (CPU), do đó, hiện nay trên thế giới cũng chỉ có hai thương hiện cung cấp
chipset lớn, hỗ trợ CPU của họ, đó là: Intel và AMD. Trên các mainboard thế hệ cũ
thường có hai chipset, được gọi là chip cầu bắc (North Bridge) và chip cầu nam
(South Bridge). Chức năng của hai chip này được quy định rõ ràng. Chip cầu bắc
kết nối trực tiếp với CPU, dùng để quản lý việc giao tiếp của CPU với các thành
phần, ngoại vi có tốc độ cao như: RAM, card đồ họa, các cổng PCIe (PCI Express).
Card đồ họa rời nếu có cũng được kết nối thông qua cổng PCIe nên cũng thuộc
quản lý của chip cầu bắc. Chip cầu nam (còn gọi là ICH) quản lý các ngoại vi tốc độ
thấp hơn như: card âm thanh, card mạng, các ổ đĩa cứng (SATA, PATA), các cổng
USB, cổng nối tiếp (COM, PS/2), ROM BIOS, CMOS, các cổng PCI chuẩn (tốc độ
thấp hơn PCIe). Chip cầu nam kết nối với CPU thông qua chip cầu bắc. Hình 3.15
mô tả mối liên hệ giữa các chipset, ngoại vi và CPU. Để một hệ thống vận hành tốt,
mềm mại, các chipset và CPU phải hoạt động một cách đồng bộ, do đó, chipset
thường đi theo cặp và hỗ trợ một vài dòng CPU cụ thể. Ví dụ, hình 3.16 là cặp
chipset Intel G33 và ICH9 hỗ trợ các dòng CPU Intel Pentium 4, Pentium D, Dual
Core, Core 2 Duo, Core 2 Quad.
Các chipset trực tiếp quản lý các ngoại vi của một hệ thống máy tính, do đó,
các thành phần trên một mainboard phụ thuộc vào chipset sử dụng trên mainboard
đó. Ví dụ, chip cầu bắc Intel G33 có thể quản lý các bộ nhớ RAM DDR2 bus
667/800 và DDR3 bus 800/1600, dung lượng RAM tối đa 8GB, tích hợp card đồ
họa Intel hỗ trợ các ngõ ra VGA, HDMI, DVI, hỗ trợ một cổng PCIe x16, vì vậy,
các mainboard sử dụng chip G33 sẽ có các khe cắm RAM DDR2 hoặc DDR3
nhưng tổng dung lượng tối đa là 8GB, trên mainboard chỉ có tối đa một khe cắm
PCIe x16 và ngõ ra video có thể có các cổng VGA, HDMI và DVI. Có thể nói
43
chipset là thành phần quyết định công nghệ sử dụng trên mainboard, do đó các nhà
sản xuất thường lấy tên của chipset đặt tên cho mainboard sử dụng chipset đó.
Hình 3.15. Kết nối giữa các chipset, ngoại vi và CPU
Hình 3.16. Chipset G33 và ICH9
Hiện nay, với kỹ thuật thiết kế và công nghệ chế tạo ngày càng tiên tiến, Intel
và AMD đã tích hợp cả bộ điều khiển RAM, PCIe và card đồ họa vào CPU, nên
chip cầu bắc không còn cần thiết. Các mainboard sử dụng nền tảng chipset thế hệ
mới chỉ còn chip cầu nam.
3.8. Ổ đĩa cứng
44
Ổ đĩa cứng là thành phần rất quan trọng trong hệ thống máy tính, dùng để
lưu trữ tất cả dữ liệu cá nhân (bao gồm cả hệ điều hành). Hiện nay, có hai loại ổ đĩa
cứng, đó là ổ cứng truyền thống, còn gọi là HDD và thế hệ ổ cứng mới là ổ cứng thể
rắn, còn gọi là SSD.
Ổ cứng truyền thống HDD là thiết bị lưu trữ dữ liệu trên bề mặt các tấm đĩa
hình tròn làm bằng nhôm, thủy tinh hoặc gốm được phủ vật liệu từ tính, gọi là
platter. Hình 3.17 mô tả cấu tạo cơ bản của HDD. Các đĩa platter được xếp đồng
trục, trục xuyên tâm các đĩa gọi là spindle, được gắn trực tiếp với một động cơ quay
ổ đĩa cứng. Bề mặt cả mỗi đĩa được chia thành những đơn vị nhỏ dùng để xác định
vị trí của dữ liệu. Các đường tròn đồng tâm trên bề mặt đĩa gọi là track. Mỗi track
được chia thành những cung nhỏ hơn gọi là sector. Sector là đơn vị chứa dữ liệu
nhỏ nhất của HDD, thông thường mỗi sector có dung lượng 512 byte. Số sector trên
mỗi track không bằng nhau, các track ở phần rìa đĩa thường có số sector nhiều nhất,
các track ở phần gần tâm đĩa thường có số sector ít nhất. Cung tròn tập hợp nhiều
sector liền kề nhau gọi là cluster. Tập hợp các track có cùng bán kính ở các mặt đĩa
khác nhau gọi là cylinder.
(b) Các thành phần cơ bản của HDD (a) Hình dạng cơ bản của HDD
Hình 3.17. Ổ đĩa cứng HDD
Để đọc/ghi dữ liệu, ổ đĩa cứng có các đầu đọc tiếp xúc với các bề mặt đĩa
platter. Các đầu đọc được gắn trên cơ cấu truyền động để có thể di chuyển đến các
cylinder khác nhau. Cơ cấu truyền động này được điều khiển bằng một bộ vi mạch
nhỏ ở ngoài. Khi cần truy xuất dữ liệu, vi mạch này điều khiển đầu đọc đến đúng vị
45
trí trên các đĩa từ khi đĩa đang quay ở tốc độ cao, đồng thời giải mã các tín hiệu từ
tính thành dữ liệu mà máy tính có thể hiểu được.
Một số thống số của ổ đĩa cứng HDD:
Chuẩn giao tiếp: hai chuẩn giao tiếp phổ biến nhất cho máy tính cá nhân là
ATA và SATA như hình 3.18. Chuẩn ATA bao gồm hai chuẩn IDE và EIDE,
SATA hiện tại gồm ba chuẩn: SATA (còn gọi là SATA 1), SATA 2 và SATA 3.
Ngoài ra ổ đĩa cứng còn có các chuẩn sử dụng cho server như: SAS, SCSI. Bảng 3.2
là tốc độ truy xuất dữ liệu tối đa của các chuẩn. Theo đó, chuẩn ATA có tốc độ thấp
hơn rất nhiều so với chuẩn SATA mới nhất, cáp giao tiếp của SATA cũng nhỏ gọn
hơn của ATA. Do đó, hiện nay, hầu hết các ổ đĩa cứng ATA đã được thay thế bằng
ổ đĩa cứng SATA.
(a) Chuẩn IDE (b) Chuẩn SATA
Hình 3.18. Các chuẩn IDE và SATA trên mainboard
Bảng 3.2. Tốc độ truy xuất dữ liệu tối đa của các chuẩn ổ đĩa cứng
Loại ổ đĩa ATA SATA 1 SATA 2 SATA 3 Tốc độ truy xuất dữ liệu (MB/s) 133 150 300 600
Dung lượng của ổ đĩa cứng trong máy tính cá nhân hiện nay đã đạt tới hàng
trăm gigabyte (GB) đến vài tetrabyte (TB). Trong tương lai, với công nghệ ngày
càng phát triển, dung lượng ổ đĩa cứng sẽ ngày càng lớn.
Tốc độ quay của ổ đĩa cứng được tính bằng số vòng quay trong một phút, ký
hiệu là rpm. Tốc độ quay càng cao thì tốc độ tìm kiếm dữ liệu càng nhanh. Hiện
nay, tốc độ quay thông dụng của các ổ đĩa cứng SATA là 7200 rpm.
46
Bộ nhớ đệm (còn gọi là cache của ổ đĩa cứng) có chức năng lưu trữ dữ liệu
tạm thời trong quá trình làm việc của ổ đĩa cứng, có ảnh hưởng lớn đến tốc độ truy
xuất dữ liệu. Hiện nay, dung lượng bộ nhớ đệm thay đổi từ 16MB đến 64MB, tùy
theo nhà sản xuất.
Kích thước: để đảm bảo cho việc lắp ráp, kích thước của ổ đĩa cứng đã được
chuẩn hóa. Các ổ cứng thế hệ cũ có kích thước 5,25 inch, các ổ cứng thế hệ mới
hiện tại dùng cho máy tính để bàn cá nhân có kích thước 3,5 inch, dùng cho laptop
có kích thước 2,5 inch.
Ổ đĩa cứng HDD còn được trang bị công nghệ S.M.A.R.T. Đây là công nghệ
tự động giám sát tình trạng của ổ đĩa HDD để dự báo các hư hỏng có thể xảy ra giúp
người dùng chuẩn bị có phương án giải quyết. Khi S.M.A.R.T báo lỗi, ta nên chuẩn
bị một ổ đĩa cứng khác để sao lưu dữ liệu.
Hiện nay, ngoài ổ đĩa cứng cơ truyền thống (HDD), còn có một loại ổ đĩa
cứng hoạt động hoàn toàn bằng điện, đó là ổ cứng thể rắn, còn gọi là SSD. Không
giống như ổ cứng cơ, cấu tạo bên trong của SSD bao gồm các chip điều khiển và
nhiều chip nhớ flash được kết nối trên một bản mạch in như hình 3.19. Do đó, ổ
cứng SSD có rất nhiều ưu điểm so với ổ đĩa cứng HDD.
Hình 3.19. Ổ đĩa cứng SSD
Tốc độ truy xuất dữ liệu rất nhanh. Thời gian tìm kiếm dữ liệu của ổ đĩa SSD
nhanh hơn HDD từ 80 đến 100 lần. Ta thấy điều này rõ nhất khi khởi động máy tính
hoặc khi chạy các chương trình, máy tính sử dụng SSD gần như khởi động vào hệ
điều hành ngay lập tức, trong khi máy tính sử dụng HDD có thời gian khởi động
khá lâu.
Do không có động cơ nên SSD không phát sinh tiếng ồn khi sử dụng.
47
SSD tiêu hao năng lượng ít hơn HDD từ 30% đến 60%. Độ tin cậy cao hơn: các ổ đĩa HDD có cấu tạo cơ khí, do đó chỉ cần một sai
lệch nhỏ khi có va chạm cũng sẽ làm mất hoặc sai dữ liệu. Các ổ SSD có cấu tạo từ
các chip điều khiển và chip nhớ nên có khả năng chống sốc cao, tránh nguy cơ mất
dữ liệu khi có va chạm.
Kích thước, hình dáng của SSD nhỏ, gọn hơn rất nhiều so với HDD. Kích
thước SSD chuẩn sử dụng cho máy tính cá nhân để bàn là 2,5 inch
Tuy vậy, SSD cũng có một vài khuyết điểm so với HDD. Ổ đĩa SSD có giá
khá đắt so với HDD. Ở cấp độ người dùng phổ thông, dung lượng của SSD vẫn còn
khá thấp, phổ biến từ 120GB đến 512GB.
Mỗi loại ổ đĩa cứng đều có những ưu điểm riêng. Hiện tại, hai loại ổ đĩa này
đang được sử dụng song song, ta nên xác định rõ mục đích sử dụng của máy tính để
chọn loại ổ đĩa cứng cho phù hợp.
Ổ đĩa cứng là nơi chứa tất cả dữ liệu cá nhân, để tránh những trường hợp rủi
ro có thể làm mất những dữ liệu quan trọng, ta nên thường xuyên sao lưu dữ liệu
bằng một ổ cứng rời hoặc lưu trữ các dữ liệu cần thiết lên mạng.
3.9. Ổ đĩa quang
Ổ đĩa quang là thiết bị đọc hoặc ghi các loại đĩa quang như CD hay DVD.
Nếu phân chia theo khả năng đọc và ghi, ổ đĩa quang có thể được chia thành hai
loại:
CD/DVD ROM: ổ đĩa quang chỉ có khả năng đọc đĩa
CD/DVD WR: ổ đĩa quang có khả năng đọc và ghi đĩa
Thông số quan trọng nhất của một ổ đĩa quang là tốc độ đọc/ghi dữ liệu. Ví
dụ, một ổ đĩa quang có các thông số kỹ thuật như sau: DVD WR, DVD R24 W24
RW8, VCD R48 W48 RW32 có nghĩa là: ổ đĩa quang này có khả năng đọc và ghi
DVD/CD, đối với đĩa DVD, tốc độ đọc: 24X, ghi: 24X, xóa: 8X, và 1X tương ứng
là 1,32MB/s, đối với đĩa CD, tốc độ đọc: 48X, ghi: 48X và xóa: 32X và 1X tương
ứng là 150KB/s.
Với các ổ đĩa quang thế hệ cũ, chuẩn giao tiếp với mainboard là IDE. Giống
như ổ đĩa cứng HDD, hiện nay, chuẩn SATA đã thay thế chuẩn IDE trong các ổ đĩa
quang.
48
Hiện nay, với sự tiện lợi của USB, ổ đĩa quang ít được sử dụng trong các
máy tính cá nhân, đặc biệt là trong các laptop.
3.10. Màn hình
Màn hình là thiết bị dùng để hiển thị, giúp con người giao tiếp với máy tính
một cách trực quan hơn. Hiện nay, màn hình máy tính được chia thành hai loại:
CRT và LCD. CRT là công nghệ cũ, màn hình cồng kềnh, chiếm diện tích lớn. LCD
hiện tại là công nghệ mới làm màn hình nhỏ, gọn hơn CRT rất nhiều, vì vậy, LCD
cũng đang dần thay thế CRT trong công nghệ màn hình máy tính.
Hiện nay, có bốn chuẩn giao tiếp giữa màn hình với mainboard là: VGA,
DVI, HDMI và Display port. Hầu hết các thương hiệu cung cấp màn hình đều có hỗ
trợ các chuẩn này. Tuy nhiên, tùy theo từng dòng sản phẩm, màn hình chỉ được
trang bị một số cổng theo các chuẩn trên.
CÂU HỎI ÔN TẬP CHƢƠNG 3
1. Nêu một số thông số ta cần phải lưu ý khi chọn nguồn cho máy tính.
2. Thành phần nào quyết định công nghệ của mainboard? Vì sao? Dấu hiện nhận
biết mainboard đã được tích hợp card đồ họa hay chưa?
3. Công nghệ siêu phân luồng là gì? Lấy ví dụ cụ thể
4. Công nghệ kênh đôi (dual channel) là gì? Điều kiện về phần cứng để có thể sử
dụng được công nghệ dual channel.
5. Giải thích thông số sau: DDR2 bus 800MHz PC6400
6. Trình bày chức năng của BIOS và CMOS RAM..
7. Trình bày chức năng của chipset.
8. Trình bày những ưu điểm và nhược điểm của ổ đĩa cứng truyền thống (HDD) và
ổ cứng thể rắn (SSD).
9. Mainboard Gigabyte H81M-DS2 có các thông số sau: sk LGA 1150, s/p Intel
i3/i5/i7, Chipset Intel H81, 2DDR3 1600/1333 MHz up to 16GB, Graphics Port: D-
Sub, 1 x PCIe x16, Sound 7.1 ch, LAN Realtek 1GB, 6 USB 2.0, 2 USB 3.0, 2 Sata3,
2 Sata2, 1 COM, 1 LPT. Hãy giải thích các thông số trên.
49
Chƣơng 4. CẤU TRÚC BÊN TRONG MÁY TÍNH
4.1. Vi xử lý
4.1.1. Kiến trúc
Vi xử lý trong máy tính, còn gọi là đơn vị xử lý trung tâm hoặc CPU, là
thành phần rất quan trọng, không thể thiếu trong cấu trúc của một máy tính. Chức
năng chính của đơn vị xử lý trung tâm là điều khiển hoạt động của máy tính theo ý
định của người sử dụng. Để thực hiện được công việc này, vi xử lý phải đọc và thực
thi các lệnh được mã hóa dưới dạng số nhị phân và được lưu trong bộ nhớ.
Một bộ vi xử lý có thể được chia thành hai thành phần chính. Thành phần thứ
nhất là đường dữ liệu, bao gồm các thành phần nhỏ hơn như: bộ nhớ (thanh ghi),
đơn vị xử lý số học và các đơn vị luận lý (logic) khác được kết nối với nhau thông
qua các đường bus. Các thành phần này hoạt động đồng bộ theo xung một clock.
Thành phần thứ hai là đơn vị điều khiển, hoạt động tuần tự có chức năng điều khiển,
bảo đảm đưa đúng dữ liệu đến đúng chỗ và đúng thời điểm. Việc kết hợp hai thành
phần trên giúp vi xử lý thực thi các lệnh theo các trình tự như sau: gọi lệnh, giải mã
lệnh, thực thi lệnh.
Sau đây, ta xét vi xử lý 8086, là một trong những vi xử lý thuộc thế hệ đầu,
đặt nền tảng cho các dòng vi xử lý cao cấp sau này của Intel. Hình 4.1 mô tả cấu
trúc cơ bản của vi xử lý 8086.
Đường dữ liệu của 8086 bao gồm:
Các thanh ghi 16 bit: AX, BX, CX, DX, IP, thanh ghi tạm, … dùng để
lưu trữ dữ liệu
Khối ALU: dùng để thực thi các phép toán luận lý và số học
Khối logic điều khiển bus: có chức năng giao tiếp với bus bên ngoài vi xử
lý
Khối logic tính toán địa chỉ: dùng để tính toán địa chỉ cần truy xuất dữ
liệu
Tất cả các khối trên được kết nối với nhau thông qua các đường bus nội
(bus bên trong vi xử lý)
50
Đơn vị điều khiển (CU) nhận lệnh từ hàng lệnh và tạo các tín hiệu ngõ ra
thích hợp điều khiển hoạt động các thành phần của đường dữ liệu
Hình 4.1. Cấu trúc cơ bản của vi xử lý Intel 8086
Vi xử lý Intel 8086 hoạt động theo xung nhịp clock có tần số khoảng 5MHz.
Từ nền tảng cấu trúc này, Intel tiếp tục có những cải tiến nhằm tăng khả năng xử lý,
tốc độ thực thi lệnh như: mở rộng độ dài thanh ghi từ 16 lên 32 bit, bổ xung thêm bộ
nhớ cache, …, các CPU hiện tại của Intel còn có thêm các đơn vị điều khiển bộ nhớ
RAM và xử lý đồ họa.
4.1.2. Cấu trúc pipeline
Như đã giới thiệu tổng quát ở phần trên, hoạt động của vi xử lý được quy
định bằng một chương trình viết bằng các lệnh cụ thể, được mã hóa dưới dạng các
số nhị phân và lưu trữ trong bộ nhớ. Để thực thi các lệnh này vi xử lý phải thực hiện
nhiều bước nhỏ khác theo trình tự, giả sử bao gồm:
Gọi lệnh: đọc lệnh từ bộ nhớ
Giải mã lệnh: xác định chức năng của lệnh vừa gọi và tính toán các địa chỉ
cần thiết
51
Gọi toán hạng
Thực thi lệnh và lưu trữ kết quả
Giả sử mỗi bước nhỏ này được thực thi trong một chu kỳ xung máy (bao
gồm nhiều chu kỳ xung clock tùy theo từng loại vi xử lý). Do đó, để thực thi một
lệnh, vi xử lý cần ít nhất 4 chu kỳ máy. Điều này làm giảm tốc độ và không khai
thác hết khả năng hoạt động của các khối thực thi lệnh. Kỹ thuật pipeline (còn gọi
là đường ống) được sử dụng để khắc phục nhược điểm này. Mỗi bước nhỏ trên
được gọi là một tầng pipeline, giả sử được đánh dấu từ S1 đến S4. Pipeline là kỹ
thuật thiết kế cho phép các tầng thực thi lệnh hoạt động song song. Xét một ví dụ
cho trường hợp pipeline 4 tầng như hình 4.2. Một lệnh được thực thi xong sau khi vi
xử lý hoàn thành việc thực thi tầng cuối cùng (S4) của lệnh đó. Từ hình vẽ ta thấy,
bắt đầu từ chu kỳ thứ 2 trở về sau, các tầng của lệnh sẽ được thực thi song song. Ở
chu kỳ thứ 2, trong lúc giải mã lệnh thứ nhất (S2) thì lệnh thứ 2 được gọi (S1). Ở
chu kỳ thứ 3, trong lúc gọi toán hạng (S3) của lệnh thứ nhất thì lệnh thứ 2 được giải
mã (S2) và lệnh thứ 3 được gọi (S1). Quá trình hoạt động liên tục như vậy, do đó,
bắt đầu từ chu kỳ thứ 4 trở về sau, mỗi lệnh sẽ được thực hiện trong một chu kỳ
máy. Vì vậy, trên lý thuyết, với kỹ thuật pipeline, vi xử lý chỉ tốn một chu kỳ máy
để thực thi một lệnh.
Hình 4.2. Kỹ thuật pipeline 4 tầng
Tuy nhiên, trên thực tế, có một số yếu tố ảnh hưởng làm cho kỹ thuật
pipeline không hoạt động đúng theo lý thuyết:
Tốc độ hoạt động của bộ nhớ thường chậm hơn rất nhiều so với vi xử lý, do
đó việc truy xuất bộ nhớ để lấy dữ liệu phục vụ cho một lệnh thường tốn nhiều hơn
một chu kỳ máy.
52
Dữ liệu phụ thuộc: đây là trường hợp lệnh sau sử dụng kết quả từ lệnh trước
đó. Ví dụ trong hình 4.2, giả sử tại chu kỳ thứ 4, tẩng S3 của lệnh thứ 2 gọi một
toán hạng là kết quả của lệnh thứ 1 trong khi lệnh thứ 1 đang thực thi tầng cuối
cùng (S4), tức là lệnh thứ 1 chưa có kết quả nhưng lệnh thứ 2 đã có yêu cầu sử dụng
kết quả của lệnh thứ 1. Khi đó, lệnh sau phải chờ đến khi hoàn thành lệnh trước, kéo
dài thời gian thực thi lệnh của vi xử lý.
Trên thực tế, một chương trình có rất nhiều lệnh rẽ nhánh làm thay đổi luồng
chương trình, các lệnh thực thi không theo thứ tự sắp xếp trong bộ nhớ. Ví dụ như
trong hình 4.3, giả sử lệnh thứ 3 là một lệnh rẻ nhánh đến lệnh thứ 8. Trong khi lệnh
thứ 3 thực thi tầng cuối cùng (S4) thì các lệnh 4, 5, 6 đã được gọi và thực thi ở các
tầng khác. Tuy nhiên, sau khi thực hiện lệnh thứ 3, lệnh tiếp theo sẽ là lệnh thứ 8
mà không phải là lệnh thứ 4. Do đo, quy trình phải được xóa và làm lại từ đầu với
lệnh thứ 8. Vấn đề này làm cho kỹ thuật pipeline không hiệu quả, đôi khi còn làm
quá trình thực thi lệnh chậm hơn bình thường do một chương trình thường có rất
nhiều lệnh rẽ nhánh. Thực tế, ta có thể biết lệnh rẻ nhánh ở bước giải mã lệnh, nên
có thể bắt đầu lại quá trình ngay ở bước này. Tuy nhiên, ta lại không biết lệnh sẽ
được rẻ nhánh đến (lệnh tiếp theo ngay sau lệnh rẻ nhánh) đối với các trường hợp rẻ
nhánh có điều kiện.
Hình 4.3. Cấu trúc pipeline có lệnh rẻ nhánh
Để khắc phục các vấn đề trên, các kỹ sư thiết kế đã có một số giải pháp như:
Tích hợp thêm bộ nhớ cache cho vi xử lý, giảm thời gian truy xuất đến bộ
nhớ
53
Thêm khối dự đoán cho lệnh rẻ nhánh có điều kiện dùng để dự đoán lệnh
được rẻ nhánh đến
Sử dụng trình biên dịch để sắp xếp lại luồng thực thi trong chương trình
Sử dụng nhiều đơn vị thực thi lệnh, còn gọi là kỹ thuật superscalar
4.1.3. Kỹ thuật superscalar
Mục đích của kỹ thuật đường ống là tăng tốc độ thực thi lệnh, trong trường
hợp lý tưởng, một lệnh sẽ được thực thi trong một chu kỳ máy. Tuy nhiên, mục đích
này gần như không thể đạt được do một số yếu tố đã được nêu ở phần trên, trong
đó, dữ liệu phụ thuộc là yếu tố có ảnh hưởng nhiều nhất do tính chất của một
chương trình, một lệnh thường sử dụng kết của một lệnh khác. Kỹ thuật superscalar
được thiết kế để giải quyết vấn đề này, đồng thời làm tăng tốc độ thực thi lệnh.
Kỹ thuật superscalar sử dụng nhiều đường ống (pipeline), các đường ống
này hoạt động song song. Do đó, sẽ có nhiều lệnh được gọi và giải mã tại cùng một
thời điểm. Một thành phần được thiết kế bổ sung để xác định các lệnh phụ thuộc và
không phụ thuộc. Các lệnh không phụ thuộc sẽ được thực thi đồng thời, các lệnh
phụ thuộc sẽ được thực thi tuần tự.
Kỹ thuật superscalar khắc phục được vấn đề dữ liệu phụ thuộc của đường
ống, nhưng phần cứng phức tạp hơn so với bình thường. IBM RS/6000 và Intel
Pentium là các dòng vi xử lý đầu tiên sử dụng kỹ thuật này.
4.1.4. Thanh ghi
Thanh ghi là một dạng bộ nhớ bên trong bộ xử lý trung tâm dùng để lưu trữ
thông tin và dữ liệu. Chiều dài thanh ghi có thể là 8, 16, 32 hoặc 64 bit tùy theo
dòng CPU. Đây cũng là một yếu tố quyết định đến công nghệ CPU. CPU 32 hay 64
bit tương ứng thường có các thanh ghi có chiều dài 32 hay 64 bit. Ví dụ, Intel 8086
là vi xử lý 16 bit có các thanh ghi có chiều dài 16 bit
Một vi xử lý thường có hai loại thanh ghi: thanh ghi người dùng và thanh ghi
điều khiển và trạng thái.
a. Thanh ghi người dùng
Thanh ghi người dùng là các thanh ghi mà cấp ngôn ngữ máy có thể tác động
được, nói cách khác một người lập trình có thể sử dụng được các thanh ghi này để
54
viết chương trình cho vi xử lý. Các thanh ghi người dùng thường được sử dụng để
lưu trữ dữ liệu tạm thời trong quá trình thực thi lệnh. Ngoài ra, một vài thanh ghi
còn được chuyên môn hóa, sử dụng cho một mục đích cụ thể. Ví dụ đối với vi xử lý
8086, các thanh ghi AX và CX ngoài chức năng lưu trữ kết quả tạm thời của các
lệnh còn được sử dụng để lưu trữ kết quả phép tính nhân và số lần lặp vòng. Các
thanh ghi này được mặc định sử dụng và không cần phải khai báo trong những câu
lệnh như vậy. Điều này làm cho chương trình gọn hơn đồng thời tối ưu hóa tốc độ
xử lý của phần cứng.
Thanh ghi người dùng có số lượng nhiều nhất và được sử dụng thường xuyên
nhất trong chương trình, hầu hết đều là các thanh ghi đọc/ghi được.
b. Thanh ghi điều khiển và trạng thái
Các thanh ghi điều khiển được sử dụng để lựa chọn các chế độ hoạt động của
vi xử lý. Đây thường là các thanh ghi đọc/ghi được.
Trong quá trình hoạt động, các sự thay đổi của phần cứng và chế độ hoạt
động của vi xử lý thường được thể hiện trong một hoặc một vài thanh ghi đặc biệt,
gọi là thanh ghi trạng thái. Các thanh ghi này là các thanh ghi chỉ đọc (read only),
mọi tác động của người lập trình bằng cách sử dụng ngôn ngữ máy ghi dữ liệu vào
các thanh ghi này đều không có tác dụng
Trong hầu hết các vi xử lý, thanh ghi điều khiển và trạng thái là các thanh
ghi riêng biệt, có địa chỉ khác nhau. Tuy nhiên, cũng có một số trường hợp việc
điều khiển và trạng thái vi xử lý được tích hợp vào một thanh ghi chung nhằm tiết
kiệm tài nguyên thiết kế. Ví dụ với vi xử lý 8086, thanh ghi điều khiển và trạng thái
được tích hợp thành một thanh ghi chung gọi là thanh ghi cờ 16 bit như hình 4.4.
Trong đó, các bit OF, SF, ZF, AF, PF và CF là các bit chỉ trạng thái vi xử lý, các bit
DF, IF và TF là các bit điều khiển vi xử lý. Việc ghi vào thanh ghi này tương ứng là
thao tác điều khiển các chế độ hoạt động của vi xử lý, việc đọc thanh ghi này tương
ứng là thao tác lấy trạng thái của vi xử lý tại thời điểm đọc.
Hình 4.4. Thanh ghi điều khiển và trạng thái của vi xử lý 8086
55
Một thanh ghi đặc biệt, bắt buộc phải có đối với tất cả các vi xử lý, đó là
thanh ghi đếm chương trình (PC), còn được gọi là con trỏ lệnh (IP). Thanh ghi này
dùng để chứa địa chỉ lệnh tiếp theo trong chương trình thực thi, vì vậy, thanh ghi
này luôn được cập nhật sau mỗi lệnh của vi xử lý.
4.1.5. Tập lệnh
Quá trình hoạt động của một vi xử lý được quy định trong một chương trình,
được viết bằng các lệnh tương ứng của vi xử lý đó, thường được gọi là ngôn ngữ
máy. Các lệnh này được lấy từ tập lệnh của vi xử lý.
Mỗi lệnh là một chuỗi số bit nhị phân chứa các thông tin cần thiết để vi xử lý
thực hiện một chức năng nào đó. Chuỗi bit này thường được chia thành nhiều
trường nhỏ hơn, chứa các thông tin của lệnh đó.
Trường mã lệnh (còn được gọi là opcode): các bit trong trường này thể hiện
chức năng của lệnh
Trường toán hạng: một lệnh thường bao gồm nhiều toán hạng nguồn và một
toán hạng đích. Toán hạng đích như một ngõ ra chứa kết quả thực thi lệnh
với các ngõ vào là các toán hạng nguồn.
o Các toán hạng nguồn có thể là các thanh ghi, các giá trị tức thời (số
không đổi), các giá trị được lưu trữ trong bộ nhớ hoặc ngoại vi, …
o Các toán hạng đích thường là các toán hạng lưu trữ dữ liệu nên
thường là các thanh ghi hoặc ô nhớ.
Trường chứa địa chỉ của lệnh tiếp theo: thường được sử dụng cho các lệnh rẽ
nhánh
Ngoài ra còn có một số trường quy định các tính năng khác của lệnh
Sau đây, ta xét một ví dụ về tập lệnh của vi xử lý ARM. Hình 4.5 là cấu trúc
các lệnh xử lý dữ liệu của vi xử lý ARM7TDMI. Ta thấy, lệnh xử lý dữ liệu của
ARM có chiều dài 32 bit, được chia thành nhiều trường nhỏ.
Hình 4.5. Cấu trúc các lệnh xử lý dữ liệu của vi xử lý ARM7TDMI
56
Trường Operand 2 có chiều dài 12 bit (từ bit 0 đến bit 11): chứa toán
hạng nguồn thứ hai của lệnh, toán hạng này có thể là một thanh ghi hoặc
một giá trị tức thời.
Trường Rd có chiều dài 4 bit (từ bit 12 đến bit 15): chứa toán hạng đích
của lệnh, trong trường hợp này toán hạng nguồn là các thanh ghi của
ARM.
Trường Rn có chiều dài 4 bit (từ bit 16 đến bit 19): chứa toán hạng nguồn
thứ nhất của lệnh, trong trường hợp này là các thanh ghi của ARM.
Trường S (bit 20): chỉ có một bit, dùng để điều khiển trường Cond.
Trường OpCode có chiều dài 4 bit (từ bit 21 đến bit 24): chứa Opcode
của lệnh. Lệnh xử lý dữ liệu bao gồm các phép toán như: cộng, trừ, AND,
OR, … mỗi phép toán sẽ tương ứng với một Opcode cụ thể. Ví dụ như
0000 ứng với phép AND, 0100 ứng với phép cộng, 0010 ứng với phép
trừ, …
Trường I (bit 25): dùng để xác định toán hạng thứ hai (Operand 2) là
thanh ghi hay giá trị tức thời. Nếu I = 0 thì Operand 2 là thanh ghi, nếu I
= 1 thì Operand 2 là giá trị tức thời.
Trường Cond có chiều dài 4 bit (từ bit 28 đến bit 31): chứa các mã điều
kiện của ARM.
Lệnh sau sẽ lấy giá trị thanh ghi R7 trừ giá trị thanh ghi R5 và lưu trữ kết quả
vào thanh ghi R4.
SUB R4, R5, R7
Tương ứng chuỗi bit biểu diễn lệnh này sẽ là:
0000 00 0 0010 0101 0100 00000000_0111 0
Cond Phép trừ R5 R4 R7 S toán hạng thứ hai là thanh ghi
Vi xử lý chỉ đọc và hiểu các chuỗi số nhị phân, còn câu lệnh SUB R4, R5, R7
là ngôn ngữ trực quan của người lập trình. Vì vậy, để chuyển từ ngôn ngữ của con
người sang ngôn ngữ máy ta cần một công cụ phần mềm, được gọi là trình biên
dịch. Con người sẽ lập trình cho vi xử lý bằng những câu lệnh trực quan, dễ hiểu
57
như trên và trình biên dịch sẽ chuyển những câu lệnh này thành ngôn ngữ của vi xử
lý là chuỗi bit nhị phân biểu diễn cho những câu lệnh đó. Các vi xử lý của các công
ty khác nhau có các tập lệnh khác nhau, nên mỗi công ty sẽ có một chương trình
biên dịch riêng sử dụng cho các dòng vi xử lý của công ty đó.
Quy đinh chiều dài của mỗi câu lệnh cũng có sự khác biệt. Đối với các vi xử
lý thiết kế theo kiến trúc CISC (như 8086), các câu lệnh khác nhau sẽ có chiều dài
khác nhau. Các lệnh của CISC là các lệnh phức tạp, một lệnh có thể thực hiện được
nhiều chức năng. Tập lệnh của CISC thường có rất nhiều lệnh. Đối với các vi xử lý
thiết kế theo kiến trúc RISC (như ARM), các câu lệnh khác nhau có cùng chiều dài.
Các câu lệnh của RISC chỉ thực hiện những chức năng đơn giản, các chức năng
phức tạp hơn sẽ được thực hiện bằng lập trình. Tập lệnh của RISC thường ít hơn rất
nhiều so với CISC.
Tập lệnh của hầu hết các vi xử lý đều được chia thành những nhóm lệnh nhỏ
có cấu trúc lệnh giống nhau , ví dụ như nhóm lệnh xử lý dữ liệu của ARM đã đề cập
ở trên. Sau đây là một số nhóm lệnh cơ bản trong tập lệnh của các vi xử lý.
Nhóm lệnh xử lý dữ liệu: thực hiện các phép toán logic và số học như: cộng,
trừ, AND, OR, XOR, NOT, dịch bit, xoay bit, …
Nhóm lệnh lưu trữ dữ liệu: có chức năng lưu dữ liệu vào hoặc lấy dữ liệu ra
khỏi bộ nhớ
Nhóm lệnh di chuyển dữ liệu: có chức năng chuyển dữ liệu giữa các thành
phần như thanh ghi, ngoại vi, ngăn xếp, …
Nhóm lệnh rẽ nhánh: có chức năng chuyển luồng chương trình theo một
hướng khác phù hợp với trạng thái hiện tại của vi xử lý
Nhóm lệnh điều khiển: thường được sử dụng để lập trình các chế độ hoạt
động cho vi xử lý
4.2. Bộ nhớ
Bộ nhớ là thành phần lưu trữ dữ liệu của người dùng và chương trình của vi
xử lý. Một hệ thống máy tính thường có hai loại bộ nhớ: bộ nhớ trong và bộ nhớ
ngoài. Bộ nhớ trong thường dùng để lưu thông tin phần cứng máy tính, các chương
trình đang hoạt động trong hệ thống. Bộ nhớ ngoài thường sử dụng để lưu trữ lượng
58
lớn dữ liệu cá nhân. Trong nội dung chương này, chúng ta chỉ tập trung tìm hiểu về
các bộ nhớ trong.
4.2.1. Phân loại bộ nhớ
Bộ nhớ trong được phân làm hai loại cơ bản: ROM và RAM.
a. Bộ nhớ ROM
ROM (viết tắt của Read Only Memory) cơ bản là bộ nhớ chỉ đọc, tức là ta
chỉ có thể đọc dữ liệu từ ROM mà không thể ghi dữ liệu vào ROM. ROM chỉ được
ghi dữ liệu một lần đầu tiên, dữ liệu trong ROM thường chứa những thông tin cố
định, không đổi như: thông tin về các thành phần trên mainboard, chương trình khởi
động máy tính, ... Bộ nhớ ROM truyền thống thường có dung lượng nhỏ, dữ liệu
ROM đã được các nhà sản xuất nạp sẵn. ROM là bộ nhớ không bay hơi, tức là dữ
liệu trong ROM không bị mất khi ngừng cung cấp điện. Dựa vào đặc tính này, các
bộ nhớ sau cũng được xem là ROM: PROM, EPROM, EEPROM và bộ nhớ flash.
Khác với ROM, người dùng có thể nạp dữ liệu tùy ý vào các bộ nhớ này.
PROM (Programmable ROM): cũng là bộ nhớ không bay hơi và chỉ được
ghi dữ liệu một lần đầu tiên. Khác với ROM truyền thống, PROM là loại ROM
trắng, tức là chưa có dữ liệu. Người dùng có thể tùy ý ghi dữ liệu vào PROM bằng
các thiết bị nạp ROM chuyên dụng.
EPROM (Erasable Programmable ROM): là bộ nhớ có khả năng đọc và ghi
như PROM, nhưng khác với PROM, EPROM có khả năng ghi được nhiều lần. Tuy
nhiên, trước khi ghi, tất cả các ô nhớ của EPROM phải được xóa bằng tia cực tím.
Trên thân EPROM thường có một cửa sổ trong suốt (như hình 4.6), để xóa dữ liệu
trong EPROM, ta chỉ cần chiếu chùm tia cực tím vào cửa sổ này trong thời gian
khoảng 20 phút.
EEPROM (Electrically Erasable Programmable ROM): cũng có khả năng
ghi dữ liệu mới như EPROM, nhưng ta không cần phải xóa dữ liệu trước khi ghi dữ
liệu mới vào EEPROM. Việc xóa dữ liệu trong EEPROM được thực hiện ở mức
byte, tức là một lần xóa được một byte. Chính vì đặc tính đọc/ghi dữ liệu linh hoạt,
bộ nhớ EEPROM thường có chi phí đắt nhất trong số các bộ nhớ trên.
59
Bộ nhớ flash: chức năng cũng giống như EEPROM, nhưng tốc độ ghi dữ liệu
của flash nhanh hơn so với EEPROM. Bộ nhớ flash có khả năng xóa dữ liệu theo
khối, tức là ta có thể xóa một khối dữ liệu nào đó trong bộ nhớ thay vì phải xóa toàn
bộ dữ liệu trong bộ nhớ như EPROM.
Hình 4.6. Bộ nhớ EPROM
b. Bộ nhớ RAM
RAM (viết tắt của Random Access Memory) là bộ nhớ có khả năng đọc và
ghi, còn được gọi là bộ nhớ chính. Một điểm khác biệt nữa so với ROM, RAM là bộ
nhớ bay hơi, tức là dữ liệu trong RAM sẽ bị mất khi ngừng cấp điện. Do đó, RAM
còn được gọi là bộ nhớ tạm. RAM thường được sử dụng để chứa các chương trình
đang hoạt động trên máy tính, vì vậy dung lượng và tốc độ của RAM có ảnh hưởng
rất lớn đến hoạt động của toàn hệ thống. RAM được chia thành hai loại cơ bản,
được sử dụng trong các thế hệ máy tính, đó là: SRAM (RAM tĩnh) và DRAM
(RAM động). Điểm khác biệt giữa hai loại RAM này chủ yếu là ở cấu tạo của từng
bit nhớ (cell), sẽ được phân tích trong phần tiếp theo
DRAM
DRAM lưu trữ dữ liệu 0 và 1 dưới dạng các tín hiệu điện thế trên một tụ
điện. Hình 4.7a là cấu trúc cơ bản của một DRAM cell. Do tụ điện có xu hướng xả
điện nên DRAM phải nạp lại điện tích cho tụ điện sau một khoảng thời gian nhất
định để duy trì dữ liệu trong bộ nhớ. Quá trình nạp lại được gọi là quá trình làm
tươi. Cũng do đặc tính rò rỉ điện tích trên tụ điện mặc dù vẫn có nguồn cung cấp
điện nên bộ nhớ này còn được gọi là RAM động. Đường địa chỉ (address line) sẽ
tích cực làm cho transistor dẫn khi có sự truy xuất vào DRAM cell. Thông thường,
60
mức điện áp cao trên tụ điện tương ứng với mức logic 1 và mức điện áp thấp tương
ứng với mức 0.
Quá trình ghi dữ liệu, một tín hiệu điện áp được đưa vào ngõ Bit line nạp
điện cho tụ, nạp dữ liệu vào cell.
Quá trình đọc dữ liệu, mức điện áp trên tụ được đưa ra ngoài thông qua
đường Bit line và được so sánh với một mức điện áp chuẩn để xác định dữ liệu
trong cell là 0 hay 1. Việc đọc sẽ làm mất dữ liệu trong cell do tụ xả điện, vì vậy,
phải có quá trình nạp lại để hoàn thành quá trình đọc dữ liệu.
SRAM
SRAM sử dụng các transistor để lưu trữ dữ liệu. Hình 4.7b là cấu trúc cơ bản
của một SRAM cell. Bốn transistor T1, T2, T3, T4 được kết nối chéo nhau để tạo các
mức logic cố định. Mức logic 1 ứng với trạng thái dẫn của T1, T4 và tắt của T2, T3.
Mức logic 0 ứng với trạng thái dẫn của T2, T3 và tắt của T1, T4. Các mức logic này
không bị mất theo thời gian nên SRAM không cần chu kỳ làm tươi. Cũng giống như
DRAM, đường Address line sẽ tích cực làm cho các transistor T5 và T6 dẫn khi có
sự truy xuất dữ liệu vào DRAM cell. Trong quá trình ghi, bit dữ liệu được đưa vào
đường Bit line B, giá trị bù của dữ liệu sẽ được đưa vào đường Bit line . Trong quá
trình đọc, dữ liệu được đọc ra từ đường Bit line B.
(b) SRAM cell (a) DRAM cell
Hình 4.7. Cấu trúc một bit nhớ
61
Từ đó, ta thấy, một ô nhớ của DRAM đơn giản và nhỏ gọn hơn của SRAM.
Do đó, DRAM có khả năng tích hợp lớn hơn và giá thành sản xuất nhỏ hơn so với
SRAM. Tuy nhiên, DRAM lại cần có chu kỳ làm tươi, tốc độ truy xuất của DRAM
cũng thấp hơn so với SRAM do tụ điện phải có thời gian nạp và xả. Vì vậy, DRAM
có dung lượng lớn thường được sử dụng làm bộ nhớ chính của hệ thống máy tính,
SRAM được sử dụng làm bộ nhớ có yêu cầu tốc độ cao như cache.
4.2.2. Cấu trúc cơ bản
Tất cả các bộ nhớ trên đều là bộ nhớ bán dẫn có cấu trúc gần như tương tự
nhau. Do đó, trong phần này ta chỉ tìm hiểu về cấu trúc cơ bản của bộ nhớ RAM.
Việc truy xuất dữ liệu được điều khiển thông qua các đường địa chỉ và điều khiển.
Mỗi giá trị địa chỉ sẽ tương ứng với một ô nhớ chứa dữ liệu. Mỗi ô nhớ có thể bao
gồm: 4, 8, 16 hoặc 32 bit dữ liệu, được truy cập thông qua các đường dữ liệu.
Hình 4.8 là ví dụ về cấu trúc của bộ nhớ RAM có dung lượng 16Mb. Mỗi ô
nhớ của RAM này có 4 bit nên có 4 đường dữ liệu được ký hiệu từ D1 đến D4. Việc
truy xuất dữ liệu được điều khiển bằng nhóm tín hiệu điều khiển
và nhóm 11 đường tín hiệu địa chỉ (A0 đến A10). Với 11 đường địa chỉ ta có thể xác định được 211 = 2048 địa chỉ. Các ô nhớ được sắp xếp theo dạng ma trận
2048x2048. Khi tín hiệu chọn hàng tích cực, ta sẽ xác định được một hàng
dựa vào các đường địa chỉ (A0 đến A10). Sau đó, tín hiệu chọn cột tích cực, ta
sẽ chọn được một cột dựa vào các đường địa chỉ (A0 đến A10). Từ hàng và cột ta
xác định được ô nhớ cần truy xuất. Dung lượng của RAM được xác định bằng số ô nhớ x số bit trong một ô nhớ, trong trường hợp này là 211 x 211 x 4 = 4x220 x 4 = 4M
x 4 (16Mb). Đây cũng là cách viết cho ta biết cấu trúc và dung lượng của RAM. Ví dụ, bộ nhớ RAM 1M x 8, nghĩa là bộ nhớ có dung lượng 8Mb, trong đó có 220 ô
nhớ, mỗi ô nhớ 8 bit tương ứng có 8 đường dữ liệu. Một số tín hiệu điều khiển còn
lại như được sử dụng để chọn chip (RAM) và cho phép xuất dữ liệu.
Các bộ nhớ RAM được đề cập ở phần trên thường có dung lượng nhỏ. Người
ta thiết kế thêm các bộ điều khiển và giải mã để ghép nhiều bộ nhớ RAM này lại để
có được một thanh RAM (module RAM) dung lượng đủ lớn, sử dụng trong các máy
tính.
62
Hình 4.8. Cấu trúc RAM 4M x 4
4.3. Hệ thống kết nối (bus)
4.3.1. Phân loại
Hệ thống bus là thành phần có chức năng kết nối các thiết bị trong một hệ
thống máy tính. Một bus bao gồm nhiều dây dẫn, mỗi dây dẫn có thể truyền các tín
hiệu nhị phân 0 và 1. Các tín hiệu trên bus được truyền đồng thời, tập hợp các tín
hiệu này tạo thành một giá trị thể hiện thông tin mà bus cần truyền đi. Ví dụ, muốn
thể hiện giá trị A5H (giá trị tương ứng trong hệ nhị phân là: 10100101), ta cần một
bus gồm có 8 dây dẫn truyền đồng thời các giá trị 1, 0, 1, 0, 0, 1, 0, 1.
Mặc dù mỗi vi xử lý có một chuẩn bus khác nhau, nhưng tất cả đều có một
điểm chung, đó là: các bus thường được chia thành ba loại: địa chỉ, dữ liệu và điều
khiển.
Bus dữ liệu: dùng để truyền dữ liệu giữa các thành phần trong hệ thống. Độ
rộng của bus dữ liệu thường là: 32, 64 hoặc 128 bit. Một số loại bus còn chia bus dữ
liệu thành hai loại: dữ liệu đọc và dữ liệu ghi.
Bus địa chỉ: mang địa chỉ của nơi phát hoặc nơi nhận của dữ liệu trên bus dữ
liệu. Độ rộng của bus địa chỉ có thể là 16, 32 hoặc 64 bit. Một số bus chia bus địa
chỉ thành hai loại: địa chỉ đọc và địa chỉ ghi.
63
Bus điều khiển: dùng để mang một số thông tin điều khiển việc truyền dữ
liệu như: lệnh đọc/ghi dữ liệu, chiều dài và số lượng dữ liệu trong một lần truyền,
kiểu truyền, …
Tập hợp các đường bus trên tạo thành khối giao tiếp bus của các thành phần
trong hệ thống (bộ xử lý trung tâm, ngoại vi). Việc kết nối được thực hiện bằng
cách nối các đường bus tương ứng của CPU, I/O, bộ nhớ, ... với bus chính như
trong hình 4.9.
Hình 4.9. Cấu trúc hệ thống bus
Việc truyền dữ liệu giữa các thành phần trong hệ thống được thực hiện một
cách đồng bộ thông qua các bus tín hiệu trên. Quá trình đồng bộ để truyền dữ liệu
được gọi là giao thức bus. Các bus khác nhau thường có giao thức khác nhau. Các
thành phần muốn kết nối đến bus phải có cùng giao thức truyền dữ liệu của bus.
Hình 4.10 mô tả một giao thức đọc và ghi dữ liệu đơn giản của CPU. Bus hoạt động
dựa trên xung nhịp Clock. Trong chu kỳ đầu tiên (T1), CPU đặt địa chỉ của ngoại vi
cần truy xuất lên đường địa chỉ Address lines, đồng thời lái đường tín hiệu điều
khiển Address enable tích cực (mức 1) để xác minh chính xác địa chỉ. Đối với giao
thức đọc dữ liệu, CPU sẽ tiếp tục phát lệnh đọc bằng cách tích cực (mức 1) tín hiệu
điều khiển Read ở ngay đầu chu kỳ thứ hai (T2). Ngoại vi hoặc bộ nhớ có địa chỉ
tương ứng trên đường Address lines sẽ trả về dữ liệu trên đường dữ liệu Data lines.
Ở chu kỳ thứ ba (T3), CPU đọc về dữ liệu này và lái tín hiệu Read xuống mức thấp,
hoàn thành chu kỳ đọc dữ liệu. Đối với giao thức ghi dữ liệu, CPU sẽ đưa dữ liệu
cần ghi lên đường dữ liệu Data lines ở đầu chu kỳ thứ hai (T2) đến khi dữ liệu này
ổn định, CPU phát tiếp lệnh ghi bằng cách tích cực tín hiệu điều khiển ghi Write. Ở
chu kỳ thứ ba (T3), ngoại vi hoặc bộ nhớ có địa chỉ tương ứng trên đường Address
lines sẽ chép dữ liệu trên đường Data lines về, hoàn thành chu kỳ ghi dữ liệu.
64
Hình 4.10. Minh họa về định thì hoạt động của bus
Các giao thức bus thường được chuẩn hóa và được các công ty công nhận
nhằm tạo sự tương thích giữa các thành phần trong hệ thống máy tính. Ngoài ra,
trong quá trình thiết kế, các công ty có thể đưa vào sản phẩm của mình các bus của
riêng công ty, không được chuẩn hóa nhằm làm cho sản phẩm có được các tính
năng mong muốn. Các bus này được gọi là bus nội (hoặc local bus), phụ thuộc vào
kỹ thuật và công nghệ của từng công ty. ALU bus (trong hình 4.1) của vi xử lý Intel
8086 là một ví dụ về bus nội. ALU bus nằm bên trong vi xử lý 8086, có chức năng
kết nối bộ ALU với các thanh ghi của 8086.
4.3.2. Chức năng
Việc kết nối các thành phần trong hệ thống đến bus như đã đề cập ở phần
trên là việc kết nối các đường tín hiệu có cùng chức năng (địa chỉ, dữ liệu, điều
khiển). Hình 4.11 minh họa các thành phần có thể kết nối đến bus. Trong đó, một số
thành phần như CPU được gọi là master, các thành phần còn lại như bộ điều khiển
65
đồ họa, bộ nhớ, … được gọi là slave hoặc ngoại vi. Master là thành phần chủ động,
phát các lệnh truy xuất dữ liệu đến các slave, là các thành phần bị động. Slave sẽ
đáp ứng các lệnh này bằng các dữ liệu trả về cho master. Tại một thời điểm, chỉ có
một master được quyền kết nối (truy xuất) đến một slave. Trong trường hợp tại
cùng một thời điểm nhiều master có yêu cầu truy xuất đến cùng một slave, khi đó
bus sẽ đóng vai trò phân xử để xác định master nào được quyền truy xuất slave
trước.
Hình 4.11. Minh họa một bus của máy tính
Bus quản lý các ngoại vi trong hệ thống bằng địa chỉ. Một ngoại vi trong hệ
thống sẽ có tương ứng một địa chỉ hoặc một tầm địa chỉ. Việc phân phát địa chỉ cho
ngoại vi thường được quyết định bởi người lập ra đặc tính kỹ thuật cho hệ thống. Để
truy cập đến một ngoại vi trong hệ thống, master phải gởi địa chỉ của ngoại vi đó
qua bus địa chỉ. Mạch giải mã địa chỉ của bus có chức năng chọn chính xác ngoại vi
cần truy cập. Thông thường, ta có hai phương pháp giải mã địa chỉ.
Giải mã toàn phần: mỗi ngoại vi được gán một địa chỉ duy nhất. Khi đó ta
phải sử dụng tất cả các bit địa chỉ cho việc giải mã
Giải mã một phần: mỗi ngoại vi được gán với một tầm địa chỉ nào đó. Do đó,
ta không nhất thiết phải sử dụng tất cả các bit địa chỉ cho việc giải mã. Phương pháp
này làm cho mạch giải mã địa chỉ đơn giản hơn.
66
Tốc độ hoạt động của một ngoại vi được xác định bằng chu kỳ truy xuất dữ
liệu, nghĩa là thời gian từ khi một master đưa các yêu cầu truy xuất dữ liệu lên bus
đến khi slave trả về các đáp ứng cần thiết. Thời gian càng ngắn ứng với tốc độ của
ngoại vi càng cao và ngược lại. Trong một máy tính thường sẽ có nhiều bus được
nối với nhau thông qua các cầu chuyển bus, gọi là hệ thống bus đa cấp. Hình 4.12
mô tả một hệ thống như vậy. Các ngoại vi có tốc độ chậm như: bộ điều khiển ổ đĩa
cứng HDD, hoặc các bộ điều khiển truyền dữ liệu nối tiếp (COM, PS/2), … nếu
dùng chung bus với các ngoại vi cần tốc độ cao như: bộ điều khiển đồ họa hoặc
PCIe sẽ làm hạn chế tốc độ của các ngoại vi này. Do đó, các ngoại vi có tốc độ
chậm thường sử dụng chung một bus, trong hình 4.12 gọi là bus mở rộng, còn các
ngoại vi có tốc độ cao được kết nối với bus tốc độ cao. Để cải thiện tốc độ truy cập
của vi xử lý trung tâm đến RAM, CPU và bộ điều khiển bộ nhớ chính thường sử
dụng đường bus riêng, gọi là bus hệ thống. Các bus này giao tiếp với nhau thông
qua các cầu chuyển bus. Khi đó, các cầu chuyển bus được xem như một master của
bus mở rộng và bus tốc độ cao.
Hình 4.12. Minh họa một hệ thống bus đa cấp của máy tính
67
Hiện nay, máy tính có rất nhiều ngoại vi và số lượng ngoại vi chắc chắn sẽ
ngày càng tăng trong tương lai. Do đó, để giảm tải cho bus, một số ngoại vi tốc độ
thấp đã dần bị loại bỏ khi có các ngoại vi tốc độ cao hơn xuất hiện.
Trong hệ thống máy tính sử dụng CPU Intel, bus tốc độ cao được tích hợp
trong chip cầu bắc và hiện nay đã được tích hợp vào một số bộ xử lý trung tâm thế
hệ mới, bus mở rộng tốc độ thấp được tích hợp trong chip cầu nam.
4.4. Hệ thống cache
4.4.1. Giới thiệu
Từ khi mô hình máy tính Von Neumann ra đời, với chương trình được lưu
trữ trong bộ nhớ, mối tương quan về tốc độ giữa bộ xử lý trung tâm và bộ nhớ luôn
là vấn đề lớn, cần phải giải quyết. CPU luôn có tốc độ cao hơn bộ nhớ, do đó, khi
phát ra một yêu cầu tới bộ nhớ, CPU phải chờ bộ nhớ đáp ứng trong một khoảng
thời gian dài. Chính điều này đã làm hạn chế đáng kể tốc độ của CPU nói riêng và
của cả hệ thống nói chung.
Quá trình thiết kế bộ nhớ chương trình để có thể đáp ứng được yêu cầu về
tốc độ gặp phải sự ràng buộc giữa ba yếu tố sau: tốc độ, dung lượng và giá thành
chế tạo của bộ nhớ. Như đã phân tích ở các phần trên, để tăng tốc độ của hệ thống,
chúng ta luôn mong muốn bộ nhớ phải có dung lượng lớn, tốc độ cao. Tuy nhiên,
trên thực tế nếu bỏ qua yếu tố giá cả, bộ nhớ có dung lượng lớn luôn có tốc độ thấp
hơn bộ nhớ có dung lượng nhỏ hơn.
Qua quá trình phát triển, người ta cũng nhận thấy rằng, việc thực thi một
chương trình của vi xử lý không hoàn toàn ngẫu nhiên. Nếu lệnh đang thực thi ở địa
chỉ A, thì lệnh kế tiếp thường sẽ nằm trong vùng lân cận của A. Hơn nữa hầu hết
việc thực thi chương trình phần lớn đều là các vòng lặp, trong đó một số lệnh trong
một phần chương trình được thực thi nhiều lần. Do đó, ta chỉ cần một bộ nhớ có
dung lượng nhỏ để có thể lưu một phần chương trình hoặc dữ liệu.
Từ các yếu tố trên, ý tưởng về một bộ nhớ dung lượng nhỏ, tốc độ cao có
chức năng chứa một phần chương trình hoặc dữ liệu ra đời, được gọi là bộ nhớ
cache. Ban đầu, cache có dung lượng khoảng vài KB và được gắn ngoài CPU, về
68
sau, với công nghệ tích hợp ngày càng tiên tiến, cache có dung lượng lớn hơn và
được tích hợp vào bên trong CPU như hình 4.13.
Hình 4.13. Vị trí của cache trong hệ thống
4.4.2. Chức năng
Như đã đề cập ở phần trên, cache dùng để chứa một phần chương trình thực
thi hoặc dữ liệu truy xuất (sau đây ta goi hai thành phần này là một tham chiếu) lặp
lại nhiều lần. Các tham chiếu này được chép từ bộ nhớ lớn, tốc độ chậm (bộ nhớ
chính) vào bộ nhớ cache tốc độ cao. Khi các tham chiếu này được sử dụng lặp lại
nhiều lần sẽ làm tăng đáng kể tốc độ thực thi lệnh của vi xử lý từ đó cải thiện tốc độ
hoạt động của cả hệ thống. Chính vì vây, bộ nhớ cache còn được gọi là bộ nhớ truy
cập nhanh.
Để hiểu rõ hơn về chức năng chính của cache, ta giả sử một tham chiếu được
gọi k lần trong một thời gian ngắn, CPU sẽ cần 1 lần truy xuất bộ nhớ chính và (k-1)
lần truy xuất đến cache. Ta cũng giả sử, c là thời gian truy xuất bộ nhớ cache và m
là thời gian truy xuất bộ nhớ chính, do đặc tính của hai bộ nhớ nên c rất nhỏ hơn m
(c< chiếu có trong bộ nhớ cache), khi đó h = (k-1)/k và tỉ lệ thất bại tương ứng là (1-h) = 1/k. Thời gian truy xuất tham chiếu trung bình = c + (1-h)m Từ đó ta thấy, khi tham chiếu được gọi nhiều lần (k rất lớn) thì h → 1, thời gian truy xuất trung bình sẽ tiến tới c. Khi tham chiếu chưa có trong cache, h → 0, thời gian truy xuất trung bình sẽ tiến tới (c+m). Tuy nhiên, trên thực tế, thời gian này nhỏ hơn (c+m) nhờ vào kỹ thuật thiết kế. Việc tìm kiếm tham chiếu trong bộ nhớ chính thông thường sẽ được khởi động cùng lúc với việc tìm kiếm trên cache. 69 Khi tham chiếu không được tìm thấy trên cache (cache miss), chu kỳ truy cập trên bộ nhớ chính đã được khởi động. Phương pháp này cũng đồng thời dừng ngay chu kỳ truy cập bộ nhớ chính khi tham chiếu được tìm thấy trong cache (cache hit). 4.4.3. Cache nhiều tầng Khi kỹ thuật sử dụng bộ nhớ cache được giới thiệu, trong hệ thống chỉ có duy nhất một bộ nhớ cache, kết nối với vi xử lý thông qua bus hệ thống bên ngoài, gọi là cache ngoài. Khi kỹ thuật chế tạo phát triển, mật độ tích hợp tăng, cache được tích hợp vào bên trong vi xử lý, còn được gọi là on-chip cache. So với cache ngoài, thời gian truy cập on-chip cache giảm đáng kể, do đường dữ liệu được rút ngắn, góp phần cải thiện tốc độ của hệ thống. Trong thời gian truy cập on-chip cache, bus hệ thống ở trong trạng thái rãnh sẽ được sử dụng cho các mục đích khác. Đó là hai ưu điểm chính của bộ nhớ on-chip cache. Do giới hạn về diện tích trên một chip, cache lại được chế tạo từ các cell SRAM chiếm diện tích khá lớn, nên các bộ nhớ on-chip cache lúc đầu có dung lượng rất nhỏ, như vi xử lý Intel 80486 chỉ có một bộ nhớ on-chip cache có dung lượng 8KB. Theo thời gian, chương trình ngày càng dài và phức tạp trong khi dung lượng bộ nhớ on-chip cache lại quá nhỏ, nhiều tham chiếu không được tìm thấy trong bộ nhớ cache làm tăng tỷ lệ cache miss. Vi xử lý phải gọi các tham chiếu này từ bộ nhớ ngoài có tốc độ chậm, thông qua bus hệ thống. Do đó, tỷ lệ cache miss tăng sẽ làm ảnh hưởng đến tốc độ của hệ thống. Để khắc phục tình trạng này, một bộ nhớ cache khác được kết nối với vi xử lý thông qua một bus riêng, gọi là back-side bus. Để phân biệt các bộ nhớ cache, bộ nhớ on-chip cache trước đó được gọi là L1 cache (cache cấp 1), bộ nhớ cache thêm vào được gọi là L2 cache (cache cấp 2). L2 cache thường có dung lượng lớn hơn so với L1 cache và cũng có chức năng lưu trữ lệnh và dữ liệu. Một tham chiếu khi không được tìm thấy ở L1 cache sẽ tiếp tục được tìm trong L2 cache. Với kỹ thuật thiết kế và chế tạo ngày càng tiên tiến, L2 cache cũng được tích hợp vào bên trong vi xử lý. Việc bổ sung L2 cache làm tăng tỷ lệ cache hit, cải thiện đáng kể tốc độ của hệ thống. Các bộ vi xử lý hiện đại ngày nay còn được tích hợp thêm bộ nhớ cấp 3 (L3 cache) có dung lượng lên đến hàng MB, làm cho tốc độ của toàn hệ thống máy tính 70 ngày càng được nâng cao. Hình 4.14 là mô hình của cache nhiều tầng. Theo cấp tăng dần, bộ nhớ cache có tốc độ giảm dần nhưng dung lượng tăng dần, nghĩa là L1 cache có tốc độ cao nhất và dung lượng nhỏ nhất, còn L3 cache có tốc độ thấp nhất và dung lượng cao nhất. Hình 4.14. Cấu trúc cache 3 tầng Bảng 4.1 mô tả sự phát triển của bộ nhớ cache theo các dòng vi xử lý của Intel. Bảng 4.1. Sự phát triển của bộ nhớ cache theo các dòng vi xử lý của Intel Vi xử lý Intel Mô tả 386 Bổ sung bộ nhớ cache ngoài Tích hợp bộ nhớ cache vào bên trong vi xử lý 486 Bổ sung thêm bộ nhớ cache ngoài, gọi là L2 cache Pentium Tách riêng bộ nhớ cache dùng cho lệnh và dữ liệu Pentium II Tích hợp bộ nhớ L2 cache vào bên trong vi xử lý Pentium III Bổ sung thêm bộ nhớ cache ngoài, gọi là L3 cache Pentium 4 Tích hợp bộ nhớ L3 cache vào bên trong vi xử lý 4.4.4. Phân loại Bên trong vi xử lý thường có hai loại cache, đó là: cache dùng để lưu trữ lệnh của vi xử lý và cache dùng để lưu trữ dữ liệu trong lúc hoạt động. Thời điểm ban đầu khi kỹ thuật sử dụng bộ nhớ cache vừa mới xuất hiện, chỉ có duy nhất một bộ nhớ cache dùng để lưu trữ cả lệnh và dữ liệu. Về sau, cache L1 được tách thành hai phần để chứa lệnh và dữ liệu riêng biệt. Kỹ thuật sử dụng chung bộ nhớ cache cho lệnh và dữ liệu có một số ưu điểm sau: 71 Dung lượng bộ nhớ cache lớn, do đó tỷ lệ truy cập cache thành công sẽ cao hơn so với kỹ thuật sử dụng cache riêng Đơn giản hơn so với kỹ thuật sử dụng cache riêng do chỉ cần tổng hợp và thiết kế một bộ nhớ cache duy nhất Tuy nhiên, cache chung không còn thích hợp khi kỹ thuật superscalar xuất hiện. Như đã đề cập ở phần trên, đây là kỹ thuật thực thi nhiều lệnh song song, do đó, sẽ xảy ra trường hợp tranh chấp bộ nhớ cache để truy cập lệnh và dữ liệu làm hạn chế tốc độ thực thi của vi xử lý. Giả sử một lệnh truy xuất đang truy xuất dữ liệu trong cache, khi đó nếu ta sử dụng bộ nhớ cache chung, lệnh sau đó chỉ được gọi khi lệnh truy xuất dữ liệu này hoàn thành do tại một thời điểm bộ nhớ cache chỉ có thể đáp ứng việc truy cập cho một lệnh. Xác suất xảy ra các trường hợp này khá cao, do đó không phát huy hết ưu điểm của kỹ thuật superscalar. Để có thể kết hợp các ưu điểm của cache chung và riêng, người ta tách bộ nhớ cache L1 thành hai phần riêng biệt dành để chứa lệnh và dữ liệu, các bộ nhớ cache cấp cao hơn (hiện nay là các cấp 2 và 3) vẫn là các cache dùng chung. CÂU HỎI ÔN TẬP CHƢƠNG 4 1. Giải thích nguyên lý hoạt động của cấu trúc pipeline 4 tầng? 2. Trình bày những yếu tố có thể ảnh hưởng đến hoạt động của cấu trúc pipeline và các giải pháp khắc phục. 3. Kỹ thuật superscalar là gì? 4. Thanh ghi trong vi xử lý là gì? Một vi xử lý thường có mấy loại thanh ghi, trình bày đặc điểm của từng loại. 5. Tập lệnh của vi xử lý là gì? Mô tả các trường có thể có của một lệnh trong tập lệnh. 6. Phân biệt các loại bộ nhớ: RAM, ROM, PROM, EPROM, EEPROM. 7. Trình bày chức năng của hệ thống kết nối (bus). Vì sao ta thường phải thiết kế nhiều bus trong một hệ thống? 8. Trình bày chức năng của bộ nhớ truy cập nhanh cache và đặc điểm của các tầng cache trong vi xử lý. Tại sao phải phân chia cache L1 thành cache lệnh và dữ liệu? 72 Chƣơng 5. HỆ THỐNG XUẤT NHẬP Xuất nhập là quá trình chuyển dữ liệu giữa các thành phần của máy tính (bao gồm các thiết bị ngoại vi và bộ nhớ) dưới sự điều khiển của vi xử lý trung tâm. Các thiết bị ngoại vi, còn gọi là các I/O (input/output) gồm có ba loại: các thiết bị nhập dữ liệu (input) (như bàn phím, chuột, micro, …), các thiết bị xuất dữ liệu (output) (như màn hình, loa, máy in, …) và các thiết bị vừa nhập, vừa xuất (như ổ đĩa cứng, bộ nhớ USB, màn hình cảm ứng, …). Mỗi thiết bị ngoại vi được điều khiển bằng một khối điều khiển I/O. Để nội dung được ngắn gọn, ta gọi khối điều khiển I/O là ngoại vi, phân biệt với các thiết bị ngoại vi là các thiết bị kết nối vào khối điều khiển I/O. Mỗi ngoại có hai giao diện chính như hình 5.1. Giao diện giao tiếp bus: dùng để giao tiếp với bộ xử lý trung tâm và bộ nhớ. Giao diện này bao gồm các nhóm tín hiệu theo tiêu chuẩn chung của bus như: địa chỉ, dữ liệu, điều khiển, vì vậy thường như nhau cho tất cả các ngoại vi. Giao diện giao tiếp với các thiết bị ngoại vi: bao gồm các tín hiệu kết nối với thiết bị ngoại vi, vì vậy giao diện này khác nhau cho các ngoại vi khác nhau. Hình 5.1. Giao diện chính của các ngoại vi Có ba phương pháp cơ bản để chuyển dữ liệu giữa các thành phần của máy tính: Hỏi vòng: hay còn gọi là xuất nhập dữ liệu được điều khiển bằng chương trình Xuất nhập dữ liệu bằng ngắt Truy cập bộ nhớ trực tiếp (còn gọi là DMA) 73 Trong đó, phương pháp đầu tiên ít được sử dụng do không phát huy hết khả năng của bộ xử lý trung tâm và đáp ứng chậm. Phần tiếp theo ta sẽ tìm hiểu về 2 phương pháp còn lại: ngắt và truy cập bộ nhớ trực tiếp. 5.1. Hệ thống ngắt Trước khi tìm hiểu về ngắt, ta cần tìm hiểu về hoạt động cơ bản của phương pháp xuất nhập dữ liệu hỏi vòng. Đây là phương pháp đơn giản nhất, hoạt động chủ yếu dựa trên sự điều khiển của chương trình phần mềm. Trong đó, ta sẽ lập trình cho vi xử lý dò hỏi từng ngoại vi có yêu cầu truyền dữ liệu hay không. Quá trình này sẽ được lặp đi lặp lại trong suốt thời gian hoạt động của hệ thống. Do đó, công việc của vi xử lý chỉ là liên tục dò trạng thái các ngoại vi và điều khiển việc truyền dữ liệu. Ngoài ra, do việc dò hỏi diễn ra tuần tự nên một ngoại vi muốn truyền dữ liệu phải chờ đến khi được vi xử lý dò hỏi. Việc này tạo ra độ trễ dữ liệu gây ảnh hưởng đến hoạt động của ngoại vi, đặc biệt là các ngoại vi tốc độ cao. Đây là hai nhược điểm chủ yếu của phương pháp hỏi vòng đã được đề cập ở phần trên. Phương pháp ngắt xuất hiện đã khắc phục được hai nhược điểm này. Nếu như ở phương pháp hỏi vòng, các ngoại vi không thể chủ động truyền dữ liệu tại thời điểm mong muốn thì với phương pháp ngắt, các ngoại vi sẽ chủ động gởi yêu cầu truy xuất dữ liệu đến vi xử lý. Các yêu cầu này còn được gọi là yêu cầu ngắt, thường xuất hiện bất đồng bộ và được truyền đến vi xử lý thông qua ngõ ra ngắt của các ngoại vi. Bên phía vi xử lý, tương ứng cũng có ngõ vào ngắt để tiếp nhận yêu cầu từ các ngõ ra ngắt này. Khi nhận được yêu cầu, vi xử lý sẽ lập tức dừng chương trình chính đang thực thi và chuyển đến thực thi chương trình phục vụ cho yêu cầu ngắt. Quá trình này được mô tả như trong hình 5.2. Hình 5.2. Hoạt động ngắt của vi xử lý 74 Tùy thuộc vào thiết kế của từng ngoại vi, các yêu cầu ngắt thường được thể hiện dưới hai hình thức, đó là: ngắt cạnh và ngắt mức. Ngắt cạnh: yêu cầu ngắt được thể hiện dưới hình thức là cạnh lên hoặc cạnh xuống của ngõ ra ngắt. Ngắt mức: yêu cầu ngắt được thể hiện dưới hình thức là mức cao hoặc mức thấp của ngõ ra ngắt. Đối với các thiết bị ngoại vi, một vài thao tác có thể làm cho các ngoại vi gây ra yêu cầu ngắt như: thao tác nhấn phím, nhấn chuột, chạm vào màn hình cảm ứng, … Khi xuất hiện yêu cầu ngắt từ ngoại vi, hầu hết các phần cứng vi xử lý sẽ thực hiện lần lượt một số thao tác sau: Tiếp tục hoàn thành lệnh đang thực thi Gởi lại một tín hiệu xác nhận để thông báo cho ngoại vi biết đã nhận được tín hiệu và sẽ đáp ứng cho yêu cầu ngắt, ngoại vi có thể tắt yêu cầu ngắt Lưu lại một số thông tin quan trọng trước khi chuyển đến chương trình phục vụ ngắt để có thể tiếp tục thực hiện chương trình chính sau khi hoàn thành chương trình ngắt. Các thông tin này thường bao gồm: trạng thái vi xử lý, địa chỉ của lệnh tiếp theo trong chương trình chính tại thời điểm xảy ra ngắt. Chuyển đến chương trình phục vụ ngắt (còn gọi là chương trình ngắt). Sau khi hoàn thành chương trình phục vụ ngắt, phần cứng vi xử lý sẽ phục hồi lại trạng thái của vi xử lý trước khi xảy ra ngắt và rẻ nhánh đến để thực hiện lệnh tiếp theo trong chương trình chính. Việc lưu lại trạng thái của vi xử lý là cần thiết vì ngắt là sự kiện bất đồng bộ đối với chương trình của vi xử lý, có thể xảy ra tại bất kỳ thời điểm nào trong quá trình hoạt động của hệ thống. Chương trình phục vụ ngắt được lập trình để thực hiện các thao tác thích hợp khi có sự kiện ngắt bất đồng bộ xảy ra. Thông thường, các ngoại vi khác nhau sẽ có các chương trình phục vụ ngắt khác nhau. Việc xác định đúng chương trình ngắt phục vụ cho ngoại vi đang có yêu cầu ngắt rất quan trọng. Sau đây là một số kỹ thuật để thực hiện công việc này. 75 Dò chương trình ngắt bằng phần mềm: trong một số thiết kế, vi xử lý sẽ chuyển đến thực hiện lệnh trong chương trình ở một địa chỉ cố định khi có yêu cầu ngắt. Sau đó, chương trình phần mềm phải có nhiệm vụ dò xem ngoại vi nào đang có yêu cầu ngắt bằng cách đọc thanh ghi trạng thái của các ngoại vi. Sau khi xác định được ngoại vi có yêu cầu ngắt, vi xử lý sẽ chuyển đến thực thi chương trình ngắt thích hợp cho ngoại vi đó. Phương pháp dò chương trình ngắt bằng phần mềm có một nhược điểm, đó là: phải tốn thời gian dò tìm chương trình ngắt, làm chậm quá trình xử lý ngắt. Để khắc phục nhược điểm này, người ta sử dụng một phương pháp khác, đó là daisy chain (còn được gọi dò ngắt bằng phần cứng). Khi nhận được yêu cầu ngắt, vi xử lý sẽ gởi lại một tín hiệu xác nhận ngắt. Tín hiệu này được đưa lần lượt qua từng ngoại vi cho đến khi gặp ngoại vi đang có yêu cầu ngắt. Sau đó, ngoại vi đưa một word lên bus dữ liệu. Word này còn được gọi là vector ngắt, chứa nhiều thông tin, trong đó bao gồm cả địa chỉ của chương trình ngắt. Vi xử lý đọc vector ngắt, và chuyển đến chương trình ngắt tương ứng bắt đầu từ địa chỉ chứa trong vector ngắt này. Hệ thống máy tính có rất nhiều ngoại vi, mỗi ngoại vi đều có thể tạo yêu cầu ngắt để truyền dữ liệu. Trong trường hợp có nhiều yêu cầu ngắt xuất hiện cùng một lúc, thông thường yêu cầu ngắt nào có tính cấp thiết hơn sẽ được đáp ứng trước. Việc phân xử để xác định thứ tự đáp ứng ngắt được thực hiện bằng bộ điều khiển ngắt. Tùy theo đặc điểm của từng hệ thống, mức độ ưu tiên ngắt của các ngoại vi có thể khác nhau, nhưng nhìn chung các ngoại vi sau thường có ưu tiên ngắt cao hơn so với các ngoại vi còn lại, đó là: bộ xử lý đồ họa, điều khiển bộ nhớ, điều khiển PCIe, ethernet. Việc quy định mức độ ưu tiên ngắt của các ngoại vi thường do người thiết kế hệ thống quyết định. Bộ điều khiển ngắt được lập trình để phân xử ngắt đúng theo những quy định này. Lấy ví dụ với vi xử lý 8086 của Intel, ngõ vào yêu cầu ngắt có hai chân là INTR và NMI. Chân INTR thường được kết nối với ngõ ra INT của bộ điều khiển ngắt 8259A. Ngoài chức năng phân xử ngắt, 8259A còn được sử dụng để mở rộng số lượng ngõ vào yêu cầu ngắt, đáp ứng cho các hệ thống có nhiều ngoại vi. Các yêu cầu ngắt vào chân INTR (thông qua 8259A) là các ngắt có thể che được, nghĩa 76 là có thể được hoặc không được đáp ứng. Các yêu cầu ngắt vào chân NMI là các yêu cầu không che được, nghĩa là các yêu cầu này luôn được đáp ứng. Do đó, chân NMI thường được sử dụng cho các yêu cầu ngắt quan trọng liên quan đến lỗi phần cứng như: lỗi pin, lỗi bộ nhớ, … 5.2. Truy cập trực tiếp bộ nhớ Kỹ thuật truyền dữ liệu sử dụng ngắt có khả năng đáp ứng nhanh nhưng việc truyền dữ liệu vẫn phải được thực hiện thông qua vi xử lý. Nghĩa là, trong chương trình ngắt, vi xử lý phải đọc dữ liệu từ ngoại vi muốn truyền dữ liệu (còn gọi là nguồn) và ghi dữ liệu xuống ngoại vi cần nhận dữ liệu (còn gọi là đích) như hình 5.3. Việc này gần như ít ảnh hưởng đến tốc độ chung của hệ thống nếu dữ liệu cần truyền có dung lượng nhỏ. Tuy nhiên, khi cần truyền khối dữ liệu có dung lượng lớn, với nguồn hoặc đích là bộ nhớ hoặc thiết bị lưu trữ, kỹ thuật ngắt không còn thích hợp do vi xử lý phải truyền và nhận lượng lớn dữ liệu cùng với việc có thể truy cập đến các bộ nhớ hoặc thiết bị lưu trữ có tốc độ thấp sẽ tiêu tốn rất nhiều thời gian của vi xử lý, ảnh hưởng đến tốc độ chung của cả hệ thống. Hình 5.3. Truyền dữ liệu thông qua vi xử lý Để giải quyết những hạn chế của kỹ thuật ngắt, người ta thiết kế thêm một phần cứng để hỗ trợ việc truyền dữ liệu không cần thông qua vi xử lý. Kỹ thuật này được gọi là truy cập trực tiếp bộ nhớ (còn gọi là DMA). Phần cứng được thiết kế thêm gọi là bộ điều khiển DMA (còn gọi là DMAC). DMAC được kết nối trực tiếp với bus hệ thống. Chức năng chính của bộ điều khiển DMA là chuyển dữ liệu giữa các ngoại vi, thiết bị lưu trữ và bộ nhớ trong hệ thống như mô tả trong hình 5.4. Bộ DMAC thay thế vai trò của vi xử lý trong kỹ thuật sử dụng ngắt. Do đó, DMAC có quyền chiếm bus khi cần truyền dữ liệu. Vi xử lý buộc phải nhường quyền kiểm soát bus cho DMAC cho đến khi quá trình truyền dữ liệu hoàn tất. Bộ điều khiển DMA hoạt động dựa trên một số thông tin cơ bản sau: Địa chỉ nguồn: địa chỉ bắt đầu của ngoại vi, thiết bị lưu trữ hoặc bộ nhớ chứa dữ liệu cần phải truyền đi 77 Địa chỉ đích: địa chỉ bắt đầu của ngoại vi, thiết bị lưu trữ hoặc bộ nhớ dùng để lưu dữ liệu được truyền đến Cách thức đọc/ghi dữ liệu ở nguồn/đích: dữ liệu được truy xuất theo địa chỉ tăng dần, giảm dần hoặc không đổi Số lượng dữ liệu: dung lượng dữ liệu (thường tính theo byte) cần được truyền đi Hình 5.4. Truyền dữ liệu thông qua DMAC Dữ liệu truyền theo kỹ thuật DMA thường là các khối gồm nhiều byte dữ liệu được lưu trữ trong các địa chỉ kế tiếp nhau hoặc không đổi (đối với bộ nhớ FIFO). Như hình 5.5, ta có thể xác định các khối dữ liệu gồm (n+1) byte, địa chỉ đầu là a, địa chỉ tăng dần hoặc giảm dần. Do đó, DMAC cần phải có các thông tin như trên để truyền đi một khối dữ liệu. Hình 5.5. Minh họa một cách xác định khối dữ liệu trong kỹ thuật DMA Các thông tin này được lập trình cho DMAC thông qua vi xử lý. Sau khi có lệnh DMAC sẽ thực hiện truyền dữ liệu trực tiếp mà không cần phải thông qua vi xử lý. Trong thời gian truyền dữ liệu qua DMAC, vi xử lý có thể thực hiện các công việc khác. Khi hoàn thành, bộ điều khiển DMA sẽ gởi một tín hiệu ngắt để thông báo và trả lại quyền kiểm soát bus hệ thống cho vi xử lý. Như vậy, vi xử lý chỉ có chức năng kiểm soát lúc bắt đầu và lúc kết thúc việc truyền dữ liệu. 78 Hiện nay, nhu cầu trao đổi dữ liệu trong hệ thống rất lớn, đặc biệt là giữa các thành phần như: bộ nhớ USB, ổ đĩa cứng, mạng máy tính, … Do đó, các ngoại vi như: điều khiển USB, SATA, Ethernet, … cũng được trang bị các bộ điều khiển DMA riêng. Sau đây, ta lấy ví dụ bộ điều khiển DMA tương thích với các dòng vi xử lý Intel họ 8086, có tên là 8237A. Hình 5.6 mô tả sơ đồ kết nối 8237A với vi xử lý. Giả sử ổ đĩa cứng (disk) muốn nhận dữ liệu từ bộ nhớ (memory) thông qua DMA. Quá trình đồng bộ (bắt tay) để truyền dữ liệu sẽ được thực hiện như sau: Ngoại vi (trong trường hợp này là bộ điều khiển ổ đĩa) sẽ gởi một yêu cầu sử dụng DMA đến 8237A bằng cách đưa tín hiệu DREQ lên mức cao. Chip 8237A sẽ kéo tín hiệu HRQ (kết nối với chân HOLD của vi xử lý) lên mức cao, báo hiệu cho vi xử lý biết nó cần sử dụng bus để truyền dữ liệu Vi xử lý sẽ hoàn thành chu kỳ bus hiện tại và kéo chân HLDA lên mức cao để báo cho 8237A biết nó đã có thể sử dụng bus để truyền dữ liệu. Trong lúc 8237A thực hiện việc truyền dữ liệu, chân HOLD phải được giữ ở mức cao. Chip 8237A sẽ tích cực tín hiệu DACK để báo hiệu cho ngoại vi có thể thực hiện việc truyền dữ liệu. Chip 8237A bắt đầu truyền dữ liệu bằng cách đặt địa chỉ của byte đầu tiên lên bus địa chỉ và tích cực chân MEMR để đọc dữ liệu từ bộ nhớ và đặt lên bus dữ liệu. Sau đó, 8237A sẽ tích cực chân IOW để ghi dữ liệu từ bus dữ liệu xuống ngoại vi. Chip 8237A, sau đó, sẽ giảm bộ đếm dữ liệu, tăng (hoặc giảm tùy theo cách lập trình) con trỏ địa chỉ và lặp lại quá trình như trên cho đến khi bộ đếm dữ liệu về 0, hoàn thành quá trình truyền dữ liệu. Chip 8237A đưa chân HRQ xuống mức thấp, thông báo cho vi xử lý lấy lại quyền điều khiển bus, đồng thời gởi cho vi xử lý một tín hiệu ngắt báo hiệu việc truyền dữ liệu đã hoàn tất. 79 Hình 5.6. Kết nối 8237A với vi xử lý Mỗi kỹ thuật truy xuất dữ liệu đều có những ưu điểm riêng tùy thuộc vào điều kiện hoạt động cụ thể của hệ thống. Do đó, người ta thường sử dụng kết hợp các kỹ thuật truy xuất dữ liệu này khi lập trình hoạt động cho vi xử lý. 5.3. Thiết bị bên ngoài Thiết bị bên ngoài là các thành phần giúp máy tính giao tiếp với môi trường bên ngoài. Như đã đề cập trong phần đầu của chương, các thiết bị này còn được gọi là các thiết bị ngoại vi, giao tiếp với máy tính thông qua các bộ điều khiển I/O, còn được gọi là ngoại vi của hệ thống máy tính. Các thiết bị bên ngoài có thể được chia thành ba nhóm lớn: Các thiết bị nhập dữ liệu Các thiết bị xuất dữ liệu Các thiết bị lưu trữ Các thiết bị ngoại vi phổ biến và quen thuộc nhất đối với con người có lẽ là: chuột, bàn phím, màn hình máy tính và ổ đĩa cứng. Chuột và bàn phím máy tính là các thiết bị nhập dữ liệu, thường kết nối với máy tính thông qua cổng PS/2. Ngày nay, hầu hết các cổng PS/2 đã được thay thế bằng cổng USB. Dữ liệu truyền qua bàn phím là các ký tự, thường được mã hóa dưới dạng chuỗi 7 hoặc 8 bit. Hiện nay, phiên bản 7 bit, tương ứng với 128 ký tự được sử dụng phổ biến. Các ký tự bao gồm hai loại: ký tự in được và ký tự điều 80 khiển. Ký tự in được là các ký tự chữ, số thông thường và một số ký tự đặc biệt khác có thể hiển thị trên màn hình hoặc có thể in được trên giấy (thông qua máy in). Các ký tự điều khiển có chức năng điều khiển việc hiển thị các ký tự trên màn hình. Ví dụ như ký tự xuống dòng (khi ta nhấn Enter), có chức năng điều khiển con trỏ chuyển sang dòng mới. Các phím được bố trí theo ma trận, việc xác định chuỗi bit biểu diễn cho một ký tự khi ta nhấn phím được gọi là quét phím. Quá trình này được một chip điều khiển quét phím chuyên dụng thực hiện. Chuỗi bit này được truyền nối tiếp đến máy tính thông qua cổng PS/2. Dữ liệu truyền qua chuột máy tính thường là các thông tin về tọa độ của chuột theo hai trục X và Y và thông tin về trạng thái các nút nhấn. Các thông tin được truyền từ chuột và bàn phím thường được tiếp nhận và hiển thị trên màn hình. Do đó, màn hình máy tính là thiết bị xuất dữ liệu. Ngày nay, các màn hình CRT truyền thống gần như đã được thay thế bằng các màn hình LCD nhỏ gọn hơn rất nhiều. Ngày nay, cùng với màn hình, máy in cũng là một thiết bị xuất dữ liệu phổ biến trong hệ thống máy tính. Trên thị trường hiện nay có nhiều loại máy in, nội dung môn học này chỉ đề cập đến hai loại máy in phổ biến được trang bị trong văn phòng và các hộ gia đình, đó là máy in phun và máy in laser. Bộ phận quan trọng nhất của máy in laser là một ống kim loại hình trụ, rỗng, được phủ một lớp vật liệu đặc biệt, có khả năng thay đổi điện tích khi ánh sáng laser chiếu vào, gọi là trống (drum). Nguyên lý chung của các máy in laser là sử dụng một hệ thống quang học lái tia laser khắc các hình ảnh cần in lên mặt trống. Sau đó, trống được lăn qua giấy để in những hình ảnh này lên giấy. Mực máy in laser có dạng bột, được sấy nóng chảy để bám vào giấy. Do đó, các máy in laser có thể in được trên nhiều loại giấy mà vẫn đảm bảo được chất lượng. Các máy in phun sử dụng một đầu phun dùng để phun mực trực tiếp lên giấy. Mực máy in phun có dạng lỏng nên có hai khuyết điểm như sau: bản in thường bị lem và hình ảnh thường phai màu theo thời gian. Do đó, ta phải sử dụng đúng loại giấy cho máy in phun, các loại giấy này thường có đặc điểm chung là không dễ bị 81 thấm nước. Để khắc phục khuyết điểm thứ hai, người ta thường sử dụng các loại mực chất lượng cao có pha chế với chất chống bay màu. Hiện nay, các máy in phun thường được sử dụng để in màu. Chất lượng hình ảnh màu của các máy in phun thường cao hơn, giá thành của máy in phun cũng rẻ hơn so với máy in laser, tuy nhiên chi phí để in một trang giấy bằng máy in phun đắt hơn nhiều lần so với máy in laser. Do đó, tùy vào mục đích sử dụng mà ta nên trang bị loại máy in cho phù hợp. Ổ đĩa cứng truyền thống là thiết bị lưu trữ dữ liệu dưới dạng từ tính. Các tín hiệu từ tính được chuyển đổi thành các bit dữ liệu bằng một bộ chuyển đổi chuyên dụng trước khi truyền đến máy tính. Chuẩn giao tiếp truyền thống giữa ổ đĩa cứng và máy tính là IDE, thực hiện việc truyền dữ liệu song song. Tuy nhiên, chuẩn này bị hạn chế về tốc độ truyền dữ liệu, nên hiện nay, chuẩn SATA truyền dữ liệu nối tiếp, có tốc độ cao và nhỏ gọn hơn được sử dụng phổ biến hơn. 5.4. Các ngoại vi Như đã đề cập trong phần đầu của chương, ngoại vi của vi xử lý là các khối điều khiển I/O. Ngoại vi có một số chức năng chính như sau. Điều khiển và định thì Giao tiếp với vi xử lý Giao tiếp với thiết bị bên ngoài Đệm dữ liệu Phát hiện lỗi Trong quá trình hoạt động, vi xử lý phải giao tiếp với rất nhiều thiết bị bên ngoài. Các nguồn tài nguyên của hệ thống như bộ nhớ chính hay bus hệ thống được chia sẻ để có thể hoạt động với nhiều ngoại vi. Vì vậy, các ngoại vi yêu cầu phải có chức năng điều khiển và định thì để có thể điều khiển các thiết bị bên ngoài hoạt động đồng bộ hoạt động đồng bộ trong hệ thống. Từ hình 5.1, ta có thể thấy, các ngoại vi có hai giao diện chính. Giao tiếp bus: dùng để giao tiếp, trao đổi dữ liệu với vi xử lý và các thành phần khác trong hệ thống thông qua bus. Các tín hiệu trong giao diện này phải 82 tương thích với bus, do đó, thường giống nhau cho các ngoại vi kết nối đến cùng một bus. Giao tiếp với các thiết bị bên ngoài: dùng để kết nối và trao đổi dữ liệu với các thiết bị bên ngoài. Các tín hiệu trong giao diện này hoàn toàn khác nhau giữa các ngoại vi do thiết bị bên ngoài có các chuẩn giao tiếp khác nhau. Tốc độ truy xuất dữ liệu của các ngoại vi và bộ nhớ không giống nhau, do đó chức năng đệm dữ liệu là cần thiết để đảm bảo việc truyền dữ liệu giữa các thành phần trong hệ thống diễn ra một cách đồng bộ. Hầu hết các ngoại vi còn có chức năng phát hiện lỗi trong quá trình truyền dữ liệu.Khi phát hiện lỗi trong dữ liệu nhận được, ngoại vi thường thông báo lỗi này cho vi xử lý để có hướng xử lý cho phù hợp. Sử dụng parity bit là một ví dụ đơn giản về việc dùng thêm một bit để phát hiện lỗi trong các giao thức truyền dữ liệu nối tiếp. CÂU HỎI ÔN TẬP CHƢƠNG 5 1. Mô tả hoạt động của vi xử lý khi nhận được yêu cầu ngắt từ ngoại vi. Vì sao phải lưu lại trạng thái các thanh ghi trước khi thực hiện chương trình ngắt? 2. Kỹ thuật DMA là gì? Trình bày ưu điểm của việc truy xuất dữ liệu bằng kỹ thuật DMA so với kỹ thuật ngắt. 3. Trình bày quá trình xảy ra trong hệ thống khi có một yêu cầu truy xuất dữ liệu bằng kỹ thuật DMA. 4. Thiết bị ngoại vi được kết nối với máy tính thông qua thành phần nào trong hệ thống. Mô tả đặc điểm chính của các thành phần này. 83 TÀI LIỆU THAM KHẢO [1]. Tống Văn On, Giáo trình Cấu trúc máy tính, Nhà xuất bản Lao động – Xã hội, 2007. [2]. Paul A.Carter, PC Assembly Language, 2006. [3]. William Stallings, Computer Organization and Architecture (Ninth Edition), Prentice Hall, 2012 [4]. Linda Null, Julia Lobur, The Essentials of Computer Organization and Architecture, Jones and Bartlett Publishers, 2003. 84