Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 28

Bo co n Nguyn l h iu hnh

LI NI U
Nguyn l h iu hnh l 1 mn hc b ch gip sinh vin chng em hiu bit
c c cu t chc, cng nh vic qun l, iu phi cc tin trnh ca h thng my
tnh. Qua hiu bit phn no v phn mm c bn nht ca my tnh l h iu hnh.
Vic nghin cu, hon thnh n nguyn l h iu hnh cng gip chng em c
hiu r hn na v h iu hnh Linux, 1 h iu hnh c nhiu tnh nng vt tri v c
trin vng trong tng lai.
Chng em xin chn thnh cm n s hng dn ca thy Mai Vn H, tn tnh
ch dn gip chng em hon thnh c ti n ny.

TNG QUAN TI
1.1. Bi cnh ti:
Nhn thy vic giao tip gia cc tin trnh trn linux c th gip ta hiu r hn c ch
x l, v trao i d liu gia cc tin trnh trong h iu hnh linux. Trong vic trao
i d liu, giao tip qua ng ng pipe theo c ch FIFO tng i d hiu v cng
phn no gip em hiu c nguyn l t chc h iu hnh nn chng em quyt nh
chn ti ny.
1.2. Mc tiu ti:
Hiu hn v vic giao tip gia cc tin trnh trong h iu hnh linux c bit l bng
ng ng pipe. Nghin cu ti ny s c th cho ta hiu c th no l pipe v c
ch hot ng ca n.
1.3. Hng gii quyt:
u tin phi tm hiu cch giao tip gia cc tin trnh, l th no 2 tin trnh giao tip
vi nhau thng qua ng ng pipe. Khi giao tip bng pipe ny th vn g s ny sinh
ra ( li, hn ch ). T tm ra cch gii quyt v m phng cch s dng pipe thng qua
bi ton.
Khi mt pipe c thit lp gia hai tin trnh, mt tin trnh s ghi d liu vo pipe cn
tin trnh kia c d liu t pipe.
SVTH: Hong Th Mai Lin

Trang 1

Bo co n Nguyn l h iu hnh

iu trc ht ta phi to hai tin trnh cha v con, lm sao hai tin trnh ny giao tip
vi nhau ta phi to mt ng ng pipe. By gi chng ta i tm hiu v to cc tin
trnh cho n giao tip vi nhau.

1.4. Mi trng p dng:


Chng trnh m phng s c vit bng ngn ng C chy trn nn h iu hnh
linux c th thy c c ch giao tip tin trnh thng qua ng ng pipe.
Cng ng m ngun m GNU cung cp kh nhiu cng c bin dch C/C++ trn
h iu hnh Linux nh:

CodeBlock
GCC
G++
gdb
GNU make
GNU emacs
trnh)
Bash
Bison

Trnh bin dc C/C++


