オペレーティングシステム 「第1単元 OSの概要と歴史」

最近、生涯学習とか大事だよな〜と思っており、いくつかのmoocを覗いています。

その中でお仕事関連でOSについて学ぶため、「オペレーティングシステム」の講義を受講してみました。

まずは第1単元 OSの概要と歴史について気になったことや為になったことをまとめてみました。

オペレーティングシステム2020:F00000131 - Fisdomホームページ

ちなみに、fisdom今年の9月でサ終なんすね。。。始めたばかりなのに。。。

www.jmooc.jp

OSの概要

OSとはなんぞや。「使いづらい計算機を効率よく利用するためのもの」

  • 使いづらい計算機とは
    ディスク上に保存したデータを直接見るとディレクトリ構造なんてないし、計算ロジックのキーとなるCPUをそのまま使うのは難しい。
    そのあたりの特性を隠蔽して利用者が使いやすいようにする。

  • 効率よく利用とは
    動的なメモリアロケートとか、マルチユーザに対して適切にプロセスを振り分けたり、動作が遅いI/O機器にCPUが引っ張られないようにするなど
    計算機のリソースを効率的に利用する。

OSの歴史

なぜ歴史?

OSの歴史はハードウェアの刷新と切っても切り離せない関係があるため。
なぜその機能があるのかを理解するために必須。

1940年代(プログラマブルではない計算機から。。。)

この時代はリアルハードコーディング(プログラムごとに配線をし直していた)

それを変えたのが「EDSAC」
管の中に水銀を満たして片側から超音波のパルスを与えると、 超音波は水銀中を伝わって反対側に届き
これを電気信号に変えてまた超音波のパルスにして管に戻し、 水銀の中で循環する超音波のパルスとしてデータを記憶させていた。

参考 : https://www.komazawa-u.ac.jp/~takai/kougi/EC.pdf

これにより、プログラムはこの水銀遅延管のデータを読み込む形に変わり、以降はこの形式(ストアードプログラム方式)に変わっていった。

1950年代前半(真空管の時代。OSはまだ登場していない)

この時代は計算機を動かす人と、計算機にプログラムをする人と、計算機を保守する人がすべて同じで
その人が計算機を独占していました。

真空管もすぐ壊れて(利用している個数が多いため、そのうち一つが壊れるのも時間の問題で)信頼性も低かった。

なお、最初に作成された商用計算機のUNIVAC 1を作成した会社は経営統合の末、UNISYSになっている。

UNIVAC - Wikipedia

1950年代後半〜60年代前半(トランジスタが実用化。ジョブバッチ処理の時代へ)

1956年にノーベル物理学賞を受けたトランジスタは、1947年には発明されていたものの真空管に一歩遅れて1954年に製造開始。

めちゃ高い計算機だが、作業員が手作業で操作していたため計算機の稼働が止まっていることもしばしば。
ひと塊の処理をジョブと定義し、それをひとまとめに投入する処理をバッチ処理とし、ジョブのバッチ処理を行うためにOSのようなものが作られた。
パンチカードをひとまとめにし、オペレーター(人間)の代わりにOSにジョブを渡して、OSが適宜計算機にジョブを打ち込んで結果を受け取る。
そのジョブを管理する言語をJCLという。また、この時代にFORTRANCOBOLが生まれている。

1960年代〜70年前半(IC!計算機高速化!ディスクは遅い!そして、計算機のアーキテクトが各社でバラバラ!)

トランジスタの小型化が進み、トランジスタを集積したICが登場。計算機は高速化。
ただ、ディスクがそれに比べてめちゃくちゃ遅いため、入出力がネックになってきた。めっちゃプロセッサ遊んでるわ〜。

じゃあ、あるジョブの入出力待ちのときに、他のジョブをプロセッサ上で動かしましょう。マルチプログラミング
ジョブの入出力が終わったときに、次のジョブしたいしどう知らせようか?割り込み
複数のジョブが単一のプロセッサ上で並行で動いててややこしい!スケジューリング
あるジョブが、他のジョブのメモリ上のデータを見ちゃうことない?保護機構

IC時代のOS OS/360

