Định nghĩa SSTF(Shortest Seek Time First)
Dạng đầy đủ của SSTF là Shortest Seek Time First. SSTF là một thuật toán lập lịch lưu trữ thứ cấp xác định chuyển động của đầu và cánh tay của đĩa trong việc phục vụ các yêu cầu đọc và ghi. SSTF hoạt động như một thuật toán lập lịch đĩa và nó là một cải tiến dựa trên thuật toán FCFS.
Nó làm giảm tổng thời gian tìm kiếm so với FCFS.
Các bài viết liên quan:
Nó cho phép người đứng đầu di chuyển đến đường ray gần nhất trong hàng đợi dịch vụ.
Cách hoạt động của thuật toán lập lịch trên disk SSTF
Thuật toán lập lịch trên disk SSTF (Shortest Seek Time First) hoạt động dựa trên việc lựa chọn truy cập đến các vị trí trên đĩa cứng sao cho thời gian di chuyển đầu đọc/ghi từ vị trí hiện tại đến vị trí cần truy cập là ngắn nhất.
Cách hoạt động của thuật toán SSTF như sau:
- Bước 1: Đầu tiên, thiết lập vị trí hiện tại là vị trí ban đầu của đầu đọc/ghi.
- Bước 2: Tìm và chọn vị trí trên đĩa gần nhất với vị trí hiện tại. Điều này được thực hiện bằng cách so sánh khoảng cách giữa các vị trí trên đĩa và vị trí hiện tại, và chọn vị trí có khoảng cách ngắn nhất.
- Bước 3: Di chuyển đầu đọc/ghi đến vị trí đã chọn ở bước trước.
- Bước 4: Lặp lại từ bước 2 đến khi tất cả các vị trí trên đĩa được truy cập.
Trong quá trình thực hiện, thuật toán SSTF tối ưu hóa việc di chuyển đầu đọc/ghi trên đĩa bằng cách chọn các vị trí gần nhất trước, giúp giảm thiểu thời gian di chuyển và tăng hiệu suất truy xuất dữ liệu.
Tuy nhiên, cũng cần lưu ý rằng thuật toán SSTF có thể gặp phải vấn đề “cạnh tranh” (starvation) khi các yêu cầu truy cập tới các vị trí cách xa vị trí hiện tại. Trong trường hợp này, các yêu cầu gần vị trí hiện tại sẽ được ưu tiên, gây ra việc các yêu cầu cách xa có thể bị lờ đi hoặc chờ đợi lâu hơn. Điều này có thể gây ra sự bất công trong việc phục vụ các yêu cầu và làm tăng thời gian truy cập.
Tóm lại, thuật toán lập lịch trên disk SSTF là một phương pháp quản lý việc truy cập dữ liệu trên đĩa cứng dựa trên nguyên tắc chọn vị trí gần nhất trước. Mặc dù mang lại hiệu suất tốt trong việc giảm thiểu thời gian di chuyển, thuật toán cũng có nhược điểm về vấn đề cạnh tranh khi các yêu cầu cách xa vị trí hiện tại.
Đặc điểm của SSTF
- SSTF là một thuật toán viết tắt của Shortest Seek Time First.
- Thuật toán chọn các yêu cầu có thời gian tìm kiếm tối thiểu – từ vị trí người đứng đầu hiện tại.
- Vì thời gian tìm kiếm tăng lên với tổng số cylinders mà phần đầu đi qua, thuật toán SSTF chọn yêu cầu đang chờ xử lý gần nhất với vị trí phần đầu hiện tại.
- Thuật toán có vẻ hợp lý. Nó phục vụ tất cả các yêu cầu gần với vị trí head hiện tại trước khi nó di chuyển head ra xa để phục vụ các yêu cầu khác. Giả định này là cơ sở cho thuật toán SSTF (Shortest Seek Time First).
- So với FCFS, tổng thời gian tìm kiếm thấp hơn.
- Mục đích của SSTF là cung cấp throughput tăng lên.
- Thuật toán SSTF phục vụ những yêu cầu đòi hỏi số lượng chuyển động đầu ít nhất từ vị trí hiện tại – bất kể hướng.
- Thời gian chờ đợi ít hơn trong SSTF.
- Thời gian phản hồi trung bình thấp do thuật toán.
- SSTF có thể không hoạt động như một thuật toán công bằng đối với chuỗi các yêu cầu của dự án.
Ưu điểm và nhược điểm của thuật toán lập lịch trên disk SSTF
Thuật toán lập lịch trên disk SSTF (Shortest Seek Time First) có các ưu điểm và nhược điểm sau:
Ưu điểm của thuật toán SSTF:
- Tối ưu hóa thời gian di chuyển: Thuật toán SSTF chọn vị trí trên đĩa gần nhất với vị trí hiện tại, giúp giảm thiểu thời gian di chuyển của đầu đọc/ghi. Điều này làm tăng hiệu suất truy xuất dữ liệu và giảm độ trễ trong việc xử lý các yêu cầu truy cập.
- Độ hiệu quả cao: SSTF là một thuật toán đơn giản và dễ triển khai. Nó không đòi hỏi nhiều tài nguyên tính toán và không yêu cầu việc lưu trữ thông tin về lịch sử truy cập trước đó. Do đó, nó có khả năng hoạt động hiệu quả trong các hệ thống có tài nguyên hạn chế.
Nhược điểm của thuật toán SSTF:
- Vấn đề cạnh tranh: Trong một số tình huống, thuật toán SSTF có thể gặp vấn đề cạnh tranh khi các yêu cầu truy cập tới các vị trí cách xa vị trí hiện tại. Các yêu cầu gần vị trí hiện tại sẽ được ưu tiên, gây ra việc các yêu cầu cách xa có thể bị lờ đi hoặc chờ đợi lâu hơn. Điều này có thể dẫn đến sự bất công trong việc phục vụ các yêu cầu và làm tăng thời gian truy cập.
- Không xử lý được tình huống không có yêu cầu truy cập gần nhất: Trong trường hợp không có yêu cầu truy cập gần nhất với vị trí hiện tại, thuật toán SSTF không đưa ra quyết định về việc chọn vị trí truy cập tiếp theo. Điều này có thể dẫn đến sự lạc quan trong việc lập lịch và ảnh hưởng đến hiệu suất của thuật toán.
Tóm lại, thuật toán lập lịch trên disk SSTF có ưu điểm là tối ưu hóa thời gian di chuyển và độ hiệu quả cao. Tuy nhiên, nó cũng có nhược điểm liên quan đến vấn đề cạnh tranh và khả năng xử lý tình huống không có yêu cầu truy cập gần nhất.
Thí dụ về SSTF
Hãy xem xét trình tự yêu cầu đĩa sau cho một đĩa có 100 bản nhạc
45, 21, 67, 90, 4, 89, 52, 61, 87, 25
Con trỏ đầu bắt đầu từ 50. Tìm số chuyển động của đầu trong xi lanh bằng cách sử dụng lập lịch SSTF.
Giải pháp:
Số hình trụ = 5 + 7 + 9 + 6 + 20 + 2 + 1 + 65 + 4 + 17 = 136
Cài đặt thuật toán lập lịch trên disk SSTF
Dưới đây là một ví dụ về cách cài đặt thuật toán lập lịch trên disk SSTF trong ngôn ngữ lập trình C++:
#include <iostream> #include <vector> #include <cmath> using namespace std; int findClosestRequest(int currentPosition, const vector<int>& requests) { int minDistance = INT_MAX; int closestRequest = -1; for (int i = 0; i < requests.size(); i++) { int distance = abs(requests[i] - currentPosition); if (distance < minDistance) { minDistance = distance; closestRequest = i; } } return closestRequest; } void sstfScheduling(const vector<int>& requests, int initialPosition) { int currentPosition = initialPosition; int totalSeekTime = 0; vector<int> scheduledRequests; while (!requests.empty()) { int closestRequestIndex = findClosestRequest(currentPosition, requests); int closestRequest = requests[closestRequestIndex]; scheduledRequests.push_back(closestRequest); totalSeekTime += abs(currentPosition - closestRequest); currentPosition = closestRequest; requests.erase(requests.begin() + closestRequestIndex); } cout << "Scheduled requests: "; for (int request : scheduledRequests) { cout << request << " "; } cout << endl; cout << "Total seek time: " << totalSeekTime << endl; } int main() { vector<int> requests = { 98, 183, 37, 122, 14, 124, 65, 67 }; int initialPosition = 53; sstfScheduling(requests, initialPosition); return 0; }
Trong ví dụ trên, chúng ta sử dụng một vector requests
để lưu các yêu cầu truy cập đến vị trí trên đĩa. Hàm findClosestRequest
tìm vị trí yêu cầu gần nhất với vị trí hiện tại. Hàm sstfScheduling
thực hiện lập lịch SSTF bằng cách lựa chọn yêu cầu gần nhất và cập nhật vị trí hiện tại và tổng thời gian di chuyển.
Kết quả sẽ được hiển thị là các yêu cầu đã được lập lịch và tổng thời gian di chuyển. Trong ví dụ trên, chúng ta sử dụng các giá trị yêu cầu và vị trí ban đầu cụ thể. Bạn có thể thay đổi các giá trị này theo nhu cầu của mình.
Lưu ý rằng đây chỉ là một ví dụ cơ bản về cách cài đặt thuật toán SSTF. Trong thực tế, cài đặt và tối ưu hóa thuật toán có thể phức tạp hơn, tùy thuộc vào yêu cầu và môi trường cụ thể.
Xem thêm Cách lên lịch cho bài viết wordpress