Bản đồ của Nhật Bản có nghĩa là gì?


10

Tôi đã gặp thuật ngữ này nhiều lần, trong các tài liệu giáo dục CS khác nhau:

  1. L2 CS162 (UC Berkeley):

    I / O được ánh xạ bộ nhớ

  2. L4 CS162 (UC Berkeley):

    Bộ nhớ ánh xạ tập tin

  3. L24 CS61 (UC Berkeley):

    Bộ nhớ đã ánh xạ bộ nhớ I / O: Bộ điều khiển dữ liệu / thanh ghi dữ liệu được ánh xạ tới không gian địa chỉ CPU

  4. Thậm chí, sau khi googling "ánh xạ", tôi đã nhận được bài viết Map_ (thứ tự cao hơn) , nhưng nó không rõ ràng đối với tôi.
  5. Thậm chí, đã cố gắng để hiểu ý nghĩa trong bối cảnh bitmapbằng cách đọc bài viết Wikipedia :

    Mảng bit là ánh xạ từ một số miền (hầu như luôn luôn là một phạm vi số nguyên) đến các giá trị trong tập {0, 1}

    Tôi không chắc chắn, nhưng trong bối cảnh trên, nó có vẻ với tôi về chuyển đổi dữ liệu.

  6. Sau khi đọc một cuốn sách CS, tôi chỉ tìm thấy đoạn này nhưng nó không giải thích ý nghĩa của "ánh xạ" đối với tôi:

    Bản đồ bộ nhớ Linux (cùng với các dạng Unix khác) khởi tạo nội dung của vùng nhớ ảo bằng cách liên kết nó với một đối tượng trên đĩa, một quá trình được gọi là ánh xạ bộ nhớ.

  7. Tôi cũng nhận được MapReduce như một kết quả tìm kiếm: trong đó bản đồ được giải thích là "một thành ngữ trong tính toán song song trong đó một thao tác đơn giản được áp dụng cho tất cả các yếu tố của chuỗi, có khả năng song song".

Tôi vẫn còn bối rối về thuật ngữ này. Bất cứ ai có thể giải thích "bản đồ" có nghĩa là gì trong bối cảnh tôi đã đề cập?

Câu trả lời:


14

Vì vậy, có hai cách sử dụng riêng biệt của từ "bản đồ", mà tôi sẽ giải nén ở đây.

  1. Đầu tiên là rất chung chung, trong đó bản đồ có nghĩa là "liên kết", đặc biệt là thông qua chức năng. Nếu chúng ta nói " ánh xạ mỗi thành ", thì chúng ta đang nói .xfxx . f ( x ) = 2 x2xx.f(x)=2x

    Việc sử dụng này bao gồm "IO ánh xạ bộ nhớ:" có một chức năng (khái niệm) liên kết từng phần của bộ nhớ với một hành động IO cụ thể. Không ai thực sự viết ra hàm này, nhưng nó thực sự ở đó: đối với mỗi phần của bộ nhớ được ánh xạ, có một số IO được liên kết với nó. Có thể là một phần của đĩa, có thể là thanh ghi phần cứng trên thiết bị ngoại vi, v.v.

    Tương tự, các mảng bit (và các mảng nói chung) rơi vào điều này: mỗi chỉ mục có một phần tử duy nhất được liên kết với nó (tại bất kỳ thời điểm nào), do đó, một mảng thực sự là một mã hóa của hàm miền hữu hạn.

  2. Trong lập trình hàm và các dẫn xuất (như MapReduce), bản đồ đề cập đến việc áp dụng một phép biến đổi trên một cấu trúc.

    Bản gốc mapxuất phát từ Lisp, trong đó nó đề cập đến hàm đã lấy một hàm khác và một danh sách, và trả về kết quả của việc áp dụng hàm cho từng phần tử của danh sách đó.

    Nhưng, hiện tượng này khá chung chung. Trong Haskell, cấu trúc dữ liệu thừa nhận một hoạt động như vậy được gọi là functor và hoạt động này được gọi là fmap (vì lý do lịch sử, để tránh xung đột với bản đồ danh sách).

    Tất cả đều liên quan thông qua khái niệm Functor từ lý thuyết thể loại, đó là sự trừu tượng hóa các cấu trúc thừa nhận hoạt động "bản đồ".


