Professional Documents
Culture Documents
N MN HC
NGUYN L H IU HNH
Ngi hng dn : NGUYN VN NGUYN Sinh vin thc hin : BI V NHT HONG Lp : 06T3
BO CO N
NGUYN L H IU HNH
nng, 01/2010
2/28
BO CO N
NGUYN L H IU HNH
LI CM N
Nhng kin thc c bn cng nh nng cao v h iu hnh, nm bt c nguyn tc hot ng. Nguyn l h iu hnh l hc phn rt quan trng v bt buc i vi tt c sinh vin chuyn ngnh cng ngh thng tin. Nguyn l h iu hnh cung cp cho sinh vin ng c bn ca h iu hnh trn my tnh. H iu hnh c xem l thnh phn trung gian hay l cu ni cho s giao tip ca ngi s dng v my tnh. Thng qua h iu hnh ngi s dng d dng lm vic v khai thc hiu qu thit b phn cng my tnh, qun l phn mm ng dng. Ngi s dng ch cn thao tc cc lnh, cc s kin v ch cc tin trnh ca h iu hnh thc hin. Vi mt H iu hnh c tim nng nh th, chng ta phi c s nghin cu, hiu bit v n, c th nm bt tt v cc khi nim chuyn ngnh v H iu hnh. Em xin cm n s hng dn tn tnh ca thy th.S. Nguyn Vn Nguyn gip em hon thnh ti ny. Sinh vin thc hin Bi V Nht Hong
3/28
BO CO N
NGUYN L H IU HNH
LI M U
Nu khng c phn mm, my tnh ch l mt thit b in t thng thng. Vi s h tr ca phn mm, my tnh c th lu tr, x l thng tin v ngi s dng c th gi li c thng tin ny. Phn mm my tnh c th chia thnh nhiu loi: chng trnh h thng, qun l s hot ng ca chnh my tnh. Chng trnh ng dng, gii quyt cc vn lin quan n vic s dng v khai thc my tnh ca ngi s dng. H iu hnh thuc nhm cc chng trnh h thng v n l mt chng trnh h thng quan trng nht i vi my tnh v c ngi s dng. H iu hnh iu khin tt c cc ti nguyn ca my tnh v cung cp mt mi trng thun li cc chng trnh ng dng do ngi s dng vit ra c th chy c trn my tnh. Mt my tnh hin i c th bao gm: mt hoc nhiu processor, b nh chnh, clocks, a, giao din mng, v cc thit b vo/ra khc. Tt c n to thnh mt h thng phc tp. vit cc chng trnh theo di tt c cc thnh phn ca my tnh v s dng chng mt cch hiu qu, ngi lp trnh phi bit processor thc hin chng trnh nh th no, b nh lu tr thng tin nh th no, cc thit b a lm vic (ghi/c) nh th no, li no c th xy ra khi c mt block a, y l nhng cng vic rt kh khn v qu kh i vi ngi lp trnh. Nhng rt may cho c ngi lp trnh ng dng v ngi s dng l nhng cng vic trn c h iu hnh h tr nn h khng cn quan tm n na. chng ta cn tim hiu v h iu hnh c mt ci nhn tng quan v nhng g lin quan n vic thit k ci t cng nh chc nng ca h iu hnh h iu hnh t c mc tiu: Gip ngi s dng khai thc my tnh d dng v chng trnh ca ngi s dng c th chy c trn my tnh. "Bi ton ba ti ca cc trit gia" (Dining Philosophers), mt bi ton kinh in v tng tranh v chia s ti nguyn. Vic nghin cu bi ton s cho chng ta hiu r hn v kha cnh ny ca h iu hnh.
4/28
BO CO N
NGUYN L H IU HNH
PH LC
CHNG I BI TON....................................................................................6 I.1 ti........................................................................................................6 I.2 M t vn .............................................................................................6 I.3 Yu cu bi ton.......................................................................................6 CHNG II C S L THUYT...................................................................7 II.1 Tin trnh (proccess)...............................................................................7 II.1.1 Khi nim........................................................................................7 II.1.2 nh ngha tin trnh........................................................................7 II.1.3 Cc loi tin trnh.............................................................................7 II.1.4 Tuyn (Thred)..................................................................................7 II.2 Ti nguyn gng v on gng................................................................8 II.2.1 Ti nguyn gng (Critical Resource)...............................................8 II.2.2 on gng (Critical Section)............................................................9 II.2.3 Yu cu i vi on gng..............................................................9 II.3 Gii php Semaphore..............................................................................9 II.4 Deadlock...............................................................................................10 II.4.1 Gii thiu vn ............................................................................10 II.4.2 iu kin hnh thnh tt nghn......................................................11 II.4.3 Ngn chn tc nghn (Deadlock Prevention).................................11 CHNG III CCH GII QUYT BI TON............................................12 III.1 Qun l vng gng...............................................................................12 III.2 Gii php x l deadlock.....................................................................14 III.3 Chng trnh........................................................................................14 III.3.1 Class Philosopher.........................................................................15 III.3.2 Class Chopstick............................................................................16 III.3.3 Class Diner...................................................................................16 III.3.4 Class PhilCanvas..........................................................................16 CHNG IV KT QU CHNG TRNH..................................................17 IV.1.1 Chng trnh tm dng................................................................17 IV.1.2 Chng trnh c reset...............................................................18 CHNG V KT LUN...............................................................................19 V.1.1 t c........................................................................................19 V.1.2 Cha t........................................................................................19
5/28
BO CO N
NGUYN L H IU HNH
CHNG I I.1 ti
BI TON
Vit chng trnh gii quyt bi ton Nm trit gia n ti. Chng trnh to ra nm qu trnh con m phng hot ng ca nm trit gia. S dng Semaphore ng b hot ng ca nm trit gia ny.
I.2
M t vn
y l bi ton c in v h iu hnh. Bi ton ba ti ca cc trit gia c a ra bi nh ton hc E. W. Dijkstra. Bi ton c m t nh sau : C nm trit gia cng ngi n ti quanh mt chic bn trn, trc mt mi ngi c mt a m , gia 2 trit gia th c mt chic na.
Mi trit gia dnh ton b thi gian suy ngh hoc n khi i. Mi trit gia ch c th n khi c c 2 chic na bn cnh mnh. i : mt trit gia c th cht i nu ng ta khng c cch no n c Tc nghn : cc trit gia phi i ln nhau nn khng c ai n c.
I.3
Yu cu bi ton
Phi t ra thut ton sao cho khi mt trit gia b i th ng ta s c n v m bo khng c trit gia no b cht i. Bi ton t ra vn ng b gia cc tin trnh, gii quyt vn tc nghn c th xy ra. Thut ton c a ra l thut ton Semaphore.
6/28
BO CO N
NGUYN L H IU HNH
C S L THUYT
BO CO N
NGUYN L H IU HNH
tin trnh, c ch lin lc gia cc tuyn n gin v hiu qu hn c ch lin lc gia cc tin trnh vi nhau ( nu h iu hnh ca bn chy trn phn cng nhiu b x l th tuyn thc s chy song song ch khng phi gi lp kiu xoay vng ). u im ca s dng tuyn trong tin trnh n gin hn lp trnh tun t. Nhiu thao tc xut nhp hoc hin th d liu c th tch ri v phn cho cc tuyn chy c lp thc thi. V d trong mi trng ha, khi bn copy mt file c kch thc ln, chng trnh s c thit k sao cho mt tuyn thc hin c ghi d liu t a, tuyn khc s m trch vic hin th phn trm hon thnh cng vic cho ngi dng theo di tin . i vi h iu hnh chi ph chuyn i gia ng cnh ca tin trnh cao v chm hn chi ph chuyn i ng cnh dnh cho tuyn ( vi tin trnh h iu hnh phi ct thng s mi trng, thanh ghi trng thi, hon i vng nh) Tuy nhin, im yu ca vic dng tuyn l kh nng v ca mt tuyn s nh hng n tt c cc tuyn khc v ton b tin trnh ang hot ng. L do l cc tuyn dng chung vng nh v khng gian a ch ca tin trnh. Ngc li, mt tin trnh b v lun c h iu hnh c lp hon ton khng gy nh hng n cc tin trnh khc. Tin trnh c th chy trn nhiu my khc nhau trong khi tuyn ch c thc thi trn mt my v trong mt tin trnh.
II.2
8/28
BO CO N
NGUYN L H IU HNH
II.2.3 Yu cu i vi on gng
on gng phi tha cc yu cu sau : Ti mt thi im khng th c hai tin trnh nm trong on gng. Nu c nhiu tin trnh ng thi cng xin c vo on gng th ch c mt tin trnh c php vo on gng, cc tin trnh khc phi xp hng ch trong hng i. Tin trnh ch ngoi on gng khng c ngn cn cc tin trnh khc vo on gng. Khng c tin trnh no c php lu v hn trong on gng v khng c tin trnh phi ch lu mi c vo on gng (ch trong hng i). Nu ti nguyn gng c gii phng th h iu hnh c nhim v nh thc cc tin trnh trong hng i ra to iu kin cho n vo on gng. Cc vn c th gp phi i vi on gng C th dn n tc nghn (Deadlock) trong h thng. Cc tin trnh c th b i (Stravation) ti nguyn.
II.3
Semaphore l mt ng gp quan trng khc ca nh ton hc E. W. Dijkstra. C th xem Semaphore nh l mt m rng ca Mutex locks. Semaphore (s nh tn hiu bng c) S l mt bin nguyn, khi gn bng mt gi tr khng m, l kh nng phc v ca ti nguyn gng tng ng vi n. ng vi S c mt hng i F(s) lu cc tin trnh ang b blocked trn S. Ch c hai thao tc Down v Up c tc ng n semaphore (s nh tn hiu bng c) S. Down gim S xung mt n v, Up tng S ln mt n v. Mi tin trnh trc khi vo on gng th phi gi Down kim tra v xc lp quyn vo on gng. GVHD : Th.S. NGUYN VN NGUYN 9/28
BO CO N
NGUYN L H IU HNH
Mi tin trnh ngay sau khi ra khi on gng phi gi Up kim tra xem c tin trnh no ang i trong hng i hay khng, nu c th a tin trnh trong hng i vo on gng. Khi tin trnh gi Up th h thng s thc hin. y chng ta cn lu rng: Down v Up l cc th tc ca h iu hnh, nn h iu hnh ci t c ch c quyn cho n, tc l cc lnh bn trong n khng th tch ri nhau.
II.4
Deadlock
10/28
BO CO N
NGUYN L H IU HNH
11/28
BO CO N
NGUYN L H IU HNH
Chng trnh xem mi trit gia l 1 tin trnh, chopstick l ti nguyn chung cn c bo v. Bin taken c xy dng trong class Chopstick qu l ti nguyn dng chung l cc chopsticks, mi chopsticks c to ra s c 1 bin kha taken nh du : taken = true chopstick c s dng. taken = false chopstick cha c s dng. Class Chopstick ng vai tr qun l vng gng vi 2 phng thc synchronized put() v get() m v ng vng gng. synchronized void put() { taken=false; display.setChopstick(identity,taken); notify(); } Phng thc ny tng ng vi hnh ng mt trit gia t Chopstick xung (gii phng Chopstick) cc trit gia khc c th s dng ti nguyn chung ny. synchronized void get()throws java.lang.InterruptedException { while (taken) wait(); taken=true; display.setChopstick(identity,taken); } Nu ti nguyn chung (Chopstick) ang c s dng th trit gia phi i (wait) cho n khi ti nguyn c gii phng, lc trit gia s dng ti nguyn ny ng thi thit lp taken = true kha cc tin trnh khc. Nh vy bin taken ng vai tr kha vng ti nguyn dng chung khi n ang c s dng bi mt tin trnh.
12/28
BO CO N
NGUYN L H IU HNH
Xt trng hp c th sau
Chng trnh to ra 5 tin trnh tng ng vi 5 trit gia v 5 ti nguyn dng chung tng ng 5 chopsticks public void start() { for (int i =0; i<display.NUMPHILS; ++i) chopstick[i] = new Chopstick(display,i); for (int i =0; i<display.NUMPHILS; ++i){ phil[i] = makePhilosopher(this,i, chopstick[(i-1+display.NUMPHILS)% display.NUMPHILS], chopstick[i]); phil[i].start(); } } Xt trng thi c th ca cc chopsticks ta c chopsticks[0].taken == false chopsticks[1].taken == false chopsticks[2].taken == false chopsticks[3].taken == true chopsticks[4].taken == false GVHD : Th.S. NGUYN VN NGUYN 13/28
BO CO N
NGUYN L H IU HNH
14/28
BO CO N
NGUYN L H IU HNH
15/28
BO CO N
NGUYN L H IU HNH
16/28
BO CO N
NGUYN L H IU HNH
KT QU CHNG TRNH
T kt qu demo ta c : Trit gia s 0 v s 3 ang i Trit gia s 1 v s ang suy ngh Trit gia s 4 ang n
17/28
BO CO N
NGUYN L H IU HNH
18/28
BO CO N
NGUYN L H IU HNH
CHNG V V.1.1 t c
KT LUN
Chng trnh t c chc nng m t bi ton bng giao din trc quan sinh ng, s dng giao din swing trn nn applet. To cc tin trnh m phng da trn lp Thread. Bng cch s dng slider cho php ngi dng ty chnh thi gian cung cp cho cc tin trnh, gip d dng nm bt v kim sot. Bng cch xy dng phng thc Wait() chng trnh x l c vn deadlock. Chng trnh c phn thnh cc class vi cc chc nng r rng to thun li cho vic m rng v pht trin sau ny, c bit pht trin giao din mt cch d dng m khng nh hng n phn li ca chng trnh. Chng trnh c th c pht trin m rng cho n tin trnh ty .
V.1.2 Cha t
Phn giao din chng trnh cha c bt mt.
19/28
BO CO N
NGUYN L H IU HNH
20/28
BO CO N
NGUYN L H IU HNH
PH LC
//<APPLET CODE="Diners.class" WIDTH=400 HEIGHT=75 ALIGN=center> import java.awt.*; import java.awt.event.*; import java.applet.*; import java.awt.*; import java.awt.geom.AffineTransform; import javax.swing.*; public class Diners extends JApplet { PhilCanvas display; Thread[] phil= new Thread[PhilCanvas.NUMPHILS]; Chopstick[] chopstick = new Chopstick[PhilCanvas.NUMPHILS]; JScrollBar slider; JButton restart; JButton freeze; TextArea txtMes; public void init() { setLayout(new BorderLayout()); display = new PhilCanvas(this); display.setSize(300,320); add("Center",display); slider = new JScrollBar(Scrollbar.HORIZONTAL, 50, 5, 0, 100); restart = new JButton("Restart"); restart.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (display.deadlocked()) { stop(); slider.setValue(50); start(); } display.thaw(); } }); freeze = new JButton("Freeze"); freeze.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { display.freeze(); } });
21/28
BO CO N Panel p2 = new Panel(); p2.setLayout(null); p2.setSize(150,400); Label l0,l1,l2,l3,l4,l5,l6; l1 = new Label("EATING"); l2 = new Label(""); l2.setBackground(Color.GREEN); l3 = new Label("HUNGRY"); l4 = new Label(""); l4.setBackground(Color.BLUE); l5 = new Label("THINKING"); l6 = new Label(""); l6.setBackground(Color.YELLOW); l1.setBounds(10,220,60,30); p2.add(l1); l2.setBounds(80,220,50,30); p2.add(l2); l3.setBounds(10,260,60,30); p2.add(l3); l4.setBounds(80,260,50,30); p2.add(l4); l5.setBounds(10,300,60,30); p2.add(l5); l6.setBounds(80,300,50,30); p2.add(l6); p2.setBackground(Color.WHITE); txtMes = new TextArea(); txtMes.setBounds(0,0,150,200); p2.add(txtMes); Panel p1 = new Panel(); p1.setLayout(new BorderLayout()); p1.add("Center",slider); p1.add("East",restart); p1.add("West",freeze); add("South",p1); add("West",p2); setSize(600,400); }
NGUYN L H IU HNH
Thread makePhilosopher(Diners d, int id, Chopstick left, Chopstick right) { return new Philosopher(d,id,left,right); } public int sleepTime() { return (slider.getValue()*(int)(100*Math.random())); }
22/28
BO CO N
NGUYN L H IU HNH
public int eatTime() { return (slider.getValue()*(int)(50*Math.random())); } public void start() { for (int i =0; i<display.NUMPHILS; ++i) chopstick[i] = new Chopstick(display,i); for (int i =0; i<display.NUMPHILS; ++i){ phil[i] = makePhilosopher(this,i, chopstick[(i-1+display.NUMPHILS)% display.NUMPHILS], chopstick[i]); phil[i].start(); } } public void stop() { for (int i =0; i<display.NUMPHILS; ++i) { phil[i].interrupt(); } } } class Philosopher extends Thread { private int identity; private PhilCanvas view; private Diners controller; private Chopstick left; private Chopstick right; Philosopher(Diners ctr, int id, Chopstick l, Chopstick r) { controller = ctr; view = ctr.display; identity = id; left = l; right = r; } public void Wait()throws java.lang.InterruptedException{ if(identity%2==0){ view.setPhil(identity,view.HUNGRY); right.get(); //gotright chopstick view.setPhil(identity,view.GOTRIGHT); sleep(500); left.get(); }
23/28
BO CO N else{
NGUYN L H IU HNH
view.setPhil(identity,view.HUNGRY); left.get(); //gotright chopstick view.setPhil(identity,view.GOTLEFT); sleep(500); right.get(); } } public void Signal(){ right.put(); left.put(); } public void run() { try { while (true) { //thinking view.setPhil(identity,view.THINKING); sleep(controller.sleepTime()); //hungry Wait(); //eating view.setPhil(identity,view.EATING); sleep(controller.eatTime()); Signal(); } } catch (java.lang.InterruptedException e) {} } } class Chopstick { private boolean taken=false; private PhilCanvas display; private int identity; Chopstick(PhilCanvas disp, int id){ display = disp; identity = id; } synchronized void put() { taken=false; display.setChopstick(identity,taken);
24/28
BO CO N notify(); }
NGUYN L H IU HNH
synchronized void get()throws java.lang.InterruptedException { while (taken) wait(); taken=true; display.setChopstick(identity,taken); } } class PhilCanvas extends Canvas { Diners controller; Image offscreen; Dimension offscreensize; Graphics offgraphics; static final int NUMPHILS = 5; static final int THINKING = 0; static final int HUNGRY = 1; static final int GOTRIGHT = 2; static final int EATING =3; static final int GOTLEFT = 4; Image[] imgs = new Image[5]; AffineTransform [] philPlace = new AffineTransform[NUMPHILS]; int [] state = new int [NUMPHILS]; double [] chopX = new double[NUMPHILS]; double [] chopY = new double[NUMPHILS]; double [] disX = new double[NUMPHILS]; double [] disY = new double[NUMPHILS]; boolean[] untable= new boolean[NUMPHILS]; boolean frozen = false; String Message = ""; PhilCanvas(Diners controller) { super(); this.controller = controller; MediaTracker mt; mt = new MediaTracker(this); imgs[0] = controller.getImage(controller.getDocumentBase(), "image/thinking.gif"); mt.addImage(imgs[0], 0); imgs[1] = controller.getImage(controller.getDocumentBase(), "image/hungry.gif"); mt.addImage(imgs[1], 1);
25/28
BO CO N
NGUYN L H IU HNH
imgs[2] = controller.getImage(controller.getDocumentBase(), "image/gotright.gif"); mt.addImage(imgs[2], 2); imgs[3] = controller.getImage(controller.getDocumentBase(), "image/eating.gif"); mt.addImage(imgs[3], 3); imgs[4] = controller.getImage(controller.getDocumentBase(), "image/gotleft.gif"); mt.addImage(imgs[4], 4); try { mt.waitForID(0); mt.waitForID(1); mt.waitForID(2); mt.waitForID(3); mt.waitForID(4); } catch (java.lang.InterruptedException e) { System.out.println("Couldn't load one of the images"); } initPlacing(); } void backdrop() { Dimension d = getSize(); if ((offscreen == null) || (d.width != offscreensize.width) || (d.height != offscreensize.height)) { offscreen = createImage(d.width, d.height); offscreensize = d; offgraphics = offscreen.getGraphics(); offgraphics.setFont(new Font("Helvetica",Font.BOLD,18)); Graphics2D g2D = (Graphics2D) offgraphics; g2D.translate(d.width/2, d.height/2); } offgraphics.setColor(Color.WHITE); offgraphics.fillRect(-d.width/2, -d.height/2, d.width, d.height); } void drawtable() { offgraphics.setColor(Color.red); offgraphics.fillOval(-80,-80,160,160); offgraphics.setColor(Color.black); for(int i=0; i<NUMPHILS; i++) { if(untable[i]){ offgraphics.setColor(Color.black); offgraphics.fillRect((int)chopX[i],(int)chopY[i],5,30); }
26/28
BO CO N
NGUYN L H IU HNH
offgraphics.setColor(Color.black); offgraphics.drawString(String.valueOf(i),(int)disX[i],(int)disY[i]); offgraphics.setColor(Color.WHITE); offgraphics.fillOval((int)disX[i],(int)disY[i],25,25); } } public void paint(Graphics g) { update(g); } public void update(Graphics g) { backdrop(); for (int i = 0; i < NUMPHILS; i++) { philPaint(offgraphics,i); if(state[i]==EATING) Message += "Philosopher "+i+" EATING"; } controller.txtMes.setText(Message); drawtable(); if (deadlocked()) { offgraphics.setColor(Color.black); offgraphics.drawString("DEADLOCKED",-60,0); } g.drawImage(offscreen, 0, 0, null); } void philPaint(Graphics g,int i) { Graphics2D g2D = (Graphics2D)g; g2D.drawImage(imgs[state[i]],philPlace[i],this); } synchronized void setPhil(int id,int s) throws java.lang.InterruptedException{ while (frozen) wait(); state[id] = s; repaint(); } synchronized void freeze(){ frozen = true; } synchronized void thaw() { frozen = false; notifyAll(); Message = "";
27/28
BO CO N }
NGUYN L H IU HNH
synchronized void setChopstick(int id, boolean taken) { untable[id]= !taken; } boolean deadlocked(){ int i=0; while(i<NUMPHILS && state[i]==GOTRIGHT) ++i; return i==NUMPHILS; } void initPlacing() { double radius = 130.0; double philWidth = imgs[0].getWidth(this); double philHeight = imgs[0].getHeight(this); double radians; for (int i = 0; i < NUMPHILS; i++) { philPlace[i] = new AffineTransform(); radians = 2.0 * Math.PI*(1.0 - (double) i/(double)NUMPHILS); philPlace[i].rotate(radians); philPlace[i].translate(0,-radius); philPlace[i].translate(-philWidth/2,-philHeight/2); } radius = 55; for (int i = 0; i < NUMPHILS; i++) { radians = (double)i * 2.0 * Math.PI / (double)NUMPHILS + Math.PI/ (double)NUMPHILS; chopX[i] = -Math.sin(radians) * radius; chopY[i] = -Math.cos(radians) * radius; untable[i] = true; } radius = 65; for (int i = 0; i < NUMPHILS; i++) { radians = (double)i * 2.0 * Math.PI / (double)NUMPHILS; disX[i] = -Math.sin(radians) * radius-12; disY[i] = -Math.cos(radians) * radius-12; } } }
28/28