[ノートを読む]コンピュータシステムの深い理解:第1章 - コンピュータシステムのローミング

コンピュータシステムのローミング

情報は、コンテキストビット+です

コンピュータ上のすべてのプログラムおよびデータが1ビット(即ち、ビット、ビット)で構成されています。各ビットは2つだけの状態0と1であるが、典型的には8ビットがバイト(すなわちバイト)と呼ばれるグループにグループ化されます。
すべての情報システムは、 -ディスク・ファイル、プログラムメモリ、メモリ、およびネットワーク上のデータ伝送に格納されたユーザデータを、一連のビットによって表され、そして我々が読んこれらのデータオブジェクトを識別するための唯一の方法を含みますこれらのデータオブジェクトのコンテキスト。
例えば、異なるコンテキストで、バイトの同様のシーケンスは、整数、浮動小数点、文字列または機械語命令として表すことができます。
プログラマーとして、私たちは、データの面で満足すべきではないが、フード、マシン上のデータ表現の本当の理解のもとになります。例えば:、私たちの経験は異なる実際の整数と浮動小数点数のマシン上と実際に表現して、彼らは真の値の制限された近似値です。時には予期しない動作が発生します。

知人ビルドシステム

機械語に高レベルのプログラミング言語(例えばC言語)からの人々が理解できるプログラムは、ビルドシステムによるものです。
例えばGCCコンパイラシステム(コンパイルシステム)におけるプリプロセッサ(CPP)、コンパイラ(CCL)、アセンブラ(AS)とリンカー(ID)を設定することによって。

前処理段階

文字#で始まるコマンド・プリプロセッサは、オリジナルのCプログラム、命令プリ処理されたテキストの挿入手順、接尾辞.iのよう与えるために、別の手順Cを変更します。

相をコンパイルします

コンパイラは、テキストファイルCプログラムは、接尾辞として.Sするアセンブリ言語プログラムのテキストファイルになって翻訳します。
それは異なる出力異なるハイレベル言語コンパイラのための共通言語を提供するため、アセンブリ言語は非常に便利です。(例:CコンパイラとFortranコンパイラの出力ファイルスクラップアセンブリ言語は同じです)

コンパイル段階

次に、アセンブラは、機械語命令に翻訳.Sれ、再配置可能オブジェクトプログラムの形式にパッケージ命令が呼び出され、その結果をファイルの.oオブジェクトファイル形式で格納されています。
.oファイル形式はバイナリファイルです。

リンク段階

プログラムは、printfなどのライブラリ関数を使用している場合は、既存のファイルにマージprintf.o、リンカがうまく処理されています。
実行可能ファイルに最終的な目標。

手始めに、私は、ビルドシステムは、我々のプログラムには影響を与えません知りませんが、我々は次のように実際のプログラミングのためのビルドシステムは、大きな助けであることを理解します。

1.それは、私たちは、ある面でより優れたプログラミングを選択することができ、プログラムの基礎となる表現を理解します。

2.グローバルとローカル変数についての詳細を学ぶことができるコンパイラシステムを理解し、大規模なプログラムを書くときに、リンク命令は簡単に解決できない場合に発生するエラーを理解するために。

3.安全プログラムを学ぶことが原因となるプログラム・スタックに格納された情報を双方向データの結果を理解し、制御するための最初のステップである、セキュリティ侵害を避けるために。

ハードウェアの構成

バス

電子システム全体のパイプの集合であり、情報の各メンバーを送信するための彼のバイトを搬送する、バスと呼ばれます。典型的には、バス転送バイト固定長のブロック。

I / Oデバイス

I / Oデバイスは、世界外部チャネルシステムに入力される出力デバイスです。一般的な入力装置は、マウス、キーボード、ディスプレイ、プリンタ、ハードディスクと出力装置です。各I / Oデバイスまたは/ OバスはIアダプタを介してコントローラに接続されています。

メインメモリ(RAM)

メインメモリは、プロセッサがプログラムを実行する際の一時記憶装置、及びデータ処理プログラムを格納するためのプログラムです。物理的には、ダイナミック・ランダム・アクセス・メモリDRAMチップのセットによって。

プロセッサ

CPUと呼ばれる、それがメインメモリに記憶された命令を解釈し、実行エンジンに格納されています。PC(命令レジスタ)のためのコアプロセッサは、それは、常に1つの命令のアドレスを指します。ALU(算術論理ユニット)は、いくつかの算術演算または論理演算を実行します。

