Posts

Showing posts from 2018

仮想マシンハードディスクイメージファイルの形式

仮想マシンのハードディスクイメージファイルについて、いつもどれがどれか分からなくなってしまうので、その種類を書いておく。 Appleのdmg形式は除いている。 RAW物理ディスクのダンプqcow昔のqemuの形式qcow2今のqemuの形式FVD (Fast Virtual Disk)IBMの開発したqemu用の形式QEDqemu用だが既に互換性のためだけに残っている状態。VDI (Virtual Disk Image)VirtualBoxの形式VMDK (Virtual Machine Disk)VMwareの形式VHD (VIrtual Hard Disk)Microsoft Virtual PCの形式VHDX (Virtual Hard DIsk v2)Microsoft Hyper-Vの形式bochsBochsのbximageコマンドで作る形式 他にもあるだろうが、普段目にするのはこの程度なように思う。

NetBSDのpkgsrcから導入したXでAccelMethodを設定する

FreeBSDのX.orgでCaps lockキーをCtrlにするで書いたことと基本的に同じではあるのだが、 NetBSD上でpkgsrcから導入したmodular-xorg-server-1.20.1を導入した場合の設定例を書いておく。 やりたいことは、Toshiba dynabook R63/PSというIntel Broadwell世代のラップトップでIntelのinternal GPUのアクセラレーション方式をSNAからUXAに切り替えるということである。 以下のようにすれば良い。 ; まず/etc/X11/xorg.conf.dディレクトリーがないので作成する。 # mkdir /etc/X11/xorg.conf.d ; 以下のような内容を用意する。 # cat /etc/X11/xorg.conf.d/20-intel.conf Section "Device" Identifier "Intel GPU" Driver "intel" Option "AccelMethod" "UXA" # Option "NoAccel" "True" # アクセラレーションを無効にする場合 EndSection

JRubyのRestClientで、認証付きHTTPプロキシーサーバーを経由してアクセスする方法

いつの頃か覚えていないのだが、とある認証付きHTTPプロキシーサーバーを経由して、 JRubyのRestClientを使ったプログラムが動いていたはずである。 プロキシーサーバーの情報は、この環境は、Windows 10の環境であるから、 > set http_proxy=http://username:password@serveripaddress:portnumber のように設定してある。 しかし、何かが変わったようで、今日になると404 Proxy Authentication Requiredの エラーが、net/httpから返されて認証付きプロキシーサーバーを越えることができない。 パスワードは英数字のみで構成されているので、パスワードの値が問題ではないはずである。 いろいろ試した結果、 RestClient.proxy = ENV['http_proxy'] を書いておくことで解消できた。 net/httpの仕様がいまいち理解できず気持ちが悪いが、 いずれまた、はまりそうな気がするので書いておく。

FreeBSDのX.orgでCaps lockキーをCtrlにする

最近のX.orgでは、xorg.confは用意しておかなくても良いのだが、その時にctrl:nocapsを指定する方法を書いておく。 FreeBSDでPortsからxorg-server-1.18.4_9,1を導入した時に使用している。 $ cat /usr/local/etc/X11/xorg.conf.d/10-capslock.conf Section "InputClass" Identifier "keyboard0" Driver "kbd" MatchIsKeyboard "on" Option "XkbOptions" "ctrl:nocaps" EndSection

PowerShellのSend-MailMessageで外部コマンドの標準出力を電子メールを送る際に改行を維持する

PowerShellを使うと良い所は、電子メールを簡単に送付できるSend-MailMessageと言う命令があるところである。 これを使って、外部コマンドの標準出力を電子メールとして送るとすると、以下のようになる。 ## 管理者権限のPowerShellコンソールで、Set-ExecutionPolicy remotesignedを実行しておく必要がある。 ## 使い方: ## powershell -NoProfile -ExecutionPolicy Unrestricted .\send-notification-email.ps1 # 送信する電子メールの本文はUTF-8にする。 $utf8 = ([System.Text.Encoding]::UTF8) # 差出人 $fromaddress = "fromuser@example.com" # 宛先として2つの電子メールアドレスを設定する。 $toaddress1 = "touser1@example.jp" $toaddress2 = "touser2@example.jp" # 電子メールのSubject $subject = "件名です" # 本文は外部コマンドの標準入力から受け取る $body = C:\jruby-9.2.0.0\bin\jruby.exe .\output-to-stdout.rb if ($LASTEXITCODE -ne 0) { $email = @{ From = $fromaddress To = "$toaddress1","$toaddress2" Subject = $subject Body = $body -join "`r`n" SMTPServer = "smtp.example.com" Encoding = $utf8 } send-mailmessage @email } ここで、外部コマンドの標準出力が複数行存在する場合には注意が必要である。 つまり、-join "`r`n"を付けてお…

NetBSD 8 on さくらのVPS V4