4
(Typo trong Functortên liên kết - quá ít để đề xuất chỉnh sửa.)
Mat

Giải thích rất rõ ràng và xuất sắc. Tuy nhiên tôi không hiểu "chức năng hữu hạn" nghĩa là gì.
Kais

1
@Kais 'hàm hữu hạn' được sử dụng phổ biến nhất cho một hàm mà không có phần tử nào được ánh xạ tới vô cùng. Tôi đoán jmite muốn làm nổi bật rằng các mảng về cơ bản là các hàm ánh xạ tập hợp các chỉ số (hợp lệ) thành các giá trị được chứa.
Michael Hoff

2
Hai cách sử dụng thực sự chỉ là các khía cạnh của cùng một thứ. Các mapchức năng trả về một kết quả trong đó mỗi phần tử được kết hợp với các yếu tố tương ứng của các đầu vào. Sự khác biệt là việc sử dụng đầu tiên mô tả một mối quan hệ hiện có, trong khi việc sử dụng thứ hai đề cập đến một hoạt động tạo ra mối quan hệ.
Barmar

1
Typo: Fucntor
Barmar

8

Sau đây tôi sẽ không chính xác theo một số cách, hy sinh độ chính xác kỹ thuật để cung cấp một sự hiểu biết cơ bản. Rõ ràng là bạn đã đọc một số nguồn kỹ thuật và chính tính kỹ thuật của tài liệu đang khiến bạn khó hiểu được đâu là một khái niệm khá cơ bản và đơn giản.

Nói một cách đơn giản, cách sử dụng phổ biến nhất của bản đồ từ là để mô tả mối quan hệ giữa các thứ trong hai bộ khác nhau. Đây có thể là một hàm toán học hoặc nó có thể là một loại biểu diễn và cơ chế khác. Phổ biến nhất xuất hiện ngay trong tâm trí là bản đồ đường phố.

Bản đồ đường phố là hình ảnh của một địa hình hoặc khu vực cụ thể trong thế giới thực, trong đó các đường và hình vẽ và từ được viết trên bản đồ tương ứng với các đường phố và tòa nhà thực tế. Có một mối quan hệ 1-1 giữa việc thể hiện địa hình được mô tả trong bản đồ đường phố và địa hình thực tế.

Nhìn xa hơn chúng ta cũng có thể thấy rằng một bản đồ đường phố là một đại diện của địa hình thực tế. Địa hình thực tế có các đối tượng và chi tiết và quy trình động mà bản đồ đường phố không mô tả. Bản đồ đường phố là một đại diện trừu tượng của địa hình thực tế và những gì được mô tả trong bản đồ đường phố chỉ là những gì cần thiết để thực hiện mục đích của nó, để cung cấp một trợ giúp điều hướng cho địa hình thực.

Một số ví dụ trong câu hỏi liên quan đến việc tạo một biểu diễn với các cơ chế hỗ trợ để một người có thể sử dụng biểu diễn và cơ chế chuyển các hành động của người đó thành những gì cần thiết cho chức năng cơ bản được ẩn bởi mặt tiền của biểu diễn.

Bộ nhớ I / O được ánh xạ bộ nhớ cho phép lập trình viên nghĩ về một tệp như một vùng bộ nhớ lớn, để sử dụng biểu diễn bộ nhớ của một tệp thực. Lập trình viên không nghĩ về tệp như một tệp mà thay vào đó nghĩ về nó như một vùng bộ nhớ lớn. Chức năng I / O của tập tin ánh xạ bộ nhớ sẽ đảm bảo rằng khi lập trình viên tham chiếu một bộ nhớ cụ thể bù cho dữ liệu tương ứng trong tệp được truy cập.

Thiết bị I / O được ánh xạ bộ nhớ cho phép đơn giản hóa giao diện lập trình thiết bị bằng cách ghi vào địa chỉ bộ nhớ hoặc đọc từ địa chỉ bộ nhớ. Các hành động viết và đọc này được dịch bởi chức năng I / O của thiết bị ánh xạ bộ nhớ cơ bản thành các hành động cụ thể của thiết bị thực tế cần thiết để thực hiện dịch vụ hoặc hành động được yêu cầu.

Bản đồ bit là một tập hợp các bit cung cấp sự tương ứng 1-1 với các giá trị của một số tập hợp khác. Ví dụ, CreateFile()chức năng của API Win32 có một số đối số ánh xạ bit được sử dụng để chỉ ra các loại thuộc tính tệp khác nhau. Các bit cụ thể trong bản đồ bit tương ứng với một hành vi tệp cụ thể, chẳng hạn như "Mở dưới dạng chỉ đọc" hoặc "Luôn tạo tệp trống mới". Các hằng số đặc biệt được cung cấp được kết hợp bằng các phép toán bit nhị phân để xác định các đối số thực tế. Xem hàm CreatFile và mã nguồn ví dụ tại Mở tệp để đọc hoặc viết .


Giải thích tuyệt vời. Tuy nhiên, liên quan đến Memory mapped file I/O, nó có phải là một thay thế cho tập tin chuẩn i / o (fopen, fgetc ..) không? lợi thế về hiệu suất do bản chất của RAM truy cập nhanh hơn so với Đĩa?
Kais

1
@Kais Bộ nhớ I / O tệp được ánh xạ (MMF) là một giải pháp thay thế cho việc sử dụng các lệnh gọi API tệp tiêu chuẩn. Có thể có hoặc không có lợi thế về hiệu suất khi sử dụng MMF. Nó thực sự phụ thuộc vào mức độ cơ học của MMF phù hợp với cách bạn đang sử dụng nội dung tệp cũng như độ lớn của tệp. Các trang I / O MMF của tệp vào bộ nhớ trong các khối lớn. Bạn có thể làm điều gì đó tương tự với API tệp và tạo sự khác biệt đáng kể về hiệu suất. Với I / O API tệp tiêu chuẩn, có xu hướng sao chép rất nhiều giữa các bộ đệm từ không gian kernel sang không gian người dùng thường bị bỏ qua với MMF.
Richard Chambers

1
@Kais không chắc chắn những gì bạn đang hỏi. Sao chép dữ liệu từ một vị trí bộ nhớ sang một vị trí khác cần có thời gian và chu kỳ CPU để giảm việc sao chép dữ liệu giúp cải thiện hiệu suất khi truy cập dữ liệu. Tệp I / O là mục đích chung và bên trong thực hiện bộ nhớ đệm và phân trang nội dung tệp của riêng nó, tuy nhiên, kích thước của bộ đệm bộ nhớ nhỏ hơn so với những gì được sử dụng với I / O của bộ nhớ được gắn vào bộ nhớ. API tệp có xu hướng được định hướng theo hướng ưu tiên I / O của các khối nhỏ hơn là các khối lớn. Truy cập tuần tự có xu hướng được ưa chuộng với một cái nhìn phía trước trong ngăn xếp I / O của tập tin và kernel.
Richard Chambers

1
@Kais vì vậy nếu bạn có thể cung cấp gợi ý cho API I / O của tệp thì bạn có thể cải thiện hiệu suất của ứng dụng đang sử dụng API I / O của tệp khi tệp I / O là nút cổ chai hiệu năng. Và việc sử dụng I / O tệp được ánh xạ bộ nhớ cũng có thể giúp ích đặc biệt là với hầu hết các hoạt động truy cập và hoạt động tuần tự nằm trong một kích thước trang MMF duy nhất. Xem tài liệu và các liên kết tại URL này về I / O cấp thấp với GNU C gnu.org/software/libc/manual/html_node/ , mô tả một số cơ chế cấp thấp hơn của GNU.
Richard Chambers

1
@Kais Tôi đã thấy các cải tiến hiệu suất đáng kể với API tệp Thư viện chuẩn C bằng cách sử dụng setbuf()chức năng để đặt bộ đệm I / O tệp lớn. Bất cứ điều gì bạn có thể làm để giảm truy cập vào thiết bị lưu trữ có xu hướng là một phần thưởng. Đối với các ổ đĩa, việc giảm số lượng tìm kiếm có thể tạo ra sự khác biệt lớn, tuy nhiên, có một số ảnh hưởng mà bạn không thể làm được nhiều như cách tổ chức dữ liệu trên đĩa, tốc độ quay của đĩa, tốc độ di chuyển đầu, bộ đệm dữ liệu, mức độ truy cập bộ nhớ cache giảm đi vào đĩa cơ điện, v.v.
Richard Chambers

1

Ánh xạ đơn giản là quá trình liên kết một đơn vị dữ liệu với một đơn vị dữ liệu khác. Mục đích của ánh xạ là cho phép truy cập đơn giản vào dữ liệu được ánh xạ. Ví dụ, trong các hệ thống tương thích IBM cổ điển, địa chỉ bộ nhớ 0xB8000 được ánh xạ tới bộ nhớ video của thẻ video. Ghi vào bộ nhớ này sẽ cập nhật nội dung của màn hình và đọc từ nó sẽ lấy nội dung của màn hình. Ánh xạ tệp, ánh xạ thiết bị và thậm chí ánh xạ cấu trúc dữ liệu (thường được gọi là Bản đồ, HashMap hoặc Từ điển), là tất cả các cách liên kết một đơn vị dữ liệu với một đơn vị dữ liệu khác.

Ánh xạ có hai lợi ích chính. Đầu tiên là ánh xạ làm giảm sự phức tạp của việc truy cập vào thiết bị hoặc tệp liên quan. Ví dụ: ánh xạ tệp và ánh xạ thiết bị cho phép bạn xử lý các thiết bị đó như thể chúng chỉ là bộ nhớ đơn giản. Thay vì học các cổng I / O khác nhau, các lệnh dữ liệu, v.v., bạn có một giao diện đơn giản, tự nhiên và rõ ràng như ghi vào RAM.

Lợi ích thứ hai là nó có thể làm giảm yêu cầu bộ nhớ. Ví dụ, một Map<Integer, SomeDataType>có thể tạo ra một "mảng thưa thớt", rất hữu ích khi bạn muốn một mảng chủ yếu chứa dữ liệu không hợp lệ / không sử dụng và có thể được truy cập trong thời gian gần tuyến tính. Điều này có thể hiệu quả hơn nhiều so với danh sách được liên kết (trong đó phải mất thời gian O ( n ) để truy cập phần tử thứ n ).

Ánh xạ chủ yếu được sử dụng như một sự trừu tượng hóa để ẩn các thuật toán / hàm phức tạp khỏi nhà phát triển để họ có thể tập trung vào nhiệm vụ triển khai chương trình. Lưu ý rằng ánh xạ có thể không phải lúc nào cũng hiệu quả, về mặt thời gian xử lý, như truy cập trực tiếp vào thiết bị hoặc tệp, nhưng luôn ít phức tạp hơn so với thực hiện (ví dụ: ánh xạ làm giảm số lượng mã chuyên dụng mà nhà phát triển phải viết để truy cập dữ liệu ).


Cảm ơn đã giải thích. Tuy nhiên tôi không hiểu "mảng thưa" nghĩa là gì và làm thế nào hiệu quả hơn.
Kais

@Kais Mảng thưa thớt là một danh sách bao gồm hầu hết các giá trị bằng không. Thay vì lưu trữ tất cả các giá trị trong bộ nhớ, một mảng thưa thớt chỉ lưu trữ các giá trị khác không trong bộ nhớ. Bằng cách này, nó hiệu quả hơn là chỉ phân bổ tất cả bộ nhớ cùng một lúc. Các mảng thưa thớt thường nên trống khoảng 75% để tiết kiệm không gian. Bộ nhớ ảo cũng thường hoạt động theo cách này, trong đó HĐH chỉ lưu trữ các trang bộ nhớ "bẩn", cũng như các hệ thống tệp cho phép bạn chỉ lưu trữ các lĩnh vực có giá trị khác không.
phyrfox
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.