Trnh bin dch C
Trnh bin dch C++
Trnh g li
Trnh qun l m ngun v tr gip bin dch
Trnh son tho vn bn (h tr cho vic sa m ngun khi lp
H v Shell h tr cc dng lnh ca h iu hnh
B phn tch tng thch vi yacc ca UNIX

Trong n mn hc ny, em s dng trnh bin dch CodeBlock chy trn nn h iu


hnh linux Unbuntu 14.04 p dng.

SVTH: Hong Th Mai Lin

Trang 2

Bo co n Nguyn l h iu hnh

C S L THUYT
1.5. Gii thiu v h iu hnh Linux
1.5.1. Lch s ra i h iu hnh Linux.
Vo nm 1991 ti Phn Lan, Linux B. Torvalds lc l sinh vin trng i hc tng
hp Hensinki dng mt my tnh c nhn c trang b b x l 386 nghin cu cch lm
vic ca n. Do h iu hnh MS-DOS khng khai thc y cc c tnh ca b x l 386,
Linux s dng mt h iu hnh thng mi khc l Minix. H iu hnh Minix l h iu
hnh Unix c nh.
Do i mt vi cc hn ch ca h iu hnh ny, Linux bt u vit li mt s mt s
ca phn mm thm chc nng v cc im c trng. Sau , ng thng bo kt qu ca
mnh min ph bng Internet di tn gi Linux ch vit tt ca Linus v Unix. Phin bn u
tin ca Linux l 0.01 c tung ra vo thng 8/1991.
Cc phin bn u tin c rt nhiu hn ch. Tuy nhin, s kin cc m ngun c
truyn b rng ri gip pht trin h iu hnh rt nhanh. Nhiu nm qua, s lng cc cng
ty khai thc khng ngng tng ln. Ngy nay, Linux c pht trin bi nhiu ngi ri rc
khp ni trn th gii.
Mc d 5 phin bn u tin ca Linux tng i khng n nh, nhng phin bn u
tin c tuyn b l n nh (1.0 ) c cng b vo khong thng 3/1994. S phin bn i
km vi kernel c mt ngha c trng bi v n lin quan n chu k pht trin. Thc t, qu
trnh pht trin Linux din ra theo mt chui hai giai on:
Giai on pht trin: y kernel khng c tin cy cao v tin trnh l b sung chc
nng cho n, ti u ha n v th nghim cc tng mi. Giai on ny em li s gia tng s
lng cc phin bn nh s l, chng hn nh 1.1, 1.3 y l thi im m lng cng vic
ti a c thc hin trn kernel.
Giai on n nh: mc ch l to ra mt kernel cng n nh cng tt. Trong trng
hp ny, ch cho php thc hin cc hiu chnh, sa i nh. S phin bn ca cc kernel c
gi l n nh l cc s chn, chng hn 1.0 , 1.2 v mi nht l 2.2.
Ngy nay, Linux hon ton l mt h iu hnh Unix. N n nh v lin tc pht trin.
N khng ch c kh nng pht trin trn cc thit b ngoi vi mi nht trn th trng ( b nh
flash quang , a quang ) m hiu nng ca n cn c th so snh vi mt s h iu hnh
Unix thng mi v thm ch cn c mt s im u vit hn. Sau cng, mc d Linux c
mt khong thi gian b gii hn trong mi trng cc trng i hc, by gi n ang c tip
nhn cc hng cng nghip.

.
1.5.2. Cc chc nng ca h iu hnh Linux
H iu hnh Linux c rt nhiu chc nng v chng khai thc kh nng ca cc h Unix hin
i theo cc cch sau :
a x l: cc b a x l c th thc hin nhiu chng trnh ng thi bt k s dng mt hay
nhiu b x l.
SVTH: Hong Th Mai Lin

Trang 3

Bo co n Nguyn l h iu hnh
a nn: Cho php nhiu ngi s dng : ging nh tt c cc h Unix, Linux cho php nhiu
ngi s dng cng lm vic trn mt my cng thi im.
H tr truyn thng giao x l ( Pipes , IPC , Sockets ).
Qun l cc thng ip iu khin khc nhau.
H thng qun l thit b u cui tun th theo tiu chun POSIX. Linux cng gi cc
thit b u cui cng nh iu khin qu trnh.
H tr mt di rng cc thit b ngoi vi, chng hn nh cc card m thanh, giao din
hoa, mng, giao din h my tnh nh .
Buffer cache : vng b nh c dnh lm vng m cho cc u vo v u ra t cc
qu trnh khc nhau.
H thng qun l b nh trang yu cu. Mt trang s khng c np chng no n
khng thc s cn thit b nh.
Cc th vin ng v dng chung : Cc th vin ng ch c ti khi chng tht s cn
thit v m ca chng c dng chung nu nhiu ng dng ang dng chng.
Cc h thng file c th qun l tt v ng u cc phn hoch file Linux c s dng
bi filesystem lm cc phn hoch c cc nh dng khc ( MS-DOS , ISO9660, vv. .. ).
Thit b ca TCP/IP v cc giao thc mng khc.

1.5.3. Hn ch ca h iu hnh Linux:


Hin nay h iu hnh Linux vn cn rt hn ch i vi ngi s dng, n vn cha
c s dng mt cch rng ri. Mt phn l do c qu t phn mn tng thch vi n.
1.6. Tin trnh trong Linux:
Tin trnh l mt chng trnh ang x l, s hu mt con tr lnh, tp cc thanh ghi v
cc bin. hon thnh tc v ca mnh, mt tin trnh c th cn n mt s ti nguyn nh
CPU, b nh chnh, cc tp tin v thit b nhp/xut.
Cn phn bit 2 khi nim chng trnh v tin trnh. Mt chng trnh l mt thc th th
ng, cha ng cc ch th iu khin my tnh tin hnh mt tc v no . Khi cho thc
hin cc ch th ny, chng trnh chuyn thnh tin trnh, l mt thc th hot ng, vi con tr
lnh xc nh ch th k tip s thi hnh, km theo tp cc ti nguyn phc v cho hot ng ca
tin trnh.
V mt nim, c th xem nh mi tin trnh s hu mt b x l o cho ring n,
nhng trong thc t, ch c mt b x l tht s c chuyn i qua li gia cc tin trnh. S
chuyn i nhanh chng ny c gi l s a chng (multiprogramming). H iu hnh chu
trch nhim s dng mt thut ton iu phi quyt nh thi im cn dng hot ng ca
tin trnh ang x l phc v mt tin trnh khc, v la chn tin trnh tip theo s c phc
v. B phn thc hin chc nng ny ca h iu hnh c gi l b iu phi (scheduler)

SVTH: Hong Th Mai Lin

Trang 4

Bo co n Nguyn l h iu hnh

1.6.1. Cc trng thi ca tin trnh


Trng thi ca tin trnh ti mt thi im c xc nh bi hot ng hin thi
ca tin trnh ti thi im . Trong qu trnh tn ti, mt tin trnh thay i trng thi
do nhiu nguyn nhn nh : phi ch mt s kin no xy ra, hay i mt thao tc
nhp/xut hon tt, buc phi dng hot ng do ht thi gian x l
Ti mt thi im, mt tin trnh c th nhn trong mt cc trng thi sau y :
In execution ( thc hin ) : Tin trnh ang c b x l thc hin.
Ready ( sn sng ): Tin trnh c th c thc hin nhng mt tin trnh khc
li ang chy.
Suspended (ch kch hot): Tin trnh ch din ra s kin ( V d nh ang ch
nhp hoc xut kt thc).
Zombie (tn ti) : Tin trnh kt thc thc hin, nhng n vn c tham
chiu trong h thng.
Stop (ngng) : Tin trnh b treo bi mt tin trnh ngoi
Cc thay i trng thi ca mt tin trnh c trnh by s trng thi sau :

S
to
thnh

Tn hiu

Sn sng

Kt thc
Nhp / Xut

Ngng

Lp lch trnh

Treo

Tn hiu

ang
thc hin

Kt thc
Tn ti

Nhp / Xut

Hnh 1 : S trng thi ca mt tin trnh.


Ti mt thi im, ch c mt tin trnh c th nhn trng thi Thc hin trn mt
b x l bt k. Trong khi , nhiu tin trnh c th trng thi khc.
Cc cung chuyn tip trong s trng thi biu din nhng s chuyn trng thi c th
xy ra trong cc iu kin sau :
- Tin trnh mi to c a vo h thng
- B iu phi cp pht cho tin trnh mt khong thi gian s dng CPU
- Tin trnh kt thc
SVTH: Hong Th Mai Lin

Trang 5

Bo co n Nguyn l h iu hnh

- Tin trnh yu cu mt ti nguyn nhng cha c p ng v ti nguyn cha sn


sng cp pht ti thi im ; hoc tin trnh phi ch mt s kin hay thao tc
nhp/xut.
- B iu phi chn mt tin trnh khc cho x l .
- Ti nguyn m tin trnh yu cu tr nn sn sng cp pht ; hay s kin hoc thao
tc nhp/xut tin trnh ang i hon tt.

1.6.2. Cu trc tin trnh


Mt tin trnh c c trng bi nhiu thuc tnh do h thng duy tr nh:

Trng thi ca n.
nh danh ca n.
Cc gi tr ca cc thanh ghi, bao gm c b m chng trnh.
M nh danh ngi s dng c tn m tin trnh ang thc hin.
Thng tin c kernel s dng thit lp lch biu ca cc tin trnh (th t
u tin, v.v).
Thng tin v khng gian a ch ca tin trnh ( cc phn on ca m, d liu,
ngn xp).
Thng tin v cc nhp / xut c tin trnh thc hin ( cc m t v cc file
m, th mc hin hnh )
Tnh tng thch thng tin tng kt cc ti nguyn do tin trnh s dng.
V d, khi c hai ngi dng (user), mt mang tn l A, mt mang tn l B cng ng nhp v
chy chng trnh C ( chng trnh c nhim v tm mt chui k t trong file) ng thi, thc
t h iu hnh s qun l v np m ca chng trnh C vo hai vng nh khc nhau v gi mi
phn vng nh vy l tin trnh. Hnh cho thy cch phn chia chng trnh C thnh hai tin
trnh cho hai ngi dng khc nhau s dng.
hnh minh ha, ngi dng A chy chng trnh C tm chui B trong tp findgirl.txt
$CB findA.txt
Trong khi ngi dng B chy C v tm chui A trong tp findboy.txt
$CA findB.txt
Chng ta nn nh rng hai ngi dng A v B c th hai my tnh khc nhau ng nhp vo
my ch Linux v gi C chy ng thi. Hnh 2 l hin trng khng gian b nh h iu hnh
Linux khi chy chng trnh C phc v ngi dng.

SVTH: Hong Th Mai Lin

Trang 6

Bo co n Nguyn l h iu hnh

Nu dng lnh ps, h thng s lit k cho bn thng tin v cc tin trnh m h iu hnh ang
kim sot. V d vi tham s -af
, chng ta c th thy cc thng tin do ps lit k nh sau
UID PID PPID C
STIME
TTY TIME CMD
root 2345 1234 0
Apr11 pts/0 00:00:00
[bash]
root 4345 2342 0
20:44 pts/3 00:00:00
ps af
A
111
1235 0
20:44 tty1 00:00:00
CB
find
B
222
1235 0
20:44 tty1 00:00:00
CA
find..
..
Mi tin trnh c gn cho mt nh danh nhn dng gi l PID (process identifier). PID
thng l s nguyn dng c gi tr t 2 32768. Khi mt tin trnh mi yu cu khi ng, h
iu hnh s chn ly mt s (cha b tin trnh ang chy no chim gi) trong khon s
nguyn trn v cp pht cho tin trnh mi. Khi tin trnh chm dt, h thng s thu hi li s
PID cp pht cho tin trnh mi.
Tin trnh vi PID = 1 l tin trnh init, tin trnh init c gi v chy ngay khi khi ng h
iu hnh, init l tin trnh qun l v to ra mi tin trnh con khc.
Chng ta thy lnh ps af hin th hai tin trnh A v B vi cc s PID ln lt l 111 v 222.
M lnh thc thi ca lnh C cha trong tp chng trnh c sn trong a c h iu hnh np
vo b nh. Nh thy trn hnh , mi tin trnh c h iu hnh phn chia r rng : vng
cha m lnh (code), vng cha d liu (data). M lnh thng l ging nhau v c th s dng
chung. Linux qun l cho php tin trnh ca cng mt chng trnh c th s dng chung m
lnh ca nhau.
Th vin cng vy. Tr nhng th vin c th cn th cc th vin chun s c h iu hnh
cho php chia s v dng chung bi mi tin trnh trong h thng. Vic chia s th vin, kch
thc chng trnh s gim i ng k.
SVTH: Hong Th Mai Lin

Trang 7

Bo co n Nguyn l h iu hnh
Tr m lnh v th vin cn hu nh d liu khng th chia s bi cc tin trnh. Mi tin trnh
s hu phn on d liu ring ( nh ta thy v d trn). Mi tin trnh cng c h thng
dnh ring cho mt bng m t file. Bng ny cha cc s m t p t cho cc file ang c
m. V mi tin trnh c ring ngn xp stack lu bin cc b v cc gi tr tr v sau li gi
hm. Tin trnh cng c dnh cho khong khng gian dnh ring lu cc bin mi trng.
Cui cng mi tin trnh hot ng trong khng gian a ch o c lp do h thng cp pht.
Chng ta khng cn quan tm n b nh vt l. Linux v UNIX c cch qun l phn trang
cng vi hon chuyn gia b nh vt l v b nh o thng qua phn vng swap.
Bng thng tin tin trnh
H iu hnh lu d mt cu trc danh sch bn trong h thng gi l bng tin trnh(process
table).Bng tin trnh qun l tt c cc Pid ca h thng cng vi cc thng tin chi tit v cc
tin trnh ang chy.
Ta c th xem bng tin trnh vi lnh ps af ( vi ty chn af hin th chi tit ) :
UID
PID
PPID
C
STIME
TTY
TIME
CMD
root
2345
1234
0
Apr11
pts/0
00:00:00
[bash]
A
111
1235
0
20:44
tty1
00:00:00
CB
find
B
222
1235
0
20:44
tty1
00:00:00
CA
find..
..
Trong :

UID : tn ngi dng gi tin trnh.

PID : l s nh danh m h thng cp cho tin trnh ( c dng lm kha chnh v nh ch


mc truy xut thng tin).

CMD

PPID : parent PID l s nh danh ca tin trnh cha.

STIME : Thi im tin trnh c a vo s dng.

TTY : L mn hnh terminal o ni gi thc thi tin trnh

TIME : l thi gian chim dng CPU ca tin trnh

ton

dng

lnh

khi

tin

trnh

triu

gi

1.6.3. To lp tin trnh


Ta c th gi mt chng trnh khc bn trong chng trnh ang chy bng hm system().
Hay ni cch khc ta c th to ra mt tin trnh mi t mt tin trnh ang chy. Hm system()
c khai bo nh sau :
Hm ny gi chui lnh cmdstr thc thi v ch lnh chm dt mi quay v ni gi hm.
#include <stdlib.h>
int system( const char *cmdstr);

SVTH: Hong Th Mai Lin

Trang 8

Bo co n Nguyn l h iu hnh
N tng ng vi vic ta gi shell thc thi lnh ca h thng.
system() s tr v m li 127 nu nh khng th khi ng shell
gi lnh cmdstr. M li 1 nu gp cc li khc. Ngc li m
tr v ca system() l m li do cmdstr sau khi thc thi tr v.
V d cch s dng hm system() trong chng trnh:
V d : system.c
Hm system() c s dng gi lnh ps ax ca h iu hnh.
$sh c cmdstr

#include <stdlib.h>
#include<stdio.h>
int main()
{
printf(Running ps with system\n);
system(ps ax);
printf(Done.\n);
exit(0);
}

Hm system() l cch n gin nht ta triu gi mt chng trnh ngoi khc. Hay ni
ng hn l to mt tin trnh mi tch bit vi tin trnh ban u ca ni gi.

1.6.4. Thay th tin trnh hin hnh vi hm exec


Mi tin trnh c h iu hnh cp cho mt khng gian nh ring bit tin trnh hot
ng. Nu tin trnh A gi mt chng trnh ngoi B (bng hm system() chng hn) h iu
hnh thng thc hin cc thao tc nh : cp pht khng gian b nh cho tin trnh mi, iu
chnh li danh sch cc tin trnh, np m lnh ca chng trnh B trn a vo khng gian nh
va cp pht cho tin trnh. a tin trnh vo danh sch cn iu phi ca h iu hnh. Nhng
cng vic trn i hi thi gian v chim ti nguyn ca h thng.
Nu tin trnh A ang chy v ta mun tin trnh B khi ng chy trong khng gian b nh
cp sn cho tin trnh A : Linux cung cp cho ta tp hp cc hm exec() thc hin chc nng kh
th v ny. Hm exec() s thay th ton b nh ca tin trnh A (bao gm m lnh, d liu, bng
m t file) thnh nh ca tin trnh B hon ton khc. Ch c s nh danh PID ca tin trnh A l
cn gi li. Hm thay th nh ca tin trnh bao gm tp cc hm sau :
a s cc hm ny u yu cu bn ch i s path hoc file l ng dn n chng trnh cn
#include<unistd.h>
extrn char **environ;
int execl(const char *path, const char *arg,);
int execlp(const char *file, const char *arg);
int execle(const char *path, const char *arg,,char
int exect(const char *path, const char *argv[]);
int execv(const char *path, const char *argv[]);
int execvp(const char *path, const char *argv[]);

*const envp[]);

thc thi trn a. Arg l cc i s cn truyn cho chng trnh thc thi, nhng i s ny tng
t cch ta gi chng trnh t dng lnh..
SVTH: Hong Th Mai Lin

Trang 9

Bo co n Nguyn l h iu hnh
V d : exec.c
Khi chy chng trnh lnh ps c thc thi, chng trnh exec ca ta khng ch ps
#include <unistd.h>
#include <stdio.h>
int main()
{
printf(Running ps with execlp\n);
execlp(ps, ps, -ax, 0);
printf(Done. But you never see this line);
exit();
}

chm dt v cng khng bao gi in ra chui Done. L do l ton b m lnh v khng gian ca
tin trnh exec sau khi gi hm execlp b thay th bi tin trnh mi ps.

1.6.5. Nhn bn tin trnh vi hm fork()


Tin trnh hin hnh c th to ra mt tin trnh con nh s dng lnh gi h thng fork().
Nguyn bn ca n l lm nhn bn tin trnh hin hnh> c khai bo nh sau :
#include <sys/types.h>
#include<unistd.h>
pid_t fork(void);
Khi fork c gi, tin trnh hin hnh s c nhn bn : bn sao s tun th bn gc,
ngoi tr nh danh ca n.
Tin trnh ban u gi l tin trnh cha trong khi tin trnh mi gi l tin trnh con.
Ngoi PID ra, tin trnh con cn mang thm mt nh danh PPID l s nh danh PID ca tin
trnh cha.
Khi to tin trnh
chnh

Gi fork()
Tr v PID ca tin trnh
cha

Tr v tr 0

M lnh k tip
ca tin trnh u
(cha)

M lnh thc thi tin


trnh mi (con)

Hnh 3: C ch phn chia tin trnh ca fork()


SVTH: Hong Th Mai Lin

Trang 10

Bo co n Nguyn l h iu hnh
Trng hp khng tch c, fork() s tr v tr -1. Kiu pid_t c khai bo v nh danh trong
unistd.h l kiu nguyn(int).
C hai tin trnh trn hot ng ng thi v c th ang xen nhau.
V d cho cch s dng hm fork() nhn i tin trnh:

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
pid_t pid;
printf(fork program starting\n);
pid = fork();
if (pid == -1)
perror(Can not call fork); // D liu b li
else if (pid ==0) printf(This is the child);
else printf(this is the parent);
}

