Linux io merujuk kepada operasi fail; dalam Linux, fail ialah satu siri strim binari, jadi semasa pertukaran maklumat, kita semua melakukan operasi penghantaran dan penerimaan data pada strim ini sebagai operasi I/O; memandangkan Linux menggunakan mekanisme memori maya, kernel mesti diminta melalui panggilan sistem untuk menyelesaikan operasi IO.
Persekitaran pengendalian tutorial ini: sistem linux5.9.8, komputer Dell G3.
Apakah maksud linux io?
Kita semua tahu bahawa dalam dunia Linux, semuanya adalah fail.
Fail ialah aliran binari, sama ada Soket, FIFO, paip atau terminal, bagi kami, semuanya adalah aliran.
Dalam proses pertukaran maklumat, kita semua melakukan operasi penghantaran dan penerimaan data pada aliran ini, yang dirujuk sebagai operasi I/O.
Baca data daripada strim, sistem memanggil Baca, tulis data dan sistem memanggil Tulis.
Biasanya IO lengkap proses pengguna dibahagikan kepada dua peringkat:
IO Cakera:
IO Rangkaian:
Sistem pengendalian dan pemacu dijalankan dalam ruang kernel, dan aplikasi berjalan dalam ruang pengguna Kedua-duanya tidak boleh menggunakan penunjuk ke pindahkan data kerana Mekanisme memori maya yang digunakan oleh Linux mesti meminta kernel melalui panggilan sistem untuk menyelesaikan operasi IO.
Terdapat tiga jenis IO: memori IO, rangkaian IO dan cakera IO Biasanya apabila kita bercakap tentang IO, kita merujuk kepada dua yang terakhir.
Mengapa model IO diperlukan?
Jika anda menggunakan kaedah segerak untuk berkomunikasi, semua operasi dilaksanakan secara berurutan dalam urutan, jadi Kelemahannya adalah jelas:
Model IO perlu muncul.
Sebelum menerangkan model Linux IO, mari kita fahami proses bacaan data sistem Linux:
Ambil permintaan pengguna untuk fail index.html sebagai contoh untuk menggambarkan
Ruang dan kernel pengguna Ruang
Inti sistem pengendalian ialah kernel, yang bebas daripada aplikasi biasa dan mempunyai akses kepada ruang memori yang dilindungi dan semua kebenaran untuk mengakses peranti perkakasan asas.
Penukaran Proses
Untuk mengawal pelaksanaan proses, kernel mesti mempunyai keupayaan untuk menangguhkan proses yang berjalan pada CPU dan menyambung semula proses yang digantung sebelum ini.
Tingkah laku ini dipanggil penukaran proses.
Oleh itu, boleh dikatakan sebarang proses berjalan dengan sokongan kernel sistem pengendalian dan berkait rapat dengan kernel.
Menyekat proses
Proses pelaksanaan, disebabkan peristiwa tertentu yang dijangka tidak berlaku, seperti kegagalan untuk meminta sumber sistem, menunggu penyempurnaan operasi tertentu, data baharu Jika ia masih belum tiba atau tiada kerja baharu yang perlu dilakukan, sistem akan secara automatik melaksanakan penyekatan primitif (Blok) untuk menukar dirinya daripada keadaan berjalan kepada keadaan menyekat.
Ia boleh dilihat bahawa penyekatan proses adalah tingkah laku aktif proses itu sendiri Oleh itu, hanya proses dalam keadaan berjalan (mendapatkan CPU) boleh mengubahnya menjadi keadaan tersekat.
Apabila proses memasuki keadaan menyekat, ia tidak menduduki sumber CPU.
Penerangan Fail
Penerangan Fail ialah istilah dalam sains komputer dan merupakan abstraksi yang digunakan untuk menyatakan rujukan kepada konsep.
Deskriptor fail ialah integer bukan negatif dalam bentuk Malah, ia adalah nilai indeks yang menunjuk ke jadual rekod fail yang dibuka oleh proses yang diselenggara oleh kernel untuk setiap proses.
IO Cache
Operasi IO lalai untuk kebanyakan sistem fail ialah IO cache.
Proses membaca dan menulis adalah seperti berikut:
Kendalian baca: Sistem pengendalian menyemak sama ada penimbal kernel mempunyai data yang diperlukan Jika ia telah dicache, ia kembali terus daripada cache; cakera, kad rangkaian, dsb. Baca masuk, dan kemudian cache dalam cache sistem pengendalian; ruang kernel. Pada masa ini, operasi menulis telah selesai untuk program pengguna Bagi masa untuk menulis ke cakera, kad rangkaian, dsb., ia ditentukan oleh sistem pengendalian, melainkan arahan penyegerakan dipanggil secara eksplisit.
Dengan mengandaikan bahawa tiada data yang diperlukan dalam cache ruang kernel, proses pengguna membaca data daripada cakera atau rangkaian dalam dua peringkat:
Program kernel membaca data dari cakera, kad rangkaian, dll. ke cache ruang kernel; > Program pengguna menyalin data dari cache ruang kernel ke ruang pengguna.
Kelemahan IO yang dicache:
Sekatan segerakAplikasi ruang pengguna melaksanakan panggilan sistem, yang menyebabkan aplikasi menyekat dan tidak melakukan apa-apa sehingga data sedia dan data disalin daripada kernel ke proses pengguna , dan akhirnya proses memproses data Semasa dua peringkat menunggu data dan memproses data, keseluruhan proses disekat dan tidak boleh memproses IO rangkaian lain.
Ini juga merupakan model IO yang paling ringkas Tidak ada masalah untuk menggunakannya apabila FD biasanya kurang dan cepat siap.Tidak menyekat segerakSelepas panggilan sistem tidak menyekat dipanggil, proses tidak disekat dan kernel kembali ke proses dengan serta-merta data belum siap lagi, ralat akan dikembalikan.
Ulang proses di atas dan buat panggilan sistem dalam satu kitaran. Proses ini sering dipanggil pengundian.
Undian menyemak data kernel sehingga data sedia, kemudian menyalin data ke proses untuk pemprosesan data.
Perlu diingatkan bahawa semasa keseluruhan proses penyalinan data, proses itu masih disekat.
Dengan cara ini, anda boleh menetapkan Soket
dalam pengaturcaraan.Pemultipleksan IO
Membolehkan proses menunggu siri acara. O_NONBLOCK
Pemandu isyarat
Mula-mula kami benarkan Socket memberi isyarat kepada Drive IO dan memasang fungsi pemprosesan isyarat Proses ini terus berjalan tanpa menghalang. Apabila data sedia, proses akan menerima isyarat SIGIO dan boleh memanggil fungsi operasi I/O dalam fungsi pemprosesan isyarat untuk memproses data.
Prosesnya adalah seperti berikut:
while(status == OK) { // 不断轮询 ready_fd_list = io_wait(fd_list); //内核缓冲区是否有准备好的数据 for(fd in ready_fd_list) { data = read(fd) // 有准备好的数据读取到用户缓冲区 process(data) }}
panggilan sistem Sigaction Laksanakan fungsi pemprosesan isyarat (tidak menyekat, kembali serta-merta)
Data sedia, jana isyarat Sigio dan maklumkan aplikasi untuk membaca data melalui panggilan balik isyarat
Terdapat masalah besar dengan kaedah IO ini: baris gilir isyarat dalam Linux adalah terhad Jika nombor ini melebihi, data tidak boleh dibaca
Proses IO tak segerak adalah seperti berikut:
panggilan sistem, ia boleh mula melakukan perkara lain serta-merta, benang pengguna tidak menyekat
Inti memulakan fasa pertama IO: menyediakan data. Apabila kernel menunggu sehingga data sedia, ia akan menyalin data daripada penimbal kernel ke penimbal penggunaInti akan menghantar isyarat kepada utas pengguna, atau memanggil semula utas pengguna Antara muka panggil balik berdaftar memberitahu urutan pengguna bahawa operasi Baca telah selesai
aio_read
Urutan pengguna membaca data dalam penimbal pengguna dan melengkapkan operasi perniagaan seterusnya
Selepas proses pengguna membuat panggilan sistem aio_read
, tidak kira sama ada data kernel sedia atau tidak, ia akan dikembalikan terus kepada proses pengguna, dan kemudian proses mod pengguna boleh melakukan perkara lain .
Apabila data sedia, kernel terus menyalin data ke proses, dan kemudian menghantar pemberitahuan daripada kernel kepada proses.
Berbanding dengan IO dipacu isyarat, perbezaan utama IO tak segerak ialah:
IO tak segerak juga dipanggil IO dipacu peristiwa Dalam Unix, satu set fungsi perpustakaan ditakrifkan untuk akses tak segerak kepada fail, dan satu siri antara muka AIO ditakrifkan.
aio_read
atau aio_write
untuk memulakan operasi IO tak segerak dan gunakan aio_error
untuk menyemak status menjalankan operasi IO. Pelaksanaan kernel semasa AIO dalam Linux hanya berkesan untuk fail IO Jika anda ingin melaksanakan AIO sebenar, anda perlu melaksanakannya sendiri.
Pada masa ini terdapat banyak perpustakaan IO tak segerak sumber terbuka, seperti libevent, libev dan libuv.
Cadangan berkaitan: "Tutorial Video Linux"
Atas ialah kandungan terperinci Apakah maksud linux io?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!