OS起動編⑮-3 mpenter() (Xv6を読む~OSコードリーディング~)

前回
jupiteroak.hatenablog.com
トップページ
jupiteroak.hatenablog.com




main.c
https://github.com/mit-pdos/xv6-public/blob/master/main.c#L40

// Other CPUs jump here from entryother.S.
static void
mpenter(void)
{
  switchkvm();
  seginit();
  lapicinit();
  mpmain();
}

mpenter関数は、AP(Application Processor)が利用する、ページディレクトリの参照設定、GDT(グローバルディスクリプタテーブル)の初期化、Local APICの初期化を行っています。
mpenter関数を実行するのは、AP(Application Processor)です。


処理の内容

switchkvm();

switchkvm関数を呼び出して、現在使用されているページディレクトリ(entryother.Sで設定したページディレクトリentrypgdir)から、カーネルスレッドにおいて使用されるぺージディレクトリkpgdirへの切り替えを行います

seginit();

seginit関数を呼び出して、この関数を現在実行しているプロセッサのGDT(グローバルディスクリプタテーブル)を設定し、4種類のセグメントを利用できるようにしています。

lapicinit();

lapicinit関数を呼び出して、各種のLocal APICレジスタに値を設定し、Local APICの初期設定を行なっています。

mpmain();

mpmain関数を呼び出して、プロセッサがプロセスを実行できる状態にします。




次回
jupiteroak.hatenablog.com