UIT CE LAB HDH Lab3
-
Upload
tran-thien-phu -
Category
Documents
-
view
1.391 -
download
36
description
Transcript of UIT CE LAB HDH Lab3
-
TRNG I HC CNG NGH THNG TIN
KHOA K THUT MY TNH
TI LIU:
HNG DN THC HNH
H IU HNH
Nhm bin son:
- ThS. Phan nh Duy
- ThS. Phm Vn Phc
- ThS. Nguyn Vit Quc
- KS. Nguyn Hu Nhn
- KS. L Vn La
- KS. Trn Vn Quang
Thng 3 nm 2015
-
NI DUNG CC BI THC HNH
Phn 1: Lp trnh trn Linux
Bi 1: Hng dn ci t Ubuntu v cc lnh c bn ca shell
Bi 2: C bn lp trnh shell
Phn 2: Thc hnh h iu hnh
Bi 3: Qun l tin trnh
Bi 4: nh thi CPU
Bi 5: ng b ha tin trnh, tiu trnh
Bi 6: Qun l b nh
Phn 3: Bi tp ln
CC PHN MM THIT B S DNG TRONG MN THC HNH
- Phn mm VMware
- H iu hnh Ubuntu
-
Chng 1. Qun l tin trnh, tiu trnh
Sinh vin s thc hnh cc thao tc lin quan ti tin trnh trong h iu
hnh. Mc ch ca bi thc hnh ny l gii thiu v tin trnh, tiu trnh
trong h iu hnh linux. Cui cng sinh vin s p dng lp trnh a tiu
trnh (multithreading) nhm gim thi gian thc thi hin song song. Bi
thc hnh bao gm cc phn chnh:
Tm hiu v tin trnh, tiu trnh.
1.1 Tin trnh trong linux
Mt tin trnh, trong linux c gi l task, l mt thc th ca mt
chng trnh ang chy trong linux. Chng hn nu 10 ngi trn mt
server cng s dng mt chng trnh, nh emacs (trnh son tho), th ta
c 10 tin trnh emacs cng chy trn server , mc d chng u xut
pht t mt chng trnh.
Trong linux, ta c th dng lnh ps e hin th cc tt c cc tin
trnh ang chy trong h thng, hnh minh ha
Hnh 1. Tin trnh trong linux
-
Trong , PID l s id ca tin trnh, TTY cho bit tin trnh thuc vo
terminal no v CMD l tn ca chng trnh ang c chy.
ID ca tin trnh (PID) l duy nht cho mt tin trnh trong h thng.
H iu hnh s dng bin counter 32-bit t ID cho tin trnh. Mt khi
tin trnh c khi to, bin counter s c tang ln v gi tr ca n tr
thnh PID ca tin trnh va c khi to .
hin th nhiu thng tin cc tin trnh gn lin vi mt terminal ta g
lnh ps -l.
Hnh 2. Hin th thng tin tin trnh gn lin vi terminal hin ti
Ct S l mt trong cc ct quan trng nht, n cho bit trng thi ca
tin trnh. Cc tin trnh c th thuc vo cc trng thi nh bng sau
Code Name
D
R
S
T
Z
Uninteruptible sleep
Runnable (on run queue)
Sleeping
Traced hoc Stopped
Defunct (zombie)
Nu ta s dng lnh ps el, ta nhn thy rng hu ht cc tin trnh u
ang trong trng thi ng (sleeping S). Bi v, tt c ang i input x
l. Trong Hnh 2, ta c th thy PPID ca ps chnh l PID ca bash, do ps
c kch hot t bash, khi bash c gi l tin trnh cha ca tin trnh
-
ps. Nh vy sau khi khi to tin trnh ps xong, bash chuyn sang trng
thi ng.
Bi v c mi quan h cha-con gia cc tin trnh, nn linux h tr lnh
hin th mi quan h ny di dng cy thng qua lnh pstree. Ta c th
nhn ra rng cy quan h ny bt ngun t init, sau n cc tin trnh
cha (PPID) v cc daemon (cc tin trnh chy ngm khng tng tc trc
tip vi ngi dng).
1.2 Signals
Trong linux, cc tn hiu c xem nh mt knh giao tip bt ng b vi
mt tin trnh. Mt signal ngt mt tin trnh ang chy bnh thng
chuyn h thng sang phc v s kin khc. C rt nhiu loi signal trong
linux, sinh vin c th tham kho trong ti liu nh km. T terminal, ta c
th dng kill gi signal ti mt tin trnh. V d:
Hnh 3. Hy tin trnh bng lnh trong terminal
V d trn dng lnh KILL gi tn hiu SIGKILL ti tin trnh ng
300 giy. Ta c th dng lnh ny ny loi b cc tin trnh khng mong
mun vi cc la chn SIGKILL hoc SIGTERM. i vi SIGKILL tin
trnh s b hy ngay lp tc, trong khi SIGTERM th tin trnh c thi gian
x l cc thao tc.
-
C 3 cch bt mt tn hiu trong lp trnh. N c th b t chi
(khng phi tt c tn hiu u b t chi), n c th c gi ti mt
handler mc nh hoc gi ti mt handler nh trc. c th bt tn
hiu nh trc, ta c th dng hm signal (trong th vin signal.h) ly
s hiu v a ch ca mt hm bt tn hiu. V d di y bt s kin
CTRL-C (SIGINT signal interrupt).
Hnh 4. Bt tn hiu SIGINT
1.3 To tin trnh
To tin trnh t tin trnh cha 1.3.1
Trong linux, tin trnh c to ra bng cch nhn i mt tin trnh
bn mt li gi h thng fork. Trong C, ta c th thc hin bng lnh
fork():
#include
#include
pid_t fork(void);
-
Sau khi to tin trnh con t tin trnh cha, cc tin trnh s dng chung
code nhng s dng stack v heap ring. Hm fork tr v gi tr l PID, ta
c th s dng gi tr ny phn bit cc process. i vi tin trnh con,
hm fork tr v gi tr 0, nhng trong hm fork cha s tr v PID ca hm
mi to (nu gi tr tr v m l li). Sinh vin chy v d sau:
#include /* Symbolic Constants */
#include /* Primitive System Data Types */
#include /* Input/Output */
#include /* General Utilities */
int main(){
pid_t pid;
pid=fork();
if(pid==0)
printf("Child process, gia tri pid=%d\n",pid);
else
printf("Parent Proces, gia tri pid=%d\n",pid);
exit(0);
}
Hm wait c th c s dng hm cha i cho n khi hm con kt
thc. V d sau y khin tin trnh cha phi i tin trnh con hon thnh
trc.
#include /* Symbolic Constants */
#include /* Primitive System Data Types */
#include /* Input/Output */
#include /* General Utilities */
int main(){
pid_t pid;
pid=fork();
if(pid==0)
printf("Child process, gia tri pid=%d\n",pid);
else {
wait(NULL);
printf("Parent Proces, gia tri pid=%d\n",pid);
}
exit(0);
}
-
Khi to tin trnh t chng trnh c sn 1.3.2
Hm fork gip to mt tin trnh mi t tin trnh hin ti, tuy nhin,
nu chng ta mun chy mt chng trnh c sn th chng ta cn thc
hin mt li gi h thng. Hm execl s thay th tin trnh hin ti bi tin
trnh mi c gi t mt chng trnh. V d:
#include
#include
int main(){
execl("/usr/bin/gedit", "gedit", "foo.c, NULL);
exit(1);
}
Nu chng ta mun m to mt file vi tn l foo.c, ng ngha vi
vic ta g lnh gedit foo.c trong terminal, ta c th truyn cc tham s cho
hm execl nh execl("/usr/bin/gedit", "gedit", "foo.c, NULL);
Trong lp trnh ta c th kt hp lnh fork v lnh execl tin trnh
va tip tc chy v va to thm tin trnh mi t vic m thm chng
trnh khc. u tin, ta dng lnh fork to mt tin trnh con mi. Sau
, trong tin trnh con ta dng hm execl khi to tin trnh mi.
1.4 Tiu trnh
phn ny, sinh vin s lm quen vi cc thao tc c bn ca tiu trnh.
Tiu trnh trong linux c s dng thng qua gi th vin chun pthreads.
Chng ta cn thm c -pthread khi bin dch chng trnh c th bin
dch chng trnh c s dng tiu trnh. V d, nu ta mun bin dch file
c tn l threadprog.c ta s dng lnh nh sau:
$gcc pthread o threadprog threadprog.c
Ngoi ra, khi lp trnh chng ta cn khai bo th vin pthreads vo
bng cch thm pthread.h vo header.
-
Khi to tiu trnh 1.4.1
Mt tiu trnh c to ra bng cch gi hm pthread_create. Hm
pthread_create c nh ngha y nh sau:
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void
*(*start_routine)(void *), void *arg);
Pthread_create tr v mt s integer, nu tiu trnh to thnh cng s
tr v 0, ngc li l s khc 0.
i s u tin tr ti mt kiu cu trc c tn pthread_t. Cu trc
ny gi cc thng tin hu ch v mt tiu trnh (thread). V th, mi
khi to mi mt tiu trnh, ta cn cp pht b nh lu tr thng
tin ny.
i s th hai l mt con tr ti cu trc pthread_attr_t. Cu trc
ny cha cc thuc tnh ca tiu trnh nh s lng b nh cn cp
pht cho stack ca tiu trnh. Mc nh b nh cn thit l 512K.
Nu s lng tiu trnh qu nhiu c th gy ra trn b nh. V th
ta c th cp pht b nh cho stack nh hn.
#define SMALL_STACK 131072 //128K for stack
pthread_attr_t thread_attr;
pthread_attr_init(&thread_attr);
pthread_attr_setstacksize(&thread_attr, SMALL_STACK);
Lu , ta c th s dng li cu trc thuc tnh ny cho cc tiu
trnh khc nhau.
i s th 3 l con tr hm ch ti hm m tiu trnh s thc thi.
i s cui cng l i s c truyn cho hm s thc thi c
khai bo i s th 3.
-
V d v tiu trnh 1.4.2
Di y l mt v d v s dng pthread_create. Cc dng lnh di s
to mt tiu trnh thc thi hm fn
#include
#include
#include
#define SMALL_STACK 131072 //128K for stack
pthread_attr_t thread_attr;
void* fn(void* arg);
int main(int argc, char** argv)
{
pthread_attr_init(&thread_attr);
pthread_attr_setstacksize(&thread_attr, SMALL_STACK);
pthread_t th;
pthread_create(&th, &thread_attr, fn, (void*)14);
void* val;
thread_join(th, &val);
return 0;
}
void* fn(void* arg){
printf("arg = 0x%x\n", (int)arg);
return NULL;
}
Hm pthread_join lm cho hm main i cho n khi tiu trnh kt
thc.
1.5 Tng kt
Bi thc hnh ny hng dn sinh vin tm hiu v tin trnh trong
linux. Qua , gip sinh vin nm c cch thc c bn trong lp trnh
nh khi to tin trnh, tiu trnh, bt s kin trong lp trnh,...
1.6 Bi tp
1. V cy mi quan h ca danh sch cc tin trnh trong hnh bn di.
Ti mi nhnh, ghi ch tn v PID ca tin trnh (nh rng init lun
lun c PID l 1)
-
2. Sinh vin vit mt chng trnh c cha cc handler ca cc s kin
SIGHUP, SIGTERM, SIGINT. i vi mi handler in ra dng ch
cho bit chng trnh bt c tn hiu thnh cng.
Hng dn: sau khi vit xong chng trnh c tn ex-signals
Chy lnh ./ex-signals
Sau thc hin gi signal ti tin trnh ang chy. VD:
kill -SIGHUP pid
3. Cho chng trnh sau:
#include
#include
#include
#include
int main(){
pid_t pid;
int num_coconuts = 17;
pid = fork();
if(pid == 0) {
num_coconuts = 42;
exit(0);
} else {
wait(NULL); /*wait until the child terminates */ }
}
printf("I see %d coconuts!\n", num_coconuts);
exit(0);
}
Chng trnh s in g ra mn hnh? Gii thch ti sao.
-
4. Vit chng trnh lm cc cng vic sau theo th t:
a. In ra dng ch Thuc hanh he dieu hanh
b. M chng trnh gedit
c. i ngi dng nhn CTRL-C tt.
d. Khi ngi dng nhn CTRL-C, in dng ch Ban da nhan
CTRL-C.
5. Sinh vin b hm pthread_join trong v d mc 1.4.2. Sau bin
dch v chy li chng trnh. Chng trnh c in ra mn hnh ging
vi trc khng? Gii thch ti sao.
6. Sinh vin tm hiu thm v pthread_create nhm bit cch truyn
nhiu i s cho hm thc thi ca tiu trnh. Hy hin thc chng
trnh truyn MSSV v H Tn ca mnh cho tiu trnh v in ra mn
hnh.
-
PH LC
Chng 1. Qun l tin trnh, tiu trnh ...................................... 3
1.1 Tin trnh trong linux .......................................................... 3
1.2 Signals ................................................................................. 5
1.3 To tin trnh ....................................................................... 6
To tin trnh t tin trnh cha ................................... 6 1.3.1
Khi to tin trnh t chng trnh c sn ................ 8 1.3.2
1.4 Tiu trnh ............................................................................. 8
Khi to tiu trnh ...................................................... 9 1.4.1
V d v tiu trnh .................................................... 10 1.4.2
1.5 Tng kt ............................................................................. 10
1.6 Bi tp 10
-
TI LIU THAM KHO
1. http://www.ucs.cam.ac.uk/docs/course-notes/unix-
courses/Building/files/signals.pdf
2. http://manpages.ubuntu.com/manpages/lucid/man2/fork.2.html
3. http://manpages.ubuntu.com/manpages/saucy/man3/pthread_create.3
.html
4. http://manpages.ubuntu.com/manpages/saucy/man3/pthread_join.3.h
tml