(注:分離するために一般的にみなさブック外部メモリ(ディスク、ハードディスク)、ブックを出力装置I / Oデバイスに直接として分類され、ある意味があります)

キャッシュの重要性

機械的な原則、比較的小型のストレージデバイスへの大規模なストレージデバイスが遅くなると、装置のコストは急速に低速デバイスよりも高いので、メインメモリよりもアクセス速度がはるかに遅いメモリレジスタです。
この問題を解決するために、システム設計者は、メインメモリにキャッシュメモリを入れて、一時的なステージングエリア情報として、格納されている情報は、近い将来に必要となる場合があります。
アクセス速度、メモリサイズの増加を減少さL1からL3へのキャッシュの三つのレベル、。
ほとんどの操作が大幅にシステムの速度を加速し、高速メモリキャッシュ、で行うことができます。
プログラマーとして、キャッシュの役割を認識した場合、キャッシュはプログラム桁のパフォーマンスを改善するために利用することができます。

階層型ストレージデバイス

キャッシュは上記の考え、私たちは一般的に、同じコンピュータ、下に示すコンピュータのストレージ階層に、異なるメモリ性能が異なることを実現します。

メモリ階層の主なアイデアは、メモリキャッシュの第1層のメモリ層です。例えば、L1はL2キャッシュです。

オペレーティングシステム管理ハードウェア

プログラムの詳細の一部に加えて、プログラムの作成には、私たちのパフォーマンスを向上させることができ、我々は、オペレーティング・システムと呼ばれるハードウェア、アプリケーション、およびハードウェア間のソフトウェアとは接触しません。
オペレーティングシステムは、2つの基本的な機能があります。

1.アプリケーション・ハードウェアが暴走乱用を防止することができます。

2.複雑で、通常低レベルのハードウェアデバイスからの非常に異なる制御に適用するための単純かつ一貫性のあるメカニズムを提供します。

上記の単純な一貫性機構は、ハードウェアのオペレーティング・システムの抽象化です。

それらは:
ファイル-オペレーティング・システムI / Oデバイスの抽象表現(主に外部メモリを参照すべきである);
仮想メモリ-オペレーティングシステムのメインメモリとディスクI / Oデバイスの抽象表現、
プロセス-オペレーティングシステム抽象プロセッサ、メインメモリ及びI / Oデバイス表されます。

プロセス:

これは、システムの実行中にのみプログラムであるかのように現代のオペレーティングシステム上で動作しているアプリケーションは、オペレーティング・システムは、錯覚を提供します。プログラムは、排他的にプロセッサ、メインメモリ、およびI / Oデバイスで使用されるように表示されます。
プロセスは、抽象的な遊びに抽象化を実行しているオペレーティングシステムです。あなたは、単一のシステム上で同時に複数のプロセスを実行することができ、各プロセスが排他的にハードウェアを使用しているようです。そして同時に実行されている、命令のプロセスと別のプロセスが千鳥実行であると言われています。私たちは、コンテキストスイッチと呼ぶものの過程で複数のCPUのスタッガード実装。
この抽象化プロセスを達成するために、低レベルのハードウェアとオペレーティング・システム・ソフトウェア、コンピュータサイエンスのコースが最も重要で、最も成功した概念の一つであるとの緊密な協力が必要です。

スレッド

現代のオペレーティングシステムでは、実際には、プロセスは、実行ユニット、プロセスのコンテキストで実行中の各スレッドの複数のスレッドによって参照され、同じコードおよびグローバルデータを共有することができます。

仮想記憶

仮想メモリは抽象的な概念であり、それは各プロセスの錯覚、メインメモリの排他的使用中の各プロセスを提供します。各プロセスは、メモリと呼ばれる、同じ参照仮想メモリ空間以下に示すように(図のアドレスは、底部から上昇します)

以下では、各パーティションの簡単な説明です:

プログラムコードとデータ領域

すべてのプロセスのために、コードは、位置に対応するグローバル変数とデータが続く、同じ固定アドレスから開始されます。

ヒープ

コードとデータ領域は、(C)自由、新しい、時に削除(C ++)malloc関数を呼び出して、実行時スタックのときの後、スタックは動的に拡張および収縮することができます。

シェア貯水池

略中間部分はC標準ライブラリと、共有ライブラリの数学ライブラリーのようなコードおよびデータ領域を格納するために使用されるアドレス空間です。

スタック

