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

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

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

Рисунок 4.16. ΠšΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ†ΠΈΡ Π² Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ индСксов


Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„Π΅ ΠΎΠΏΠΈΡΡ‹Π²Π°Π»ΠΈΡΡŒ простыС случаи Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ². Π’Π΅ΠΏΠ΅Ρ€ΡŒ рассмотрим случай, ΠΊΠΎΠ³Π΄Π° ядро Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ индСкс ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ. Π’ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ прСдполагаСтся, Ρ‡Ρ‚ΠΎ ядро ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ индСкс ΡƒΠΆΠ΅ Π½Π°Π·Π½Π°Ρ‡Π΅Π½. НСсмотря Π½Π° Ρ€Π΅Π΄ΠΊΠΎΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ситуации, обсудим этот случай (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Рисунков 4.16 ΠΈ 4.17). ΠŸΡƒΡΡ‚ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ процСсса, A, B ΠΈ C, ΠΈ ΠΏΡƒΡΡ‚ΡŒ ядро, дСйствуя ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ процСсса A[13], Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚ индСкс I, Π½ΠΎ приостанавливаСт Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ процСсса ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ дисковый индСкс Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ. Алгоритмы iget (Π²Ρ‹Π·Π²Π°Π½Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ ialloc) ΠΈ bread (Π²Ρ‹Π·Π²Π°Π½Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ iget) Π΄Π°ΡŽΡ‚ процСссу A достаточно возмоТностСй для приостановлСния своСй Ρ€Π°Π±ΠΎΡ‚Ρ‹. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΊΠ° процСсс A приостановлСн, процСсс B пытаСтся Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ индСкс, Π½ΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ список свободных индСксов Π² супСрблокС пуст. ΠŸΡ€ΠΎΡ†Π΅ΡΡ B просматриваСт диск Π² поисках свободных индСксов, ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ это Π΄Π΅Π»Π°Ρ‚ΡŒ с индСкса, ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎ мСньший Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с индСксом, Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΌ процСссом A. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ процСсс B ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ индСкс I Π½Π° дискС свободным, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ процСсс A всС Π΅Ρ‰Π΅ приостановлСн, Π° ядро Π΅Ρ‰Π΅ Π½Π΅ Π·Π½Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ этот индСкс ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡ‚ΡΡ Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ. ΠŸΡ€ΠΎΡ†Π΅ΡΡ B, Π½Π΅ осознавая опасности, Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅Ρ‚ просмотр диска, заполняСт супСрблок свободными (ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ) индСксами, Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚ индСкс ΠΈ ΡƒΡ…ΠΎΠ΄ΠΈΡ‚ со сцСны. Однако, индСкс I остаСтся Π² спискС Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² свободных индСксов Π² супСрблокС. Когда процСсс A возобновляСт Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, ΠΎΠ½ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅Ρ‚ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ индСкса I. Π’Π΅ΠΏΠ΅Ρ€ΡŒ допустим, Ρ‡Ρ‚ΠΎ процСсс C Π·Π°Ρ‚Π΅ΠΌ Π·Π°Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π» индСкс ΠΈ случайно Π²Ρ‹Π±Ρ€Π°Π» индСкс I ΠΈΠ· списка Π² супСрблокС. Когда ΠΎΠ½ обратится ΠΊ ΠΊΠΎΠΏΠΈΠΈ индСкса Π² памяти, ΠΎΠ½ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ ΠΈΠ· установки Ρ‚ΠΈΠΏΠ° Ρ„Π°ΠΉΠ»Π°, Ρ‡Ρ‚ΠΎ индСкс ΡƒΠΆΠ΅ Π½Π°Π·Π½Π°Ρ‡Π΅Π½. Π―Π΄Ρ€ΠΎ провСряСт это условиС ΠΈ, ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ², Ρ‡Ρ‚ΠΎ этот индСкс Π½Π°Π·Π½Π°Ρ‡Π΅Π½, пытаСтся Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ. НСмСдлСнная ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΡŒ скоррСктированного индСкса Π½Π° диск послС Π΅Π³ΠΎ назначСния Π² соотвСтствии с Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ ialloc сниТаСт ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ†ΠΈΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠΎΠ»Π΅ Ρ‚ΠΈΠΏΠ° Ρ„Π°ΠΉΠ»Π° Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‚ΠΊΡƒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ индСкс использован.