1.6.6. Kim sot v i tin trnh con


Khi fork() tch tin trnh chnh thnh hai tin trnh cha v con, trn thc t c tin trnh cha
ln tin trnh con u hot ng c lp. c trt t hn, ta mun khi tin trnh cha kt thc th
tin trnh con cng phi hon tt, hay hn na l tin trnh con phi c thc hin xong ri mi
n tin trnh cha. Hm wait() s gip ta thc hin cng vic ny. Wait() c khai bo nh
sau :

#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int &stat_loc);

Hm wait() c gi trong tin trnh cha s dng li ch tin trnh con kt thc trc khi thc
hin tip cc lnh iu khin trong tin trnh cha. wait() lm cho s lin lc gia tin trnh cha v
tin trnh con tr nn tun t. Khi tin trnh con kt thc hm s tr v s PID tng ng ca tin
trnh con. Nu ta truyn thm i s stat_loc khc Null cho hm th wait() cng s tr v trng
thi m tin trnh con kt thc trong bin stat_loc. Ta c th s dng cc macro khai bo sn
trong sys/wait.h din dch ngha trng thi nh sau :

WIFEXITED(stat_loc)

Tr v tr khc 0 nu tin trnh con kt


thc bnh thng

WEXITSTATUS(stat_loc)

Tr v m li ca tin trnh con

