2017-01-01から1年間の記事一覧

x86_64アーキテクチャ

制御の移譲(=control transfer) 制御の移譲とは、現在実行されているプロシージャー(=procedure)の実行を中断して、別のプロシージャーを実行すること。制御を移譲する手法は、 コール(=call) ジャンプ(=jump) ハンドラ(=handler) の3種類ある。プロセ…

x86_64アーキテクチャ

タスク タスクは、プロセッサがディスパッチ(=dispatch)・実行(=execute)・中断(=suspend)を行う処理単位。プロテクティッドモードでは、すべての処理はいずれかのタスク内で行われる。そして、OSは少なくとも一つのタスクを作らなくてはならない。タスク…

x86_64アーキテクチャ

割り込み・例外 割り込みや例外の発生は、システム中にある特定の状態が生じたことを示す。割り込みは、ハードウェアからの信号等により、プログラムの実行と非同期に(ie. ランダムなタイミングで)起こる。また、INT命令(INT n, INT 3, INTO)を使うことで、…

x86_64アーキテクチャ

プロテクション Intel 64アーキテクチャでは、プロセッサレベルで、様々な保護機構(protection)が用意されている。これを用いる事で、OSは、カーネルをユーザーアプリケーションから保護したり、カーネル自身のバグによってカーネルが壊れるのを防いだりして…

x86_64アーキテクチャ

メモリアクセス(続き) ページング(=paging) メモリ領域を分割する方法には、セグメントの他にページングがある。セグメントが、意味のある区切りでメモリを分割したのに対し、ページングは、メモリを決まった大きさに分割する。ページングはセグメントと対…

x86_64アーキテクチャ

メモリアクセス protected modeと64-Bit modeではメモリアクセスの方法が(少し)異なる。protected modeでは、セグメントと(オプションで)ページを使って、物理メモリ(=physical memory)にアクセスする。一方で、64-Bit modeでは、セグメントが実質的に…

x86_64アーキテクチャ

アーキテクチャの種類 Intel developer's manual (以降、IDMと略す) vol-1 ~ vol-4をざっと読んだので、内容を忘れないうちにメモ。この後は、パタヘネ本を読んでいこうと思う。というのも、IDMでは、「アーキテクチャ」が説明されている。だから、実際の実…

LaTex例集

\[ A = \left ( \begin{array}{r|cl} abc & bcd & cde \\ \hline d & e & f \\ g & h & i \\ \end{array} \right ) \]

二端子対回路

二端子対回路の各種パラメータの説明は、以下のサイトがわかりやすい。 http://web.sc.eis.akita-pu.ac.jp/~xuli/2port_circuit.pdf Zパラメータ行列とYパラメータ行列は、逆行列の関係にあると思う。Zはインピーダンスの意味で、Yはアドミタンスの意味。こ…

高周波回路入門メモ

今月のトラ技は無線特集をやってる。僕も少し前に無線に入門しようとしたことがあったのだが、どうも理解ができずに挫折してしまった。この際、再度入門に挑戦してみる。 無線の世界(RFワールドというらしい)には、高周波回路がつきもので、高周波回路には…

はてなブログ 自己流フォーマット

毎度書き方に迷ってしまっているので、はてなブログでよく使う書き方をまとめておく。 リスト付き見出し - # heading ソース付き引用 > content ... <br />[link] 連続して引用 (<span></span>を使う方がいいかも) > content ... > content ... 注釈 <sup><a href = "#num">*num</a></sup> ... <span id = "num">topic</span> : conten…

Virtual networkについて

www.innervoice.in Linux bridgeはあくまでbridge(トランスポート層に属しておりMACアドレスを見る)だから、vNICにもDHCPサーバーからIPアドレスが割り当てられる。さらに、外部ネットワーク(インターネット等)にも接続できる。 www.innervoice.in Tap in…

Docker for Macでswarmを使う

docs.docker.com このチュートリアルに従って、Docker for Mac上でswarmを試した時にはまったのでメモ。 チュートリアルのように、virtualbox vm上のdocker-machine上で起動したデーモンをmanager nodeとして使う場合には問題にならないが、Docker for Mac上…

Dockerの概念図

Dockerを使っている中で、多くの概念があり混乱しそうなのでまとめておく。引用部の周囲の文章は、引用の翻訳でない。 チュートリアル docs.docker.com 全体像 大雑把に言って、コンテナ->サービス->スタックという階層構造(hierarchy)になっている。 サー…

dockerのIPアドレス