Рисунок 4.17. ΠšΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ†ΠΈΡ Π² Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ индСксов (ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅)


Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° списка индСксов Π² супСрблокС ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ с диска устраняСт Π΄Ρ€ΡƒΠ³ΠΈΠ΅ возмоТности для ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ†ΠΈΠΈ. Если супСрблок Π½Π΅ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½, процСсс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ пуст, ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ с диска, врСмя ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ приостанавливая своС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ процСсс Ρ‚Π°ΠΊ ΠΆΠ΅ пытаСтся Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ индСкс ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ список пуст. Он Ρ‚ΠΎΠΆΠ΅ попытаСтся Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ список с диска. Π’ Π»ΡƒΡ‡ΡˆΠ΅ΠΌ случаС, ΠΎΠ±Π° процСсса ΠΏΡ€ΠΎΠ΄ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π° ΠΈ потратят ΡΠ½Π΅Ρ€Π³ΠΈΡŽ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ процСссора. Π’ Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ, участится конкурСнция, подобная Ρ‚ΠΎΠΉ, которая описана Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„Π΅. Π‘Ρ…ΠΎΠ΄Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли процСсс, освобоТдая индСкс, Π½Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ» Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ списка, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Ρ‚Π΅Ρ€Π΅Ρ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€Π° индСксов ΡƒΠΆΠ΅ Π² спискС свободных индСксов, ΠΏΠΎΠΊΠ° Π΄Ρ€ΡƒΠ³ΠΎΠΉ процСсс Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ этот список ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ с диска. И ΠΎΠΏΡΡ‚ΡŒ участится конкурСнция Π²Ρ‹ΡˆΠ΅ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ядро Π±ΠΎΠ»Π΅Π΅ ΠΈΠ»ΠΈ ΠΌΠ΅Π½Π΅Π΅ ΡƒΠ΄Π°Ρ‡Π½ΠΎ управляСтся с Π½Π΅ΠΉ, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ систСмы сниТаСтся. Установка Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ для списка свободных индСксов Π² супСрблокС устраняСт Ρ‚Π°ΠΊΡƒΡŽ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ†ΠΈΡŽ.

4.7 Π’Π«Π”Π•Π›Π•ΠΠ˜Π• Π”Π˜Π‘ΠšΠžΠ’Π«Π₯ Π‘Π›ΠžΠšΠžΠ’

Когда процСсс записываСт Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ„Π°ΠΉΠ», ядро Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы дисковыС Π±Π»ΠΎΠΊΠΈ ΠΏΠΎΠ΄ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ прямой адрСсации ΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΏΠΎΠ΄ Π±Π»ΠΎΠΊΠΈ косвСнной адрСсации. Π‘ΡƒΠΏΠ΅Ρ€Π±Π»ΠΎΠΊ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы содСрТит массив, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для хранСния Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² свободных дисковых Π±Π»ΠΎΠΊΠΎΠ² Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС. БСрвисная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° mkfs (Β«make file systemΒ» β€” ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»ΠΎΠ²ΡƒΡŽ систСму) ΠΎΡ€Π³Π°Π½ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС Π² Π²ΠΈΠ΄Π΅ списка с указатСлями Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт списка ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° дисковый Π±Π»ΠΎΠΊ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ хранится массив Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² свободных дисковых Π±Π»ΠΎΠΊΠΎΠ², Π° ΠΎΠ΄ΠΈΠ½ ΠΈΠ· элСмСнтов массива Ρ…Ρ€Π°Π½ΠΈΡ‚ Π½ΠΎΠΌΠ΅Ρ€ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π±Π»ΠΎΠΊΠ° Π΄Π°Π½Π½ΠΎΠ³ΠΎ списка.