WIFSIGNALED(stat_loc)

Tr v tr khc 0 nu tin trnh con kt


thc bi mt tn hiu gi n nhng
khng n bt v x l c.

SVTH: Hong Th Mai Lin

Trang 11

Bo co n Nguyn l h iu hnh

WTERMSIG(stat_loc)

Cho bit s tn hiu hy tin trnh


con

WIFSTOPPED(stat_loc)

Tr v tr khc 0 nu tin trnh con


dng

WSTOPSIG(stat_loc)

Tr v s hiu ca signal

1.6.7. n x l tn hiu khi tin trnh con kt thc


Tin trnh cha c th n bt tnh hung hay tn hiu SIGCHILD khi tin trnh con
chm dt v gn cho n mt tc v th thi no . Bng cch ny, tin trnh cha c th
khng cn phi gi wait() ch tin trnh con kt thc mi c th thc hin c tc v
tip theo. Khi to tin trnh con xong, tin trnh cha tip tc cng vic ca mnh. Khi tin
trnh con chm dt v gi tn hiu n tin trnh cha, hm hay b x l tn hiu ca tin
trnh cha s c triu gi thc thi.
Hm catch_child() c dng x l tn hiu(cn gi l b x l tn hiu).
gn mt hm x l tn hiu cho mt tn hiu c th no , ta g hm h thng signal().
1.6.8. B ri tin trnh con
Nh ta a bit, lnh fork() tch i mt tin trnh thnh tin trnh cha v tin trnh
con. C hai tin trnh cng hot ng c lp v hu nh khng ph thuc ln nhau. Ta
c th dng hm wait() ly thng tin v kim tra trng thi kt thc ca tin trnh con.
Tuy nhin nu tin trnh cha kt thc trc, tin trnh con vn cn hot ng, n khi kt
thc, n s khng cn im tr v lin h vi tin trnh cha a sinh ra n trc .
Nhng tin trnh con nh vy gi l zombie( d dang). H iu hnh khi s gn PPID
ca tin trnh con v 1. C ngha l nu tin trnh cha ca tin trnh con mt i th tin
trnh con s c chuyn giao cho tin trnh thy t cao nht, l tin trnh init.
Ta nn kim sot tin trnh con ca mnh do fork() sinh ra. C gng ng tin
trnh con trng thi b b ri. Mc d tin trnh init c cch thu lm cc tin trnh con
b b ri, nhng bn thn ca tin trnh cng chim mt phn thi gian v ti nguyn ca
h thng.

