Tải bản đầy đủ (.docx) (70 trang)

chức năng và cấu trúc của vi xử lý trong máy tính

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (842.35 KB, 70 trang )

CẤU TRÚC & CHỨC NĂNG CỦA VI XỬ LÝ
I. Tổ chức bộ xử lý
II. Tổ chức thanh ghi
Người sử dụng – các thanh ghi có thể nhìn thấy
Thanh ghi điều khiển và thanh ghi trạng thái
Ví dụ về tổ chức thanh ghi của bộ vi xử lý
III. Chu kỳ lệnh
Chu kỳ gián tiếp
Luồng dữ liệu
IV. Cấu trúc đường ống lệnh
Chiến lược Pipelining
Hiệu suất Pipelining
Hạn chế của Pipelining
Xử lý với nhánh
Pipelining Intel 80486
V. Các họ vi xử lý 8086
Tổ chức thanh ghi
Xử lý ngắt
VI. Các bộ xử lý ARM
Tổ chức bộ xử lý
Chế độ xử lý thanh ghi
Tổ chức xử lý ngắt
VII. Tài liệu tham khảo
VIII. Tóm tắt, các yêu cầu và câu hỏi ôn tập
NỘI DUNG CHÍNH
 Một bộ xử lý bao gồm cả thanh ghi người dùng có thể
nhìn thấy và thanh ghi điều khiển / trạng thái. Có
thể được tham chiếu ngầm định hoặc rõ ràng trong
lệnh của máy. Thanh ghi người dùng có thể nhìn thấy
có thể có mục đích sử dụng chung hoặc có một mục
đích sử dụng đặc biệt, chẳng hạn như điểm cố định


hoặc số dấu phẩy động, địa chỉ, chỉ mục và con trỏ
phân đoạn. Thanh ghi điều khiển và thanh ghi trạng
thái dùng để điều khiển hoạt động của bộ vi xử lý.
Một ví dụ rõ ràng là bộ đếm chương trình. Một ví dụ
quan trọng khác là chương trình từ trạng thái
(PSW), chứa nhiều trạng thái và điều kiện bit.
Chúng bao gồm bit để phản ánh kết quả của phép toán
số học, bit cho phép ngắt, và chỉ số của về cho dù
bộ xử lý là thi hành trong giám sát hoặc chế độ
người dùng.
 Bộ vi xử lý sử dụng các lệnh pipelining để tăng tốc
độ thực hiện lệnh. Về bản chất, pipelining liên
quan đến việc phá vỡ chu kỳ lệnh với giai đoạn
riêng biệt xảy ra theo thứ tự, chẳng hạn như lấy
chỉ dẫn, lệnh giải mã, xác định địa chỉ toán hạng,
lấy toán hạng, thực hiện lệnh, và ghi các kết quả
toán hạng. Chỉ dẫn di chuyển qua các giai đoạn, như
trong dây chuyền lắp ráp, do đó, về nguyên tắc, mỗi
giai đoạn có thể được làm việc trên một lệnh khác
nhau cùng một lúc. Sự xuất hiện của các chi nhánh
và phụ thuộc giữa các hướng dẫn phức tạp thiết kế
và sử dụng các đường ống dẫn.
I. TỔ CHỨC BỘ XỬ LÝ
Để hiểu rõ tổ chức của bộ xử lý, chúng ta hãy xem xét
các yêu cầu đặt vào bộ vi xử lý, những điều mà nó phải
làm:
Control
bus
Data
bus

Address
bus
System
ALU
Registers
Control
unit
• Lấy lệnh: Bộ xử lý đọc một lệnh từ bộ nhớ (thanh
ghi, bộ nhớ cache, bộ nhớ chính).
• Dịch lệnh: Các lệnh được giải mã để xác định những
hành động được yêu cầu
• Lấy dữ liệu: Việc thi hành một lệnh có thể yêu cầu
đọc dữ liệu từ bộ nhớ hoặc một module I / O.
• Xử lý dữ liệu: Việc thi hành một lệnh có thể yêu
cầu thực hiện một số phép tính số học hoặc hoạt
động hợp lý trên dữ liệu.
• Ghi dữ liệu: Kết quả của một thực thi có thể đòi
hỏi ghi dữ liệu vào bộ nhớ hoặc một module I / O.
Để làm những việc này, cần phải thấy rõ rằng bộ vi xử lý cần
lưu trữ một số dữ liệu tạm thời. Nó phải nhớ vị trí của lệnh
mới nhất để nó có thể biết được nơi để có được những lệnh
tiếp theo. Nó cần phải lưu trữ lệnh và dữ liệu tạm thời
trong khi một lệnh đang được thực thi. Nói cách khác, bộ vi
xử lý cần có một bộ nhớ nhỏ. Hình 1 là một cái nhìn đơn giản
của một bộ xử lý, chỉ kết nối của nó với phần còn lại của hệ
thống thông qua bus hệ thống. Chúng ta sẽ nhớ lại rằng các
thành phần chính của bộ vi xử lý là một đơn vị số học và
logic (ALU) và đơn vị điều khiển (CU). ALU thực hiện các
tính toán thực tế hoặc xử lý dữ liệu. Bộ điều khiển kiểm
soát sự di chuyển của dữ liệu và hướng dẫn vào và ra khỏi bộ