docs.docker.com このチュートリアルをしていたらIPアドレス関係のところではまったのでメモ。 チュートリアルでは、docker run -p 4000:80 friendlyhelloの後に、localhost:4000でサーバーにアクセスしようとしているけど、僕のWindows環境("Docker Quick S…

VisualStudio + Azure SQL (Free)

docs.microsoft.com このチュートリアルに従ってアプリを作り、Azureにデプロイしようとしたところで大きくつまずいたのでメモ。 チュートリアルでは、Profile生成時にSQLサービスを追加している。このときのデフォルトのPricingはFreeではないので、デプロ…

gtags + pygments

WSLでc#のタグファイルを作ろうとしたところ、はまったのでメモ。 c#はデフォルトのgtagsでは対応していないので、pygmentsというプラグインを使ってタグを作る。Exuberant Ctagsとpygmentsのインストール方法はほかのサイトを参照。 qiita.com インストール…

PostgreSQL事始め

PostgreSQLを使い始めたので、備忘録として残しておこう。 インストール brew install postgresql 起動 brew services start postgresql brew servicesでデーモンを管理できる。 pg_ctl -D {database directory} start でも起動できる。 以下、デーモン起動…

CPPの右辺値参照・ムーブセマンティクス〜その3〜

cpp

前回の投稿で「ムーブ」の意味があやふやなままになってしまったので、ここで探ってみる。スマートポインタを使うが、それについては深く触れない。 struct hoge { std::shared_ptr<int> ptr; hoge(int val):ptr(new int(val)) {}; int getCount() { return ptr.u</int>…

CPPの右辺値参照・ムーブセマンティスス(その2)

cpp

前回の投稿に引き続き、もう少し遊んでみる。この投稿の内容は、 stackoverflow.com を参考にした。僕自身、あまり理解できていない気がするので、間違っていたら教えてください。 今回もやはり例を挙げて説明したいので、以下のような状況を想定する。 #inc…

CPPのvirtualデストラクタ

cpp

2. Kaleidoscope: Implementing a Parser and AST — LLVM 7 documentationでvirtual修飾子のついたデストラクタに出会った。いままで知らなかった(もしくは、忘れていた)ので、メモ。c++ - When to use virtual destructors? - Stack Overflowを参考にした…

CPPの右辺値参照・ムーブセマンティクス

cpp

この内容についてはすでに多くの記事がネット上にあるけど、自分の理解を深めるために(役に立つかわからない)記事を投稿することにした。詳細は他の記事に任せて、ここでは例をあげるだけにする。 右辺値参照やムーブセマンティクスを使わないで書くと、 #…

モナドの遷移

モナドファミリーの操作を図にしてみた。僕が言うのもオコガマシイが、図で満足せずにソースコードをみると、さらなる発見があって面白い。気になったモナドは、Hoogleで「ホグれ」。 一般のモナド ErrorT 大事なことは、ErrorT eでも、ErrorT e m aでもなく…

runSTの型

Lazy Functional State Threads(http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.144.2237&rep=rep1&type=pdf)を読んだので、メモしておく。 runSTは特徴的な型を持っているけれど、それはどうやらスレッド的な安全性のためらしい。文章で色々…

自由変数の決定(その3)

前回までの投稿で、Scheme(Gauche)ではレキシカルスコープが使われていることが分かった(たぶん)。そもそも、自由変数がどう決定されるのかを調べ始めるきっかけは、Schemeのマクロ内の自由変数がどう扱われるかをみるためだったので、それについても書い…

自由変数の決定(その2)

前回の投稿後に、それぞれの言語の挙動をもう少し調べてみた。 Scheme (define (hoge) (print var)) (define (fuga) (let ((var 1)) (print var))) (define var 2) (hoge) ;=> 2 (fuga) ;=> 1 (set! var 3) (hoge) ;=> 3 (fuga) ;=> 1 python def hoge(): pr…

自由変数の決定

schemeのマクロを勉強している時に、 1 (define-syntax mcr 2 (syntax-rules () 3 ((_) (print var)))) 4 5 (define (fnc) (print var)) 6 7 (define var 2) 8 (mcr) 9 (fnc) 10 (set! var 3) 11 (mcr) 12 (fnc) の実行結果が、 2 2 3 3 なのが衝撃だった。…

終わりよければすべてよし

CLIプログラムを立ち上げたのはいいけど、終了コマンドがわからなくて、仕方なくCtrl-Cということが多いので、僕が使っているプログラムたちの終わらせ方をメモメモ。 gosh (exit) coqtop Quit. ghci :q ipython quit cling .q psql \q

rlwrapだった

goshやcoqtopなどのCLIプログラムは、履歴機能や補完機能が使えない。そういう時にはrlwrapでラップして使えば幸せだよっていうだけの話。こういうプログラムがあるのは知っていたが、名前が出てこなかったので、ずっと使えずに不便していた。 自作プログラ…