お名前VPSをずいぶんと長く使って来たのだが、我慢できないほどにディスクアクセスが遅くなってしまい、他に乗り換えることにした。 最近のVPSサービスは、ディスクがSSDであまり容量の大きくないものばかりなので、手頃な価格で200 GB程度のディスク容量のものとなると、 さくらのVPSくらいしかなさそうだった。 さくらのVPSは、ブートセクターが壊れることはあるとか言う話を聞いたことがあって心配していたのだが、私の使うことにした石狩データセンター収容のV4の仮想マシンは、 とりあえず初回からNetBSDが起動しないと言うことはなかった。 Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The NetBSD Foundation, Inc. All rights reserved. Copyright (c) 1982, 1986, 1989, 1991, 1993 The Regents of the University of California. All rights reserved. NetBSD 8.0 (GENERIC) #0: Sat Jul 21 13:49:48 JST 2018 xxx@xxx.xxx:/usr/world/amd64/8/obj/sys/arch/amd64/compile/GENERIC total memory = 2047 MB avail memory = 1964 MB rnd: seeded with 128 bits timecounter: Timecounters tick every 10.000 msec Kernelized RAIDframe activated running cgd selftest aes-xts-256 aes-xts-512 done timecounter: Timecounter "i8254" frequency 1193182 Hz quality 100 QE…

Log-structured File System (LFS) について書かれている文献

Log-structured File System (LFS)というファイルシステムがあって、NetBSDもサポートしている。 しかし、私の知る限りNetBSDではちゃんと動いたことはないように思う。 それでも、どうにかして動かしたいと思う人は私以外にもいるようで、時折何かの修正がコミットされている。 もうHDDにストレージのアクセス速度を求める時代ではないのかもしれないが、SSDにも応用できる考え方はあるのではないかとも思う。 mount_lfs(8)のmanページと、英語版Wikipediaの参考文献にあげられている文書を書いておく。 Wikipediaの方はリンクがあるが、mount_lfs(4)の方はそうではないので、後で読む時にはここからたどるようにしたい。 mount_lfs(8)のmanページよりBeating the I/O Bottleneck: A Case for Log-Structured File SystemsThe Design and Implementation of a Log-Structured File SystemFile System Performance and Transaction SupportAn Implementation of a Log-Structured File System for UNIX英語版WikipediaのLog-structured file systemの記事より mount_lfs(8)のmanページの分と重複する物は割愛した。 Log-Structured File SystemsDon't stack your Log on my Log 最初は教科書の一章であるLog-Structured File Systemsを読むのが分かりやすそうだ。

LLVM/clangでビルドできるNetBSDのアーキテクチャー

LLVM/clangでビルドできる(試みることのできる)アーキテクチャー(MACHINE_ARCH)をちゃんと把握しておかないといけないと思っていた。 src/share/mk/bsd.own.mkによると、以下の各MACHINE_ARCHであるようだ。 aarch64aarch64ebearm*i386powerpcpowerpc64sparcsparc64x86_64 また、LLVM/clangでビルドしたNetBSDを用意するには、/etc/mk.confに以下のように書いておけば良いはずである。 MKGCC=no MKLLVM=yes HAVE_LLVM=yes しかし、build.shにこれを自動的に設定してくれるオプションがないのが不便だ。

FreeBSD Portsで、オプションを選択するダイアログボックスを逐次出さないようにする

FreeBSDを使うことがあるので、そこではFreeBSD Portsを使いたいと思う。だが、いつもオプションを選ぶダイアログボックスでビルドが途中で止まってしまい、 いつまで経っても目的を達せないので、あきらめてpkgsrcを使っていた。 以前、FreeBSD Workshopに出席した際に、最初に指定しておくことのできるmakeターゲットがあると聞いたので、やっとports(7)のman ページを読んでみた。 config-recursiveというのが、それだった。 # cd /usr/ports/x11-wm/jwm # make config-recursive (ここで必要なオプションを設定する) # make install のようにすることで、目的は達成できた。 私としては、デフォルトのオプションから変えることは基本的にないと思うので、デフォルトの値を自動的に設定するmakeターゲットがあると便利なのだが、 ports(7)には記載されていないようだった。一度、ports/Mk以下をちゃんと読まないといけないように思う。

NetBSD上でのBitVisorのビルドと、BitVisor上でのNetBSDの起動