アーキテクト合わせましょう!SYSTEM/360 IBM
安い計算機から高性能な計算機に移行するのが容易!やったね。アポロ11号でも使われたらしい。
SYSTEM/360上で動くのがOS/360。マルチプログラミングもできるよ。

IC時代のOS Multics

1964年からGEとAT&Tベル研究所が共同で開発(1969年にベル研究所は離脱しUNIX開発へ)

高可用性を目指して様々な機能が盛り込まれ、電話や電力サービスのような「コンピュータ・ユーティリティ」を目標としていた。
そのためソフトウェア構造のモジュール化だけでなく、ハードウェアもモジュール化され、必要なリソース(計算機能、主記憶、ディスク装置など)を追加するだけで拡張可能な構造を目指した。
ファイル毎のアクセス制御リストによって柔軟な情報共有が可能だが、必要に応じて完全なプライバシーも提供できる。技術者がシステムの性能を分析できる機構も標準で組み込んでいて、様々な性能最適化機構も組み込まれた。

ただ、時代がハードウェアが追いついてなかった。現在の計算機システムの基盤となる機構が多く含まれる。

Multics - Wikipedia

IC時代のOS UNIX

1969年からAT&Tベル研究所で開発スタート。言わずもがな。みんな大好きUNIX

プログラマに重点をおいた開発。

1970年代〜80年代 (LSI時代)

半導体技術が進歩したものの、人間の要求も進化。。。

TSSや多重仮想記憶など、複数人が同時に計算機を利用するための技術が発展。CPUのマルチコア化や仮想化がより進んだ。

仮想記憶方式とは、ユーザからは主記憶装置より大きなデータが見えるが、主記憶装置上には必要なデータのみを保持し、それ以外をディスクなどの補助記憶装置上に保管する方式。
それにともない、フラグメンテーションの解消や記憶保護などが実装される。

1990年代(分散処理・ネットワークの時代)

プロトコルなどが・・・

2000年代(分散処理・クラウド保有から利用へ)

計算機リソースの保有から、手元になくても利用できるように。。。

chromebookのセットアップ時に使ったもの

昨日、以下のchromebookを購入したので、その際に必要になった設定とかを備忘録として記載します。

ちなみに、私は英字配列のキーボードを購入しています。仕事でもプライベートでも英字配列のキーボードを利用しているので。

スクショのとり方

この記事を記載するためにも調べました。

「Ctrl+Shift+すべてのウィンドウを表示キー」になります。 chromebookはFnキーがない代わりに、特定の機能が設定されているボタンがあります。

www.google.com

scrollの反転(macbookと同じ方向に合わせる)

参考 : Chromebookのタッチパッド・マウススクロールの方向を逆にする方法 | むろすブログ Chromebook のタッチパッドを使用する - Chromebook ヘルプ

keyboardの設定(英字キーボード特有)

自分は英字キーボードを利用しており、初期設定では日本語キーボードの設定になっていたので、別途対応必要。

設定ー>詳細設定ー>言語と入力方法 と選んできて、「入力方法を選択」 f:id:fk1jp:20210324125824p:plain

「入力方法の追加」をクリック f:id:fk1jp:20210324125813p:plain

「日本語(US)キーボード」と「英語(アメリカ)」を選択し、「追加」をクリック f:id:fk1jp:20210324125808p:plain

そうすると、以下のように4つの入力方法が記載されている f:id:fk1jp:20210324125616p:plain

日本語配列の入力を削除(右の☓ボタンをおして) f:id:fk1jp:20210324125609p:plain

support.google.com

MySQLを根っこからじっくりと

0. 初めに

インフラエンジニアとして早6年。その中でもMySQLは切っても切り離せない存在となっています。

私がインフラエンジニアになった時から既にそうであったのですが、最近のミドルウェアは軽く動かすだけであれば、正直インストールして起動するだけで問題ないです

なので所謂スタートアップ系とか軽めのアプリケーションには、もうインフラエンジニア専業の奴はいらなくなってくるんじゃないかと思っています。(下手な使い方して、動かないとかはあると思いますが、どっちみちエラーログ見てググるだけなので、それなりのサーバサイドエンジニアであればできますし...)

自分は数万rpsや数千qpsの負荷を裁く必要があるサービスを扱う都合上、多少は深くミドルウェアを触っておりますが、
触る部分といえばmy.cnfの中身からbinlogを吐き出すディスクの分散程度です。もっと根っこのところは正直よくわかっておりません。

