Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

[インデックス 13579] ファイルの概要

このコミットは、Go言語のsyscallパッケージにおいて、NetBSDオペレーティングシステム向けの新しいシステムコール番号を追加するものです。具体的には、src/pkg/syscall/zsysnum_netbsd_386.gosrc/pkg/syscall/zsysnum_netbsd_amd64.goの2つのファイルが更新され、NetBSDの最新版(NetBSD-current)で導入された__QUOTACTLPOSIX_SPAWNRECVMMSGSENDMMSGの4つのシステムコールがGoから利用できるようになります。これにより、GoプログラムがNetBSD環境でこれらの低レベルなOS機能と連携できるようになり、より高度なシステムプログラミングが可能になります。

コミット

commit 8efb70f92e258d458c183232b985c83b477ed3de
Author: Benny Siegert <bsiegert@gmail.com>
Date:   Sun Aug 5 17:02:41 2012 -0400

    syscall: add some new syscall numbers from NetBSD-current
    
    R=golang-dev
    CC=golang-dev
    https://golang.org/cl/6454100

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/8efb70f92e258d458c183232b985c83b477ed3de

元コミット内容

syscall: add some new syscall numbers from NetBSD-current

R=golang-dev
CC=golang-dev
https://golang.org/cl/6454100

変更の背景

Go言語は、クロスプラットフォーム対応を重視しており、様々なオペレーティングシステム上で動作するように設計されています。Goプログラムが特定のOSの低レベルな機能を利用するためには、そのOSが提供するシステムコールをGoのsyscallパッケージを通じて呼び出す必要があります。

このコミットが行われた2012年当時、NetBSDは活発に開発が進められており、新しいシステムコールが継続的に追加されていました。Goのsyscallパッケージは、各OSのシステムコール定義とGoのインターフェースをマッピングする役割を担っています。NetBSD-current(開発版)で新しいシステムコールが導入された際、Goプログラムがこれらの新機能を活用できるようにするためには、syscallパッケージにそれらのシステムコール番号と関連する定数を追加する必要がありました。

この変更の背景には、Go言語がNetBSD環境においても最新のOS機能に追従し、開発者がGoでより堅牢で高性能なアプリケーションを構築できるようにするという目的があります。特に、ファイルシステムのクォータ管理、プロセスの生成、効率的なネットワークI/Oといった機能は、多くのシステムプログラミングにおいて不可欠であり、これらをGoから直接利用できることは、GoのNetBSDサポートを強化する上で重要でした。

前提知識の解説

システムコール (System Call)

システムコールは、オペレーティングシステム(OS)が提供するサービスを、ユーザー空間で動作するプログラムが利用するためのインターフェースです。プログラムがファイルI/O、メモリ管理、プロセス制御、ネットワーク通信などのOSの機能にアクセスしたい場合、直接ハードウェアを操作するのではなく、システムコールを介してOSに処理を依頼します。これにより、OSはシステムリソースを安全かつ効率的に管理し、複数のプログラムが協調して動作することを可能にします。

Go言語のsyscallパッケージは、GoプログラムからOSのシステムコールを直接呼び出すための低レベルなインターフェースを提供します。これにより、Goの標準ライブラリでは提供されていない、OS固有の機能や、より細かな制御が必要な場合に、直接システムコールを利用することができます。

NetBSD

NetBSDは、BSD系UNIXライクなオープンソースのオペレーティングシステムです。その最大の特徴は「Of course it runs NetBSD.」(もちろんNetBSDで動く)というスローガンが示すように、非常に多くのハードウェアアーキテクチャに対応している点です。組み込みシステムから大規模サーバーまで、幅広い環境で利用されています。NetBSDは、堅牢性、セキュリティ、移植性に優れており、活発な開発コミュニティによって継続的に改善されています。

NetBSD-current

NetBSD-currentは、NetBSDの最新の開発ブランチを指します。これは、安定版リリース(NetBSD-RELEASE)とは異なり、最新の機能追加、バグ修正、パフォーマンス改善などが日々取り込まれています。開発者はNetBSD-currentを使用して、次期安定版に導入される予定の機能をテストしたり、最新のOS機能を利用した開発を行ったりします。このコミットは、NetBSD-currentで導入された新しいシステムコールをGoから利用可能にするためのものです。

クォータ管理 (__QUOTACTL)

