小ネタ

loopバックデバイスとは?

  • ファイルをブロックデバイスとして利用すること。
  • 例)isoファイルをブロックデバイスとしてマウントする時のmountの-oオプションはloopにする。

nohupとは?

  • ターミナルから起動されたプロセスはターミナルセッションが終了すると、HUPシグナルを子プロセスに送信する。子プロセスは通常、HUPシグナルを受けると終了する。nohupを指定してプロセスを起動すれば、hupシグナルを受けても終了しなくなる。

bindマウントとは?

  • 任意のディレクトリを、他のディレクトリでマウントする操作
    • 例)以下みたいな感じ

# mount --bind /tmp /mnt
# md5sum /tmp/a
d41d8cd98f00b204e9800998ecf8427e /tmp/a
# md5sum /mnt/a
d41d8cd98f00b204e9800998ecf8427e /mnt/a
# mount | egrep mnt
/tmp on /mnt type none (rw,bind)
#

  • シンボリックリンクと同じ動きのようだが、以下の点が異なる。
    • 元ディレクトリがアンマウントされても、bindマウント先には影響がない。
    • chroot環境でもbindマウント先にアクセスが可能。
  • マウントオプションを指定する場合は、一度bindマウントした後に、remountで再度オプションを指定する必要がある。

# mount --bind /usr/local /mnt
# mount -o remount,ro /mnt

  • bindマウント禁止の設定も可能。一度bindマウントして後に、--make-unbindableマウントをする。

リモートからHDDにアクセスする方法

  • ATA over Ethernet
    • 導入が簡単
    • "/dev/etherd/e0.0p1"みたいなデバイスファイルを/dev/sha1のようなデバイスファイルと同じように扱える。

HDDの内容を全て0埋めするには

# dd if=/dez/zero of=/dev/sdd
最終的にデバイスに空き領域がないというエラーが出たら完了。

# dd if=/dez/urandom of=/dev/sdd
こっちの方が/dev/zeroより安全にデータ消去が可能。

ディスクフル時の動作を確認するには

  • /dev/fullを使う。

# echo "test" > /dev/full

/dev/randomと/dev/urandomの違い

  • ランダム生成の方法は同じだが、そのネタがなくなると出力を停止するのがrandom。urandomは停止せず、過去のネタ情報を再利用して出力を続ける。安全だが使いづらいのがrandom

syncコマンドはcacheをディスクに書き込み、cacheを解放するわけではない。

  • dirtyキャッシュをディスクと同期させるだけで、cacheを解放するわけではない。

cacheを解放するには

# echo 3 > /proc/sys/vm/drop_caches

kernel-headersとkernel-develの違いは?

  • headersは一般プログラム向けのカーネルヘッダ
  • develはカーネル関連コード向けのカーネルヘッダ

initialramfsは何をするもの?

  • カーネルが実行されると、カーネルはルートファイルシステムをマウントしようとする。ただ、カーネルに内部組み込みされたドライバでルートファイルシステムを提供するデバイスをマウントできないと起動できない。その場合の為に、カーネルは、ルートファイルシステムをマウントする前に、initramfsを一時的にルートファイルシステムとしてマウントする。ここからデバイスドライバの情報を読み込み、その後、本来のルートファイルシステムをマウントする。

ネットワーク通信は、デバイスファイルを使うか?

  • 使わない。ソケットを利用する。ソケット利用時は、ドメインを指定する。udp or tcp等の指定。

FUSEとは?

Filesystem in Userspace
カーネルが未対応のファイルシステムを扱う為の仕組み。
ZFS等は、この仕組みを利用する事で利用可能となる。

VFS(Virtual File System)とは?

  • 複数のファイルシステムを管理し、統一したインターフェースをアプリケーションに提供する仕組み。
    cp等がNFSでもext3,4でも、FAT、UDFでも動作するのは、この機能のおかげ。

デバイスファイルとは。またメジャー番号、マイナー番号とは

  • Linuxはデバイスをファイルとして仮想的に管理する。デバイスファイルとはそのファイルのこと。メジャー番号はデバイスドライバの指定に用いられる。マイナー番号は、そのデバイスドライバの制御下の機器を特定するのに用いられる。

OOM Killerで優先的にkillされるプロセスは?

  • 利用している物理ページが多いもの。ページアウトしているページが多いもの

