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

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

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

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


Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ialloc /* Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ индСкса */

входная информация: файловая систСма

выходная информация: Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ индСкс

{

 do {

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

   sleep (ΠΏΠΎΠΊΠ° супСрблок Π½Π΅ освободится);

   continue; /* Ρ†ΠΈΠΊΠ» с условиСм продолТСния */

  }

  if (список индСксов Π² супСрблокС пуст) {

   Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ супСрблок; Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π·Π°ΠΏΠΎΠΌΠ½Π΅Π½Π½Ρ‹ΠΉ индСкс для поиска свободных индСксов;

  ΠΈΡΠΊΠ°Ρ‚ΡŒ Π½Π° дискС свободныС индСксы Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° супСрблок Π½Π΅ заполнится ΠΈΠ»ΠΈ ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°ΠΉΠ΄Π΅Π½Ρ‹ всС свободныС индСксы (Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ bread ΠΈ brelse);

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

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

   if (Π½Π° дискС ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ свободныС индСксы)  return (Π½Π΅Ρ‚ индСксов);

   Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ индСкс с наибольшим Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ срСди Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… поисков свободных индСксов;

  }

  /* список индСксов Π² супСрблокС Π½Π΅ пуст */

  Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€ индСкса ΠΈΠ· списка индСксов Π² супСрблокС;

  ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ индСкс (Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ iget);

  if (индСкс послС всСго этого Π½Π΅ свободСн) { /*!!! */

   ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ индСкс Π½Π° диск;

   ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ индСкс (Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ iput);

   continue; /* Ρ†ΠΈΠΊΠ» с условиСм продолТСния */

  }

  /* индСкс свободСн */

  ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ индСкс;

  ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ индСкс Π½Π° диск;

  ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ счСтчик свободных индСксов Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС;

  return (индСкс);

 }

}

Рисунок 4.12. Алгоритм назначСния Π½ΠΎΠ²Ρ‹Ρ… индСксов


На РисункС 4.12 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ialloc назначСния Π½ΠΎΠ²Ρ‹Ρ… индСксов. По ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Ρ€Π΅Ρ‡ΡŒ Π½ΠΈΠΆΠ΅, ядро сначала провСряСт, Π½Π΅ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π» Π»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ процСсс своим ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ список свободных индСксов Π² супСрблокС. Если список Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² индСксов Π² супСрблокС Π½Π΅ пуст, ядро Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚ Π½ΠΎΠΌΠ΅Ρ€ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ индСкса, выдСляСт для вновь Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠ³ΠΎ дискового индСкса свободный индСкс Π² памяти, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ iget (читая индСкс с диска, Ссли Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ), ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ дисковый индСкс Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ поля Π² индСксС ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ индСкс Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ. Π—Π°Ρ‚Π΅ΠΌ ядро ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ дисковый индСкс, указывая, Ρ‡Ρ‚ΠΎ ΠΊ индСксу ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅. НСнулСвоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля Ρ‚ΠΈΠΏΠ° Ρ„Π°ΠΉΠ»Π° Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ дисковый индСкс Π½Π°Π·Π½Π°Ρ‡Π΅Π½. Π’ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΌ случаС с индСксом всС Π² порядкС, Π½ΠΎ Π² условиях ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ†ΠΈΠΈ дСлаСтся Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ, Π½Π° Ρ‡Π΅ΠΌ ΠΌΡ‹ Π΅Ρ‰Π΅ ΠΊΡ€Π°Ρ‚ΠΊΠΎ остановимся. Π“Ρ€ΡƒΠ±ΠΎ говоря, конкурСнция Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° нСсколько процСссов вносят измСнСния Π² ΠΎΠ±Ρ‰ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ структуры, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ зависит ΠΎΡ‚ очСрСдности выполнСния процСссов, ΠΏΡƒΡΡ‚ΡŒ Π΄Π°ΠΆΠ΅ всС процСссы Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ΄Ρ‡ΠΈΠ½ΡΡ‚ΡŒΡΡ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ. Π—Π΄Π΅ΡΡŒ прСдполагаСтся, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎ процСсс ΠΌΠΎΠ³ Π±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡƒΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ индСкс. ΠšΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ†ΠΈΡ связана с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ Π²Π·Π°ΠΈΠΌΠ½ΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, описанной Π² Π³Π»Π°Π²Π΅ 2, с ΠΎΠ΄Π½ΠΈΠΌ Π·Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ΠΌ: Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ схСмы Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Ρ€Π΅ΡˆΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Π²Π·Π°ΠΈΠΌΠ½ΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Π½ΠΎ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ сами ΠΏΠΎ сСбС Ρ€Π΅ΡˆΠΈΡ‚ΡŒ всС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ†ΠΈΠΈ.

