Tin học
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

Thảo luận Bài 5

+48
PhamHuyHoang(I113A)
TranMinhNhat61 (102c)
lebichtram89 (113a)
trinhquangtrong91 (113a)
PhanDiecLoi34 (113A)
CaoTheAnh01(113A)
nguyenduchuy19 (113A)
LUUDINHTOAN(I11C)
LeKimHoang (113A)
TrangSiMinhHai (113A)
ngongocdiep06 (113A)
NguyenVanNghiem(HC11TH3A)
tranthanhphu49 (113A)
LamVuThai (113A)
LeDangBaoNgoc55 (113A)
NguyenVuLinh12053_I11C
VuMinhTan (113A)
NguyenThiKimNgan (113A)
TranThiHuyenTrang(113A)
NguyenVanNgoc65 (113A)
dothanhnhan44 (113A)
nguyendinhhieu13 (113A)
NguyenHuuNghiep72
HoThienLang27 (113A)
voanhvy (113A)
nguyenchithuc(113A)
LeThanhNhan45 (113A)
MaiTrieuHung16 (113A)
NguyenPhamTanPhat(113A)
DangThiKimKhanh (113A)
ledinhngankhanh (113a)
TranThichThem (113A)
NguyenVanQuyet57 (113A)
TranThiThuyHang79 (113A)
trantrungnam-HC11TH2A
lechaukhoa(113A)
NguyenHuuLinh31(113A)
NguyenTrungTruc (113A)
NguyenVanLam(I13A)
PhamQuocAnh02 (113A)
NguyenThiNgocPhuong(113A)
NguyenNgocTrungNam (113A)
buidainghia(113A)
LeLamThang (113A)
NguyenThiThuThuy (113A)
HaHoangCongTien80 (113A)
phamanhtuan95(113A)
Admin
52 posters

Trang 8 trong tổng số 9 trang Previous  1, 2, 3, 4, 5, 6, 7, 8, 9  Next

Go down

Thảo luận Bài 5 - Page 8 Empty Re: Thảo luận Bài 5

Bài gửi  lebichtram89 (113a) 14/9/2012, 22:57

Sử dụng Đèn hiệu Synch để đồng bộ 2 tiến trình.

.Xét hai process: P1 và P2
Yêu cầu: lệnh S1 trong P1 cần được thực thi trước lệnh S2 trong P2
Định nghĩa semaphore “synch” dùng đồng bộ
Khởi động semaphore:synch.value= 0
Để đồng bộ hoạt động theo yêu cầu, P1 phải định nghĩa như sau:
S1;
signal(synch);
Và P2 định nghĩa như sau:
wait(synch);
S2;

lebichtram89 (113a)

Tổng số bài gửi : 61
Join date : 19/07/2012
Age : 36

Về Đầu Trang Go down

Thảo luận Bài 5 - Page 8 Empty Re: Thảo luận Bài 5

Bài gửi  lebichtram89 (113a) 14/9/2012, 22:58

Bổ sung câu Trình bày mục đích của đồng bộ hóa công việc của các tiến trình cho các ví dụ minh họa

.
Đồng bộ hóa công việc của các tiến trình để các tiến trình chạy một cách có trật tự, đảm bảo tính nhất quán của tài nguyên dùng dung.

Nhất quán: Có chờ lẫn nhau. Ví dụ: nhà sản xuất chưa hoàn tất tính toán nhà tiêu thụ đã lấy sản phẩm dẫn đến kết quả sai, không đảm bảo tính toàn vẹn.

Tài nguyên dùng chung: là các mảng buffer ( bài toán sản xuất và tiêu thụ )

Nếu như các luồng làm việc không đúng trật tự, không đúng công việc sẽ dẫn đến kết quả sai. Ví dụ hàm sleep để trễ một chút, để đồng bộ ).

Đồng bộ hóa tránh được tình trạng dead clock: các tiến trình rơi vào trạng thái treo không làm việc được.

Ví dụ bài toán sản xuất tiêu thụ có biến count để đếm số sản phẩm trong bộ đệm, gán bằng 0 khi chưa có sản phẩm nào.
vòng lặp lẩn quẩn bên trong khi count =0 và chờ đến khi count !=0 tức là có sản phẩm thì nhà tiêu thụ mới lấy về.
kiểm tra chỗ trống để xếp vào bộ đệm.
Nhà sản xuất không được xếp thêm vào bộ đệm nếu như không còn chỗ trống, nhà tiêu thụ không được lấy sản phẩm khi không có sản phẩm nào trong bộ đệm. Công việc của nhà sản xuất nhà tiêu thụ được đồng bộ hóa.
.





lebichtram89 (113a)

Tổng số bài gửi : 61
Join date : 19/07/2012
Age : 36

Về Đầu Trang Go down

Thảo luận Bài 5 - Page 8 Empty Re: Thảo luận Bài 5

Bài gửi  DangThiKimKhanh (113A) 17/9/2012, 09:36

lebichtram89 (113a) đã viết: Ví dụ: Xe qua cầu yếu

.Mã của tiến trình Xei có cấu trúc như sau:
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Typedef int semaphore;
Semaphore mutex = 1; //đèn hiệu nhị phân, có hai trạng thái
//0: đèn màu đỏ
//1: đèn màu xanh
While(1)
{
Đi đến cầu;
Wait(mutex); //chờ đèn xanh
Lên cầu; //đoạn tương tranh, đèn màu đỏ
Qua cầu; //đoạn tương tranh, đèn màu đỏ
Signal(mutex); //đèn chuyển sang màu xanh
Đi tiếp;
Quay về theo cầu khác;
}


Do chiếc cầu yếu nên mỗi thời điểm chỉ có 1 xe được phép qua cầu. Những xe khác khi đi đến đầu cầu sẽ ngủ tại lệnh wait(mutex) vì đèn đỏ. Sau khi một xe đã lên cầu và qua cầu xong thì lệnh signal(mutex) được thực hiện, tăng đèn mutex lên 1, đèn chuyển sang màu xanh. Một xe sau sẽ được đánh thức và lên cầu. Trong trường hợp này vùng tranh chấp là cây cầu..