はじめにこの記事は、Japan NetBSD Users' Group BoF 2018で発表した内容を整理し直したものです。NetBSDでBitVisorをビルドしてみる話と言う 記事があって、ここでは、NetBSD上でBitVisorのUEFIブートローダーはビルドできなかったという結果が掲載されている。 最近は、UEFIブートローダーも含め、一式をちゃんとNetBSD上でビルドできるようになっているので、このことについて書いておく。 また、私は、BitViorをUEFIな環境で既に構築されているNetBSDを起動させるために使用するので、NetBSD/amd64l-current (8.99.24)以外でのビルドは試していない。 準備 最初に述べたように、NetBSD/amd64 8.99.24でビルドするので、x86_64用のCコンパイラーはGCC 6.4.0が既に用意されている。 これにより、UEFIブートローダー以外のものはビルドができる。 UEFIブートローダーは、mingw-w64によるx86_64用のクロスコンパイラーが必要となる。 まずはこのクロスコンパイラーをpkgsrcからインストールする。以下のように実行すれば良い。 $ cd /usr/pkgsrc/cross/mingw-w64-x86_64-gcc $ make install ここで、mingw-w64-x86_64-gcc-bootstrapというパッケージもインストールされるが、 これはmingw-w64-x86_64-gccをビルドするために一時的に必要になるパッケージなので、 mingw-w64-x86_64-gccが正常にインストールされたら、make deinstallしてかまわない。 GNU makeも必要なので、pkgsrc/devel/gmakeをインストールしておくことになるが、 このパッケージをインストールしていない人はいないだろう。 ビルドする 以下のように実行することで、bitvisor.elfとbitvisor/boot/uefi-loader/loadvmm.dll、 bitvisor/boot/uefi-loader/loadvmm.efiを生成できる。 $ cd ~/ $ hg clone ssh://hg@bitbucket.o…

「増補改訂版 図解でわかる はじめてのデジタル画像処理」山田 宏尚 著

疑似輪郭または疑似エッジ
https://www.jfpi.or.jp/webyogo/index.php?term=3168
http://www.fujitsu.com/downloads/JP/archive/imgjp/jmag/vol49-3/paper10.pdf

XYZ表色系
http://www.dic-color.com/knowledge/xyz.html

ITU-R BT.709
ハイビジョン(2K)放送でのXYZ表色系で表現できる色の範囲の規格
https://en.wikipedia.org/wiki/Rec._709
https://www.itu.int/rec/R-REC-BT.709/en

ITU-R BT.2020
4Kまたは8K放送でのXYZ表色系で表現できる色の範囲の規格
https://en.wikipedia.org/wiki/Rec._2020
https://www.itu.int/rec/R-REC-BT.2020/en

L*a*b*表色系
http://w3.kcua.ac.jp/~fujiwara/infosci/lab.html
http://www.daicolor.co.jp/rd/color/system/index.html
カラーマネジメントシステムで使用されることが多い。

ディープカラー
24ビットを越えた濃度値による

YIQ信号
NTSCで使用されていたカラーをモノクロに変換する方式
Y: 輝度信号
IとQ: 色差信号

平滑化 (ノイズ除去)
ごま塩ノイズ
移動平均フィルター … ぼけやすい
加重平均フィルター … 移動平均フィルターよりは良いがまだぼけやすい
メディアンフィルター … 処理に時間がかかるが品質が良い

エッジ抽出フィルター
輪郭線を抜き出す
カラー画像の場合にはモノクロに変換してから処理する
輪郭を求めるには微分をすれば良いが、離散データでは微分できないので、代わりに差分の絶対値を計算する
どの方向の差分を計算するかで結果が変わる
単純に縦、横、斜め等で計算するのではなく、Robertsのエッジ検出オペレーター、Prewittのエッジ検出オペレーター、Sobelのエッジ検出オペレーターなどを使うのが有効
2次微分(ラプラシアン)をすることでエッジを検出するのも有効
2次微分も離散データではできない…

NetBSD 8.0のnpf(7)の設定例

NetBSD/amd64 8.0でnpf(7)を使っている。npfは、NetBSD packet filterのことである。 あまり設定例が公開されていないようなので、備忘のために書いておく。 xennet0インターフェイスで、TCPの80番・443番・25番・22番・8080番・53番ポートとUDPで53番ポートを通過させ、ログをnpfd(8)で取得する設定である。 #set bpf.jit off $ext_if = { ifaddrs(xennet0) } $services_tcp = { http, https, smtp, ssh, 8080, domain } procedure "log" { log: npflog0 } group default { pass in final family inet6 proto ipv6-icmp all pass in final family inet4 proto icmp all pass stateful out final all pass stateful in final proto tcp to $ext_if port $services_tcp apply "log" pass stateful in final proto udp to $ext_if port domain apply "log" pass final on lo0 all block all apply "log" }

FreeBSDのconsoleのkeymapの変更

FreeBSD/amd64 11.2-RC3を使っているのだが、NetBSDで/etc/wscons.confにencoding us.swapctrlcapsと指定するのと同じ設定が必要だった。 このNetBSDの設定では、CAPS lockキーと左Ctrlキーを入れ替えるのだが、以下のFreeBSDの設定では、CAPS lockが左Ctrlキーになる。 私としては、その方が望ましい。 # vi /etc/rc.conf keymap="us.ctrl" us.ctrlの部分は、/usr/share/vt/keymapsにあるファイル名から.kbdを取ったものを指定する。

AndroidのGmailアプリのExchange and Office 360アカウントのMobile device ID

AndroidのGmailアプリでは、Exchange and Office 365アカウントを追加することはできる。この際に、Mobile device IDというのが表示される。 これは、電子メールアドレスを入力してNextボタンを押下すると表示されるのだが、これは、1つ前の画面で入力した電子メールアドレスに無関係であった。 つまり、違う電子メールアドレスを入力しても、同じMobile device IDが表示される。

