Файлын хандалт

## **Файлын хандалт(File access)** 
Файл нь мэдээллийг хадгалдаг. Файлд байгаа өгөгдөл рүү хандаж, түүнийг санах ойд ачаалладаг. Хүссэн өгөгдөл рүүгээ хэрхэн хандах аргыг файлын хандалт гэж нэрлэдэг. Үйлдлийн систем бүрт өөрийн хандах арга байдаг. Зарим үйлдлийн системд олон тооны хандах аргыг хослуулан ашиглах боломж ч бий.

Файл руу хандах дараах аргууд бий

## Дэс дараалсан хандалт
Файлыг нээгээд n-р бичлэг рүү(байт буюу бичлэг) рүү хандахын тулд заавал ч үгүй өмнөх бичлэгүүд рүү хандаж байж очно.Энэ талаараа энэ нь нэг холбоост жагсаалттай төстэй юм. Энэ төрлийн аргад голлон файлын төгсгөлд нэмэх үйлдлийг хийдэг. Зарим програмд файлын заагчийн байрлалаас урагш буюу хойш n байрлал (ихэнх тохиолдолд n=1 байдаг) шилжих боломж бий.

Файлийн ажиллагаа нь ерөнхийдөө унших болон бичих үйлдлээс бүрдэнэ. Унших үйлдэл нь “read-next” функцээр хийгдэх ба файлын оролт гаралтыг заагч нь урьдчилаад автоматаар дараагийн файлын хэсгийг уншина. Мөн унших үйлдэлтэй адилаар бичих үйлдлийг “write-next” үйлдлээр хийнэ.Ийм файлын эхлэлийг бас тохируулж болдог.

## Шууд хандалт
Файлын хүссэн байрлал руу шууд хандах нь томоохон хэмжээний өгөгдлийн сан мэтийн системд маш чухал байдаг. Шууд хандалтыг ашиглах нь дискэн дээр байрлаж буй мэдээллийн бүтцийг мэдэж байгаатай холбоотой. Өөрөөр хэлбэл заасан байрлал аль зам, секторт байгааг мэдэсэнээр түүн рүү шууд хандаж болно. Шууд хандалтын үед бичлэгүүд болон блокуудыг дэс дараагаар нь дугаарлан уншина. Тэгэхээр бид магадгүй 14-р блокыг уншаад дараа нь 53-ыг дараа нь 7-р блокыг бичиж болно. 
Файлын шууд хандалт нь унших болон бичих үйлдэлд ямар ч хязгаарлалт байхгүй. Шууд хандалтыг том хэмжээний мэдээлэл агуулсан бол түүн рүү хандахдаа ашигладаг. Өгөгдлийн сангууд ерөнхийдөө ийм төрлийн байдаг. Query хэрэгжих үед аль блок хариултыг агуулсан байна вэ гэдгийг тооцоолон дараа нь хүссэн мэдээллийг шууд уншина.

	Хамгийн энгийн жишээ бол агаарын тээврийн захиалгын систем юм. Бид тусгайлан нэг нислэгийн бүх мэдээллийг агуулсан(жишээ нь 713-р нислэгийн) блок нь нислэгийн дугаарыг тодорхойлно. 713-р нислэгийн захиалга хийгдээгүй сул суудлын тоог 713-р  блок хадгална гэсэн үг. Мэдээллийг хадгалахын тулд магадгүй хэш функцыг хүний нэр хайхад ашиглаж болно. Шууд хандалтын үед файлын функц нь блокын дугаарыг параметрээр авна.

	Блокын дугаар нь хэрэглэгчийн үйлдлийн системийн харьцангуй блокын дугаарыг заах ба харьцангуй блокын дугаар нь файлын эхлэлийг тодорхойлно. Энхий харьцангуй блок нь 0, дараагийх нь 1 гэх мэт.... тэгсэн ч гэсэн харьцангуй дискний хаяг магадгүй эхний 3192 дахь блокын хувьд 14073 байж болно. Харьцангуй блокын дугаар нь үйлдлийн систем файл хаана байрлахыг шийдэх эрхийг зөвшөөрнө. Зарим үйлдлийн системийн харьцангуй блокын дугаар 0-с эхлэдэг бол зарим нь 1-с эхлэдэг.
	Тэгвэл файлын n тооны бичлэгийг систем хэрхэн хангадаг вэ? Бидэнд бичлэгийн логик урт буюу L,бичлэгийн хүсэлт буюу N нь I/O рүү хувирна. L байтад ирсэн хүсэлт нь L*(N) дээр байрлана. Логик бичлэг нь тогтсон хэмжээтэй байдаг ба бичлэгийг унших бичих устгахад хялбар болно. Бүх үйлдлийн систем дэс дараалласан болон шууд хандалтыг дэмждэггүй байж болно.Зарим үйлдлийн систем нь дараалласанг дэмждэг бол зарим нь шууд хандалтыг дэмждэг гэсэн үг.

## Индекслэсэн хандалт 
Файл руу хандахдаа шууд бусаар хандаж болно өөрөөр хэлвэл индексээр нь хандана гэсэн үг юм. Шууд хандалт нь заасан байрлал руу шууд хандаж чаддаг гэвч бодит байдал дээр нэг байрлал руу шууд хандах бус шууд бусаар хандах тохиолдол байнга гардаг. Физик байрлалыг харгалзуулсан буюу индекс хүснэгттэй бол энэ үйлдлийг хангалттай хурдхан гүйцэтгэж болно. Эхлээд индекс файл руу хандаад дараа нь үндсэн файл руу хандана.
Жишээ нь:Жижиглэнгийн үнэ болон бүх барааны код ба үнийн жагсаалтыг агуулсан  файл байна гэхэд бичлэг тус бүр 10 цифрээс бүрдэнэ харин үнэ нь 6 цифрээс буюу 16 байтаас тогтоно. Хэрвээ дискний блок бүр нь 1024 байт байна гэвэл бид блок бүрд нь 64 бичлэг хийж болно гэсэн үг.  120000 бичлэгтэй файл тэгэхээр 2000(2 сая байт) блокыг эзэлнэ гэсэн үг. Файлыг бүх барааны кодоор ангилахын тулд индекс нь блок бүрийн барааны кодоор тодорхойлогдоно гэсэн үг. Бичлэг тус бүр нь 10 цифрээс бүрдсэн 2000 бичилттэй мөн санах ойд аль хэдийн хадгалагдчихсан байгаа. Онцгойлсон нэг барааны үнийг олохын тулд индексийг нь ашиглан хоёртын хайлт хийж болох юм. Энэ хайлтаар яг аль бичлэг нь аль блокод агуулагдаж байгааг хаашаа хандахыг сурч авлаа. Энэхүү хандах арга нь том файлаас хялбар аргаар хурдан хайлт хийх боломжийг олгож байгаагаараа онцлогтой.
Томоохон хэмжээний файлуудын индекс файл нь санах ойд хадгалахад дагаад том хэмжээг эзэлнэ гэсэн үг.
Үүнийг шийдэх нэг арга бол индекс файлд индекс үүсгэх юм. Анхдагч индекс файл нь хоёр дахь индекс файлын өгөгдлийг зааж буй заагчийг нь (pointer) өөртөө агуулж болдог.

## Холбоос 
https://web.archive.org/web/20141220065126/http://as.wiley.com/WileyCDA/WileyTitle/productCd-EHEP002013.html  --> Operating system concepts 9th edition