vi xử lý và kiểm soát hoạt động của ALU.
Ngoài ra, hình vẽ cho thấy một bộ
nhớ trong tối thiểu, bao gồm một
tập hợp các vị trí lưu
trữ, gọi là thanh ghi.

Arithmetic
and
Boolean
logic
Complementer
Shifter
Status ags
Arithmetic and logic unit
Control
paths

Hình 1
Hình 2 là một cái nhìn chi
tiết hơn về bộ vi xử lý.
Truyền dữ liệu và điều khiển
logic đường dẫn được chỉ định
trong đó có một yếu tố nhãn
bus vi xử lý nội bộ.
Yếu tố này là cần thiết để
chuyển dữ liệu giữa các thanh ghi
khác nhau và vì ALU trên thực tế Hình 2
chỉ hoạt động trên dữ liệu trong bộ
nhớ xử lý nội bộ. Con số này cũng cho thấy các yếu tố cơ bản
đặc trưng của ALU.

Lưu ý sự giống nhau giữa cấu trúc bên trong của máy tính nói
chung và các cấu
trúc bên trong của bộ vi xử lý. Trong cả hai trường hợp, có
một bộ sưu tập nhỏ
của yếu tố chủ yếu (máy tính: bộ vi xử lý, I / O, bộ nhớ; xử
lý: đơn vị điều khiển, ALU, thanh ghi) nối với nhau bằng
đường dữ liệu.
II. TỔ CHỨC THANH GHI
Ở mức cao hơn của hệ thống phân cấp, bộ nhớ nhanh hơn,
nhỏ hơn, và đắt tiền hơn. Trong bộ vi xử lý, có một tập
các thanh ghi có chức năng như một cấp độ của bộ nhớ
trên bộ nhớ chính và bộ nhớ cache trong hệ thống phân
cấp. Các thanh ghi trong bộ vi xử lý thực hiện hai vai
trò:
• Thanh ghi người dùng có thể nhìn thấy: Cho phép các
lập trình viên máy hoặc ngôn ngữ lắp ráp để giảm
thiểu tham chiếu bộ nhớ chính bằng cách tối ưu việc
sử dụng thanh ghi.
• Thanh ghi điều khiển/trạng thái: Được sử dụng bởi
bộ điều khiển để kiểm soát hoạt động của bộ vi xử
lý và đặc quyền, các chương trình hệ điều hành để
kiểm soát việc thực hiện các chương trình.
Thanh ghi người sử dụng nhìn thấy:
Thanh ghi người dùng có thể nhìn thấy là một trong đó có thể
được tham chiếu bằng phương tiện của ngôn ngữ máy mà bộ vi
xử lý thực hiện.
Chúng ta có thể mô tả các trong các loại sau:
• Đa năng
• Dữ liệu
• Địa chỉ

• Điều kiện mã
Thanh ghi đa năng có thể được gán cho nhiều chức năng bởi
người lập trình. Đôi khi họ sử dụng trong phạm vi các tập
lệnh là trực giao với các hoạt động. Có nghĩa là, bất kỳ
thanh ghi đa năng có thể chứa các toán hạng cho bất kỳ mã
máy. Này cung cấp đúng đa năng việc sử dụng thanh ghi.
Thường thì tuy nhiên, có những hạn chế. Ví dụ, thanh ghi có
thể được dành riêng cho dấu chấm động và thao tác ngăn xếp.
Trong một số trường hợp, thanh ghi đa năng có thể được sử
dụng để giải quyết các chức năng (ví dụ, thanh ghi gián
tiếp, chuyển). Trong trường hợp khác, có một tách một phần
hoặc Thanh ghi sạch giữa dữ liệu và Thanh ghi địa chỉ. Thanh
ghi dữ liệu có thể được sử dụng để chứa dữ liệu và không thể
được sử dụng trong tính toán một địa chỉ toán hạng. Thanh
ghi địa chỉ bản thân có thể là thanh ghi đa năng, hoặc họ có
thể dành cho một chế độ giải quyết cụ thể. Ví dụ như sau:
• Con trỏ đoạn: Trong một máy tính với phân đoạn giải quyết,
một đoạn thanh ghi giữ địa chỉ của các cơ sở của phân khúc
này. Có thể có nhiều thanh ghi: ví dụ, một cho hệ điều hành
và một cho quá trình hiện tại.
• Thanh ghi chỉ số: Chúng được sử dụng cho việc giải quyết
được lập chỉ mục và có thể được tự động lập chỉ mục.
• Con trỏ ngăn xếp: Nếu có người dùng có thể nhìn thấy chồng
giải quyết, sau đó thường có một thanh ghi chuyên trỏ đến
đỉnh của ngăn xếp. Điều này cho phép ngầm định giải quyết,
đó là đẩy, pop, và chỉ dẫn ngăn xếp khác không nhất thiết có
một ngăn xếp toán hạng rõ ràng.
Có vài tiêu chí thiết kế cần giải quyết ở đây. Một vấn đề
quan trọng là liệu sử dụng hoàn toàn thanh ghi đa năng hoặc
sử dụng chuyên biệt. Với việc sử dụng thanh ghi chuyên biệt,

