Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «АрхитСктура ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы UNIXΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 93

Автор ΠœΠΎΡ€ΠΈΡ Π‘Π°Ρ…

β€’ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ символов табуляции Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ²;

β€’ сигнализированиС процСссам ΠΎ зависании Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΠΎΠ² ΠΈ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΈ строк ΠΈΠ»ΠΈ Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ клавиши удалСния;

β€’ прСдоставлСниС возмоТности Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ символы, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ символы стирания, удалСния ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠΈ.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π±Π΅Π· ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ использованиС асинхронного Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ процСссы ΠΌΠΎΠ³ΡƒΡ‚ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ символы Π² Ρ‚ΠΎΠΌ Π²ΠΈΠ΄Π΅, Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ Π²Π²Π΅Π΄Π΅Π½Ρ‹, вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΆΠ΄Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°ΠΆΠΌΠ΅Ρ‚ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ Π²Π²ΠΎΠ΄Π° ΠΈΠ»ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠΈ.

Π ΠΈΡ‡ΠΈ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΠ», Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ строковыС интСрфСйсы, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π΅Ρ‰Π΅ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ систСмы Π² Π½Π°Ρ‡Π°Π»Π΅ 70-Ρ… Π³ΠΎΠ΄ΠΎΠ², Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π² составС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ³ΠΎ процСссора ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°, Π½ΠΎ Π½Π΅ Π² ядрС (см. [Ritchie 84], стр.1580). Однако, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² ΠΈΡ… функциях нуТдаСтся мноТСство ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΈΡ… мСсто Π² составС ядра. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ строковый интСрфСйс выполняСт Ρ‚Π°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… логичСски Π²Ρ‹Ρ‚Π΅ΠΊΠ°Π΅Ρ‚ Π΅Π³ΠΎ мСсто ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠΌ ΠΈ ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ ядра, ядро Π½Π΅ запускаСт строковый интСрфСйс ΠΈΠ½Π°Ρ‡Π΅, Ρ‡Π΅ΠΌ Ρ‡Π΅Ρ€Π΅Π· Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€. На РисункС 10.9 ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ…, проходящий Ρ‡Π΅Ρ€Π΅Π· Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΈ строковый интСрфСйс, ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π΅ΠΌΡƒ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ воздСйствия, проходящиС Ρ‡Π΅Ρ€Π΅Π· Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ строковый интСрфСйс ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ посрСдством Π²Ρ‹Π·ΠΎΠ²Π° систСмной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ioctl, Π½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ схСму, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ΄Π½ΠΎ устройство использовало Π±Ρ‹ нСсколько строковых интСрфСйсов ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, ΠΏΡ€ΠΈ Ρ‡Π΅ΠΌ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ интСрфСйсный ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π» Π±Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, довольно Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ.

Рисунок 10.9. ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ ΠΈ ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ… Ρ‡Π΅Ρ€Π΅Π· строковый интСрфСйс

10.3.1 Π‘ΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ списки

Π‘Ρ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹ΠΉ интСрфСйс ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… списках. Π‘ΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ список (clist) прСдставляСт собой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ список ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ² с использованиСм ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ с подсчСтом количСства символов Π² спискС. Π‘ΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ Π±Π»ΠΎΠΊ (cblock) содСрТит ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π±Π»ΠΎΠΊ Π² спискС, нСбольшой массив Ρ…Ρ€Π°Π½ΠΈΠΌΠΎΠΉ Π² символьном Π²ΠΈΠ΄Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ адрСса смСщСний, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ мСсто располоТСния Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ (Рисунок 10.10). Π‘ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π΄ΠΎ Π½Π°Ρ‡Π°Π»Π° ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ располоТСния ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² массивС, смСщСниС Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ располоТСния Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.


Рисунок 10.10. Π‘ΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ Π±Π»ΠΎΠΊ

Π―Π΄Ρ€ΠΎ обСспСчиваСт Π²Π΅Π΄Π΅Π½ΠΈΠ΅ списка свободных ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ² ΠΈ выполняСт Π½Π°Π΄ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ списками ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ ΡˆΠ΅ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ.

1. Π―Π΄Ρ€ΠΎ Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρƒ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ Π±Π»ΠΎΠΊ ΠΈΠ· списка свободных ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ².

2. Оно Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ Π±Π»ΠΎΠΊ Π² список свободных ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ².

3. Π―Π΄Ρ€ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ символ ΠΈΠ· символьного списка: ΠΎΠ½ΠΎ удаляСт ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ символ ΠΈΠ· ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ символьного Π±Π»ΠΎΠΊΠ° Π² спискС ΠΈ устанавливаСт значСния счСтчика символов Π² спискС ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π² Π±Π»ΠΎΠΊΠ΅ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π΅ Π²Ρ‹Π±ΠΈΡ€Π°Π»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ символ. Если Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ‹Π±Ρ€Π°Π½ послСдний символ Π±Π»ΠΎΠΊΠ°, ядро ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π² список свободных ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ² пустой Π±Π»ΠΎΠΊ ΠΈ пСрСустанавливаСт ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π² символьном спискС. Если Π² символьном спискС ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ символы, ядро Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ пустой символ.

4. Π―Π΄Ρ€ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ символ Π² ΠΊΠΎΠ½Π΅Ρ† символьного списка ΠΏΡƒΡ‚Π΅ΠΌ поиска послСднСго символьного Π±Π»ΠΎΠΊΠ° Π² спискС, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ символа Π² Π½Π΅Π³ΠΎ ΠΈ пСрСустановки адрСсов смСщСний. Если ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ Π±Π»ΠΎΠΊ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½, ядро выдСляСт Π½ΠΎΠ²Ρ‹ΠΉ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ Π±Π»ΠΎΠΊ, Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π΅Π³ΠΎ Π² ΠΊΠΎΠ½Π΅Ρ† символьного списка ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ символ Π² Π½ΠΎΠ²Ρ‹ΠΉ Π±Π»ΠΎΠΊ.

5. Π―Π΄Ρ€ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° списка Π³Ρ€ΡƒΠΏΠΏΡƒ символов ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π±Π»ΠΎΠΊΡƒ Π·Π° ΠΎΠ΄Π½Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ, Ρ‡Ρ‚ΠΎ эквивалСнтно ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡŽ всСх символов Π² Π±Π»ΠΎΠΊΠ΅ Π·Π° ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·.

6. Π―Π΄Ρ€ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊ с символами Π² ΠΊΠΎΠ½Π΅Ρ† символьного списка.

Π‘ΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ списки ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ нСслоТный ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΏΡ€ΠΈ нСбольшом объСмС ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠΌ для ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Ρ… устройств, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Ρ‹. Они Π΄Π°ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ символом Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ с Π³Ρ€ΡƒΠΏΠΏΠΎΠΉ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ². НапримСр, Рисунок 10.11 ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ символов ΠΈΠ· символьного списка; ядро удаляСт ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ символу ΠΈΠ· ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° Π² спискС (Рисунок 10.11Π°-Π²) Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π² Π±Π»ΠΎΠΊΠ΅ Π½Π΅ останСтся Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ символа (Рисунок 10.11 Π³); Π·Π°Ρ‚Π΅ΠΌ ΠΎΠ½ΠΎ устанавливаСт ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ списка Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π±Π»ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ становится ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π±Π»ΠΎΠΊΠΎΠΌ Π² спискС. Подобно этому Π½Π° РисункС 10.12 ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ядро Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ символы Π² ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ список; ΠΏΡ€ΠΈ этом прСдполагаСтся, Ρ‡Ρ‚ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅ помСщаСтся Π΄ΠΎ 8 символов ΠΈ Ρ‡Ρ‚ΠΎ ядро Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ Π±Π»ΠΎΠΊ Π² ΠΊΠΎΠ½Ρ†Π΅ списка (Рисунок 10.12 Π³).

Рисунок 10.11. Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ символов ΠΈΠ· символьного списка

Рисунок 10.12. Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ символов Π² ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ список

10.3.2 Π’Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Π² каноничСском Ρ€Π΅ΠΆΠΈΠΌΠ΅

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹, связаны с трСмя ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ списками: списком для хранСния Π΄Π°Π½Π½Ρ‹Ρ…, Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π», списком для хранСния нСструктурированных Π²Π²ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΡΡ‚ΡƒΠΏΠΈΠ²ΡˆΠΈΡ… Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ прСрывания ΠΎΡ‚ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°, Π²Ρ‹Π·Π²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΎΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ввСсти Π΄Π°Π½Π½Ρ‹Π΅ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹, ΠΈ списком для хранСния ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΡΡ‚ΡƒΠΏΠΈΠ²ΡˆΠΈΡ… Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ прСобразования строковым интСрфСйсом ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… символов (Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ символы стирания ΠΈ удалСния) Π² нСструктурированном спискС.