1.7. Giao tip tin trnh


1.7.1. Tng quan v giao tip gia cc tin trnh
Trong h thng cc tin trnh khng phi chy hon ton c lp vi nhau, nhng
n c th giao tip vi nhau, lin lc vi nhau.

SVTH: Hong Th Mai Lin

Trang 12

Bo co n Nguyn l h iu hnh

Chia s thng tin: Nhiu tin trnh c th cng quan tm n nhng d liu no ,
do vy h iu hnh cn cung cp mt mi trng cho php s truy cp ng thi n cc
d liu chung.
Hp tc hon thnh tc v: Nhiu tin trnh cng tham gia thc hin mt cng
vic. Hnh thc ny s y nhanh kh nng x l cng vic trong h thng.

1.7.2. Cc c ch giao tip tin trnh trong Linux


H iu hnh Linux cung cp cho ngi dng mt s c ch giao tip gia cc tin
trnh nh l:
- Giao tip bng tn hiu (signals handing).
- Giao tip bng ng ng (pipe).
- Giao tip bng hng i thng ip (message queue).
- Giao tip bng s dng vng nh chia s (share memory).
- Giao tip bng ng b tn hiu semephore.
- Giao tip trao i thng qua socket.
1.7.3. Cc vn ny sinh trong giao tip gia cc tin trnh
Do mi tin trnh s hu mt khng gian a ch ring bit, nn cc tin trnh khng th
lin lc trc tip d dng m phi nh vo cc c ch do h iu hnh cung cp. Khi cung
cp c ch lin lc cho cc tin trnh, h iu hnh thng phi tm gii php cho cc vn
chnh yu sau:
- Giao tip tng minh hay tim n (explicit naming/ implicit naming): tin trnh c cn
phi bit tin trnh no ang trao i hay chia s thng tin vi n? Mi lin kt c gi
l tng minh khi c thit lp r rng, trc tip gia cc tin trnh v l tim n khi cc
tin trnh lin lc vi nhay thng qua mt quy c ngm no .
- Giao tip theo ch ng b hay khng ng b (blocking/ nonblocking): Khi tin
trnh trao i thng tin vi mt tin trnh khc, cc tin trnh c cn phi i cho thao tc
lin lc hon tt ri mi tip tc cc x l khc? Cc tin trnh lin lc theo c ch ng
b s ch nhau hon tt vic lin lc, cn cc tin trnh lin lc theo c ch khng ng
b th khng.
- Giao tip gia cc tin trnh trong h thng tp trung v h thng phn tn: C ch lin
lc gia cc tin trnh trong cng mt my tnh c s khc bit so vi vic lin lc gia
cc tin trnh gia nhng my tnh khc nhau.

1.8. C ch giao tip bng ng ng (pipe)


1.8.1. nh ngha
Cc pipe (ng dn) to thnh phng tin truyn thng gia nhng tin trnh. S
truyn d liu gia cc tin trnh c thc hin thng qua mt lnh truyn : d liu
ghi ti mt u ca knh c c u bn kia.
SVTH: Hong Th Mai Lin

Trang 13

Bo co n Nguyn l h iu hnh

ng dn truyn thng
Tin trnh A

Tin trnh B

Hnh 4: Truyn thng gia hai tin trnh bng pipe.


Cc pipe khng cung cp mt truyn thng theo cu trc. Thao tc c c lp vi
thao tc ghi v do ti cp ca cc lnh gi h thng, ngi ta khng th bit c
kch c, ngi gi v ngi nhn d liu cha trong pipe. Mt khc, mt u im ca
phng php truyn thng ny l kh nng s dng d liu ghi nhiu ln c c
ch mt ln.
Ta c th thy r trong vic chuyn d liu trong Linux, v d :
$ps ax | grep runner
Lnh trn trc ht thc hin lnh ps ax lit k chi tit danh sch ca tt c
nhng tin trnh ang chy trong h thng. Kt qu tp d liu m ps ax tr v sau s
c chuyn cho lnh grep thng qua ng ng ( | ). Lnh grep tip nhn d liu v
thc hin tm chui runner trong d liu do ps gi sang. Kt qu ca t hp lnh trn l
ch c thng tin v tin trnh mang tn runner ang chy c in ra chi tit.
1.8.2. ng ng pipe giao tip trao i d liu mt chiu
H thng cung cp cho ta hm pipe() to ng ng c kh nng c/ghi. Sau
khi ng ng c to ra, ta c th dng n giao tip gia hai tin trnh (thng l
tin trnh cha v tin trnh con sinh ra bi hm fork()). Mi ng ng khi to ra c
km theo mt s m t ta c th truy xut
Hm ny yu cu i s l mng filedes bao gm hai phn t nguyn dng lu
#include <unistd.h>
int pipe(int filedes[2])

li s m t cho ng ng tr v sau li gi hm. Nu hm thnh cng ta c th dng hai


s m t ny thc hin thao tc c/ghi trn ng ng. Phn t th nht ca mng
c dng c, trong khi phn t th hai ca mng c dng ghi. V d v cch
gi hm pipe() to ng ng.
Nu pipe() thc hin thnh cng, ng ng s c to ra, pipes[0] l s m t
/* Trc ht nh ngha mng bao gm hai phn t cha s m t ng
ng */
int pipes[2]
/* Thc hin to ng ng pipe */
int rc = pipe (pipes);
if (rc == -1) { /* to ng ng b li*/
perror(pipe);
exit(1);
}

SVTH: Hong Th Mai Lin

Trang 14

Bo co n Nguyn l h iu hnh

ng ng pha u c trong khi pipes[1] l s m t ng ng pha u ghi. Nu