nó thường ẩn trong mã máy. Bộ ghi rõ toán hạng chỉ phải xác
định một trong một bộ các thanh ghi chuyên biệt chứ không
phải là một trong số tất cả các thanh ghi, do đó tiết kiệm
bit. Ngược lại, điều này giới hạn sự linh hoạt của lập trình
viên.
Một vấn đề khác thiết kế là số thanh ghi, hoặc đa dụng hoặc
dữ liệu cộng thêm địa chỉ, để được cung cấp. Một lần nữa,
điều này ảnh hưởng đến thiết kế tập lệnh hơn vì thanh ghi
đòi hỏi nhiều bit toán hạng đặc tả. Thanh ghi ít hơn dẫn đến
tham chiếu bộ nhớ nhiều hơn, thanh ghi nhiều hơn không đáng
kể làm giảm tham chiếu bộ nhớ. Tuy nhiên, một cách tiếp cận
mới, tìm thấy lợi thế trong việc sử dụng hàng trăm thanh
ghi, được đưa ra trong một số hệ thống RISC.
Cuối cùng là vấn đề độ dài thanh ghi. Thanh ghi mà cần phải
giữ địa chỉ rõ ràng tối thiểu phải đủ dài để giữ địa chỉ lớn
nhất. Thanh ghi dữ liệu có thể giữ giá trị của hầu hết các
loại dữ liệu. Một số máy cho phép hai thanh ghi liên tiếp
được sử dụng như một giá trị để giữ đôi độ dài.
Một loại thanh ghi cuối cùng, đó là ít nhất một phần người
sử dụng có thể nhìn thấy, giữ mã điều kiện (còn gọi là cờ).
Mã điều kiện là các bit được thiết lập bởi phần cứng xử lý
là kết quả của hoạt động. Ví dụ, một phép toán số học có thể
tạo ra một kết quả tích cực, không tích cực, không, hoặc
tràn. Ngoài các kết quả chính nó đang được lưu trữ trong một
thanh ghi hoặc bộ nhớ, một mã điều kiện cũng được thiết lập.
Các mã sau đó có thể được kiểm tra như một phần của hoạt
động rẽ nhánh có điều kiện. Bit mã điều kiện được thu thập
vào một hoặc nhiều thanh ghi. Thông thường, chúng là một
phần của một thanh ghi kiểm soát. Nói chung, lệnh của máy cho
phép các bit được đọc bằng cách tham chiếu ngầm định, và các

lập trình viên không thể thay đổi chúng.
Nhiều bộ vi xử lý, trong đó có dựa trên các kiến trúc IA-64
và các bộ vi xử lý MIPS, không sử dụng mã điều kiện nào cả.
Thay vào đó, lệnh rẽ nhánh có điều kiện xác định một so sánh
được thực hiện và hoạt động trên các kết quả của sự so sánh,
mà không cần lưu trữ một mã điều kiện.
Bảng 1, dựa trên [DERO87], liệt kê những lợi thế quan trọng
nhược điểm của mã điều kiện.
Trong một số máy tính, một cuộc gọi chương trình con sẽ dẫn
đến việc tự động tiết kiệm của tất cả các thanh ghi người
dùng có thể nhìn thấy, được khôi phục trở về. Bộ vi xử lý
thực hiện các hướng dẫn lưu và khôi phục như một phần của
việc thực hiện các cuộc gọi và quay trở lại. Điều này cho
phép mỗi chương trình con để sử dụng các thanh ghi người
dùng có thể nhìn thấy một cách độc lập. Trên các máy khác,
đó là trách nhiệm của các lập trình để lưu nội dung của
người sử dụng thanh ghi có thể nhìn thấy liên quan trước khi
gọi chương trình con, bằng cách đưa chỉ dẫn với mục đích này
trong chương trình.
Ưu điểm Nhược điểm
1. Vì mã điều kiện được
thiết lập bởi số học và
chuyển dữ liệu chỉ dẫn
bình thường, họ nên giảm
số lượng lệnh SO SÁNH và
KIỂM TRA cần có.
2. lệnh điều kiện, chẳng
hạn như rẽ nhánh được
đơn giản hóa so với lệnh
tổng hợp, chẳng hạn như

kiểm tra và rẽ nhánh.
3. Mã điều kiện thuận lợi
cho các rẽ nhánh nhiều
chiều. Ví dụ, một lệnh
KIỂM TRA có thể được
theo sau bởi hai nhánh,
một ở dưới hoặc bằng số
không và một trên lớn
hơn không.
1. Mã điều kiện thêm độ phức tạp cho
cả phần cứng và phần mềm. Bit mã
điều kiện thường được sửa đổi theo
những cách khác nhau bởi lệnh khác
nhau, gây khó khăn cho cả vi chương
trình và trình biên dịch.
2. Mã điều kiện là bất thường, chúng
thường không là một phần của đường
dẫn dữ liệu chính, vì vậy chúng yêu
cầu kết nối thêm phần cứng.
3. Thường các máy mã điều kiện phải
thêm lệnh không điều kiện-mã đặc
biệt cho các tình huống đặc biệt
nào đó, chẳng hạn như bit kiểm tra,
kiểm soát vòng lặp, và các hoạt
động sự ra hiệu lượng tử.
4. Trong việc thực hiện pipelined, mã
điều kiện yêu cầu đồng bộ hóa đặc
biệt để tránh xung đột.
Bảng 1.
Thanh ghi điều khiển và thanh ghi trạng thái:

Có rất nhiều thanh ghi xử lý được sử dụng để kiểm soát hoạt
động của bộ xử lý. Hầu hết trong số này, trên hầu hết các
máy móc, không cho người dùng nhìn thấy được. Một số chúng có
thể được hiển thị cho lệnh máy thực hiện trong điều khiển
hoặc chế độ hệ điều hành. Tất nhiên, các máy khác nhau sẽ có
các tổ chức thanh ghi khác nhau và sử dụng thuật ngữ khác
nhau. Chúng ta liệt kê ở đây một danh sách hợp lý đầy đủ các
loại thanh ghi, với một mô tả ngắn gọn.
Bốn thanh ghi cần thiết cho thực hiện lệnh:
• Chương trình truy cập (PC): Có chứa địa chỉ của một hướng
dẫn để được lấy
• Thanh ghi chỉ thị (IR): Chứa các lệnh gần đây nhất lấy
• thanh ghi bộ nhớ địa chỉ (MAR): Chứa địa chỉ của một vị
trí trong bộ nhớ
• thanh ghi bộ nhớ đệm (MBR): Chứa một từ dữ liệu được ghi
vào bộ nhớ hoặc từ gần đây nhất đọc.
Không phải tất cả bộ vi xử lý có thanh ghi nội bộ chỉ định
là MAR và MBR, nhưng một số cơ chế đệm tương đương là cần
thiết nơi bởi các bit được chuyển giao cho bus hệ thống được
tổ chức và các bit được đọc từ bus dữ liệu được lưu trữ tạm
thời. Thông thường, bộ vi xử lý cập nhật các máy tính sau mỗi
lệnh lấy để máy tính luôn luôn trỏ vào lệnh tiếp theo sẽ
được thực hiện. Rẽ nhánh hoặc bỏ qua lệnh cũng sẽ thay đổi
nội dung máy tính. Chỉ thị lấy được nạp vào một IR, nơi mà
các mã máy và toán hạng đặc tả được phân tích. Dữ liệu được
trao đổi với bộ nhớ bằng cách sử dụng MAR và MBR. Trong một
hệ thống bus tổ chức, MAR kết nối trực tiếp đến bus địa chỉ,
và MBR kết nối trực tiếp đến bus dữ liệu. Thanh ghi người sử
dụng nhìn thấy lần lượt trao đổi dữ liệu với MBR.
Bốn thanh ghi vừa đề cập được sử dụng cho sự di chuyển của

dữ liệu giữa bộ xử lý và bộ nhớ. Trong bộ vi xử lý, dữ liệu
phải được trao đổi với ALU để xử lý. ALU có thể truy cập
trực tiếp vào MBR và thanh ghi người dùng có thể nhìn thấy.
Ngoài ra, có thể có thanh ghi đệm thêm tại ranh giới tới
ALU, các thanh ghi phục vụ như là đầu vào và đầu ra thanh
ghi cho ALU và trao đổi dữ liệu với MBR và thanh ghi người
dùng có thể nhìn thấy. Nhiều thiết kế bộ vi xử lý bao gồm một
thanh ghi hoặc tập các thanh ghi, thường được gọi là từ
trạng thái chương trình (PSW), có chứa thông tin trạng thái.
PSW thường chứa mã điều kiện cộng thêm thông tin trạng thái
khác. Các trường phổ biến hoặc cờ bao gồm:
• Đăng ký: Chứa các bit dấu hiệu của kết quả của các phép
toán số học cuối cùng.
• Zero: Thiết lập khi kết quả là 0.
• Carry: Thiết lập nếu một hoạt động dẫn đến carry (thêm)
vào hoặc vay (trừ) ra
khỏi một chút bậc cao. Sử dụng cho các hoạt động nhiều
từ số học.
• Equal: Thiết lập nếu một logic so sánh kết quả là bằng
nhau.
• Overflow: Được sử dụng để chỉ ra tràn bộ nhớ số học.
• Interrupt Enable / Disable: Được sử dụng để kích hoạt hoặc
vô hiệu hóa ngắt.
• Supervisor: Cho biết bộ vi xử lý được thực hiện trong giám
sát hoặc chế độ người dùng. Một số lệnh ưu tiên có thể được
thực hiện chỉ trong chế độ giám sát, và các khu vực nhất
định của bộ nhớ có thể được truy cập chỉ trong chế độ giám
sát.
Một số thanh ghi liên quan đến trạng thái và điều khiển có
thể được tìm thấy trong một thiết kế bộ vi xử lý cụ thể. Có