東京大学のOCWについて

東京大学のOCWには以下の問題があるようである。 1つ目は、Adobe Flashでビデオ配信されていることである。これ自体は、現状では問題ないのだが、今のメンテナンス状態を考えると、Adobe Flash Playerが提供されなくなった後に、HTML5等で更新されることもなさそうに思えるので、残念なことになってしまうかもしれない。 2つ目は、iiionline.iii.u-tokyo.ac.jpというウェブサイトへのリンクになっているビデオがあるということである。このウェブサイトが今はもう動いていないようである。ocw.u-tokyo.ac.jpにちゃんとまとめておかなかったのは失敗だろう。おもしろそうな講義もあったので残念である。

OCW「ビッグデータ時代の人工知能学と情報社会のあり方」(東京大学)

ビッグデータ時代の人工知能学と情報社会のあり方は、コースの半分近くのビデオは非公開になってしまっている。公開されているビデオは、人工知能に関する概論的な講義である。 私は、人工知能について学んで来なかったのだが、深層学習が人工知能の研究においてどのような意味を持つかを解説した第9回第10回は特におもしろかった。

OCW「情報工学概論A」(東京大学)

東京大学の「情報工学概論A」は、インターネットを実現する技術についての講義であった。 インターネットの運営に関することから、イーサネット等からHTTP等までのネットワークの技術、暗号化技術について、解説している。 内容は、基礎的なものであるので、2018年の今でも視聴する価値はあると感じた。しかし、実例として触れられているものは、古くなってしまっている。

OCW「データベース」(上智大学)

大学の公開している日本語の講義はいろいろあるのだが、内容が一部だけではなく役に立つものと言うと、あまりないように思える。 また、そのような講義がまとめられている物も見つけられない。 上智大学理工学部「データベース」は、 データベースとSQLについて全く知らなかった時期に、SQL ゼロからはじめるデータベース操作を 読むのと同時に視聴して大変役に立った。

スウェーデンとElsevier

Sweden ends contract with science publisher Elsevier, moving for open access for scientific articlesによると、 2018年6月30日から、スウェーデンの研究者は、Elsevierの学術雑誌に投稿したり、論文を閲覧したりできなくなるらしい。 商業的な学術雑誌ももう少しリーズナブルな価格になって欲しい。 オープンアクセスであれば、確かに私は助かるが、継続性があるのか良く分からないので。

Windowsマシンのuptimeを知る方法

どうやら、uptime(1)コマンドにそっくりなものは、Windowsの標準機能にははないようだ。 その代わり、以下のようにすると、起動時刻を知ることができる。 > net statistics server \\client1 のサーバー統計情報 統計情報の開始日時 2018/05/15 6:43:10 受け付けたセッション 1 タイムアウトしたセッション 0 エラーが発生したセッション 0 送信バイト数 (KB) 0 受信バイト数 (KB) 0 平均応答時間 (ミリ秒) 0 システム エラー 0 アクセス許可違反 0 パスワード違反 0 アクセスしたファイル 0 アクセスした COM デバイス 0 スプールした印刷ジョブ 0 バッファーのオーバーフロー回数 ビッグ バッファー 0 リクエスト バッファー 0 コマンドは正常に終了しました。

岩波講座 ソフトウエア科学6「オペレーティングシステム」#7

セマフォ

前節の排他制御の方式は、現実のシステムには適用しにくい。また適用するにしてもビジーウェイティングを使っているので、ごく短いクリティカルセクションへの利用に限定されるべきである。

より一般的な排他制御として、セマフォを導入する。

セマフォはプロセス間通信の伝達に使われる整数型の変数である。

セマフォは、0と1以外の値も取ることができ、より多くの情報を伝達できる。

セマフォは一般に、イベント変数と呼ばれるプロセス間の共通変数の一種である。

セマフォの変数へのアクセスも排他制御が必要である。

プロセス間で伝達されるイベントには以下が含まれる。
(1) プロセスがクリティカルセクションに入った。
(2) プロセスがクリティカルセクションから出た。
(3) 新しいプロセスが始まった。
(4) 入出力操作が始まった。
(5) 入出力操作が完了した。
(6) メッセージを受け取った。
(7) リソースを受け取った。
(8) リソースを開放した。

イベント変数は、
(1) イベントの履歴を記録するデータ構造(整数型の変数)。
(2) イベント変数の待ち条件が満たされるのを待っているプロセスの待ち行列。
からなる。

セマフォにはP命令(wait命令)とV命令(signal命令)が定義される。

P命令は、引数SについてS≧1が満たされるまでプロセスを一時停止させるのが役割である。もし、S≧が満たされていればSを1減らしてプロセスは継続する。

V命令は、引数Sのセマフォの待ち行列で待っているプロセスの中から1つが選ばれ、実行可能状態に移行させる。ディスパッチャーは実行可能プロセスから1つを選び実行する。もし、Sのセマフォの待ち行列が空であった場合には、Sは1増加させられVを実行したプロセスは続行される。

