Đồ Án Xây dựng cấu trúc dữ liệu hàng đợi (Ví dụ: priority queue) và các thao tác trên nó. Minh họa bằng mộ

Thảo luận trong 'Chưa Phân Loại' bắt đầu bởi Thúy Viết Bài, 5/12/13.

  1. Thúy Viết Bài

    Thành viên vàng

    Bài viết:
    198,891
    Được thích:
    173
    Điểm thành tích:
    0
    Xu:
    0Xu
    Đề tài: Xây dựng cấu trúc dữ liệu hàng đợi (Ví dụ: priority queue) và các thao tác trên nó. Minh họa bằng một ví dụ cụ thể.



    Group Member <Phạm Văn Duy><7077.53>
    <Nguyễn Văn Thật><2917.53>
    <Phạm Tấn Lực> <>
    Instructor Bùi Thanh Phong
    Batch <BatchName>


    TÌM HIỂU CHUNG VỀ HÀNG ĐỢI

    1. Giới thiệu hàng đợi


    Khái niệm hàng đợi: Hàng đợi, hay ngắn gọn là hàng (queue) cũng là một danh sách đặc biệt mà phép thêm và bớt được thực hiện ở 2 đầu khác nhau. Thêm ở cuối danh sách (REAR), còn bớt thì ở phía đầu của danh sách (FRONT).
    Cũng tương tự như stack, Queue là một cấu trúc có nhiều nút trải dài từ đầu hàng đợi đến cuối hàng đợi. Ví dụ như bạn đi mua vé xem phim chẳng hạn thì người mua xếp hàng trước sẽ được mua vé trước còn người mua xếp hàng sau thì sẽ mua vé sau, người mới đến thêm vào cuối hàng còn người ở đầu hàng mua vé và ra khỏi hàng. Vì vậy hàng còn được gọi là cấu trúc FIFO (first in - first out) hay "vào trước - ra trước".

    Bây giờ chúng ta sẽ thảo luận một vài phép toán cơ bản nhất trên hàng.
    Các phép toán trên hàng đợi (Các thao tác trên hàng)


    Empty(Q). Hàm trả về true nếu hàng Q rỗng và false nếu không.
    Insert (x, Q). Thêm đối tượng x vào đuôi hàng Q.
    Remove (Q). Loại đối tượng đứng ở đầu hàng Q.
    Queuefront (Q). Hàm trả về đối tượng đứng ở đầu hàng Q, còn hàng Q thì không thay đổi.
    Ví dụ. Nếu Q = (a, b, c, d) và a ở đầu hàng, d ở đuôi hàng, thì khi thực hiện phép toán Insert (e, Q) ta nhận được Q = (a, b, c, d, e), với e đứng ở đuôi hàng, nếu sau đó thực hiện phép toán Queuefront (Q), ta sẽ có Q = (b, c, d, e) và b trở thành phần tử đứng ở đầu hàng.

    Các thao tác thêm và huỷ một phần tử phải được thực hiện ở hai phía khác nhau của hàng đợi, với hàng đợi chúng ta chỉ được phép thêm nút vào cuối hàng đợi và xóa nút ở đầu hàng đợi nghĩa là việc truy xuất các nút trên hàng đợi xảy ra ở cả hai đầu.

    Các kĩ thuật trên hàng đợi

    Có rất nhiều kĩ thuật hàng đợi: FIFO (first in first out), PQ (priority queue-hàng đợ ưu tiên), FQ (fair queue-hàng đợi cân bằng). FIFO đây là kĩ thuật xếp hàng vào trước ra trước cơ bản. Các gói đến trước sẽ là các gói đầu tiên được xử lý. Khi hàng đợi đầy và có tắc nghẽn xảy ra thì các gói đến sẽ bị loại bỏ. Hàng đợi FIFO dựa vào hệ thống đầu cuối để điều khiển tắc nghẽn thông qua cơ chế điều khiển tắc nghẽn. Do loại hàng đợi này rất đơn giản nhiều khi không điều khiển được tắc nghẽn nên ta thường xét các loại hàng đợi hiệu quả hơn: hàng đợi ưu tiên(PQ), hàng đợi cân bằng (FQ), hàng đợi có trọng số (WQ).


    a. Hàng đợi FIFO (First In First Out)
    FIFO là hàng đợi mặc định được sử dụng trong hầu hết các router trên thế giới. Hoạt động của FIFO. Các gói đến từ các luồng khác nhau được đối xử công bằng bằng cách đưa vào các hàng đợi theo trật tự đến (gói nào đến trước sẽ được đưa vào trước và được phục vụ trước)

    Hình : Hoạt động của hàng đợi FIFO
    Hàng đợi hoạt động như một nơi lưu giữ các gói để tránh việc loại bỏ các gói không cần thiết khi có dấu hiệu của tắc nghẽn. Khi có tắc nghẽn xảy ra, và hàng đợi tràn thì tất cả các gói đến sẽ bị loại bỏ. Hàng đợi FIFO được sử dụng hầu hết trong các router, nó đơn giản do không phải định cấu hình cho nó mà chỉ việc sử dụng luôn. Trong các router của cisco, khi không có kế hoạch hàng đợi nào khác được cấu hình, thì tất cả các giao diện(ngoại trừ các giao diện có tốc độ bằng hoặc nhỏ hơn luồng E1) đều sử dụng hàng đợi FIFO mặc định. Tốc độ xử lý gói phải nhanh hơn tốc độ các gói đến hàng đợi IF0 thì mới tránh được hiện tượng tắc nghẽn trong mạng (hàng đợi IF1 rỗng), khi tốc độ xử lý quá thấp hơn so với tốc độ các gói vào, có nghĩa là tốc độ ra nhỏ hơn tốc gói vào (hàng đợi đầu ra dễ bị tràn) thì sẽ xảy ra tắc nghẽn khi có quá nhiều gói đi vào trong mạng, và khi vấn đề này xảy ra thì các gói đến sau sẽ bị loại bỏ

    b. Hàng đợi ưu tiên PQ (Priority Queue)
    Kĩ thuật này được sử dụng trong trường hợp đa hàng đợi, mỗi hàng đợi có một mức ưu tiên khác nhau, hàng đợi nào có mức ưu tiên cao nhất sẽ được ưu tiên phục vụ trước. Khi có tắc nghén xảy ra thì các gói trong các hàng đợi có độ ưu tiên thấp sẽ bị loại bỏ. Có một vấn đề đối với kĩ thuật này: khi các hàng đợi có độ ưu tiên cao quá nhiều thì các gói trong hàng đợi có độ ưu tiên thấp sẽ không bao giờ được phục vụ. Các gói được phân loại và được sắp xếp vào hàng đợi tuỳ thuộc vào thông tin bên trong các gói. Tuy nhiên kĩ thuật này dễ bị lạm dụng bởi người sử dụng hay các ứng dụng do ấn định các độ ưu tiên không cho phép.
    Vậy PQ cho phép định nghĩa các luồng lưu lượng ưu tiên như thế nào trong mạng? Ta có thể cấu hình các độ ưu tiên lưu lượng, có thể định nghĩa một loạt các bộ lọc trên cơ sở các đặc điểm của gói qua router để sắp xếp các lưu lượng trong các hàng đợi. Hàng đợi có độ ưu tiên cao nhất sẽ được phục vụ trước cho đến khi hàng đợi rỗng, sau đó các hàng đợi có độ ưu tiên thấp hơn sẽ được phục vụ lần lượt. Câu hỏi đặt ra là PQ làm việc như thế nào? Trong quá trình truyền dẫn,các hàng đợi có độ ưu tiên cao được đối xử ưu tiên hơn các hàng đợi có mức ưu tiên thấp hơn, hay nói cách khác các, lưu lượng quan trọng sẽ được gán các mức ưu tiên cao và lưu lượng có mức ưu tiên cao nhất được truyền trước, còn lại các lưu lượng ít quan trọng hơn. Các gói được phân loại dựa trên các tiêu chuẩn phân loại của người sử dụng,và được đặt ở một trong số các hàng đợi đầu ra với các độ ưu tiên: độ ưu tiên cao, trung bình, bình thường (không được ưu tiên), ưu tiên thấp. Các gói không được ấn định độ ưu tiên sẽ được đưa tới các hàng đợi bình thường. Khi các gói được gửi tới giao diện đầu ra, các hàng đợi ưu tiên tại giao diện đó được quét các gói theo thứ tự độ ưu tiên giảm dần. Hàng đợi có độ ưu tiên cao nhất được quét đầu tiên, sau đó đến các hàng đợi trung bình và tiếp tục các hàng đợi có độ ưu tiên khác. Gói đứng đầu hàng đợi có độ ưu tiên cao nhất được truyền đầu tiên. Thủ tục này được lặp lại mỗi khi có một gói được truyền. Chiều dài lớn nhất của hàng đợi được định nghĩa theo chiều dài giới hạn. Khi một hàng đợi dài hơn chiều dài hàng đợi giới hạn thì các gói đến sau sẽ bị loại bỏ.
    Cơ chế hàng đợi đầu ra ưu tiên có thể được sử dụng để quản lý lưu lượng từ tất cả các giao thức trong mạng. PQ cung cấp cách đối sử ưu tiên cho các luồng lưu lượng có độ ưu tiên cao, chắc chắn rằng các luồng lưu lượng then chốt khi qua các kết nối WAN sẽ đạt được độ ưu tiên cao.

    Các gói được phân loại như thế nào trong kĩ thuật PQ
    Danh sách ưu tiên là một tập các luật lệ mô tả các gói sẽ được ấn định các độ ưu tiên như thế nào trong các hàng đợi. Ngoài ra nó cũng có thể mô tả độ ưu tiên mặc định hoặc giới hạn kích thước hàng đợi của các hàng đợi ưu tiên.
    Các gói được phân loại theo:
    ã Loại giao thức hoặc giao thức con
    ã Giao diện đầu vào
    ã Kích thước các gói tin
    ã Các Fragment
    ã Danh sách truy nhập
    Tất cả các lưu lượng dùng để quản lý và điều khiển mạng đều được ấn định độ ưu tiên cao nhất để trong trường hớp có tắc nghẽn xảy ra thì chúng được ưu tiên truyền trước. Các lưu lượng không được ấn định mức ưu tiên nào thì được đưa vào các hàng đợi bình thường.
    PQ cung cấp thời gian đáp ứng nhanh hơn so với các kĩ thuật hàng đợi khác. Mặc dù có thể ấn định các độ ưu tiên cho các hàng đợi tại bất kì giao diện đầu nào nhưmg nó thường được sử dụng cho các lưu lượng có băng thông thấp.
    Để giải quyết vấn đề các hàng đợi có độ ưu tiên thấp không được xử lý khi có quá nhiều hàng đợi có độ ưu tiên cao thì ta có thể sử dụng các kiểu hàng đợi khác: hàng đợi cân bằng có trọng số (WFQ) hay hàng đợi cân bằng (FQ), đơn giản hơn ta có thể sử dụng cơ chế định dạng lưu lượng hay CAR để giới hạn tốc độ của lưu lượng có độ ưu tiên cao hơn. PQ sử dụng định cấu hình tĩnh do đó nó không thể thích ứng với các mạng thay đổi. Cơ chế xếp hàng ưu tiên là cơ chế đơn giản, có thể cung cấp các lớp dịch vụ phân biệt và cần ít nhất hai hàng đợi FIFO. Lấy một ví dụ sau: cho các hàng đợi FIFO và ta sẽ ấn định các mức ưu tiên khác nhau cho chúng: mức ưu tiên cao, mức ưu tiên trung bình, mức ưu tiên bình thường, mức ưu tiên thấp.
     

    Các file đính kèm:

Đang tải...