thể có một con trỏ đến một khối bộ nhớ có chứa thông tin
trạng thái khác (ví dụ, khối điều khiển tiến trình). Trong
các máy sử dụng vector ngắt, và làm gián đoạn thanh ghi
vector có thể cung cấp. Nếu một ngăn xếp được sử dụng để
thực hiện các chức năng nhất định (ví dụ, gọi chương trình
con), khi một con trỏ ngăn xếp hệ thống là cần thiết. Một
Fetch
Execute
Interrupt Indirect
con trỏ được sử dụng với một hệ thống bộ nhớ ảo. Cuối cùng,
thanh ghi có thể được sử dụng trong việc kiểm soát các hoạt
động I / O.
Một số yếu tố đi vào thiết kế của điều khiển và tổ chức
thanh ghi trạng thái. Một vấn đề quan trọng là hoạt động hỗ
trợ hệ thống. Một số loại thông tin điều khiển được các tiện
ích cụ thể cho các hệ điều hành. Nếu người thiết kế bộ vi xử
lý có một sự hiểu biết chức năng của hệ điều hành được sử
dụng, sau đó tổ chức thanh ghi có thể đến một mức độ được
thiết kế cho hệ điều hành. Một quyết định thiết kế chính là
việc phân bổ các thông tin điều khiển giữa thanh ghi và bộ
nhớ. Nó được phổ biến để dành lần đầu tiên (thấp nhất) vài
trăm ngàn hoặc từ bộ nhớ cho các mục đích điều khiển. Các
nhà thiết kế phải chọn bao nhiêu thông tin điều khiển phải
có trong các thanh ghi và bao nhiêu trong bộ nhớ. Thông
thường cân bằng của giá so với các tốc độ phát triển.
III. CHU KỲ LỆNH
Để nhớ lại, một chu kỳ lệnh bao gồm các giai đoạn sau:
• Lấy lệnh: Đọc lệnh kế tiếp từ bộ nhớ vào bộ xử lý.
• Thực hiện lệnh: Giải thích các opcode và thực hiện các
hoạt động ghi.

• Ngắt: Nếu ngắt được kích hoạt và một gián đoạn đã xảy ra,
lưu trạng thái hiện tại và tiến trình phục vụ ngắt.
Chu kỳ gián tiếp


Hình 4
Chúng ta có thể nghĩ đến những khi nạp địa chỉ gián tiếp là
một đoạn lệnh thêm. Kết quả được thể hiện trong hình 4. Dòng
chính của hoạt động bao gồm xen kẽ lệnh lấy và các hoạt động
thực hiện lệnh. Sau khi lệnh đang lấy lệnh, nó được kiểm tra
để xác định xem có địa chỉ gián tiếp đang tham gia. Nếu vậy,
các toán hạng cần được lấy bằng cách sử dụng địa chỉ gián
tiếp. Tiếp theo thực hiện, một ngắt có thể được xử lý trước
khi lệnh kế tiếp lấy. Một cách khác để xem quá trình này
được thể hiện trong hình 5. Điều này cho thấy một cách chính
xác thêm tính chất của chu kỳ lệnh. Sau khi hướng dẫn một là
lấy lệnh, đặc tả toán hạng của nó phải được xác định. Mỗi
toán hạng đầu vào trong bộ nhớ sau đó lấy lệnh, và quá
trình này có thể yêu cầu địa chỉ gián tiếp. Toán hạng thanh
ghi trên không cần được lấy. Một khi các mã được thực thi,
một quá trình tương tự có thể cần thiết để lưu trữ kết quả
trong bộ nhớ chính.
Instruction
address
calculation
Instruction
operation
decoding
Operand
address

calculation
Data
operation
Operand
address
calculation
Instruction
fetch
Instruction complete,
fetcth next instruction
Multiple
operands
Return for string
or vector data
No
interrupt
Operand
fetch
Indirection
Operand
store
Interrupt
check
Interrupt
Multiple
results
Indirection
Hình 5
Luồng dữ liệu
Trình tự chính xác của các sự kiện trong một chu kỳ lệnh phụ

thuộc vào việc thiết kế các bộ vi xử lý. Chúng ta có thể,
tuy nhiên, chỉ ra một cách chung chung những gì phải xảy ra.
Chúng ta hãy giả định rằng một bộ vi xử lý sử dụng một địa
chỉ bộ nhớ thanh ghi (MAR), đăng ký một bộ nhớ đệm (MBR),
một chương trình truy cập (PC), và thanh ghi lệnh (IR).
Trong chu kỳ lấy, một lệnh được đọc từ bộ nhớ.
Hình 6 cho thấy dòng chảy của dữ liệu trong chu kỳ này.
PC chứa địa chỉ của lệnh tiếp theo cần lấy về. Địa chỉ này
được chuyển đến MAR và được đặt trên bus địa chỉ.
Address Data Control
PC
CPU
MAR
Control
unit
Memory
MBR IR
Hình 6
Bộ điều khiển yêu cầu đọc bộ nhớ, và kết quả được đặt trên
bus dữ liệu và sao chép vào MBR và sau đó chuyển đến IR.
Trong khi đó, các máy tính đang tăng thêm 1, chuẩn bị cho
việc kế tiếp lấy lệnh. Khi chu kỳ lấy lệnh kết thúc, các đơn
vị kiểm soát kiểm tra nội dung IR để xác định xem nó có chứa
một đặc tả toán hạng bằng cách sử dụng địa chỉ gián tiếp.
Nếu như vậy, một chu kỳ gián tiếp được thực hiện. Như thể
hiện trong hình 7, đây là một chu trình đơn. Các bit N bên
phải của MBR, có chứa các tham chiếu địa chỉ, được chuyển
giao cho MAR. Sau đó đơn vị điều khiển yêu cầu đọc bộ nhớ,
để có được địa chỉ mong muốn của toán hạng vào MBR. Chỉ lệnh
và chu kỳ gián tiếp rất đơn giản và dễ dự đoán. Chu kỳ thực

hiện có nhiều hình thức; hình thức phụ thuộc vào của các
lệnh máy khác nhau có trong IR. Chu kỳ này có thể liên quan
đến việc chuyển giao dữ liệu giữa các thanh ghi, đọc hoặc
viết từ bộ nhớ hoặc I / O, và / hoặc triệu gọi của ALU.

AddressData Control
CPU
MAR
Control
unit
Memory
MBR

Hình 7
Giống như lấy lệnh và chu kỳ gián tiếp, chu kỳ ngắt rất đơn
giản và có thể dự đoán (hình 8). Những nội dung hiện tại của
máy tính cần phải được lưu lại để có bộ vi xử lý có thể tiếp
tục hoạt động bình thường sau khi bị gián đoạn. Như vậy, nội
dung máy tính được chuyển giao cho MBR được ghi vào bộ nhớ.
Vị trí bộ nhớ đặc biệt dành riêng với mục đích này được nạp
vào MAR từ các đơn vị điều khiển. Nó có thể là một con trỏ
ngăn xếp. Máy tính được nạp với các địa chỉ của các ngắt
thường lệ. Kết quả là, các chu kỳ lệnh kế tiếp sẽ được
truyền bằng cách lấy lệnh thích hợp.

Hình 8
IV. CẤU TRÚC ĐƯỜNG ỐNG LỆNH
Chiến lược pipelining
Lệnh pipelining cũng tương tự như việc sử dụng một dây
chuyền lắp ráp tại một nhà máy sản xuất. Một dây chuyền lắp

ráp tận dụng thực tế là một sản phẩm đi qua các giai đoạn
khác nhau của sản xuất. Bằng cách đặt quá trình sản xuất ra
trong một dây chuyền lắp ráp, sản phẩm ở các giai đoạn khác
nhau có thể được làm việc cùng một lúc. Quá trình này cũng
được gọi là pipelining, bởi vì, như là trong một đường ống,
đầu vào mới được chấp nhận ở một đầu trước khi đầu vào được
chấp nhận trước xuất hiện như là kết quả đầu ra ở đầu kia.
Để áp dụng khái niệm này để thực hiện lệnh, chúng ta phải
nhận ra rằng, trên thực tế, một hướng dẫn có một số giai
đoạn. Con số 5, ví dụ, phá vỡ chu kỳ lệnh lên thành 10 nhiệm
vụ, trong đó xảy ra theo thứ tự. Rõ ràng, cần có một số cơ
hội cho pipelining.

Hình 9
Như phương pháp đơn giản, hãy xem xét chia nhỏ xử lý lệnh
thành hai giai đoạn: lấy lệnh và thực hiện lệnh. Có những
thời điểm trong khi thực hiện một lệnh khi bộ nhớ chính
không được truy cập. Thời gian này có thể được sử dụng để
lấy các lệnh tiếp theo trong song song với việc thực hiện
của một hiện tại. Hình 9a mô tả cách tiếp cận này. Các đường
ống dẫn có hai giai đoạn độc lập. Giai đoạn đầu tiên lấy
lệnh và các bộ đệm của nó. Khi giai đoạn thứ hai là trống,
giai đoạn đầu tiên truyền nó lệnh đệm. Trong khi giai đoạn
thứ hai là thực hiện các lệnh, giai đoạn đầu tiên tận dụng
lợi thế của bất kỳ chu kỳ bộ nhớ không sử dụng để lấy và đệm
tiếp theo hướng dẫn. Nó được gọi là lệnh nạp hoặc lấy lệnh
chồng chéo lên nhau. Lưu ý rằng phương pháp này, trong đó
bao gồm lệnh đệm, đòi hỏi nhiều thanh ghi. Nói chung,
pipelining yêu cầu thanh ghi để lưu trữ dữ liệu giữa các
giai đoạn.