ファイルシステムのクォータ管理は、ディスクスペースやinodeの使用量をユーザーやグループごとに制限する機能です。これにより、特定のユーザーやプログラムがディスクスペースを過剰に消費するのを防ぎ、ファイルシステムの安定性と公平性を保つことができます。quotactl(または__quotactl)システムコールは、このクォータシステムを制御するためのインターフェースを提供します。例えば、クォータの有効化/無効化、制限値の設定、使用状況の取得などが行えます。

プロセス生成 (POSIX_SPAWN)

posix_spawnは、新しいプロセスを生成するためのシステムコールです。従来のfork()exec()の組み合わせに代わるもので、特にリソースが限られた環境や、セキュリティ要件が高い環境で効率的かつ安全にプロセスを生成するために設計されました。posix_spawnは、新しいプロセスの属性(ファイルディスクリプタ、シグナルマスク、スケジューリングポリシーなど)を細かく制御しながら、単一のシステムコールでプロセス生成とプログラム実行を同時に行うことができます。これにより、fork()が持つアドレス空間のコピーオーバーヘッドを回避し、パフォーマンスを向上させることが可能です。

効率的なネットワークI/O (RECVMMSG, SENDMMSG)

recvmmsgsendmmsgは、複数のメッセージ(データグラム)を一度のシステムコールで送受信するためのシステムコールです。従来のrecvmsgsendmsgが一度に1つのメッセージしか処理できないのに対し、これらのシステムコールは、複数のメッセージをバッチ処理することで、システムコール呼び出しのオーバーヘッドを削減し、ネットワークI/Oの効率を大幅に向上させます。これは、特に高スループットが要求されるネットワークアプリケーション(例: DNSサーバー、リアルタイム通信システム)において非常に有効です。

  • recvmmsg: 複数のデータグラムを一度に受信します。
  • sendmmsg: 複数のデータグラムを一度に送信します。

技術的詳細

このコミットは、Go言語のsyscallパッケージがNetBSDの特定のシステムコールを認識し、呼び出せるようにするための定数定義を追加しています。Goのsyscallパッケージは、OSごとに異なるシステムコール番号や構造体を抽象化し、Goプログラムから統一的なインターフェースでOS機能にアクセスできるようにします。

具体的には、src/pkg/syscall/zsysnum_netbsd_386.gosrc/pkg/syscall/zsysnum_netbsd_amd64.goというファイルが変更されています。これらのファイルは、それぞれ32ビット(i386)と64ビット(amd64)アーキテクチャのNetBSDシステムにおけるシステムコール番号の定義を含んでいます。Goのビルドシステムは、ターゲットアーキテクチャとOSに基づいて適切なzsysnum_*.goファイルをコンパイル時に選択します。

追加されたシステムコールは以下の通りです。

  • SYS___QUOTACTL = 473: ファイルシステムクォータを制御するためのシステムコール。Goプログラムからディスク使用量の制限や管理が可能になります。
  • SYS_POSIX_SPAWN = 474: 新しいプロセスを効率的に生成するためのシステムコール。fork/execの代替として、より高速で制御性の高いプロセス起動を提供します。
  • SYS_RECVMMSG = 475: 複数のUDPデータグラムを一度に受信するためのシステムコール。ネットワークアプリケーションの受信スループットを向上させます。
  • SYS_SENDMMSG = 476: 複数のUDPデータグラムを一度に送信するためのシステムコール。ネットワークアプリケーションの送信スループットを向上させます。

これらの定数が追加されることで、Goのsyscallパッケージは、これらのシステムコールに対応するGo関数を生成できるようになります。Go開発者は、これらの関数を呼び出すことで、NetBSDの最新の低レベル機能をGoプログラムから直接利用できるようになります。これは、Goで書かれたシステムツール、ネットワークサーバー、あるいはOSと密接に連携するアプリケーションの開発において、より高度な制御とパフォーマンス最適化を可能にします。

コアとなるコードの変更箇所

変更は、src/pkg/syscall/zsysnum_netbsd_386.gosrc/pkg/syscall/zsysnum_netbsd_amd64.goの2つのファイルにわたります。両ファイルで、既存のシステムコール定数のリストの末尾に、新しい4つのシステムコール定数が追加されています。

