プロセスとスレッドに関して

CPUはコアと呼ばれる演算などを司るものが存在する。実際にハードウェアの視点で動かすのはこのコアとなっているがCPUのコアは現在マルチコアと呼ばれる複数のコアを持つことが主流となっている。このコアとはざっくり考えるとwordやchromeなどアプリケーションを開いたときにそれぞれに対応させて動かすものと捉えることができる。また、スレッドとは、コアが実行できるアプリケーションの数と捉えてることができる。例えば2コア4スレッドというCPUがあるときに、これは2つのコアがそれぞれ最大2スレッドの処理単位?を持っていると捉えることができ、4つのアプリケーションを動かすことができると考えることができる。しかし、実際に動くのはコアであるため、スレッドはアプリケーションを細かいプロセスに分け、人間がわからない速度で高速にプロセスを切り替えることでまるで同時に動いている、つまり並列に動作していると見ることができる。

オペレーティングシステムとは

オペレーティングシステムとは私たちがマウス操作をする、キーボードを押して文字を入力するといった様々な操作をcpuなどに伝え処理を行う仲介者の役割を果たしている。

主にカーネル、USER、API、GDIの4つが機能として挙げられる。

カーネル

 カーネルは先ほど説明したCPUといったアーキテクチャに命令を出したり、メインメモリやハードディスクといった記憶領域の管理を行っている。

カーネルの仕事としては主に4つある

 

1つ目 CPUの管理

このカーネルがCPUに命令を出すというのは、具体的には私たちが使っているWordやExcelといったアプリケーションは普段HDDやSSDといった大容量の記憶領域にに記憶されているがそれらは実際に動かすときにはメインメモリにデータが入っている必要がある。そこで、それらの記憶領域に入っているアプリケーションをメインメモリに送るという操作をカーネルがCPUに対して命令を出すことによって私たちは普段特に気にすることなく、アプリケーションを使用することができている。

2つ目 マルチタスク

このマルチタスクとは、普段私たちがyoutubeを開きながらwordなどをしたりしているがこのように別の仕事を同時並行に実行することを指す。

CPUには1つ以上のコアという演算などを行うもの存在しているが、これは普通の使い方だとシングルタスクになってしまう。しかし、OSがアプリケーションを細かく分け、素早く切り替えることでまるで同時に複数の作業を実行しているように見せている。

3つ目 メモリの管理

このメモリの管理とは、アプリケーションを利用する際のメモリの使い方、またアプリケーション内で作られた新しいデータについてメインメモリに収まり切らないときに自動的にHDDや SSDといった記憶領域に転送するというものでこれは仮想記憶領域と呼ばれている。

もう少し掘り下げて説明すると、メインメモリにはユーザー領域とOS領域というものがある。アプリケーションをOSがメインメモリに収めたとき、そのデータはユーザー領域に保存される。またOS領域にはOSを構成するカーネルやUSERなどのプログラムが保存され、適宜処理によって使用される形になっている。そこで先ほどのメモリの管理の話に戻るが、アプリケーションが動きデータを作成したときそのデータはユーザー領域に保存される。しかし、ユーザー領域も有限であるため、作成したデータが溢れる可能性がある。よって先ほどの説明であった仮想記憶領域にデータを保存することであたかもメインメモリが大容量であるかのように見せ、データを保存することができる。

4つ目 ファイル管理

このファイル管理とは、アプリケーションやデータファイルといったものをHDDやSSDの物理的な記憶領域を意識することなく、追加や削除を実行することができることを指している。

 

・USER

 私たちがキーボード操作をしたり、マウス操作などをした情報をカーネルに伝える役割を持つ。

 

・GDI

 USERに送られた画像データをなどを受け取り、そのデータをカーネルに渡す役割を持つ。主に高速な画像処理を担当している。

 

API

 アプリケーション・プログラミング・インターフェイスと呼ばれ、USERとカーネルの間に存在しているもの。処理としては、USERから私たちユーザーがコンピュータに対して、アプリケーションから印刷の処理やデータの保存などをしたときに、それらをUSERから受け取り、分析をして、印刷なら印刷を実行する関数を、データの保存なら保存を実行する関数を選択して、カーネルに渡すことで実際に処理を実行している。

 

参考文献

カラー版 徹底図解 パソコンが動くしくみ 新星出版社 

これからのブログの内容の方針について

これから追加していくブログについては、基本的にはコンピュータのハード寄りのものを中心的に追加していきます。

今考えているのはオペレーティングシステムや、並列計算、コンパイラなどについてです。

ちなみに自分自身も勉強中のため、不確かな箇所もあると思うので、後々書いた内容を編集して直すこともあると思いますが、全てを信じすぎないようにすることをお願いします。

つまりこのブログは自分の勉強のためのメモ書きのようなものであるため注意して欲しいということ