Jump to content

Хэрэглэгчийн яриа:А.Галбаяр

Page contents not supported in other languages.
Сэдэв нэмэх
Википедиа — Чөлөөт нэвтэрхий толь

Database систем

[кодоор засварлах]
   Database ашигласан ном Operating System Concepts

Мэдээллийн сан нь компьютер дээр тусгай зориулалтын программд оруулсан өгөгдлийн цуглуулга бөгөөд ийн рүү хандах, засварлах болон нэмэхэд хялбар байдлаар хийгдсэн байдаг. Мэдээллийн сан нь талбар (fields), бичилтүүд (records) болон файлаас (files) бүрддэг. Талбар гэдэг нь багана бүхий мэдээлэл бөгєєд бичилт нь нэг мєрєнд байгаа нийт мэдээллийг хэлдэг. Нийт оруулсан мэдээллээ нэр єгч сануулан, файл болгодог.

Єєрєєр хэлбэл нэг мэдээллийн санг файл гэнэ. Жишээлбэл: нэг байгууллага ажилчдынхаа телефон утасны жагсаалтыг мэдээллийн санд оруулсан бол ажилчдын нэр, хаяг, утасны дугаар нь талбар болох бєгєєд эдгээр талбарын дор оруулсан мэдээлэл нь бичилтүүд болдог. Ингээд мэдээллийг сануулж нэр єгєхєд файл болж хадгалагдана. Талбар нь тоо, текстний аль алинаас нь бэрдэж болно. Мөн сүүлийн үед ашиглагдаж байгаа мэдээллийн сангийн программийн тусламжтайгаар фото зургыг ч нэг талбар болгон оруулах боломжтой. Талбарт мэдээллийг заавал оруулах (required), оруулахгүй хоосон орхиж болохуйц (optional) гэсэн 2 төрлөөр мэдээллийг бичиж оруулж болно. Мэдээллийн сан нь мэдээлэл хайх, статистик мэдээ гаргаж авахад хялбар байдгаараа давуу талтай. Хувь хүн єєрийн гэсэн мэдээллийн сан нээж ашиглаж болохоос гадна дотоод сүлжээнд байгууллагын ажилчид дундаа ашиглах боломжтой. Мөн вэб хуудсан дээр байрлуулсан мэдээллийн сан руу ямар ч хүн хаанаас ч хандах боломжтой байдаг. Мэдээллийн сан боловсруулдаг программууд нь MS Access, DB2, SQL, Oracle, Sybase зэрэг юм.


    ACCESS программын үндсэн обьект бол TABLE юм. 

TABLE гэдэг нь ямар нэг утга агуулгыг илэрхийлэх мэдээллийг агуулж буй мэдээллийн бааз юм. TABLE өгөгдлийн агуулгаар нь холбож өгдөг. TABLE нь бичлэгүүдээс бүрдэнэ. Бичлэг нь мэдээллийн агуулгыг илэрхийлэгч талбар болон талбарын төрлөөс бүрдэнэ. Талбарын төрөл нь текст тоон зурган мөнгөн логик гэх мэт олон хэлбэртэй. Таны байгуулсан DATABASE доторх бүх TABLE –ууд тус бүр өөр өөрийн ямар нэгэн утга агуулга бүхий мэдээллийг агуулна. ACCESS дээр баазын бүтцийг тодорхойлж TABLE байгуулах


DATABASE –ийн цонхны TABLE хуудсыг нээж хуудсан дээр NEWкомандыг өгнө. NEW нэрнэй харилцах цонх нээгдэх ба TABLE байгуулах хэлбэрүүдээс DESIGN VIEW –ийг сонгож ОК командыг өгнө. Дараах цонх нээгдэх ба FIELD NAME баганад талбарын нэрийг DATA TYPE баганад тухайн талбарт орох өгөгдлийн төрлийг тодорхойлж өгнө. DESCRIPSTION нүдэнд тухайн талбарын тайлбарыг бичнэ. TABLE –д орох бүх талбарыг тодорхойлсны дараагаар тайлбаруудтай холбоотой нэмэлт шинж чанар буюу төлөвүүдийг тодорхойлж өгнө. Хулганаар ямар талбарыг идэвхжүүлсэн гэдгээс хамаараад TABLE –ийн бүтцийн FIELD PROPERTIES нүдэнд гарах төлөвүүд өөр өөр байна. Төлөвийг тодорхойлсны дараа TABLE –д түлхүүр талбар байх эсэхийг тодорхойлно. Түлхүүр талбарыг тодорхойлсны дараа FILE цэсийн SAVE командыг өгч тухайн TABLE-д нэр өгч DATABASE дотор хадгална. DATABASE дахь бүх TABLE –ууд DATABASE –ийн TABLE хуудсанд байрлана.

   ашигласан ном http://www.amazon.com/Operating-System-Concepts-Seventh-Edition/dp/0471694665/ref=sr_1_4?ie=UTF8&qid=1364448904&sr=8-4&keywords=operating+systems+concepts