Vùng tranh chấp ở đây là cây cầu ..mà cụ thể là " mặt cầu"..mình nhớ thế phải ko??....các ban gop ý nhé thanks!!

DangThiKimKhanh (113A)

Tổng số bài gửi : 32
Join date : 18/07/2012

Về Đầu Trang Go down

Thảo luận Bài 5 - Page 8 Empty Mô hình đa luồng

Bài gửi  TranMinhNhat61 (102c) 17/9/2012, 11:39

Mô hình đa luồng
Nhiều hệ thống cung cấp sự hỗ trợ cả hai luồng nhân và luồng người dùng nên
tạo ra nhiều mô hình đa luồng khác nhau. Chúng ta sẽ xem xét ba loại cài đặt luồng
thông thường
Mô hình nhiều-một
Mô hình nhiều-một (như hình IV.2) ánh xạ nhiều luồng cấp người dùng tới
một luồng cấp nhân. Quản lý luồng được thực hiện trong không gian người dùng vì
thế nó hiệu quả nhưng toàn bộ quá trình sẽ bị khóa nếu một luồng thực hiện lời gọi hệ
thống khóa. Vì chỉ một luồng có thể truy xuất nhân tại một thời điểm nên nhiều luồng
không thể chạy song song trên nhiều bộ xử lý. Green threads-một thư viện luồng được
cài đặt trên các hệ điều hành không hỗ trợ luồng nhân dùng mô hình nhiều-một.
Mô hình một-một
Mô hình một-một (hình IV.3) ánh xạ mỗi luồng người dùng tới một luồng
nhân. Nó cung cấp khả năng đồng hành tốt hơn mô hình nhiều-một bằng cách cho một
luồng khác chạy khi một luồng thực hiện lời gọi hệ thống nghẽn; nó cũng cho phép
nhiều luồng chạy song song trên các bộ xử lý khác nhau. Chỉ có một trở ngại trong
mô hình này là tạo luồng người dùng yêu cầu tạo một luồng nhân tương ứng. Vì chi
phí cho việc tạo luồng nhân có thể đè nặng lên năng lực thực hiện của ứng dụng, các
cài đặt cho mô hình này giới hạn số luồng được hỗ trợ bởi hệ thống. Windows NT,
Windows 2000 và OS/2 cài đặt mô hình một-một này.
Mô hình nhiều-nhiều
Mô hình nhiều-nhiều (như hình VI.4) đa hợp nhiều luồng cấp người dùng tới
số lượng nhỏ hơn hay bằng các luồng nhân. Số lượng các luồng nhân có thể được xác
định hoặc một ứng dụng cụ thể hay một máy cụ thể (một ứng dụng có thể được cấp
nhiều luồng nhân trên một bộ đa xử lý hơn trên một bộ đơn xử lý). Trong khi mô hình
nhiều-một cho phép người phát triển tạo nhiều luồng người dùng như họ muốn, thì
đồng hành thật sự là không đạt được vì nhân có thể lập thời biểu chỉ một luồng tại mộ
thời điểm. Mô hình một-một cho phép đồng hành tốt hơn nhưng người phát triển phải
cẩn thận không tạo ra quá nhiều luồng trong một ứng dụng. Mô hình nhiều-nhiều gặp
phải một trong hai vấn đề khiếm khuyết: người phát triển có thể tạo nhiều luồng
người dùng khi cần thiết và các luồng nhân tương ứng có thể chạy song song trên một
bộ đa xử lý. Khi một luồng thực hiện một lời gọi hệ thống khóa, nhân có thể lập thời
biểu một luồng khác thực thi. Solaris 2, IRIX, HP-UX, và Tru64 UNIX hỗ trợ mô
hình này.

TranMinhNhat61 (102c)

Tổng số bài gửi : 55
Join date : 16/07/2012

Về Đầu Trang Go down

Thảo luận Bài 5 - Page 8 Empty Khái niệm đa luồng. So sánh luồng với tiến trình (giống và khác nhau ở chỗ nào?)

Bài gửi  TranMinhNhat61 (102c) 17/9/2012, 11:40

* Khái niệm đa luồng: Luồng còn gọi là tiến trình nhẹ (LWP-Light Weight Process), cũng là một đơn vị cơ bản sử dụng CPU.
* So sánh:
- Tiến trình (Process) là chuơng trình trong thời gian thực hiện (đặt dưới sự quản lý của HĐH).
- Luồng (Thread) còn gọi là tiến trình nhẹ (LWP-Light Weight Process), một đơn vị cơ bản sử dụng CPU.
- Luồng cũng có thông tin trạng thái như của tiến trình truyền thống (HWP- Heavy Weight Process).
- Tiến trình có thể có một luồng chính với nhiều luồng phụ. Mỗi luồng có khả năng chia sẻ tài nguyên với các luồng khác trong tiến trình.
- Nhiều luồng có thể cùng chung một mã chương trình

TranMinhNhat61 (102c)

Tổng số bài gửi : 55
Join date : 16/07/2012

Về Đầu Trang Go down

Thảo luận Bài 5 - Page 8 Empty Những ích lợi của công nghê đa luồng

Bài gửi  ledinhngankhanh (113a) 17/9/2012, 21:46

- Khả năng đáp ứng (Responsiveness) tốt hơn: Trong khi một luồng bị ách hoặc quá bận, luồng khác vẫn vận hành bình thường (ví dụ, luồng chính của trình duyệt vẫn tương tác với người dùng trong khi dữ liệu được lấy về).
- Chia sẽ tài nguyên (Resource Sharing): Theo mặc định, các luồng có thể dùng chung bộ nhớ và tài nguyên của luồng cha. Vài luồng cùng vận hành trong một vùng địa chỉ, do đó dễ chia sẻ tài nguyên hơn so với trường hợp đa tiến trình.
- Tiết kiệm (Economy): Cấp phát bộ nhớ và tài nguyên cho tiến trình là một công việc tốn kém. Do luồng chung tài nguyên với cha và các luồng khác, việc tạo lập và chuyển ngữ cảnh cũng nhanh hơn (Solaris 2: Tạo tiến trình chậm hơn 30 lần, chuyển ngữ cảnh chậm hơn 5 lần).
- Tận dụng được thế mạnh của kiến trức đa xử lý: Đa luồng làm tăng tính song song trên hệ máy nhiều CPU. Mỗi luồng có thể được chạy bởi CPU riêng.
- Lập trình đa luồng dễ hơn (chia sẻ tài nguyên và tạo mới luồng dễ hơn).