より深掘りして、根っこからいろいろ理解したい。というモチベーションで少しずつ記事を書いていこうと思っています。

1. 構成

ごりっごりに自分が気になる箇所をいっぱい書いてやろうと思っています。
また、このページに全部書くと大変なことになりそうなので、1テーマにつき1記事に分けて書いていこうかと考えています。

まずは、テーマ決めから...

1.1 ibdファイルの中身について

まずは、どのような仕組みで書き込まれて行っているのか。また、deleteされた際の挙動などが気になっています。

ファイルフォーマットのAntelopeやBarracuda周りも調べたい。

innodb_flush_method周りも調べてみたい。

1.2 木構造やインデックス

インデックス。張ればいいって話じゃない。どういう構造でインデックスが張られているのか。というところから調査したいと思っています。

また、query optimizerの挙動が変わる箇所なども気になっています。show engine statusやExplain 周りの挙動も含めて確認する形になるかと考えています。

1.3 InnoDBMyISAM

なんやかんやで最近はInnoDB使ってるけど、MyISAMとの違いやトランザクション分離レベルの話も触れたい。

参考 MySQL の Repeatable Read と RocksDB の楽観的トランザクション解説 | 株式会社インフィニットループ技術ブログ

多分、innodbの仕組みを詳しく調べるだけでも1記事作れそう。

Lockの仕組みも見たい。

1.4 GTIDとPosition Based Replication の違いや詳細

binlog/relaylogのとりかたから、それぞれの特徴をざっくりまとめたい気持ち。

1.5 InnoDB Cluster

各機能の挙動や、マスター昇格する際の挙動やスレーブ復帰の処理などを詳しく調べたい。

あと、ここが欲しかったというポイントも

1.6 Internal Temporary Tableについて

これに関してのbugを踏んだこともあり、内部テンポラリーテーブルについて知見を深めたい

これとかは参考 第129回 Internal Temporary Table(内部テンポラリテーブル)について[その1]:MySQL道普請便り|gihyo.jp … 技術評論社

1.7 doublewrite buffer

1.8 5.6以降の各バージョンの比較

【mundi先生】世界史20話プロジェクト004 古バビロニア・インドヨーロッパ系民族

前回の続きから動画を見ていきます。

www.youtube.com

あらすじ

人・旧石器時代

猿人・原人・旧人・新人

--- 1万年前 ---

新石器時代

農耕や牧畜を行って、雨水を元に乾地農法
灌漑農法 -> 安定した生産。権力や文明が生まれる

古バビロニア王国

アッカド人を征服

セム語系のアムル人が建国

ハンムラビ王 ・・・ 古バビロニア最盛期の王

ハンムラビ法典制定

特徴

  • 復習法(目には目を歯に歯を)
  • 身分法(奴隷に対して行った罪は軽くなる)

古バビロニア王国は、小アジアから来た異民族によって滅ぼされる

インド=ヨーロッパ系遊牧民の侵入

小アジアに国家建設

古バビロニア王国を征服

馬に乗り、戦車を使用

鉄製武器を使用 ヒッタイト=鉄!

エジプト(新王国時代)と戦うことになる カデシュの戦い

ヒッタイトは【海の民】に滅ぼされる

  • ミタンニ

メソポタミアの北方の山岳地帯を支配したミタンニ人が建てた国 しかし、ミタンニを構成していた多くの人々は、もともとコーカサス地方にいたフルリ人(フリ人ともいう)であったという。

コーカサス地域とはカスピ海黒海に挟まれた地域でコーカサス山脈と、それを取り囲む低地からなる面積約44万km2の地域である。
コーカサスの漢字表記は高加索。北にロシア南にトルコがありジョージアアゼルバイジャンアルメニアがあります。

参考 : https://www.y-history.net/appendix/wh0101-026.html https://www.y-history.net/appendix/wh1301-058.html

ちなみに英語のコーカサス、ロシア語のカフカースとも古代ギリシア語: Καύκασος (Kaukasos; カウカーソス)に由来する。 「カウカーソス」自体は、プリニウス『博物誌』によるとスキタイ語クロウカシス(白い雪)の意である。

