UIT CE LAB HDH Lab3

download UIT CE LAB HDH Lab3

of 14

description

LAB OS

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