--- a/src/pkg/syscall/zsysnum_netbsd_386.go
+++ b/src/pkg/syscall/zsysnum_netbsd_386.go
@@ -271,4 +271,8 @@ const (
 	SYS_SYMLINKAT            = 470 // { int|sys||symlinkat(const char *path1, int fd, const char *path2); }
 	SYS_UNLINKAT             = 471 // { int|sys||unlinkat(int fd, const char *path, int flag); }
 	SYS_FUTIMENS             = 472 // { int|sys||futimens(int fd, const struct timespec *tptr); }
+\tSYS___QUOTACTL           = 473 // { int|sys||__quotactl(const char *path, struct quotactl_args *args); }
+\tSYS_POSIX_SPAWN          = 474 // { int|sys||posix_spawn(pid_t *pid, const char *path, const struct posix_spawn_file_actions *file_actions, const struct posix_spawnattr *attrp, char *const *argv, char *const *envp); }
+\tSYS_RECVMMSG             = 475 // { int|sys||recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); }
+\tSYS_SENDMMSG             = 476 // { int|sys||sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags); }
 )

src/pkg/syscall/zsysnum_netbsd_amd64.goも同様の変更が加えられています。

コアとなるコードの解説

上記のコードは、Go言語のsyscallパッケージ内で使用されるシステムコール番号の定数を定義しています。Goのsyscallパッケージは、各オペレーティングシステムとアーキテクチャの組み合わせに対して、対応するシステムコール番号をGoの定数としてマッピングしています。これにより、GoプログラムはOS固有のシステムコールを、Goの関数呼び出しとして透過的に利用できるようになります。

各行は、SYS_プレフィックスを持つ定数名と、それに割り当てられた整数値(システムコール番号)、そしてコメントとしてC言語の関数プロトタイプを示しています。このC言語のプロトタイプは、そのシステムコールがどのような引数を取り、どのような値を返すかを示しており、Goのsyscallパッケージが対応するGo関数を生成する際の参考になります。

  • const (: Go言語で複数の定数をまとめて宣言するブロックの開始。
  • SYS_SYMLINKAT = 470: 既存のシステムコール定数。シンボリックリンクを作成するsymlinkatシステムコール。
  • SYS_UNLINKAT = 471: 既存のシステムコール定数。ファイルを削除するunlinkatシステムコール。
  • SYS_FUTIMENS = 472: 既存のシステムコール定数。ファイルのタイムスタンプを変更するfutimensシステムコール。
  • SYS___QUOTACTL = 473: 新しく追加されたシステムコール定数。ファイルシステムクォータを制御する__quotactlシステムコール。
  • SYS_POSIX_SPAWN = 474: 新しく追加されたシステムコール定数。新しいプロセスを生成するposix_spawnシステムコール。
  • SYS_RECVMMSG = 475: 新しく追加されたシステムコール定数。複数のメッセージを一度に受信するrecvmmsgシステムコール。
  • SYS_SENDMMSG = 476: 新しく追加されたシステムコール定数。複数のメッセージを一度に送信するsendmmsgシステムコール。
  • ): 定数宣言ブロックの終了。

これらの定数が追加されることで、Goのコンパイラは、Goプログラム内でsyscall.SYS___QUOTACTLなどの定数が参照された際に、対応するNetBSDのシステムコール番号に解決できるようになります。これにより、Goのsyscallパッケージが提供する低レベルな関数(例: syscall.Syscall, syscall.RawSyscall)を通じて、これらの新しいシステムコールを呼び出すことが可能になります。

関連リンク