P命令とV命令は、セマフォを提唱したダイクストラの母語であるオランダ後のPasseren(パスを許す)とVerhoog(起こす)に由来する。

P命令とV命令はそれぞれ分割不可能でなくてはならない。つまり、ひとときにはある1つのセマフォに対して、1つのPまたはVしか実行できない。

P、V、ディスパッチャーは、いずれも共通データである待ち行列を操作するので、排他制御を必要とする。

pkgsrc/www/firefoxがNetBSDではすぐにクラッシュする件について

multiprocess windowの有効なpkgsrc/www/firefoxがすぐにクラッシュのは、 そださんの報告されている PR 53273 が原因とのこと。 Chromiumも同じような問題があったように思うので、どうにかして直して欲しい。 browser.tabs.remote.autostartを無効化しておけば(falseにしておけば)、multiprocess windowは無効にできる。

岩波講座 ソフトウエア科学6「オペレーティングシステム」#6

並列プロセス

プロセスがCPUディスパッチャーにより同時実行されると、互いに作用し干渉し合う。例えば主記憶やI/Oを取り合うかもしれないし、同一のファイルに同時に書き込もうとするかもしれない。

相互作用や干渉は、意図的/偶発的、協調的/競合的に起こり得る。

プロセス間の相互干渉は、正しい制御化におかないと好ましくない状況を招く。

プロセス間の相互干渉は、
* プロセス間通信
* プロセス同期
* プロセス統合
などとして研究されている。

プロセス間の相互交渉は3種に分類できる。
(1) 協調
    複数のプロセスが相互に情報交換を行いながら、共通の目的のために処理を進める。
(2) 競合
    リソースを取り合うといったように互いに他のプロセスの存在を意識しなくてはいけないが、自分の処理のためには他のプロセスは不要な場合。
(3) 干渉
    相手のプロセスの中断など、はっきりと他のプロセスに影響を与える場合。

例えば、整合性を保ってクリティカルセクションまたはクリティカルリージョンは、分割不可能にする必要がある。

クリティカルセクションは混合して実行されることがないようにする。これにより、共通変数の読み書きは1つのプロセスしか実行できないようになる。

共通変数へのアクセスを同時に1つのプロセスに限ることを排他制御または相互排除と言う。

2つのプロセスがメッセージをやりとりする機構を、メッセージ転送またはメッセージ交換と言う。

タイムシェアリングシステムでもマルチプログラミングシステムでも、他のプロセスを一時停止させる必要が生じることがある。例えばメモリーコンパクション(主記憶内の小さな空き領域を大きな空き領域にするために、主記憶内でプログラムを動かすこと)や、スワップアウトする場合である。

排他制御はプロセスの競合を正しく行うのに必要であり、次の3つの要求を満たさなくてはならない。
(1) クリティカルセクションを実行しているプロセスが1つもない時、クリティカルセクションに入る要求をしたプロセスは、ただちに許可を与えられなければならない。
(2) 2つ以上のプロセスがクリティカルセクションに入ろうと争っているR時、その選択は無期限に延期されてはならない(デッドロック防止)。
(3) いかなるプロセスも、あるプロセスがそのクリティカルセクションに入るのを無期…

岩波講座 ソフトウエア科学6「オペレーティングシステム」#5

CPUスケジューリングとオペレーティングシステム

CPUスケジューリングは、ハードウェアに一番近いレベルの仮想化である。

CPUスケジューリングより上のレベルでは、CPUを獲得したり開放したりといったことを考慮する必要はなく、各プロセスが仮想CPUを独占しているように振る舞うと考えて良い。

CPUスケジューリングはショートタームスケジューリングとも呼ばれる。

コンピューターシステムは、循環型待ち行列システムとみなせる。

ロングタームスケジューリングは、ジョブの起動やスワッピングを行い、どのジョブが主記憶に入るのを許されるか、つまり、循環型待ち行列システムでショートタームスケジューリングによりCPUを割り当てられるようになるかを決める。

ミディアムタームスケジューリングは、ページングのレベルのもので、ページフォルトを生じたジョブは、循環型待ち行列システムのI/O待ち行列に入れられる。

岩波講座 ソフトウエア科学6「オペレーティングシステム」#4

スケジューリング方式

基本的なスケジューリング方式
(1) 到着順(FCFS))
(2) 処理時間順(SPT)、残っている処理時間の短い順(SRPT)
(3) 優先度順
(4) アラウンドロビン
(5) フィードバック待ち行列(フォアグラウンド・バックグラウンド待ち行列)(FB)

プロセスとジョブを基本的に同一視する。

性能評価基準
(1) 応答時間
    タイムシェアリングシステムや対話型システムではレスポンスタイムと言い、バッチシステムではターンアラウンドタイムと呼ぶ。
(2) スループット
    単位時間に処理するジョブの数で、CPUなどのデバイスの利用効率に比例する。