ledinhngankhanh (113a)

Tổng số bài gửi : 30
Join date : 29/07/2012

Về Đầu Trang Go down

Thảo luận Bài 5 - Page 8 Empty Trình bày nguyên lý tập luồng và Ví dụ minh họa

Bài gửi  ledinhngankhanh (113a) 17/9/2012, 21:47

*** Tập luồng (Thread Pools):

-Tiến trình cha tạo lập sẵn một tập luồng khi khởi động.
- Các luồng trong tập luồng luôn sẵn sàng chờ công việc.
- Khi tiến trình cha (ví dụ Web Server) nhận thêm một yêu cầu, một luồng được đánh thức và đưa vào vận hành.
- Phục vụ xong, luồng được đưa trả về tập luồng.
- Nếu số yêu cầu lớn hơn số luồng trong tập, tiến trình cha chờ đến khi có luồng được giải phóng.
Ví dụ:
Trong một doanh trai quân đội sẽ có một tướng lĩnh (tiến trình cha) và sẽ có một đội binh (tập luồng).
Đội binh này sẽ sẳn sàng chiến đầu khi có mệnh lệnh (sẵn sàng chờ công việc).
Khi có một tên địch đột nhập, Tướng lĩnh sẽ điều binh sĩ 1 (một luồng) đi bắt tên địch (một luồng được đánh thức và đưa vào vận hành).
Trong khi đó, lại có thêm một tên địch khác đột nhập (nhận thêm một yêu cầu), Tướng lĩnh sẽ điều binh sĩ 2 (một luồng) đi bắt địch (một luồng khác được đánh thức và đưa vào vận hành).
Sau khi bắt địch xong, binh sĩ sẽ trở về doanh trại (luồng được trả về tập luồng

ledinhngankhanh (113a)

Tổng số bài gửi : 30
Join date : 29/07/2012

Về Đầu Trang Go down

Thảo luận Bài 5 - Page 8 Empty Giải thích 1 số hàm trong bài toán sản xuất tiêu thụ

Bài gửi  ledinhngankhanh (113a) 17/9/2012, 21:49

Hàm GetCurrentThread: dùng để lấy về mục quản của luồng sản xuất hiện hành(mục quản: là con số do hệ điều hành cấp ho luồng hiện hành)
Hàm SuspendThread: dùng để tạm ngưng công việc của hàm với mục quản cho trước
Hàm Sleep: dùng để ngủ 1 số miligiay cho trước,hết khoảng thời gian đó nhà tiêu thụ lại làm việc tiếp
Hàm GetTickCount(): dùng để lấy số miligiay trôi qua kể từ khi hệ điều hành khởi động cho đến thời điểm gọi hàm này
HÀm ResumeThread: dùng để tiếp tục công việc của luồng với mục quản cho trước
Hàm CloseHandle: dùng để hủy đối tượng cho trước với mục quản cho trước. vd: CLoseHandle (45) :luồng 45 không làm việc nữa,bị đóng lại

ledinhngankhanh (113a)

Tổng số bài gửi : 30
Join date : 29/07/2012

Về Đầu Trang Go down

Thảo luận Bài 5 - Page 8 Empty Những lợi ích của công nghệ đa luồng

Bài gửi  ledinhngankhanh (113a) 17/9/2012, 22:19

Những lợi ích của công nghệ đa luồng

Khả năng đáp ứng (Responsiveness) tốt hơn: Trong khi một luồng bị ách hoặc quá bận, luồng khác vẫn vận hành bình thường (Luồng chính của trình duyệt vẫn tương tác với người dùng trong khi dữ liệu được lấy về).
Ví dụ: Các cô ở tổng đài 108 là các luồng. Khi khách hàng điện thoại hỏi 108. Nếu chỉ có 1 cô phải trực 10 máy điện thoại thì khi chỉ có 1 cuộc điện thoại gọi đến thì cô sẽ trả lời tốt nhưng khi có khoảng 3 cuộc điện thoại trở lên thì cô không thể trả lời được kịp hết.
Nếu có nhiều cô cùng trực điện thoại thì lúc đó sẽ tốt hơn, đáp ứng được nhu cầu của khách hàng khi họ gọi đến .
Nếu trong thời điểm đó khách hàng thứ hai gọi 108, thì một trong các cô (cô thứ 2) còn lại sẽ trả lời cho khách hàng.

Chia sẻ tài nguyên (Resource Sharing): Theo mặc định, các luồng có thể dùng chung bộ nhớ và tài nguyên của luồng cha. Vài luồng cùng vận hành trong 1 vùng địa chỉ, do đó dễ dùng chung tài nguyên hơn so với trường hợp đa tiến trình.
Ví dụ: Trong nhà ta có kệ sách, tivi, xe gắn máy, ... mọi người trong nhà có thể dùng chung sách, tivi, xe máy.

Tiết kiệm (Economy): Cấp phát bộ nhớ và tài nguyên cho tiến trình là công việc tốn kém. Do luồng chung tài nguyên với cha và các luồng khác, việc tạo lập và chuyển ngữ cảnh cũng nhanh hơn (Solaris 2: Tạo tiến trình chậm hơn 30 lần, Chuyển ngữ cảnh chậm hơn 5 lần).
Ví dụ: Các bạn trong lớp là các luồng đang dùng chung một cái bảng, ai cần ghi thi ghi, ai cần thì chụp hình về xem

Tận dụng được thế mạnh của kiến trúc đa xử lý: Đa luồng làm tăng tính song song trên hệ máy nhiều CPU. Mỗi luồng có thể chạy bởi CPU riêng.

ledinhngankhanh (113a)

Tổng số bài gửi : 30
Join date : 29/07/2012

Về Đầu Trang Go down

Thảo luận Bài 5 - Page 8 Empty Khái niệm đa luồng. So sánh luồng với tiến trình (giống và khác nhau ở chỗ nào?)

Bài gửi  ledinhngankhanh (113a) 17/9/2012, 22:20

* Khái niệm đa luồng: Luồng còn gọi là tiến trình nhẹ (LWP-Light Weight Process), cũng là một đơn vị cơ bản sử dụng CPU.
* So sánh:
- Tiến trình (Process) là chuơng trình trong thời gian thực hiện (đặt dưới sự quản lý của HĐH).
- Luồng (Thread) còn gọi là tiến trình nhẹ (LWP-Light Weight Process), một đơn vị cơ bản sử dụng CPU.
- Luồng cũng có thông tin trạng thái như của tiến trình truyền thống (HWP- Heavy Weight Process).
- Tiến trình có thể có một luồng chính với nhiều luồng phụ. Mỗi luồng có khả năng chia sẻ tài nguyên với các luồng khác trong tiến trình.
- Nhiều luồng có thể cùng chung một mã chương trình

ledinhngankhanh (113a)

Tổng số bài gửi : 30
Join date : 29/07/2012

Về Đầu Trang Go down

Thảo luận Bài 5 - Page 8 Empty Giải thích 1 số hàm trong bài toán sản xuất tiêu thụ

Bài gửi  ledinhngankhanh (113a) 17/9/2012, 22:21

Hàm GetCurrentThread: dùng để lấy về mục quản của luồng sản xuất hiện hành(mục quản: là con số do hệ điều hành cấp ho luồng hiện hành)
Hàm SuspendThread: dùng để tạm ngưng công việc của hàm với mục quản cho trước
Hàm Sleep: dùng để ngủ 1 số miligiay cho trước,hết khoảng thời gian đó nhà tiêu thụ lại làm việc tiếp
Hàm GetTickCount(): dùng để lấy số miligiay trôi qua kể từ khi hệ điều hành khởi động cho đến thời điểm gọi hàm này
HÀm ResumeThread: dùng để tiếp tục công việc của luồng với mục quản cho trước
Hàm CloseHandle: dùng để hủy đối tượng cho trước với mục quản cho trước. vd: CLoseHandle (45) :luồng 45 không làm việc nữa,bị đóng lại

ledinhngankhanh (113a)

Tổng số bài gửi : 30
Join date : 29/07/2012

Về Đầu Trang Go down

Thảo luận Bài 5 - Page 8 Empty lợi ích của đa luồng

Bài gửi  NguyenHuuLinh31(113A) 17/9/2012, 22:35

Khả năng đáp ứng (Responsiveness) tốt hơn: Trong khi một luồng bị ách hoặc quá bận, luồng khác vẫn vận hành bình thường (ví dụ, luồng chính của trình duyệt vẫn tương tác với người dùng trong khi dữ liệu được lấy về).
VD:người 1 người thu ngân trong siêu thị đang tính tiền cho khách hàng mặc dù đằng sau còn rất nhiều người khách khác thì trong lúc đó cũng đang có nhiều người thu ngân khác phục vụ cho các khách hàng khác
- Chia sẽ tài nguyên (Resource Sharing): Theo mặc định, các luồng có thể dùng chung bộ nhớ và tài nguyên của luồng cha. Vài luồng cùng vận hành trong một vùng địa chỉ, do đó dễ chia sẻ tài nguyên hơn so với trường hợp đa tiến trình.
VD:Mẫu csdl quản lí sinh viên trong trường nếu thống nhất dùng chung 1 mẫu thì dễ dàng chỉnh sửa nếu cần thay đổi
- Tiết kiệm (Economy): Cấp phát bộ nhớ và tài nguyên cho tiến trình là một công việc tốn kém. Do luồng chung tài nguyên với cha và các luồng khác, việc tạo lập và chuyển ngữ cảnh cũng nhanh hơn (Solaris 2: Tạo tiến trình chậm hơn 30 lần, chuyển ngữ cảnh chậm hơn 5 lần).
VD:2 sinh viên cùng phòng học cùng lớp thì nên đi 1 xe máy sẽ đỡ tốn kém hơn là mỗi người đi 1 xe
- Tận dụng được thế mạnh của kiến trức đa xử lý: Đa luồng làm tăng tính song song trên hệ máy nhiều CPU. Mỗi luồng có thể được chạy bởi CPU riêng.
VD:với một CPU đa luồng bạn sẽ thấy sự cải thiện lớn khi xem DVD trong lúc máy vẫn đang chơi game online mà tốc độ không bị ảnh hưởng, bởi vì từng ứng dụng sẽ được gán trên các lõi khác nhau.

NguyenHuuLinh31(113A)

Tổng số bài gửi : 33
Join date : 19/07/2012

Về Đầu Trang Go down

Thảo luận Bài 5 - Page 8 Empty Nguyên lý tập luồng

Bài gửi  NguyenHuuLinh31(113A) 17/9/2012, 22:39

Tiến trình cha tạo lập sẵn một tập luồng ngay khi vửa khởi động một công việc và chuyển nó sang trạng thái sleep(vì nếu cho xử lý liền thì sẽ tốn CPU). Phải chuyển sang trạng thái ngủ nên khi có yêu cầu xử lý thì sẽ chuyển sang trạng thái xử lý ngay, mặc dù phải tốn RAM để duy trì tập luồng trong trạng thái sleep nhưng vẫn tốt hơn, tiết kiệm hơn trong việc phải chờ hình thành một tiến trình khác.

- Khi tiến trình cha nhận được một yêu cầu thì một luồng con sẽ được đánh thức và đưa vào vận hành.
- Sau khi phục vụ xong yêu cầu thì luồng ngay lập tức sẽ được trả về tập luồng và chờ cho đến khi được gọi thực thị công việc kế tiếp.
- Các luồng trong tập luồng luôn trong trạng thái sẵn sàng chờ công việc, ngay khi có yêu cầu xử lý thì tập luồng sẽ điều phối các luồng ra thực hiện trong phạm vi số lượng luồng cho phép, nếu hết thì cần phải chờ luồng xử lý xong mới tiếp tục đáp ứng thực hiện yêu cầu sau.
- Nếu số lượng yêu cầu quá lớn, lớn hơn số lượng luồng trong tập luồng, thì tiến trình cha phải chờ cho đến khi có luồng con được giải phóng trả về mới gọi đi thực thi tiếp.

NguyenHuuLinh31(113A)

Tổng số bài gửi : 33
Join date : 19/07/2012

Về Đầu Trang Go down

Thảo luận Bài 5 - Page 8 Empty Luồng và tiến trình

Bài gửi  PhamHuyHoang(I113A) 18/9/2012, 01:00

.Khái niệm đa luồng: Luồng còn gọi là tiến trình nhẹ (LWP-Light Weight Process), cũng là một đơn vị cơ bản sử dụng CPU.
- Luồng cũng có thông tin trạng thái như tiến trình truyền thống (Heavy Weight Process).
+ Nhiều luồng có thể cùng chung một mã chương trình.
- Tiến trình có thể có một luồng chính với nhiều luồng phụ. Mỗi luồng có khả năng chia sẻ tài nguyên với các luồng khác trong tiến trình.

PhamHuyHoang(I113A)

Tổng số bài gửi : 10
Join date : 16/08/2012

Về Đầu Trang Go down

Thảo luận Bài 5 - Page 8 Empty SỰ LIÊN LẠC GIỮA CÁC TIẾN TRÌNH(INTERPROCESS COMUNICATION)

Bài gửi  NguyenHuuLinh31(113A) 18/9/2012, 20:08

1. Nhu cầu liên lạc giữa các tiến trình

Trong môi trường đa chương, một tiến trình không đơn độc trong hệ thống , mà có thể ảnh hưởng đến các tiến trình khác , hoặc bị các tiến trình khác tác động. Nói cách khác, các tiến trình là những thực thể độc lập , nhưng chúng vẫn có nhu cầu liên lạc với nhau để :
- Chia sẻ thông tin: nhiều tiến trình có thể cùng quan tâm đến những dữ liệu nào đó, do vậy hệ điều hành cần cung cấp một môi trường cho phép sự truy cập đồng thời đến các dữ liệu chung.
- Hợp tác hoàn thành tác vụ: đôi khi để đạt được một sự xử lý nhanh chóng, người ta phân chia một tác vụ thành các công việc nhỏ có thể tiến hành song song. Thường thì các công việc nhỏ này cần hợp tác với nhau để cùng hoàn thành tác vụ ban đầu, ví dụ dữ liệu kết xuất của tiến trình này lại là dữ liệu nhập cho tiến trình khác .Trong các trường hợp đó, hệ điều hành cần cung cấp cơ chế để các tiến trình có thể trao đổi thông tin với nhau.

2. Các vấn đề nảy sinh trong việc liên lạc giữa các tiến trình

Do mỗi tiến trình sỡ hữu một không gian địa chỉ riêng biệt, nên các tiến trình không thể liên lạc trực tiếp dễ dàng mà phải nhờ vào các cơ chế do hệ điều hành cung cấp. Khi cung cấp cơ chế liên lạc cho các tiến trình, hệ điều hành thường phải tìm giải pháp cho các vấn đề chính yếu sau :
Liên kết tường minh hay tiềm ẩn (explicit naming/implicit naming) : tiến trình có cần phải biết tiến trình nào đang trao đổi hay chia sẻ thông tin với nó ? Mối liên kết được gọi là tường minh khi được thiết lập rõ ràng , trực tiếp giữa các tiến trình, và là tiềm ẩn khi các tiến trình liên lạc với nhau thông qua một qui ước ngầm nào đó.
Liên lạc theo chế độ đồng bộ hay không đồng bộ (blocking / non-blocking): khi một tiến trình trao đổi thông tin với một tiến trình khác, các tiến trình có cần phải đợi cho thao tác liên lạc hoàn tất rồi mới tiếp tục các xử lý khác ? Các tiến trình liên lạc theo cơ chế đồng bộ sẽ chờ nhau hoàn tất việc liên lạc, còn các tiến trình liên lạc theo cơ chế nonblocking thì không.
Liên lạc giữa các tiến trình trong hệ thống tập trung và hệ thống phân tán: cơ chế liên lạc giữa các tiến trình trong cùng một máy tính có sự khác biệt với việc liên lạc giữa các tiến trình giữa những máy tính khác nhau?

NguyenHuuLinh31(113A)

Tổng số bài gửi : 33
Join date : 19/07/2012

Về Đầu Trang Go down

Thảo luận Bài 5 - Page 8 Empty Re: Thảo luận Bài 5

Bài gửi  NguyenHuuLinh31(113A) 18/9/2012, 20:10

Trong nhà hàng :

•các nhân viên đang làm việc là vd như tiến trình của hệ thống vì khi mở cửa đã chuẩn bị sẵn tất cá các thứ đó .
•Khi khách yêu cầu các món ăn cũng như nước uống thì là vd của tiến trình người dùng vì khi đó mới thực hiện những công việc khách hàng yêu cầu .

NguyenHuuLinh31(113A)

Tổng số bài gửi : 33
Join date : 19/07/2012

Về Đầu Trang Go down

Thảo luận Bài 5 - Page 8 Empty Re: Thảo luận Bài 5

Bài gửi  NguyenHuuLinh31(113A) 19/9/2012, 08:43

* Khái niệm đa luồng: Luồng còn gọi là tiến trình nhẹ (LWP-Light Weight Process), cũng là một đơn vị cơ bản sử dụng CPU.
* So sánh:
- Tiến trình (Process) là chuơng trình trong thời gian thực hiện (đặt dưới sự quản lý của HĐH).
- Luồng (Thread) còn gọi là tiến trình nhẹ (LWP-Light Weight Process), một đơn vị cơ bản sử dụng CPU.
- Luồng cũng có thông tin trạng thái như của tiến trình truyền thống (HWP- Heavy Weight Process).
- Tiến trình có thể có một luồng chính với nhiều luồng phụ. Mỗi luồng có khả năng chia sẻ tài nguyên với các luồng khác trong tiến trình.
- Nhiều luồng có thể cùng chung một mã chương trình
* Luồng:
Ví dụ: Lớp học là một tiến trình. Trong lớp sẽ có một giáo viên(đơn luồng) và các học viên (đa luồng)
* Tiến trình:
Ví dụ: Lớp 113a đang học là một tiến trình.

NguyenHuuLinh31(113A)

Tổng số bài gửi : 33
Join date : 19/07/2012

Về Đầu Trang Go down

Thảo luận Bài 5 - Page 8 Empty Phân biệt khái niệm luồng và tiến trình, những ích lợi của công nghệ đa luồng

Bài gửi  ngongocdiep06 (113A) 20/9/2012, 10:31

a) Khái niệm luồng ( thread )
+ Luồng còn gọi là tiến trình nhẹ ( LWP – Light Weight Process), một đơn vị cơ bản sử dụng CPU. Luồng cũng có thông tin trạng thái của tiến trình truyền thống ( HWP – Heavy Weight Process ).
+ Một luồng là một dòng xử lý cơ bản trong hệ thống. Mỗi luồng xử lý tuần tự đoạn code của nó, sở hữu một con trỏ lệnh, tập các thanh ghi và một vùng nhớ stack riêng-> luồng bao gồm: mã luồng ( thread ID ) + bộ đếm chương trình ( program counter ) + tập thanh ghi ( register set ) + stack.
b) Khái niệm tiến trình ( process)
+ Việc thực hiện các công việc được mô tả thông qua chương trình-> chương trình hoạt động thì chuyển thành tiến trình-> một tiến trình gồm:mã nguồn chương trình (code ) + data + bộ đếm chương trình ( program counter ) + ngăn xếp ( stack ) + giá trị ở các thanh ghi ( register values )-> một tiến trình cần: cung cấp đầy đủ tài nguyên cần thiết + CPU tiếp nhận và thực hiện.
+ Tiến trình có thể có một luồng chính với nhiều luồng phụ.
c) Phân biệt luồng và tiến trình
+ Luồng được coi là mức thấp hơn của tiến trình, mỗi tiến trình có thể có nhiều luồng.
+ Hoạt động của các luồng giống như tiến trình nhưng các luồng cùng chia sẻ không gian địa chỉ chung, còn các tiến trình thì hoàn toàn độc lập.
d) Trình bày những ích lợi của công nghệ đa luồng.
+ Đáp ứng nhanh ( responsiveness ): cho phép luồng chính tiếp tục được thực hiện thậm chí khi một luồng bị ách hoặc quá bận.
+ Chia sẻ tài nguyên ( resource sharing ): các luồng có thể dùng chung bộ nhớ và tài nguyên của luồng cha, cho phép 1 ứng dụng có 1 số luồng khác nhau hoạt động trong cùng 1 không gian địa chỉ.
+ Tiết kiệm ( Economy ): cấp phát bộ nhớ và tài nguyên cho tiến trình là công việc tốn kém. Do luồng chung tài nguyên với cha và các luồng khác nên việc tạo lập và chuyển ngữ cảnh cũng nhanh hơn.
+ Tận dụng được thế mạnh của kiến trúc đa xử lý ( multiprocessor ): làm tăng tính song song trên hệ máy nhiều CPU ( processor ).
+ Lập trình đa luồng dễ hơn lập trình đa tiến trình, tạo mới 1 tiến trình vừa lâu vừa khó, tạo mới 1 luồng thì nhanh và dễ hơn.

ngongocdiep06 (113A)

Tổng số bài gửi : 23
Join date : 16/07/2012

Về Đầu Trang Go down

Thảo luận Bài 5 - Page 8 Empty Khái niệm đa luồng. So sánh luồng với tiến trình (giống và khác nhau ở chỗ nào?)

Bài gửi  ngongocdiep06 (113A) 20/9/2012, 10:33

* Khái niệm đa luồng: Luồng còn gọi là tiến trình nhẹ (LWP-Light Weight Process), cũng là một đơn vị cơ bản sử dụng CPU.
* So sánh:
- Tiến trình (Process) là chuơng trình trong thời gian thực hiện (đặt dưới sự quản lý của HĐH).
- Luồng (Thread) còn gọi là tiến trình nhẹ (LWP-Light Weight Process), một đơn vị cơ bản sử dụng CPU.
- Luồng cũng có thông tin trạng thái như của tiến trình truyền thống (HWP- Heavy Weight Process).
- Tiến trình có thể có một luồng chính với nhiều luồng phụ. Mỗi luồng có khả năng chia sẻ tài nguyên với các luồng khác trong tiến trình.
- Nhiều luồng có thể cùng chung một mã chương trình
Ví Dụ về luồng:
VD1: Các bạn đi trên đường một chiều thì một chiều đó chình là một luồng hay 1 tiến trình, nhưng trong luồng đó người ta phân ra các luồng nhỏ hơn đó là các làn xe ô tô, xe tải, xe máy, và đi bộ. Các làn đó được gọi là một luồng hay 1 tiến trình nhẹ.
VD2: Trong công ty các bạn có : Sếp, thư kí, kế toán, nhân viên văn phòng...... Thì công ty là một luồng lớn hay 1 tiến trình để sản xuất là một sản phẩm gì đó vd như cơ khí, còn những cá thể trong công ty sẽ là một luồng hay một tiến trình nhẹ để xử lý các công việc khác nhau.......

ngongocdiep06 (113A)

Tổng số bài gửi : 23
Join date : 16/07/2012

Về Đầu Trang Go down

Thảo luận Bài 5 - Page 8 Empty Câu 2: Trình bày nguyên lý tập nguồn và cho ví dụ minh họa

Bài gửi  ThuyDuong23 (I12A) 27/9/2012, 23:43

Tập luồng (Thread Pools):
• Tiến trình cha tạo lập sẵn một tập luồng khi khởi động.
• Các luồng trong tập luồng luôn sẵn sàng chờ công việc.
• Khi tiến trình cha (ví dụ Web Server) nhận thêm một yêu cầu, một luồng được đánh thức và đưa vào vận hành.
• Phục vụ xong, luồng được đưa trả về tập luồng.
• Nếu số yêu cầu lớn hơn số luồng trong tập, tiến trình cha chờ đến khi có luồng được giải phóng.
VD:
Trong công ty có 1 phòng kỹ thuật (tiến trình cha). Trong phòng kỹ thuật có các nhân viên kĩ thuật(tập luồng).
Có 1 khách hàng bị trục trặc về thiết bị của họ ( bị hư máy tính). Phòng kỹ thuật sẽ nhận được yêu cầu. và sẽ điều 1 nhân viên đi khắc phục sự cố cho khách hàng. Khắc phục xong thì nhân viên đó sẽ quay về nơi làm việc của họ và chờ sẵn sàng.

