Quản lý luồng trong Unix, Win2000

16 399 0
Tài liệu đã được kiểm tra trùng lặp
Quản lý luồng trong Unix, Win2000

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Luồng (thread), còn gọi là quá trình nhẹ (lightweight process- lwp) hay tiểu trình, là một đơn vị cơ bản của việc sử dụng CPU. Luồng có mô hình tương tự tiến trình, trong việc xử lí tuần tự các chỉ thị máy.

 Bài thảo luận Môn: Hệ điều hành Đề tài Quản lý luồng trong Unix, Win2000     !    ! "#$% !&' ()*'+ ! ,'+ !*-!.///////////////////01 23*456*'+ !//////////////////1 123789. 9*'+ !////////////////: "#$;<<92=*'+ ! ,>6!?69@=9A !(-BCB3/////////////00D EF*'+ !///////////////////,1 1'F) =98 !!6G323*'+ !///////////0,: "#$89. 9*'+ !=4 !H6 (-' 6C ,89. 9*'+ !=4 !H6 //////////000,I 89. 9*'+ !=4 !' 6C////////////0,D  "9J *$% !&' ()*'+ ! "#$%&'( threadlightweight process- lwp  !"#$%&'()*+,-./ 01#2%34/5+ (67 1&thread ID 0 .89:209stack+ ;1.<=.0>&?619@ 0,,1ABCD@/ running, ready.EBE!"91F$$1GH@ 1-IGJB#$%&' 0' " :209/+K#260 LJ0 .<$ML6!G1N0+( ,NG-5O,,$M 01'" 0,26JNL$G"+ ($MO$%P"91F$$1I."0 O,,1@$1$1L+Q1 /",,@11",+ )#*&&% (,1@D69.O&N69R+SC< .<69H69.O&1.O&N1AH69R 1R+  Luồng nhân : .<C</09 H#B/## @189O !PG-R+;1#!P.</ # H#BR@1!P8.O&N+ QJ&1.<!PO 0/#O# ITR,89O 1G1U&'/ 79#IG- T+S##BB.<C< R+  Luồng người dùng :.<C<&.LR.<A H. #@69.O&N+Q.#69#@189O ! PG-,$/C<VR&1,H69.O  .<@1!P+K#0 WTG/#O #I52!GR&BG+ +#*,-'&% Q1/running0,@1 1AB19''J4"+(30, -+  Mô hình đơn luồng -@OG0 .J4,$BG19X95/# J4"0@O,+  Mô hình đa luồng -@OG0. J4,,$BBG/#J 4,@NO+ YB#B69$/C<!R.O &NJV,@1B-G+(, 1@- -.OD + Mô hình nhiều-mộtD2@B69.O&NL 69R+Z,5,26R@OJ BG-@$1$1JB 2%PD  !'"-'./,0 + Mô hình một-mộtD2@69.O&NL69 R+19X9B@$1$1J 2%PG+Y. .<G@1.O&N9!@1R. UD !')-',0/,0 + Mô hình nhiều-nhiềuD2@B69.O&NLB 69R.$I.<.O&N9!>1A [$I.< R+  !'+-'./. 1223455*&% : QJP0C0$T,G-5&2% PJ+Y.1/0,$IU&'4B&2%PN $MG-50+(&2%P,1@ $1$1L.0891#I+\/#B #B.$I0/+Z 0/.J49''$T8J4 @1J9''J4,+ "#$6789:;<; (#B&NO#I]1GF2F699+ Q1.E="O#I]1GF2F ^+ Y01O.]1GL$1X9 @6!1AL+_$I#*2 #$%&'6 !"]1G$1X9@6!$1X9 @5.<@9JO#I9'1U&'"+ (0@9O#IF2F..<@91 $IF2F$T01 `U6! !+ 0=7&67D]1Ga$F2F G$FbQ1,D /c1GDQ@10L+ /d2FD(19X90G31@.eLf+g! 6"hF2Fi 000L+Q0L #9/j",$TekfJG-"08 $TG-,!BG1F2F-+ >?@A l/@1890L.</# [O#I ]1G+c1G19X9089 !$1",V &@0 +Q0I/R !3,.<0 !$1 @101+ (799.$D Pid = fork()  Z/J210J, !$1=;9&;;9;< .L!@5BGD ` 1 !Rj"0 I5B$I&"0 1m ` 1 !Rj"019&no- 1G0!@1 0Im  .L/#]1G.$D p+691L41F191F$$ Fm q+11$I&&6m r+@1 !$11 I!"0 I101+K $I94"0,$ME0GFF$T:I $I001B,$1X9B1 L8P+ s+:$I001 !#9H]F FG0<9L 001VG0$%&'U!1JN #9 !1&F1&F F01@1N.'# "0 IJ$I89#9.'tp+ u+!@$I&h9&i"0110 I+  !CDEF@G!FH?F2IF@G!? #include<stdio.h> main(int argc, char* argv[]) {  Int pid; /*fork another process*/ pid=fork(); if(pid<0) { /*error occurred */ printf(stderr, “Fork Failed”); exit(-1); } else if (pid==0) { /*child process*/ execlp(“/bin/ls”,”ls”,NULL); } Else { /*parent process*/ /*parent will wait for the child to complete*/ wait(NULL); printf(“Child Complete”); exit(0); } } THU T TOÁN FORKẬ  !"#$%&' $()* $%+#swaping&'demand paging,-#.%!/0&( $1 2%"34*!#5&6/78/&9 fork() input: none output: - PID for parent process /* Process ID*/ - 0 to child process; { .check for available kernel resources; .get free process table entry (slot), unique ID number; .check that user not running too many processes; .mark child state is :being created:; .copy data from parent process table entry to new child entry;/*dup*/ ; .increment counts on current directory inode and changed root (if applicable); .increment open file counts in file table;/*Ref. count of fds = +1*/ .make copy of parent context (u_area, text, data, stack) in mem- ory; /*create user level context (static part) now in using dupreg(), attachreg(). Except that the content of child’s u_area are initally the same as of parent’s,but can diverge after completion of the fork: the pionter to its process table slot. Note that, if nows parent open new file, the child can’t access to it !!! */ . push dummy system level context layer onto child system level context; /*Now kernel create the dynamic context for child: copy parent context layer 1 containing the user saved register context and the kernel frame stack of the fork system cal. If kernel stack is part of u_area, kernel automaticlly create child kernel stack when create the child u_area. If other method is used, the copying is needed to the private memory associated with chile process. Next kernel creates dummy context layer 2 for child containing the saved register context for lauer 1, set program counter . other regs to restore the child context, even it had never executed before and so that the child process to recognize itself as child when it runs. Now kernel tests the value register reg0 to decide if process is parent (reg0=1) or child (reg0=0).*/; .if (executing process is parent process) { /* After all, kernel set child to “ready to run in memory”, re- turn PID to user*/ .change child state to :ready to run:; .return(child PID); /*from system to user*/ } .else { /* and it start running from here when scheduled executing process is the child process: Child executes part of the code for fork() according to the program counter that kernel re- < stored from the saved regiter context in context layer 2, and return a 0 from the fork()*/ initialize u_area timing field; return(0); /*to user*/ } } EXEC =>exec /7?@ *86(3AB&4*! 3&+424/&3&%(,C*D3&user - level context " 8!exec /&"'(8EF&6@G/+3&exec $ HHAI/&J(G&1&KL/&&1&K !,MNO3& 3P$ !Dexec @&/7MNO", execve (filename, argv, envp) filename9B%(/7?@6 argv: 8QR?R$STU42?CVWW,XST $'@$D&/+Y$ !8E@, envp9RR$ST?@$ 8Q3&%(, 8%X"/exec 8/&9 execl (const char * pathname, const char *arg0, … / * (char *) 0 */ ); execv (const char * pathname, char *const argv[ ]); execle (const char * pathname, const char *arg0, … /*( char *) 0, char *const envp [ ] */ ); execve (const char * pathname, char *const argv[ ], char *const envp [ ] ); execlp (const char * filename, const char *arg0, … / * (char *) 0 */ ); execvp (const char * filename, char *const argv [ ] ); d nh ta dùng b ng sauĐể ễ ớ ả : Z[ [...]... luồng trong tác vụ thì hệ điều hành phải tác động vào tác vụ đó Vì tất cả các luồng trong một tác vụ chia sẻ cùng một không gian địa chỉ nên tất cả các luồng phải được đưa vào trạng thái hoan tại cùng một thời điểm Tương tự, khi một tác vụ ̃ kết thúc thi sẽ kết thúc tất cả các luồng trong tác vụ đó Phần III: Mô hình luồng trong Win2000 và Unix 1, Mô hình luồng trong Win2000 Hê ̣ điề u hành Win2000. .. một hay nhiều luồng Win2000 dùng ánh xa ̣ một-một, mỗi luồ ng cấ p người dùng ánh xa ̣ tới luồ ng nhân đươ ̣c liên kế t Tuy nhiên, Win2000 cũng được cung cấp hỗ trợ cho một thư viện có cấu trúc cung cấp chức năng mô hình nhiềunhiều Mỗi luồng thuộc về một tiến trình có thể truy xuất một không gian địa chỉ ảo của tiến trình Những thành phần thông thường của một luồng trong Win2000 là: * Một định... bô ̣ luồ ng Mặc dù Windows 2000 không cung cấp rõ sự hỗ trợ tín hiệu quản lý, nhưng chúng có thể được mô phỏng sử dụng lời gọi thủ tục bất đồng bộ (asynchronous produce calls - APC) Tiện ích APC cho phép luồng người dùng xác định hàm được gọi khi luồng người dùng nhận thông báo về một sự kiện xác định 2, Mô hình luồng trong Unix (trong ấn bản Solaris2) ́ Unix thường dùng mô hình nhiều-nhiều Ân bản... song song với nhau .Trong quá trình thực thi của luồng, nó cũng có thể tạo ra các luồng con của nó Điều đáng chú ý là có nhiều luồng trong phạm vi một tiến trình đơn Các hệ điều hành khác nhau có cách tiếp cận mô hình khác nhau, trong đó có mô hình luồng từ mô hình tác vụ Trong hệ thống tồn tại một không gian địa chỉ ảo để lưu trữ tác vụ và một cơ chế bảo vệ truy cập các file, các tài nguyên vào ra... đươ ̣c đă ̣c tả kiế n trúc tới phầ n cứng mà hê ̣ điề u hành cha ̣y trên đó Cấu trúc dữ liệu của luồng trong Win2000 gồm: a) ETHREAD (executive thread block - khối luồng thực thi): gồm mô ̣t con trỏ chỉ tới quá trình chứa luồng và địa chỉ của thủ tục mà luồng bắt đầu điều khiển trong đó ETHREAD cũng chứa mô ̣t con trỏ chỉ tới KTHREAD tương ứng Tồn tại hoàn toàn ở không gian nhân, chỉ... chứa ngăn xế p nhân (đươ ̣c dùng khi luồ ng đang cha ̣y trong chế đô ̣ nhân) và con trỏ chỉ tới TEB Tồn tại hoàn toàn ở không gian nhân, chỉ nhân mới có thể truy suấ t đươ ̣c c) TEB (thread environment block - khối môi trường luồng): là cấ u trúc dữ liê ̣u trong không gian người dùng đươ ̣c truy suấ t khi luồ ng đang cha ̣y trong chế đô ̣ người dùng Giữa những trường khác nhau,... ứng du ̣ng Nếu exec bị hủy ngay sau khi phân nhánh thì viê ̣c sao chép lại tất cả luồng là không cần thiết khi chương trình được xác định trong các tham số exec sẽ thay đổi quá trình Trong trường hơ ̣p này, viê ̣c sao chép la ̣i sẽ chỉ go ̣i luồ ng hơ ̣p lý Tuy nhiên, nế u quá trình riêng biê ̣t này không go ̣i exec sau khi phân nhánh thì quá trình phân biê ̣t này nên sao chép la... chạy trên LWP và yêu cầu LWP có thể được tận hiến tới một bộ xử lý đơn (xem luồng trái nhất trong hình trên) Liên kết một luồng có ích trong trường hợp yêu cầu thời gian đáp ứng nhanh, như ứng dụng thời thực Một luồng không giới hạn gán vĩnh viễn tới bất kỳ LWP nào Tất cả các luồng không giới hạn được đa hợp trong một nhóm cac LWP sẳn dùng cho ứng dụng Các luồng không giới hạn là mặc định Cấu trúc của... các luồng Như đã nói ở trên, các luồng trong một tiến trình chia sẻ với nhau không gian địa chỉ chung, nhờ đó mà các luồng có thể chia sẻ các biến toàn cục của tiến trình và có thể truy xuất lên các vùng nhớ stack của nhau Các luồng chia sẻ thời gian xử lý của processor giống như cách của một tiến trình Nhờ đó mà các luồng có thể hoạt động song song với nhau .Trong quá trình thực thi của luồng, nó cũng... dùng bởi thư viện cho mục đích định thời) Không có cấu trúc dữ liệu nào là tài nguyên nhân; tất cả chúng tồn tại trong không gian người dùng • Một LWP có một tập thanh ghi cho luồng cấp nhân nó đang chạy cũng như bộ nhớ và thông tin tính toán Một LWP là một cấu trúc dữ liệu nhân và nó nằm trong không gian nhân • Một luồng nhân chỉ có một cấu trúc dữ liệu nhân và ngăn xếp Cấu trúc dữ liệu gồm bản sao

Ngày đăng: 23/04/2013, 22:26

Tài liệu cùng người dùng

Tài liệu liên quan