Thông báo

Collapse
No announcement yet.

Cấp phát vùng nhớ liên tục?

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

  • Cấp phát vùng nhớ liên tục?

    Chào các bro!
    Trong C chuẩn có hàm kmalloc() dùng để cấp phát vùng nhớ liên tục, thế nhưng nó chỉ cấp phát maximum là 128k thôi.
    Không biết trong C chuẩn có hàm nào dùng để cấp phát vùng nhớ liên tục lớn hơn 128k không vậy?
    Bro nào biết giúp mình với nhé!

  • #2
    Hàm kmalloc() có mỗi ưu điểm là cấp phát vùng nhớ vật lý liên tục (dùng làm DMA chẳng hạn). Nếu bạn chỉ cần một vùng nhớ bình thường liên tục (vùng nhớ ảo, quản lý bởi nhân Linux; 99,9% khả năng phần mềm của bạn có nhu cầu thế này) thì dùng vmalloc() thoải mái hơn nhiều: dung lượng lớn, linh hoạt. Hàm kmalloc() chỉ cần dùng cho một số rất ít nhu cầu đặc biệt.
    Phần mềm tự do hoặc không dùng máy tính nữa !.

    Comment


    • #3
      Bạn nói chính xác rồi. Mình cần một vùng nhớ liên tục lớn hơn 128k cho mục đích DMA. với hàm vmalloc() thì chỉ cấp phát vùng nhớ bình thường thôi. Do đó tốc độ DMA của nó chậm hơn rất nhiều so với vùng nhớ dùng cho mục đích DMA. Bạn có ý kiến nào khác không vậy?

      Comment


      • #4
        Đây là giới hạn của nhân Linux rồi. Thêm nữa, chỉ có hàm kmalloc() mới có cờ __GFP_DMA đảm bảo chính xác rằng vùng nhớ đó dùng làm DMA được. Các hàm khác không thể chắc chắn được điều này. Có vài kỹ thuật để cấp phát vùng nhớ vật lý liên tục dung lượng lớn, nhưng không đảm bảo vùng đó dùng làm DMA được.

        Bạn cần thích nghi với giới hạn của hàm kmalloc() thôi.
        Phần mềm tự do hoặc không dùng máy tính nữa !.

        Comment


        • #5
          Nguyên văn bởi bqviet Xem bài viết
          Đây là giới hạn của nhân Linux rồi. Thêm nữa, chỉ có hàm kmalloc() mới có cờ __GFP_DMA đảm bảo chính xác rằng vùng nhớ đó dùng làm DMA được. Các hàm khác không thể chắc chắn được điều này. Có vài kỹ thuật để cấp phát vùng nhớ vật lý liên tục dung lượng lớn, nhưng không đảm bảo vùng đó dùng làm DMA được.

          Bạn cần thích nghi với giới hạn của hàm kmalloc() thôi.
          Tại vì mình đã thử cấp phát 4 vùng nhớ DMA (Không liên tục), mỗi vùng 128kB, chương trình chạy OK, như vậy thì ta cũng có thể có cách nào đó để cấp phát 256kB (hay lớn hơn một tí nữa) liên tục chứ bạn (theo mình nghĩ là như vậy) .
          Ngoài hàm kmalloc() có cờ __GFP_DMA thì cũng có một số hàm khác có cờ này đó bạn: kcalloc(), get_dma_pages().
          Last edited by dinhtandl; 04-06-2010, 08:36.

          Comment

          Về tác giả

          Collapse

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

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

          Collapse

          • Andrea14
            Vấn đề về tốc độ quay
            bởi Andrea14
            Chào mọi người,

            Tôi muốn mô phỏng sự thay đổi các mùa bằng cách từ từ nghiêng một quả địa cầu 16 inch bằng một động cơ bước nhỏ. Một động cơ bước khác sẽ quay quả địa cầu theo thời gian thực. Hệ thống truyền động...
            Hôm qua, 12:42
          • bqviet
            Trả lời cho Đấu tắt điện cho máy tính bảng
            bởi bqviet
            Bqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
            06-12-2025, 17:17
          • nguyendinhvan
            Trả lời cho Xin hỏi về mạch thu FM/AM trong catsette
            bởi nguyendinhvan
            Theo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
            05-12-2025, 19:59
          • afrendly
            Trả lời cho Đấu tắt điện cho máy tính bảng
            bởi afrendly
            Có vẻ ngoài hiểu biết của mình rồi. Cuối cùng mình quyết định tìm mua 2 pin trên Shopee, giá 200K thay vào. Tuy nhận pin được 1%, sạc mãi không vào nhưng cũng mở được máy lên. Vậy cũng tạm. Cảm ơn bạn đã hỗ trợ nhé....
            04-12-2025, 01:27
          Đang tải...
          X