ラウンドロビン方式では、かかる時間の短いジョブが優先されることとなる。

SRPT方式はSPT方式の変形である。

SPT・SRPT方式は、平均応答時間を最小にする。

スケジューリング方式によって、応答時間は大きな影響を受ける。

一般に、応答時間を短くするという要求と、利用効率を改善するという要求は相反する。

自分でスケジューリングをやってみた。
同一のスケジューリング方式の下では、応答時間と利用効率は、ほぼ反比例の関係にある(単一サーバーシステムでも、マルチサーバーシステムでも)

単一サーバーシステムとは、CPUやI/Oなどの能動的な入出力機器が1個のシステムを言う。

マルチサーバーシステムとは、複数個のサーバーを持つシステムを言う。

マルチサーバーシステムでは、サーバー間で干渉が起こる(1つのサーバーにジョブが集中してしまい、他のサーバーが遊んでしまう)ことにより、無駄な待ち時間が生じてしまう。この待ち時間をスケジューリング方式によって減少させられれば、応答時間の減少と利用効率の向上を同時に実現できる。

マルチプログラミングの主要な目的は、リソース利用の向上またはジョブのスループットの増加である。

一般に、マルチプログラミングは利用効率(ジョブのスループットと比例する)を最大にすることを目的とする。

一般にタイムシェアリングシステムは応答時間を最小にすることを目的としている。

利用効率と応答時間以外の性能評価基準
(1) 予測性
    平均としては短いがばらつきの大きな応答時間より、安定した応答時間が好まれることもある。
(2) 公平性
    あるジョブが無期限に塩基されるのは不公平で…

岩波講座 ソフトウエア科学6「オペレーティングシステム」#3

CPUスケジューリング

プロセスは、
(1) 実行中
(2) 実行可能
(3) 待ち状態
のいずれかの状態になっている。

CPUスケジューラー = ディスパッチャーである。

あるプロセスに割り当てられた時間をクオンタムと言い、クオンタムが終了すると、実行中から実行可能状態に移行させられる。

クオンタムは、タイムクオンタム、タイムスライス、量子時間とも言う。

待ち状態は、ある条件(I/Oや他のリソースが空くのを待つなど)が成立していないといけない時にとる状態を指す。

実行可能状態から待ち状態への移行は、プロセス自身によってなされる。

待ち状態から実行可能状態へは、他のプロセスからのSIGNAL命令によって移行させられる。

SIGNAL命令とは、他のプロセスを起動させる(実行可能状態にする)命令である。

プロセスは3つの状態それぞれのキューに入っている。

プロセッサーの数に依らず、この考えは適用できる。

CPUをあるプロセスから別のプロセスに切り替える方式は2つある。
(1) イベントドリブン
(2) タイムスライシング

イベントドリブンとは、システムの状態が変化したのを、割り込み機構により切り替える方式である。

割り込みで割り込まれたプロセスは、割り込まれたことを感知しない。

タイムスライシングは、時分割とも言う。

タイムスライシングでは、システムの状態変化とは無関係にプロセスを切り替える。

タイムシェアリングシステムの実現には、タイムスライシングが必要である。

タイムスライシングでは、インターバルタイマーにより、ウオンタムが終わったら割り込みを発生させる。

マルチプログラミングシステムの性能を向上させるためには、イベントドリブンにタイムスライシングを組み合わせることが効果的である。

マルチプログラミングは、イベントドリブンのみで実現できる。

マルチプログラミングにタイムスライシングを導入すると、性能が向上する。

タイムシェアリングシステムにイベントドリブンを導入すると、リソース利用効率を向上できる。

各プロセスは見た目上はCPUを独占しているようであり、このようなCPUを仮想CPUと呼ぶ。

仮想CPUは、実際のCPUよりも実行速度は遅いが、独自のレジスターを持ち全ての命令を実行できるCPUととらえて良い。

システムコールは、I/Oを要求する等のために呼ばれるもので、スーパーバイザーコール(SVC)によって行われる。

スーパー…

岩波講座 ソフトウエア科学6「オペレーティングシステム」#2

第1章 オペレーティングシステムとは コンピューターの分類をしている箇所があり、その中の一つとして「実時間処理用コンピューター」と言うのが挙げられている。 今の状況で考えると組み込み用のコンピューターのことを指していておかしくないのだが、なんとなく、ここでは違うものを指している ような気がする。しかしプロセス制御用コンピューター(process computer)と言うのも別に挙げられているため、 これとは違うと考えると、やはり組み込み用途のものを指していると考えるべきかもしれない。 バッチ処理、オンライン処理(リアルタイム処理とも言うと書かれている)、タイムシェアリング処理、分散処理というように、 ジョブの処理形態を分類してる箇所がある。 そこで、オンライン処理では「保安性」に細心の注意を払う必要があると書かれている。 保安性という用語は、少なくとも現在では一般的な用語ではないように思われる。 システムの運営に、信頼性と並んで必要なものとして挙げられているため、可用性を指しているのかもしれない。 「プロセス」の定義を「ユーザーの代理」として、これが現代のオペレーティングシステムを考える上では最も適切であるとしている。 「実行中のプログラム」と言う定義は、歴史の初期のものとされている。 プロセスを「ユーザーの代理」とする定義が現在主流であるような気がしないのだが、この書籍ではこのような定義であることをきちんと覚えておきたい。 ちなみに「オペレーティングシステムの基礎」大久保 英嗣 著(1997年刊)という書籍が手元にあるが、プロセスは「特定の仕事を遂行するために一連の操作系列を実行する活動のこと」としている。 オペレーティングシステムの定義として「ハードウェア資源であるCPU、主記憶、二次記憶、入出力機器をユーザーが必要とするだけ仮想的に作り出し、 しかも場合によってはそれをハードウェアそのものよりも使いやすい形で提供する」ものとしている。 そして、これを「仮想化」と呼びこととしている。この書籍はこの仮想化について述べているとしている。

