maksudnya? Sila berikan lebih banyak konteks.
1 Gambaran Keseluruhan Proses
Proses ialah abstraksi logik Kami tahu banyak tentang proses daripada buku sistem pengendalian, tetapi kami mungkin tidak tahu banyak tentang pelaksanaan proses Artikel ini menerangkan prinsip umum pelaksanaan proses.
Pelaksanaan proses sebenarnya sama seperti ketika kita biasanya menulis kod Contohnya, jika kita ingin mewakili sesuatu, kita akan menentukan struktur data. Proses tidak terkecuali. Jadi intipati proses ialah struktur data, yang menyimpan satu siri data. Sistem pengendalian menguruskan semua proses dalam bentuk tatasusunan atau senarai terpaut. Proses boleh dikatakan dibahagikan kepada dua jenis
1 Proses pertama apabila sistem dimulakan,
2 Kecuali proses pertama, proses lain dicipta melalui fork atau fork+execute system call.
Mari kita lihat dahulu maklumat yang terkandung dalam struktur proses.

Di atas ialah maklumat utama dalam struktur yang mewakili proses. Kemudian struktur mewakili proses. Kami tahu bahawa fork menggunakan proses induk sebagai modul, menyalin struktur proses induk, dan kemudian mengubah suai medan tertentu. Ia menjadi satu proses baru. Jika laksana dipanggil, medan dalam struktur yang disalin (seperti jadual halaman, segmen kod dan segmen data) akan diubah suai lagi. Dan muatkan data yang sepadan dari cakera keras ke memori. Jadi bagaimana proses pertama dihasilkan? Kerana proses hanyalah struktur, jika kita mentakrifkan struktur, kita boleh mencipta proses tanpa bercabang.
2 Pelaksanaan proses
Apabila sistem mencipta proses, ia akan menetapkan nilai daftar cs:ip Jika ia adalah fork, ip ialah pernyataan selepas fungsi fork. Jika ia dilaksanakan, alamat ip ditentukan oleh pengkompil. Walau apa pun, apabila proses mula dilaksanakan, CPU akan menghuraikan cs:ip dan mendapat arahan untuk dilaksanakan. Jadi bagaimana cs:ip dihuraikan?
Apabila proses dilaksanakan, pemilih tss (indeks GDT) dimuatkan ke dalam daftar tss, dan kemudian konteks dalam tss juga dimuatkan ke dalam daftar yang sepadan, seperti cr3, pemilih ldt. Menurut indeks ldt dalam maklumat tss, mula-mula cari alamat pertama data struktur ldt proses daripada GDT, dan kemudian dapatkan pemilih daripada cs mengikut atribut segmen semasa, seperti segmen kod alamat pertama ruang linear proses dari jadual ldt Alamat, had panjang, kebenaran dan maklumat lain. Gunakan alamat pertama alamat linear ditambah offset dalam IP untuk mendapatkan alamat linear, dan kemudian dapatkan alamat fizikal melalui direktori halaman dan jadual halaman Jika alamat fizikal belum diperuntukkan, pengecualian kesalahan halaman dan pemprosesan lain akan dilaksanakan.
3 Proses penggantungan dan bangun
Proses penggantungan, penyekatan dan pelbagai proses. Kita biasanya mendengar konsep ini agak kerap, sekarang mari kita lihat bagaimana ia dilaksanakan. Terdapat dua jenis penggantungan atau penyekatan proses.
1 Menggantung secara aktif. Biarkan proses itu tergantung sebentar-sebentar melalui tidur. Prinsip tidur telah dianalisis sebelum ini, jadi saya tidak akan menganalisisnya lagi. Prinsip umum
adalah untuk menetapkan pemasa dan membangunkan proses selepas tamat tempoh.
Ubah suai proses kepada keadaan yang digantung, menunggu untuk dikejutkan.
2 Penggantungan pasif.
Terdapat banyak senario penggantungan pasif, terutamanya apabila proses memohon sumber, tetapi sumber itu tidak memenuhi syarat, maka proses itu digantung oleh sistem pengendalian. Sebagai contoh, apabila kita membaca paip. Jika tiada data untuk dibaca daripada paip, proses itu digantung. Masukkan ke dalam barisan menunggu paip.