ThuyDuong23 (I12A)

Tổng số bài gửi : 35
Join date : 17/02/2012
Age : 34
Đến từ : DakLak

Về Đầu Trang Go down

Thảo luận Bài 5 - Page 8 Empty phân biệt đa luồng với đa tiến trình

Bài gửi  ThuyDuong23 (I12A) 29/9/2012, 23:50

Một luồng thường được gọi là tiến trình nhẹ (lightweight proces-LWP), là một đơn vị cơ bản của việc sử dụng CPU; nó hình thành gồm: một định danh luồng (thread ID), một bộ đếm chương trình, tập thanh ghi và ngăn xếp. Nó chia sẻ với các luồng khác thuộc cùng một tiến trình phần mã, phần dữ liệu, và tài nguyên hệ điều hành như các tập tin đang mở và các tín hiệu.
Một tiến trình truyền thống (hay tiến trình nặng) có một luồng điều khiển đơn. Nếu tiến trình có nhiều luồng điều khiển, nó có thể thực hiện nhiều hơn một tác vụ tại một thời điểm.

Sự giống nhau:
- Đều có thông tin trạng thái
- Luồng cũng là tiến trình nhưng là tiến trình nhẹ (Light Weigh Process)
- Đa luồng hay đa tiến trình có thể liên quan đến một chương trình.
- Chia sẻ tài nguyên cho nhau, tăng tốc tính toán, đảm bảo tính đơn thể
- Do luồng cùng vận hành trong 1 vùng địa chỉ, vì vậy dễ dùng chung tài nguyên hơn đa tiến trình
Ví dụ: Mình cần mượn xe đi đâu đó thì mượn xe trong gia đình để đi thì dễ hơn mượn của người ngoài
- Do luồng chung tài nguyên với luồng cha nên việc tạo lập và chuyển đổi ngữ cảnh cũng nhanh hơn tiến trình
Ví dụ: Việc ngăn phòng riêng ra trong nhà thì dễ hơn việc xây thêm hay mua thêm một nhà khác.
- Cấp phát tài nguyên bộ nhớ cho tiến trình khá tốn kém.
- Lập trình đa luồng thì dễ hơn lập trình đa tiến trình.

