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

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

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

4.1.2 ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ индСксам

Π―Π΄Ρ€ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ индСксы ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы ΠΈ Π½ΠΎΠΌΠ΅Ρ€Ρƒ индСкса ΠΈ выдСляСт индСксы Π² памяти ΠΏΠΎ запросам ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ². Алгоритм iget Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚ индСксу мСсто для ΠΊΠΎΠΏΠΈΠΈ Π² памяти (Рисунок 4.3); ΠΎΠ½ ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π΅Π½ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ getblk для поиска дискового Π±Π»ΠΎΠΊΠ° Π² Π±ΡƒΡ„Π΅Ρ€Π½ΠΎΠΌ кСшС. Π―Π΄Ρ€ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π½ΠΎΠΌΠ΅Ρ€Π° устройства ΠΈ индСкса Π² имя Ρ…Π΅Ρˆ-ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ просматриваСт эту Ρ…Π΅Ρˆ-ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π² поисках индСкса. Если индСкс Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½, ядро выдСляСт Π΅Π³ΠΎ ΠΈΠ· списка свободных индСксов ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ. Π—Π°Ρ‚Π΅ΠΌ ядро готовится ΠΊ Ρ‡Ρ‚Π΅Π½ΠΈΡŽ с диска Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ индСкса, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΎΠ½ΠΎ обращаСтся. Π―Π΄Ρ€ΠΎ ΡƒΠΆΠ΅ Π·Π½Π°Π΅Ρ‚ Π½ΠΎΠΌΠ΅Ρ€Π° индСкса ΠΈ логичСского устройства ΠΈ вычисляСт Π½ΠΎΠΌΠ΅Ρ€ логичСского Π±Π»ΠΎΠΊΠ° Π½Π° дискС, содСрТащСго индСкс, с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ Ρ‚ΠΎΠ³ΠΎ, сколько дисковых индСксов помСщаСтся Π² ΠΎΠ΄Π½ΠΎΠΌ дисковом Π±Π»ΠΎΠΊΠ΅. ВычислСния производятся ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅

Π½ΠΎΠΌΠ΅Ρ€ Π±Π»ΠΎΠΊΠ° = ((Π½ΠΎΠΌΠ΅Ρ€ индСкса β€” 1) / число индСксов Π² Π±Π»ΠΎΠΊΠ΅) + Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Π±Π»ΠΎΠΊ Π² спискС индСксов

Π³Π΄Π΅ опСрация дСлСния Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ†Π΅Π»ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ частного. НапримСр, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π±Π»ΠΎΠΊ 2 являСтся Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ Π² спискС индСксов ΠΈ Ρ‡Ρ‚ΠΎ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ 8 индСксов, Ρ‚ΠΎΠ³Π΄Π° индСкс с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ 8 находится Π² Π±Π»ΠΎΠΊΠ΅ 2, Π° индСкс с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ 9 β€” Π² Π±Π»ΠΎΠΊΠ΅ 3. Если ΠΆΠ΅ Π² дисковом Π±Π»ΠΎΠΊΠ΅ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ 16 индСксов, Ρ‚ΠΎΠ³Π΄Π° индСксы с Π½ΠΎΠΌΠ΅Ρ€Π°ΠΌΠΈ 8 ΠΈ 9 Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π² дисковом Π±Π»ΠΎΠΊΠ΅ с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ 2, Π° индСкс с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ 17 являСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ индСксом Π² дисковом Π±Π»ΠΎΠΊΠ΅ 3.


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

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

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

{

 do {

  if (индСкс Π² индСксном кСшС) {

   if (индСкс Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½) {

    sleep (Π΄ΠΎ освобоТдСния индСкса);

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

   }

   /* ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° для Ρ‚ΠΎΡ‡Π΅ΠΊ монтирования (Π³Π»Π°Π²Π° 5) */

   if (индСкс Π² спискС свободных индСксов) ΡƒΠ±Ρ€Π°Ρ‚ΡŒ ΠΈΠ· списка свободных индСксов;

   ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ счСтчик ссылок для индСкса;

   return (индСкс);

  }

  /* индСкс отсутствуСт Π² индСксном кСшС */

  if (список свободных индСксов пуст) return (ΠΎΡˆΠΈΠ±ΠΊΡƒ);

  ΡƒΠ±Ρ€Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ индСкс ΠΈΠ· списка свободных индСксов;

  ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€ индСкса ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы;

  ΡƒΠ±Ρ€Π°Ρ‚ΡŒ индСкс ΠΈΠ· старой Ρ…Π΅Ρˆ-ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² Π½ΠΎΠ²ΡƒΡŽ;

  ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ индСкс с диска (Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ bread);

  ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ индСкс (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, установив счСтчик ссылок Π² 1);

  return(индСкс);

 }

}