ja.wikipedia.org

名に「コーカサス」とあるが、コーカサス地方に生息しているわけではない。(「caucasus:コーカサス」とは、古代スキタイ語「白い雪」を意味する「クロウカシス」に由来するギリシア語で、コーカサスオオカブトの上翅にある光沢から名付けられたもの。)

ja.wikipedia.org

前14世紀には王家に内紛が起こったことと、ヒッタイトと戦って敗れたことで衰退した。

情報集められませんでした。

GAFA 世界を席巻するプラットフォーマー

「2020年3月増刊号 最新時事用語&問題」 から、気になったことを書いていこうと思います。 Amazon CAPTCHA

今日は「経済・金融 1」の「GAFA 世界を席巻するプラットフォーマー」をちょいと調べてみます。

概要

GAFAとは・・・

以下の4社の頭文字をとったもので、特に米IT企業の中でも巨大で影響力も大きい企業を指します。

業界的にもこれらとの関わりもかなり深いため、奴らの凄さはみにしみます。(Facebookは最近よく知りません。)

あと、Microsoftも含めたGAFAMやFAMGAなどの呼ばれ方をするのもありますね。

プラットフォーマーとは

これもキーワードと思います。

例えばスマホにしても、現状はiOSAndroidの二強(black berry? windows phone? tizen?...)で、その上で動くアプリは他社が作って、その中で課金ができて儲けれる。とか

SNSにしてもFacebookはユーザの情報をガッツリ集めて、広告をパーソナライズできるなど。

いわゆる、彼らが作ったサービスの上で他社が商売やサービス提供をして、ユーザはそこに集まりお金の動きが発生する。そして、そのお金の動きの数%をもらうのが彼らのやり方であり、プラットフォーマーというものですね。

他のタイプのプラットフォーマー

他のタイプと言いつつ、GAFAの企業がなを連ねるのも多々ありました。

BATH(バース)

中国の大手IT系企業の頭文字をとったものですね。(知らなかった)

  • B : Baidu
  • A : Alibaba
  • T : tencent
  • H : Huawei

FANG(ファング)

特にメディア系につよい大手プラットフォーマー

A がAmazonAppleか迷った(Appleも最近動画のサブスクやってた気がした)ので調べたら、こういう略称は他にもありそうですね。

FANG│初めてでもわかりやすい用語集│SMBC日興証券

MANT│初めてでもわかりやすい用語集│SMBC日興証券

MANT(マント)

マジで初耳。そこでそんなワード作るんだ〜って感じ。FANGと全くかぶってないのはいい感じ。

巨大化するプラットフォーマーたち

その性質上、人や金が集まれば集まるほど良質なコンテンツが配信されたり、サービスが出てきたり、プラットフォームを利用する企業が増えるため、これらの企業はサービスが国境を超え非常に大きなものになります。

また、企業体系も新しく(米国と日本の税制の違いもありますが)研究開発費を大量に利用できたりするため、近傍へのビジネス展開やそれの改良も早いため、徐々に既存のサービスを食って売り上げを上げていく動きもあります。

直近ではGAFAM5社の合計時価総額が、東証1部の全企業の時価総額を超えたとのこと。

www.nikkei.com

プラットフォーマの抱える問題

大量のデータが集まるプラットフォーマーと、EUの個人情報保護の流れから、個人情報保護のためのGDPRに違反しているということで、62億円の罰金が課された。

また、プラットフォームの利用料についても不満が上がっている。
例えば、iOSのアプリ内課金には数十%がApple側にとられて、残りがアプリ開発者に入るなど、プラットフォームが独占されているため払わざるを得ない状況になってはいるものの、不満は上がっている。

あとは、租税周りでも既存税法が追いついていないため問題が多く、やりとりや個人情報周りでも国家対GAFAの対立もあるそう。

フェルマーの最終定理わからんから、それっぽいの計算してみた。

ちょうどヨビノリさんのこの動画を見てた(半分寝てたのであまり理解できてないが。。。)時に別のパターンだったらどうなるだろうと思って計算してみた。

www.youtube.com

なぜしたか

これって、n乗される数とnが一致していない(or n乗される数の方がnより小さい)から成り立たないのかな〜と思い、まずは手短に確認してみたくて。