Когда ядру Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊ ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы (Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ alloc, Рисунок 4.19), ΠΎΠ½ΠΎ выдСляСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΈΠ· Π±Π»ΠΎΠΊΠΎΠ², ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ Π² спискС Π² супСрблокС. Π’Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ‹, Π±Π»ΠΎΠΊ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ освободится. Если Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ являСтся послСдним Π±Π»ΠΎΠΊΠΎΠΌ, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌΡΡ Π² кСшС супСрблока, ядро Ρ‚Ρ€Π°ΠΊΡ‚ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π±Π»ΠΎΠΊ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ хранится список свободных Π±Π»ΠΎΠΊΠΎΠ². Π―Π΄Ρ€ΠΎ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ Π±Π»ΠΎΠΊ, заполняСт массив Π² супСрблокС Π½ΠΎΠ²Ρ‹ΠΌ списком Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² Π±Π»ΠΎΠΊΠΎΠ² ΠΈ послС этого ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ Π±Π»ΠΎΠΊΠ°. Оно выдСляСт Π±ΡƒΡ„Π΅Ρ€ для Π±Π»ΠΎΠΊΠ° ΠΈ ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚ содСрТимоС Π±ΡƒΡ„Π΅Ρ€Π° (обнуляСт Π΅Π³ΠΎ). Дисковый Π±Π»ΠΎΠΊ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ считаСтся Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΌ ΠΈ Ρƒ ядра Π΅ΡΡ‚ΡŒ Π±ΡƒΡ„Π΅Ρ€ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌ. Если Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС Π½Π΅Ρ‚ свободных Π±Π»ΠΎΠΊΠΎΠ², Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ процСсс ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ сообщСниС ΠΎΠ± ошибкС.

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


Рисунок 4.18. Бписок Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² свободных дисковых Π±Π»ΠΎΠΊΠΎΠ² с указатСлями


Алгоритм освобоТдСния Π±Π»ΠΎΠΊΠ° free β€” ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ выдСлСния Π±Π»ΠΎΠΊΠ°. Если список Π² супСрблокС Π½Π΅ ΠΏΠΎΠ»ΠΎΠ½, Π½ΠΎΠΌΠ΅Ρ€ вновь освобоТдСнного Π±Π»ΠΎΠΊΠ° Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² этот список. Если, ΠΎΠ΄Π½Π°ΠΊΠΎ, список ΠΏΠΎΠ»ΠΎΠ½, вновь освобоТдСнный Π±Π»ΠΎΠΊ становится связным Π±Π»ΠΎΠΊΠΎΠΌ; ядро пСрСписываСт Π² Π½Π΅Π³ΠΎ список ΠΈΠ· супСрблока ΠΈ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ Π±Π»ΠΎΠΊ Π½Π° диск. Π—Π°Ρ‚Π΅ΠΌ Π½ΠΎΠΌΠ΅Ρ€ вновь освобоТдСнного Π±Π»ΠΎΠΊΠ° Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² список свободных Π±Π»ΠΎΠΊΠΎΠ² Π² супСрблокС. Π­Ρ‚ΠΎΡ‚ Π½ΠΎΠΌΠ΅Ρ€ становится СдинствСнным Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ Π² спискС.

