Closed4

CS:APP 第1章 コンピュータ・システム・ツアー

akkyakky

プログラミング言語Cの起源

  • CはUNIXオペレーティングシステムと密接に結びついている
  • Cは小さくて簡単な言語である
    • K&Rは261ページ
  • Cは実用目的(OSを実装するため)で設計された
akkyakky
  • システム上の情報は全てビットの集合体である
  • それを"コンテクスト"をもとに解釈する
hello.c
#include <stdio.h>

int main()
{
    printf("hello, world\n");
    return 0;
}

hello.c をシステム上では知らせるためには、別のプログラムに依って個々のCの文を マシン語 命令列へ翻訳する必要がある。
これらの命令は**実行可能オブジェクト・プログラム(実行可能オブジェクト・ファイル)**と呼ばれる形にパッケージ化される。

UNIXシステムでは、ソースファイル(hello.c) をオブジェクトファイルに翻訳する際にコンパイラ・ドライバを用いる

$ gcc -o hello hello.c

コンパイルは以下の言語システムに基いて実行される

  1. プリプロセッサ(cpp)
    • hello.c を改変する
      • '#' で始まるディレクティブに従ってプログラムを改変
    • hello.i というテキストファイルを生成する
  2. コンパイラ(cc1)
    • hello.i を、アッセンブリ言語プログラムからなるテキストファイルに翻訳する
    • hello.s というテキストファイルを生成する
  3. アセンブラ(as)
    • hello.s をマシンご命令に翻訳し、リロケータブル・オブジェクト・プログラムという形にパッケージ化し、その結果をオブジェクトファイル hello.o に格納する
    • hello.o はバイナリファイル
  4. リンカ(ld)
    • 標準Cライブラリprintf を呼んでいる
      • この関数がコンパイルされているhello.oと統合する必要がある
    • この結合を行うのがリンカ
    • hello ファイルというオブジェクト・ファイル(実行可能ファイル)を生成する
akkyakky

複数の処理を同時に行うシステムという一般的な概念を指して並行性という
システムを早く走らせるために並行性を利用することを並列性という

akkyakky

OSカーネルはアプリケーションとハードウェアを仲介する。

ファイルはI/Oデバイスの抽象化である。
仮想メモリはメイン・メモリとディスクの抽象化である。
プロセスはプロセッサ、メイン・メモリ、I/Oデバイスの抽象化である

このスクラップは2021/08/12にクローズされました