Рисунок 4.3. Алгоритм выдСлСния индСксов Π² памяти


Если ядро Π·Π½Π°Π΅Ρ‚ Π½ΠΎΠΌΠ΅Ρ€Π° устройства ΠΈ дискового Π±Π»ΠΎΠΊΠ°, ΠΎΠ½ΠΎ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ Π±Π»ΠΎΠΊ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ bread (Π³Π»Π°Π²Π° 2), Π·Π°Ρ‚Π΅ΠΌ вычисляСт смСщСниС индСкса Π² Π±Π°ΠΉΡ‚Π°Ρ… Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅:

((Π½ΠΎΠΌΠ΅Ρ€ индСкса β€“ 1) mod (число индСксов Π² Π±Π»ΠΎΠΊΠ΅)) * Ρ€Π°Π·ΠΌΠ΅Ρ€ дискового индСкса

НапримСр, Ссли ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ дисковый индСкс Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 64 Π±Π°ΠΉΡ‚Π° ΠΈ Π² Π±Π»ΠΎΠΊΠ΅ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ 8 индСксов, Ρ‚ΠΎΠ³Π΄Π° индСкс с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ 8 ΠΈΠΌΠ΅Π΅Ρ‚ адрСс со смСщСниСм 448 Π±Π°ΠΉΡ‚ ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° дискового Π±Π»ΠΎΠΊΠ°. Π―Π΄Ρ€ΠΎ ΡƒΠ±ΠΈΡ€Π°Π΅Ρ‚ индСкс Π² памяти ΠΈΠ· списка свободных индСксов, ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π΅Π³ΠΎ Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Ρ…Π΅Ρˆ-ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΈ устанавливаСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика ссылок Ρ€Π°Π²Π½Ρ‹ΠΌ 1. Π―Π΄Ρ€ΠΎ пСрСписываСт поля Ρ‚ΠΈΠΏΠ° Ρ„Π°ΠΉΠ»Π° ΠΈ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π° Ρ„Π°ΠΉΠ»Π°, установки ΠΏΡ€Π°Π² доступа, число ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Ρ„Π°ΠΉΠ», Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ адрСсов ΠΈΠ· дискового индСкса Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π² памяти индСкс.

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

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

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

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


Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ iput /* Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ доступа ΠΊ индСксу Π² памяти */

входная информация: ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° индСкс Π² памяти

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

{

 Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ индСкс Ссли ΠΎΠ½ Π΅Ρ‰Π΅ Π½Π΅ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½;

 ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π½Π° 1 счСтчик ссылок для индСкса;

 if (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика ссылок == 0) {

  if (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика связСй == 0) {

   ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ дисковыС Π±Π»ΠΎΠΊΠΈ для Ρ„Π°ΠΉΠ»Π° (Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ free, Ρ€Π°Π·Π΄Π΅Π» 4.7);

   ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ Ρ„Π°ΠΉΠ»Π° Ρ€Π°Π²Π½Ρ‹ΠΌ 0;

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

  }

  if (ΠΊ Ρ„Π°ΠΉΠ»Ρƒ ΠΎΠ±Ρ€Π°Ρ‰Π°Π»ΠΈΡΡŒ ΠΈΠ»ΠΈ измСнился индСкс ΠΈΠ»ΠΈ измСнилось содСрТимоС Ρ„Π°ΠΉΠ»Π°)

   ΡΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ дисковый индСкс;

  ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ индСкс Π² список свободных индСксов;

 }

 ΡΠ½ΡΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ с индСкса;

}

Рисунок 4.4. ОсвобоТдСниС индСкса

4.1.3 ОсвобоТдСниС индСксов

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