Sự khác nhau:
- Lập trình đa luồng dễ hơn lập trình đa tiến trình.
- Tạo mới một tiến trình khó hơn tạo mới một luồng.
- Luồng không cần gởi, nhận thông điệp.
- Luồng chuyển đổi ngữ cảnh nhanh và ít chiếm tài nguyên hơn tiến trình.
- Luồng chia sẻ tài nguyên dùng chung dể hơn tiến trình.



ThuyDuong23 (I12A)

Tổng số bài gửi : 35
Join date : 17/02/2012
Age : 34
Đến từ : DakLak

Về Đầu Trang Go down

Thảo luận Bài 5 - Page 8 Empty Nguyên lý tập luồng

Bài gửi  TranThiThuyHang79 (113A) 1/10/2012, 09:58

- Tập luồng bao gồm luồng giống nhau
ví dụ: các bạn sinh viên cùng lớp có chung mã số sinh viên đầu.
- Tiến trình cha tạo lập sẵn một tập luồng khi khởi động.
- Các luồng trong tập luồng luôn sẵn sàng chờ công việc.
- Khi tiến trình cha nhận thêm một yêu cầu, một luồng được đánh thức và nhanh chóng đưa vào vận hành.
- Phục vụ xong luồng được trả về tập luồng.
- Nếu số yêu cầu lớn hơn số tập luồng trong tập, tiến trình cha chờ đến khi có luồng được giải phóng.

TranThiThuyHang79 (113A)

Tổng số bài gửi : 46
Join date : 24/07/2012
Age : 34
Đến từ : Tiền Giang

Về Đầu Trang Go down

Thảo luận Bài 5 - Page 8 Empty Kỹ thuật đa luồng trong C#

Bài gửi  hoanglam 1/10/2012, 22:02


Multi Thread

Trong bài viết hôm nay chúng ta sẽ tìm hiểu về một kỹ thuật trong lập trình Csharp .NET nhằm giúp tăng tốc chương trình, cải thiện tốc độ xử lý. Cái mà tôi đang nói đến chính là kỹ thuật MultiThread, hiểu đơn giản là tạo 1 chương trình sao cho có hơn 1 luồng dữ liệu được xử lý trong đó. Ta thấy ở thời điểm hiện nay ngành công nghệ phần cứng đang phát triển mạnh mẽ, máy tính và các thiết bị di động được trang bị các bộ xử lý đa nhân để có thể làm được cùng một lúc nhiều công việc hơn – Xử lý song song. Việc phát triển chương trình chạy đa luồng cũng có ý nghĩa rất lớn bên ngành mạng viễn thông, giúp tăng tốc và cải thiện đường truyền tín hiệu…

Trong .NET các hàm xử lý Thread được định nghĩa bên trong namespace System.Threading; Trong một chương trình có xử lý đa luồng nghĩa là có hơn 1 luồng dữ liệu cùng được xử lý đồng thời và được đồng bộ hóa theo 1 cơ chế định thời bên trong .NET.

1. Ví dụ minh họa về Multi Thread

Trong ví dụ bên dưới ta lần lượt khởi tạo 3 Thread t1, t2, t3. Tương ứng với 3 Thread sẽ có 3 hàm static a() , b() , c(). Ta thấy khi khởi tạo Thread ta truyền đối số là là hàm static như truyền một con trỏ hàm. Và hiển nhiên khi một Thread bất kỳ được khởi chạy thì nó sẽ thực hiện công việc công việc được giao ban đầu. Công việc của các hàm a() , b() , c() là in ra các ký tự được định nghĩa bên trong nó. Nếu như thông thường, ta gọi 3 hàm đó theo đúng thứ tự như trong ví dụ bên dưới thì kết quả thu được sẽ là: In ra 100 ký tự “+”, 100 ký tự “-” và cuối cùng là 100 ký tự “o”. Nhưng ở đây ta cho 3 hàm cùng thực hiện song song, nên các ký tự sẽ được in ra xen kẽ nhau.

