ラベル kernel の投稿を表示しています。 すべての投稿を表示
ラベル kernel の投稿を表示しています。 すべての投稿を表示

2019-12-30

2020年1月号の日経Linux(Win7→Ubuntu)

普段は購入しないのですが、「日経Linux」(2020年1月号)を買ってみました。別冊付録「Linuxカーネルが基礎からわかる本」に興味があったからです。

本誌の特集は「サポ切れWin7→Linux引っ越し完全手順」です。2020年1月14日にWindows7のサポートが終了することはマイクロソフトからのアナウンスがあるとおりです。しかしサポートが切れるか否かに関わらず、Windowsが入っていたPCをLinuxに入れ換えることを勧める記事は、よく見かけます。

記事では、以降の流れを次のように説明しています(22頁)。
  1. まずはUbuntuの捜査官を確認
  2. PCにUbuntuをインストールする
  3. データを外部に退避して復元
  4. Office文書の引っ越し先を準備
  5. Windowsの定番アプリを代替する
  6. Linux独特の操作の作法を知る
  7. Windowsの便利機能を代替する
この手順が妥当か否かは問題ではないでしょう。もしWindowsが入っていたマシン(Win7か別の何かに依らず)をLinux(Ubuntuであろうと他のディストリビューションであろうと)に移行するのであれば、細部はともかく、このような手順になろうかと思います。

考えてみたいことは、WindowsからLinuxに移行した人(および移行しようと考えている人)は、Linuxに何を求めているのかということです。Windows7はマイクロソフトの商品(だから有料)だが、Linuxはフリー(なので無料)だから、オトクに使える、と思っているだけなのでしょうか。

例えば乗用車は、 トヨタでも日産でも、はたまたホンダでもマツダでも、操作は同じだから、パソコンだってWindowsだろうがLinuxだろうが同じだろう、くらいに考えていないでしょうか。微妙に違うところはあっても、基本的に同じだろうと考えていないでしょうか。

問題となるのは、どの程度の違いであれば許容できるのか、という点だと思います。

一例として、オフィス製品としてMicrosoft Officeの代替としてLibreOfficeが候補にあがります。見た目は似ていますし、操作も似ています。しかし全く同じかというと、そうではないし、全然違うのかというと、そうでもありません。僕自身はMicrosoft Officeを使うのを止め、10年位前からLibreOfficeを使っており、特に不便は感じていません。ただし、Microsoft Officeと同じように使えることを「期待」してLibreOfficeを使うのであれば、「期待外れ」になるだろうとは考えています。LibreOfficeはMicrosoft Officeと互換性のある機能「も」ありますが、基本的には別の操作性を持ったオフィス製品です。

WindowsからLinuxへ移行することは否定しませんが、移行するなら、このような「違い」についても意識しておく必要があるだろうと思います。

2019-09-24

.set NHRDRV,0x475 # Number of hard drives

FreeBSDのブートプロセスをみる』(白崎博生、UNIX MAGAZINE COLLECTION、2006年)を追体験しながら、カーネルを勉強しています。カーネルデバッグができる環境をVirtualBoxを使って構築したので、第1回「Boot Manager」から順番に読んでいきます。

大雑把に言うとboot0は、BIOSによってディスクから読み込まれ、boot1を読んで制御を渡すのが、主な役割です。その他にも処理がありますが、歴史的な事情によりINT 13Hの呼び出し方法が違うなどであり(それだけではありませんが)、ざっと眺めておくだけにします。

しかしながら、それほど重要というほどではありませんが、気になったのは、BIOSのデータエリア0x475番地を参照している箇所です。

boot0.Sでは「.set NHRDRV,0x475 # Number of hard drives」のようにシンボルが定義されており、以下のようなコメントも入っています。
    121  * NHRDRV is the address in segment 0 where the BIOS writes the
    122  *      total number of hard disks in the system.

このような情報はWebを検索すると見つかったりします。しかし得てして何かの情報の孫引きだったりするので、最もオリジナルの一次情報を見つけたいところですが、それはなかなか見つかりません。そもそもBIOSにおける非公開(に準じる)情報だったりすると、オリジナルの情報にはアクセスできないことになります。せめて次善の策として、BIOSの内部構造を詳述した定評のある書籍などの記述を参照しておきたいところです。

2019-09-23

FreeBSDのブートプロセスをみる』(白崎博生、UNIX MAGAZINE COLLECTION、2006年)を追体験しながら、カーネルを勉強することにしました。まず最初にカーネルのリモートデバッグができる環境をVirtualBoxを使って準備しました。書籍ではFreeBSD 5.1が使われていますが、今更古いバージョンを用意するのもなんなので、最新のFreeBSD 12.0を使うつもりです。記事の記述とは合わないところが出てくるかもしれませんが、それも含めて勉強です。

まずは第1回「Boot Manager」から始めます。記事ではboot0のソースがboot/i386/boot0/boot0.sと書かれていますが、stand/i386/boot0/boot0.Sに変わっていました。コメントも記事とは変わっているようですが、ロジックは変化していません。

まず最初に「自分自身を00600Hへ移動する」処理があります。レジスタを適切に設定してrepプレフィックスをつけたmovswで転送する訳ですが、ここで疑問が生じました。該当箇所は次のようになっています。
   181  start:          cld                             # String ops inc
   182                  xorw %ax,%ax                    # Zero
   183                  movw %ax,%es                    # Address
   184                  movw %ax,%ds                    #  data
   185                  movw %ax,%ss                    # Set up
   186                  movw $LOAD,%sp                  #  stack
   187 
   188          /*
   189           * Copy this code to the address it was linked for, 0x600 by default.
   190           */
   191                  movw %sp,%si                    # Source
   192                  movw $start,%di                 # Destination

ここでSIレジスタには転送元、DIレジスタには転送先が入っています。$LOADというのは、上述したソースコードのちょっと前で「.set LOAD,0x7c00」のように定義されています。しかし$startというのはラベルとして定義されているだけです。しかもコードの最初にあるので0x0000ではないのでしょうか。どうして0x0600として扱われるのでしょうか。すくなくとも、このファイルには(コメントに0x600と書かれているだけで)なんの定義もありません。これが疑問でした。

Webを検索しても、boot0を解説している情報は幾つか見つかりますが、この疑問に答えてくれる情報がなかなか見つかりませんでした。

Webで検索を続けていると『FreeBSD Architecture Handbook』に次のような記述があることを知りました。
It is worth looking at the Makefile for boot0 (sys/boot/i386/boot0/Makefile ), as it defines some of the runtime behavior of boot0. For instance, if a terminal connected to the serial port (COM1) is used for I/O, the macro SIO must be defined (-DSIO). -DPXE enables boot through PXE by pressing F6. Additionally, the program defines a set of flags that allow further modification of its behavior. All of this is illustrated in the Makefile. For example, look at the linker directives which command the linker to start the text section at address 0x600, and to build the output file “as is” (strip out any file formatting):
そしてMakefileでは以下のように記述されていると書かれています。
BOOT_BOOT0_ORG?=0x600
LDFLAGS=-e start -Ttext ${BOOT_BOOT0_ORG} \
-Wl,-N,-S,--oformat,binary
そういうことなのか、と思いましたが、Makefileには次のような記述があるだけでした。
BOOT_BOOT0_ORG?=        0x600
ORG=${BOOT_BOOT0_ORG}
考え方は変わっていないのだと思いますが、実現方法が変わったのでしょう。今回は、そこまでは追いかけませんでした。しかしともすれば見過ごしてしまう点を追及できました。