Rõ ràng rằng quá trình này sẽ tăng tốc độ thực hiện lệnh.
Nếu lấy lệnh và thực hiện các giai đoạn của thời gian là như
nhau, chu kỳ thời gian lệnh sẽ được giảm đi một nửa. Tuy
nhiên, nếu chúng ta xem xét kỹ hơn đường ống này (Hình 9b),
ta sẽ thấy rằng tăng gấp đôi này tỉ lệ thực hiện là không
chắc vì hai lý do:
1. Thời gian thực hiện nói chung sẽ được dài hơn thời gian
lấy lệnh. Thực hiện sẽ bao gồm việc đọc và lưu trữ toán hạng
và hiệu suất của một số tác vụ. Như vậy, giai đoạn lấy lệnh
có thể phải chờ một thời gian trước khi nó thể làm trống bộ
đệm.
2. Một lệnh rẽ nhánh có điều kiện làm cho địa chỉ của lệnh
kế tiếp để cần lấy về không rõ ràng. Như vậy, giai đoạn lấy
lệnh phải đợi cho đến khi nó nhận được địa chỉ lệnh kế tiếp
từ khâu thực hiện. Sau đó thực các giai đoạn hiện có thể
phải chờ trong khi lấy các lệnh tiếp theo .
Có thể làm giảm mất thời gian từ lý do thứ hai. Một nguyên
tắc đơn giản là những điều sau đây: Khi một lệnh rẽ nhánh có
điều kiện được chuyển từ lấy lệnh đến giai đoạn thực hiện,
các giai đoạn lấy lệnh nạp lệnh kế tiếp trong bộ nhớ sau khi
lệnh rẽ nhánh. Sau đó, nếu rẽ nhánh là không được, không có
thời gian bị mất. Nếu chi nhánh được thực hiện, lệnh lấy
phải được loại bỏ và một lệnh mới được tải.
Trong khi những yếu tố làm giảm hiệu quả tiềm năng của các
đường ống hai giai đoạn, một số tốc độ tăng diễn ra. Để đạt
được tốc độ tăng hơn nữa, các đường ống phải có các giai
đoạn nhiều hơn. Chúng ta hãy xem xét sự phân chia dưới đây
trong xử lý lệnh.
• Lấy lệnh (FI): Đọc lệnh dự kiến tiếp theo vào một bộ đệm.
• Giải mã lệnh (DI): Xác định mã máy và xác định toán hạng.

• Tính toán hạng (CO): Tính toán địa chỉ hiệu quả của từng
phép toán nguồn. Điều này có thể liên quan đến việc di dời,
thanh ghi gián tiếp hoặc dạng khác của phép tính địa chỉ.
• Lấy toán hạng (FO): Tìm nạp mỗi toán hạng từ bộ nhớ. Các
toán hạng trong thanh ghi không cần lấy về.
• Thực hiện lệnh (EI): Thực hiện các hoạt động ghi và lưu
trữ kết quả, nếu có, trong vị trí toán hạng đích xác định.
• Ghi toán hạng (WO): Lưu trữ kết quả trong bộ nhớ.
Với phân tích này, các giai đoạn khác nhau sẽ có thời gian
gần bằng nhiều hơn. Trong minh hoạ, hãy giả thiết thời gian
bằng nhau. Sử dụng giả định này, Hình 10 cho thấy một đường
ống dẫn gồm sáu giai đoạn có thể làm giảm thời gian thực
hiện cho 9 lệnh từ 54 đơn vị thời gian đến 14 đơn vị thời
gian. Một số nhận xét theo thứ tự: Sơ đồ giả định rằng mỗi
lệnh đi qua tất cả sáu giai đoạn của đường ống. Điều này sẽ
không luôn luôn là trường hợp xảy ra. Ví dụ, một lệnh tải
không cần đến WO giai đoạn.
Tuy nhiên, để đơn giản hóa phần cứng đường ống dẫn, thời
gian được thiết lập giả sử mỗi lệnh yêu cầu tất cả sáu giai
đoạn. Ngoài ra, sơ đồ giả thiết rằng tất cả các giai đoạn có
thể được thực hiện song song. Đặc biệt, nó được giả định
rằng không có xung đột bộ nhớ.
Ví dụ, FI, FO và WO các giai đoạn liên quan đến một truy cập
bộ nhớ.
Sơ đồ hàm ý rằng tất cả các truy cập có thể xảy ra cùng một
lúc. Hầu hết các hệ thống bộ nhớ sẽ không cho phép điều đó.
Tuy nhiên, giá trị mong muốn có thể là trong bộ nhớ cache,
hoặc FO hoặc WO giai đoạn có thể là rỗng. Như vậy, phần lớn
thời gian, các xung đột bộ nhớ sẽ không làm chậm các đường
ống.

Một số yếu tố khác làm hạn chế nâng cao hiệu suất. Nếu sáu
giai đoạn không phải là thời gian bằng nhau, sẽ có một số
chờ tham gia vào các giai đoạn đường ống dẫn khác nhau, như
thảo luận trước với các đường ống có hai giai đoạn.
Một khó khăn khác là những lệnh rẽ nhánh có điều kiện, có
thể vô hiệu vài lần nạp lệnh. Một sự kiện không thể đoán
trước giống như là một ngắt. Hình 11 minh họa tác động của
rẽ nhánh có điều kiện, bằng chương trình tương tự như Hình
10.
Cho rằng lệnh 3 là một rẽ nhánh điều kiện cho lệnh 15. Cho
tới khi thực hiện lệnh, không có cách nào để biết được lệnh
sẽ đến tiếp theo.
Thời gian