Если список свободных индСксов Π² супСрблокС пуст, ядро просматриваСт диск ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π² супСрблок ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ большС Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² свободных индСксов. ΠŸΡ€ΠΈ этом ядро Π±Π»ΠΎΠΊ Π·Π° Π±Π»ΠΎΠΊΠΎΠΌ считываСт индСксы с диска ΠΈ наполняСт список Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² индСксов Π² супСрблокС Π΄ΠΎ ΠΎΡ‚ΠΊΠ°Π·Π°, запоминая индСкс с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ, наибольшим срСди Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Ρ…. НазовСм этот индСкс Β«Π·Π°ΠΏΠΎΠΌΠ½Π΅Π½Π½Ρ‹ΠΌΒ»; это послСдний индСкс, записанный Π² супСрблок. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ядро Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ°Ρ‚ΡŒ Π½Π° дискС свободныС индСксы, ΠΎΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π·Π°ΠΏΠΎΠΌΠ½Π΅Π½Π½Ρ‹ΠΉ индСкс Π² качСствС стартовой Ρ‚ΠΎΡ‡ΠΊΠΈ, благодаря Ρ‡Π΅ΠΌΡƒ гарантируСтся, Ρ‡Ρ‚ΠΎ ядру Π½Π΅ придСтся зря Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя Π½Π° считываниС дисковых Π±Π»ΠΎΠΊΠΎΠ², Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… свободныС индСксы навСрняка ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚. ПослС формирования Π½ΠΎΠ²ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² свободных индСксов ядро запускаСт Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ назначСния индСкса с самого Π½Π°Ρ‡Π°Π»Π°. Всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ядро Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚ дисковый индСкс, ΠΎΠ½ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика свободных индСксов, записанноС Π² супСрблокС.

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

Рисунок 4.13. Π”Π²Π° массива Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² свободных индСксов


Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ifree /* освобоТдСниС индСкса */

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

выходная информация: отсутствуСт

{

 ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π½Π° 1 счСтчик свободных индСксов Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС;

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

 if (список индСксов Π·Π°ΠΏΠΎΠ»Π½Π΅Π½) {

  if (Π½ΠΎΠΌΠ΅Ρ€ индСкса мСньшС Π½ΠΎΠΌΠ΅Ρ€Π° индСкса, Π·Π°ΠΏΠΎΠΌΠ½Π΅Π½Π½ΠΎΠ³ΠΎ для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ просмотра)

   Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ просмотра Π½ΠΎΠΌΠ΅Ρ€ Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ индСкса;

 }

 Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€ индСкса Π² спискС индСксов;

 return;

}

Рисунок 4.14. Алгоритм освобоТдСния индСкса


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

Рассмотрим Π΄Π²Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° освобоТдСния индСксов. Если Π² спискС свободных индСксов Π² супСрблокС Π΅Ρ‰Π΅ Π΅ΡΡ‚ΡŒ мСсто для Π½ΠΎΠ²Ρ‹Ρ… Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² свободных индСксов (ΠΊΠ°ΠΊ Π½Π° РисункС 4.13(Π°)), ядро ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π² список Π½ΠΎΠ²Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€, пСрСставляСт ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ свободный индСкс ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ процСсса. Но Ссли список свободных индСксов Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ (Рисунок 4.15), ядро сравниваСт Π½ΠΎΠΌΠ΅Ρ€ освобоТдСнного индСкса с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ Π·Π°ΠΏΠΎΠΌΠ½Π΅Π½Π½ΠΎΠ³ΠΎ индСкса, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ начнСтся просмотр диска Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·. Если Π²Π½Π°Ρ‡Π°Π»Π΅ список свободных индСксов ΠΈΠΌΠ΅Π» Π²ΠΈΠ΄, ΠΊΠ°ΠΊ Π½Π° РисункС 4.15(Π°), Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° ядро освобоТдаСт индСкс с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ 499, ΠΎΠ½ΠΎ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΈ Π²Ρ‹Ρ‚Π°Π»ΠΊΠΈΠ²Π°Π΅Ρ‚ Π½ΠΎΠΌΠ΅Ρ€ 535 ΠΈΠ· списка. Если Π·Π°Ρ‚Π΅ΠΌ ядро освобоТдаСт индСкс с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ 601, содСрТимоС списка свободных индСксов Π½Π΅ измСнится. Когда ΠΏΠΎΠ·Π΄Π½Π΅Π΅ ядро ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ всС индСксы ΠΈΠ· списка свободных индСксов Π² супСрблокС, ΠΎΠ½ΠΎ обратится Π² поисках свободных индСксов ΠΊ диску, ΠΏΡ€ΠΈ этом, Π½Π°Ρ‡Π°Π² просмотр с индСкса с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ 499, ΠΎΠ½ΠΎ снова ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ индСксы 535 ΠΈ 601.


Рисунок 4.15. Π Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² свободных индСксов Π² супСрблокС



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