Part of Putting the “You” in CPU: a rabbit hole into how your computer runs programs.
Chapter 7:
最後に
Edit on GitHub
おめでとうございます!私たちは今、CPUに「あなた」をしっかりと配置しました。楽しんでいただけたら嬉しいです。
最後にもう一度強調してお送りいたしますが、今回得たすべての知識は実際に活用できます。次にコンピュータが複数のアプリを実行していると考えるとき、タイマーチップやハードウェア割り込みを思い浮かべていただきたいです。また、何か新しいプログラムをファンシーなプログラミング言語で書いてリンカーエラーが発生したとき、そのリンカーが何をしようとしているのか考えていただければ幸いです。
この記事に関する質問(または訂正)がある場合は、lexi@hackclub.com までメールしていただくか、GitHubで問題を提出するかPRを作成してください:GitHub。

… でも待ってください、もっとあります!
ボーナス: Cの概念を翻訳
もし低レベルプログラミングを自分で行ったことがあるなら、おそらくスタックとヒープが何かを知っていて、mallocを使用したことがあるかもしれません。しかし、それらがどのように実装されているかについてはあまり考えたことがないかもしれません!
まず第一に、スレッドのスタックは、仮想メモリの高い位置にマップされた固定のメモリ量です。ほとんどのアーキテクチャでは、スタックポインタはスタックメモリの一番上から始まり、増加するにつれて下方に移動します。物理メモリは、マップされたスタックスペース全体に対して最初から割り当てられるわけではありません。代わりに、デマンドページングが使用され、スタックのフレームが到達するたびにメモリが遅延して割り当てられます。
mallocのようなヒープの割り当て関数がシステムコールではないことは驚かれるかもしれません。代わりに、ヒープメモリ管理はlibcの実装によって提供されています! malloc、freeなどは複雑な手順であり、libcはメモリマッピングの詳細を自身で追跡します。ユーザーランドのヒープアロケータは、mmap(ファイル以外のものもマップできる)およびsbrkを含むシステムコールを使用しています。
ボーナス: 余談
これらをまとめて置く場所がどこにも見当たりませんでしたが、面白いと思ったので、以下に示します。
おそらくほとんどのLinuxユーザーは、ページテーブルがカーネル内でどのように表現されているかを想像する時間がほとんどないほど十分に興味深い人生を送っているでしょう。
ハードウェア割り込みの別の視覚化:

一部のシステムコールは、カーネル空間にジャンプする代わりにvDSOと呼ばれる技術を使用しています。これについては話す時間がありませんでしたが、非常に興味深いですし、読むこと をお勧めします 。
そして最後に、Unixの批判に対処します。実行に関する多くの内容が非常にUnix固有ですので、macOSまたはLinuxユーザーの場合は問題ありませんが、Windowsがプログラムを実行したりシステムコールを処理する方法にはあまり近づけません。ただし、CPUアーキテクチャに関する部分はすべて同じです。将来的には、Windowsの世界をカバーする記事を書くことができればと思います。
謝辞
この記事を執筆する際に、GPT-3.5とGPT-4と多くの対話をしました。彼らは多くの情報が役に立たないばかりか、私に嘘をつくことが多かったですが、時折問題を解決するのに非常に役立ちました。LLM(言語モデル)の支援は、その制限を認識し、彼らが言うことに極めて懐疑的である場合にはプラスになることがあります。とは言え、彼らは文章を書くのが非常に下手です。決して彼らに文章を書かせないでください。
さらに重要なこととして、私を校正し、励まし、アイデアを出すのに助けてくれたすべての人々に感謝します。特に、Ani、B、Ben、Caleb、Kara、polypixeldev、Pradyun、Spencer、Nicky(第4章で素晴らしいエルフを描いてくれた方)、そして私の素敵な両親に感謝します。
もしもあなたが10代で、コンピュータが好きで、Hack Club Slackにまだ参加していないなら、今すぐ参加すべきです。私は自分の考えや進捗状況を共有する素晴らしいコミュニティがなければ、この記事を書かなかったでしょう。もしも10代でない場合、寄付をして、私たちが素晴らしいことを続けられるようにしてください。
この記事の中の平凡なアートはすべてFigmaで描かれました。編集にはObsidianを使用し、時折Valeをリントツールとして使用しました。この記事のMarkdownソースはGitHubで利用可能であり、将来的な細かい指摘に対して公開されています。また、すべてのアートはFigmaコミュニティページで公開されています。