Trang 3 trên tổng số 3 Đầu tiênĐầu tiên 123
Từ 21 tới 23 trên tổng số 23 kết quả

Đề tài: Lập trình với ngắt thời gian

  1. #21
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất đông người
    Bài viết
    534

    Mặc định Lập trình với ngắt thời gian

    Trích dẫn Nguyên bản được gửi bởi emyeuvn Xem bài viết
    ...
    Nhân tiện nói về mô hình truyền thông, anh có 1 cái điều khiển từ xa và 1 cái oto chạy bon bon ngoài đường.Anh điều khiển nó. Khoảng cách là 2 m thôi. nó có vẻ như các khái niệm về độ trễ phát huy được tác dụng của nó. Thế nhưng nếu như cái ô tô đó chẳng bít bây giờ nó ở đâu, cái thông tin nó gửi về cũng chẳng bít là có đúng là trạng thái hiện tại của nó hay không.
    Tất cả những gì anh có thể làm là ra những chỉ thị hướng dẫn cho nó dưới dạng 1 lời khuyên. Nghe theo cái nào là quyết định của nó. Bởi chỉ có nó mới có thể biết nó cần làm gì vào lúc đó. Nó là 1 hệ thống lắng nghe tự động và có phản hồi. Nó có tư duy của nó, nó tự biết nó phải làm gì. Các khái niệm về độ trễ hay băng thông là hoàn toàn không xác định, anh phải giao tiếp với nó qua 1 mô hình gọi là bảng ngắt, với 1` danh sách có thứ tự ưu tiên các công việc nó có thể thử vào lúc đó, với hi vọng là nó có ích.
    Nghe có vẻ kì cục, Ngắt sinh ra để đồng bộ các quá trình không đồng bộ, trong 1 hệ thống đa tiến trình không tiên định. Khi a cố bẻ lái 1 tiến trình anh nên giao tiếp với nó qua các ngắt!

    Và còn 1 vấn đề là: Nhanh là chưa đủ, nó có thể tự cải tiến đựoc tốc độ của nó dựa trên kinh nghiệm nó tự thu được. Bây giờ là nhanh, Sau này là chậm. Nên nó phải có 1 luôn tự đánh giá về mặt thời gian như là 1 tập kinh nghiệm của nó.
    Có vẻ như bạn muốn viết 1 bộ điều tác (task scheduller) hay một nền tảng cung cấp dịch vụ giao tiếp liên trình (interprocess communication). Và hơn thế nữa, cơ chế nền tảng của nó mà bạn muốn toàn quyền kiểm soát và thao túng, bạn muốn phải là bảng ngắt của bộ vi xử lý cơ.

    Cả 3 thứ đó đều là đối tượng trực tiếp của hệ điều hành, cụ thể hơn, của nhân (kernel) hệ điều hành. (Bộ điều tác có thể là 1 driver nằm bên ngoài kernel. Nhưng chỉ là nguyên tắc, lý thuyết. Mình không biết hệ điều hành nào làm như thế trong thực tế.)

    Trích dẫn Nguyên bản được gửi bởi emyeuvn Xem bài viết
    Chúng ta có lẽ đã thống nhất ở 1 số quan điểm chung sau:
    1.Windows là HĐH có độ an toàn cao hơn nhiều so với DOS. Thực vậy, nếu viết chương trình chạy trên DOS, bạn có thể dùng ngắt bất kỳ (thí dụ 16h), DOS không giám sát và kiểm soát gì cả. Tuy nhiên Windows luôn giám sát và kiểm soát hành vi của ứng dụng, nếu thấy ứng dụng thực hiện 1 lệnh dễ gây nguy hiểm cho hệ thống (thí dụ lệnh ngắt 16h), Windows sẽ chặn lại và báo lỗi chứ không thực hiện. Tóm lại, nếu bạn lập trình trên Windows, code nằm trong ứng dụng của bạn không được phép thực hiện ngắt (bất kỳ ngắt nào). Việc dùng ngắt chỉ được phép trong các file thư viện *.dll hay các file driver và tuân theo yêu cầu nghiêm ngặt của Windows.
    ==>Windows hỗ trợ một số chức năng ngắt qua các thư viện .dll tiêu chuẩn ? Em sẽ theo chỉ dẫn của anh, tìm hiểu về HỌOK. Driver là quá xa vời.

    2.Mún sử dụng ngắt hệ thống, ta phải chọn (hoặc tự xây dựng) nên 1 hệ thống cung cấp các chức năng xử lý ngắt hay nói cách khác nó lại là 1 vấn đề liên quan đến driver và hệ điều hành.
    ==>Stop here.

    Tổng kết là kỹ thuật HOOK có thể giúp xử lý vấn đề này hoặc không có 1 cách nào làm việc với ngắt thời gian trên HDH Windows.
    Anh có thống nhất với quan điểm của em khồng?
    Vấn đề này mình đã viết rồi. Tóm tắt lại nhé.

    Không biết bạn dự định làm gì. Mình chỉ có thể phỏng đoán.

    a) Có thể bạn chỉ muốn viết một ứng dụng thời gian thực cứng trên một hệ điều hành sẵn có chạy trên một máy tính nhúng trong một khí tài chuyên dùng nào đó (ví dụ, 1 trạm điện hay 1 thang máy). Hoặc có thể bạn muốn viết 1 kernel mới, và dĩ nhiên viết cả 1 hệ điều hành mới. Nhưng cả 2 trường hợp này, không có chỗ cho Windows.

    b) Hoặc có thể bạn muốn Windows, và chỉ Windows mà thôi. Có thể bạn chỉ muốn viết trong user land, khi ấy mã của bạn có thể là user driver, phân hệ, thư viện nền tảng, hay ứng dụng. Ở cả 4 mức này bạn đều có khả năng nhận tín hiệu đồng hồ, nhưng không phải là tín hiệu ngắt của phần cứng nữa, mà là những tín hiệu (hay thông điệp, hay lời gọi sau, v.v.) mà mức dưới (hệ điều hành) sinh ra và truyền đến cho bạn khi phù hợp. Cũng có thể bạn muốn viết trong kernel land, khi ấy mã của bạn (kernel driver hay gì đó) có quyền như kernel, nghĩa là toàn quyền. Và, cũng giống như MS-DOS mà bạn thường hay nhắc đến, ngay cả khi ấy bạn sẽ không muốn trực tiếp thao tác bảng vector ngắt và vô số cấu trúc dữ liệu khác của kernel, bạn sẽ muốn làm việc này nhờ dịch vụ của kernel. Nhưng bất kể bạn làm gì trong cả 2 trường hợp này, không có chỗ cho nhúng thời gian thực.
    Đã được chỉnh sửa lần cuối bởi Ada : 25-10-2018 lúc 11:40 AM.
    -...- -.- .. .-.. .-.. - .... . -... . .- ... - .-.-.

  2. #22
    Ngày gia nhập
    08 2018
    Nơi ở
    Online
    Bài viết
    3

    No. No. Ý tưởng của em rất là CLean. Rõ ràng như những gì em muốn. làm việc với windows, "ngắt thời gian"?,
    và với tài nguyên em hiện có: 1 cái máy tính cài windows;chưa biết gì về windows(Kener?Nhân?) Vứt cái Vi Xử lý đy(em không có cái nào trong tay)
    giữ lại Nguyên tắc:Kiểm soát về thời gian; chi phí tính toán cho vụ này là chấp nhận được=1 cách nào đó như đi vay mượn của Hệ ĐIêu HÀnh WINDOWS Như 1 cái đồng hồ thôi.
    Nếu em có thể gửi tín hiệu từ cái đồng hồ cho chương trình của em vấn đề được giải quyết.Và nó gửi bằng đường hàng không qua hệ thống ngắt thì càng tốt.Không biên lai không hóa đơn.
    Nếu anh phải ăn trực nằm chờ để chờ lệnh từ nó thì chi phí là quá lớn.Anh nộp đơn cho nó xin cấp 1 kết quả sau 5s 10s 15s, Nếu mọi việc ổn thì 5 10 15s vv nó sẽ gửi quà đến tay anh qua ông già Noel cũng được. Miễn là đủ nhanh.
    Dịch vụ Ngắt là 1 dịch vụ xa xỉ như những gì anh nói, WINDOWS không chấp nhận nó mà chỉ cung cấp những dịch vụ riềng của nó. Em chấp nhận và đang tìm hiểu về
    Những gì WINDOWS có thể làm được và em đang tìm hiểu về hook và dịch vụ gửi thư(thông điệp) trong WINDOWS.
    Chúc anh vui vẻ. Em sẽ tạm dừng và tự tìm hiểu thêm.

  3. #23
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất đông người
    Bài viết
    534

    Mình tóm lại ý mình xuyên suốt từ bài #2 đến giờ. Về thời gian nói riêng và đa nhiệm nói chung. Để lấy giờ, có 2 nghi thức: đến giờ rồimấy giờ rồi. Tổng quát hơn, để lấy dữ liệu, có 2 nghi thức bẩm ngài có thưtôi có thư không. Nghi thức đến giờ rồi hay bẩm ngài có thư có thể giúp chương trình phản ứng nhanh. Nhưng muốn chương trình chạy nhanh thì nghi thức mấy giờ rồi hay tôi có thư không mới là giải pháp.

    Lý do, nói một cách nôm na, là công việc càng trôi chảy càng nhanh, càng ngắt quãng càng chậm.

    Đây là nguyên lý, đúng tổng quát ở mọi mức lập trình từ ứng dụng đến hệ thống. Về lập trình hệ thống, đơn cử ví dụ, các thiết bị mạng như firewall, router, switch khi áp lực băng thông đến ngưỡng nào đó đều chuyển từ nhận ngắt ngoại vi (bẩm ngài có thư) sang truy vấn ngoại vi (tôi có thư không). Môi trường càng phức tạp (bộ vi xử lý x86, chế độ bảo vệ, hệ điều hành Windows) nguyên lý này càng đúng. Sự phức tạp có lợi ích của nó, nhưng cũng có giá của nó.

    Chúc bạn thành công.
    Đã được chỉnh sửa lần cuối bởi Ada : 29-10-2018 lúc 03:44 PM.
    -...- -.- .. .-.. .-.. - .... . -... . .- ... - .-.-.

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn