Chương 2 7Kiến trúc nội Cơ chế siêu phân luồng hyper – threading Là một dạng của kỹ thuật đa luồng song song SMT – Simultaneous Multi Threading Chia ứng dụng thành nhiều luồng khác nhau
Trang 3ES SS DS IP CS
4 3 2 1 5
Thực thi
Trang 4Chương 2 7
Kiến trúc nội
Cơ chế siêu phân luồng (hyper – threading)
Là một dạng của kỹ thuật đa luồng song song (SMT – Simultaneous Multi
Threading)
Chia ứng dụng thành nhiều luồng khác nhau
Các luồng được thực thi tại một thời điểm
Mỗi luồng ứng với một AS (Architectural State)
Các luồng dùng chung tài nguyên thực thi
8:17 AM
Kiến trúc nội
Cơ chế siêu phân luồng (hyper – threading)
Bộ xử lý đa nhân Siêu phân luồngAS
Tài nguyên
thực thi
ASTài nguyên thực thi
AS ASTài nguyên thực thi
So sánh giữa hệ thống đa nhân (multi-core) và siêu phân luồng
8:17 AM
Trang 5ADD AL,3Lần 3: ADD BL,3
Luồng 1
Luồng 2
Số lần thực thi: 3
8:17 AM
Trang 6BX (Base): 16 bit
DH (High): 8 bit cao DL(low): 8 bit thấp
DX (Data): 16 bit
Trang 7Thanh ghi chỉ số và con trỏ
BP (Base Pointer): 16 bit
SP (Stack Pointer): 16 bit
SI (Source Index): 16 bit
DI (Destination Index): 16 bit
Thanh ghi đoạn
CS (Code Segment): 16 bit
DS (Data Segment): 16 bit
SS (Stack Segment): 16 bit
ES (Extra Segment): 16 bit
Các thanh ghi
Trang 8Thanh ghi điều khiển và trạng thái
IP (Instruction Pointer): 16 bit Flag register: 16 bit
Opcode: thay đổi tuỳ theo lệnh
Lệnh MOV: 100010
Lệnh ADD: 000000
Lệnh CMP: 001110
…
D (Direction): chiều truyền theo
thanh ghi cơ sở
Mã hoá lệnh
8:17 AM
Trang 9000 [BX + SI] [BX + SI + addr8] [BX + SI + addr16] AX AL
001 [BX + DI] [BX + DI + addr8] [BX + DI + addr16] CX CL
010 [BP + SI] [BP + SI + addr8] [BP + SI + addr16] DX DL
011 [BP + DI] [BP + DI + addr8] [BP + DI + addr16] BX BL
100 [SI] [SI + addr8] [SI + addr16] SP AH
101 [DI] [DI + addr8] [DI + addr16] BP CH
110 [addr16] [BP + addr8] [BP + addr16] SI DH
Mã hoá lệnh
8:17 AM
Trang 12CX-> [SI]
b
MOV
1 0 0 0 1 0 0 1 1 0 0 0 1 1 0 0
Độ dời: -0123h (2 byte) bù 2: FEDDh
Byte cao: FEh
Byte thấp: DDh
1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 0
Mã hoá lệnh
8:17 AM
Trang 14Độ dời: -1234h (2 byte) bù 2: EDCCh
Byte cao: EDhByte thấp: CCh
Trang 150 0 0 0 0 0 0 1
Mã hoá lệnh
8:17 AM
Giá trị tức thời Bộ nhớ
Trang 16000 [BX + SI] [BX + SI + addr8] [BX + SI + addr16] AX AL
001 [BX + DI] [BX + DI + addr8] [BX + DI + addr16] CX CL
010 [BP + SI] [BP + SI + addr8] [BP + SI + addr16] DX DL
011 [BP + DI] [BP + DI + addr8] [BP + DI + addr16] BX BL
100 [SI] [SI + addr8] [SI + addr16] SP AH
101 [DI] [DI + addr8] [DI + addr16] BP CH
110 [addr16] [BP + addr8] [BP + addr16] SI DH
Trang 17Chương 2 33
20 bit địa chỉ
2 20 địa chỉ (1,048,576)
Byte 1,048,575 Byte 1,048,574
Byte 1 Byte 0
Byte 2Byte 0
Byte 1,048,575Byte 1,048,573
Byte 3Byte 1Bank chẵn Bank lẻ
Word dữ liệu 16 bit (địa chỉ chẵn)8:17 AM
Trang 18Byte 1,048,575 Byte 1,048,573
Byte 3 Byte 1 Bank chẵn Bank lẻ
Word dữ liệu 16 bit (địa chỉ chẵn) 8:17 AM
Byte 3Byte 1Bank chẵn Bank lẻ
Word dữ liệu 16 bit (địa chỉ lẻ)8:17 AM
Chế độ bình thường (tác động đến 1M bộ nhớ):
Trang 19Chương 2 37Byte 00000h
SS = 2345hExtra segment
ES = 1234h
Địa chỉ đoạn phải kết thúc bằng giá trị 0
8:17 AM
Chế độ bình thường (tác động đến 1M bộ nhớ):
Trang 20Địa chỉ segment: 2000hĐịa chỉ offset: 3456h
Địa chỉ logic:
2000h : 3456h
8:17 AM
Chế độ bình thường (tác động đến 1M bộ nhớ):
Trang 21Địa chỉ segment: 2100hĐịa chỉ offset: 2456h
Chuyển từ địa chỉ vật lý địa chỉ logic:
Biết trước địa chỉ segment, tính địa chỉ offset:
Thêm số 0 vào sau địa chỉ segment
Thực hiện trừ với địa chỉ vật lý
Kết quả chấp nhận được khi 0 và 16 bit
8:17 AM
Chế độ bình thường (tác động đến 1M bộ nhớ):
Trang 22Chương 2 43
Phân đoạn bộ nhớ
Chuyển từ địa chỉ vật lý địa chỉ logic:
Biết trước địa chỉ segment, tính địa chỉ offset:
Chuyển từ địa chỉ vật lý địa chỉ logic:
Biết trước địa chỉ segment, tính địa chỉ offset:
Địa chỉ segment 6453h 64530h
Địa chỉ vật lý 75643h 75643h
64530h
Offset 20 bit không tồn tại địa chỉ logic có segment là 6453h
Chuyển địa chỉ 75643h sang địa chỉ logic, biết rằng segment là 6453h:
11113h-
8:17 AM
Chế độ bình thường (tác động đến 1M bộ nhớ):
Trang 23Chương 2 45
Chuyển từ địa chỉ vật lý địa chỉ logic:
Biết trước địa chỉ segment, tính địa chỉ offset:
Địa chỉ segment 7853h 78530h
Địa chỉ vật lý 75643h 75643h
78530h
Offset âm không tồn tại địa chỉ logic có segment là 7853h
Chuyển địa chỉ 75643h sang địa chỉ logic, biết rằng segment là 7853h:
Số âm-
8:17 AM
Chế độ bình thường (tác động đến 1M bộ nhớ):
Phân đoạn bộ nhớ
Chuyển từ địa chỉ vật lý địa chỉ logic:
Biết trước địa chỉ segment, tính địa chỉ offset:
Trang 24Chương 2 47
Phân đoạn bộ nhớ
Chuyển từ địa chỉ vật lý địa chỉ logic:
Biết trước địa chỉ offset, tính địa chỉ segment:
Lấy địa chỉ vật lý trừ địa chỉ offset
Kết quả chấp nhận được khi 0 và kết thúc bằng số 0
Địa chỉ segment là kết quả phép trừ đã bỏ đi số 0 cuối cùng
Chuyển từ địa chỉ vật lý địa chỉ logic:
Biết trước địa chỉ offset, tính địa chỉ segment:
Địa chỉ offset 6453h
Địa chỉ vật lý 75643h
75643h6453h
Địa chỉ logic: 6F1Fh : 6453h
Chuyển địa chỉ 75643h sang địa chỉ logic, biết rằng offset là 6453h:
6F1F0h-
Địa chỉ segment 6F1Fh
8:17 AM
Chế độ bình thường (tác động đến 1M bộ nhớ):
Trang 25Chương 2 49
Chuyển từ địa chỉ vật lý địa chỉ logic:
Biết trước địa chỉ offset, tính địa chỉ segment:
Địa chỉ offset 5321h
Địa chỉ vật lý 75643h 75643h
5321h
Không tồn tại địa chỉ logic có địa chỉ offset là 5321h
Chuyển địa chỉ 75643h sang địa chỉ logic, biết rằng offset là 5321h:
70322h-
Địa chỉ segment không chấp nhận
Chuyển từ địa chỉ vật lý địa chỉ logic:
Biết trước địa chỉ offset, tính địa chỉ segment:
Địa chỉ offset 6453h
Địa chỉ vật lý 05643h 05643h
6453hChuyển địa chỉ 05643h sang địa chỉ logic, biết rằng offset là 6453h:
Số âm-
Không tồn tại địa chỉ logic có địa chỉ offset là 6453h
Địa chỉ segment không chấp nhận
8:17 AM
Chế độ bình thường (tác động đến 1M bộ nhớ):
Trang 26Chương 2 51
Phân đoạn bộ nhớ
Chuyển từ địa chỉ logic địa chỉ vật lý :
Thêm số 0 vào sau địa chỉ segment
Thực hiện cộng với địa chỉ offset
Chuyển địa chỉ 6578h : 7598h sang địa chỉ vật lý:
Địa chỉ segment 6578h 65780h
Địa chỉ offset 7598h
65780h7598h6CD18hĐịa chỉ vật lý: 6CD18h
Chế độ bảo vệ (protected mode):
Cho phép truy xuất tới vùng nhớ trên 1M
Các thanh ghi đoạn gọi là thanh ghi chọn đoạn (segment selector)
Thanh ghi chọn đoạn dùng để chọn một phần tử trong bảng mô tả
Bảng mô tả (descriptor table) có kích thước 64 KB
Bảng mô tả toàn cục (GDT – Global descriptor table): chứa thông
tin các đoạn của bộ nhớ mà tất cả các chương trình có thể truy xuất
Bảng mô tả cục bộ (LDT – Local descriptor table): chứa thông tin
các đoạn của bộ nhớ mà một chương trình sử dụng
Các thanh ghi đoạn: CS, DS, ES, SS, FS, GS
Trang 278:17 AM Chương 2 53
Chế độ bảo vệ (protected mode):
Nội dung thanh ghi đoạn:
Chế độ bảo vệ (protected mode):
Nội dung một entry của bảng mô tả: 8B = 64 bit
Trang 288:17 AM Chương 2 55
32 bit base: địa chỉ cơ sở
20 bit limit: kích thước tối đa của đoạn
8 bit access
Phân đoạn bộ nhớ
Chế độ bảo vệ (protected mode):
Nội dung một entry của bảng mô tả: 8B = 64 bit
Pr (Present) = 1: selector hợp lệPrivl: giống RPL
Ex (Executable) = 1: codesegment; = 0: data segment
Direction: dùng cho data selector, = 1 xác định chiều tăng, = 0 xác định chiều giảm
Comforming: dùng cho code selector, =1: xác định mã lệnh trong segment có thể
thực thi từ mức ưu tiên bằng hay thấp hơn, =0: xác định mã lệnh chỉ có thể thực
thi theo mức ưu tiên như trong Privl
Nội dung một entry của bảng mô tả: 8B = 64 bit
Readable: dùng cho code selector, cho phép đọc từ segment hay không và luôn
luôn cấm ghi vào segment
Writeable: dùng cho data selector, cho phép ghi vào segment hay không và luôn
luôn cho phép đọc từ segment
Trang 29Gr = 0 kích thước đoạn tối đa là 74,565 byte
Gr = 1 kích thước đoạn tối đa là 74,565 x 4KB = 298,260 KByte
Sz (Size): =0 xác định chế độ 16 bit, =1 xác định chế độ 32 bit
Trang 31Gián tiếp thanh ghi
MOV AX,[BX]
MOV AX,DS:[BX]
DS BX
Trang 32Gián tiếp thanh ghi có nền
MOV AX,[BX+10h]
MOV AX,DS:[BX+10h]
DS BX
Trang 33Gián tiếp thanh ghi có nền, chỉ số và độ dời