1 2 3 4 5 6 7 8 9 10 11 12 13 14
Lệnh
1
F
I
D
I
CO FO EI WO
Lệnh
2
F
I
DI CO FO EI WO
Lệnh
3
FI DI CO FO EI WO

Lệnh
4
FI DI CO FO EI WO
Lệnh
5
FI DI CO FO EI WO
Lệnh
6
FI DI CO FO EI WO
Lệnh
7
FI DI CO FO EI WO
Lệnh
8
FI DI CO FO EI WO
Lệnh
9
FI DI CO FO EI WO

Hình 10
Các đường ống, trong ví dụ này, chỉ đơn giản là tải các lệnh
tiếp theo trong chuỗi (lệnh 4) và lệnh trước đó. Trong hình
10, các lệnh rẽ nhánh là không được, và chúng ta có lợi ích
hiệu suất đầy đủ của việc nâng cao. Trong Hình 11, các lệnh
rẽ nhánh được lấy. Điều này không được xác định cho đến khi
cuối của thời gian đơn vị 7. Tại thời điểm này, các đường
ống dẫn phải được xóa các lệnh mà không hữu ích. Trong thời
gian đơn vị 8, lệnh 15 vào các đường ống dẫn. Không có lệnh
đầy đủ trong đơn vị thời gian 9 đến 12, đây là giảm hiệu
suất phát sinh vì chúng ta không thể dự đoán các rẽ nhánh.

Hình 12 cho thấy sự logic cần thiết cho pipelining sẽ chiếm
các rẽ nhánh và ngắt.
Các vấn đề khác nảy sinh mà không có trong tổ chức đơn giản
có hai giai đoạn của chúng ta. Giai đoạn CO có thể phụ thuộc
vào nội dung của một thanh ghi có thể được thay đổi bởi một
lệnh trước đó vẫn còn trong đường ống. chẳng hạn xung đột
thanh ghi và bộ nhớ hoặc các xung đột khác có thể xảy ra. Hệ
thống phải có logic để giải thích cho các loại xung đột. Để
làm rõ hoạt động đường ống, nó có thể là có ích cho hãy nhìn
vào một mô tả khác. Hình 10 và 11 cho thấy tiến triển thời
gian theo chiều ngang.
Các hình ở mỗi hàng thể hiện tiến trình một lệnh cá nhân.
Hình 13 cho thấy cùng một chuỗi các sự kiện, với thời gian
tiến theo chiều dọc xuống hình vẽ, và mỗi hàng hiển thị
trạng thái của các đường ống tại một điểm nhất định trong
thời gian.
Thời gian

1 2 3 4 5 6 7 8 9 10 11 12 13 14
Lệnh
1
F
I
D
I
CO FO EI WO
Lệnh
2
F
I

DI CO FO EI WO
Lệnh
3
FI DI CO FO EI WO
Lệnh
4
FI DI CO FO
Lệnh
5
FI DI CO
Lệnh
6
FI DI
Lệnh
7
FI
Lệnh
8
FI DI CO FO EI WO
Lệnh
9
FI DI CO FO EI WO

Hình 11
No Yes
Yes
No
FI
DI
CO

FO
EI
WO
Calculate
operands
Fetch
instruction
Decode
instruction
Uncon
ditional
branch?
Branch
or
interrupt?
Write
operands
Fetch
operands
Execute
instruction
Update
PC
Empty
pipe
Hình 12 Six-Stage CPU Instruction Pipeline
Trong hình 13a (tương ứng với Hình 10), các đường ống có đầy
đủ vào thời điểm 6, với 6 hướng dẫn khác nhau ở các giai
đoạn khác nhau thực hiện, và vẫn còn đầy đủ thông qua thời
gian 9, chúng tôi giả sử rằng lệnh I9 là chỉ thị mới nhất

được thực thi.
Trong hình 13b, (tương ứng với Hình 11), các đường ống có
đầy đủ vào các thời điểm 6 và 7.
Vào thời điểm 7, hướng 3 đang trong giai đoạn thực hiện và
thực hiện một chi nhánh để hướng dẫn 15.
Tại thời điểm này, hướng dẫn I4 qua i7 đang đỏ mặt từ các
đường ống, do đó, vào thời điểm 8, chỉ có hai hướng dẫn có
trong đường ống, I3 và I15.
Hình 13 a, b.
Từ phần thảo luận trước đó, ta thấy có thể xuất hiện lớn hơn
số lượng giai đoạn trong các đường ống dẫn, làm tốc độ thực
hiện nhanh hơn. Một số các nhà thiết kế IBM S/360 chỉ ra hai
yếu tố làm thất bại mô hình đơn giản này cho thiết kế hiệu
suất cao [ANDE67a], và chúng vẫn còn các yếu tố mà nhà thiết
kế vẫn còn phải xem xét:
 Ở mỗi giai đoạn của ống dẫn, có một số trên đầu liên
quan đến di chuyển dữ liệu từ vùng đệm đến vùng đệm và

×