
Nama saya Andrey Artemyev, saya bekerja di Microsoft pada inti Windows 10, saya sebelumnya bekerja pada Windows 10x (WCOS), XBox, Windows Phone dan Microsoft Edge. Saya ingin memberi tahu secara populer untuk tujuan pendidikan tentang bagaimana komputer bekerja pada contoh input keyboard dan Windows 10. Seri artikel ini dirancang terutama untuk siswa spesialisasi teknis. Kami akan mempertimbangkan jalur apa yang informasi tentang tombol yang ditekan dari keyboard ditampilkan di Notepad.exe. Karena luasnya dan interdisipliner topik, mungkin ada ketidakakuratan dalam artikel, yang dilaporkan dalam komentar. Beberapa informasi mungkin kedaluwarsa karena kecepatan perkembangan Windows.
Seberapa dalam kita menyelami topik ini?
Pertama mari kita bicara tentang tingkat di mana komputer dapat dipertimbangkan. Setiap level didasarkan pada level sebelumnya. Mari kita mulai dari atas.
Tingkat aplikasi . Semua aplikasi pengguna berada di sini, ini adalah browser, Microsoft Office, notepad, serta server web IIS, SQL Server, berbagai middleware seperti Java dan .Net dan semua bahasa scripting, apakah itu file Ruby, PHP atau Bat.
Tingkat sistem operasi . OS dapat dianggap sebagai:
- Manajer sumber daya - memori, hard drive, printer, layar, keyboard, sumber daya terbatas yang dibagikan oleh program yang berjalan di komputer.
- Mesin virtual - file adalah contoh yang baik dari objek virtual. Ini merupakan abstraksi data pada disk, API untuk bekerja dengannya, dan juga menambahkan konsep hak akses. Alih-alih file, mungkin ada konsep wadah data dan API yang sama sekali berbeda. Ada banyak objek virtual seperti itu di OS.
- Platform - OS menyediakan model perangkat lunak dan primitif untuk membangun program. Misalnya, Windows Drivers Framework memungkinkan Anda untuk dengan cepat mengembangkan driver, windows di Windows digunakan untuk membangun antarmuka pengguna yang kompleks. Dll - menyediakan model untuk memperluas fungsionalitas program melalui plugin, serta mekanisme untuk menerapkan pembaca layar melalui jebakan keyboard (lihat kait LowLevelKeyboard).
Sistem operasi dibagi menjadi beberapa lapisan dan komponen. Secara umum, arsitektur Windows 10 terlihat seperti ini. Kami akan membicarakannya secara mendetail nanti.
Tingkat arsitektur komputer . Ini diwakili oleh motherboard, yang memiliki faktor bentuk tertentu, fungsi bawaan yang disandikan dalam sirkuit mikro yang disebut set chip dan port yang memungkinkan pengembangan fungsi komputer dengan menghubungkan kartu grafis, kartu jaringan, tambahan memori akses acak (RAM), hard drive, keyboard, dll. Port memengaruhi kecepatan dan kemampuan komputer, yang akan menentukan tujuannya, apakah itu server untuk memproses ribuan permintaan per detik, tablet untuk menggunakan Internet, atau PC gaming dengan beberapa video arty. OS mengabstraksi fitur-fitur motherboard.
Sirkuit mikro terlihat seperti pada gambar di bawah ini dan merupakan komputer mini yang melakukan program sederhana untuk tugas tingkat rendah, misalnya, membaca data dari keyboard dan mentransfernya lebih jauh sehingga akhirnya mencapai prosesor. Sebagai aturan, mereka diimplementasikan sebagai microcircuit analog atau mikrokontroler non-programmable dalam C.

Motherboard dapat dianggap sebagai koloni sirkuit mikro yang berkomunikasi satu sama lain melalui bus dan melalui mereka data dari perangkat yang terhubung ke prosesor dan sebaliknya beredar. Kumpulan chip adalah sejenis sistem saraf komputer. Semua chip pada motherboard pada awalnya dibuat untuk bekerja satu sama lain. Beberapa dari mereka mungkin memiliki fungsi khusus, misalnya, penghitung waktu atau penyimpanan pengaturan BIOS. Mungkin yang paling penting dari mereka adalah yang memiliki program bawaan (firmware, BIOS, UEFI) yang mulai berjalan segera setelah listrik muncul. Dia menemukan hard drive dengan boot loader Windows dan mentransfer kontrol untuk itu, yang pada gilirannya meluncurkan file OS yang dapat dieksekusi, yang dapat disebut Windows10.exe, sebenarnya NtOsKrnl.exe. BIOS tahu apa yang harus dicari berkat perjanjian antara produsen perangkat keras dan sistem operasi.
Di sekitar motherboard, Anda dapat memasang ponsel, konsol game, stasiun server atau perangkat pintar. Pada gambar di bawah ini, faktor bentuk umum motherboard.
Tingkat mikroarsitektur diwakili oleh prosesor (CPU), ini adalah jantung dari motherboard dan seluruh rangkaian chip diperlukan untuk memperbaiki CPU. Prosesor adalah komputer dalam komputer, mikrokontroler yang lebih kuat dan canggih yang tidak memerlukan firmware, karena aliran perintah datang dengan cepat ketika penjadwal ulir mengubah konteks prosesor. Fungsi prosesor dibagi menjadi beberapa subsistem, misalnya, komponen yang terlibat dalam operasi matematika dan logis, coprocessor matematika, dan cache. Beberapa dari mereka dulunya merupakan chip terpisah pada motherboard, tetapi sekarang mereka telah menjadi bagian dari CPU, misalnya, sebuah pengontrol interupsi dan sebuah chip yang disebut North Bridge, yang meningkatkan kecepatan kerja.
Arsitektur mikro tidak sama dengan
arsitektur . Semua fungsi CPU dibagi menjadi beberapa komponen yang bekerja bersama. Komponen-komponen ini dan interaksinya adalah mikroarsitektur. Dalam diagram alur di bawah, mereka diwakili oleh persegi panjang berwarna dan kotak.
Arsitektur prosesor pada dasarnya adalah dokumen yang menjelaskan fungsionalitas apa yang harus dimiliki agar sesuai, misalnya, dengan arsitektur x86, x64 atau ARM yang digunakan pada perangkat seluler. Dokumen ini menjelaskan perintah, tugas register, dan logika operasi mana yang harus didukung. Pencipta prosesor Intel, AMD, Elbrus dapat mengimplementasikan fungsi ini sesuka mereka dan menambahkan fitur baru ke dalamnya dalam bentuk perintah, register, bendera, interupsi, dan jika OS mengetahuinya, ia dapat menggunakannya. Dalam hal OOP, arsitektur CPU adalah antarmuka, dan arsitektur mikro adalah implementasinya.
Sirkuit logika . Persegi panjang berwarna dari diagram blok CPU terdiri dari sirkuit logika yang melakukan operasi mereka pada urutan nol dan yang. Prosesor melihat semua data dan instruksi dalam bentuk bit (0 dan 1), sesuai dengan rumus, angka desimal apa pun dapat direpresentasikan sebagai urutan 0 dan 1, tetapi apa artinya angka tertentu tergantung pada konteksnya. Itu bisa berupa kode, angka, huruf. Unit aritmatika dan logika (ALU) dapat menambahkan dua angka melalui operasi bitwise. Algoritma bitwise dari penjumlahan, pengurangan, perkalian, dan pembagian telah lama diketahui, pengembang rangkaian logika hanya perlu mengimplementasikannya secara efektif.

Sirkuit digital bekerja dengan data pada level nol dan satu, sedangkan sirkuit analog bergantung pada eksploitasi hukum fisika. Mereka melakukan manipulasi bit sederhana, seperti shift, AND, OR, XOR. Melalui primitif ini operasi yang lebih kompleks diimplementasikan. Gambar di bawah ini menunjukkan operator analog DAN diimplementasikan melalui transistor. Pada output rangkaian, tegangan bukan nol hanya akan ada jika ada pada kedua kontak input (Bx1 dan Bx2), jika tidak nol volt. Operator && di C # bekerja dengan cara yang sama. Sirkuit digital pada akhirnya didasarkan pada analog. Elemen-elemen logis secara fisik dalam rangkaian logika dapat diimplementasikan tidak hanya secara elektronik tetapi juga dengan cara mekanis, hidrolik, optik dan lainnya.
Tingkat elemen radio . Sirkuit analog fisik bergantung pada elemen radio yang benar-benar mengeksploitasi hukum fisika. Sebagian besar ini adalah semikonduktor, mis. dalam kondisi tertentu, mereka dapat menghantarkan listrik, tetapi mungkin tidak. Dioda melakukan arus hanya dalam satu arah, jika tidak terjual, berbalik 180 dan disolder kembali, maka arus tidak akan melewatinya. Transistor melewati arus hanya jika ada tegangan pada kaki kontrol. Umat ββmanusia telah belajar membuat transistor mikroskopis dan karenanya mereka dapat ditempatkan di papan kecil dalam jutaan. Pada gambar di bawah, elemen radio semikonduktor dan transistor konvensional di sebelah transistor nano di bawah mikroskop elektron.
Tingkat hukum fisika . Dan akhirnya, level terendah adalah level hukum fisika yang terlampir dalam elemen radio semikonduktor.
Kami akan berbicara banyak tentang tingkat OS dan sedikit tentang arsitektur komputer, arsitektur mikro, sirkuit analog dan elemen radio. Untuk bagian terakhir, Anda harus memiliki pemahaman tentang bagaimana semua ini bekerja bersama.
Dasar-dasar Sistem Operasi
Ketika kami pergi ke bahasa rakitan di universitas, banyak siswa yang terbangun dari kata-kata pintar seperti "mode kernel dan pengguna", di mana sistem otentikasi peran yang sangat terkenal tersembunyi di bawah semua, di semua situs setidaknya ada "Admin" dengan akses ke semua halaman dan "Pengguna" memiliki akses terbatas. Dengan cara yang sama, peran "Core" memiliki akses ke semua kemampuan CPU, dan peran "Pengguna" mungkin tidak menyebabkan semua perintah prosesor dan tidak dengan semua argumen. Di atas model peran ini, sistem operasi dibangun berdasarkan prinsip arsitektur client-server, di mana server adalah inti yang mengimplementasikan fungsi OS, dan klien adalah program pengguna. Di dunia Web, klien dan server terpisah secara fisik - ini adalah dua komputer berbeda yang berkomunikasi melalui jaringan. Di OS, klien dan server hidup pada mesin yang sama dan pada perangkat keras yang sama. Server memiliki API tertentu yang memungkinkan pelanggan untuk mengubah kondisinya, misalnya, Twitter API memungkinkan Anda untuk membuat posting, masuk dan mengunggah umpan tweet ke klien seluler. Windows memiliki Win API, yang hanya lebih rumit karena berbagai tugas, hari ini, Windows memiliki sekitar 330.000 API ditambah API untuk aplikasi UWP. Jika konsep Twitter kurang lebih jelas bagi semua orang - pos, pengguna, umpan - maka konsep OS mungkin memerlukan beberapa pendalaman di bagian dalamnya. Oleh karena itu, API Windows dapat menjadi sulit untuk dipahami tanpa memahami struktur internal OS.
Sebenarnya, kernel berarti tiga hal yang berbeda. Kernel seperti semua kode OS. Kernel sebagai subsistem yang bertanggung jawab atas mekanisme OS, seperti penjadwal thread, pengalihan konteks, penanganan interupsi, pertukaran memori virtual ke fisik (Kernel) dan subsistem kernel untuk mendukung OS lain - CSRSS.exe (Windows), PSXSS.exe (POSIX), OS2SS.exe (OS / 2) atau WSL (Windows SubSystem untuk Linux). Dalam konteks ini, makna pertama dipahami - semua kode OS.Ketika sebuah jendela muncul di layar, struktur data muncul di sisi server OS (mode kernel) yang menggambarkan jendela ini - posisinya di layar, ukuran, teks judul, fungsi jendela yang melaluinya OS memungkinkan aplikasi untuk merespons peristiwa. Karena ada banyak subsistem dalam OS, mungkin ada beberapa struktur data yang menggambarkan satu objek, misalnya, informasi tentang proses pengguna ada di komponen:
- Eksekutif - di sini adalah logika OS. Lapisan ini memeriksa proses apa yang bisa dan tidak bisa dilakukan. File ini berisi informasi tentang proses induk, parameter mulai proses (Blok Lingkungan Proses), akun pengguna yang terkait, nama file exe proses.
- Kernel - mekanisme OS seperti scheduler thread diimplementasikan di sini. Ia menyimpan berapa banyak waktu yang dihabiskan proses dalam mode pengguna dan kernel, ke prosesor mana utasnya dilampirkan, prioritas dasar dari utas proses.
- Subsistem windowing - info tentang objek GDI yang digunakan untuk menggambar di jendela. Ini adalah primitif seperti kuas, pena, dll.
- DirectX - semua yang berhubungan dengan DirectX: shader, permukaan, objek DX, penghitung kinerja GPU, pengaturan memori untuk memori grafis.
- Subsistem Windows yang diwakili oleh proses CSRSS.exe (Client Server Runtime SubSystem). Windows sebelumnya mendukung OS POSIX (proses PSXSS.exe) dan OS / 2 (OS2SS.exe). Pada masa itu, muncul ide untuk menjadikan Windows subsistem yang sama, tetapi ini lambat dan segera bagian dari CSRSS.exe dipindahkan ke win32k.sys, yang sekarang dibagi menjadi beberapa file - win32k.sys, win32kbase.sys dan win32kfull.sys. Informasi tentang Data Grup Proses, level Shutdown, Data Sesi, dll. Disimpan di sini.
Dukungan untuk POSIX dan OS / 2 lebih formal, karena untuk mentransfer program dari OS ini, Anda harus menemukan kode sumber dan mengkompilasi ulang dengan cara khusus untuk mendapatkan file exe di mana semua panggilan ke API OS dialihkan ke PSXdll.dll (NETAPI.DLL dan DOSCALLS.DLL untuk OS / 2 dan User32.dll untuk aplikasi Windows), yang merupakan pembungkus tipis di atas API Windows. Keadaan beberapa API disimpan dalam proses subsistem PSXSS.exe (OS2SS.exe). Karena tidak semua API dapat dipetakan ke 1 ke 1, program seperti itu bekerja tidak stabil. Dukungan Linux ditambahkan pada Windows 10 dan bekerja dengan cara yang sangat berbeda. Subsistem Linux di-host dalam mode kernel dan perbedaan antara Subsistem Windows untuk Linux dan Linux kira-kira sama dengan antar build yang berbeda. Khusus untuk WSL, jenis proses baru diperkenalkan - proses PICO.
Apa itu komponen? Ini adalah fungsi yang dikelompokkan secara logis. Komponen dapat disebut kelas OOP, dll, folder, serangkaian fungsi dengan awalan umum, namespace, lapisan dalam arsitektur.Lebih lanjut tentang partisi klien-server
Pemisahan klien dan server diimplementasikan menggunakan fungsionalitas built-in dari CPU, berbagi memori dan pemeriksaan perangkat lunak.
Produsen peralatan berkolaborasi dengan pengembang OS, oleh karena itu, prosesor memiliki mekanisme yang dibuat dengan mempertimbangkan kebutuhan pencipta sistem operasi. Di semua prosesor modern, mekanisme peran pengguna diimplementasikan, di mana pengguna dipahami sebagai kode yang saat ini dapat dieksekusi. Dalam aplikasi web, peran pengguna yang login disimpan dalam variabel dan, selain nama yang ramah Admin atau Pengguna, memiliki Id peran ini, yang sering digunakan selama otorisasi, karena membandingkan angka lebih cepat dan lebih mudah daripada string. Dalam prosesor, peran pengguna saat ini disimpan dalam bidang yang disebut "Security Ring", bukan "CurrentUser.Role.Id". Di sebagian besar prosesor, bidang ini mengambil empat nilai dari 0 hingga 3. Windows menggunakan 0 untuk peran yang disebut "Mode Kernel", karena ini adalah mode yang paling istimewa dan nilai terbesar untuk peran adalah "Mode Pengguna", karena ini adalah peran yang paling terbatas. Peran yang tersisa tidak digunakan karena perbedaan antara 0 dan 1, 2 dan 3 diabaikan. Peran ini membatasi halaman memori yang dapat diatasi, Anda tidak dapat memanggil beberapa instruksi, atau Anda tidak dapat memanggil mereka dengan argumen tertentu. Ada juga pembatasan penggunaan teknologi I / O Ports untuk bertukar data dengan perangkat seperti keyboard, tetapi belum digunakan selama 10 tahun. Beralih ke mode kernel terjadi melalui perintah syscall, yang menurut indeks menemukan fungsi untuk dipanggil dalam array pointer ke API Windows. Pointer ke array ini disimpan dalam register prosesor khusus selama boot OS.
Saya secara khusus menyebut bidang register CPU. Saat Anda menulis sebuah program dalam C #, Anda dapat menambahkan sebanyak mungkin bidang ke kelas Anda dan memberi mereka nama yang ramah. Untuk prosesor dan mikrokontroler, bidang disebut register. Ketika Anda merancang sepotong besi, Anda harus sudah memahami pada tahap ini berapa banyak register (bidang) yang Anda butuhkan, ukuran apa yang seharusnya dan fungsi apa yang diberikan kepada mereka, sehingga ini cukup untuk semua kesempatan untuk semua situasi yang dapat dibayangkan dan tidak dapat dibayangkan. Bayangkan Anda perlu menulis sebuah program dalam bahasa pemrograman mirip C # yang memiliki 16 bidang yang telah ditentukan di kelas dan Anda tidak dapat menggunakan variabel lokal. Yaitu bidang yang sama dapat digunakan untuk menyimpan pengguna yang masuk, susunan yang diurutkan, data sementara, atau hasil dari metode. Nama-nama bidang tersebut harus sesering mungkin, alih-alih tempData, funcResult, akan ada nama-nama aneh EAX, AH, AL, DX, dll. Jika Anda menulis emulator prosesor pada arsitektur x86 di C #, kode dapat terlihat seperti ini (DIV - divide, command divisi integer):