khng to c ng ng m li tr v s l 1.
Trong v d di y, sau khi to ra ng ng, ta gi hm fork() to ra tin
trnh con. Nh ta bit, khi nhn i tin trnh, b m t file ca tin trnh cha v tin
trnh con c kh nng k tha nhau cho nn pipes[] m bi tin trnh cha cng c nhn
bn v sao chp sang tin trnh con. Tin trnh cha s c d liu nhp vo t pha ngi
dng v ghi vo ng ng trong khi tin trnh con pha bn kia ng ng tip nhn d
liu bng cch c t ng ng v in ra mn hnh.
V d : oneway_pipe.c
#include <stdio.h>
#include <unistd.h>
/* hm ca tin trnh con */
void do_child(int data_pipe[]{
int c;
/*cha d liu c t tin trnh cha*/
int rc;
/*Lu trng thi tr v ca read() */
/*ng u ghi, v tin trnh con khng s dng*/
close(data_pipe[1]);
/* Tin trnh con s dng s m t ng ng pha u c c d liu
chuyn n t tin trnh cha.*/
while ((rc=read(data_pipe[0],&c,1))>0){
putchar(c);
}
/*D liu trong ng ng c c xong thot khi tin trnh con*/
exit(0);
}
/* Hm x l cng vic ca tin trnh cha*/
void do_parent(int data_pipe[])
{
int c;
/*D liu c c do ngi dng nhp vo */
int rc;
/*Lu tr tr v ca getchar()*/
/* Trc l ng u c v khng cn dng n*/
close(data_pipe[0]);
/* Nhn d liu do ngi dng nhp v ghi vo ng ng */
while ((c=getchar())>0) {
/*ghi d liu vo ng ng */
if (rc == -1) { /* D liu b li */
perror(Parent : pipe write error);
close (data_pipe[1]);
exit(1);
}
}
/* ng ng ng pha u ghi thng bo pha cui ng ng d
liu ghi ht */
close(data_pipe[1]);
exit(0);
}
/* Chng trnh chnh*/
int main()
{
int data_pipe[2];
int pid;
/* pid ca tin trnh con*/
int rc;
/* lu m li tr v */
/*To ng ng */

SVTH: Hong Th Mai Lin

Trang 15

Bo co n Nguyn l h iu hnh
rc = pipe(data_pipe);
if (rc == -1) {
perror(pipe create error);
exit(1);
}
/* Tch i tin trnh con*/
pid = fork();
switch (pid) {
case 1 :
perror (fork error);
exit(1);
case 0:
do_child(data_pipe);
default :
doparent(data_pipe);
}
return 0;
}

Khi chy chng trnh, nu ta nhp d liu vo t bn phm, d liu s c nhn


v ghi tr li bi tin trnh con.
Chng trnh trn thc hin c ch trao i ng ng mt chiu. Tin trnh cha
chuyn d liu n tin trnh con bng cch ghi vo ng ng. Tin trnh con ngc li
c d liu ra x l u bn kia ng ng. y pht sinh nhu cu trao i thng
tin, d liu ca hai tin trnh. Ta cn s dng hai ng ng song song. Tin trnh s
dng mt ng ng c v mt ng ng ghi.

1.8.3. ng ng pipe giao tip trao i d liu hai chiu


S dng c ch ng ng giao tip hai chiu d dng cho c hai pha tin trnh
cha v tin trnh con. Tuy nhin cng rt d gy ra tnh trng tc nghn. y l trng
hp m c hai tin trnh u cng mt trng thi ch c d liu ca nhau trong khi
khng c tin trnh no ghi vo ng ng. Sau y l mt s trng hp c th dn n
tc nghn :
- C hai ng ng u rng. C hai ng ng u gi hm read() c d liu.
Chng s tr nn tc nghn. Bi v c im ca hm read() khi c d liu t pipe theo
c ch : nu ng ng rng hm s kha trong trng thi ch (block) cho n khi d liu
c vo ng ng hay khi ng ng b ng li bi pha bn ghi.
- Trng hp ny phc tp hn. Mi ng ng s dng b m vi kch thc gii hn
nhm tng tc cho qu trnh c/ghi. Khi mt tin trnh ghi vo ng ng, d liu c
t vo vng m ca ng ng cho n khi n c ly ra pha u c. Nu vng
m ny b y, hm write() ca h thng s kha v ch cho n khi vng m c ly
i bt d liu. Cch duy nht ly d liu khi vng m l pha u c phi gi
hm read(). Do , nu c hai tin trnh cng ghi d liu cho n khi vng m qu ti
v khng c bn ng ng no thc hin c d liu th ta cng s ri vo trng thi tc
nghn.

SVTH: Hong Th Mai Lin

Trang 16

Bo co n Nguyn l h iu hnh

1.8.4. Pipe t tn
Qua v d trn ta thy ng ng ch c to ra v truyn d liu gia hai tin
trnh cha v con. Tin trnh cha gi fork() chuyn giao v gn ng ng vo tin
trnh con, tin trnh con nhn d liu x l v chuyn v cho tin trnh cha. ng ng
to ra bng hm pipe() c gi l ng ng v danh. N ch c s dng gia tin
trnh cha v con do ta ch ng to ra bng hm fork(). Mt vn t ra l, nu hai tin
trnh khng c quan h g vi nhau th c th s dng c c ch pipe giao tip vi
nhau khng? Cu tr li l c, Linux cho php ta to ra cc ng ng t tn. Nhng
ng ng mang tn s nhn thy v truy xut c bi cc tin trnh khc nhau.
* To pipe t tn vi hm mkfifo()
ng ng t tn cn c gi vi mt tn khc l i tng FIFO. Tht s
ng ng mang tn c biu din nh l mt file trong h thng file ca Linux. Ta
dng lnh mkfifo to file ng ng vi tn ch nh. Trong chng trnh, ta dng
hm h thng mkfifo() hay mknod(). Khai bo hm mkfifo() :
#include <sys/types.h>
#include <sys/stat.h>
mkfifo(const char *filename, mode_t mode);
Hm mkfifo() yu cu hai i s, i s filename l tn ca ng ng cn to,
mode l ch c ghi ca ng ng.
Vic to ng ng t tn khng lin quan g n cc tin trnh. Ta c th to ra
pipe trc khi xy dng cc chng trnh s dng n.

SVTH: Hong Th Mai Lin

Trang 17

Bo co n Nguyn l h iu hnh

CI T THUT TON V TRIN KHAI


1.9. ti :
Vit chng trnh gm 2 qu trnh. Qu trnh th nht cho ngi dng nhp vo t bn
phm mt chui biu din cc php tnh gm cc phn t +, -, (, ). D u tin ca cc php tnh
trong ngoc l cao nht, php + v c cng u tin. V d : 1+7-(8-7+2). Sau truyn
chui d liu ny sang qu trnh th 2. Qu trnh th 2 thc hin tnh ton v tr v cho qu trnh
th nht th hin cho ngi s dng bit.

1.10. M t bi ton :
Chng ta s xy dng mt chng trnh n gin m phng s giao tip
gia 2 tin trnh : tin trnh cha(P0) v tin trnh con(P1) qua c ch ng
ng. Tin trnh cha s cho ngi dng nhp vo chui biu thc cn tnh v
lu vo input_pipe. Sau tin trnh con s c d liu t input_pipe v x
l tnh ton kt qu chui biu thc, tr kt qu v cho tin trnh cha thng
qua output_pipe. Tin trnh cha s ly d liu ra t output_pipe v hin th
cho ngi dng bit.
Cc hm,bin quan trng s dng trong chng trnh

Dng 2 ng ng pipe : input_pipe v output_pipe.

ParentProcess (int input[2], int output[2]) : Hm bao gm cc cng vic m tin


trnh cha thc hin nh nhp chui biu thc t bn phm, ghi vo input_pipe ;
c kt qu x l t output_pipe nhm hin th cho ngi dng bit.
ChildProcess(int input[2], int output[2]): Hm bao gm cc cng vic m tin
trnh con thc hin nh c d liu t input_pipe, gi hm hauto() x l d
liu ri ghi d liu vo li output_pipe.
Hauto(char* ch) : Hm x l xu biu thc, phn tch thnh dy hu t, sau
tnh kt qu ca biu thc v ghi vo cui chui nhp
AddChar(char* ch, char kt): Ni 1 k t vo cui xu ch
AddNumber(char *ch, int n): i s thnh k t v ni vo cui xu ch
inKt(char kt) : in ra k t
inNumber(int n): in ra s
SVTH: Hong Th Mai Lin

Trang 18

Bo co n Nguyn l h iu hnh
La chn ngn ng v IDE: Chng trnh c code bng ngn ng C trn Ubuntu, IDE
c s dng l CodeBlock

1.11. Chng trnh:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/wait.h>
#include <ctype.h>
#include <stdbool.h>
#include <math.h>
#include <signal.h>
#include <sys/types.h>
#include <unistd.h>
void
void
void
void
void
void
void
bool
void
int

ChildProcess(int input[2], int output[2]);


ParentProcess(int input[2], int output[2]);
xuly(char *ch);
AddChar(char *ch, char kt);
AddNumber(char *ch, int n);
inKt(char kt);
inNumber(int n);
isOperator(char ch);
errorBt();
isOther(int i);

void
{

main(void)
pid_t pid;
int input_pipe[2];
int output_pipe[2];
int rc, child_status;
rc = pipe(input_pipe);
if(rc ==-1){
perror("\tmain : input_pipe error");
exit(1);
}

P1 x l biu thc
nhp vo

rc = pipe(output_pipe);
if(rc ==-1){
perror("\tmain : output_pipe error");
exit(1);
}
pid = fork();
if (pid == 0)
ChildProcess(input_pipe, output_pipe);
else{
//wait( &child_status );
ParentProcess(input_pipe, output_pipe);
}

SVTH: Hong Th Mai Lin

Trang 19

Bo co n Nguyn l h iu hnh

}
void
{

ChildProcess(int input[2], int output[2])


int
rc;
char
ch[100] = "";
close(input[1]);
close(output[0]);
rc = read(input[0], &ch, 100);
if (rc==-1)
{
perror("Error");
close(input[0]);
close(input[1]);
exit(1);
}
//Ham xu li bieu thuc vao
xuly(ch);
rc = write(output[1], ch, strlen(ch));
if (rc==-1)
{
perror("Error");
close(output[0]);
close(output[1]);
exit(1);
}
close(input[0]);
close(output[1]);

}
void
{

ParentProcess(int input[2], int output[2])


int
char

rc;
c, ch[100] = "";

close(input[0]);
close(output[1]);
printf("\n\tNhap bieu thuc:
"); gets(ch);
rc = write(input[1], ch, strlen(ch));
if (rc==-1)
{
perror("Error");
close(input[0]);
close(input[1]);
exit(1);
}
rc = read(output[0], ch, 100);
if (rc==-1)
{
perror("Error");

SVTH: Hong Th Mai Lin

Trang 20

Bo co n Nguyn l h iu hnh
close(output[0]);
close(output[1]);
exit(1);
}
close(input[1]);
close(output[0]);
}
void xuly(char *ch){
char stack_[100] = "", kq[100] = "", tam[100]="";
int i = 0, j = -1, k = -1, temp = 0;
/*
i : chi so vong lap for
j : chi so stack
k : chi so chuoi hau to kq
*/
//Chuyen bieu thuc dang trung to sang hau to
for( ; i<strlen(ch); i++){
switch(ch[i]){
case '+':
if(k<0) {
stack_[++j] = 'd'; //truong hop nay + la dau
duong
break;
}
if(isOperator(ch[i-1])) {
while(j>=0 && (stack_[j]=='a' || stack_[j]=='d'))
kq[++k] = stack_[j--];
stack_[++j] = 'd'; //truong hop nay + la dau
duong
break;
}
case '-':
if(k<0) {
stack_[++j] = 'a'; //truong hop nay - la dau am
break;
}
if(isOperator(ch[i-1])) {
while(j>=0 && (stack_[j]=='a' || stack_[j]=='d'))
kq[++k] = stack_[j--];
stack_[++j] = 'a'; //truong hop nay - la dau am
break;
}
else{
while(j>=0 && (stack_[j]=='+' || stack_[j]=='-'
|| stack_[j]=='*' || stack_[j]=='/' || stack_[j]=='^' || stack_[j]=='a'
|| stack_[j]=='d') ) kq[++k] = stack_[j--];
stack_[++j] = ch[i];
}
break;
case '*':
case '/':

SVTH: Hong Th Mai Lin

Trang 21

Bo co n Nguyn l h iu hnh
if( (k<0) || isOperator(ch[i-1]) ) {
errorBt();//Bieu thuc loi
return;
break;
}
else{
while(j>=0 && (stack_[j]=='*' || stack_[j]=='/'
|| stack_[j]=='^' || stack_[j]=='a' || stack_[j]=='d') ) kq[++k] =
stack_[j--];
stack_[++j] = ch[i];
}
break;
case '^':
if( k<0 || isOperator(ch[i-1]) ) {
errorBt();//Bieu thuc loi
return;
}
else{
while(j>=0 && (stack_[j]=='^' || stack_[j]=='a'
|| stack_[j]=='d'))
kq[++k] = stack_[j--];
stack_[++j] = ch[i];
}
break;
case '(':
stack_[++j] = ch[i];
break;
case ')':
while(j>=0 && stack_[j]!= '(') kq[++k] = stack_[j--];
j--;
break;
default:
if(isdigit(ch[i]) != 0){
temp = temp * 10 + ch[i] - 48;
if(isdigit(ch[i+1])==0) {
kq[++k] = temp;
temp = 0;
}
}
else i = isOther(i);
}
}
while(j>=0){
kq[++k] = stack_[j--];
}
printf("\n\tDang trung to: %s", ch);
printf("\n\tDang hau to: ");
for(i = 0; i <= k; i++){
switch(kq[i]){
case 'd':
inKt('+');
break;
case 'a':
inKt('-');
break;

SVTH: Hong Th Mai Lin

Trang 22

Bo co n Nguyn l h iu hnh
case
case
case
case
case

'+':
'-':
'*':
'/':
'^':
inKt(kq[i]);
break;
case 's':
printf("sin");
break;
case 'c':
printf("cos");
break;
default:
inNumber(kq[i]);
}
}
//Tinh gia tri bieu thuc tu bieu thuc hau to
/*
i : chi so vong lap
j : chi so stack
temp : bien tam
*/
i = 0; j = -1; temp = 0;
for( ; i<= k; i++){
switch(kq[i]){
case 'd':
break;
case 'a':
stack_[j]=-stack_[j];
break;
case '^':
//stack_[j-1] = (char)pow((double)stack_[j-1],
(double)stack_[j]);
temp = (char)mu((int)stack_[j-1], (int)stack_[j]);
stack_[--j] = temp;
break;
case '+':
temp = stack_[j] + stack_[j-1];
stack_[--j] = temp;
break;
case '-':
temp = stack_[j-1] - stack_[j];
stack_[--j] = temp;
break;
case '*':
temp = stack_[j] * stack_[j-1];
stack_[--j] = temp;
break;
case '/':
temp = stack_[j-1] / stack_[j];
stack_[--j] = temp;
break;
default:
stack_[++j] = kq[i];

SVTH: Hong Th Mai Lin

Trang 23

Bo co n Nguyn l h iu hnh
}
}
if(j!=0) printf("\nTinh toan sai: j = %d",j);
else printf("\n\tKet qua bieu thuc: %d", stack_[0]);
//Bo sung ket qua sau chuoi da nhap
AddChar(ch, '=');
AddNumber(ch, stack_[0]);
}
void

AddChar(char *ch, char kt){


ch[strlen(ch)+1] = ch[strlen(ch)];
ch[strlen(ch)] = kt;

}
void AddNumber(char *ch, int n){
char a[100];
int i = -1;
if(n < 0){
n = -n;
AddChar(ch, '-');
}
do{
a[++i] = n % 10 + 48;
n = n /10;
}while(n);
for( ; i >=0 ; i--){
AddChar(ch, a[i]);
}
}
void

inKt(char kt){
printf("%c", kt);

}
void

inNumber(int n){
char a[100];
int i = 0;
if(n < 0){
n = -n;
inKt('-');
}
do{
a[++i] = n % 10 + 48;
n = n /10;
}while(n);
for( ; i >=0 ; i--){
inKt(a[i]);
}

SVTH: Hong Th Mai Lin

Trang 24

Bo co n Nguyn l h iu hnh

bool isOperator(char ch){


switch(ch){
case '+':
case '-':
case '*':
case '/':
case '^':
return true;
default:
return false;
}
}
void errorBt(){
printf("\n Bieu thuc nhap vao khong dung, khong the tinh duoc!\n\n");
//exit(0);
}
int isOther(int i){
printf("\n\nisOther.................\n\n");
return i;
}
int mu(int a, int b){
int i = 1, temp = 1;
if(a==0) return 0;
if(b==0) return 1;
for( ; i<=b; i++) temp *= a;
printf("\n\t mu(%d, %d) = %d\n", a, b, temp);
return temp;
}

SVTH: Hong Th Mai Lin

Trang 25

Bo co n Nguyn l h iu hnh

1.12. Kt qu chng trnh:

1.13. nh gi:
Chng trnh tha yu cu ca bi ton v vic giao tip gia cc qu trnh bng
ng pipe trn nn Linux.
Tuy nhin, vic x l biu thc nhp vo cn cha ti u, cha hon thin.

SVTH: Hong Th Mai Lin

Trang 26

Bo co n Nguyn l h iu hnh

KT LUN V HNG PHT TRIN


1.14. Kt lun:
Vic tm hiu giao tip gia cc tin trnh bng c ch ng ng gip chng ta
hiu r hn c im v cch qun l tin trnh trong cc H iu hnh ni chung v
trong H iu hnh Linux ni ring.
c bit Vit Nam khi m h iu hnh Windows rt ph bin, vic lm quen vi
HH Linux l rt quan trng bi Vit Nam ang khuyn khch s dng h iu hnh m
ngun m.
1.15. Hng pht trin:
n ch dng li trong phm vi tm hiu s giao tip gia cc tin trnh bng c
ch ng ng v vit chng trnh m phng n gin.
Pipe l ch mt trong rt nhiu c ch giao tip gia cc tin trnh ca Linux. Khi
nm chc Pipe ta c th d dng nm c cc kiu giao tip khc nh : Tn hiu
(Signal), Vng nh chia s, Trao i thng ip (Message), Sockets.
y l bc u tin khi bc chn vo th gii lp trnh m ngun m c th
xy dng cc phn mm chy trn nn cc h iu hnh m ngun m trong tng lai.

SVTH: Hong Th Mai Lin

Trang 27

Bo co n Nguyn l h iu hnh

TI LIU THAM KHO


Ting Vit
[1] Nguyn Phng Lan, Hong c Hi (2001), Lp trnh Linux- Tp 1,NXB Gio Dc.
Ting nc ngoi
[2]
John Shapley Gray (January 13, 2003), Interprocess Communications in Linux:
The Noods & Crannies, Publisher Prentice Hall PTR.
[3]
Richard Stones and Neil Matthew (2003), Beginning Linux Programming, 2nd
Edition,Wrox Press.

SVTH: Hong Th Mai Lin

Trang 28

You might also like