a^n + b^n = c^n

何をしたか

やってみたのはこちら。イメージとしては、3個の自然数のそれぞれの3乗を足し合わせると、何らかの自然数の3乗になるかを調べてみました。


(a_1 \cdots a_n,b \in\mathbb{N} ) \\
\sum^n_{k=1}a_k^n=b^n \\
n=3 の時

これ、名前あるのかな〜?

どうしたか。

クソみたいなpythonのコードを書いて、計算した結果の中からそれっぽいものを抜き出す。ということをしました。

#!/usr/bin/python

rt = 1.0 / 3
for i in range(1,40):
  for j in range(i,40):
    for k in range(j,40):
      sum = (i**3) + (j**3) + (k**3)
      b = sum**rt
      print("i=",i,"j=",j,"k=",k,"b=",b)

簡単にコードの説明をすると、とりあえず変数3つ用意して3重ループ作ります。

ただし、i<=j<=kになるようにしています。(同じ組み合わせの計算をしないように。)

そして、i,j,kをそれぞれ3乗した結果をsumに突っ込み、それを1/3乗します。(1/2乗とかであれば0.5とベタ書き出来ましたが。。。)

ただ、この計算方法だと、綺麗に1/3乗できないので、出力時は注意

どうなったか。

とりあえず、該当の計算を出力しました。

MacBook-Air:fermat2 Apple$ python multi.py | grep "\.9999"
('i=', 1, 'j=', 6, 'k=', 8, 'b=', 8.999999999999998)
('i=', 2, 'j=', 12, 'k=', 16, 'b=', 17.999999999999996)
('i=', 3, 'j=', 4, 'k=', 5, 'b=', 5.999999999999999)
('i=', 3, 'j=', 10, 'k=', 18, 'b=', 18.999999999999996)
('i=', 3, 'j=', 18, 'k=', 24, 'b=', 26.999999999999996)
('i=', 3, 'j=', 36, 'k=', 37, 'b=', 45.99999999999999)
('i=', 4, 'j=', 17, 'k=', 22, 'b=', 24.999999999999996)
('i=', 4, 'j=', 24, 'k=', 32, 'b=', 35.99999999999999)
('i=', 6, 'j=', 8, 'k=', 10, 'b=', 11.999999999999998)
('i=', 6, 'j=', 20, 'k=', 36, 'b=', 37.99999999999999)
('i=', 6, 'j=', 32, 'k=', 33, 'b=', 40.99999999999999)
('i=', 7, 'j=', 14, 'k=', 17, 'b=', 19.999999999999996)
('i=', 9, 'j=', 12, 'k=', 15, 'b=', 17.999999999999996)
('i=', 11, 'j=', 15, 'k=', 27, 'b=', 28.999999999999993)
('i=', 12, 'j=', 16, 'k=', 20, 'b=', 23.999999999999996)
('i=', 14, 'j=', 28, 'k=', 34, 'b=', 39.99999999999999)
('i=', 15, 'j=', 20, 'k=', 25, 'b=', 29.999999999999993)
('i=', 18, 'j=', 19, 'k=', 21, 'b=', 27.999999999999996)
('i=', 18, 'j=', 24, 'k=', 30, 'b=', 35.99999999999999)
('i=', 21, 'j=', 28, 'k=', 35, 'b=', 41.99999999999999)
('i=', 27, 'j=', 30, 'k=', 37, 'b=', 45.99999999999999)

結構ありました。


1^3 + 6^3 + 8^3 = 9^3\\
3^3 + 4^3 + 5^3 = 6^3 \\

などなど。

わかったこと

パターンありますね。

上記にあるような数の倍数でも成り立つようです。


k^3 + (6k)^3 + (8k)^3 = (9k)^3\\
\Rightarrow 1k^3 + 216k^3 + 512k^3 = 729k^3 \\
(3k)^3 + (4k)^3 + (5k)^3 = (6k)^3 \\
\Rightarrow 27k^3 + 64k^3 + 125k^3 = 216k^3 \\

3,4,5 -> 6の場合は、以下リンク先で解いているようです。

marukunalufd0123.hatenablog.com]

結構ありそう。

【東大が公開している教材見てみた】社会におけるデータ・AI利活用-1-1. 社会で起きている変化-

