「嘘つきな」現代電脳
現代のコンピュータは,
- プログラムをカーネルプロセスとユーザプロセスに分ける
- ユーザプロセスから読み書きできるのはレジスタとメモリだけで,
他プロセスを含めほかには何も存在しないふりをしている - ユーザプロセスがレジスタとメモリ以外の何かにアクセスしたいときには,
カーネルにお願いする (システムコール)。カーネルにやってほしいことをレジスタとメモリに書いたうえで, CPUをカーネルプロセスに明け渡す - CPUを明け渡されたカーネルプロセスはプロセスのお願いを実行したあと,
その結果をレジスタとメモリに書いてCPUをユーザプロセスに戻す - CPUにはカーネルにしか実行できない
(特権) 命令が用意されており, ユーザプロセスがそれを実行しようとするとエラーになる。もう少し厳密には, エラーであることを示すデータをレジスタとメモリに書いてからCPUをユーザプロセスに戻す
これを1秒間に何千回と繰り返すことで,
もし
当然,
「えいえい! おこった?」
こういう問題が存在すること自体はずっと以前――本誌Software Design創刊以前――から知られていましたが,
コードから見えるCPUと実際のCPUの乖離が大きくなったのが一番の原因でしょう。今回問題となったのは,
投機的実行の好例は,
「とりあえずやっておいて,
次にキャッシュ。
そのメモリより外部記憶はさらに遅く,0xdeadbeef
の内容がどこにあるかは神ならぬCPUぞ知るなのです。
そしてCPUと同様,
これを防ぐには
余談ですがmacOSはv10.
「計算機科学に難問は二つだけ。名前付けとキャッシュ無効化だ」
ソフトウェアではデザインしきれない時代
プログラマから見えるCPUが30年前からほとんど進歩していないことを我々は呆れるべきなのか褒めるべきなのか。そこにはキャッシュも存在しなければ,
本誌最新号をチェック!
Software Design 2018年4月号
2018年3月17日発売
B5判/
定価
- 第1特集
自分で構築するか,APIで機能を使うか
機械学習の始め方 - 第2特集
脱・手順書!
Pythonマイツール作成で仕事効率化 - 一般記事
社会インフラシステムを支えるLinux その信頼性はどのように維持されているか
Civil Infrastructure Platformプロジェクトの取り組み - 一般記事
[短期連載] 実践! GPUサーバでディープラーニング
【2】 ディープラーニングにおける計算資源の重要性 - 一般記事
[短期連載] ARKitとUnityで作るiPhone ARアプリ集中特講
【4】 猫とのやりとりとUI追加