Apabila kandungan ditulis pada paip, proses itu dibangkitkan. Proses itu digantung (terbahagi kepada dua jenis: yang boleh dikejutkan oleh isyarat dan yang tidak boleh dikejutkan oleh isyarat) dan pelaksanaan bangun.
<code>// 当前进程挂载到睡眠队列p中,p指向队列头指针的地址<br>void sleep_on(struct task_struct **p)<br>{<br> struct task_struct *tmp;<br><br> if (!p)<br> return;<br> if (current == &(init_task.task))<br> panic("task[0] trying to sleep");<br> /*<br> *p为第一个睡眠节点的地址,即tmp指向第一个睡眠节点<br> 头指针指向当前进程,这个版本的实现没有采用真正链表的形式,<br> 他通过每个进程在栈中的临时变量形成一个链表,每个睡眠的进程,<br> 在栈里有一个变量指向后面一个睡眠节点,然后把链表的头指针指向当前进程,<br> 然后切换到其他进程执行,当被wake_up唤醒的时候,wake_up会唤醒链表的第一个<br> 睡眠节点,因为第一个节点里保存了后面一个节点的地址,所以他唤醒后面一个节点,<br> 后面一个节点以此类推,从而把整个链表的节点唤醒,这里的实现类似nginx的filter,<br> 即每个模块保存后面一个节点的地址,然后把全局指针指向自己。<br> */<br> tmp = *p;<br> *p = current;<br> // 不可中断睡眠只能通过wake_up唤醒,即使有信号也无法唤醒<br> current->state = TASK_UNINTERRUPTIBLE;<br> // 进程调度<br> schedule();<br> // 唤醒后面一个节点<br> if (tmp)<br> tmp->state=0;<br>}<br><br>// 唤醒队列中的第一个节点,并清空链表,因为第一个节点会向后唤醒其他节点<br>void wake_up(struct task_struct **p)<br>{<br> if (p && *p) {<br> (**p).state=0;<br> *p=NULL;<br> }<br>}</code>
Kami mendapati bahawa pelaksanaan proses adalah serupa dengan cara kami biasanya menulis kod, iaitu untuk mentakrifkan struktur data dan kemudian melaksanakan algoritma untuk mengendalikan struktur data. Sudah tentu, kerana ia melibatkan perkakasan asas, pelaksanaan sistem pengendalian adalah jauh lebih rumit daripada kod kami.
Atas ialah kandungan terperinci maksudnya? Sila berikan lebih banyak konteks.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Panduan untuk Square Root di Java. Di sini kita membincangkan cara Square Root berfungsi di Java dengan contoh dan pelaksanaan kodnya masing-masing.

Panduan Nombor Sempurna di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor Perfect dalam Java?, contoh dengan pelaksanaan kod.

Panduan untuk Penjana Nombor Rawak di Jawa. Di sini kita membincangkan Fungsi dalam Java dengan contoh dan dua Penjana berbeza dengan contoh lain.

Panduan untuk Weka di Jawa. Di sini kita membincangkan Pengenalan, cara menggunakan weka java, jenis platform, dan kelebihan dengan contoh.

Panduan untuk Nombor Armstrong di Jawa. Di sini kita membincangkan pengenalan kepada nombor Armstrong di java bersama-sama dengan beberapa kod.

Panduan untuk Nombor Smith di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor smith di Jawa? contoh dengan pelaksanaan kod.

Dalam artikel ini, kami telah menyimpan Soalan Temuduga Spring Java yang paling banyak ditanya dengan jawapan terperinci mereka. Supaya anda boleh memecahkan temuduga.

Java 8 memperkenalkan API Stream, menyediakan cara yang kuat dan ekspresif untuk memproses koleksi data. Walau bagaimanapun, soalan biasa apabila menggunakan aliran adalah: bagaimana untuk memecahkan atau kembali dari operasi foreach? Gelung tradisional membolehkan gangguan awal atau pulangan, tetapi kaedah Foreach Stream tidak menyokong secara langsung kaedah ini. Artikel ini akan menerangkan sebab -sebab dan meneroka kaedah alternatif untuk melaksanakan penamatan pramatang dalam sistem pemprosesan aliran. Bacaan Lanjut: Penambahbaikan API Java Stream Memahami aliran aliran Kaedah Foreach adalah operasi terminal yang melakukan satu operasi pada setiap elemen dalam aliran. Niat reka bentuknya adalah