岩波講座 ソフトウエア科学6「オペレーティングシステム」#1

最初にコンピューターを使ったのはFujitsu Micro 8 (FM-8)だった気がする。 F-BASICしか使わなかった。 次にはエプソンQC-10IIというCP/Mか何かが動くマシンを使った記憶もある。 私が最初にOSとして独立したものを使ったのは、このCP/M風のものだったのだろう。
あれから30年以上、コンピューターとオペレーティングシステムを使っている訳だが、 コンピューターについても、オペレーティングシステムについても、 良く理解しているとは言えないように感じている。 コンピューターサイエンスについてもちゃんと体系的に学ぶ機会はなかった。 だが、オペレーティングシステムについて、学びたいとは長く思っていた。
今、手元に「岩波講座 ソフトウエア科学6『オペレーティングシステム』前川 守 著」と言う 35mmほどの厚さの書籍がある。 これの全てを理解することを目標に、読んでいきたい。

「まえがき」について 一般のユーザーの言うオペレーティングシステムは、以下ようなものが含まれているらしい。
ユーザーインターフェイスウィンドウシステムネットワーク機能リアルタイムシステム機能エディター文書処理機能コンパイラー
ここで、分からないのは「リアルタイムシステム機能」である。 「エディター」と「文書処理機能」は、UNIXを意識したものであろう。 UNIXにはedやviといったエディターがあるし、 文書処理ソフトウエアであるroffはUNIX V7にも含まれていたはずである。
リアルタイムと言うと、最近の文脈で言えば、リアルタイムオペレーティングシステムというのがある。FreeRTOSやRTEMS、eCosなどである。 思い出すと、UNIXにもUNIX-RTやUNIX-RTRというのがあったので、それを意識してのことかもしれない。
だが、少なくとも現在では、RT-LinuxやINTimeなどはあるものの、汎用オペレーティングシステムにリアルタイムオペレーティングシステムの機能は含まれないと言って良いように思う。INTimeは使われている製品を使ったことはあるが、Windowsとどう統合されているか分かっていないので、的外れかもしれないが。
一方で、NetBSDでもlibrt (POSIX Real-time Library)というのはあって、 s…

modular X.orgなNetBSDマシンからssh -Yで接続して、X11 forwardingする場合

NetBSDのxsrcのfontconfigが新しくならないので、最近は、X11_TYPE=modularでpkgsrcを使っている。つまり、pkgsrcからX.orgをインストールしている。 そうやって生活していく中で、自分のNetBSDマシンのX serverにリモートマシンのXアプリケーションのウィンドウを表示させようとした場合に、 これまでやったことのない設定が必要だったので書いておく。 そもそもOpenSSHというのはいやに奥が深くて、全く分かったような気にならない。 よくあるX11フォワーディングの際の設定というのは、リモートマシンがmodular X.orgの/etc/ssh/sshd_configに以下のように記述することである。 X11Forwarding yes XAuthLocation /usr/pkg/bin/xauth 今回問題になったのは、X server側、つまり手元のマシンの設定である。リモートマシンをmodular X.orgにしたことは何度もあったのだが、手元のマシンをmodular X.orgにしたのは 経験がなかった。 このような場合には、手元のマシンの/etc/ssh/ssh_configファイルに以下のような設定が必要になる。 XAuthLocation /usr/pkg/bin/xauth こうしないと、ssh -Yvvv remotehostnameを実行した場合に、以下のような表示になってしまう。 debug1: No xauth program. Warning: No xauth data; using fake authentication data for X11 forwarding. debug1: Requesting X11 forwarding with authentication spoofing. そして、 $ echo $DISPLAY localhost:11.0 のように表示されているのに、 $ xhost Invalid MIT-MAGIC-COOKIE-1 keyxhost: unable to open display "localhost:11.0" のように表示されてしまう。

CLIP STUDIO PAINT EXのフィルタープラグインとVisual Studio Community 2017

