













Preview text:
  lOMoARcP SD| 58886076
BÀI TẬP THỰC HÀNH KTMT ÔN TẬP 
Bài 1: Chuyển đổi số thập phân sang nhị phân: 
a) Chuyển số 4035 từ hệ thập phân sang hệ nhị phân. 
b) Chuyển số 4056 từ hệ thập phân sang hệ bát phân.  Giải:  a) 4035 = 111111000011(2)  b) 4056 = 111111011000(2) 
(Cách chuyển số thập phân sang nhị phân và ngược lại: Nguyên tắc của phương pháp này 
là lấy số cần chuyển đổi chia cho 22 (kết quả chỉ lấy phần nguyên), sau đó tiếp tục lấy kết 
quả chia cho 22 (và cũng chỉ lấy phần nguyên), kết quả số nhị phân thu được là tập hợp 
các số dư của các phép chia, lấy từ phép chia cuối cùng trở lên trên)  VD:   
Bài 2: Bộ nhớ cache có kích thước 32KB với mỗi block là 64 byte. Hãy tính số block 
có thể lưu trữ trong cache và giải thích cơ chế xử lý cache miss. 
Giải thích cache miss và cache hit: 
Cache Hit: Một cache hit là trạng thái trong đó: dữ liệu được yêu cầu, được xử lý bởi 
một thành phần hoặc một ứng dụng được tìm thấy trong bộ nhớ cache.    lOMoARcP SD| 58886076
Cache Miss: Là trạng thái nơi dữ liệu được yêu cầu xử lý bởi một thành phần hoặc ứng 
dụng không được tìm thấy trong bộ nhớ cache (cache memory). Nó gây ra sự chậm trễ 
trong các thực thi bởi chúng cần yêu cầu các chương trình hoặc ứng dụng tìm nạp dữ liệu 
từ các cấp bộ nhớ cache khác hoặc bộ nhớ chính. Vì không có sẵn các dữ liệu được yêu  cầu.  Cách tính:  • 
Kích thước cache: 32KB = 32 * 1024 bytes = 32768 bytes.  •  Mỗi block: 64 bytes. 
Số block lưu trữ trong cache = Tổng kích thước cache / Kích thước mỗi block = 32768 
bytes / 64 bytes/block = 512 block. => Vậy, cache có thể lưu trữ 512 block. 
Bài 3: Biểu diễn số −39 trong hệ nhị phân sử dụng phương pháp bù 2 (2’s 
complement) với 8 bit và biểu diễn số 79 trong hệ nhị phân sử dụng phương pháp  bù 2 với 8 bit.  Giải:  a)-39 = 1111111111011001(2) 
b) 79 = 0000000001001111(2) (8-bits)  VD1:    VD2:    lOMoARcP SD| 58886076  
Bài 4: Một CPU có 4 pipeline và tần số xung nhịp là 2.8GHz. Tính số lệnh được xử 
lý trong 5 giây và giải thích lợi ích của pipeline trong việc cải thiện hiệu suất.   
Bài 5: Thực hiện phép cộng hai số nhị phân: a)  10111001 + 10110110 . ₂ ₂ 
b) 11000001 − 10011101 .₂ ₂ 
Giải: (Sử dụng bằng Casio 580-880)    lOMoARcP SD| 58886076   VD:    VD2:    lOMoARcP SD| 58886076   Cách tính thông thường:  a) 10111001 + 10110110 = ₂  ₂ 
Chuyển đổi phép tính (số) sang thập phân, ta có:  185 + 182 = 367 
=> Vậy, 101110012+101101102= 111011012 
b) 11000001 − 10011101₂ ₂ 
Chuyển đổi phép tính (số) sang thập phân, ta có:  193 – 157 = 36 
=>Vậy, 11000001 − 10011101 = 00100100₂ ₂ 2 
Bài 6: Bộ nhớ cache có kích thước 64KB với mỗi block là 256 byte. Hãy tính số 
block trong cache và giải thích cơ chế thay thế block khi cache bị đầy  Kích 
thước cache: 64KB = 64 * 1024 bytes = 65536 bytes.     Mỗi block: 256 bytes.    lOMoARcP SD| 58886076
Số block lưu trữ trong cache = Tổng kích thước cache / Kích thước mỗi block = 65536 
bytes / 256 bytes/block = 256 block. 
Vậy, cache có thể lưu trữ 256 block. 
Bài 7: Giả sử CPU có tần số 3 GHz và tiêu thụ công suất 65W. 
a) Tính công suất tiêu thụ nếu tần số tăng lên 3.5 GHz mà không thay đổi kiến trúc. 
b) Giải thích mối quan hệ giữa tần số xung nhịp và công suất tiêu thụ của CPU.  Giải:  a)      lOMoARcP SD| 58886076   b) 
Tần số xung nhịp và công suất êu thụ của CPU có mối quan hệ chặt chẽ với nhau, và 
công suất êu thụ tăng khi tần số xung nhịp tăng. Công thức P=C x V2 x f cho thấy rằng 
công suất êu thụ phụ thuộc vào tần số xung nhịp (f) và bình phương điện áp (V^2).  • 
Tần số xung nhịp (f): Khi tần số xung nhịp tăng, số chu kỳ hoạt động của CPU 
trong một giây tăng, dẫn đến việc CPU thực hiện nhiều lệnh hơn và tiêu thụ nhiều  năng lượng hơn.  • 
Điện áp (V): Công suất tiêu thụ tăng lên bình phương của điện áp. Điều này có 
nghĩa là một sự tăng nhỏ trong điện áp có thể dẫn đến sự tăng đáng kể trong công  suất tiêu thụ. 
Bài 8: Một CPU có tần số xung nhịp là 2.5GHz và thực hiện được 4 lệnh mỗi chu kỳ. 
Tính số lệnh mà CPU có thể xử lý trong 1 giây. Giải thích khái niệm xung nhịp  trong CPU.  Giải: 
1. Tần số xung nhịp của CPU: 2.5GHz = 2.5 x 10910^9 chu kỳ/giây. 
2. Số lệnh thực hiện mỗi chu kỳ: 4 lệnh.   
Bài 9: Bộ điều khiển ngắt trong CPU.    lOMoARcP SD| 58886076
a) Giải thích vai trò của bộ điều khiển ngắt trong CPU. 
b) Tính số ngắt CPU có thể xử lý trong 1 giây nếu mỗi ngắt mất 10,000 chu kỳ và  tần số CPU là 2.5 GHz.  Giải thích: 
a) Vai trò của bộ điều khiển ngắt trong CPU 
Bộ điều khiển ngắt (Interrupt Controller) là một thành phần quan trọng của CPU, có 
nhiệm vụ quản lý các tín hiệu ngắt từ các thiết bị phần cứng hoặc phần mềm. Các ngắt là 
các tín hiệu tạm thời ngừng thực hiện chuỗi lệnh hiện tại của CPU để chuyển sang xử lý 
một sự kiện đặc biệt khẩn cấp. Vai trò cụ thể của bộ điều khiển ngắt gồm: 
1. Quản lý các ngắt: Bộ điều khiển ngắt quản lý các ngắt từ nhiều nguồn khác nhau, ưu 
tiên và phân loại các ngắt dựa trên tầm quan trọng và mức độ khẩn cấp. 
2. Lưu trạng thái hiện tại của CPU: Trước khi xử lý một ngắt, CPU cần lưu lại trạng thái 
hiện tại (ví dụ: các thanh ghi, bộ đếm chương trình) để có thể tiếp tục thực hiện lệnh  sau khi xử lý ngắt. 
3. Chuyển đổi ngữ cảnh: Sau khi xử lý ngắt, bộ điều khiển ngắt sẽ điều khiển CPU quay 
trở lại trạng thái trước đó và tiếp tục thực hiện chương trình như bình thường. 
4. Tối ưu hóa hiệu suất: Ngắt giúp xử lý các sự kiện khẩn cấp một cách nhanh chóng mà 
không cần kiểm tra liên tục trạng thái của các thiết bị ngoại vi, tiết kiệm tài nguyên và 
nâng cao hiệu suất hệ thống.  Cách giải:   
Bài 10: Giả sử một CPU sử dụng pipeline 5 giai đoạn với mỗi giai đoạn mất 1 chu kỳ 
xung nhịp để thực hiện. 
a) Giải thích cách hoạt động của pipeline trong CPU.    lOMoARcP SD| 58886076
b) Nếu một chương trình cần 100 lệnh để hoàn thành, tính số chu kỳ xung nhịp tối 
thiểu cần thiết để thực hiện chương trình này trên CPU có pipeline.  Giải thích: 
a) Cách hoạt động của pipeline trong CPU: 
Pipeline là một kỹ thuật trong thiết kế CPU giúp tăng hiệu suất bằng cách chia quá trình 
xử lý một lệnh thành nhiều giai đoạn liên tiếp, với mỗi giai đoạn được thực hiện trong 
một phần khác nhau của CPU. Một CPU pipeline có 5 giai đoạn thông thường bao gồm: 
1. Fetch (F): Đọc lệnh từ bộ nhớ. 
2. Decode (D): Giải mã lệnh để xác định hoạt động cần thực hiện. 
3. Execute (E): Thực hiện lệnh hoặc tính toán. 
4. Memory Access (M): Truy cập bộ nhớ nếu lệnh yêu cầu. 
5. Write Back (W): Ghi kết quả về thanh ghi. 
Trong một CPU pipeline, các lệnh được thực hiện theo kiểu luân phiên, tương tự như dây 
chuyền sản xuất. Khi một lệnh đang ở giai đoạn 2 (giải mã), lệnh tiếp theo có thể ở giai 
đoạn 1 (đọc lệnh), và lệnh trước đó có thể ở giai đoạn 3 (thực hiện lệnh). 
b) Tính số chu kỳ xung nhịp tối thiểu để thực hiện 100 lệnh trên CPU có pipeline 
Giả sử một CPU pipeline có 5 giai đoạn và mỗi giai đoạn mất 1 chu kỳ xung nhịp để 
hoàn thành. Chúng ta cần tính toán số chu kỳ xung nhịp tối thiểu để thực hiện 100 lệnh. 
Khi pipeline bắt đầu, lệnh đầu tiên cần 5 chu kỳ để hoàn thành (một chu kỳ cho mỗi giai 
đoạn). Sau đó, mỗi lệnh tiếp theo sẽ mất thêm 1 chu kỳ xung nhịp để đi vào pipeline vì 
pipeline đã được "lấp đầy". 
Do đó, số chu kỳ tối thiểu cần thiết để hoàn thành 100 lệnh là:  5 + 99 = 104 lệnh 
Bài 11: Một hệ thống sử dụng phương pháp interrupt để xử lý các yêu cầu I/O. Hãy 
giải thích cách hoạt động của interrupt và so sánh với phương pháp polling. 
Cách hoạt động của interrupt 
Interrupt (ngắt) là tín hiệu được gửi đến CPU để tạm ngừng các công việc hiện tại và 
chuyển sang xử lý một sự kiện khác khẩn cấp hơn. Khi một thiết bị I/O cần sự chú ý của 
CPU (ví dụ: bàn phím khi có phím được nhấn, hay bộ nhớ khi có dữ liệu đọc/ghi hoàn 
tất), nó sẽ gửi một tín hiệu ngắt đến CPU. Dưới đây là cách hoạt động của interrupt: 
1. Phát hiện ngắt: Thiết bị I/O gửi một tín hiệu ngắt đến CPU thông qua bộ điều  khiển ngắt.    lOMoARcP SD| 58886076
2. Lưu trạng thái: CPU tạm dừng công việc hiện tại và lưu trạng thái của nó (bao 
gồm các thanh ghi và bộ đếm chương trình) để có thể quay lại sau khi xử lý xong  ngắt. 
3. Xử lý ngắt: CPU nhảy đến một chương trình xử lý ngắt (ISR - Interrupt Service 
Routine) để xử lý yêu cầu từ thiết bị I/O. 
4. Phục hồi trạng thái: Sau khi xử lý xong ngắt, CPU khôi phục lại trạng thái trước 
đó và tiếp tục công việc bị gián đoạn. 
So sánh với phương pháp polling 
Polling và interrupt là hai phương pháp chính để xử lý yêu cầu I/O từ các thiết bị ngoại 
vi. Dưới đây là sự khác biệt chính giữa hai phương pháp này:   
Bài 12: Làm các phép tính sau: 
a) Chuyển số -25 từ hệ thập phân sang hệ nhị phân sử dụng phương pháp bù 2 với  16 bit. 
b) Biểu diễn số -57.5 trong hệ nhị phân dấu phẩy động theo chuẩn IEEE 754.  Giải:  a) -25= 1111 1111 1110 01112 
b)-57,5 = 1 10000100 11001110000000000000000 (IEEE)    lOMoARcP SD| 58886076
Bài 13: Một CPU có tần số xung nhịp là 4GHz. Tính thời gian cần thiết để thực hiện 
một lệnh nếu mỗi lệnh cần 3 chu kỳ xung nhịp. Giải thích khái niệm chu kỳ xung  nhịp.   
Bài 14: Giả sử một CPU có ba loại lệnh A, B, C. Số chu kỳ xung nhịp để thực hiện 
các lệnh tương ứng là 1, 2, và 3. 
1. Tính thời gian trung bình để thực hiện một lệnh. 
2. Nếu tần số xung nhịp của CPU là 2 GHz, tính tốc độ thực hiện lệnh của CPU  (lệnh/giây).    lOMoARcP SD| 58886076    
Bài 15: Một hệ thống sử dụng cache liên kết trực tiếp (Direct-mapped Cache). Hãy 
mô tả cách hệ thống tìm kiếm dữ liệu trong cache và xử lý khi xảy ra cache miss.    lOMoARcP SD| 58886076
Direct-mapped cache là một loại bộ nhớ đệm (cache) trong đó mỗi khối nhớ (block) trong 
bộ nhớ chính (main memory) ánh xạ đến đúng một vị trí duy nhất trong cache. Điều này 
đơn giản hóa quá trình tìm kiếm và lưu trữ dữ liệu. Dưới đây là mô tả về cách hệ thống 
tìm kiếm dữ liệu trong cache và xử lý khi xảy ra cache miss. 
Cách hệ thống tìm kiếm dữ liệu trong Direct-mapped Cache 
1. Chia địa chỉ bộ nhớ: 
o Tag: Phần dùng để nhận dạng dữ liệu lưu trữ trong cache. o Index: Phần 
dùng để xác định vị trí của block trong cache. 
o Offset: Phần chỉ địa chỉ byte cụ thể trong block.  2. Tìm kiếm trong cache: 
o Khi CPU cần truy cập một địa chỉ bộ nhớ, nó chia địa chỉ thành các phần  (Tag, Index, Offset). 
o Index xác định vị trí chính xác của block trong cache. o Tag được so sánh 
với giá trị Tag của block tại vị trí Index trong cache để kiểm tra xem dữ 
liệu yêu cầu có trong cache hay không (cache hit). 
Nếu Tag khớp, đó là cache hit và dữ liệu được truy xuất trực tiếp từ cache. Nếu không 
khớp, đó là cache miss và cần xử lý tiếp. 
Xử lý khi xảy ra cache miss 
Khi xảy ra cache miss, hệ thống sẽ thực hiện các bước sau: 
1. Tải dữ liệu từ bộ nhớ chính: 
o Dữ liệu được tải từ bộ nhớ chính vào cache. Block trong bộ nhớ chính 
chứa dữ liệu được đặt vào vị trí trong cache xác định bởi Index.  2. Cập nhật cache: 
o Block mới trong bộ nhớ chính thay thế block cũ tại vị trí đó trong cache. o 
Tag của block mới được cập nhật trong cache. o Dữ liệu từ block mới 
được lưu trữ vào cache để các lần truy cập tiếp theo có thể truy xuất  nhanh hơn. 
3. Xử lý lệnh ban đầu: 
Sau khi dữ liệu đã được cập nhật vào cache, CPU tiếp tục thực hiện lệnh ban đầu sử dụng  dữ liệu mới từ cache. 
Bài 16: Một CPU có tần số xung nhịp là 2.8 GHz và thực hiện một chương trình với  3 triệu lệnh. 
1. Tính số lệnh CPU có thể thực hiện trong 1 giây. 
2. Tính thời gian để hoàn thành chương trình 3 triệu lệnh này.    lOMoARcP SD| 58886076