Mục lục
CHƯƠNG 1: Lịch sử phát triển
1.1 Lịch sử kiến trúc vi xử lý
1.1.1 Kiến trúc CISC
1.1.2 Kiến trúc RISC
1.2 Tổng quan về dòng xử lý MIPS
CHƯƠNG 2: Kiến trúc MIPS
2.1 Kiến trúc thanh ghi R300
2.1.1 Thanh ghi đa năng
2.1.2 Thanh ghi HI và LO
2.1.3 Thanh ghi dấu phẩy động
2.2 Kiến trúc tập lệnh MIPS
2.2.1 Immediate
2.2.2 Jump
2.2.3 Register
2.3 Quản lý bộ nhớ
2.3.1 Giới thiệu MMU
2.3.2 Chế độ thực thi
2.3.3 Translation Lookaside Buffer
2.3.4 Chuyển địa chỉ ảo sang địa chỉ thật
2.4. Pipeline
CHƯƠNG 3: Tìm hiểu phần mềm mô phỏng MIPSIT
3.1 Giới thiệu MipsIt
3.2 Các thành phần của MispIt
3.3 Cài đặt chương trình
3.3.1 Tạo một projet
3.3.2 Thêm file vào project
CHƯƠNG 4: Lập trình hợp ngữ MIPS
*********************************************
1
CHƯƠNG 1: LỊCH SỬ PHÁT TRIỂN
1.1 Lịch sử kiến trúc vi xử lý.
Các kiến trúc với tập lệnh phức tạp CISC (Complex Instruction Set Computer) được
nghĩ ra từ những năm 1960. Vào thời kỳ này, người ta nhận thấy các chương trình
dịch khó dùng các thanh ghi, rằng các vi lệnh được thực hiện nhanh hơn các lệnh và
cần thiết phải làm giảm độ dài các chương trình. Các đặc tính nầy khiến người ta ưu
tiên chọn các kiểu ô nhớ - ô nhớ và ô nhớ - thanh ghi, với những lệnh phức tạp và
dùng nhiều kiểu định vị. Điều này dẫn tới việc các lệnh có chiều dài thay đổi và như
thế thì dùng bộ điều khiển vi chương trình là hiệu quả nhất.
Bảng 1 cho các đặc tính của vài máy CISC tiêu biểu. Ta nhận thấy cả ba máy đều có
điểm chung là có nhiều lệnh, các lệnh có chiều dài thay đổi. Nhiều cách thực hiện
lệnh và nhiều vi chương trình được dùng.
Tiến bộ trong lãnh vực mạch kết (IC) và kỹ thuật dịch chương trình làm cho các nhận
định trước đây phải được xem xét lại, nhất là khi đã có một khảo sát định lượng về
việc dùng tập lệnh các 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
Bộ nhớ vi chương
trình
420 KB 480 KB 64 KB
Chiều dài lệnh (tính
bằng bit)
16 - 48 16 - 456 6 - 321
Kỹ thuật chế tạo ECL - MSI TTl - MSI NMOS
VLSI
Cách thực hiện lệnh Thanh ghi- thanh
ghi
Thanh ghi - bộ
nhớ
Bộ nhớ - bộ nhớ
Thanh ghi -
thanh ghi
Thanh ghi - bộ
nhớ
Bộ nhớ - bộ nhớ
Ngăn xếp
Bộ nhớ- bộ
nhớ
Dung lượng cache 64 KB 64 KB 0
Bảng 1: Đặc tính của một vài máy CISC
Ví dụ, chương trình dịch đã biết sử dụng các thanh ghi và không có sự khác biệt đáng
kể nào khi sử dụng ô nhớ cho các vi chương trình hay ô nhớ cho các chương trình.
1.1.1 Kiến trúc CISC
Tối thiểu hóa bộ nhớ lưu trữ lệnh bằng cách tăng tính phức tạp.
2
Thực hiện nhiều lệnh bậc cao hơn là chỉ thực hiện 1 thao tác
Các lệnh thường có toán hạng trực tiếp từ bộ nhớ
Có nhiều chế độ đánh địa chỉ khác nhau.
Thực hiện cơ chế vi mã
Các bộ VXL CISC : Digital VAX, Motorola MC 68000, Intel 8086, Pentium
Điều này dẫn tới việc đưa vào khái niệm về một máy tính với tập lệnh rút gọn RISC
vào đầu những năm 1980. Các máy RISC dựa chủ yếu trên một tập lệnh cho phép
thực hiện kỹ thuật ống dẫn một cách thích hợp nhất bằng cách thiết kế các lệnh có
chiều dài cố định, có dạng đơn giản, dễ giải mã. Máy RISC dùng kiểu thực hiện lệnh
thanh ghi - thanh ghi. Chỉ có các lệnh ghi hoặc đọc ô nhớ mới cho phép thâm nhập
vào ô nhớ. Bảng 2 diễn tả ba mẫu máy RISC đầu tiên: mẫu máy của IBM (IBM 801)
của Berkeley (RISC1 của Patterson) và của Stanford (MIPS của Hennessy). Ta nhận
thấy cả ba máy đó đều có bộ điều khiển bằng mạch điện (không có ô nhớ vi chương
trình), có chiều dài các lệnh cố định (32 bits), có một kiểu thi hành lệnh (kiểu thanh
ghi - thanh ghi) và chỉ có một số ít lệnh.
1.1.2 Kiến trúc RISC
Ta có thể định nghĩa mạch xử lý RISC bởi các tính chất sau:
Có 1 số ít lệnh(thông thường dưới 100 lệnh)
Có một số ít các kiểu định vị (thông thường hai kiểu: định vị tức thì và
định vị gián tiếp thông qua một thanh ghi).
Có một số ít dạng lệnh (một hoặc hai)
Các lệnh đều có cùng chiều dài.
Chỉ có các lệnh ghi hoặc đọc ô nhớ mới thâm nhập vào bộ nhớ.
Dùng bộ tạo tín hiệu điều khiển bằng mạch điện để tránh chu kỳ giải mã
các vi lệnh làm cho thời gian thực hiện lệnh kéo dài.
Bộ xử lý RISC có nhiều thanh ghi để giảm bớt việc thâm nhập vào bộ
nhớ trong.
Bộ xử lý IBM 801 RISC1 MIPS
Năm sản xuất 1980 1982 1983
Số lệnh 120 39 55
Dung lượng bộ nhớ vi
chương trình
0 0 0
Độ dài lệnh (tính bằng
bit)
32 32 32
Kỹ thuật chế tạo ECL MSI NMOS VLSI NMOS VLSI
Cách thực hiện lệnh Thanh ghi-
thanh ghi
Thanh ghi-
thanh ghi
Thanh ghi-
thanh ghi
Bảng 2 : Đặc tính của ba mẫu đầu tiên máy RISC
3
Ngoài ra các bộ xử lý RISC đầu tiên thực hiện tất cả các lệnh trong một chu kỳ máy.
Bộ xử lý RISC có các lợi điểm sau :
• Diện tích của bộ xử lý dùng cho bộ điều khiển giảm từ 60% (cho các bộ xử
lý CISC) xuống còn 10% (cho các bộ xử lý RISC). Như vậy có thể tích hợp
thêm vào bên trong bộ xử lý các thanh ghi, các cổng vào ra và bộ nhớ
cache
• Tốc độ tính toán cao nhờ vào việc giải mã lệnh đơn giản, nhờ có nhiều
thanh ghi (ít thâm nhập bộ nhớ), và nhờ thực hiện kỹ thuật ống dẫn liên tục
và có hiệu quả (các lệnh đều có thời gian thực hiện giống nhau và có cùng
dạng).
• Thời gian cần thiết để thiết kế bộ điều khiển là ít. Điều này góp phần làm
giảm chi phí thiết kế.
• Bộ điều khiển trở nên đơn giản và gọn làm cho ít rủi ro mắc phải sai sót mà
ta gặp thường trong bộ điều khiển.
1.2 Tổng quan về dòng xử lý MIPS
MIPS : Microprocessor without Interlocked Pipeline Stage là một kiến trúc vi xử lý
được phát triển bởi hãng MIPS Technologies . Cuối những năm 1990, 1/3 số lượng
chip RISC (Reduced Instruction Set Computer ) được sản xuất dựa trên kiến trúc
MIPS
Thiết kể MIPS được sử dụng rất rộng rãi trong các dòng máy tính đồ họa silicon, các
hệ thống nhúng như TiVo thế hệ 2, các thiết bị sử dụng hệ điều hành Windows CE,
Cisco routes và các máy chơi game console như Nitendo 64, Sony Playstation, Play
Station 2, Play Station Portable…
Kiến trúc MIPS ban đầu là một hệ thống xử lý 32 bit (thanh ghi mở rộng 32 bit và các
đường dẫn) trong khi các phiên bản sau này là hệ thống 64 bit. Đã có rất nhiều hiệu
chỉnh trong các tập lệnh của MIPS, từ MIPS I, MIPS II, MIPS III, MIPS IV, MIPS V,
MIPS 32 và MIPS 64. Hiện nay tồn tại 2 phiên bản là MIPS 32 (cho các hệ thống 32
bit) và MIPS 64 (cho các hệ thống 64 bit). MIPS 32 và MIPS 64 định nghĩa một tập
các thanh ghi điều khiển và một tập lệnh. Một vài thành phần mở rộng bổ sung cũng
được cung cấp, như là MIPS-3D: một tập đơn giản các câu lệnh SIMD về dấu chấm
động để thực hiện các tác vụ đồ họa 3D; MDMX (MaDMaX) là mở rộng của các câu
lệnh SIMD nguyên sử dụng các thanh ghi dấu chấm động 64 bit; MIPS16e chức năng
nén vào dòng lệnh khiến cho chương trình chiếm ít không gian hơn và bổ sung gần
đây là MIPS MT: kiến trúc đa luồng (MultirTheading) mới được bổ sung cho hệ
thống, tương tự như là siêu phân luồng (HyperThreading) trong hệ thống Intel’s
Pentium
Bởi vì các nhà thiết kế đã tạo ra một tập lệnh rất rõ ràng, các khóa học về kiến trúc
máy tính trong các trường đại học và công nghệ thường dạy về kiến trúc MIPS. Các
4
thiết kế MIPS CPU dùng cho gia đình đã ảnh hưởng rất lớn đến kiến trúc RISC sau
này, như là DEC Alpha.
Năm 1981, một nhóm các nhà nghiên cứu thuộc đại học Stanford do John L.
Hennessy đứng đầu đã bắt đầu một công trình nghiên cứu về bộ xử lý MIPS đầu tiên.
Khái niệm cơ bản là nhằm tăng đột xuất hiệu năng thông qua sử dụng một đường ống
lệnh (pipeline instructions), một công nghệ đã được hiểu rõ nhưng lại khó phát triển.
Thông thường một đường ống sẽ mở rộng việc chạy một câu lệnh thành vài bước, bắt
đầu thực hiện “bước một” của câu lệnh trước khi câu lệnh trước hoàn thành. Trong
khi đó, thiết kế truyền thống yêu cầu phải đợi cho đến khi một câu lệnh hoàn thành
mới được chạy câu lệnh tiếp theo. Thiết kế theo pipeline làm giảm đáng kể thời gian
rỗi của CPU khi thực hiện liên tiếp các câu lệnh.
Một rào cản chính của phương pháp đường ống lệnh là nó yêu cầu một khóa đồng
bộ (interlocks) được cài đặt để chắc chắn rằng các câu lệnh chiếm nhiều chu kỳ
đồng hồ để thực hiện sẽ dừng đường ống lại để nạp nhiều dữ liệu hơn – đơn giản là
dừng lại cho tới khi nó kết thúc. Những khóa đồng bộ này cần một thời gian lớn để
cài đặt và được cho là rào cản chính trong việc tăng tốc độ trong tương lai. Một
thiết kế chủ chốt trong MIPS là yêu cầu tất cả các câu lệnh phải được hoàn thành
trong 1 chu kỳ xung nhịp, nhờ thế loại bỏ được sự cần thiết của khóa đồng bộ. Mặc
dù thiết kế này đã loại trừ một số câu lệnh hữu dụng, đáng kể nhất như là các lệnh
nhân và chia yêu cầu nhiều bước, nhưng nó cho thấy hiệu suất tổng thể của hệ
thống tăng lên rõ rệt bởi vì các vi xử lý có thể chạy ở xung nhịp lớn hơn rất nhiều.
Tuy nhiên việc loại bỏ các câu lệnh trên lại không được các nhà thiết kế thời bấy
giờ hoan nghênh. Rất nhiều ý kiến cho rằng thiết kế kiểu đường ống lệnh sẽ không
thể tồn tại được, nếu chỉ thay một lệnh nhân phức tạp bằng rất nhiều các lệnh cộng
đơn giản thì làm sao hệ thống có thể nhanh hơn được. Tuy nhiên thực tế đã cho
thấy, tốc độ thuộc về thiết kế đường ống, chứ không phải thiết kế theo câu lệnh.
Năm 1984, Hennessy rời trường đại học Stanford để thành lập công ty MIPS
Computer System. Họ đã cho ra đời thiết kế đầu tiên vào năm 1985 : R2000 sau đó
phát triển tiếp R3000 vào năm 1998. Những CPU 32 bit này tồn tại trong suốt những
năm 1980 và được sử dụng chủ yếu trong ác dòng máy chủ SGI.
Năm 1991 MIPS cho ra đời bộ vi xử lý 64 bit đầu tiên R4000. Tuy nhiên MIPS gặp
khó khăn trong tài chính trong khi tung sản phẩm này ra thị trường. Thiết kế này rất
quan trọng đối với SGI-một trong những khách hàng của MIPS lúc bấy giờ, vì thế
SGI đã mua lại công ty vào năm 1992 để bảo vệ thiết kế không bị mất đi. Từ đó MIPS
trở thành một công ty con của SGI và được biết đến bởi tên MIPS Technologies.
Các dòng vi xử lý thương mại MIPS đã được sản xuất:
- R2000 : xuất hiện trên thị trường vào năm 1985, được bổ sung thêm nhiều câu lệnh
mới, có thể được khởi tạo ở chế độ big-endian hay little-endian,c ó 32 thanh ghi 32
bit, nhưng không có thanh ghi mã điều kiện. R2000 cũng hỗ trợ tới 4 bộ xử lý, một
trong số đó đảm nhiệm việc xử lý các ngoại lệ và bẫy trong khi ba chiếc còn lại sử
5
dụng cho các mục đích khác. Điều này được hỗ trợ trong R2010 FTU - bộ xử lý có 32
thanh ghi 32 bit có thể được sử dụng như là 16 thanh ghi 64 bit cho kết quả chính xác
gấp đôi
- R3000: Theo sau R2000 vào năm 1998, nó bổ sung thêm 32kB Cache (và sớm
được tăng lên 64kB) cho các lệnh và dữ liệu, kèm theo đó là cơ chế cache coherency
hỗ trợ cho nhiều bộ xử lý. R3000 cũng bao gồm MMU - một tính năng phổ biến của
CPUs kỷ nguyên này. R3000 trở thành thiết kế MIPS đầu tiên thành công trong lĩnh
vực thương mại. R3000A được sử dụng cực kỳ thành công trong các máy Sony
PlayStation, chạy với tốc độ 40 MHz, truyền thông tin ở tốc độ 32 câu lệnh trong 1
giây. R3000 cũng đi kèm với R3100 FTU trong cùng một chip đơn. Các hãng khác
cũng tham gia sản xuất như Pacemips với R3400, IDT với R3500. R3900 của Toshiba
là chíp đầu tiên dạng SoC (System on a Chip) được sử dụng trong các máy tính cá
nhân cầm tay sử dụng hệ điều hành Windows CE
- R4000: được đưa ra vào năm 1991, mở rộng tập lệnh MIPS để hỗ trợ đầy đủ kiến
trúc 64 bit, chuyển FTU vào main để tạo ra một hệ thống chip đơn lẻ (Single-chip
system), xử lý với tốc độ lên tới 100Mhz, tuy nhiên để đạt được tốc độ này bộ nhớ
đệm phải bị giảm xuống còn 8kB và cần 3 chu kỳ để truy cập. Tần số xử lý cao đạt
được nhờ việc lưu trữ thông qua công nghệ đường ống sâu (deep pipelining – hay
còn gọi là super-pipelining tại thời điểm đó). 1993 R4400 xuất hiện với 16kB cache,
bộ xử lý 64 bit lớn và 1 bộ điều khiển cache mở rộng lên tới 1MB (cahe level 2).
Ngoài ra còn các họ R4200, R4300, VR4300, R4300i, R4600 “Orion”, R4700
“Orion”, R5650, R5000, R5000FTU, RM7000, RM9000 Các bộ xử lý này được sử
dụng rất rộng rãi : Các máy Nitendo 64, Cisco routers, WebTV set-top Box (Hiện nay
là Micrisoft TV)…
- R8000 (1994) : Là thiết kế MIPS siêu vô hướng (superscala) đầu tiên, cho phép xử
lý 2 ALU và 2 phép tính nhớ mỗi chu kỳ. Thiết kế này mở rộng tới 6 chip, hỗ trợ
4MB cache mở rộng.
- R10000 (1995) : Là một thiết kế chip đơn lẻ, chạy ở tốc độ cao hơn R8000, có
32kB cache chính cho các câu lệnh và dữ liệu. Các thiết kế tiếp theo của R1000 là
R12000 và R14000 với hỗ trợ DDR SRAM trong cache và tốc độ lên tới 200 MHz.
Ngoài ra còn các thiết kế R16000, R16000A, R6000.
6
MIPS R3000A-compatible (R3051) 32bit RISC chip running at 33.8688 MHz
The chip is manufactured by LSI Logic Corp. with technology licensed from SGI.
The chip also contains the Geometry Transformation Engine and the Data
Decompression Engine.
Features:
Operating Performance of 30 MIPS
Bus Bandwidth 132 MB/s
Instruction Cache 4 KB
Data Cache 1 KB (non associative, just 1024 bytes of mapped fast SRAM)
Mẫu bộ vi sử lý MIPS ứng dụng trong máy PlayStation2
7
CHƯƠNG 2:KIẾN TRÚC MIPS
2.1 Kiến trúc thanh ghi R3000
2.1.1 Thanh ghi đa năng
Genaral - Purpose : Kiến trúc MIPS cung cấp 32 thanh ghi genaral-purpose (dùng
chung, đa năng ) được kí hiệu trong hợp ngữ là : $0 à $31
Thanh ghi $0 : chức năng cung cấp hằng số 0
Thanh ghi $31:sử dụng lưu địa chỉ trả về từ lời gọi hàm hay thủ tục.
Chức năng cụ thể của từng thanh ghi được xác định bởi bảng sau :
2.1.2 Thanh ghi HI và LO
Thao tác nhân của MIPS có kết quả chứa 2 thanh ghi HI và LO, đây không phải là
thanh ghi đa năng. Bit 32 đến 63 thuộc Hi và 0 đến 31 thuộc LO
8
Tương tự với phép chia :
2.1.3 Thanh ghi dấu phẩy động
MIPS sử dụng 32 thanh ghi dấu phảy động để biểu diễn độ chính xác đõn của số
thực.Các thanh ghi này có tên là : $f0 – $f31. Để biểu diễn độ chính xác kép (double
precision )thì họ sử dụng sự ghép đôi của 2 thanh ghi có độ chính xác đơn. MIPS
cũng có phần cứng cho độ chính xác dấu phẩy động 64 bit. Có 16 cặp với tên là : $f0,
$f2, — $f30
2.2 Kiến trúc tập lệnh MIPS
MIPS là một bộ xử lý RISC sử dụng các định dạng lệnh có độ dài cố định. Mỗi lệnh
có độ dài 32 bit (MIPS32). Nó sử dụng ba định dạng lệnh khác nhau :
Immediate (I-Type) (Trực tiếp, tức thời)
Jump (J-Type)
Register (R-Type)
2.2.1 Immediate
Tất cả các lệnh nạp và lưu (load/store) dùng định dạng này :
9
1111 1111 1111 11100100101010001000
immediate valuetarget regsource regop code
16 bits5 bits5 bits
6 bits
2.2.2 Jump
Các lệnh nhảy chỉ định một địa chỉ đích 26 bit dùng định dạng lệnh này. 26 bit này
kết hợp với các bit cao của bộ đếm chương trình PC để lấy về địa chỉ tuyệt đối.
2.2.3 Register
Các lệnh tính toán số học và logic sử dụng lệnh này
10
0x0100003000010
0x0040000c j
26 bits - jump target (words)6 bits - op code
100010 00000001010011101010 000000
functionshift amtDestinationtarget regsource reg 000000
6 bits5 bits5 bits5 bits5 bits6 bits
Xét trên khía cạnh thực hiện lệnh thì tập lệnh còn được chia thành các lệnh giả và
lệnh thật
+ Lệnh giả:
Các lệnh so sánh
Các lệnh số học và logic
11
Các lệnh rẽ nhánh:
12
Các lệnh load store và move dữ liệu:
13
Các lệnh xử lý ngoại lệ:
Các lệnh thao tác với hằng số:
Các lệnh nhân chia:
+ Lệnh thật
Name
instruction
syntax
Real instruction
translation
meaning
Load Address
la $1,
LabelAddr
lui $1, LabelAddr[31:16];
ori $1,$1, LabelAddr[15:0]
$1 = Label
Address
Load Immediate li $1, lui $1, IMMED[31:16]; ori $1 = 32 bit
14
IMMED[31:0] $1,$1, IMMED[15:0] Immediate value
Branch greater
than
bgt
if(R[rs]>R[rt])
PC=Label
Branch less than blt
if(R[rs]<R[rt])
PC=Label
Branch greater
than or equal
bge
if(R[rs]>=R[rt])
PC=Label
branch less than
or equal
ble
if(R[rs]<=R[rt])
PC=Label
branch greater
than unsigned
bgtu
if(R[rs]<=R[rt])
PC=Label
branch greater
than zero
bgtz
if(R[rs]<=R[rt])
PC=Label
Ngoài ra còn một số lệnh quan trọng khác như :NOP, BREAK hay SYSCALL
2.3 Quản lý bộ nhớ
2.3.1 Giới thiệu MMU
Nhân processor MIPS32 4K chứa một đơn vị quản lý MMU(Memory Management
Unit). MMU có nhiệm vụ dịch địa chỉ ảo sang địa chỉ vật lý trước khi một yêu cầu
được gửi đến bộ điều khiển bộ nhớ cache để so sánh tag hoặc tới đơn vị giao diện bus
để tham chiếu tới bộ nhớ ngoài. Đây là một đặc điểm rất hữu ích cho hệ điều hành
trong việc quản lý bộ nhớ vật lý để thực hiện nhiều nhiệm vụ cùng một lúc trong cùng
địa chỉ ảo (địa chỉ vật lý khác nhau. Ngoài ra MMU còn có niệm vụ bảo vệ các vùng
bộ nhớ và định nghĩa giao thức bộ nhớ cache. Trong nhân processor 4Kc, MMU là
kiểu TLB(Translation Lookaside Buffer). TLB gồm có 3 vùng buffer :
16 dual-entry fully associative Joint TLB( JTLB): TLB hợp nhất 16 cổng kép
3-entry instruction micro TLB( ITLB):TLB vi dẫn 3 cổng
3-entry data micro TLB: TLB vi dữ liệu 3 cổng
15
Khi một địa chỉ được dịch, ITLB hoặc DTLB tương ứng sẽ được truy nhập. Nếu việc
dịch địa chỉ không được tìm thấy trong micro TLB thì JTLB sẽ được truy nhập. Nếu
vẫn không tìm thấy thì sẽ xảy ra một ngoại lệ.Trong nhân processor 4Km và 4Kp thì
MMU dựa trên một giải thuật đơn giản thông qua cơ chế Fixed Mapping(FM).
Cách thức mà MMU tương tác với việc truy nhập bộ nhớ cache trong
nhân 4Kc
16
Trong nhân 4Km và 4Kp
2.3.2 Chế độ thực thi
Trong nhân processor 4K đều hỗ trợ 3 chế độ thực thi:
Chế độ người dùng( User mode)
Chế độ Kernel ( Kernel mode)
Chế độ Debug ( Debug mode)
User mode được sử dụng cho các chương trình ứng dụng. Chế độ Kernel được dùng
khi xử lý các ngoại lệ hoặc các hàm hệ thống được ưu tiên, bao gồm quản lý thanh ghi
CP0 và việc truy nhập các thiết bị I/O. Chế độ Debug khi dò và loại bỏ lỗi phần mềm,
hầu hết xảy ra trong công cụ phát triển phần mềm.
Dịch địa chỉ do MMU thực hiện phụ thuộc vào chế độ mà processor đang hoạt động
2.2.2.1 Phân đoạn bộ nhớ ảo
Phân đoạn bộ nhớ ảo ở từng chế độ hoạt động là khác nhau. Không gian bộ nhớ ảo
có kích thước 4GBytes.
Nhân hệ thống truy nhập chế độ Kernel khi khởi động lại hoặc khi phát hiện một
ngoại lệ. Ở chế độ Kernel có thể truy nhập toàn bộ không gian địa chỉ cũng như tất cả
thanh ghi CP0.
Truy nhập ở chế độ User bị giới hạn từ địa chỉ 0x0000_0000 đến 0x7sFFF_FFFF và
bị hạn chế khi truy nhập các chức năng của thanh ghi CP0. Chế độ Debug được truy
nhập khi có một ngoại lệ debug. Ở chế độ này, phần mềm debug sẽ truy nhập tới cùng
không gian địa chỉ và các thanh ghi CP0 giống như ở chế độ Kernel . Bên cạnh đó,
nhân hệ thống còn truy nhập vào phân đoạn debug dseg, phân đoạn này đè lên một
phần của segment kseg3. Sự truy nhập phân đoạn dseg có thể được bật hay tắt.
17
+ Phân đoạn không được ánh xạ: Các phân đoạn không được ánh xạ không sử dụng
TLB hoặc FM để dịch từ địa chỉ ảo sang địa chỉ vật lý. Các phân đoạn này có 1 cách
dịch địa chỉ đơn giản và cố định khá giống FM.
+ Phân đoạn được ánh xạ: Một phân đoạn mapped sử dụng TLB hoặc FM để dịch từ
địa chỉ ảo sang địa chỉ vật lý.
Đối với nhân 4Kc, việc dịch của các phân đoạn này dựa trên nền tảng phân trang.
Trong quá trình dịch bao gồm cả những thong tin xác định liệu trang đó có cacheable
hay không và thuộc tính bảo vệ của trang.
Đối với nhân 4Km và 4Kp, những phân đoạn này được dịch cố định từ địa chỉ ảo
sang địa chỉ vật lý. Khả năng cacheability được xác định trong thanh ghi CP0.
2.2.2.2 Chế độ người dùng
18
Phân đoạn của người dùng bắt đầu từ địa chỉ 0x0000_0000 và kết thúc ở
0x7FFF_FFFF. Việc truy nhập vào tất cả các địa chỉ khác sẽ gây ra lỗi .
Processor hoạt động ở chế độ người dùng khi thanh ghi Status chứa các bit có giá trị
sau:
UM=1
EXL=0
ERL=0
Ngoài ra thì bit DM trong thanh ghi Debug sẽ có giá trị 0.
Tất cả các địa chỉ ảo trong chế độ User đều có bit cao nhất bằng 0. Hệ thống ánh xạ
tất cả cả các tham chiếu đến useg thông qua TLB hoặc FM. Đối với nhân 4Kc, địa chỉ
ảo có phần mở rộng trường 8 bit ASID .
2.2.2.3 Chế độ kernel
Processor hoạt động ở chế độ Kernel khi bit DM trong thanh ghi Debug bằng 0.
Thanh ghi Status chứa các giá trị sau:
UM=0
o ERL=1
o EXL=1
19
• Khi một ngoại lệ không thể dò và loại bỏ, bit EXL hoặc ERL sẽ được thiết lập
và processor sẽ vào chế độ Kernel. Cuối quá trình xử lý ngoại lệ, lệnh
Exception Return( ERET) sẽ được thực thi. Lệnh này nhảy đến Exception PC,
xóa bit ERL và xóa bit EXL( nếu ERL=0). Khi đó processor sẽ về chế độ người
dùng
20
Ở chế độ Kernel, khi bit 31 bằng 0, không gian địa chỉ ảo kuseg 32 bit sẽ được chọn.
Đối với nhân 4Kc, địa chỉ ảo sẽ được mở rộng thêm trường 8 bit ASID. Khi ERL=1,
vùng địa chỉ của người dùng trở thành không gian địa chỉ uncached và unmapped có
kích thước 2^31 byte. Khi đó, địa chỉ ảo kuseg sẽ ánh xạ trực tiếp vào cùng địa chỉ vật
lý và không có thêm trường ASID
Khi 3 bit cao nhất có giá trị 101, không gian địa chỉ ảo kseg 32 bit sẽ được chọn.
Tham chiếu tới kseg sẽ không được ánh xạ, địa chỉ vật lý sẽ được tính bằng cách trừ
đi 0xA000_0000 từ địa chỉ ảo. Khi truy nhập tới các địa chỉ này thì bộ nhớ vật
lý( hoặc các thanh ghi thiết bị I/O ánh xạ vào bộ nhớ) sẽ được truy nhập trực tiếp mà
không thông qua cache
Khi UM=0,ERL=1,EXL=1 trong thanh khi trạng thái và DM=0 trong thanh ghi
Debug và 3 bit cao nhất có giá trị 110, vùng địa chỉ ảo kseg2 sẽ được chọn. Không
gian địa chỉ ảo này sẽ được đặt tại địa chỉ vật lý 0xC000_0000 đến 0xDFFF_FFFF
Khi 3 bit cao nhất của địa chỉ ảo là 111, không gian địa chỉ ảo kseg3 sẽ được chọn và
sẽ được đặt tại địa chỉ vật lý 0xE000_0000 đến 0xFFFF_FFFF.
2.2.2.4 Chế độ debug
21
Phân đoạn dseg chia thành 2 phân đoạn dmseg từ 0xFF20 đến 0xFF2F_FFFF được
sử dụng khi máy dò đang làm việc ở phân đoạn nhớ, và phân đoạn drseg từ
0xFF30_0000 đến 0xFF3F_FFFF được sử dụng khi truy nhập tới bộ nhớ được ánh
xạ tới các thanh ghi debug .
2.3.3 Translation Lookaside Buffer
+Joint TLB
JTLB tổ chức thành 16 cặp cổng chẵn và lẻ chứa các trang được sắp xếp theo kích
thước từ 4Kbytes đến 16Mbytes vào trong không gian địa chỉ vật lý 4GByte. JTLB có
nhiệm vụ dịch địa chỉ ảo và Address Space Identifier(ASID) thành địa chỉ vật lý. Việc
dịch sẽ được thực hiện bằng cách so sánh các bit cao của địa chỉ ảo( cùng với các bit
ASID) với từng cổng trong phần tag của cấu trúc JTLB. Mỗi cổng tag ảo sẽ tương
ứng với 2 cổng dữ liệu vật lý, chẵn và lẻ. Bit địa chỉ ảo cao nhất sẽ không tham gia
vào quá trình so sánh tag mà để xác định cổng dữ liệu nào sẽ được sử dụng
+Instruction TLB
ITLB dùng để dịch các luồng lệnh( instruction stream) và chỉ ánh xạ các trang có
kích thước 4 Kbyte hoặc nhỏ hơn. ITLB được quản lý bởi phần cứng Nếu 1 địa chỉ
không được dịch bởi ITLB, khi đó JTLB sẽ được truy nhập. Nếu thành công, thông
tin dịch sẽ được copy vào ITLB . ITLB sẽ được truy nhập lại và địa chỉ đã được dịch
thành công
22
+ Data TLB
DTLB cho phép dịch các địa chỉ Load/Store nhanh hơn so với JTLB. DTLB cũng chỉ
ánh xạ tới các trang có kích thước 4KByte hoặc nhỏ hơn
Cũng giống như ITLB, DTLB cũng được quản lí bởi phần cứng. Tuy nhiên, trong
quá trình dịch địa chỉ, JTLB cũng được truy nhập song song với DTLB. Nếu có một
DTLB miss và 1JTLB hit, DTLB sẽ được nạp lại
2.3.4 Chuyển địa chỉ ảo sang địa chỉ thật
Chuyển địa chỉ ảo sang địa chỉ vật lý bắt đầu từ việc so sánh địa chỉ ảo từ processor
với địa chỉ ảo trong TLB. Nếu số hiệu trang ảo (VPN) của địa chỉ trùng với trường
VPN của cổng hoặc:
Bit G của cả 2 trang chẵn và lẻ đều được thiết lập hoặc
Trường ASID của địa chỉ ảo trùng với trường ASID của cổng TLB
Khi đó được gọi là 1 TLB hit. Nếu không sẽ có một ngoại lệ TLB miss và khi
đó TLB sẽ được ghi lại từ bảng trang địa chỉ ảo/vật lý trong bộ nhớ.
Khi có một sự tương thích địa chỉ ảo trong TLB, PFN( physical frame number) là đầu
ra từ TLB móc nối với Offset sẽ tạo ra địa chỉ vật lý. Offset thể hiện một địa chỉ giữa
không gian khung trang
23
+Kích thước trang và giải thuật thay thế
Kích thước trang có thể được định dạng dựa trên chế độ từng cổng để ánh xạ các kích
thước trang từ 4KByte đến 10MByte. Thanh ghi PageMask CP0 sẽ được load với kích
thước trang mong muốn. Khi một cổng mới được ghi, thì giá trị này sẽ được cập nhật.
Nhân 4Kc cung cấp một cơ chế dựa trên giải thuật thay thế để xử lý tình huống khi
một TLB miss xuất hiện
24
+Fixed Mapping MMU (4KM & 4KP Cores)
FM dịch địa chỉ ảo sang địa chỉ vật lý và cung cấp các thuộc tính cho các phân đoạn
bộ nhớ khác nhau. Các phân đoạn không được ánh xạ( kseg0 và kseg1) trong 4Kc
TLB cũng sẽ được dịch giống như vậy bởi FM trong 4Km và 4Kp MMU
FM cũng xác định khả năng cachebility của từng segment. Các thuộc tính này được
điều khiển thông qua các bit của thanh ghi Config
25