Page table base register буюу Хүснэгтийн бааз регистр

[кодоор засварлах]
   Хүснэгтийн бааз регистр 
Үйлдлийн систем болгон өөрийн гэсэн төрөл бүрийн хүснэгтүүдтэй байдаг.
Үйлдэл болгон нэг хүснэгтэнд хуувиарлагдана. 

Хуудасны хүснэгтийн заагч нь удирдлагын блок дах бусад регистрийн утганд хадгалагдана. Бусад регистр гэдэг нь яг instruction counter-тэй адилхан. Диспитчер эхлэх төлөвийг өгсөнөөр хэрэглэгчийн регистр дахин ачааллагдаж зөв хүснэгтийн утга нь хадгалагдсан хэрэглэгчийн хүснэгтээс тодорхойлж өгнө. Хүснэгтийн техник хангамжийн хэрэгжүүлэлт нь цөөхөн замаар үйлдлээ гүйцэтгэж чадна. Энгийн төхөөрөмжийн хувьд хүснэгт нь зориулалтын регистрийг хэрэгжүүлдэг. Энэ регистр нь өндөр хурдаар логик үйлдлүүдийг хийж хуудсанд хаяглалтыг өгөхдөө үр бүтээмжтэйгээр хийнэ. Санах ойн хандалт бүр хуудасны төлөвлөгөөгөөр явна. CPU-ний диспитчер регистрээс дахин ачаалладаг. Instruction нь хүснэгтийн регистрээс ачааллана. Регистрийн төлөвлөгөөг зөвхөн үйлдлийн систем л өөрчилж чадна. Жишээ нь DEC PDP-11 архитектур юм. Энэ нь 16 битийн хаягтай, хуудасны хэмжээ нь 8KB. Найман оролттой хуудасны хүснэгт нь хурдан регистртээ орно. Хэрэглэгчийн регистрийн хуудасны хүснэгт нь жижиг байвал энэ нь 256 оролттой гэсэн үг. Сүүлийн үеийн компьютерууд нь илүү том хүснэгтүүдийг хийж чадна ойролцоогоор нэг сая оролттой. Хурдан регистр нь хүснэгт хийхэд тохиромжгүй юм. Үндсэн санах ойд байгаа хүснэгтийг PTBR буюу page-table base register гэнэ. Чи санах ойн байрлал руу хандахыг хүсвэл бидэнд хамгийн түрүүнд хүснэгтийн индекс хэрэг болно.

   Хэрвээ PTBR-ийг хэрэглэж байвал хуудасны дугаар нь ch8/8.
Санах ойн хандалт нь хүрээний дугаараар хангаж өгөх болно. Хоёр санах ойн хооронд байтын хандалт хэрэг болно. Нэг хүснэгт оруулахад нэг байт хэрэг болно. Хоёр хүчин зүйлээс шалтгаалж санах ойн хандалт удааширна. Үндсэн асуудлыг шийдэхийн тулд тусгай, жижиг, хурдан техник хангамжийн нөөц хэрэгтэй. Энэ нь TLB буюу translation look-aside buffer юм. 

