Thông báo

Collapse
No announcement yet.

RTOS và scheduling

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • RTOS và scheduling

    Cho mình hỏi vấn đề về RTOS.
    Như định nghĩa, RT ko phải hễ nhanh thì gọi là RT, mà là "đảm bảo 1 công việc nào đó trong 1 khoảng thoi gian nhất định". Như vậy câu hỏi đặt ra là làm sao để chắc chắn là 1 task đó phải xong trong khoảng thời gian cho trước.

    Ví dụ: có 3 task. Task1: 2s. Task2: 5s. Task3: 7s. Chon tick time là 1s (i.e 1s thi context switching 1 lần). Vậy làm sao để đảm bảo các task hoàn thành trong thoi gian quy định đó? Có phải là mình sẽ thay đổi priority thường xuyên để chạy đua ko? Và dựa vào phân tích nào để quyết định thay đổi priority cho 1 task tại 1 thời điểm?

    Thanks

  • #2
    Thay đổi Priority trong lúc chạy đúng là có thể làm nhưng làm vậy rất khó chịu trong lúc
    phân tích. Và kĩ thuật này gọi là aging (thay đổi thứ tự ưu tiên)
    Các task với cùng priority sẽ không preempt mà thay nhau theo 1 vòng (round robin).
    Để hiệu quả tối ưu trong các task phải theo các rule đã được định trước trong standard của RTOS như:
    -Tránh dùng busy-waiting mà thay vào đó bằng việc đợi trên điều kiện hoặc 1 giải pháp nào đó để việc sử dụng cpu hiệu quả hơn với thời gian quantum time bạn cấu hình sẵn.

    Sông dài, Thuyền lớn, Biển rộng bao la.
    Tháo neo ngôn ngữ, lèo lái con thuyền kiến thức nhân loại.

    Comment


    • #3
      Nguyên văn bởi tuandtvt Xem bài viết
      Cho mình hỏi vấn đề về RTOS.
      Như định nghĩa, RT ko phải hễ nhanh thì gọi là RT, mà là "đảm bảo 1 công việc nào đó trong 1 khoảng thoi gian nhất định". Như vậy câu hỏi đặt ra là làm sao để chắc chắn là 1 task đó phải xong trong khoảng thời gian cho trước.

      Ví dụ: có 3 task. Task1: 2s. Task2: 5s. Task3: 7s. Chon tick time là 1s (i.e 1s thi context switching 1 lần). Vậy làm sao để đảm bảo các task hoàn thành trong thoi gian quy định đó? Có phải là mình sẽ thay đổi priority thường xuyên để chạy đua ko? Và dựa vào phân tích nào để quyết định thay đổi priority cho 1 task tại 1 thời điểm?

      Thanks
      Chào bạn!
      Về vấn đề bạn đang hỏi, trong kĩ thuật hệ điều hành, người ta gọi là lập lịch cho CPU. Để trả lời câu hỏi này, người ta đã đưa ra nhiều chiến lược lập lịch cho CPU. Cái cách mà bạn quoc_thaibk vừa nêu ra (chiến lược RR) là một trong các phương pháp đó.

      Ngoài ra, người ta còn rất nhiều phương pháp khác như chiến lược Priority, SJN, FCFS, SRT,... Đó là với các hệ thống đơn giản, một dòng xếp hàng. Với hệ thống nhiều dòng xếp hàng phức tạp, người ta phải dùng đến chiến lược phân chia lớp tương đương hoặc chiến lược font. Bạn sẽ có rất nhiều lựa chọn cho việc phân phối sao cho thời gian chờ đợi của mỗi CPU logic (hay mỗi task, trong RTOS) là nhỏ nhất và số tiến trình thông qua hệ thống là nhiều nhất. Phương pháp đó là phương pháp mà bạn cho là đảm bảo được các tiêu chí về Real Time trong hệ thống của bạn.

      Như vậy, Real Time là một khái niệm rất chung chung. Nói đi nói lại thì chúng ta không thể nói khác hơn cái khái niệm quen thuộc: Nó là khả năng đáp ứng của hệ thống trong khoảng thời gian quy định. Với người lập trình Real Time, họ phải chủ động xác định được yêu cầu Real Time trong trường hợp này là gì.

      Tùy vào từng trường hợp cụ thể mà chúng ta sẽ quyết định xem dùng phương pháp lập lịch nào là hợp lí. Ví dụ, nếu hệ thống của bạn đủ thông minh hoặc các thời gian thực thi tiến trình được dự đoán trước thì bạn có thể dùng chiến lược SRT. Cái này rất tuyệt.

      * Có một điều mình nhận thấy là khi sử dụng RTOS cho hệ thống nhúng đơn giản, người ta chỉ quan tâm đến chức năng đa nhiệm và đồng bộ dữ liệu giữa các tiến trình chứ chưa quan tâm đến Real Time. Nếu bạn tìm hiểu sâu hơn về Real Time thì bạn phải chui vào hệ thống và nghịch ngợm kernel một thời gian dài, lập trình, chạy thử, test thử,... Nói chung là sẽ hơi mệt đấy!
      Last edited by bvhoang; 10-08-2009, 18:37.

      Comment


      • #4
        Cám ơn ban bvhoang và quoc_thaibk. Bạn cho mình hỏi thêm nhé:

        1. Như vậy có nghĩa là OS sẽ để mình tự quyết định chiến lược lập lịch? Và như thế thì mình sẽ sửa lại kernel ở phần process schedular hay OS có 1 routine prototype nào đó dùng để lập lịch và mình sẽ phải định nghĩa body của routine này?

        2. RTOS không định nghĩa sẵn 1 vài phương pháp lập lịch và cho phép developer config để lựa chọn 1 trong số đó?

        3. vxworks dùng phương pháp lập lịch nào?

        Comment


        • #5
          Nguyên văn bởi tuandtvt Xem bài viết
          Cám ơn ban bvhoang và quoc_thaibk. Bạn cho mình hỏi thêm nhé:

          1. Như vậy có nghĩa là OS sẽ để mình tự quyết định chiến lược lập lịch? Và như thế thì mình sẽ sửa lại kernel ở phần process schedular hay OS có 1 routine prototype nào đó dùng để lập lịch và mình sẽ phải định nghĩa body của routine này?

          2. RTOS không định nghĩa sẵn 1 vài phương pháp lập lịch và cho phép developer config để lựa chọn 1 trong số đó?

          3. vxworks dùng phương pháp lập lịch nào?
          Nếu là RTOS thì phổ biến hiện nay và cũng có thể cho phép cấu hình nhưng
          mô hình mà nhiều người cho rằng tối ưu
          là round-robin(xoay vòng thời gian quantum-time hay slice-time cho trước cố định) kết hợp với với preemptive có priority để làm việc.Việc sửa chữa kernel
          theo 1 mục tiêu của mình theo lời khuyên là không nên vì làm thế khi các ứng dụng khác đã được viết cho OS đó không thể chạy được do họ thiết kế với kernel đã được chuẩn (standard) hóa. Việc này có thể thấy như là sự so sánh giữa community version với comercial version của embededlinux.

          Sông dài, Thuyền lớn, Biển rộng bao la.
          Tháo neo ngôn ngữ, lèo lái con thuyền kiến thức nhân loại.

          Comment


          • #6
            Vâng, bạn quoc_thaibk khuyên đúng đấy bạn ạ. Nếu bạn có ý định sản xuất thiết bị y tế hoặc làm tàu vũ trụ như Siemens hay Daimler () thì đúng là phải hiểu sâu các chiến lược lập lịch để có một hệ thống RT thực sự. Còn nếu không thì chỉ cần khai thác khả năng đa nhiệm và đồng bộ dữ liệu giữa các tiến trình là tốt lắm rồi! Have Fun!

            Comment


            • #7
              Đồng ý với quan điểm của bvhoang. Dùng được nó cũng đã ko dễ rồi

              Comment


              • #8
                1 task trong freeRTOS chiếm khoảng bao nhiêu sram vậy mấy bác.
                em định dùng với 2k sram thì có thể làm được mấy task trong freeRTOS
                Tư vấn thiết kế hệ thống điện-điện tử theo yêu cầu.
                Tel: 0903 702 417. Email: web:

                Comment


                • #9
                  Cái này thì tùy thuộc vào định nghĩa TCB (Task control block) của OS và tùy vào bạn viết cái gì trong task thôi.

                  Comment


                  • #10
                    mà bác ơi, trong FREERTOS ,họ dùng timer nào để tạo thời gian dan đoạn vậy, mình có thể đổi timer khác cho phù hợp vói mạch của mình không
                    Tư vấn thiết kế hệ thống điện-điện tử theo yêu cầu.
                    Tel: 0903 702 417. Email: web:

                    Comment


                    • #11
                      Hi,

                      Mình vừa cho ra đời một bản RTOS có hỗ trợ ATMEGA của ATMEL và STM8 của STmicroelectronics. Các có thể bạn vào luồng sau để tham khảo và tải về dùng http://www.dientuvietnam.net/forums/...Bui-Viet-Hoang

                      Comment

                      Về tác giả

                      Collapse

                      tuandtvt Tìm hiểu thêm về tuandtvt

                      Bài viết mới nhất

                      Collapse

                      Đang tải...
                      X