ユーザー仮想アドレス空間の最上位に位置すると、コンパイラは、関数呼び出しを達成するために使用し、ユーザースタックです。そして、ヒープ、ユーザーがプログラムの実行時に動的に拡張スタックと契約することができます

カーネルの仮想メモリ

アドレス空間の上部の面積は、カーネル用に予約されています。直前の呼び出し元のために定義され、このカーネルコード領域または機能の読み取りと書き込みを許可するアプリケーション。

仮想メモリの操作は非常に複雑です。基本的な考え方は、ディスクキャッシュメモリの内容をストレージとして仮想ディスクとメインメモリ上のプロセスです。

ファイル

ファイルはバイトのシーケンス、そして何よりもです。ディスク、キーボード、ディスプレイ、さらにはネットワークを含めた各I / Oデバイスは、ファイルとして表示することができます。すべてのシステム機能は、UNIX I / Oを実現するために、ファイルを読み書きするために呼び出すと呼ばれるグループを使用して、入出力システムです。
このシンプルでエレガントな概念をファイルがシステムにI / Oデバイスの広い範囲を見るために、すべての統一されたビューを提供するためのアプリケーションが含まれている必要があるので、非常に強力です。ディスク・ファイルの内容を扱うとき例えば、プログラマは、特定のディスク技術を理解する必要があります。

(ここでは書籍の単純なネットワークへの言及が、唯一の大まかに少し方法およびネットワークファイル転送、何もかなりの乾燥は、その後、特定の時間の後ろにスキップして、慎重に研究言います)

その他の知識

アムダールの法則

我々はシステムの特定の部分に加速すると、システム全体のパフォーマンスに与える影響は重要性と一部の加速の程度に依存します。システムが実行する必要がある場合は適用時間は語りました。Kであること時間比αを変更するためにシステムによって必要とされる実行時間の一部、及び部分の性能比を仮定する。すなわち、初期パーツαToldに要する時間は、今(αTold)/ K必要な時間です。したがって、総実行時間は次のとおりです。

Tnew =(1-a)は+(aTold)/ K =語った[(1-A)+ / K]語っ

これにより、Sは語っ/ Tnewは=高速化を計算することが可能です
S = 1 /(1-A)+ A / K]

主なポイントアムダールの法則-大幅にシステム全体をスピードアップしたいが、システム全体は、レートの大部分で提起されなければなりません。
kの効果は∞になる傾向を考慮するときアムダールの法則は興味深い特殊なケースです。これは、私たちが、ほとんどの時間を取るために加速するために、この時間をシステムの一部を取ることができることを意味します。
S = 1 /(1-A)

並行並列

一時的に少し、お読みください。

抽象的で、コンピュータシステムの重要性

抽象化は、最も重要なコンピュータサイエンスの概念の一つです。例えば、簡単なアプリケーション・プログラミング・インターフェース(API)所定の機能のセットが良いプログラミングの練習で、ちょうど彼らの手続きを完了するには、この機能を使用し、関数プログラマが理解する必要がAPIを達成する方法である呼び出します。
(抽象的で、私は層によってソフトウェアの抽象化レイヤに、コンピュータのハードウェアから、再びそれをとかすために特別にブログを書く時間を持つことになります)。

概要

这一章主要把本书的主要内容概述了一遍,同时也是对整个计算机系统的概述,因为我在读这本书时只有C语言和数据结构的基础,所以初次读处处碰壁,读哪哪都不懂,感觉自己是不是读这本书读的太早了,后来在知乎上看到一位网友说这本书不是让人一遍读完的,这本书是需要你在碰壁时放下书去学习,回过头来发现能看懂时继续读,直到把计算机专业的所有课程学完,这本书也就读完了。才感觉恍然大悟。
这里要向和我一样的初学者推荐一个视频课程: [Crash Course:Computer Science]open.163.com/movie/2018/5/M/S/MDGEPAQ4K_MDGET74MS.html 这个系列视频并没有教我们编程,而是从计算机的历史入手,把计算机所有的基础专业课概述了一遍,甚至还有几乎所有计算机科学的研究方向的概述:人工智能,计算机图形学,计算机视觉等等。。十分详尽,配的动画也很有趣,是读这本书的一个好向导。
借知乎网友的话:“这是一份地图,不是一个世界”。希望能在这份地图的指引下,踏踏实实的把计算机科学的世界从过去到未来完整地走一遍。

おすすめ

転載: www.cnblogs.com/z-y-k/p/11267543.html