はじめに http://www.clip-studio.com/clip_site/download/clipstudiopaint/cspsdk にCLIP STUDIO PAINT EXのフィルタープラグインSDKと言うのがあって、 CLIP STUDIO PAINT EXにC++で独自のフィルターを書けるようになっている。 まあ、CLIP STUDIO PAINT EXとのインターフェイスの部分だけC++であれば、 別に全てをC++で書く必要はないだろう。 Visual Studio Community 2017でビルドしてみる 文書によると、フィルタープラグインはVisual Studio Expressではビルドできないそうである。 これは、実際に附属のサンプルをビルドしてみれば理由は簡単に分かった。 MFCが必要なのである。 なので、Visual Studio Community 2017ではMFCをインストールしておけば 問題なくビルドできる。 ライセンスの考察SDKのライセンス上、自作のフィルタープラグインをオープンソースな ソースコードを再利用できるか、オープンソースで開発できるか考えてみる。 copyleftなライセンスだと、SDK付属のヘッダーファイルとは混ぜられないし、SDKの再発明は禁止されているので、copyleftなライセンスのコードは採用できないだろう。 copyleftなライセンスの場合には、フィルタープラグインの配布はセルシス社のプラットフォーム上に限定されているので、 そもそもソースコードの配布ができるのかを確認しておかないといけないと言う課題もある。 現実的に考えて、copyleftなライセンスなソースコードを再利用するのは無理であろう。 BSDライセンスやMITライセンス等であれば、外部のソースコードを再利用することも可能だろう。 ソースコードを公開するとしたら、SDK由来のコード(ヘッダーファイル等)は含めることができないのは間違いない。 その上で、セルシス社のプラットフォーム上でソースコードを公開できるのかどうかに、ソースコードを公開できるかは依存していると考えられる。 現実的ではないような気もする。

Git for Windowsでgit statusの表示中のパスの日本語文字列が文字化けする場合の対処方法

Git for Windowsは、Git bashのみで使っている。 基本的にはGit bashの内部で困ることはないのだが、 唯一パスに日本語の文字列が含まれている場合に文字化けしてしまって 判別できないのが不満だった。 ~/.gitconfigに、以下のように追加すれば文字化けはなくなった。 $ vi ~/.gitconfig [core] quotepath = false

電話サービスの通話料の比較

NTT加入電話への通話料SMARTalk8円/30秒みおふぉんダイアル10円/30秒ひかり電話8円/3分 こう比較すると、自宅のひかり電話の回線から発信できるような仕組みを作りたくなってしまう。

Oracle OLEDB Provider Version 12.2.0.1.0 for Windows x86をインストールする際のエラー

Image
Windows 7 Professional 32-bitに、Oracle OLEDB Provider Version 12.2.0.1.0をインストールするには、 例えば、C:\app\instantclient_12_2に必要なDLLを揃えて、PATH環境変数にこのディレクトリーを追加した後で、 regsvr32 C:\app\instantclient_12_2\oraoledb12.dllを実行すれば良い。 しかし、「指定されたモジュールが見つかりません。」のエラーが出ることがある。 こうなるとOLEDB Providerは登録されないので、OLEDB経由でOracle Databaseに接続することはできない。 これは、Visual C++ 2013 redistributableを インストールすることで解消された。

Is it time for open processors?

Is it time for open processors? を読んだので翻訳しておく。 ただし、正しく訳せているとは思わない。 これは、 Jonathan Corbet氏による2018年1月9日のlwn.netにおける記事で、 Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) で公開されている。 Is it time for open processors? MeltdownとSpectreの2つの脆弱性の公開により、 ハードウェアレベルのセキュリティー上の問題が存在し得ることに、 改めて注目が集まっている。 ソフトウェアの脆弱性に関しては、まだ脆弱なソフトウェアのセキュリティー の解消のために非常に多くの努力がされているが、 ハードウェアな脆弱なままであれば、全て無駄な努力である。 私たちのシステムを動かしているCPUは、高度にプロプライエタリーであり、 嬉しくない驚きを内包していることが示されている (例えば、Intel Management Engine)。 そうなると、ソフトウェアがそうであったように、 オープンソースハードウェアに移行しようという動きがでてくるのは当然だろう。 オープンソフトウェアハードウェアへの移行は可能かもしれないし、 確かに利点はあるが、それで全てが解決する訳ではないだろう。 現代のCPUは複雑であり、販売されている市場は過酷な状況である。 オープンなやり方でCPUを開発しようと言うのは驚かれるかもしれない。 しかし、この分野でもオープンな開発を進める動きはある。 オープンなCPUと言う考えは、ファンタジーではない。 以下に、いくつかの事例を紹介する。しかし網羅的なものではない。 既に公開されているもの POWERアーキテクチャーを元にしたOpenPOWERの事例を見てみよう。 これは真にオープンソースではない。 主体的に利用するのであれば、OpenPOWER Foundationに加盟しなければならない。 しかし、プロセッサーを共同作業として開発するという例ではある。 比較的オープンな設計に基づいた製品が出荷されている。 OpenPOWERは、ハイエンドに特化している。 この設計に基づいたチップが、近い将来携帯電話やノートP…