ツイッターでリンクが回ってきた、「数理・データサイエンス・AIリテラシーレベル教材」とやらを読んでみた。

www.mi.u-tokyo.ac.jp

まずは、導入の「1-1. 社会で起きている変化」に目を通してみて、思ったことをつらつらと書いてみた。

http://www.mi.u-tokyo.ac.jp/consortium2/pdf/1-1_literacy_level_note.pdf

でーたさいえんすってなんだー?

『データを有効活⽤し、数理モデリングや計算技術と適⽤ドメインの専⾨知識を結合することで新たな知識を⽣み出し、その活⽤のシナリオを導き出すことです』

f:id:fk1jp:20200512222907p:plain

自分なりにかみ砕いて説明してみると、文中にあるケプラー法則の例をとると

『データを有効活⽤し』

ティコ・ブラーエおじさん : ずーっと星の動きを観察してて、とりあえずいっぱいデータはある!だけどなんか円軌道から逸れて星が動いている。なんで!よくわからん!データあげるからケプラー調べて!
ケプラーさん : はーい。この日はここで、あの日はそこなんだね~。

『数理モデリングや計算技術と適⽤ドメインの専⾨知識を結合することで新たな知識を⽣み出し』

ケプラーさん : あれ、この周期、楕円じゃね?太陽の位置が中心じゃなくて焦点じゃね?

『その活⽤のシナリオを導き出すことです』

その後、いろんな天文学者 : ケプラーの法則助かるわ~。いろいろ辻褄があってるから研究進めやすいわ。
ニュートンさん : あれ、僕の運動方程式と惑星の楕円軌道で万有引力導けるじゃん!

という風に、「ブラーエさんがデータを集めて」「ケプラーさんが調べて法則を見つけ」「いろんな天文学者ニュートンさんが活用する」という流れで、過去の偉人たちはデータから法則を導いてきました。

それがなぜ今、注目されているかというと

データサイエンスがはやる理由

パソコンが強くなってきた。

ケプラーさんが地道に手で計算していたことが、現代のCPUやGPUではまさに天文学的なスピードで計算できるようになって、様々な法則を見つけやすくなり

それで得た法則をさらに活用して、様々な場合を試して別の分野などの法則を見つけることができる。

データが一杯有るし、一杯集まる。

ブラーエさんが手で長年星の位置や情報を集めていましたが、現代では毎秒単位で様々な情報を集められるし、データはある程度パソコン君が勝手に処理できるような形になっている。

POS情報などからも様々な情報が得られ、有名な話ではビールとおむつが良く一緒に買われているところから、店舗のレイアウトの改善につながったなど、ザ学問というところ以外でも活用されています。

様々な科学での応用

データ活用をするにあたり、膨大な数のパターンマッチと検証ができることが強みですので、それが生きる個所で使われていますね。

物理学では、膨大な観測データから太陽系外惑星がないか調べたり

www.dailybreak.co

化学系では、複雑なたんぱく質の構造をデータにして解析したりなど。

その他、活用はpdf見てください。

AIとデータサイエンス

現在、AIは完ぺきではなく、与えられた問題に対してかなり高い精度(100%ではない)で回答できる「特化型AI」しかありません。

対義語として「汎用AI」というものがありますが、これはどんな問題でもある程度の精度で回答できる、いわゆるドラえもんのようなものです。

データサイエンティストは、この特化型AIを必要な場所に組み込んだり、大量のデータからケプラーのように法則を見つける人になります。

データを起点としたものの⾒⽅

今まで話してきた、AIやデータを起点としたものの見方っていうのは、いわゆる「直観」で判断することに等しいです。

どういうことかというと、AIっていうのは基本的に「1+2」と言われて必ず「3」と返すような、「関数」的な機能は持っていません。
(もちろん、AIに関数を組み込んで「XXというインプットがあればYYと返しましょう」と仕組むことは可能ですが、それはデータを起点としたモノの見方とは少し違うように思います。)

ただし、人間でもそうですが直観での反応は、先入観や誤った反応を起こす可能性もあり、そのあたりをコントロールするのもデータサイエンティストの仕事であったり、人々がデータサイエンスを理解し判断する基準にもなるのかなーと思います。