KAEDE Hack blog

JavaScript 中心に ライブラリなどの使い方を解説する技術ブログ。

Linuc 101 Linux プロセス プログラム メモリアドレスの概念

プロセスとプログラムとの違い

devconnected.com

この記事がわかりやすかった。

プロセスとは

processes are running programs on your Linux host that perform operations such as writing to a disk, writing to a file, or running a web server for example.

プロセスは Linux のホストコンピューターで動いている、ディスクに書き込んだり、ファイルに書き込んだり、web サーバーを動かすようなプログラムのこと

processes can be started, stopped, interrupted and even killed.

プロセスは 開始、停止、(望まずに)中断されること、強制的に止められること?がある

kill の解釈はまだ曖昧。

プログラムとは

programs are lines or code or lines of machine instructions stored on a persistent data storage.

www.geeksforgeeks.org

en.wikipedia.org

ファイルシステムに入っている普通のコードや、機械語の塊のファイルと解釈する

プロセスを実行するのがプログラムのようだ。

プログラムからプロセスへ

devconnected.com

最初にみたこの記事によれば、プログラムはデータと指示がまとまったもので、それを実行してメモリでロードされることで、Heap と Stack を持つらしい

メモリの中の何かを入れておくところとして、ヒープとスタックがあると解釈する

https://www.atmarkit.co.jp/icd/root/80/34958380.htm

ヒープ ( Heap ) はメモリの中のさらにプロセスが動的に動く場所を確保する為のもの

www.atmarkit.co.jp

スタック ( Stack ) はデータを積み重ねるところで、紙を積み重ねるように、取り出すときは最後に置いた紙からとりだす為、最初に入れたものを出すためには それより後に入れたものを全て取り出さないと出せないものらしい。

まんま紙じゃん...すごい使いにくそう。

プロセスがどう動くか。

まずカーネルがうごく...?

カーネルとメモリと物理アドレス

As we already stated, processes are managed by the Kernel on Linux.

プロセスを管理するところ

ja.wikipedia.org

CPU や 物理メモリ、デバイス(キーボードやディスプレイか?)を抽象化し、ソフトウェアで扱えるようにするところらしい。

カーネルが実際に使う物理メモリの特定のサイズで使える場所である「メモリアドレス」を (シェルに?)与えて、その与えられたアドレス空間をプログラムを実行することを「プロセスが走る」というらしい

image.itmedia.co.jp

メモリアドレス空間はこんなかんじらしい

空間といっても xy 座標があるわけではなく、byte 単位で一列にならんでいる

このメモリだと 0x00000000 to 0xFFFFFFFF が メモリの長さで 私たちがよく使う単位でいう 4GB らしい。

最初のプロセス

systemd

eng-entrance.com

これが init プロセスといわれ、ここから分岐されて他のプロセスが動き出すらしい。

pstree
init─┬─init───bash───pstree
     └─{init}

WSL で pstree しても init と bash 以外のプロセスが動いてなかった... WSL だからか?

カーネルスペース

devconnected.com

初期化が起こるところ?ユーザースペースよりも先にわけられるものと解釈する

共有パソコンで言う ユーザーフォルダの上の階層をイメージしている

上記の Heap と Stack のメモリのわけかたよりも先にわけられるものと解釈する