[技術]自己理解を高めるためにCS(Computer Science)に関する記事を書きました![自己理解向上目的]
Voicyでサウザーラジオを聞いていたら
生産性とは「OUTPUT/INPUT」
と仰っていたので、生産性を上げるためにOUTPUTしたいと思う。
今回の学びは、CS(Computer Science)に関して記述する。記事を書くにあたっての目的の1つに「間違った理解を正して欲しい」という目的もあるため、コメントや直接メッセージ(Line/Twitter/Instagram等)で指摘して頂けるとありがたい。更新は小まめに行う。最終的なまとめが書けた時点で、Twitterにシェアしようと思う。
● Twitter
https://twitter.com/ko_watanabe_tw?lang=ja
基礎の基礎ができないとコードが思い通りに書けないからこの機会にがっつり学ぶ!学習意欲が高い時にこういうことをガンガンやって癖を付けていきたい!
それでは学びを共有する。
*WILIWIG:What I Learn Is What I Get(造語)
*** 目次 ***
● 学びの概要
今回の学びはCS(Computer Science)に関する学びである。
大まかな内容としては、
学習内容
1.OS(Operating System)
2.LinkedList vs. Array
3.Hash Table
4.Stack/Queue
5.Sequencial Graph
6.Tree Structure
といった基礎の基礎である。
ちなみに基礎の基礎への理解不足が如実に出た僕はしっかり補習授業を受けている。ただ、その補習授業が楽しすぎて、現在のアクティブラーニングが始まった。
・・・
1.OS(Operating System)について
◯ What is OS?
全てのコンピュータにはOSと呼ばれるソフトウェアシステムが存在する。
僕の言葉で解釈するとOSとは
(複数の)アプリケーション(メモリ)をCPUで処理する際に動作するアプリケーションの順番を切り替える役割をしている司令塔的なソフトウェアシステム
というざっくりした解釈
wikipediaでは
オペレーティングシステム(英語: Operating System)、OS(オーエス)とは、コンピュータのオペレーション(操作・運用・運転)を司るシステムソフトウェアである。OSの主な目的は、ハードウェアの抽象化、リソースの管理、そしてコンピュータ利用効率の向上である。(wikipediaより抜粋)
太文字部分が重要箇所!
また wikipedia が良い感じに理解を助けてくれる。
・・・
◯ Look up in image(画像でイメージしよう)
図にするとこんな感じで、コンピュータ内のハードウェア(メモリとCPU)とソフトウェアのリソースを管理するためのシステムソフトウェアというイメージ。
アプリケーション(USERLAND)は全てメモリ(Stack)と見なすことが出来て、中身は、MachineCode / StringConstant / CallStack(BasePointer/StackFrame) / Heapで大まかには構成されている。
・・・
◯ Detail of the image(イメージを紐解く)
要するにこの動画!
・・・
理解を深めるために文字に起こす
>CPU(Central Processing Unit)について
覚え方:コンピュータの脳
まず、CPUは演算装置と制御装置を組み合わせたもの。別名プロセッサ。
複数のアプリケーションが稼働している際には、OSによって、どのアプリケーション(メモリ)を、CPU内で制御(演算)させるかを指示している(参考:今更聞けないOSとは何か? / Process Control Block/ Process que)。
詳細としては、OS(カーネル)によって、プログラムカウンタの値を定め、その情報を基にアプリケーション(メモリ)内にある、プログラム(Machine Code)をCPUに移動させ、CPUは指示されたことをひたすら行う。この際、制御内容はレジスタに記録されている。
>> Resister(レジスター)
レジスターは、CPU内にある小規模な記憶装置のこと。ここで、プログラムの内容をどう演算していくかを制御する。
構成は、プログラムカウンター、命令レジスター、メモリレジスター、指標レジスター、ベースレジスターで構成されている。
順番は
・OSによって操作するアプリケーション(メモリ)を決定
・プログラムカウンタを基にメモリ(コールスタック)にアクセス
・コールスタックのスタックフレーム(アドレス部+命令部)を機械語に
・機械語に変換されたアドレス部と命令部をCPU(命令レジスタ)に格納
・CPU(命令レジスタ)で取得した命令部をデコーダで解読
・アドレス部とベースポインタよりデータのあるメモリ番地把握
・番地を基にメモリ内のデータ(引数)を取得し、CPU(メモリレジスタ)に保管
・引数を演算装置内のアキュムレータに移動
・アキュムレータから演算回路に保管
・デコーダで解読した命令を演算回路に指示
・演算回路で出た解をアキュムレータに保存
・解を演算装置(アキュムレータ)から制御装置(メモリレジスタ)に格納
・解を制御装置からメインメモリに保管
大まかにこういう流れかな?文字で起こすの難しい。
>> Memory (メモリー)
これも随時更新
・・・
・・・
◯ OSのまとめ
OSは、CPU(制御装置+演算装置)とMemory(ソフトウェアアプリケーション)をまとめている総監督のイメージ。
OSの種類によって性格が物凄く違う。CPUはOSの指示にとにかく従うガテン系で、設計書(何を演算するか)はMemoryにあるコールスタック(サブルーチン(関数)に関する情報が格納されている場所)を参考に制御装置や演算装置で答えを出していくイメージ。
・・・
2.LinkedList vs. Array
随時更新
・・・
3.Hash Table
随時更新
・・・
4.Stack/Queue
随時更新
・・・
5.Sequencial Graph
随時更新
・・・
6.Tree Structure
随時更新
・・・
● 参考資料まとめ
OS関連
・今更聞けないOSとは何か?
・OSの基礎の基礎をまとめてみた