Когда процСсс Π²Π΅Π΄Π΅Ρ‚ запись Π½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» (Рисунок 10.13), Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ запускаСт строковый интСрфСйс. Π‘Ρ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹ΠΉ интСрфСйс Π² Ρ†ΠΈΠΊΠ»Π΅ считываСт символы ΠΈΠ· адрСсного пространства процСсса ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΈΡ… Π² ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ список для хранСния Π²Ρ‹Π²ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ исчСрпан. Π‘Ρ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹ΠΉ интСрфСйс ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ символы, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, замСняя символы табуляции Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ². Если количСство символов Π² спискС для хранСния Π²Ρ‹Π²ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… прСвысит Π²Π΅Ρ€Ρ…Π½ΡŽΡŽ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΡƒ, строковый интСрфСйс Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°, ΠΏΠ΅Ρ€Π΅ΡΡ‹Π»Π°ΡŽΡ‰ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· символьного списка Π½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» ΠΈ послС этого ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ процСсса, Π²Π΅Π΄ΡƒΡ‰Π΅Π³ΠΎ запись. Когда объСм ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² спискС для хранСния Π²Ρ‹Π²ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠ°Π΄Π°Π΅Ρ‚ Π·Π° ниТнюю ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΡƒ, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ возобновляСт Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ всСх процСссов, приостановлСнных Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, ΠΊΠΎΠ³Π΄Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» смоТСт ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΠΎΡ€Ρ†ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ…. Π‘Ρ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹ΠΉ интСрфСйс Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Ρ†ΠΈΠΊΠ» ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, скопировав всю Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈΠ· адрСсного пространства Π·Π°Π΄Π°Ρ‡ΠΈ Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ список, ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°, ΠΏΠ΅Ρ€Π΅ΡΡ‹Π»Π°ΡŽΡ‰ΠΈΡ… Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π», ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ сказано Π²Ρ‹ΡˆΠ΅.


Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ terminal_write

{

 do while(ΠΈΠ· пространства Π·Π°Π΄Π°Ρ‡ΠΈ Π΅Ρ‰Π΅ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Π΅) {

  if (Π½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» поступаСт информация) {

   ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· списка, хранящСго Π²Ρ‹Π²ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅;

   ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ (Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, ΠΊΠΎΠ³Π΄Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» Π±ΡƒΠ΄Π΅Ρ‚ Π³ΠΎΡ‚ΠΎΠ² ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΠΎΡ€Ρ†ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ…);

   continue; /* Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΊ Π½Π°Ρ‡Π°Π»Ρƒ Ρ†ΠΈΠΊΠ»Π° */

  }

  ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² объСмС символьного Π±Π»ΠΎΠΊΠ° ΠΈΠ· пространства Π·Π°Π΄Π°Ρ‡ΠΈ Π² список, хранящий Π²Ρ‹Π²ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅: строковый интСрфСйс ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ символы табуляции ΠΈ Ρ‚. Π΄.;

 }

 ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· списка, хранящСго Π²Ρ‹Π²ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅;

}

Рисунок 10.13. Алгоритм пСрСписи Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»


'Если Π½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» Π²Π΅Π΄ΡƒΡ‚ запись нСсколько процСссов, ΠΎΠ½ΠΈ нСзависимо Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅. Выводимая информация ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ искаТСна; Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅ Π΄Π°Π½Π½Ρ‹Π΅, записываСмыС процСссами, ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°Ρ‚ΡŒΡΡ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ процСссы Π²Π΅Π΄ΡƒΡ‚ запись Π½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ нСсколько Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² систСмной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ write. Π―Π΄Ρ€ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ контСкст, ΠΏΠΎΠΊΠ° процСсс выполняСтся Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ write, ΠΈ вновь Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Π΅ процСссы ΠΌΠΎΠ³ΡƒΡ‚ вСсти запись Π½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π», ΠΏΠΎΠΊΠ° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΠ· процСссов приостановлСн. Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ искаТСны ΠΈ Π½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ процСсс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ Π½Π° сСрСдинС выполнСния систСмной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ write, оТидая Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» ΠΈΠ· систСмы ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΏΠΎΡ€Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Π―Π΄Ρ€ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ процСссы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π»ΠΈ запись Π½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ процСсс Π±Ρ‹Π» ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π·Π°ΠΏΡƒΡ‰Π΅Π½. По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅, ядро Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ содСрТимоС Π±ΡƒΡ„Π΅Ρ€Π° Π΄Π°Π½Π½Ρ‹Ρ…, Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΠΎΠ΅ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²Ρ‹Π·ΠΎΠ²Π° систСмной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ write, появится Π½Π° экранС Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° Π² Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅.