Closed4
CS:APP 第1章 コンピュータ・システム・ツアー
プログラミング言語Cの起源
- CはUNIXオペレーティングシステムと密接に結びついている
- Cは小さくて簡単な言語である
- K&Rは261ページ
- Cは実用目的(OSを実装するため)で設計された
- システム上の情報は全てビットの集合体である
- それを"コンテクスト"をもとに解釈する
hello.c
#include <stdio.h>
int main()
{
printf("hello, world\n");
return 0;
}
hello.c
をシステム上では知らせるためには、別のプログラムに依って個々のCの文を マシン語 命令列へ翻訳する必要がある。
これらの命令は**実行可能オブジェクト・プログラム(実行可能オブジェクト・ファイル)**と呼ばれる形にパッケージ化される。
UNIXシステムでは、ソースファイル(hello.c
) をオブジェクトファイルに翻訳する際にコンパイラ・ドライバを用いる
$ gcc -o hello hello.c
コンパイルは以下の言語システムに基いて実行される
- プリプロセッサ(
cpp
)-
hello.c
を改変する-
'#'
で始まるディレクティブに従ってプログラムを改変
-
-
hello.i
というテキストファイルを生成する
-
- コンパイラ(
cc1
)-
hello.i
を、アッセンブリ言語プログラムからなるテキストファイルに翻訳する -
hello.s
というテキストファイルを生成する
-
- アセンブラ(
as
)-
hello.s
をマシンご命令に翻訳し、リロケータブル・オブジェクト・プログラムという形にパッケージ化し、その結果をオブジェクトファイルhello.o
に格納する -
hello.o
はバイナリファイル
-
- リンカ(
ld
)-
標準Cライブラリ の
printf
を呼んでいる- この関数がコンパイルされている
hello.o
と統合する必要がある
- この関数がコンパイルされている
- この結合を行うのがリンカ
-
hello
ファイルというオブジェクト・ファイル(実行可能ファイル)を生成する
-
標準Cライブラリ の
複数の処理を同時に行うシステムという一般的な概念を指して並行性という
システムを早く走らせるために並行性を利用することを並列性という
OSカーネルはアプリケーションとハードウェアを仲介する。
ファイルはI/Oデバイスの抽象化である。
仮想メモリはメイン・メモリとディスクの抽象化である。
プロセスはプロセッサ、メイン・メモリ、I/Oデバイスの抽象化である
このスクラップは2021/08/12にクローズされました