「カーネル」または「ユーザー」モードで実行されているアプリケーションについて聞いたことがあるかもしれません。それはすべて、オペレーティングシステムが仕事をするときにどのように機能するかにかかっています。それを理解すれば、ユーザーモードとカーネルモードの違いを簡単に理解できます。
オペレーティングシステムの機能を理解する(Does)
コンピューターは、ハードウェア、電子部品、およびソフトウェアで構成され、コンピューターコードはそのハードウェアによって実行されます。しかし、あまり明確ではないかもしれませんが、それらがどのように連携するかです。
コンピュータの最も重要な要素は、ビットまたは「2桁の数字」です。コンピュータが行うことはすべて(” Everything)、1と0で表されます。さまざま(Different)なコンピュータコンポーネントは、さまざまな方法でビットを表します。CPUでは、微細なトランジスタはオンまたはオフのいずれかで1と0を表します。これらのトランジスタは、論理ゲートと呼ばれる論理構造に配置されます。
電子コンピュータメモリでは、ビットは、特定のしきい値を超えるまたは下回る電荷を持つメモリセルによって表されます。機械式ハードドライブでは、ビットは回転するプラッターで測定された磁気変動として表されます。光ディスクでは、レーザー光を反射する、または反射しないピットとランドが同じ働きをします。
バイナリコードの物理的表現がどのように実現されても、最終的にはすべてのコンシューマーコンピューターコンポーネントをこの生のマシンコードに減らすことができます。
では、コンピューターの人間に優しいインターフェースから、コンピューター自体の生の低レベルのプロセスにどのように移行するのでしょうか。そこでオペレーティングシステムが登場します。オペレーティングシステムは、コンピューターのハードウェアを直接制御します。
このソフトウェアは、アプリケーション(したがってユーザー)が必要とするすべてのものを、CPUおよびその他のコンポーネントが理解できるマシンコード命令に変換します。このプロセスで最も重要なソフトウェアはカーネルです。
カーネルとは何ですか?
カーネルは、その名前が示すように、オペレーティングシステムのコアです。カーネルは、RAMに常駐し、コンピューターが実行するすべてのことを指示するソフトウェアです。何かがメモリに書き込まれるとき、実行を指示するのはカーネルです。
カーネルは、GPU(GPUs)やネットワークカードなどのハードウェアとのインターフェイス方法を知っていますが、コンピューター業界の一般的な標準に依存して、それらを最大限に活用する方法を知らない場合があります。
ここでハードウェアドライバーが機能します。ドライバーは、オペレーティングシステムに特定のコンポーネントの操作方法を指示します。そのため、たとえば、NvidiaとAMDGPU(AMD GPUs)には異なるドライバーが必要です。
適切なドライバーを備えたカーネルは、データを壊滅的に破壊する可能性のあることを行うことを含め、コンピューター内の究極の権威です。
アプリケーションプログラミング(Application Programming Interfaces)インターフェイス(API(APIs))の役割(Role)
MS-DOSの時代には、ソフトウェア開発者はユーザーのハードウェア専用にソフトウェアを作成する必要がありました。MS-DOSシステムでのこの最も悪名高い例は、サウンドカードドライバでした。
特定のビデオゲームは、最も人気のあるカード(Sound Blaster、Ad-lib、Gravis Ultrasoundなど)をサポートする必要があり、ほとんどのプレーヤーがカバーされることを期待しています。今日、 API(APIs)のおかげで、動作は大きく異なります。
MicrosoftDirectXはその良い例です。詳細な説明が必要な場合は、 DirectXとは何か、なぜそれが重要なのかを確認してください。(What Is DirectX and Why Is It Important?)ただし、知っておくべき最も重要なことは、APIは、ソフトウェア開発者が(API)GPUなどのコンポーネントからハードウェアリソースを要求するための標準的な方法を提供することです。さらに、ハードウェアメーカーは、同様に準拠するソフトウェアとの完全な互換性を確保するために、自社の製品がDirectXに準拠していることのみを確認する必要があります。(DirectX)
API(APIs)は、ソフトウェアアプリケーションと、ハードウェアドライバーを備えた低レベルカーネルとの間の変換レイヤーを提供します。はい、これにはわずかなパフォーマンスの低下が伴います。それでも、最近のコンピューターでは、これはごくわずかであり、さまざまな利点があり、最終的にユーザーモードとカーネルモードになります。
ユーザーモードとカーネルモード
最新のオペレーティングシステムは、数百または数千の「プロセス」を同時に実行し、優先順位と計算能力の要件に基づいて、必要に応じて動的にCPU時間を与えます。(CPU)
アプリケーションを起動すると、プロセスが生成され、CPUはユーザーモードまたはカーネルモードのいずれかでプロセスを実行できます。
A Windows process running in user mode only has access to its own private virtual memory address space and handle table. The software uses these tables to store data in RAM and request resources. There’s no direct access to memory or other hardware, and it’s up to the operating system to map those virtual spaces to the actual hardware of the computer.
This is good for many reasons, but the most crucial benefit is that the application can’t overwrite or alter data outside its virtual memory address space. In addition, certain functions are off-limits to user-mode processes, mainly ones that could crash the system or destroy data.
プロセスが起動するか、カーネルモードに昇格すると、オペレーティングシステム用に予約されているものも含め、システムリソースに完全にアクセスできます。したがって、理論的には、オペレーティングシステムを適切に実行するために必要な重要なデータを上書きする可能性があります。
トラップと例外
これらの2つのモードは、 CPU(CPU)自体によってハードウェアレベルで適用されることを理解することが重要です。ユーザーモードで実行されているアプリケーションがカーネルモードアクセスを必要とする処理を実行しようとすると、「トラップ」または「例外」が生成されます。次に、オペレーティングシステムはアプリケーションを処理します。通常は、アプリケーションをシャットダウンしてクラッシュログを生成します。これにより、開発者は、問題が発生したときにメモリ内で何が起こったかを確認できます。
カーネルモード(Kernel Mode)の危険性(Dangers):死の(Death)ブルースクリーン(Blue Screen)
コンピュータの電源を切ったり再起動したりするブルースクリーンを経験したことがある場合は、カーネルモードのプロセスが原因である可能性が(Death)あり(Blue Screen)ます。
カーネルモードのプロセスが想定外の処理を行うと、オペレーティングシステムはそのプロセスから回復できず、コンピューター全体が停止します。ユーザーモードのプロセスが失敗すると、アプリケーションのみがクラッシュし、残りのソフトウェアとオペレーティングシステムは問題なく続行できます。
これは、カーネルモードの特権を要求するAPIであるため、 (API)API(APIs)が重要な役割を果たす1つの領域です。ユーザーモードアプリケーションは、基本的に、カーネルモード特権を必要とするリクエストをAPIに委任します。
これが、カーネルモードが通常、コンピューターのハードウェアに直接アクセスする必要がある低レベルのシステムプロセスにのみ付与される理由です。通常、この特権は、ユーザーモードが提供できるよりも多くのパフォーマンスを必要とするため、プロセスに拡張されます。一部のCPU命令はカーネルモードでのみ機能するため、プロセスがこれらの関数を使用する必要がある場合は、昇格する必要があります。
ブルースクリーン(Blue Screen)オブデス(Death)で問題が発生した場合は、Windows10のブルースクリーンオブデストラブルシューティングガイドを(Blue Screen of Death Troubleshooting Guide for Windows 10)必ずお読みください。
What Is User Mode vs Kernel Mode in Windows
You may haνe hеard about applications running in “kernel” or “user” modе. It’s all down to how operating systems work when they do their jobs. Once you underѕtand that, it’s easу to grasp the difference between user mode and kernel mode.
Understanding What an Operating System Does
A computer consists of hardware, the electronic components, and software, the computer code executed by that hardware. But what may be less clear is how they work together.
A computer’s most essential element is the bit or “binary digit.” Everything a computer does is represented as ones and zeroes. Different computer components represent bits in different ways. In a CPU, microscopic transistors represent ones and zeroes by either being on or off. Those transistors are arranged into logical structures, called logic gates.
In electronic computer memory, bits are represented by memory cells either having a charge above or below a certain threshold. On a mechanical hard drive, bits are represented as magnetic fluctuations measured on a spinning platter. On optical discs, pits and lands that do or do not reflect laser light do the same job.
No matter how the physical representation of binary code is achieved, you can eventually reduce down all consumer computer components to this raw machine code.
So how do you go from the human-friendly interface of a computer to the raw, low-level processes in the computer itself? That’s where the operating system comes in. It directly controls the hardware of the computer.
This software translates everything applications (and therefore the user) want into the machine code instructions that the CPU and other components understand. The most critical piece of software in this process is the kernel.
What Is the Kernel?
The kernel is, as the name suggests, the core of the operating system. The kernel is software that resides in RAM and directs everything the computer does. When something is written into memory, it’s the kernel that directs the execution.
The kernel knows how to interface with hardware such as GPUs and network cards, but it may not know how to operate them to their full potential, relying on generic standards in the computer industry.
The hardware drivers come into play here. Drivers tell your operating system how to work with specific components, which is why you need different drivers for Nvidia and AMD GPUs, for example.
Equipped with the right drivers, the kernel is the ultimate authority within the computer, including doing things that can catastrophically destroy data.
The Role of Application Programming Interfaces (APIs)
In the days of MS-DOS, software developers had to write their software specifically for the user’s hardware. The most notorious example of this on MS-DOS systems were sound card drivers.
A given video game would have to support the most popular cards (Sound Blaster, Ad-lib, Gravis Ultrasound, etc.) and hope that most players were covered. Today, things work very differently, thanks to APIs.
Microsoft DirectX is a great example. If you want an in-depth explanation, check out What Is DirectX and Why Is It Important? However, the most important thing to know is that the API offers a standard way for software developers to ask for hardware resources from components like the GPU. Additionally, hardware makers must only ensure that their products comply with DirectX to ensure full compatibility with any likewise compliant software.
APIs offer a layer of translation between software applications and the low-level kernel with its hardware drivers. Yes, this comes with a slight performance penalty. Still, on modern computers, this is negligible, and it comes with a variety of advantages, which is where we finally come to user mode and kernel mode.
User Mode vs. Kernel Mode
Modern operating systems run hundreds or thousands of “processes” simultaneously, dynamically giving them CPU time as needed based on their priorities and computation power requirements.
When you launch an application, it generates processes, and the CPU can execute them in either user mode or kernel mode.
A Windows process running in user mode only has access to its own private virtual memory address space and handle table. The software uses these tables to store data in RAM and request resources. There’s no direct access to memory or other hardware, and it’s up to the operating system to map those virtual spaces to the actual hardware of the computer.
This is good for many reasons, but the most crucial benefit is that the application can’t overwrite or alter data outside its virtual memory address space. In addition, certain functions are off-limits to user-mode processes, mainly ones that could crash the system or destroy data.
When a process launches or is elevated to kernel mode, it has full access to system resources, even those reserved for the operating system. So, in theory, it could overwrite crucial data that the operating system needs to run properly.
Traps and Exceptions
It’s important to understand that these two modes are enforced at the hardware level by the CPU itself. If an application running in user mode tries to do something that requires kernel-mode access, it generates a “trap” or “exception.” The operating system will then deal with the application, usually by shutting it down and generating a crash log so that the developers can see what happened in memory when things went off the rails.
The Dangers of Kernel Mode: The Blue Screen of Death
If you’ve ever experienced a Blue Screen of Death (who hasn’t?) that forced your computer to switch off or restart, there’s a good chance it was a kernel-mode process to blame.
When a process in kernel mode does something it’s not supposed to, the operating system can’t recover from it, and the entire computer halts. When a user-mode process goes haywire, only the application crashes, and the rest of the software and the operating system can go on without any issues.
This is one area where APIs play an essential role since it’s the API asking for kernel-mode privileges. User-mode applications essentially delegate requests that would have required kernel-mode privileges to the API.
This is why kernel-mode is usually only granted to low-level system processes that need to access the computer’s hardware directly. Usually, this privilege is extended to a process because it needs more performance than user mode can provide. Some CPU instructions only work in kernel mode, so if a process needs to use those functions, it has to be elevated.
If you’re having trouble with the Blue Screen of Death, be sure to read our Blue Screen of Death Troubleshooting Guide for Windows 10!