参考にした情報源リンク

  • Go言語のソースコード (GitHub): https://github.com/golang/go
  • NetBSDの公式ドキュメントやメーリングリストアーカイブ (具体的なURLは検索結果による)
  • 各種OSのシステムコールに関する技術文書やmanページ
  • Stack Overflowや技術ブログなど、関連する技術情報が議論されているオンラインリソース
  • Go CL 6454100: https://golang.org/cl/6454100 (コミットメッセージに記載されているGoのコードレビューシステムへのリンク)
  • NetBSDのソースコード (特にsys/syscall.hや関連するファイル): https://cvsweb.netbsd.org/bsdweb.cgi/src/sys/ (NetBSDのシステムコール定義の確認に利用)
  • Wikipedia: システムコール, NetBSD, POSIX_SPAWN, recvmmsg, sendmmsg```markdown

[インデックス 13579] ファイルの概要

このコミットは、Go言語のsyscallパッケージにおいて、NetBSDオペレーティングシステム向けの新しいシステムコール番号を追加するものです。具体的には、src/pkg/syscall/zsysnum_netbsd_386.gosrc/pkg/syscall/zsysnum_netbsd_amd64.goの2つのファイルが更新され、NetBSDの最新版(NetBSD-current)で導入された__QUOTACTLPOSIX_SPAWNRECVMMSGSENDMMSGの4つのシステムコールがGoから利用できるようになります。これにより、GoプログラムがNetBSD環境でこれらの低レベルなOS機能と連携できるようになり、より高度なシステムプログラミングが可能になります。

コミット

commit 8efb70f92e258d458c183232b985c83b477ed3de
Author: Benny Siegert <bsiegert@gmail.com>
Date:   Sun Aug 5 17:02:41 2012 -0400

    syscall: add some new syscall numbers from NetBSD-current
    
    R=golang-dev
    CC=golang-dev
    https://golang.org/cl/6454100

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/8efb70f92e258d458c183232b985c83b477ed3de

元コミット内容

syscall: add some new syscall numbers from NetBSD-current

R=golang-dev
CC=golang-dev
https://golang.org/cl/6454100

変更の背景

Go言語は、クロスプラットフォーム対応を重視しており、様々なオペレーティングシステム上で動作するように設計されています。Goプログラムが特定のOSの低レベルな機能を利用するためには、そのOSが提供するシステムコールをGoのsyscallパッケージを通じて呼び出す必要があります。

このコミットが行われた2012年当時、NetBSDは活発に開発が進められており、新しいシステムコールが継続的に追加されていました。Goのsyscallパッケージは、各OSのシステムコール定義とGoのインターフェースをマッピングする役割を担っています。NetBSD-current(開発版)で新しいシステムコールが導入された際、Goプログラムがこれらの新機能を活用できるようにするためには、syscallパッケージにそれらのシステムコール番号と関連する定数を追加する必要がありました。

この変更の背景には、Go言語がNetBSD環境においても最新のOS機能に追従し、開発者がGoでより堅牢で高性能なアプリケーションを構築できるようにするという目的があります。特に、ファイルシステムのクォータ管理、プロセスの生成、効率的なネットワークI/Oといった機能は、多くのシステムプログラミングにおいて不可欠であり、これらをGoから直接利用できることは、GoのNetBSDサポートを強化する上で重要でした。

前提知識の解説

システムコール (System Call)

システムコールは、オペレーティングシステム(OS)が提供するサービスを、ユーザー空間で動作するプログラムが利用するためのインターフェースです。プログラムがファイルI/O、メモリ管理、プロセス制御、ネットワーク通信などのOSの機能にアクセスしたい場合、直接ハードウェアを操作するのではなく、システムコールを介してOSに処理を依頼します。これにより、OSはシステムリソースを安全かつ効率的に管理し、複数のプログラムが協調して動作することを可能にします。

Go言語のsyscallパッケージは、GoプログラムからOSのシステムコールを直接呼び出すための低レベルなインターフェースを提供します。これにより、Goの標準ライブラリでは提供されていない、OS固有の機能や、より細かな制御が必要な場合に、直接システムコールを利用することができます。

NetBSD

NetBSDは、BSD系UNIXライクなオープンソースのオペレーティングシステムです。その最大の特徴は「Of course it runs NetBSD.」(もちろんNetBSDで動く)というスローガンが示すように、非常に多くのハードウェアアーキテクチャに対応している点です。組み込みシステムから大規模サーバーまで、幅広い環境で利用されています。NetBSDは、堅牢性、セキュリティ、移植性に優れており、活発な開発コミュニティによって継続的に改善されています。

NetBSD-current

NetBSD-currentは、NetBSDの最新の開発ブランチを指します。これは、安定版リリース(NetBSD-RELEASE)とは異なり、最新の機能追加、バグ修正、パフォーマンス改善などが日々取り込まれています。開発者はNetBSD-currentを使用して、次期安定版に導入される予定の機能をテストしたり、最新のOS機能を利用した開発を行ったりします。このコミットは、NetBSD-currentで導入された新しいシステムコールをGoから利用可能にするためのものです。

クォータ管理 (__QUOTACTL)

ファイルシステムのクォータ管理は、ディスクスペースやinodeの使用量をユーザーやグループごとに制限する機能です。これにより、特定のユーザーやプログラムがディスクスペースを過剰に消費するのを防ぎ、ファイルシステムの安定性と公平性を保つことができます。quotactl(または__quotactl)システムコールは、このクォータシステムを制御するためのインターフェースを提供します。例えば、クォータの有効化/無効化、制限値の設定、使用状況の取得などが行えます。

プロセス生成 (POSIX_SPAWN)

posix_spawnは、新しいプロセスを生成するためのシステムコールです。従来のfork()exec()の組み合わせに代わるもので、特にリソースが限られた環境や、セキュリティ要件が高い環境で効率的かつ安全にプロセスを生成するために設計されました。posix_spawnは、新しいプロセスの属性(ファイルディスクリプタ、シグナルマスク、スケジューリングポリシーなど)を細かく制御しながら、単一のシステムコールでプロセス生成とプログラム実行を同時に行うことができます。これにより、fork()が持つアドレス空間のコピーオーバーヘッドを回避し、パフォーマンスを向上させることが可能です。

効率的なネットワークI/O (RECVMMSG, SENDMMSG)

recvmmsgsendmmsgは、複数のメッセージ(データグラム)を一度のシステムコールで送受信するためのシステムコールです。従来のrecvmsgsendmsgが一度に1つのメッセージしか処理できないのに対し、これらのシステムコールは、複数のメッセージをバッチ処理することで、システムコール呼び出しのオーバーヘッドを削減し、ネットワークI/Oの効率を大幅に向上させます。これは、特に高スループットが要求されるネットワークアプリケーション(例: DNSサーバー、リアルタイム通信システム)において非常に有効です。

  • recvmmsg: 複数のデータグラムを一度に受信します。
  • sendmmsg: 複数のデータグラムを一度に送信します。

技術的詳細

このコミットは、Go言語のsyscallパッケージがNetBSDの特定のシステムコールを認識し、呼び出せるようにするための定数定義を追加しています。Goのsyscallパッケージは、OSごとに異なるシステムコール番号や構造体を抽象化し、Goプログラムから統一的なインターフェースでOS機能にアクセスできるようにします。

具体的には、src/pkg/syscall/zsysnum_netbsd_386.gosrc/pkg/syscall/zsysnum_netbsd_amd64.goというファイルが変更されています。これらのファイルは、それぞれ32ビット(i386)と64ビット(amd64)アーキテクチャのNetBSDシステムにおけるシステムコール番号の定義を含んでいます。Goのビルドシステムは、ターゲットアーキテクチャとOSに基づいて適切なzsysnum_*.goファイルをコンパイル時に選択します。

追加されたシステムコールは以下の通りです。

  • SYS___QUOTACTL = 473: ファイルシステムクォータを制御するためのシステムコール。Goプログラムからディスク使用量の制限や管理が可能になります。
  • SYS_POSIX_SPAWN = 474: 新しいプロセスを効率的に生成するためのシステムコール。fork/execの代替として、より高速で制御性の高いプロセス起動を提供します。
  • SYS_RECVMMSG = 475: 複数のUDPデータグラムを一度に受信するためのシステムコール。ネットワークアプリケーションの受信スループットを向上させます。
  • SYS_SENDMMSG = 476: 複数のUDPデータグラムを一度に送信するためのシステムコール。ネットワークアプリケーションの送信スループットを向上させます。

これらの定数が追加されることで、Goのsyscallパッケージは、これらのシステムコールに対応するGo関数を生成できるようになります。Go開発者は、これらの関数を呼び出すことで、NetBSDの最新の低レベル機能をGoプログラムから直接利用できるようになります。これは、Goで書かれたシステムツール、ネットワークサーバー、あるいはOSと密接に連携するアプリケーションの開発において、より高度な制御とパフォーマンス最適化を可能にします。

コアとなるコードの変更箇所

変更は、src/pkg/syscall/zsysnum_netbsd_386.gosrc/pkg/syscall/zsysnum_netbsd_amd64.goの2つのファイルにわたります。両ファイルで、既存のシステムコール定数のリストの末尾に、新しい4つのシステムコール定数が追加されています。

--- a/src/pkg/syscall/zsysnum_netbsd_386.go
+++ b/src/pkg/syscall/zsysnum_netbsd_386.go
@@ -271,4 +271,8 @@ const (
 	SYS_SYMLINKAT            = 470 // { int|sys||symlinkat(const char *path1, int fd, const char *path2); }
 	SYS_UNLINKAT             = 471 // { int|sys||unlinkat(int fd, const char *path, int flag); }
 	SYS_FUTIMENS             = 472 // { int|sys||futimens(int fd, const struct timespec *tptr); }
+\tSYS___QUOTACTL           = 473 // { int|sys||__quotactl(const char *path, struct quotactl_args *args); }
+\tSYS_POSIX_SPAWN          = 474 // { int|sys||posix_spawn(pid_t *pid, const char *path, const struct posix_spawn_file_actions *file_actions, const struct posix_spawnattr *attrp, char *const *argv, char *const *envp); }
+\tSYS_RECVMMSG             = 475 // { int|sys||recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); }
+\tSYS_SENDMMSG             = 476 // { int|sys||sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags); }
 )

src/pkg/syscall/zsysnum_netbsd_amd64.goも同様の変更が加えられています。

コアとなるコードの解説

上記のコードは、Go言語のsyscallパッケージ内で使用されるシステムコール番号の定数を定義しています。Goのsyscallパッケージは、各オペレーティングシステムとアーキテクチャの組み合わせに対して、対応するシステムコール番号をGoの定数としてマッピングしています。これにより、GoプログラムはOS固有のシステムコールを、Goの関数呼び出しとして透過的に利用できるようになります。

各行は、SYS_プレフィックスを持つ定数名と、それに割り当てられた整数値(システムコール番号)、そしてコメントとしてC言語の関数プロトタイプを示しています。このC言語のプロトタイプは、そのシステムコールがどのような引数を取り、どのような値を返すかを示しており、Goのsyscallパッケージが対応するGo関数を生成する際の参考になります。

  • const (: Go言語で複数の定数をまとめて宣言するブロックの開始。
  • SYS_SYMLINKAT = 470: 既存のシステムコール定数。シンボリックリンクを作成するsymlinkatシステムコール。
  • SYS_UNLINKAT = 471: 既存のシステムコール定数。ファイルを削除するunlinkatシステムコール。
  • SYS_FUTIMENS = 472: 既存のシステムコール定数。ファイルのタイムスタンプを変更するfutimensシステムコール。
  • SYS___QUOTACTL = 473: 新しく追加されたシステムコール定数。ファイルシステムクォータを制御する__quotactlシステムコール。
  • SYS_POSIX_SPAWN = 474: 新しく追加されたシステムコール定数。新しいプロセスを生成するposix_spawnシステムコール。
  • SYS_RECVMMSG = 475: 新しく追加されたシステムコール定数。複数のメッセージを一度に受信するrecvmmsgシステムコール。
  • SYS_SENDMMSG = 476: 新しく追加されたシステムコール定数。複数のメッセージを一度に送信するsendmmsgシステムコール。
  • ): 定数宣言ブロックの終了。

これらの定数が追加されることで、Goのコンパイラは、Goプログラム内でsyscall.SYS___QUOTACTLなどの定数が参照された際に、対応するNetBSDのシステムコール番号に解決できるようになります。これにより、Goのsyscallパッケージが提供する低レベルな関数(例: syscall.Syscall, syscall.RawSyscall)を通じて、これらの新しいシステムコールを呼び出すことが可能になります。

関連リンク

参考にした情報源リンク

  • Go言語のソースコード (GitHub): https://github.com/golang/go
  • NetBSDの公式ドキュメントやメーリングリストアーカイブ (具体的なURLは検索結果による)
  • 各種OSのシステムコールに関する技術文書やmanページ
  • Stack Overflowや技術ブログなど、関連する技術情報が議論されているオンラインリソース
  • Go CL 6454100: https://golang.org/cl/6454100 (コミットメッセージに記載されているGoのコードレビューシステムへのリンク)
  • NetBSDのソースコード (特にsys/syscall.hや関連するファイル): https://cvsweb.netbsd.org/bsdweb.cgi/src/sys/ (NetBSDのシステムコール定義の確認に利用)
  • Wikipedia: システムコール, NetBSD, POSIX_SPAWN, recvmmsg, sendmmsg