Thiết kế hệ thống System Design bao gồm tất cả các thành phần phần cứng khác bên trong một hệ thống tính toán chẳng hạn: - Các đường kết nối hệ thống như bus máy tính và switch - Các
TỔNG QUAN VỀ KIẾN TRÚC MÁY TÍNH
Một số khái niệm và nguyên lý cơ bản
Máy tính là một khái niệm chỉ mọi phương tiện thường dùng để thực hiện các phép biến đổi toán học nhƣ: que tính, bàn tính, máy tính điện cơ, máy tính điện tử,…
Do đƣợc xây dựng trên cơ sở sử dụng các linh kiện và mạch điện tử nhƣ: transistor, vi mạch bán dẫn, … máy tính điện tử là một loại thiết bị tự động cho phép thu thập, lưu trữ và xử lý các dữ liệu rất hiệu quả.
Tùy thuộc nguyên lý hoạt động máy tính điện tử đƣợc phân thành hai loại: máy tính tương tự và máy tính số Máy tính tương tự (analog computer) hoạt động với tín hiệu tương tự có biên độ biến thiên một cách liên tục theo thời gian Máy tính số (digital computer) chỉ làm việc với các tín hiệu số, đó là loại tín hiệu tương tự đã được rời rạc hóa về thời gian và lượng tử hóa về biên độ Ngày nay, do máy tính số được dùng rất phổ biến nên khi nói đến máy tính thường hiểu ngầm là máy tính số.
Một máy tính số đƣợc phát triển trên cơ sở của 2 phần: phần cứng và phần mềm phần cứng (hardware) gồm những đối tƣợng vật lý hữu hình nhƣ: vi mạch, bản mạch in, bộ nhớ, màn hình, bàn phím … Phần mềm (software) gồm các thuật giải và sự thể hiện trên máy tính của nó là các chương trình Các chương trình bao gồm các lệnh hay chỉ thị Chương trình có thể nhập vào máy tính từ bàn phím, trình bày trên màn hình, ghi trên đĩa từ … mà nội dung chủ yếu của nó là các dãy lệnh Từ đầu những năm 80, do áp dụng những thành tựu về công nghệ phần cứng hiện đại, đặc biệt là kỹ thuật mạch tích hợp, với cùng một khả năng tính toán các máy tính có kích thước, công suất tiêu hao đủ nhỏ và giá thành giảm xuống thấp cho phép một cá nhân có thể sở hữu một máy tính Từ đó máy tính cá nhân (personal computer - PC) hay máy vi tính (microcomputer) ra đời, theo đúng tên gọi của nó là máy tính có thể sử dụng cho một người, khác với máy tính lớn (mainframe) được dùng bởi nhiều người qua các thiết bị đầu cuối (terminal) Chính sự khác biệt này đã mở ra một kỷ nguyên áp dụng PC trong rất nhiều lĩnh vực khoa học công nghệ và đời sống.
1.2 Ngôn ngữ máy và cấp kiến trúc máy tính
Một chuỗi các lệnh mô tả cách thực hiện một công việc nào đó trong máy tính gọi là chương trình Các mạch điện tử trong máy tính số có thể nhận biết và thực thi trực tiếp một tập giới hạn các lệnh đơn giản Các mạch này đƣợc xây dựng trên cơ sở nhận biết và xử lý các số nhị phân Muốn thực thi các chương trình trước tiên phải biến đổi chúng sang các lệnh cơ bản của một tập lệnh mã máy (dạng nhị phân) nhất định để thi hành Các lệnh cơ bản đó có thể hình thành nên một ngôn ngữ có khả năng giúp con người liên lạc với máy tính Đó là ngôn ngữ máy do các hãng sản xuất máy tính cung cấp cho người dùng Tập lệnh mã máy này đƣợc chọn lựa khi thiết kế máy tính dựa trên các cơ sở phù hợp với khả năng và các yêu cầu về hiệu suất của máy Các lệnh cũng nhƣ số liệu trong tập lệnh máy đều là những số nhị phân, ngôn ngữ máy này gọi là L1 Ngôn ngữ L1 không gần gũi với con người nên cần thiết kế các tập lệnh mới sao cho gần gũi hơn với ngôn ngữ con người các lệnh mới này cũng hình thành một ngôn ngữ gọi là ngôn ngữ L2 Có 2 phương pháp cho phép thực thi các chương trình viết bằng L2 Thứ nhất, trước tiên thay thế mỗi lệnh của L2 bằng một chuỗi các lệnh tương đương trong ngôn ngữ máy L1, đây được gọi là quá trình dịch Thứ hai, viết một chương trình đặc biệt bằng L1, chương trình này xem các chương trình viết bằng L2 nhƣ là dữ liệu vào và thực thi chúng bằng cách khảo sát tuần tự từng lệnh và thi hành trực tiếp chuỗi các lệnh tương đương trong L1, đây được gọi là thông dịch và chương trình thực hiện sự thông dịch gọi là trình thông dịch.
Cũng như vậy, có thể phát triển một tập các lệnh mới nữa hướng về con người hơn để hình thành ngôn ngữ mới L3 Các chương trình viết trong L3 hoặc sẽ đƣợc dịch sang L2 hoặc đƣợc thực thi bởi một trình thông dịch viết trong L2.
Việc phát triển ra một chuỗi các ngôn ngữ, mỗi ngôn ngữ thích hợp hơn so với ngôn ngữ trước đó có thể tiếp tục không ngừng cho đến khi nhận được ngôn ngữ thích hợp nhất Chỉ có các chương trình viết bằng ngôn ngữ máy cấp L1 mới đƣợc thực thi trực tiếp bởi các mạch điện tử mà không cần sự can thiệp của biên dịch hoặc thông dịch Các chương trình viết bằng L2, L3, …, Ln hoặc phải đƣợc thông dịch bởi một trình thông dịch chạy trên cấp thấp hơn hoặc phải được dịch sang ngôn ngữ khác tương ứng với cấp thấp hơn.
Máy tính đƣợc xem xét nhƣ là một hệ thống các cấp có thứ bậc cho ta một kiến trúc hoặc một cơ cấu tổ chức tốt nhằm tìm hiểu cách tổ chức các máy tính.
Hình 1.1 Cấu trúc phân cấp của máy tính cơ bản
Cấp 0, cấp logic số là phần cứng của máy tính trong đó các mạch điện tử của cấp này thực thi các chương trình ngôn ngữ máy của cấp 1.
Cấp 1, cấp ngôn ngữ máy thực sự ở đây có một chương trình gọi là vi chương trình (microprogram) làm nhiệm vụ thông dịch các lệnh của cấp 2.
Mỗi máy cấp 1 có một hoặc nhiều vi chương trình chạy trên chúng Mỗi vi chương trình xác định hoàn toàn một ngôn ngữ cấp 2, đây là cấp máy quy ước.
Cấp ngôn ngữ bậc cao và hướng đối tượng Cấp hợp ngữ
Cấp máy hệ điều hành
Cấp lệnh máy (lệnh vĩ mô)
Cấp vi lệnh (lệnh vi mô)
Cấp logic số (các mạch điện tử số)
Các vi chương trình Trình thông dịch Dịch một phần Dịch (trình biên dịch)
Cấp 3 thường là cấp hỗn hợp, hầu hết các lệnh trong ngôn ngữ cấp này cũng ở trong ngôn ngữ cấp 2, thêm vào đó lại có một tập các lệnh mới, một tổ chức bộ nhớ khác, khả năng chạy hai hay nhiều chương trình song song và nhiều đặc trƣng khác Các tiện nghi mới thêm vào ở đây đƣợc thực thi bởi một trình thông dịch chạy trên cấp 2 gọi là hệ điều hành (operating system)
Cấp 4 gọi là cấp hợp ngữ (assembly language level), cấp này cung cấp các từ gợi nhớ, cho phép thuận tiện trong việc viết chương trình hơn Các chương trình viết bằng hợp ngữ trước tiên được dịch sang ngôn ngữ cấp 1, 2 hoặc 3, sau đó được thông dịch bởi máy ảo hoặc thực tương ứng Chương trình thực hiện việc dịch gọi là trình hợp dịch (assembler)
Cấp 5 bao gồm các ngôn ngữ được thiết kế dành cho những người lập trình ứng dụng Chúng đƣợc gọi là ngôn ngữ cấp cao nhƣ: Pascal, C, Fortran, … và các ngôn ngữ lập trình hướng đối tượng như C++, J++ Các chương trình viết bằng ngôn ngữ này thường được dịch sang cấp 3 hoặc cấp 4 bằng các trình dịch gọi là trình biên dịch (compiler).
Còn các cấp trên nữa bao gồm những tập hợp các chương trình được thiết kế để tạo ra các máy dành riêng cho các ứng dụng đặc biệt nhƣ trong quản lý, giáo dục, thiết kế chip,…
Tóm lại, các máy tính đƣợc thiết kế thành một chuỗi các cấp, mỗi cấp đƣợc xây dựng trên cấp trước đó Mỗi cấp biểu thị một quan điểm trừu tượng riêng, với các đối tƣợng và các thao tác khác nhau.
Lịch sử phát triển và ứng dụng của máy tính điện tử
Sự phát triển của máy tính đƣợc xác định dựa trên sự tiến bộ của các công nghệ chế tạo các linh kiện cơ bản của máy tính nhƣ: bộ xử lý, bộ nhớ, các ngoại vi,…Ta có thể nói máy tính điện tử số trải qua bốn thế hệ liên tiếp Việc chuyển từ thế hệ trước sang thế hệ sau được đặc trưng bằng một sự thay đổi cơ bản về công nghệ.
ENIAC (Electronic Numerical Integrator and Computer) là máy tính điện tử số đầu tiên do Giáo sư Mauchly và người học trò Eckert tại Đại học Pennsylvania thiết kế vào năm 1943 và đƣợc hoàn thành vào năm 1946 Đây là một máy tính khổng lồ với thể tích dài 20 mét, cao 2,8 mét và rộng vài mét ENIAC bao gồm: 18.000 đèn điện tử, 1.500 công tắc tự động, cân nặng 30 tấn, và tiêu thụ 140KW giờ Nó có 20 thanh ghi 10bit (tính toán trên số thập phân)
Có khả năng thực hiện 5.000 phép toán cộngtrong một giây Công việc lập trình bằng tay bằng cách đấu nối các đầu cắm điện và dùng các ngắt điện
Giáo sư toán học John Von Neumann đã đưa ra ý tưởng thiết kế máy tính IAS (Princeton Institute for Advanced Studies): chương trình được lưu trong bộ nhớ, bộ điều khiển sẽ lấy lệnh và biến đổi giá trị của dữ liệu trong phần bộ nhớ, bộ làm toán và luận lý (ALU: Arithmetic And Logic Unit) đƣợc điều khiển để tính toán trên dữ liệu nhị phân, điều khiển hoạt động của các thiết bị vào ra Đây là một ý tưởng nền tảng cho các máy tính hiện đại ngày nay Máy tính này còn đƣợc gọi là máy tính Von Neumann
Hình 1.3 Cấu trúc máy tính IAS
Công ty Bell đã phát minh ra transistor vào năm 1947 và do đó thế hệ thứ hai của máy tính đƣợc đặc trƣng bằng sự thay thế các đèn điện tử bằng các transistor lưỡng cực Tuy nhiên, đến cuối thập niên 50, máy tính thương mại dùng transistor mới xuất hiện trên thị trường Kích thước máy tính giảm, rẻ tiền hơn, tiêu tốn năng lƣợng ít hơn Vào thời điểm này, mạch in và bộ nhớ bằng xuyến từ đƣợc dùng Ngôn ngữ cấp cao xuất hiện (nhƣ FORTRAN năm 1956, COBOL năm 1959, ALGOL năm 1960) và hệ điều hành kiểu tuần tự (Batch Processing) được dùng Trong hệ điều hành này, chương trình của người dùng thứ nhất được chạy, xong đến chương trình của người dùng thứ hai và cứ thế tiếp tục
Thế hệ thứ ba đƣợc đánh dấu bằng sự xuất hiện của các mạch kết (mạch tích hợp
- IC: Integrated Circuit) Các mạch kết độ tích hợp mật độ thấp (SSI: Small Scale Integration) có thể chứa vài chục linh kiện và kết độ tích hợp mật độ trung bình (MSI: Medium Scale Integration) chứa hàng trăm linh kiện trên mạch tích hợp
Mạch in nhiều lớp xuất hiện, bộ nhớ bán dẫn bắt đầu thay thế bộ nhớ bằng xuyến từ Máy tính đa chương trình và hệ điều hành chia thời gian được dùng.
2.1.4 Thế hệ thứ 4 (1972 đến nay)
Thế hệ thứ tƣ đƣợc đánh dấu bằng các IC có mật độ tích hợp cao (LSI: Large Scale Integration) có thể chứa hàng ngàn linh kiện Các IC mật độ tích hợp rất cao (VLSI: Very Large Scale Integration) có thể chứa hơn 10 ngàn linh kiện trên mạch Hiện nay, các chip VLSI chứa hàng triệu linh kiện
Với sự xuất hiện của bộ vi xử lý (microprocessor) chứa cả phần thực hiện và phần điều khiển của một bộ xử lý, sự phát triển của công nghệ bán dẫn các máy vi tính đã đƣợc chế tạo và khởi đầu cho các thế hệ máy tính cá nhân
Các bộ nhớ bán dẫn, bộ nhớ cache, bộ nhớ ảo đƣợc dùng rộng rãi
Các kỹ thuật cải tiến tốc độ xử lý của máy tính không ngừng đƣợc phát triển: kỹ thuật ống dẫn, kỹ thuật vô hướng, xử lý song song mức độ cao, …
2.2 Phân loại máy tính Để phân loại máy tính người ta dựa vào khả năng và tốc độ xử lý của máy tính
Một siêu máy tính (supercomputer) 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 dùng lần đầu trong báo New York
World vào năm 1920 để nói đến những bảng tính (tabulators) lớn của IBM làm cho trường Đại học Columbia Siêu máy tính hiện nay có tốc độ xử lý hàng nghìn teraflop (một teraflop tương đương với hiệu suất một nghìn tỷ phép tính/giây) hay bằng tổng hiệu suất của 6.000 chiếc máy tính cá nhân hiện đại nhất hiện nay gộp lại (một máy có tốc độ khoảng từ 3-3,8 gigaflop)
Có thể hiểu siêu máy tính là hệ thống những máy tính làm việc song song
Ví dụ Siêu máy tính Sequoia của IBM có tốc độ tính toán504 tỷ phép tính/giây, Sequoia nhanh hơn máy tính lớn của Fujitsu 1,55 lần và sử dụng hơn 1,5 triệu bộ xử lý Trong khi đó máy tính lớn của Fujitsu có số đơn vị xử lý (CPU) ít hơn gần một nửa Về năng lƣợng, siêu máy tính của IBM cũng tiết kiệm hơn khi nó tiêu thụ 7,9 megawatts, trong khi đó máy của Fujitsu tiêu thụ 12,6 megawatts
Máy tính lớn (Mainframe) 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 hãng bảo hiểm để chạy các ứng dụng lớ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, và xử lý các giao tác thương mại Hiện nay thị trường máy tính lớn do IBM chiếm 99% So với các máy tính loại nhỏ như máy tính cá nhân, máy tính lớn cũng nhƣ 1 chiếc xe tăng: vững chắc, có thể nhận hàng ngàn lệnh cùng 1 lúc.
Là loại máy tính nhiều người sử dụng, được thiết kế để đáp ứng các yêu cầu công việc cho một công ty nhỏ Máy tính mini mạnh hơn máy tính cá nhân nhưng không mạnh bằng máy tính lớn Nói chung có khoảng từ 4 đến 100 người có thể sử dụng máy tính mini cùng một lúc.
- Máy tính cá nhân (Personal computer - PC)
Là một loại máy vi tính nhỏ với giá cả, kích thước và sự tương thích của nó khiến nó hữu dụng cho từng cá nhân
2.3 Các lĩnh vực ứng dụng của máy tính
Trong các lĩnh vực khoa học và đời sống, máy tính số có thể đƣợc sử dụng trong
- Máy tính dùng để xử lý dữ liệu
Một máy tính có thể đƣợc coi nhƣ là một bộ xử lý dữ liệu, ví dụ nhƣ để tính tổng số tiền công phải trả cho từng nhân viên trong cơ quan Mục đích của chương trình ở đây là dùng các dữ liệu nhập vào, xử lý tính toán chúng rồi lưu trữ các kết quả vào bộ nhớ, các kết quả đó có thể hiện lên màn hình, in ra giấy in hoặc lưu trữ vào đĩa
- Máy tính là một xử lý số
Các hệ thống số
3.1 Nguyên lý của việc viết số
Một số đƣợc viết bằng cách đặt kề nhau các ký hiệu, đƣợc chọn trong một tập hợp xác định Mỗi ký hiệu trong một số đƣợc gọi là số mã (số hạng, digit)
Thí dụ, trong hệ thống thập phân (cơ số 10) tập hợp này gồm 10 ký hiệu rất quen thuộc, đó là các con số từ 0 đến 9:
Khi một số gồm nhiều số mã đƣợc viết, giá trị của các số mã tùy thuộc vị trí của nó trong số đó Giá trị này đƣợc gọi là trọng số của số mã
Thí dụ số 1998 trong hệ thập phân có giá trị xác định bởi triển khai theo đa thức của 10:
Trong triển khai, số mũ của đa thức chỉ vị trí của một ký hiệu trong một số với qui ƣớc vị trí của hàng đơn vị là 0, các vị trí liên tiếp về phía trái là 1, 2, 3, Nếu có phần lẻ, vị trí đầu tiên sau dấu phẩy là -1, các vị trí liên tiếp về phía phải là -2, -3,
Ta thấy, số 9 đầu tiên (sau số 1) có trọng số là 900 trong khi số 9 thứ hai chỉ là
Có thể nhận xét là với 2 ký hiệu giống nhau trong hệ 10, ký hiệu đứng trước có trọng số gấp 10 lần ký hiệu đứng ngay sau nó Điều này hoàn toàn đúng cho các hệ khác, ví dụ, đối với hệ nhị phân ( cơ số 2) thì tỉ lệ này là 2
Tổng quát, một hệ thống số đƣợc gọi là hệ b sẽ gồm b ký hiệu trong một tập hợp:
Sb = {S0, S1, S2, , Sb-1} Một số N đƣợc viết:
N = (an-1an-2 .ai a0 , a-1a-2 a-m)bvới ai∈ Sb
1 aib i chính là trọng số của một ký hiệu trong S b ở vị trí thứ i.
- Hệ cơ số 10 (thập phân, Decimal system)
Hệ thập phân là hệ thống số rất quen thuộc, gồm 10 số mã nhƣ nói trên
Dưới đây là vài ví dụ số thập phân:
- Hệ cơ số 2 (nhị phân, Binary system)
Hệ nhị phân gồm hai số mã trong tập hợp
Mỗi số mã trong một số nhị phân đƣợc gọi là một bit (viết tắt của binary digit)
Số N trong hệ nhị phân:
-m2 -m an là bit có trọng số lớn nhất, đƣợc gọi là bit MSB (Most significant bit) và a
-m là bit có trọng số nhỏ nhất, gọi là bit LSB (Least significant bit)
- Hệ cơ số 8 (bát phân, Octal system)
Hệ bát phân gồm tám số trong tập hợp
Số N trong hệ bát phân:
- Hệ cơ số 16 (thập lục phân, Hexadecimal system)
Hệ thập lục phân được dùng rất thuận tiện để con người giao tiếp với máy tính, hệ này gồm mười sáu số trong tập hợp
Số N trong hệ thập lục phân:
Người ta thường dùng chữ H (hay h) sau con số để chỉ số thập lục phân
3.2 Biến đổi qua lại giữa các hệ thống số
Khi đã có nhiều hệ thống số, việc xác định giá trị tương đương của một số trong hệ này so với hệ kia là cần thiết Phần sau đây cho phép ta biến đổi qua lại giữa các số trong bất cứ hệ nào sang bất cứ hệ khác trong các hệ đã đƣợc giới thiệu
- Đổi một số từ hệ b sang hệ 10 Để đổi một số từ hệ b sang hệ 10 ta triển khai trực tiếp đa thức của b
Có giá trị tương đương trong hệ 10 là:
Ví dụ: Đổi số 10110,11 2 sang hệ 10
- Đổi số 4BE,ADH sang hệ 10
- Đổi một số từ hệ 10 sang hệ b Đây là bài toán tìm một dãy ký hiệu cho số N viết trong hệ b
Tổng quát, một số N cho ở hệ 10, viết sang hệ b có dạng:
0) b = PE(N) là phần nguyên của N và (0,a
-m) b = PF(N) là phần lẻ của N
Phần nguyên và phần lẻ đƣợc biến đổi theo hai cách khác nhau:
Giá trị của phần nguyên xác định nhờ triển khai:
0b 0 Hay có thể viết lại
Với cách viết này ta thấy nếu chia PE(N) cho b, ta được thương số là PE’(N) = (a n-1 b n-2 + + a
Vậy số dƣ của lần chia thứ nhất này chính là số mã có trọng số nhỏ nhất (a
Lặp lại bài toán chia PE’(N) cho b:
Ta đƣợc số dƣ thứ hai, chính là số mã có trọng số lớn hơn kế tiếp (a
1) và thương số là PE”(N)= a n-1 b n-3 + + a
Tiếp tục bài toán chia thương số có được với b, cho đến khi được số dư của phép chia cuối cùng, đó chính là số mã có trọng số lớn nhất (a n-1)
Giá trị của phần lẻ xác định bởi:
Nhân PF(N) với b, ta đƣợc : bPF(N) = a -1 + (a
Vậy lần nhân thứ nhất này ta đƣợc phần nguyên của phép nhân, chính là số mã có trọng số lớn nhất của phần lẻ (a
-1) (số a -1 này có thể vẫn là số 0)
PF’(N) là phần lẻ xuất hiện trong phép nhân
Tiếp tục nhân PF’(N) với b, ta tìm đƣợc a
Lặp lại bài toán nhân phần lẻ với b cho đến khi kết quả có phần lẻ bằng không, ta sẽ tìm đƣợc dãy số (a -1 a
Chú ý: Phần lẻ của số N khi đổi sang hệ b có thể gồm vô số số hạng (do kết quả của phép nhân luôn khác 0), điều này có nghĩa là ta không tìm đƣợc một số trong hệ b có giá trị đúng bằng phần lẻ của số thập phân, vậy tùy theo yêu cầu về độ chính xác khi chuyển đổi mà người ta lấy một số số hạng nhất định
* Đổi 25,3 10 sang hệ nhị phân
3 = 1 thương số cuối cùng là 1 cũng chính là bit a
Nhận thấy kết quả của các bài toán nhân luôn khác không, do phần lẻ của lần nhân cuối cùng là 0,6, đã lặp lại kết quả của lần nhân thứ nhất, nhƣ vậy bài toán không thể kết thúc với kết quả đúng bằng 0,3 của hệ 10
Giả sử bài toán yêu cầu lấy 5 số lẻ thì ta có thể dừng ở đây và
Kết quả cuối cùng là: 25,3
* Đổi 1376,85 10 sang hệ thập lục phân
-3 = 9 Nếu chỉ cần lấy 3 số lẻ: 0,85 10 = 0,D99H
Và kết quả cuối cùng: 1376,85
- Đổi một số từ hệ b sang hệ b k và ngƣợc lại
Từ cách triển khai đa thức của số N trong hệ b, ta có thể nhóm thành từng k số hạng từ dấu phẩy về hai phía và đặt thành thừa số chung
- mb -m Để dễ hiểu, chúng ta lấy thí dụ k = 3, N đƣợc viết lại bằng cách nhóm từng 3 số hạng, kể từ dấu phẩy về 2 phía
Phần chứa trong mỗi dấu ngoặc luôn luôn nhỏ hơn b 3 , vậy số này tạo nên một số trong hệ b 3 và lúc đó được biểu diễn bởi ký hiệu tương ứng trong hệ này
Thật vậy, số N có dạng:
Các số A i luôn luôn nhỏ hơn B=b 3 nhƣ vậy nó chính là một phần tử của tập hợp số tạo nên hệ B=b 3
Ta có kết quả biến đổi tương tự cho các hệ số k khác
Tóm lại, để đổi một số từ hệ b sang hệ b k , từ dấu phẩy đi về hai phía, ta nhóm từng k số hạng, giá trị của mỗi k số hạng này (tính theo hệ b) chính là số trong hệ b k
Từ dấu phẩy, nhóm từng 3 số hạng về hai phía (nếu cần, thêm số 0 vào ở nhóm đầu và cuối để đủ 3 số hạng mà không làm thay đổi giá trị của số N):
Ghi giá trị tương ứng của các số 3 bit, ta được số N trong hệ 8
* Đổi số N trên sang hệ 16 = 2 4
Cũng nhƣ trên nhƣng nhóm từng 4 số hạng
Từ kết quả của phép đổi số từ hệ b sang hệ b k , ta có thể suy ra cách biến đổi ngƣợc một cách dễ dàng: Thay mỗi số hạng của số trong hệ b k bằng một số gồm k số hạng trong hệ b
Ví dụ để đổi số N = 5 F5, 68 16 (hệ 2 4 ) sang hệ nhị phân (2) ta dùng 4 bit để viết cho mỗi số hạng của số này:
- Đổi một số từ hệ b k sang hệ b p
Qua trung gian của hệ b, ta có thể đổi từ hệ b k sang hệ b p Muốn đổi số N từ hệ b k sang hệ b p , trước nhất đổi số N sang hệ b rồi từ hệ b tiếp tục đổi sang hệ b p
Đổi số ABCD,EFH sang hệ 8
Dưới đây là bảng kê các số đầu tiên trong các hệ khác nhau:
3.3 Các phép tính trong hệ nhị phân
Các phép tính trong hệ nhị phân được thực hiện tương tự như trong hệ thập phân, tuy nhiên cũng có một số điểm cần lưu ý
Là phép tính làm cơ sở cho các phép tính khác
Khi thực hiện phép cộng cần lưu ý:
1 + 1 = 0 nhớ 1 (đem qua bít cao hơn)
Ngoài ra nếu cộng nhiều số nhị phân cùng một lúc ta nên nhớ:
- Nếu số bit 1 chẵn, kết quả là 0;
- Nếu số bit 1 lẻ kết quả là 1
- Và cứ 1 cặp số 1 cho 1 số nhớ (bỏ qua số 1 dƣ, thí dụ với 5 số 1 ta kể là
0 - 1 = 1 nhớ 1 cho bit cao hơn
Lần chia đầu tiên, 5 bit của số bị chia nhỏ hơn số chia nên ta đƣợc kết quả là 0, sau đó ta lấy 6 bit của số bị chia để chia tiếp (tương ứng với việc dịch phải số chia 1 bit trước khi thực hiện phép trừ)
Thông tin và mã hóa thông tin
Thông tin gắn liền với sự hiểu biết một trạng thái trong nhiều trạng thái có thể có vào một thời điểm cho trước.
Trong máy tính, các thông tin đƣợc biểu diễn bằng hệ đếm nhị phân Tuy chỉ dùng 2 ký số là 0 và 1 mà ta gọi là bit nhƣng hệ nhị phân đã giúp máy tính biểu diễn - xử lý được trên hầu hết các loại thông tin mà con người hiện đang sử dụng nhƣ văn bản, hình ảnh, âm thanh, video,
- Lƣợng thông tin và sự mã hoá thông tin
Thông tin được đo lường bằng đơn vị thông tin mà ta gọi là bit Lượng thông tin đƣợc định nghĩa bởi công thức:
2(N) Trong đó: I: là lƣợng thông tin tính bằng bit
N: là số trạng thái có thể có
Vậy một bit ứng với sự hiểu biết của một trạng thái trong hai trạng thái có thể có Thí dụ, sự hiểu biết của một trạng thái trong 8 trạng thái có thể ứng với một lƣợng thông tin là:
Tám trạng thái đƣợc ghi nhận nhờ 3 số nhị phân (mỗi số nhị phân có thể có giá trị 0 hoặc 1)
Nhƣ vậy lƣợng thông tin là số con số nhị phân cần thiết để biểu diễn số trạng thái có thể có Do vậy, một con số nhị phân đƣợc gọi là một bit Một từ n bit có thể tƣợng trƣng một trạng thái trong tổng số 2 n trạng thái mà từ đó có thể tƣợng trưng Vậy một từ n bit tương ứng với một lượng thông tin n bit
Có nhiều cách để biểu diễn một số n bit có dấu Trong tất cả mọi cách thì bit cao nhất luôn tƣợng trƣng cho dấu
Khi đó, bit dấu có giá trị là 0 thì số nguyên dương, bit dấu có giá trị là 1 thì số nguyên âm Tuy nhiên, cách biểu diễn dấu này không đúng trong trường hợp số được biểu diễn bằng số thừa K mà ta sẽ xét ở phần sau trong chương này (bit dấu có giá trị là 1 thì số nguyên dương, bit dấu có giá trị là 0 thì số nguyên âm). d n-1 d n-2 d n-3 …… d 2 d 1 d 0
Số nguyên có bit d n-1 là bit dấu và có trị số tƣợng trƣng bởi các bit từ d
- Cách biểu diễn bằng trị tuyệt đối và dấu
Trong cách này, bit d n-1 là bit dấu và các bit từ d 0 tới d n-2 cho giá trị tuyệt đối Một từ n bit tương ứng với số nguyên thập phân có dấu
Một Byte (8 bit) có thể biểu diễn các số có dấu từ -127 đến +127
Có hai cách biểu diễn số không là 0000 0000 (+0) và 1000 0000 (-0)
- Cách biểu diễn hằng số bù 1
Trong cách biểu diễn này, số âm -N đƣợc có bằng cách thay các số nhị phân d i của số đương N bằng số bù của nó (nghĩa là nếu d i = 0 thì người ta đổi nó thành
Một Byte cho phép biểu diễn tất cả các số có dấu từ -127 (1000 0000
Có hai cách biểu diễn cho 0 là 0000 0000 (+0) và 1111 1111 (-0)
- Cách biểu diễn bằng số bù 2 Để có số bù 2 của một số nào đó, người ta lấy số bù 1 rồi cộng thêm 1 Vậy một từ n bit (d n-1 d
Một từ n bit có thể biểu diễn các số có dấu từ - 2 n-1 đến 2 n-1 - 1 Chỉ có một cách duy nhất để biểu diễn cho số không là tất cả các bit của số đó đều bằng không
Dùng 1 Byte (8 bit) để biểu diễn một số có dấu lớn nhất là +127 và số nhỏ nhất là –128
Chỉ có một giá trị 0: +0 = 00000000
- Cách biểu diễn bằng số thừa K
Còn gọi là biểu diễn số dịch, chọn một số nguyên dương k cho trước làm giá trị dịch
Trong cách này, số dương của một số N có được bằng cách “cộng thêm vào” số thừa K được chọn sao cho tổng của K và một số âm bất kỳ luôn luôn dương Số âm -N của số N có đƣợc bằng cách lấy K-N (hay lấy bù hai của số vừa xác định)
Ví dụ: (số thừa K8, số “cộng thêm vào” 128 là một số nguyên dương Số âm là số lấy bù hai số vừa tính, bỏ qua số giữ của bit cao nhất) :
Dùng 1 Byte (8 bit) để biểu diễn một số có dấu lớn nhất là +127 và số nhỏ nhất là –128
Chỉ có một giá trị 0: +0 = 10000000 2 , -0 = 10000000
Cách biểu diễn số nguyên có dấu bằng số bù 2 đƣợc dùng rộng rãi cho các phép tính số nguyên Nó có lợi là không cần thuật toán đặc biệt nào cho các phép tính cộng và tính trừ, và giúp phát hiện dễ dàng các trường hợp bị tràn
Các cách biểu diễn bằng "dấu , trị tuyệt đối" hoặc bằng "số bù 1" dẫn đến việc dùng các thuật toán phức tạp và bất lợi vì luôn có hai cách biểu diễn của số không Cách biểu diễn bằng "dấu , trị tuyệt đối" đƣợc dùng cho phép nhân của số có dấu chấm động
Cách biểu diễn bằng số thừa K đƣợc dùng cho số mũ của các số có dấu chấm động Cách này làm cho việc so sánh các số mũ có dấu khác nhau trở thành việc so sánh các số nguyên dương
4.2 Cách biểu diễn số với dấu chấm động
Trước khi đi vào cách biểu diễn số với dấu chấm động, chúng ta xét đến cách biểu diễn một số dưới dạng dấuchấm xác định
Ví dụ: Trong hệ thập phân, số 254 10 có thể biểu diễn dưới các dạng sau:
Trong hệ nhị phân, số (0.00011) 2 (tương đương với số 0.09375 10 ) có thể biểu diễn dưới các dạng:
Các cách biểu diễn này gây khó khăn trong một số phép so sánh các số Để dễ dàng trong các phép tính, các số đƣợc chuẩn hoá về một dạng biểu diễn: ± 1 fff f x 2 ± E Trong đó: f là phần lẻ; E là phần mũ
Số chấm động đƣợc chuẩn hoá, cho phép biểu diễn gần đúng các số thập phân rất lớn hay rất nhỏ dưới dạng một số nhị phân theo một dạng quy ước Thành phần của số chấm động bao gồm: phần dấu, phần mũ và phần định trị Nhƣ vậy, cách này cho phép biểu diễn gần đúng các số thực, tất cả các số đều có cùng cách biểu diễn
Có nhiều cách biểu diễn dấu chấm động, trong đó cách biểu diễn theo chuẩn IEEE 754 đƣợc dùng rộng rãi trong khoa học máy tính hiện nay Trong cách biểu diễn này, phần định trị có dạng 1,f với số 1 ẩn tăng và f là phần số lẻ
Chuẩn IEEE 754 định nghĩa hai dạng biểu diễn số chấm động:
Số chấm động chính xác đơn với định dạng đƣợc định nghĩa: chiều dài số:
32 bit được chia thành các trường: dấu S (Sign bit - 1 bit), mũ E (Exponent - 8 bit), phần lẻ F (Fraction - 23 bit)
Số này tương ứng với số thực (-1) S * (1,f
Số chấm động chính xác kép với định dạng đƣợc định nghĩa: chiều dài số:
64 bit được chia thành các trường: dấu S (Sign bit - 1 bit), mũ E (Exponent - 11 bit), phần lẻ F (Fraction - 52 bit)
Số này tương ứng với số thực (-1) S * (1,f
Chuẩn IEEE 754 cho phép biểu diễn các số chuẩn hóa (các bit của E không cùng lúc bằng 0 hoặc bằng 1), các số không chuẩn hóa (các bit của E không cùng lúc bằng 0 và phần số lẻ f1 f2 khác không), trị số 0 (các bit của E không cùng lúc bằng 0 và phần số lẻ bằng không), và các ký tự đặc biệt (các bit của E không cùng lúc bằng 1 và phần lẻ khác không)
Ví dụ các bước biến đổi số thập phân -12.625
10 sang số chấm động chuẩn IEEE
- Bước 3: Điền các bit vào các trường theo chuẩn:
Số âm: bit dấu S có giá trị 1 Phần mũ E với số thừa K7, ta có: E-127=3
4.3 Biểu diễn các số thập phân
BỘ XỬ LÝ
Các thành p hần cơ bản của một máy tính
Thành phần cơ bản của một bộ máy tính gồm: đơn vị xử lý trung tâm (CPU), bộ nhớ trong, các bộ phận nhập - xuất thông tin Các bộ phận trên đƣợc kết nối với nhau thông qua các hệ thống bus Hệ thống bus bao gồm: bus địa chỉ, bus dữ liệu và bus điều khiển Bus địa chỉ và bus dữ liệu dùng trong việc chuyển dữ liệu giữa các bộ phận trong máy tính Bus điều khiển làm cho sự trao đổi thông tin giữa các bộ phận được đồng bộ Thông thường người ta phân biệt một bus hệ thống dùng trao đổi thông tin giữa CPU và bộ nhớ trong (thông qua cache), và một bus vào-ra dùng trao đổi thông tin giữa các bộ phận vào-ra và bộ nhớ trong.
Hình 2.1 Cấu trúc của một hệ máy tính đơn giản
Đơn vị xử lý trung tâm CPU: có thể gọi tắt là bộ xử lý, dùng tìm –nạp và thực thi các lệnh từ bộ nhớ Bên trong nó có đơn vị điều khiển (CU: Control Unit), đơn vị tính toán số học và luận lý (ALU: Arithmetic And Logic Unit) và các thanh ghi (Registers)
Bộ nhớ chính trong máy tính gồm bộ nhớ chỉ đọc ROM lưu trữ các chương trình và dữ liệu không bị mất đi khi tắt máy dùng cho khởi động hệ thống Bộ nhớ ghi/đọc được RAM dùng để lưu giữ các chương trình và dữ liệu khi chạy máy Bộ nhớ chính đƣợc tổ chức là một tập hợp các ô nhớ, mỗi ô nhớ có một số bit nhất định và chức một thông tin đƣợc mã hoá thành số nhị phân mà không quan tâm đến kiểu của dữ liệu mà nó đang chứa Mỗi ô nhớ của bộ nhớ trong đều có một địa chỉ Thời gian thâm nhập vào một ô nhớ bất kỳ trong bộ nhớ là nhƣ nhau RAM (Random Access Memory) gọi là bộ nhớ truy cập ngẫu nhiên vì thời gian thâm nhập vào một ô nhớ bất kỳ trong bộ nhớ là nhƣ nhau
Các thiết bị ngoại vi, còn gọi là các thiết bị vào/ra: đây là bộ phận xuất nhập thông tin, bộ phận này thực hiện sự giao tiếp giữa máy tính và người dùng hay giữa các máy tính trong hệ thống mạng (đối với các máy tính đƣợc kết nối thành một hệ thống mạng) Các bộ phận xuất nhập thường gặp là: bộ lưu trữ ngoài, màn hình, máy in, bàn phím, chuột, máy quét ảnh, các giao diện mạng cục bộ hay mạng diện rộng Bộ tạo thích ứng là một vi mạch tổng hợp (chipset) kết nối giữa các hệ thống bus có các tốc độ dữ liệu khác nhau.
Kiến trúc CISC, RISC
Các vi xử lý hoạt động theo nguyên tắc kể trên có số lƣợng lệnh vĩ mô lớn (thường hơn 300 lệnh), có các khả năng định địa chỉ phức tạp, các lệnh này được thực hiện bằng một chuỗi vi lệnh, vi chương trình Do vậy các vi xử lý này được gọi là máy tính có tập lệnh phức tạp CISC (Complex Instruction Set Computer)
Vi chương trình được phát triển mạnh trong những năm 70 khi bộ nhớ chính có tốc độ truy cập tương đối chậm Lúc đó các nhà thiết kế máy tính sử dụng bộ nhớ chính tốc độ chậm để lưu trữ các lệnh phức tạp tạo nên chương trình ở mức máy Các lệnh đó sẽ được dịch bằng vi mã trong bộ nhớ điều khiển vi chương trình có tốc độ nhanh hơn Ngày nay, các bộ nhớ chính có thời gian truy cập ngắn hơn 80ns làm cho các ưu điểm kể trên của vi chương trình không những biến mất mà còn gây cản trở cho hệ thống.
Trong hàng thập kỷ, các nhà khoa học máy tính đã nghiên cứu cách thức mà các máy tính hiện nay chạy chương trình Điều tra thống kê đã chỉ ra những kết luận sau:
Trong nhiều chương trình điển hình được xử lý bằng bộ xử lý CISC như nói trên thì đến 80% thời gian chạy chương trình được thực hiện chỉ bởi 20% số lệnh trong tập lệnh
Ví dụ: tác giả Fairclough đã chia các lệnh ra thành 8 nhóm và đã thống kê đƣợc kết quả trung bình tần suất sử dụng (xét về cả chương trình và kiến trúc máy tính) của chúng nhƣ sau:
1 là nhóm các lệnh chuyển dữ liệu
2 là nhóm các lệnh thay đổi tính tuần tự của chương trình (branch, call, return)
3 là nhóm các lệnh tính sốhọc
4 là nhóm các lệnh so sánh
5 là nhóm các lệnh logic
6 là nhóm các lệnh dịch
7 là nhóm các lệnh xử lý bit
8 là nhóm các lệnh vào/ra
Rõ ràng trong tổng số 8 nhóm lệnh thì 2 nhóm lệnh chuyển dữ liệu và thay đổi chương trình có tần suất sử dụng chiếm đến 74%
Có những trường hợp, để đạt được cùng một kết quả thì việc chạy một chuỗi lệnh đơn giản sẽ nhanh hơn là chạy một lệnh phức tạp.
Những kết luận này là tiền đề để một loại vi xử lý khác ra đời: nó hoạt động theo phương pháp sử dụng tập lệnh rút gọn RISC (Reduced Instruction Set Computer) Tập lệnh ở đây đƣợc hạn chế vào các lệnh chính yếu cần thiết trong số 20% lệnh nói trên và phần cứng đƣợc thiết kế sao cho các phần tử RISC này hiểu ngay được lệnh máy do chương trình cung cấp Do đó, các lệnh loại này không cần chuyển cho bộ giải mã vi lệnh mà có thể thực hiện đƣợc ngay Kiểu kiến trúc vi xử lý mới có tên gọi là RISC này cho phép thực hiện một mã thao tác chỉ trong một chu kỳ máy.
Các đặc điểm của kiến trúc RISC
Kiến trúc RISC cần có những đặc điểm sau:
- Cần có đủ số thanh ghi (thực chất là các bộ nhớ ngay trong chip, có thời gian truy cập nhanh hơn so với bộ nhớ ngoài) để khắc phục đƣợc hiệu ứng nghẽncổ chai
- Vì các lệnh trong nhóm 2 (call, return…) thường xảy ra nên yêu cầu cần có một kiến trúc tạo sự dự phòng cho việc chuyển hiệu quả các tham số giữa các thủ tục
- Các lệnh phức tạp làm tăng thời gian thiết kế, sản xuất và thử nghiệm
- Nếu một bộ xử lý RISC đủ nhanh thì nó phải chạy đƣợc một lệnh trong một chu kì máy Điều này cũng có nghĩa là sự phức tạp của các lệnh phải có giới hạn của chúng
- Kết quả tất yếu suy ra từ điều trên là một kiến trúc có hiệu quả không nên được vi chương trình hóa vì nó phải dịch một lệnh bằng việc chạy các vi lệnh
- Bộ xử lý hiệu quả phải có một bộ định dạng lệnh đơn Khi đó việc giải mã lệnh có thể đƣợc thực hiện bằng một mạch logic giải mã tối thiểu
Để giảm thời gian chạy lệnh, các lệnh dài có liên quan tới các vi xử lý thế hệ 1 và 2 cần phải bỏ đi.
2.1 Bộ điều khiển vi chương trình (CISC)
Hình 2.2 Nguyên tắc vận hành của bộ điều khiển dùng vi chương trình
Sơ đồ nguyên tắc của bộ điều khiển dùng vi chương trình được trình bày ở hình
2.2 Trong kỹ thuật này, các đường dây điều khiển của bộ đường đi dữ liệu ứng với các ngã ra của một vi lệnh nằm trong bộ nhớ vi chương trình Việc điều khiển các tác vụ của một lệnh mã máy đƣợc thực hiện bằng một chuỗi các vi lệnh Một vi máy tính nằm bên trong bộ điều khiển thực hiện từng lệnh của vi chương trình này Chính vi máy tính này điều khiển việc thực hiện một cách tuần tự các vi lệnh để hoàn thành tác vụ mà lệnh mã máy phải thực hiện Các tác vụ của lệnh mã máy cũng tùy thuộc vào trạng thái của phần đường đi dữ liệu
Bộ điều khiển bằng vi chương trình được dùng rộng rãi trong các bộ xử lý CISC
Bộ xử lý này có tập lệnh phức tạp với các lệnh có chiều dài khác nhau và có dạng thức phức tạp Trong các bộ xử lý CISC, người ta cài đặt một lệnh mã máy bằng cách viết một vi chương trình Như vậy công việc khá đơn giản và rất hữu hiệu Các sai sót trong thiết kế automat điều khiển cũng dễ sửa đổi
2.2.Bộ điều khiển mạch điện tử Để hiểu đƣợc vận hành của bộ điều khiển mạch điện tử, chúng ta xét đến mô tả về Automate trạng thái hữu hạn: có nhiều hệ thống hay nhiều thành phần mà ở mỗi thời điểm xem xét đều có một trạng thái (state) Mục đích của trạng thái là ghi nhớ những gì có liên quan trong quá trình hoạt động của hệ thống Vì chỉ có một số trạng thái nhất định nên nói chung không thể ghi nhớ hết toàn bộ lịch sử của hệ thống, do vậy nó phải đƣợc thiết kế cẩn thận để ghi nhớ những gì quan trọng Ƣu điểm của hệ thống (chỉ có một số hữu hạn các trạng thái) đó là có thể cài đặt hệ thống với một lƣợng tài nguyên cố định Chẳng hạn, chúng ta có thể cài đặt Automate trạng thái hữu hạn trong phần cứng máy tính ở dạng mạch điện hay một dạng chương trình đơn giản, trong đó, nó có khả năng quyết định khi chỉ biết một lƣợng giới hạn dữ liệu hoặc bằng cách dùng các mã tác vụ trong đoạn mã lệnh để đƣa ra quyết định
Hình 2.3 Nguyên tắc vận hành của bộ điều khiển dùng mạch điện
Hình 2.3 cho thấy nguyên tắc của một bộ điều khiển bằng mạch điện Các đường điều khiển của phần đường đi số liệu là các ngã ra của một hoặc nhiều Automate trạng thái hữu hạn Các ngã vào của Automate gồm có thanh ghi lệnh, thanh ghi này chứa lệnh phải thi hành và những thông tin từ bộ đường đi số liệu Ứng với cấu hình các đường vào và trạng thái hiện tại, Automate sẽ cho trạng thái tương lai và các đường ra tương ứng với trạng thái hiện tại Automate được cài đặt dưới dạng là một hay nhiều mạch mảng logic lập trình được (PLA: Programmable Logic Array) hoặc các mạch logic ngẫu nhiên
Tổ chức bộ xử lý trung tâm CPU
Phần đường đi dữ liệu gồm có bộ phận làm tính và luận lý (ALU: Arithmetic and Logic Unit), các mạch dịch, các thanh ghi và các đường nối kết các bộ phận trên Phần này chứa hầu hết các trạng thái của bộ xử lý Ngoài các thanh ghi tổng quát, phần đường đi dữ liệu còn chứa thanh ghi đếm chương trình (PC: Program Counter), thanh ghi trạng thái (SR: Status Register), thanh ghi đệm TEMP (Temporary), các thanh ghi địa chỉ bộ nhớ (MAR: Memory Address Register), thanh ghi số liệu bộ nhớ (MBR: Memory Buffer Register), bộ đa hợp (MUX: Multiplexor), đây là điểm cuối của các kênh dữ liệu - CPU và bộ nhớ, với nhiệm vụ lập thời biểu truy cập bộ nhớ từ CPU và các kênh dữ liệu, hệ thống bus nguồn (S1, S2) và bus kết quả (Dest)
Nhiệm vụ chính của phần đường đi dữ liệu là đọc các toán hạng từ các thanh ghi tổng quát, thực hiện các phép tính trên toán hạng này trong bộ làm tính và luận lý ALU và lưu trữ kết quả trong các thanh ghi tổng quát Ở ngã vào và ngã ra các thanh ghi tổng quát có các mạch chốt A, B, C Thông thường, số lượng các thanh ghi tổng quát là 32
Phần đường đi của dữ liệu chiếm phân nửa diện tích của bộ xử lý nhƣng là phần dễ thiết kế và cài đặt trong bộ xử lý
3.2 Các yếu tốtác động đến hiệu suất của CPU
Độ rộng Bus dữ liệu và Bus địa chỉ (Data Bus và Add Bus)
Độ rộng Bus dữ liệu là nói tới số lượng đường truyền dữ liệu bên trong và bên ngoài CPU
Như ví dụ hình dưới đây thì CPU có 12 đường truyền dữ liệu (ta gọi độ rộng Data Bus là 12 bit), hiện nay trong các CPU từ Pentium 2 đến Pentium 4 đều có độ rộng Data Bus là 64 bit.
Hình 2.4 Tổ chức của một bộ xử lí cơ bản
Hình 2.5 Bus dữ liệu CPU có 12 đường truyền gọi là Data Bus có 12 bỉt
Tương tự như vậy thì độ rộng Bus địa chỉ (Add Bus) cũng là số đường dây truyền các thông tin về địa chỉ Địa chỉ ở đây có thể là các địa chỉ của bộ nhớ RAM, địa chỉ các cổng vào ra và các thiết bị ngoại vi để có thể gửi hoặc nhận dữ liệu từ các thiết bị này thì CPU phải có địa chỉ của nó và địa chỉ này được truyền đi qua các Bus địa chỉ Giả sử: Nếu số đường địa chỉ là 8 đường thì CPU sẽ quản lý đƣợc 2 8 = 256 địa chỉ Hiện nay trong các CPU Pentium 4 có 64 bít địa chỉ và nhƣ vậy chúng quản lý đƣợc 2 64 địa chỉ nhớ
Tốc độ xử lý và tốc độ Bus (tốc độ dữ liệu ra vào chân) còn gọi là FSB
Tốc độ xử lý của CPU (Speed): Là tốc độ chạy bên trong của CPU, tốc độ này đƣợc tính bằng MHz hoặc GHz z Thí dụ một CPU Pentium 3 có tốc độ 800MHz tức là nó dao động ở tần số 800.000.000 Hz, CPU pentium 4 có tốc độ là 2,4GHz tức là nó dao động ở tần số 2.400.000.000 Hz
Tốc độ Bus của CPU (FSB): Là tốc độ dữ liệu ra vào các chân của CPU - còn gọi là Bus phía trước: Front Side Bus (FSB) Thông thường tốc độ xử lý của CPU thường nhanh gấp nhiều lần tốc độ Bus của nó, dưới đây là thí dụ minh hoạ về hai tốcđộ này (lưu ý từ Core i7 trở đi Intel không còn đặt là FSB nữa mà gọi là QPI) Hiện nay với CPU Dual Core thì có FSB từ 800MHz (E1xxx, E2xxx, E5xxx) đến 1066MHZ (E6300), Core 2 Duo từ 1066MHz đến 1333MHz, Core 2 Quad từ 1066MHz đến 1600MHz.
Hình 2.6 M inh họa về tốc độ xử lý và tốc độ bus (FSB) của CPU
Dung lƣợng bộ nhớđệm Cache
Bộ nhớ Cache là bộ nhớ nằm bên trong của CPU, nó có tốc độ truy cập dữ liệu theo kịp tốc độ xử lý của CPU, điều này khiến cho CPU trong lúc xử lý không phải chờ dữ liệu từ RAM vì dữ liệu từ RAM phải đi qua Bus của hệ thống nên mất nhiều thời gian Độ rộng Bus dữ liệu và Bus địa chỉ (Data Bus và Add Bus):
Một dữ liệu trước khi được xử lý, thông qua các lệnh gợi ý của ngôn ngữ lập trình, dữ liệu đƣợc nạp sẵn lên bộ nhớ Cache, vì vậy khi xử lý đến, CPU không mất thời gian chờ đợi
Khi xử lý xong trong lúc đường truyền còn bận thì CPU lại đưa tạm kết quả vào bộ nhớ Cache, như vậy CPU không mất thời gian chờ đường truyền đƣợc giải phóng
Bộ nhớ Cache là giải pháp làm cho CPU có điều kiện hoạt động thường xuyên mà không phải ngắt quãng chờ dữ liệu, vì vậy nhờ có bộ nhớ Cache mà hiệu quả xử lý tăng lên rất nhiều, tuy nhiên bộ nhớ Cache đƣợc làm bằng Ram tĩnh do vậy giá thành của chúng rất cao Hiện nay bộ nhớ Cache của các dòng CPU Intel thường từ 2MB trở lên
3.3 Nguyên lý hoạt động của CPU
CPU hoạt động hoàn toàn phụ thuộc vào các mã lệnh, mã lệnh là tín hiệu số dạng 0, 1 đƣợc dịch ra từ các câu lệnh lập trình, nhƣ vậy CPU sẽ không làm gì cả nếu không có các câu lệnh hướng dẫn
Khi chúng ta chạy một chương trình thì các chỉ lệnh của chương trình đó đƣợc nạp lên bộ nhớ RAM, các chỉ lệnh này đã đƣợc dịch thành ngôn ngữ máy và thường trú trên các ngăn nhớ của Ram ở dạng 0, 1.
CPU sẽ đọc và làm theo các chỉ lệnh một cách lần lƣợt Trong quá trình đọc và thực hiện các chỉ lệnh, các bộ giải mã sẽ giải mã các chỉ lệnh này thành các tín hiệu điều khiển
Công nghệ CPU đơn lõi: từPentium đến Pentium 4
Công nghệ siêu phân luồng: Pentium D
Công nghệ đa lõi: Duo Core, Core 2 Dual, Core Quad
So sánh giữa các công nghệ
Công nghệ lõi kép và tiếp theo là công nghệ đa lõi (multi-core) là tương lai của công nghệ vi xử lý Ở đây chúng ta sẽ cùng nhau tìm hiểu về công nghệ này trên chip Intel
Vào năm 2002, Intel đã giới thiệu các CPU có tích hợp công nghệ Hyper
Threading (Công nghệ Siêu phân luồng) Công nghệ này đã đƣợc cải tiến hơn so với công nghệ cũ nhƣ sau:
Hình 2.8a Nguyên lý hoạt động bộ xử lý đơn luồng
Hình 2.8b Nguyên lý hoạt động bộ xử lý siêu phân luồng
Mỗi ứng dụng trên máy tính khi thực hiện sẽ chạy nhiều tiến trình, mỗi tiến trình lại gồm nhiều luồng xử lý (gọi là thread) Với bộ xử lý đơn luồng, tại một thời điểm chỉ có một luồng xử lý đƣợc thực hiện, nếu có nhiều luồng cùng muốn thực hiện thì các luồng này thực hiện tuần tự cái sau tiếp nối cái trước.
Thực hiện lệnh mã máy bên trong bộ xử lý
Việc thi hành một lệnh mã máy có thể chia thành 5 giai đoạn:
Đọc lệnh (IF: Instruction Fetch)
Giải mã lệnh (ID: Instruction Decode)
Thi hành lệnh (EX: Execute)
Thâm nhập bộ nhớ trong hoặc nhảy (MEM: Memory access)
Lưu trữ kết quả (RS: Result Storing)
Mỗi giai đoạn đƣợc thi hành trong một hoặc nhiều chu kỳ xung nhịp
Bộ đếm chương trình PC được đưa vào MAR Lệnh được đọc từ bộ nhớ trong, tại các ô nhớ có địa chỉ nằm trong MAR và đƣợc đƣa vào thanh ghi lệnh IR
4.2 Giải mã lệnh và đọc các thanh ghi nguồn
Lệnh đƣợc giải mã Kế đó các thanh ghi Rs1 và Rs2 đƣợc đƣa vào A và B Thanh ghi PC đƣợc tăng lên để chỉ tới lệnh kế đó Để hiểu rõ giai đoạn này, ta lấy dạng thức của một lệnh làm tính tiêu biểu sau đây:
Mã lệnh Thanh ghi Rs1 Thanh ghi Rs2 Thanh ghi Rd Tác vụ
6 bit 5 bit 5 bit 5 bit 11 bit
Các thanh ghi nguồn Rs1 và Rs2 đƣợc sử dụng tuỳ theo tác vụ, kết quả đƣợc đặt trong thanh ghi đích Rd
Ta thấy việc giải mã đƣợc thực hiện cùng lúc với việc đọc các thanh ghi Rs1 và Rs2 vì các thanh ghi này luôn nằm tại cùng vị trí ở trong lệnh
Tuỳ theo loại lệnh mà một trong ba nhiệm vụ sau đây đƣợc thực hiện:
Liên hệ tới bộ nhớ
MAR ← Địa chỉ do ALU tính tuỳ theo kiểu định vị (Rs2)
MBR ← Rs1 Địa chỉ hiệu dụng do ALU tính đƣợc đƣa vào MAR và thanh ghi nguồn Rs1 được đưa vào MBR để được lưu vào bộ nhớ trong
Ngã ra ALU ← Kết quả của phép tính
ALU thực hiện phép tính xác định trong mã lệnh, đƣa kết quả ra ngã ra
Ngã ra ALU ← Địa chỉ lệnh tiếp theo do ALU tính
ALU cộng địa chỉ của PC với độ dời để làm thành địa chỉ đích và đƣa địa chỉ này ra ngã ra Nếu là một phép nhảy có điều kiện thì thanh ghi trạng thái đƣợc đọc quyết định có cộng độ dời vào PC hay không
4.4 Thâm nhập bộ nhớ trong hoặc nhảy lần cuối
Giai đoạn này thường chỉ được dùng cho các lệnh nạp dữ liệu, lưu giữ dữ liệu và lệnh nhảy
Tham khảo đến bộ nhớ:
MBR ← M[MAR] hoặc M[MAR] ← MBR
Số liệu được nạp vào MBR hoặc lưu vào địa chỉ mà MAR trỏ đến
If (điều kiện), PC ← ngả ra ALU
Nếu điều kiện đúng, ngã ra ALU đƣợc nạp vào PC Đối với lệnh nhảy không điều kiện, ngã ra ALU luôn đƣợc nạp vào thanh ghi PC
Rd ← Ngã ra ALU hoặc Rd ← MBR Lưu trữ kết quả trong thanh ghi đích
Ng ắ t quãng
Ngắt quãng là một sự kiện xảy ra một cách ngẫu nhiên trong máy tính và làm ngưng tính tuần tự của chương trình (nghĩa là tạo ra một lệnh nhảy) Phần lớn các nhà sản xuất máy tính (ví dụ nhƣ IBM, INTEL) dùng từ ngắt quãng để ám chỉ sự kiện này, tuy nhiên một số nhà sản xuất khác dùng từ “ngoại lệ”, “lỗi”,
“bẩy” để chỉ định sự kiện này
Bộ điều khiển của CPU là bộ phận khó thực hiện nhất và ngắt quãng là phần khó thực hiện nhất trong bộ điều khiển Để nhận biết đƣợc một ngắt quãng lúc đang thi hành một lệnh, ta phải biết điều chỉnh chu kỳ xung nhịp và điều này có thể ảnh hưởng đến hiệu quả của máy tính
Người ta đã nghĩ ra “ngắt quãng” là để nhận biết các sai sót trong tính toán số học, và để ứng dụng cho những hiện tƣợng thời gian thực Bây giờ, ngắt quãng đƣợc dùng cho các công việc sau đây:
- Ngoại vi đòi hỏi nhập hoặc xuất số liệu
- Người lập trình muốn dùng dịch vụ của hệ điều hành
- Cho một chương trình chạy từng lệnh
- Làm điểm dừng của một chương trình
- Báo tràn số liệu trong tính toán số học
- Trang bộ nhớ thực sự không có trong bộ nhớ
- Báo vi phạm vùng cấm của bộ nhớ
- Báo dùng một lệnh không có trong tập lệnh
- Báo phần cứng máy tính bị hƣ
Dù rằng ngắt quãng không xảy ra thường xuyên nhưng bộ xử lý phải được thiết kế sao cho có thể lưu giữ trạng thái của nó trước khi nhảy đi phục vụ ngắt quãng Sau khi thực hiện xong chương trình phục vụ ngắt, bộ xử lý phải khôi phục trạng thái của nó để có thể tiếp tục công việc Để đơn giản việc thiết kế, một vài bộ xử lý chỉ chấp nhận ngắt sau khi thực hiện xong lệnh đang chạy Khi một ngắt xảy ra, bộ xử lý thi hành các bước sau đây:
- Thực hiện xong lệnh đang làm
- Lưu trữ trạng thái hiện tại
- Nhảy đến chương trình phục vụ ngắt
- Khi chương trình phục vụ chấm dứt, bộ xử lý khôi phục lại trạng thái cũ của nó và tiếp tục thực hiện chương trình mà nó đang thực hiện khi bị ngắt.
Kỹ thuật ống dẫn
Đây là một kỹ thuật làm cho các giai đoạn khác nhau của nhiều lệnh đƣợc thi hành cùng một lúc
Ví dụ: Chúng ta có những lệnh đều đặn, mỗi lệnh đƣợc thực hiện trong cùng một khoản thời gian Giả sử, mỗi lệnh đƣợc thực hiện trong 5 giai đoạn và mỗi giai đoạn đƣợc thực hiện trong 1 chu kỳ xung nhịp Các giai đoạn thực hiện một lệnh là: lấy lệnh (IF: Instruction Fetch), giải mã (ID: Instruction Decode), thi hành (EX: Execute), thâm nhập bộ nhớ (MEM: Memory Access), lưu trữ kết quả (RS: Result Storing)
Hình 2.11 cho thấy chỉ trong một chu kỳ xung nhịp, bộ xử lý có thể thực hiện một lệnh (bình thường lệnh này được thực hiện trong 5 chu kỳ)
Hình 2.12 Các giai đoạn khác nhau của nhiều lệnh được thi hành cùng một lúc
So sánh với kiểu xử lý tuần tự thông thường, 5 lệnh được thực hiện trong 25 chu kỳ xung nhịp, thì xử lý lệnh theo kỹ thuật ống dẫn thực hiện 5 lệnh chỉ trong 9 chu kỳ xung nhịp
Nhƣ vậy kỹ thuật ống dẫn làm tăng tốc độ thực hiện các lệnh Tuy nhiên kỹ thuật ống dẫn có một số ràng buộc:
- Cần phải có một mạch điện để thi hành mỗi giai đoạn của lệnh vì tất cả các giai đoạn của lệnh đƣợc thi hành cùng lúc Trong một bộ xử lý không dùng kỹ thuật ống dẫn, ta có thể dùng bộ làm toán ALU để cập nhật thanh ghi PC, cập nhật địa chỉ của toán hạng bộ nhớ, địa chỉ ô nhớ mà chương trình cần nhảy tới, làm các phép tính trên các toán hạng vì các phép tính này có thể xảy ra ở nhiều giai đoạn khác nhau
- Phải có nhiều thanh ghi khác nhau dùng cho các tác vụ đọc và viết
- Trong một máy có kỹ thuật ống dẫn, có khi kết quả của một tác vụ trước đó, là toán hạng nguồn của một tác vụ khác Nhƣ vậy sẽ có thêm những khó khăn mà ta sẽ đề cập ở mục tới
- Cần phải giải mã các lệnh một cách đơn giản để có thể giải mã và đọc các toán hạng trong một chu kỳ duy nhất của xung nhịp
- Cần phải có các bộ làm tính ALU hữu hiệu để có thể thi hành lệnh số học dài nhất, có số giữ, trong một khoảng thời gian ít hơn một chu kì của xung nhịp
- Cần phải có nhiều thanh ghi lệnh để lưu giữ lệnh mà chúng ta phải xem xét cho mỗi giai đoạn thi hành lệnh
- Cuối cùng phải có nhiều thanh ghi bộ đếm chương trình PC để có thể tái tục các lệnh trong trường hợp có ngắt quãng.
Khó khăn trong kỹ thuật ống dẫn
Khi thi hành lệnh trong một máy tính dùng kỹ thuật ống dẫn, có nhiều trường hợp làm cho việc thực hiện kỹ thuật ống dẫn không thực hiện đƣợc nhƣ là: thiếu các mạch chức năng, một lệnh dùng kết quả của lệnh trước, một lệnh nhảy
Ta có thể phân biệt 3 loại khó khăn: khó khăn do cấu trúc, khó khăn do số liệu và khó khăn do điều khiển
7.1 Khó khăn do cấu trúc Đây là khó khăn do thiếu bộ phận chức năng, ví dụ trong một máy tính dùng kỹ thuật ống dẫn phải có nhiều ALU, nhiều PC, nhiều thanh ghi lệnh IR Các khó khăn này đƣợc giải quyết bằng cách thêm các bộ phận chức năng cần thiết và hữu hiệu
7.2 Khó khăn do số liệu
Lấy ví dụ trường hợp các lệnh liên tiếp sau:
Hình 2.13 cho thấy R1, kết quả của lệnh 1 chỉ có thể đƣợc dùng cho lệnh 2 sau giai đoạn MEM của lệnh 1, nhƣng R1 đƣợc dùng cho lệnh 2 vào giai đoạn EX của lệnh 1.
ADD R1, R2, R3 IF ID EX MEM RS
SUB R4, R1, R5 IF ID EX MEM RS
Hình 2.13 Chuỗi lệnh minh họa khó khăn do số liệu Để khắc phục khó khăn này, một bộ phận phần cứng đƣợc dùng để đƣa kết quả từ ngã ra ALU trực tiếp vô một trong các thanh ghi ngã vào nhƣ trong hình 2.14
Hình 1.14 ALU với bộ phận phần cứng đưa kết quả tính toán trở lại ngã vào
Khi bộ phận phần cứng nêu trên phát hiện có dùng kết quả của ALU làm toán hạng cho liệt kê, nó tác động vào mạch đa hợp để đƣa ngã ra của ALU vào ngã vào của ALU hoặc vào ngã vào của một đơn vị chức năng khác nếu cần
7.3 Khó khăn do điều khiển
Các lệnh làm thay đổi tính thi hành các lệnh một cách tuần tự (nghĩa là PC tăng đều đặn sau mỗi lệnh), gây khó khăn về điều khiển Các lệnh này là lệnh nhảy đến một địa chỉ tuyệt đối chứa trong một thanh ghi, hay lệnh nhảy đến một địa chỉ xác định một cách tương đối so với địa chỉ hiện tại của bộ đếm chương trình
PC Các lệnh nhảy trên có thể có hoặc không điều kiện
Trong trường hợp đơn giản nhất, tác vụ nhảy không thể biết trước giai đoạn giải mã (xem hình 2.14) Nhƣ vậy, nếu lệnh nhảy bắt đầu ở chu kỳ C thì lệnh mà chương trình nhảy tới chỉ được bắt đầu ở chu kỳ C+2 Ngoài ra, phải biết địa chỉ cần nhảy đến mà ta có ở cuối giai đoạn giải mã ID Trong lệnh nhảy tương đối, ta phải cộng độ dời chứa trong thanh ghi lệnh IR vào thanh ghi PC Việc tính địa chỉ này chỉ đƣợc thực hiện vào giai đoạn ID với điều kiện phải có một mạch công việc riêng biệt
Vậy trong trường hợp lệnh nhảy không điều kiện, lệnh mà chương trình nhảy đến bắt đầu thực hiện ở chu kỳ C+2 nếu lệnh nhảy bắt đầu ở chu kỳ C
Cho các lệnh nhảy có điều kiện thì phải tính toán điều kiện Thông thường các kiến trúc RISC đặt kết quả việc so sánh vào trong thanh ghi trạng thái, hoặc vào trong thanh ghi tổng quát Trong cả 2 trường hợp, đọc điều kiện tương đương
Các thanh ghi Đa hợp Đa hợp
R4 R1 với đọc thanh ghi Đọc thanh ghi có thể đƣợc thực hiện trong phân nửa chu kỳ cuối giai đoạn ID
Một trường hợp khó hơn có thể xảy ra trong những lệnh nhảy có điều kiện Đó là điều kiện đƣợc có khi so sánh 2 thanh ghi và chỉ thực hiện lệnh nhảy khi kết quả so sánh là đúng Việc tính toán trên các đại lƣợng logic không thể thực hiện đƣợc trong phân nửa chu kỳ và nhƣ thế phải kéo dài thời gian thực hiện lệnh nhảy có điều kiện Người ta thường tránh các trường hợp này để không làm giảm mức hữu hiệu của máy tính
Vậy trường hợp đơn giản, người ta có thể được địa chỉ cần nhảy đến và điều kiện nhảy cuối giai đoạn ID Vậy có chậm đi một chu kỳ mà người ta có thể giải quyết bằng nhiều cách
Cách thứ nhất là đóng băng kỹ thuật ống dẫn trong một chu kỳ, nghĩa là ngừng thi hành lệnh thứ i+1 đang làm nếu lệnh thƣ i là lệnh nhảy Ta mất trắng một chu kỳ cho mỗi lệnh nhảy
Cách thứ hai là thi hành lệnh sau lệnh nhảy nhưng lưu ý rằng hiệu quả của một lệnh nhảy bị chậm mất một lệnh Vậy lệnh theo sau lệnh nhảy đƣợc thực hiện trước khi lệnh mà chương trình phải nhảy tới được thực hiện Chương trình dịch hay người lập trình có nhiệm vụ xen vào một lệnh hữu ích sau lệnh nhảy
Trong trường hợp nhảy có điều kiện, việc nhảy có thể được thực hiện hay không thực hiện Lệnh hữu ích đặt sau lệnh nhảy không làm sai lệch chương trình dù điều kiện nhảy đúng hay sai.
Siêu ống dẫn
Máy tính có kỹ thuật siêu ống dẫn bậc n bằng cách chia các giai đoạn của kỹ thuật ống dẫn đơn giản, mỗi giai đoạn đƣợc thực hiện trong khoản thời gian Tc, thành n giai đoạn con thực hiện trong khoản thời gian Tc/n Độ hữu hiệu của kỹ thuật này tương đương với việc thi hành n lệnh trong mỗi chu kỳ Tc Hình 2.13 trình bày thí dụ về siêu ống dẫn bậc 2, có so sánh với siêu ống dẫn đơn giản Ta thấy trong một chu kỳ Tc, máy dùng kỹ thuật siêu ống dẫn làm 2 lệnh thay vì làm 1 lệnh trong máy dùng kỹ thuật ống dẫn bình thường Trong máy tính siêu ống dẫn, tốc độ thực hiện lệnh tương đương với việc thực hiện một lệnh trong khoảng thời gian Tc/n Các bất lợi của siêu ống dẫn là thời gian thực hiện một giai đoạn con ngắn Tc/n và việc trì hoãn trong thi hành lệnh nhảy lớn Trong ví dụ ở hình 2.13, nếu lệnh thứ i là một lệnh nhảy tương đối thì lệnh này được giải mã trong giai đoạn ID, địa chỉ nhảy đến đƣợc tính vào giai đoạn EX, lệnh phải đƣợc nhảy tới là lệnh thứ i+4, vậy có trì trệ 3 lệnh thay vì 1 lệnh trong kỹ thuật ống dẫn bình thường.
Hình 2.13 Siêu ống dẫn bậc 2 so với ống dẫn đơn giản
Siêu vô hướng
Máy tính siêu vô hướng bậc n có thể thực hiện đồng thời n lệnh trong một chu kỳ xung nhịp Tc Hình 3.14 trình bày một ví dụ về sự vận hành của một máy tính siêu vô hướng bậc 2 so với một máy tính dùng kỹ thuật ống dẫn
Hình 2.14 Siêu vô hướng bậc 2 so với kỹ thuật ống dẫn đơn giản
Trong một máy tính siêu vô hướng phần cứng phải quản lý việc đọc và thi hành đồng thời nhiều lệnh Vậy nó phải có khả năng quản lý các quan hệ giữa số liệu với nhau Cũng cần phải chọn các lệnh có khả năng đƣợc thi hành cùng một lúc (Ví dụ: ta không thể thực hiện hai lệnh đồng thời nếu lệnh này lấy kết quả của lệnh kia làm toán hạng vào) Những bộ xử lý đầu tiên đưa ra thị trường dùng kỹ thuật này là các bộ xử lý Intel i860 và IBM RS/6000 Các bộ xử lý này có khả năng thực hiện song song nhiều tác vụ trên số nguyên và trên số lẻ
Năm 1992, người ta thấy xuất hiện các bộ xử lý có nhiều bộ thực hiện tác vụ độc lập với nhau (nhiều ALU, bộ tính toán số lẻ, nạp dữ liệu, lưu dữ liệu, nhảy), có thể thực hiện song song nhiều lệnh (lệnh tính số nguyên, số lẻ, lệnh bộ nhớ, lệnh nhảy ) Số lệnh có thể đƣợc thi hành song song càng nhiều thì phần cứng thực hiện việc này càng phức tạp.
Máy tính song song
Một cách tự nhiên, có thể làm cho máy tính hoạt động nhanh hơn bằng cách tăng tốc độ xử lý của phần cứng Tuy nhiên có một số hạn chế về mặt vật lý đối với mong muốn này Ví dụ nhƣ các máy tính muốn có tốc độ càng nhanh thì kích thước và khoảng cách giữa các linh kiện điện tử càng phải nhỏ Với các kích thước như vậy lại kéo theo vấn đề sinh nhiệt nhiều và khó tiêu tán nhiệt Nói chung việc tạo ra một máy tính có tốc độ càng cao sẽ càng khó và những máy đó cũng càng đắt giá hơn.
Có một phương pháp khác, thay vì dùng một bộ xử lý có tốc độ cao, người ta thiết kế một máy tính với nhiều bộ xử lý có tốc độ thấp hơn cùng hoạt động đồng thời để đạt đƣợc cùng một công suất tính toán nhƣng với giá thành thấp hơn Đó là những máy tính song song.
Trong xử lý song song có thể hình thành một chuỗi các lệnh liên tiếp nhau đọc từ bộ nhớ vào bộ xử lý, trong khi các toán hạng cũng hợp thành một chuỗi dữ liệu theo sau đi tới vào bộ xử lý
Trên cơ sở đó, Flynn phân máy tính song song thành 4 nhóm dựa trên số lƣợng các dòng lệnh và dòng dữ liệu (luồng lệnh, luồng dữ liệu):
- Máy SISD (Single Instructions Stream, Single Data Stream): một dòng lệnh, một dòng dữ liệu: các máy tính có một vi xử lý thuộc loại này khi sử dụng một kiểu thiết kế gọi là cơ chế đường ống (ống dẫn) Đó là một kiểu xử lý song song khi bộ xử lý tìm-nạp lệnh kế tiếp ngay trong lúc đang thực thi lệnh hiện tại Việc thực hiện lệnh bao gồm 5 giai đoạn: nhận lệnh, giải mã lệnh, nhận toán hạng, thi hành lệnh và lưu trữ kết quả
- Máy SIMD (Single Instructions Stream, Multiple Data Stream): Một dòng lệnh, nhiều dòng dữ liệu: máy này thao tác trên nhiều tập dữ liệu song song Nó thực hiện một mệnh lệnh giống nhau nhƣng với những dữ liệu khác nhau Ví dụ tính đồng thời nhiệt độ trung bình hàng tháng của nhiều vùng khí hậu, rõ ràng phương pháp tính thì giống nhau nhưng dữ liệu cho mỗi vùng thì khác nhau
- Máy MISD (Multiple Instructions Stream, Single Data Stream): nhiều dòng lệnh, một dòng dữ liệu: tại đây có nhiều bộ xử lý làm việc song song với những lệnh riêng nhƣng cùng sử dụng chung một tập dữ liệu Nhóm này ít thông dụng trừ một vài máy có tính năng xử lý đường ống.
- Máy MIMD (Multiple Instruction Stream, Multiple Data Stream): Nhiều dòng lệnh, nhiều dòng dữ liệu: thuộc nhóm này là các máy tính đƣợc liệt vào kiến trúc đa xử lý trong đó các bộ xử lý làm việc song song độc lập với nhau, thực thi các lệnh khácnhau với các dữ liệu khác nhau
Bộ đa xử lý (multiprocessor) bao gồm một số đơn vị xử lý giống nhau cùng thực hiện một nhiệm vụ chung hay những nhiệm vụ đƣợc chia sẻ Bộ đa xử lý khác với hệ thống nhiều máy tính hoặc mạng máy tính ở chỗ các hệ thống hay mạng đó sử dụng các máy tính thực hiện độc lập các nhiệm vụ riêng biệt Bộ đa xử lý theo phân loại của Flynn là một máy tính MIMD Các máy vi tính Intel Pentium cũng có bus kết nối một số chip vi xử lý hoạt động song song
Hình 2.15a trình bày một bộ đa xử lý, đó là một máy tính MIMD sử dụng bộ nhớ dùng chung (shared memory) Các bộ xử lý truy cập tới bộ nhớ dùng chung thông qua bus Để giảm thiểu sự tranh chấp bus và cải thiện hiệu suất, thiết kế trong hình 2.15b cho thấy mỗi bộ xử lý có một bộ nhớ nội riêng mà các mã chương trình và các dữ liệu không cần dùng chung Việc này sẽ làm giảm một lƣợng thông tin trên bus chính. a) b)
Hình 2.15 Bộ đa xử lý cơ bản (a) và bộ đa xử lý có các bộ nhớ cục bộ (b)
Các bộ đa xử lý cần có một hệ điều hành chuyên dụng (operating system) để điều khiển quá trình hoạt động song song của các bộ xử lý và các bộ nhớ Quá
CPU CPU CPU CPU Bộ nhớ dùng chung
CPU CPU CPU CPU Bộ nhớ dùng chung Các bộ nhớ cục bộ trình xử lý song song đòi hỏi hệ điều hành phải phân phối các tài nguyên một cách tối ƣu tránh những xung đột Có 3 cách tổ chức hệ điều hành cho bộ đa xử lý:
- Hệ điều hành riêng biệt (separate OS): trong đó một bộ xử lý có thể độc lập thực hiện tất cả các chương trình con của hệ điều hành mà nó cần Trong máy tính có bộ nhớ phân tán, mỗi một bộ xử lý có một bản sao toàn bộ hệ điều hành cho riêng mình (thường là chỉ có phần lõi còn các phần còn lại được đặt ở bộ nhớ dùng chung)
- Hệ điều hành chủ - tớ (master-slave OS): trong đó một bộ xử lý là chủ có nhiệm vụ thực hiện tất cả các chương trình con của hệ điều hành Những bộ xử lý còn lại là những đơn vị xử lý tớ không thực hiện các chức năng của hệ điều hành mà chỉ thực hiện khi chúng có yêu cầu tới đơn vị xử lý chủ
- Hệ điều hành phân tán (distributed OS): trong đó các chương trình con của hệ điều hành đƣợc phân phối cho các đơn vị xử lý sao cho mỗi một chức năng của hệ điều hành đƣợc gán cho một đơn vị xử lý ở một thời điểm, nhƣng cũng có thể gán cho các đơn vị xử lý khác nhau ở những thời điểm khác nhau.
Các bộ đa xử lý cũng có các cách kết nối mạng bên trong giống mạng máy tính Mỗi cấu hình đó cho hiệu suất xử lý và độ tin cậy khác nhau.
NHIỆM VỤ TỰ HỌC VÀ TÀI LIỆU HỌC TẬP CỦA SINH VIÊN
TRONG CHƯƠNG 2 Để đạt được mục đích đề ra trong chương 2, sinh viên phải thực hiện tốt các yêu cầu sau đây:
- Xem trước đề cương chi tiết của Chương 2 để biết được mục đích, nội dung sẽ được trình bày trong chương này
- Đọc trước nội dung Chương 2 trong quyển bài giảng này trước khi lên lớp
- Có thể tham khảo thêm các quyển tài liệu đƣợc giới thiệu ở trang 90 của giáo trình này
CÂU HỎI VÀ BÀI TẬP CHƯƠNG 2
1 Nhiệm vụ của phần đường đi dữ liệu?
2 Nhiệm vụ của bộ điều khiển?
4 Lợi điểm của kỹ thuật ngắt quãng?
5 Tại sao CPU chỉ chấp nhận ngắt sau khi thực hiện xong lệnh đang làm?
6 Các giai đoạn thực hiện ngắt quãng?
7 Kỹ thuật ống dẫn là gì?