Multi Thread trong Lập trình Csharp | MicrosoftTech.Net
Kết quả:
Multi Thread trong Lập trình Csharp | MicrosoftTech.Net2. Một số phương thức thông dụng cho việc xử lý Thread

Abort():Với phương thức này sau khi được gọi thì Thread sẽ chuyển sang trạng thái dừng, và thuộc tính ThreadState sẽ trả về giá trị Stopped.
Suspend():Thread khi đang chạy nếu gọi phương thức Suspend() thì sẽ dừng hoạt động cho tới khi gọi lại bằng phương thức Resyme().
Sleep(): Khi một Thread đang chạy nếu phương thức Sleep được gọi thì sẽ rơi vào trạng thời chờ trong một khoảng thời gian t (tính theo miligiây) sẽ tiếp tục hoạt động. Vị dụ: System.Threading.Thread.Sleep(1000); Khi phương thức này được gọi thì Thread sẽ tạm dừng trong vòng 1000 miligiây. Ta thấy đây là một phương thức tĩnh nên có thể gọi mà không cần thông qua instance Thread nào cả.
Join():Đây là một phương thức tôi thấy rất hay dùng khi xử lý Thread. Ta có thể hiểu ý nghĩa có phương thức này như sau: Khi một Thread gọi phương thức Join thì Thread đó sẽ được ưu tiên trong hệ thống. Những lện nào nằm sau phương thức Joinn chỉ được thực thi khi Thread kết thúc. Những lệnh đã chạy từ trước thì vẫn được thực thi với Thread hiện tại, và không có ảnh hưởng gì.

3. Ví dụ phương thức Join trong Thread

Ví dụ này tương tự ví dụ bên trên, chỉ khác ở chỗ: Thread t1, t2 gọi phương thức Join trước khi Thread t3 Start(). Vì lý do này nên t1 và t2 sẽ cùng được xử lý cho đến khi cả 2 đều kết thúc thì t3 mới bắt đầu thực thi. Nhìn vào kết quả trả về ta dễ dàng thấy: Các ký tự “+”, “-” lần lượt được in ra cho đến khi cả 2 kết thúc thì ký tự “o” mới bắt đầu được in ra.

Multi Thread trong Lập trình Csharp | MicrosoftTech.Net
Kết quả:
Multi Thread trong Lập trình Csharp | MicrosoftTech.Net
4. Truyền tham số cho Thread

Ví dụ bên dưới hướng dẫn cách truyền tham số cho Thread thông qua cơ chế của ParameterizedThreadStart. Đầu tiên ta tạo 1 mảng 4 Thread và lần lượt khởi tạo thông qua 1 instance của ParameterizedThreadStart. Instance này được tạo thông qua con trỏ hàm gọi tới Hàm static Start(object info); Khi gọi phương thức Start() đi kèm với 1 tham số, và tham số này sẽ truyền vào hàm Start thông qua tham số info kiểu object
Multi Thread trong Lập trình Csharp | MicrosoftTech.Net

hoanglam

Tổng số bài gửi : 6
Join date : 11/09/2012

Về Đầu Trang Go down

Thảo luận Bài 5 - Page 8 Empty Phân biệt khái niệm Luồng với Tiến Trình

Bài gửi  LeMInhTien(I11C) 1/10/2012, 22:10

*Luồng: là tiến trình nhẹ (LWP - Light Weight Process), một đơn vị cơ bản sử sụng CPU. Luồng cũng có thông tin trạng thái như của tiến trình hệ thống (HWP - Heavy Weight Process)
VD: Lớp học là một tiến trình, trong lóp có giáo viên (đơn luồng) và các học viên (đa luồng)
*Tiến trình: là chương trình trong thời gian thực hiện (đặt dưới sự quản lý của hệ điều hành).
VD: Lớp đang học là một tiến trình

LeMInhTien(I11C)
LeMInhTien(I11C)

Tổng số bài gửi : 40
Join date : 07/09/2011

Về Đầu Trang Go down

Thảo luận Bài 5 - Page 8 Empty Nguyên lý tập luồng

Bài gửi  LeMInhTien(I11C) 1/10/2012, 22:12

Tập luồng (Thread Pools):
- Tiến trình cha tạo lập sẵn một tập luồng khi khởi động.
- Các luồng trong tập luồng luôn sẵn sàng chờ công việc.
- Khi tiến trình cha (ví dụ Web Server) nhận thêm một yêu cầu, một luồng được đánh thức và đưa vào vận hành.
- Phục vụ xong, luồng được đưa trả về tập luồng.
- Nếu số yêu cầu lớn hơn số luồng trong tập, tiến trình cha chờ đến khi có luồng được giải phóng.
VD:Trong quân đội luôn có 1 chỉ huy (tiến trình cha) và một đội binh (tập luồng). Các binh sĩ luôn được trang bị vũ trang đầy đủ, tất cả đều đang ngủ nhưng luôn sẵn sàng để chiến đấu (sẵn sàng chờ công việc). Khi có địch đến xâm nhập thì binh sĩ sẽ được điều ra đánh trận, sau khi đánh trận xong thì binh sĩ lại trở về ngủ
LeMInhTien(I11C)
LeMInhTien(I11C)

Tổng số bài gửi : 40
Join date : 07/09/2011

Về Đầu Trang Go down

Thảo luận Bài 5 - Page 8 Empty Re: Thảo luận Bài 5

Bài gửi  Sponsored content


Sponsored content


Về Đầu Trang Go down

Trang 8 trong tổng số 9 trang Previous  1, 2, 3, 4, 5, 6, 7, 8, 9  Next

Về Đầu Trang

- Similar topics

 
Permissions in this forum:
Bạn không có quyền trả lời bài viết