TLB нь хурдан санах ойтой нийцэж ажилладаг. TLB-ийн оролт нь хоёр хэсгээс тогтоно. Энэ нь түлхүүр ба утга юм. TLB нь хурдан, техник хангамжийн хувьд сайн боловч үнэтэй юм. Оролтын дугаарлалт 64-өөс 1024-ийн хооронд байна. Энэ нь маш цөөхөн гэсэн үг юм. Логик хаяг нь CPU-ээсээ авна. Хэрвээ худаасны дугаар олдсон тохиолдолд хүрээний дугаар нь шууд нээгдэх болно. Хэрвээ TLB-ийн хуудасны дугаар олдохгүй байвал санах ойн лавлагаанаас хуудасны хүснэгт гарч ирэх болно.

Хүрээний дугаар олдсон үед санах ойг шууд хэрэглэж чадна. TLB дүүрсэн тохиолдолд үйлдлийн систем өөр нэг орлуулгыг хийх болно. Орлуулга нь хамгийн сүүлд ашигласнаас санамсаргүйгээр сонгоно.
  ашигласан ном http://www.amazon.com/Operating-System-Concepts-Seventh-Edition/dp/0471694665/ref=sr_1_4?ie=UTF8&qid=1364448904&sr=8-4&keywords=operating+systems+concepts

Энд процессыг монитороор шинэчлэх гэсэн сэдвийн талаар мэдээлэл оруулахаар болов. Хэрвээ x болон зарим процессуудээр гүйцэтгэгдсэн x.signal() ажиллагаануудын нөхцөлд хэд хэдэн процессуудыг түр зогсоосон бол түр зогссон процессуудын дотроос дараагийн шинэчлэгдэх ёстой процесс нь аль нь вэ гэдгийг бид яаж тодорхойлох вэ? Энгийн нэг шийдэл бол FCFS эрэмблэлт ашиглах юм. Ингээд процесс нь хүлээлтэнд ордог. Хэдий тийм боловч ихэнх тохиолдлуудад схемчилсэн бүдүүвч нь хүрэлцээтэй биш байдаг. Ийм зорилгын үүднээс түр зуурын буюу нөхцөлт хүлээлтийн төрхийг ашигладаг: Түр зуурын буюу нөхцөлт хүлээлт нь (хугацаа тооцсон эсвэл үгүй) зогсоолт, цуцлалтыг заадаг.

           x.wait(c);
        monitor ResourceAllocator
        {
          boolean busy;
          condition x;
        void acquire(in time){
          if (busy)
             x.wait(time);
          busy = TRUE;
           }
        void release() {
           busy = FALSE;
           x.signal();
           }
        initialization code() {
           busy = FALSE;
           }
        }
     Ганц нөөцийг хуваарилах монитор

Дээрх кодод байгаа c нь wait() функц биедэгдэх үеийн үнэлэгдсэн илэрхийлэл юм. C илэрхийлэлийн утга нь зогссон процессын нэртэй хамт анхдагч тоо гэж хадгалагдана. x.signal() нь биелэгдэх үед хамгийн бага анхдагч тоотоой процесс нь шинэчлэгдэнэ. Энэ шинэ механизмыг хэруулахын тулд бид дээрх кодон дээр анхаарлаа хандуулах хэрэгтэй. Процесс бүр нь нөөцүүдийг хуваарилах хүсэлт гаргахад нөөцийг ашиглах хамгийн их хугацааг нь тодорхойлж өгдөг. [1]

 import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
 public class SO {
   public String test;
   public String[] list = new String[] {test};
   public static void main(String[] args) {
       new SO();
   }
   public SO() {
       go();
   }
   BlockingQueue<String> qq = new LinkedBlockingQueue<String>();
   class Producer implements Runnable {
       public void run() {
           try {
               while (true) {
                   synchronized (this) {
                       while (qq.size() > 0)
                           wait();
                       System.out.println("Шинийг нэмэх");
                       qq.put("Утга 1");
                       qq.put("Утга 2");
                       qq.put("Утга 3");
                       qq.put("Утга 4");
                   }
               }
           } catch (InterruptedException ex) {}
       }
   }
   class Consumer implements Runnable {
       public void run() {
           try {
               while(true) {
                   System.out.println("Авах " + qq.take()+". "+String.valueOf(qq.size())+" үлдсэн");
                   Thread.sleep(1000);
               }
           } catch (InterruptedException ex) {}
       }
   }
   public void go() {
       Producer p = new Producer();
       Consumer c = new Consumer();
       new Thread(p).start();
       new Thread(c).start();
   }
 }

[2]