На РисункС 4.20 ΠΏΠΎΠΊΠ°Π·Π°Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ alloc ΠΈ free для случая, ΠΊΠΎΠ³Π΄Π° Π² исходный ΠΌΠΎΠΌΠ΅Π½Ρ‚ список свободных Π±Π»ΠΎΠΊΠΎΠ² содСрТал ΠΎΠ΄ΠΈΠ½ элСмСнт. Π―Π΄Ρ€ΠΎ освобоТдаСт Π±Π»ΠΎΠΊ 949 ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π½ΠΎΠΌΠ΅Ρ€ Π±Π»ΠΎΠΊΠ° Π² список. Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ½ΠΎ выдСляСт этот Π±Π»ΠΎΠΊ ΠΈ удаляСт Π΅Π³ΠΎ Π½ΠΎΠΌΠ΅Ρ€ ΠΈΠ· списка. НаконСц, ΠΎΠ½ΠΎ выдСляСт Π±Π»ΠΎΠΊ 109 ΠΈ удаляСт Π΅Π³ΠΎ Π½ΠΎΠΌΠ΅Ρ€ ΠΈΠ· списка. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ список свободных Π±Π»ΠΎΠΊΠΎΠ² Π² супСрблокС Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ пуст, ядро снова наполняСт список, копируя Π² Π½Π΅Π³ΠΎ содСрТимоС Π±Π»ΠΎΠΊΠ° 109, ΡΠ²Π»ΡΡŽΡ‰Π΅Π³ΠΎΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ связью Π² спискС с указатСлями. На РисункС 4.20(Π³) ΠΏΠΎΠΊΠ°Π·Π°Π½ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΉ список Π² супСрблокС ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ связной Π±Π»ΠΎΠΊ с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ 211.


Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ alloc /* Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы */

входная информация: Π½ΠΎΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы

выходная информация: Π±ΡƒΡ„Π΅Ρ€ для Π½ΠΎΠ²ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°

{

 do (ΠΏΠΎΠΊΠ° супСрблок Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½)

  sleep (Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, ΠΊΠΎΠ³Π΄Π° с супСрблока Π±ΡƒΠ΄Π΅Ρ‚ снята Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°);

 ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊ ΠΈΠ· списка свободных Π±Π»ΠΎΠΊΠΎΠ² Π² супСрблокС;

 if (ΠΈΠ· списка ΡƒΠ΄Π°Π»Π΅Π½ послСдний Π±Π»ΠΎΠΊ) {

  Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ супСрблок;

  ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ взятый ΠΈΠ· списка свободных (Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ bread);

  ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€Π° Π±Π»ΠΎΠΊΠΎΠ², хранящиСся Π² Π΄Π°Π½Π½ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅, Π² супСрблок;

  ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ Π±Π»ΠΎΡ‡Π½Ρ‹ΠΉ Π±ΡƒΡ„Π΅Ρ€ (Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ brelse);

  ΡΠ½ΡΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ с супСрблока;

  Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ процСссов (послС снятия Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ с супСрблока);

 }

 ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π±ΡƒΡ„Π΅Ρ€ для Π±Π»ΠΎΠΊΠ°, ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ· списка (Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ getblk);

 ΠΎΠ±Π½ΡƒΠ»ΠΈΡ‚ΡŒ содСрТимоС Π±ΡƒΡ„Π΅Ρ€Π°;

 ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ ΠΎΠ±Ρ‰Π΅Π΅ число свободных Π±Π»ΠΎΠΊΠΎΠ²;

 ΠΏΠΎΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ супСрблок ΠΊΠ°ΠΊ Β«ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΉΒ»;

 return Π±ΡƒΡ„Π΅Ρ€;

}

Рисунок 4.19. Алгоритм выдСлСния дискового Π±Π»ΠΎΠΊΠ°


Алгоритмы назначСния ΠΈ освобоТдСния индСксов ΠΈ дисковых Π±Π»ΠΎΠΊΠΎΠ² сходятся Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ядро ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ супСрблок Π² качСствС кСша, хранящСго ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° свободныС рСсурсы β€” Π½ΠΎΠΌΠ΅Ρ€Π° Π±Π»ΠΎΠΊΠΎΠ² ΠΈ Π½ΠΎΠΌΠ΅Ρ€Π° индСксов. Оно ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ список Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² Π±Π»ΠΎΠΊΠΎΠ² с указатСлями, Ρ‚Π°ΠΊΠΎΠΉ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€ свободного Π±Π»ΠΎΠΊΠ° Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС появляСтся Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ элСмСнтС списка, Π½ΠΎ ядро Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠ³ΠΎ списка для свободных индСксов. Π’ΠΎΠΌΡƒ Π΅ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹.

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