
私はアーチLinuxを使用しています。では、/usr/include/sys/mman.h
次のように言います。
/* Definitions for BSD-style memory management.
Copyright (C) 1994-2019 Free Software Foundation, Inc.
.
.
.
どういう意味ですか?他のスタイルと比較して「BSDスタイル」メモリ管理の特別な点は何ですか?
答え1
違いはC標準メモリ管理にあると思います(malloc
、free
等。、これは以下で減少します。Unix v6alloc
など)とメモリマップされたI/O、BSDを介してUnixファミリに入りました(SunOSで最初に実装されましたが、明らかに4.2BSDに文書化されましたが、そこでは実装されていません。)マハから)。後者に関連する関数は、次のように宣言されます。sys/mman.h
。
答え2
歴史的に、BSDはmmap()などを介してメモリマッピングされたI / Oを提供してきましたが、System Vは新しいIPCパッケージ(shmget()など)の一部として共有メモリセグメントを導入しました。
機能的な違いは、メモリマップされたI / Oはファイルベースですが、共有セグメントはそうではないということです。共有セグメントは、生成プロセスが終了した後も割り当てられたままであるため、IPCパケットに含まれます。マルチスレッドが出現する前に複数のCPUを使用する必要がある場合、一般的なプログラミングモデルは同じ共有セグメントにマッピングされた複数のプロセスを開始することでした。
技術的には、POSIXは共有セグメントと同様に匿名マッピングをサポートするためにmmapを必要としません。ほとんどすべての現在の実装がこれをサポートしているため、議論の余地があります。 「BSDスタイル」が席をとり、事実上の標準となりました。