Skip to content

サイエンス基礎week4(発展自己学習)

1. コンピューターの基本構成

1.1 ハードウェアの主要コンポーネント

  1. CPU (Central Processing Unit)
  2. 演算処理を行う中心的なユニット
  3. 命令セット、クロック速度、コア数などが性能に影響

  4. メモリ (RAM: Random Access Memory)

  5. 一時的なデータ保存に使用
  6. 容量と速度が重要

  7. ストレージ (HDD, SSD)

  8. 永続的なデータ保存に使用
  9. 容量と読み書き速度が重要

  10. マザーボード

  11. 各コンポーネントを接続する基板
  12. チップセット、バス速度などが性能に影響

  13. 入出力装置

  14. キーボード、マウス、ディスプレイなど
  15. ユーザーとのインターフェースを提供

1.2 コンピューターアーキテクチャの基本概念

  1. フォン・ノイマン・アーキテクチャ
  2. プログラム内蔵方式
  3. 命令とデータを同じメモリに格納

  4. ハーバード・アーキテクチャ

  5. 命令用メモリとデータ用メモリを分離

  6. RISC (Reduced Instruction Set Computing) vs CISC (Complex Instruction Set Computing)

  7. RISC: 単純な命令セット、高速実行
  8. CISC: 複雑な命令セット、多機能

2. オペレーティングシステムの基本

2.1 OSの主要な機能

  1. プロセス管理
  2. プロセスの作成、スケジューリング、終了

  3. メモリ管理

  4. 物理メモリと仮想メモリの管理
  5. メモリ保護

  6. ファイルシステム管理

  7. ファイルの作成、読み書き、削除
  8. ディレクトリ構造の管理

  9. デバイス管理

  10. 入出力デバイスの制御
  11. デバイスドライバの管理

  12. ユーザーインターフェース提供

  13. CLI (Command Line Interface)
  14. GUI (Graphical User Interface)

2.2 主要なOSの種類

  1. Windows
  2. Microsoft社開発の商用OS
  3. 個人用PC市場で高いシェア

  4. macOS

  5. Apple社開発のUNIX系OS
  6. Apple製ハードウェア専用

  7. Linux

  8. オープンソースのUNIX系OS
  9. サーバー、組み込みシステムでも広く使用

  10. Android, iOS

  11. モバイルデバイス向けOS

3. プログラムの実行プロセス

3.1 コンパイルとリンク

  1. ソースコード: 人間が読み書き可能なプログラムコード
  2. コンパイル: ソースコードを機械語に変換
  3. リンク: 複数のオブジェクトファイルを結合して実行可能ファイルを生成

3.2 プログラムのロードと実行

  1. プログラムのロード: 実行可能ファイルをメモリにロード
  2. メモリ割り当て: スタック、ヒープなどのメモリ領域を確保
  3. CPU制御の移譲: プログラムの開始アドレスにCPUの制御を移す
  4. 命令実行: CPUがメモリから命令をフェッチし、デコード、実行

3.3 プロセスとスレッド

  1. プロセス
  2. OSによって管理される実行単位
  3. 独立したメモリ空間を持つ

  4. スレッド

  5. プロセス内の軽量な実行単位
  6. プロセス内のメモリを共有

4. 実践演習

4.1 簡易的なファイルシステム構造の設計

タスク: 以下の機能を持つ簡易的なファイルシステムの構造を設計してください。 1. ディレクトリとファイルの階層構造 2. ファイルの作成、読み取り、書き込み、削除 3. ディレクトリの作成と削除 4. ファイルとディレクトリの一覧表示

実装は疑似コードまたはPythonで行ってください。

4.2 プロセススケジューリングのシミュレーション設計

タスク: 簡単なプロセススケジューラーをシミュレートするプログラムを作成してください。 1. プロセスクラスを定義(プロセスID、実行時間、優先度を含む) 2. ラウンドロビンスケジューリングを実装 3. 優先度ベースのスケジューリングを実装 4. 各スケジューリング方式での実行結果を比較

5. まとめと講座の総括

Week 4では、コンピューターアーキテクチャとオペレーティングシステムの基礎について学びました。これらの知識は、効率的なソフトウェア開発や