Sebagai ilustrasi, saya menambahkan pemeriksaan mode kernel. Jika pembagian dengan kesalahan nol terjadi, prosesor memberitahukan OS melalui interupsi (melempar suatu peristiwa). Pada saat boot, OS memberikan prosesor dengan array satu dimensi dari pointer ke fungsi yang disebut vektor interupsi, di mana setiap indeks sesuai dengan beberapa jenis peristiwa, misalnya, pembagian dengan nol. OS mengetahui arsitektur prosesor yang menjalankannya dan karenanya dapat mengatur pointer fungsi dalam sebuah array. CPU memanggil fungsi ini dan OS memiliki kode sendiri. Misalnya, Windows mencari dalam registri apakah debugger diinstal dan menampilkan pesan bahwa telah terjadi kesalahan dan dimungkinkan untuk menjalankan debugger untuk melihat tempat di mana itu terjadi. Interupsi disebut interupsi karena ia melakukan intervensi dalam proses eksekusi program yang normal dan memungkinkan interrupt handler untuk mengeksekusi dan hanya setelah selesai prosesor dapat kembali ke eksekusi program.
Interupsi dapat dihasilkan tidak hanya oleh prosesor tetapi juga oleh perangkat eksternal (keyboard, mouse) atau kode program. Penjadwal thread menetapkan timer yang pada interval satu kuantum (secara default, sekitar 15 ms, di Windows Server lebih) menghasilkan interupsi untuk menetapkan utas lain untuk eksekusi sesuai dengan algoritma internal. Eksekusi langkah-demi-langkah dari program di Visual Studio juga bergantung pada mekanisme interupsi - sebuah bendera diatur pada prosesor, yang, setelah setiap perintah, menyebabkan interupsi yang diproses oleh Windows Debugging Engine dan diberitahukan melalui Visual Studio API.
Berbagi memori diimplementasikan berkat memori virtual. Saya katakan sebelumnya bahwa OS adalah manajer sumber daya dan mesin virtual. 1 RAM 32 Windows 4 , .. 1, 4. ( ). . 4096 (4), :
- . . CPU , . , , , , . .
- , . RAM 4. RAM , .
- , ( new ++) / . Exe- , c . .
- RAM . / - . RAM , , . Windows 10 , .
Windows 10 , β ( ), .
64 16 , 18,446,744,073,709,551,616 . RAM 48 , 16 . Win x64 , . , 64 Windows ββ 256 Tb . 8TB IA64 7TB x64. Windows 10 β 2TB, . RAM Windows 10 , .
(HEX) , ? , . , β . CPU β CPU . HEX . , 32 ( 64) . β , HEX , .
- ( - ) . / . -, .
Windows?
Windows - . - β , , dll, . *.sys, *.dll , API , C, . C++. :
:
- Hyper-V Hypervisor β Windows . , Hyper-V , , .
- HAL.dll β Hardware Abtraction Layer β β , , β Windows HAL.dll, . , , . , - ACPI.sys.
Advanced Configuration and Power Interface? 1996 UI, .
1996 ACPI, , .. . ACPI , CD drive, .. .
- Device Drivers β . *.sys, , . Process Explorer SysInternals .
- Kernel β Kernel Mode Execution Environment , , , , . .
- Executive β , - .
- Windowing & Graphics β DirectX .
- NtDll.dll β . dll , ( .. dll) . Nt Native, Native American. Yaitu API , . dll Nt (NtDestroyMenu). Win API User32.dll. NtDll.dll, Nt* (level of indirection) β subsystem dll User32.dll PSXdll.dll DOSCALLS.DLL Windows. NtDll.dll ( S ession M anagement S ub S ystem .exe , Win dows Init itialize .exe .), .
- SubSystem dlls β . Windows User32.dll. - API , Nt* NtDll.dll, CreateFile NtCreateFile).
- Environment Subsystems β CSRSS.exe, Windows. POSIX ( PSXSS.exe) OS/2 (OS2SS.exe). Windows Subsystem for Linux -.
- System Processes β , LSASS.exe (Local Security Authority SubSystem) .
- Service Processes β Windows ( Plug and Play Manager) *.exe . SvcHost.exe , *.dll-. SvcHost'.
- User Processes β . β , , . .
. .