カーネルによる2つのメモリ回収方法とは?

  • メモリが不足した時、カーネルはシステムの時間的局所性の考えに基づき、最も直近でアクセスされていないページキャッシュを破棄して空きページにする。但し、内容が変更されているページキャッシュ(ダーティくキャッシュ)は破棄しない。この最も直近でアクセスされているページを管理しているのが、LRU(Least Recently Used)リストで、カーネルによる管理されている。
  • もう一つは、スワッピングで、プロセスが確保した無名ページのデータをハードディスクに書き出して、物理ページを確保する処理のこと。無名ページとは、ファイルと関連づけられていないページのこと。

デマンドページング方式とは?またページフォルトとは?

  • デマンドページング方式とは、仮想メモリに対して、全て物理メモリを割り当てず、アクセスがあった時に割り当てる管理方式のこと。ページフォルトとは、その管理で利用される方法。具体的には、未割当領域に対しするアクセスがあった際には、アクセス失敗を示す例外を発生させ、この例外をトリガーにして物理ページの割り当て処理を実施する方法。→ページフォルトが多く発生する=(メモリ利用の多いプロセスorシステム全体でメモリ不足が起こっている事が想定される?)

メモリ管理におけるページングとは?またMMUとは?またページテーブルとは?

メモリ領域を固定長の単位(ページ)の集合とし、ページ単位にメモリを管理する方式。MMUはMemory Management Unitの略で、CPUに搭載されている機能。x86以降のカーネルはCPUがMMU対応している事を前提に構成されている。ページテーブルは、仮想メモリと物理メモリの対応表を管理するもの。(プロセス毎に管理されている)

カーネルスレッドとは?

  • カーネルと同じメモリ空間で動作するスレッドのこと。カーネルスレッドは、カーネル内部で定期的に実施される処理などで利用される。

システムコールとソフトウェア割り込みの関係とは?

  • システムコールは、アプリケーションがハードウェア、カーネルを制御する際に発行するもの。カーネルはシステムコールを受け付けると、ソフトウェア割り込みを発生させ、割り込み処理を実施する。

割り込みの流れ

  • 割り込みが発生すると、CPUは記憶装置の特定箇所にある"割り込みベクター"を参照し、そこに設定されているアドレスにあるプログラムを実行する。ここで実行される割り込み処理用プログラムを"割り込みハンドラ"と呼ぶ。割り込みハンドラ実行後は、割り込み前の元の処理を再開する。元の処理を再開するには、実行状態(プログラムカウンタやレジスタの状態)をスタックなどの一時保存領域に退避させておく必要がある。

割り込みの種類

  • 周辺装置からCPUに送信する信号による"ハードウェア割り込み"。ソフトウェアの動作によってCPU内で発生する"ソフトウェア割り込み"。ソフトウェア割り込みの内、ソフトウェアの異常動作やエラーの通知に使われるものを「例外」と呼ぶ。「例外」は0で除算する処理を実施した場合、アクセスが禁止されているメモリー領域にアクセスした場合などに発生する。

ブロックキャラクタとキャラクタデバイスの違いは?

  • ブロックデバイスはある程度まとまった単位でデータを受け取るデバイスファイル。やりとりされるデータはバッファされる。(HDD・USBドライブ・FDD等)。キャラクタデバイスは、データを1byteづつやりとりするものでバッファされない。

vimコマンドでバイナリ編集ができるとは!

vimでバイナリ編集!すばらしすぎる!ありがとうございます!

.vimrcだと、存在を知らない人が-b使うと困るので。ひとまず.bvimrcに以下の記載をして
      • ------------------------------------------------------
augroup BinaryXXD
autocmd!
 autocmd BufReadPre  *.bin let &binary =1
 autocmd BufReadPost * if &binary | silent %!xxd -g 1
 autocmd BufReadPost * set ft=xxd | endif
 autocmd BufWritePre * if &binary | execute "%!xxd -r" | endif
 autocmd BufWritePost * if &binary | silent %!xxd -g 1
 autocmd BufWritePost * set nomod | endif
augroup END
      • ------------------------------------------------------

使う時は以下コマンドにしてもいいかも。

vim -b -u ./.bvimrc [ファイル]
でも、やっぱり面倒くさいな。。。。。

  • 最終更新:2014-05-10 18:29:31

このWIKIを編集するにはパスワード入力が必要です

認証パスワード