Thảo luận Bài 4

Trang 2 trong tổng số 15 trang Previous  1, 2, 3 ... 8 ... 15  Next

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down

Trình điều phối nhanh & chậm

Bài gửi  TranPhiLong (I11C) on 7/3/2012, 21:56

Trình điều phối nhanh & chậm
_ Điều phối chậm(long –term queue) chọn 1 tiến trình từ job queue đưa sang qua Ready queue(chuyển từ New sang Ready). Scheduler lựa chọn kỹ các tiến trình nhằm phối hợp cân bằng giữa hai loại tiến trình
+ hướng CPU(CPU-BOUND) tính toán nhiều , ít I/O.
+ hướng I/O(I/O BOUND) tính toán ít , nhiều I/O.
Mục đích nhằm cân bằng tải giữa hai tiến trình..
VD: Trong cuộc thi Vietnam Idol, các thi sinh ngồi đợi bên ngoài đang trong Job Queue ( đều phối chậm),
sau đó giám khảo sẽ gọi 3 bạn vào Ready Queue rồi sẽ gọi liên tục 1 trong 3 bạn lên trình bày (điều phối nhanh)

_ Điều phối nhanh (Short-term scheduler): Chọn tiến trình sẽ chiếm CPU để xử lý (chuyển từ trạng thái Ready sang trạng thái Runing).
VD: Các thí sinh đã được gọi lên trình diễn thì đã biết mình phải làm gì

TranPhiLong (I11C)

Tổng số bài gửi : 22
Join date : 26/08/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

LIÊN LẠC GIỮA CÁC TIẾN TRÌNH

Bài gửi  TranPhiLong (I11C) on 7/3/2012, 21:57

LIÊN LẠC GIỮA CÁC TIẾN TRÌNH
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?
Hầu hết các hệ điều hành đưa ra nhiều cơ chế liên lạc khác nhau, mỗi cơ chế có những đặc tính riêng, và thích hợp trong một hoàn cảnh chuyên biệt.

TranPhiLong (I11C)

Tổng số bài gửi : 22
Join date : 26/08/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Khái niệm tiến trình

Bài gửi  hoanggiangI12C on 7/3/2012, 21:58

Tiến trình (process) : 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) .
Tiến trình là 1 chương trình đang hoạt động hay 1 thực thể đang hoạt động
Một tiến trình sẽ trải qua 5 trạng thái sau :
- New : tiến trình vừa được tạo lập.
- Running: các lệnh đang được thực hiện.
- Waiting: Tiến trình chờ 1 sự kiện nào đó phải xảy ra (kết thúc nhập xuất hay tín hiệu từ các tiến trình khác)
- Ready : tiến trình chờ được cấp CPU để xử lý
- Terminated : Tiến trình thực hiện xong công việc


So sánh tiến trình với chương trình:
Bản than tiến trình không là chương trình vì là thực thể thụ động , trong khi tiến trình là thực thể hoạt động với nhiều thôn g tin về trạng thái trong đó có bộ đếm chương trình cho biết vị trí lệnh hiện hành .
- Nhiều tiến trình có thể liên quan đến một chương trình và là các thực thể khác nhau khi vận hành .
- Mỗi tiến trình có thể sinh ra nhiều tiến trình con khác khi vận hành.
- Tiến trình cần các tài nguyên ( CPU , Memory,tâp tin, thiết bị I/O) để hoàn thành công việc .
- Tài nguyên cấp cho tiến trinh ngay từ đầu (khi tiến trình được tạo lập) hoặc trong thời gian vận hành và được thu hồi hết khi tiến trình kết thúc .
- Tiến trình là thực thể hoạt động , chương trình là thực thể thụ động , tiến trình có thông – Điểm khác nhau giữa tiến trình và chương trình : tiến trình có thông tin trạng thái để phản ánh tiến trình đang ở trạng thái nào

hoanggiangI12C

Tổng số bài gửi : 24
Join date : 15/02/2012

Xem lý lịch thành viên

Về Đầu Trang Go down

Trình bày lí do cộng tác giữa các tiến trình

Bài gửi  TranPhiLong (I11C) on 7/3/2012, 21:58

Trình bày lí do cộng tác giữa các tiến trình

Giữa các tiến trình cần sự cộng tác với nhau để đảm bảo các tiến trình được xử lí hoạt động đạt hiệu quả tối đa.
- Chia sẻ thông tin (Information Sharing): Một tiến trình sử dụng thông tin do tiến trình khác cung cấp.
+ Ví dụ thực tế: Trong một nhóm kỹ sư xe máy tham gia nghiên cứu một dự án cải tiến mẫu xe máy mới. Nhóm kỹ thuật viên này chia tài liệu về dự án mới cho mỗi thành viên trong nhóm. Thành viên thứ nhất nghiên cứu về cách thay đổi mẫu mã của xe, thành viên thứ hai nghiên cứu về cách tiết kiệm xăng cho xe. Sau đó các thành viên này tập hợp những thông tin mình nghiên cứu được để hoàn thiện một chiếc xe máy mới.

- Tăng tốc tính toán (Computation Speedup): Các tiến trình cùng làm việc song song trên 1 hoặc nhiều máy để giải quyết bài toán chung.
+ Ví dụ thực tế: Mỗi người kỹ sư sẽ áp dụng những nghiên cứu của mình trên mỗi xe riêng để kiểm thử kết quả nghiên cứu.

- Đảm bảo tính đơn thể (Modularity): Chương trình được chia thành các đơn thể chức năng vận hành trong các tiến trình hoặc luồng khác nhau.
+ Ví dụ thực tế: Trong một dây chuyền lắp ráp một chiếc xe máy, mỗi người kỹ sư sẽ lắp ráp bộ phận do mình phụ trách. Điều này đảm bảo được tính đơn thể của sự cộng tác tiến trình.

- Đảm bảo tính tiện dụng (Convenience): Đảm bảo tính tiện dụng cho người dùng, người dùng sẽ được sử dụng nhiều tính năng mới.
+ Ví dụ thực tế: Sau khi chiếc xe cải tiến, người sử dụng sẽ được hưởng nhiều tính năng mới như: Mẫu mã đẹp, ít hao xăng, xe chạy khỏe hơn, ....
[u]

TranPhiLong (I11C)

Tổng số bài gửi : 22
Join date : 26/08/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Phát biểu bài toán sản xuất và tiêu thụ

Bài gửi  LeThiMaiPhuongI12A on 7/3/2012, 22:07

Phát biểu:
Bài toán sản xuất tiêu thụ được phát biểu chung như sau:
Có một bộ đệm(Buffer) và 2 tiến trình sản xuất Producer và tiến trình tiêu thụ Consumer.Tiến trình Producer lần lượt sản xuất các sản phẩm S1, S2 vào khoang của bộ đệm Buffer.Tiến trình tieu thụ lần lượt lấy các sản phẩm ra khỏi bộ đệm.Công việc của Producer và Consumer cần được đồng bộ hóa tiến trình Consumer không thể lấy sản phẩm ra khi bộ đệm trống, và tiến trình Producer không thể sản xuất khi bộ đệm đầy.
Đồng bộ hóa bằng 2 đèn hiệu semFull và semEmpty.
CODE:
Producer()
{
//Chờ trong khi bộ đệm đầy
WaitForSingleObject(semFull, INFINITE);
// Sản xuất sản phẩm và đưa vào Buffer
ReleaseSemaphore(semEmpty);
//Bộ đệm đã có sản phẩm
}


CODE:
Consumer()
{
//Chờ đến khi có sản phẩm
WaitForSingleObject(semEmpty, INFINITE);
// Tiêu thụ sản phẩm
ReleaseSemaphore(semFull);
//Bộ đệm đã có chỗ trống
}


Hướng I/O và Hướng CPU
Hướng CPU: scan virus, scan registry, defragment hardisk....
( đại khái là những công việc đòi hỏi CPU phải tính toán nhiều, sử dụng nhiều bộ nhớ ( RAM ), và khi nó làm việc thì ta ít chú ý đến nó - vì nó " im hơi lặng tiếng" quá mà
Hướng I/O:Nghe nhạc, xem phim, chơi game....

Phát biểu bài toán sản xuất – tiêu thụ để minh họa 1 hệ thống có nhiều tiến trình cộng tác song song đồnh hành cùng chia sẻ tài nguyên.
* Phát biểu bài toán Sản xuất-Tiêu thụ.
- Giả sử có bộ nhớ đệm (buffer) bao gồm nhiều khoang chứa (Items) được tiến trình Producer lần lượt đưa các sản phẩm S1, S2,... vào.
- Tiến trình Consumer lần lượt lấy sản phẩm ra theo đúng thứ tự.
- Công việc của Producer phải đồng bộ với Consumer: Không được đưa sản phẩm vào khi buffer đầy, không được lấy ra khi chưa có sản phẩm.

Tiến trình sản xuất (PRODUCER):
item nextProduced;
while (1)
{
while(((in+1)%BUFFER_SIZE)==out); //quẩn tại đây khi buffer đầy.
buffer[in] = nextProduced;
in = (in+1)%BUFFER_SIZE;
}
Tiến trình tiêu thụ (CONSUMER):
item nextConsumed;
while (1)
{
while(in==out); //quẩn khi buffer rỗng
nextConsumed = buffer[out];
out = (out+1)%BUFFER_SIZE;
}

LeThiMaiPhuongI12A

Tổng số bài gửi : 12
Join date : 15/02/2012
Age : 27
Đến từ : Long An

Xem lý lịch thành viên

Về Đầu Trang Go down

Câu 1: Thế nào là tiến trình? Phân biệt tiến trình với chương trình.

Bài gửi  NguyenHoangThangI12A on 7/3/2012, 22:08

Tiến trình là gi?
Theo định nghĩa trực quan và đơn giản nhất, tiến trình là một chương trình đang trong quá trình thực hiện. Đa số máy tính hiện nay cho phép thực hiện nhiều chương trình khác nhau cùng một lúc.
Ví dụ: ta có thế vửa chạy trình duyệt vừa soạn thảo văn bản và nhận thư điện tử.
Có hai đặc điểm để phân biệt tiến trình với chương trình.
- Thứ nhất, chương trình là một thực thể tĩnh, không thay đổi theo thời gian, trong khi tiến trình là thực thể động. Chương trình là tập hợp các lệnh và dữ liệu chứa trong file gọi là file chương trình hoặc file thực hiện được.
Ví dụ: file có đuôi .exe trong windows
Các lệnh này không thay đổi theo thời gian. Trong khi đó, tiến trình là thực thể động bao gồm các lệnh, dữ liệu, ngăn xếp, con trỏ lệnh chỉ tới lệnh đang thực hiện. Hầu hết các thành phần này đều thay đổi trong quá trình tiến trình tồn tại.
Ví dụ: con trỏ lệnh luôn thay đổi tùy thuộc lệnh thực hiện là lệnh nào.
- Thứ hai, chương trình không sở hữu tài nguyện cụ thể, trong khi mỗi tiến trình được cấp một số tài nguyên như bộ nhớ để chứa tiến trình, các cổng và thiết bị vào/ra, các file mở, thời gian CPU thực hiện lệnh. Như vậy, tiến trình là một khái niệm liên quan chặt chẽ tới khái niệm máy ảo. Có thể coi mỗi tiến trình được cấp một máy tính ảo và thực hiện trên máy tính ảo đó.
Tiến trình được sinh ra khi chương trình được tải vào bộ nhớ để thực hiện. Trong hệ thống có hai loại tiến trình. Loại thứ nhất là tiến trình của người dùng hay tiến trình ứng dụng, được sinh ra khi người dùng chạy chương trình ứng dụng.
Ví dụ: bằng cách click đúp chuột vào biểu tượng chương trình nhú windows. Loại thứ hai là tiến trình hệ thống, đây là tiến trình sinh ra từ những thành phần của hệ điều hành thực hiện các công việc khac nhau của hệ thống. Có thể xem tiến trình hiện thời của windows bằng cách gọi "Task manager" và vào Tab "process".
avatar
NguyenHoangThangI12A

Tổng số bài gửi : 34
Join date : 15/02/2012

Xem lý lịch thành viên

Về Đầu Trang Go down

TRÌNH ĐIỀU PHỐI CHẬM VÀ TRÌNH ĐIỀU PHỐI NHANH

Bài gửi  hoanggiangI12C on 7/3/2012, 22:12



-Điều phối chậm (long–term queue) : chọn 1 tiến trình từ job queue đưa sang qua Ready queue (chuyển từ New sang Ready). Scheduler lựa chọn kỹ các tiến trình nhằm phối hợp cân bằng giữa hai loại tiến trình . Mục đích nhằm cân bằng tải giữa hai tiến trình.

+ Hướng CPU(CPU-BOUND) tính toán nhiều , ít I/O.
+ Hướng I/O(I/O BOUND) tính toán ít , nhiều I/O.

Mục đích của cân bằng tải trong điều phối chậm:
- Nếu hướng CPU nhiều thì CPU luôn trong trạng thái bận, dẫn đến việc nhiều tiến trình buộc phải chờ.
- Nếu hướng I/O nhiều thì CPU luôn rỗi -> lãng phí CPU.
Vd: Trong công ty có 1 chiếc ô tô, có nhiều người có khuynh hướng sử dụng ô tô để phục vụ công viêc ở xa, nhưng cũng có nhiều người không sử dụng ô tô mà ở lại công ty để nghiên cứu. Vậy nên công ty phải cách để cân bằng giữa hướng ô tô và hướng nghiên cứu.

-Điều phối nhanh (Short-term scheduler) : Chọn tiến trình sẽ chiếm CPU để xử lý (chuyển từ trạng thái Ready sang trạng thái Runing).

Vd: trong một lớp học người giảng viên gọi nhiều bạn lên kiểm tra bài (điều phối chậm) đang trong job queue , ví dụ là 7 bạn được chọn để đưa vào Ready queue sau đó mới gọi liên tục 1 trong 7 bạn này lên bảng (trình điều phối nhanh) .
Vd: các học sinh đã được chọn để lên bảng thì họ đã biết công việc của mình là phải làm gì .

Nhu cầu xử lý đồng hành .
Có 2 động lực chính khiến cho các hệ điều hành hiện đại thường hỗ trợ môi trường đa nhiệm (multitask) trong đó chấp nhận nhiều tác vụ thực hiện đồng thời trên cùng một máy tính :
- Tăng hiệu suất sử dụng CPU
Phần lớn các công việc khi thi hành đều trải qua nhiều chu kỳ xử lý (sử dụng CPU) và chu kỳ nhập xuất (sử dụng các thiết bị nhập xuất) xen kẽ như sau :

CPU IO CPU IO CPU

Nếu chỉ có 1 tiến trình duy nhất trong hệ thống, thì vào các chu kỳ IO của công việc, CPU sẽ hoàn toàn nhàn rỗi. Ý tưởng tăng cường số lượng công việc trong hệ thống là để tận dụng CPU : nếu công việc 1 xử lý IO, thì có thể sử dụng CPU để thực hiện công việc 2...

Khi đó CPU, bộ nhớ và các tài nguyên khác sẽ được tận dụng tối đa, nâng cao hiệu suất sử dụng tài nguyên.
- Tăng tốc độ xử lý
Trong các trường hợp đó, cần có một mô hình xử lý đồng hành thích hợp. Trên máy tính có cấu hình nhiều CPU, hỗ trợ xử lý song song (multiprocessing) thật sự, điều này sẽ giúp tăng hiệu quả thi hành của hệt thống đáng kể.


hoanggiangI12C

Tổng số bài gửi : 24
Join date : 15/02/2012

Xem lý lịch thành viên

Về Đầu Trang Go down

Câu 4: Trình bày những lý do công tác giữa các tiến trình

Bài gửi  NguyenHoangThangI12A on 7/3/2012, 22:14

- Chia sẻ thông tin (Information Sharing): Một tiến trình sử dụng thông tin do tiến trình khác cung cấp.
Ví dụ: các bạn trong lớp chia nhóm học. Nhóm một nghiên cứu chương 1, nhóm hai nghiên cứu chương 2. Sau đó, hai nhóm trao đổi thông tin cho nhau. Kết quả hai nhóm mau chóng tìm hiểu hết hai chương.
- Tăng tốc tính toán (Computation Speedup): Các tiến trình cùng làm việc song song trên 1 hoặc nhiều máy để giải quyết bài toán chung.
- Đảm bảo tính đơn thể (Modularity): Chương trình được chia thành các đơn thể chức năng vận hành trong các tiến trình hoặc luồng khác nhau. Ví dụ: mỗi bạn học một bài, đảm bảo tính đơn thể.
- Đảm bảo tính tiện dụng (Convenience): Người dùng có nhu cầu làm nhiều việc một lúc: Soạn thảo, in ấn, duyệt Web, lấy file về, biên dịch chương trình, kiểm tra chính tả,...
avatar
NguyenHoangThangI12A

Tổng số bài gửi : 34
Join date : 15/02/2012

Xem lý lịch thành viên

Về Đầu Trang Go down

Phát biểu bài toán sản xuất và tiêu thụ

Bài gửi  LeThiMaiPhuongI12A on 7/3/2012, 22:16

Phát biểu:
Bài toán sản xuất tiêu thụ được phát biểu chung như sau:
Có một bộ đệm(Buffer) và 2 tiến trình sản xuất Producer và tiến trình tiêu thụ Consumer.Tiến trình Producer lần lượt sản xuất các sản phẩm S1, S2 vào khoang của bộ đệm Buffer.Tiến trình tieu thụ lần lượt lấy các sản phẩm ra khỏi bộ đệm.Công việc của Producer và Consumer cần được đồng bộ hóa tiến trình Consumer không thể lấy sản phẩm ra khi bộ đệm trống, và tiến trình Producer không thể sản xuất khi bộ đệm đầy.
Đồng bộ hóa bằng 2 đèn hiệu semFull và semEmpty.
CODE:
Producer()
{
//Chờ trong khi bộ đệm đầy
WaitForSingleObject(semFull, INFINITE);
// Sản xuất sản phẩm và đưa vào Buffer
ReleaseSemaphore(semEmpty);
//Bộ đệm đã có sản phẩm
}


CODE:
Consumer()
{
//Chờ đến khi có sản phẩm
WaitForSingleObject(semEmpty, INFINITE);
// Tiêu thụ sản phẩm
ReleaseSemaphore(semFull);
//Bộ đệm đã có chỗ trống
}


LeThiMaiPhuongI12A

Tổng số bài gửi : 12
Join date : 15/02/2012
Age : 27
Đến từ : Long An

Xem lý lịch thành viên

Về Đầu Trang Go down

Khái niệm và chức năng của PCB

Bài gửi  NguyenTriVienI12A on 7/3/2012, 22:18

Một khối điều khiển tiến trình (Process Control Block - PCB) là một cấu trúc dữ liệu trong nhân hệ điều hành chứa thông tin cần thiết để quản lý một tiến trình nhất định.
PCB là một cấu trúc dữ liệu chứa những thông tin quan trọng về process và có thể khác nhau trong các hệ thống khác nhau bao gồm những thông tin sau:
  • Định danh của tiến trình (process identifier hay PID)

  • Giá trị các thanh ghi của tiến trình, trong đó đáng chú ý là con trỏ chương trình và con trỏ stack

  • Không gian địa chỉ của tiến trình

  • Độ ưu tiên (trong đó tiến trình có giá trị cao hơn được ưu tiên trước, ví dụ nice trong các hệ điều hành Unix)

  • Thông tin kế toán tiến trình, ví dụ như thời điểm thực thi gần nhất, bao nhiêu thời gian CPU đã sử dụng...

  • Con trỏ tới PCB tiếp theo, nghĩa là con trỏ tới tiến trình tiếp theo được chạy

  • Thông tin V/R(Virtual reality) (ví dụ các thiết bị V/R được cấp phát cho tiến trình, danh sách các tệp đang mở...)

Khi chuyển ngữ cảnh, tiến trình đang thực hiện bị dừng lại và một tiến trình khác có cơ hội thực hiện. Nhân dừng việc thực hiện của tiến trình, sao chép các giá trị trong thanh ghi vào PCB và cập nhật thanh ghi với các giá trị của PCB của tiến trình mới.[list][*]
Vị trí của PCB
Vì PCB chứa những thông tin tối quan trọng đối với tiến trình, nó phải được giữ trong một vùng bộ nhớ được bảo vệ. Trong một số hệ điều hành,, PCB được đặt ở đầu của ngăn xếp nhân của tiến trình.
PCB là đối tượng quan trọng, nhờ nó HĐH có thể có được toàn bộ thông tin cơ bản nhất về một process.


Được sửa bởi NguyenTriVienI12A ngày 7/3/2012, 22:28; sửa lần 1.

NguyenTriVienI12A

Tổng số bài gửi : 7
Join date : 17/02/2012
Đến từ : Tuy Hòa - Phú Yên

Xem lý lịch thành viên

Về Đầu Trang Go down

So sánh Job Queue và Ready Queue

Bài gửi  vothingocthuy87(I11C) on 7/3/2012, 22:21

Job Queue: là hàng chờ công việc, chứa các tiến trình chờ được vận hành.
Ready Queue: là hàng chờ sẵn sàng, chứa các tiến trình chờ được cấp CPU.
Giống nhau:
- Đều là các hàng chờ chứa các tiến trình cần vận hành.
- Đều cần thuật giải điều phối để sắp xếp các tiến trình.
Khác nhau:
- Dùng giải thuật điều phối chậm(Long - term Scheduler) để đưa các tiến trình từ Job Queue vào Ready Queue.
- Dùng giải thuật điều phối nhanh(Short - term Scheduler) chọn các tiến trình trong Ready Queue để cấp CPU.
Job Queue : Có nhiều thời gian xử lý hơn.
Ready Queue : Có ít thời gian so với Job Queue.

vothingocthuy87(I11C)

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

Xem lý lịch thành viên

Về Đầu Trang Go down

Phân tích khái niệm Chuyển ngữ cảnh

Bài gửi  letanthanh18(I12A) on 7/3/2012, 22:21

-Chuyển ngữ cảnh là chức năng của Dispatcher khi cần chuyển CPU từ tiến trình P0 này sang tiến trình P1 khác:
+Ghi môi trường và trạng thái làm việc của P0 vào PCB0
+Nạp môi trường và trạng thái làm việc của tiến trình P1 từ PCB1
+Thời gian chuyển ngữ cảnh khá lớn ( dùng công nghệ đa luồng để giảm thời gian chuyển ngữ cảnh)
***Phân tích khái niệm Chuyển ngữ cảnh:
-chuyển môi trường làm việc cho tiến trình
-Dispatcher chuyển CPU từ tiến trình hiện hành P0 sang tiến trình P1 nào đó và tiến trình P1 sẽ được cấp CPU
-CPU sẽ lưu lại ngữ cảnh ( môi trường và trạng thái làm việc ) của tiến trình P0 vào trong RAM dành cho tiến trình P0 ( PCB0 )
++PCB ( Process control block) sao lưu ngữ cảnh và môi trường làm việc của tiến trình
-Dispatcher sẽ khôi phục lại ngữ cảnh và môi trường làm việc từ khối PCB cho P0.


Được sửa bởi letanthanh18(I12A) ngày 7/3/2012, 23:09; sửa lần 1.

letanthanh18(I12A)

Tổng số bài gửi : 14
Join date : 22/02/2012

Xem lý lịch thành viên

Về Đầu Trang Go down

Câu 3: điều phối chậm, điều phối nhanh:

Bài gửi  NguyenHoangThangI12A on 7/3/2012, 22:27

+ Điều phối chậm (Long-term scheduler (or job scheduler)) :
- Chọn process nào sẽ được đưa vào ready queue (từ New chuyển sang Ready)
- Kiểm soát Độ đa chương
- Do có nhiều thời gian (tới vài phút), loại scheduler này có điều kiện để lựa chọn kỹ càng nhằm phối hợp cân đối 2 loại tiến trình
+ Hướng CPU: tính toán nhiều, ít I/O.


Ví dụ: Công ty có một chiếc ô tô (CPU), nhiều nhân viên cần đi công tác (nhiều tiến trình) phải sử dụng ôtô. Do đó, ôtô (CPU) phải bận (phục vụ) cho nhiều người (nhiều tiến trình).


+ Hướng I/O: tính toán ít, nhiều I/O


-Ví dụ: Công ty có một chiếc ô tô (CPU), các nhân viên trong công ty chỉ ngồi nghiên cứu (I/O), không sử dụng đến ôtô. Vậy quá lãng phí ôtô (CPU)
-Mục đích cân bằng tải

Điều phối nhanh (Short-term scheduler (or CPU scheduler)) :
- Còn gọi là Điều phối CPU.
- Chọn tiến trình từ Ready Queue để cấp CPU.


- Có tần suất công việc cao. Thường cứ 100 ms lại tốn 10 ms để xác định tiến trình kế tiếp, như vậy 10/(100+10)=9% thời gian CPU được dùng để điều phối công việc.


Được sửa bởi NguyenHoangThangI12A ngày 7/3/2012, 22:28; sửa lần 1.
avatar
NguyenHoangThangI12A

Tổng số bài gửi : 34
Join date : 15/02/2012

Xem lý lịch thành viên

Về Đầu Trang Go down

CHUYỂN NGỮ CẢNH

Bài gửi  trinhvanminh_11h1010077 on 7/3/2012, 22:28

Chuyển CPU tới một quá trình khác yêu cầu lưu trạng thái của quá trình cũ và nạp trạng thái được lưu cho quá trình mới. Tác vụ này được xem như chuyển ngữ cảnh (context switch). Ngữ cảnh của quá trình được hiện diện trong PCB của quá trình; Nó chứa giá trị các thanh ghi, trạng thái quá trình (hình III.1) và thông tin quản lý bộ nhớ. Khi chuyển ngữ cảnh ngữ cảnh xảy ra, nhân lưu ngữ cảnh của quá trình cũ trong PCB của nó và nạp ngữ cảnh được lưu của quá trình mới được định thời để chạy. Thời gian chuyển ngữ cảnh là chi phí thuần vì hệ thống không thực hiện công việc có ích trong khi chuyển. Tốc độ của nó khác từ máy này tới máy khác phụ thuộc vào tốc độ bộ nhớ, số lượng thanh ghi phải được chép và sự tồn tại của các chỉ thị đặc biệt (như chỉ thị để nạp và lưu tất cả thanh ghi). Điển hình dãy tốc độ từ 1 tới 1000 mili giây.

Những lần chuyển đổi ngữ cảnh phụ thuộc nhiều vào hỗ trợ phần cứng. Thí dụ, vài bộ xử lý (như Sun UltraSPARC) cung cấp nhiều tập thanh ghi. Một chuyển ngữ cảnh đơn giản chứa chuyển đổi con trỏ tới tập thanh ghi hiện hành. Dĩ nhiên, nếu quá trình hoạt động vượt quá tập thanh ghi thì hệ thống sắp xếp lại dữ liệu thanh ghi tới và từ bộ nhớ. Cũng vì thế mà hệ điều hành phức tạp hơn và nhiều công việc được làm hơn trong khi chuyển ngữ cảnh. Kỹ thuật quản lý bộ nhớ nâng cao có thể yêu cầu dữ liệu bổ sung để được chuyển với mỗi ngữ cảnh. Thí dụ, không gian địa chỉ của quá trình hiện hành phải được lưu khi không gian của tác vụ kế tiếp được chuẩn bị dùng. Không gian địa chỉ được lưu như thế nào và lượng công việc được yêu cầu để lưu nó phụ thuộc vào phương pháp quản lý bộ nhớ của hệ điều hành. Chuyển ngữ cảnh có thể dẫn đến thắt cổ chai năng lực thực hiện vì thế các lập trình viên đang sử dụng các cấu trúc mới để tránh nó bất cứ khi nào có thể.
avatar
trinhvanminh_11h1010077

Tổng số bài gửi : 90
Join date : 15/02/2012
Age : 32
Đến từ : tphcm

Xem lý lịch thành viên

Về Đầu Trang Go down

Thế nào là khối kiểm soát tiến trình (PCB)

Bài gửi  vothingocthuy87(I11C) on 7/3/2012, 22:28

PCB là một cấu trúc dữ liệu được hệ điều hành duy trì cho mỗi tiến trình dùng để chứa các thông tin cần thiết về tiến trình đó. PCB chứa " Bản sao công việc của tiến trình".

vothingocthuy87(I11C)

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

Xem lý lịch thành viên

Về Đầu Trang Go down

Phân biệt các loại tiến trình điều phối

Bài gửi  LeQuocKhanh-11H1010059 on 7/3/2012, 22:30

Điều phối chậm(long-term scheduler(or job scheduler)):
+ Chọn process nào sẽ được đưa vào queue(từ New chuyển sang Ready).
+ Kiểm soát độ đa chương.
+ Do có nhiều thời gian (tới vài phút),loai scheduler này có điều kiện để lựa chọn kỹ càng nhằm phối hơp cân đối 2 loại tiến trình
-- Hướng CPU: tính toán nhiều, ít I/O
VD: một đĩa thức ăn nhỏ trên bàn cho 5 người đang đói dùng chắc chắn sẽ không đủ
-- Hướng I/O: tính toán ít, nhiều I/O
VD: 5 đĩa thức ăn trên một bàn cho 2 người đang no sẽ không hết gây lãng phí thức ăn
+ Mục đích cân bằng tải
Điều phối nhanh (short-term scheduler(or CPU scheduler)):
+ Còn gọi là điều phối CPU.
+ Chọn tiến trình từ Ready queue để cấp CPU.
+ Có tần suất công việc cao. Thường cứ 100 ms lại tốn 10 ms để xác định tiến trình kế tiếp, như vậy 10/(100+10) = 9% thời gian CPU được dùng để điều phối công việc.
Điều phối vừa (Medium-term scheduler)
+ Là short-term scheduler nhưng có thêm chức năng rút các tiến trình khỏi bộ nhớ làm giảm độ đa chương, sau đó đưa chúng vào bộ nhớ lúc thời điểm thích hợp để tiếp tục thực hiện từ vị trí bị tạm ngưng trước đó.
+ Nhờ cách điều phối này các tiến trình trong Ready queue có tính tối ưu hơn.
VD: Phòng thực hành nhỏ nhưng nhiều bạn đi học thực hành(nhiều tiến trình).Thầy(HĐH) sẽ yêu cầu một số bạn đi ra (rút tiến trình ra khỏi bộ nhớ). Sau khi nhóm trong phòng học xong, thầy sẽ cho các bạn bên ngoài vào phòng học(đưa tiến trình vào bộ nhớ vào thời điểm thích hợp).

LeQuocKhanh-11H1010059

Tổng số bài gửi : 59
Join date : 16/02/2012
Age : 29
Đến từ : HCM

Xem lý lịch thành viên

Về Đầu Trang Go down

Trình điều phối nhanh và chậm

Bài gửi  LeThanhTung (I11C) on 7/3/2012, 22:37

- Điều phối chậm(long –term queue) chọn 1 tiến trình từ job queue đưa sang qua Ready queue(chuyển từ New sang Ready). Scheduler lựa chọn kỹ các tiến trình nhằm phối hợp cân bằng giữa hai loại tiến trình
+ hướng CPU(CPU-BOUND) tính toán nhiều , ít I/O.
+ hướng I/O(I/O BOUND) tính toán ít , nhiều I/O.
Mục đích nhằm cân bằng tải giữa hai tiến trình..
- Điều phối nhanh (Short-term scheduler): Chọn tiến trình sẽ chiếm CPU để xử lý (chuyển từ trạng thái Ready sang trạng thái Runing).

LeThanhTung (I11C)

Tổng số bài gửi : 50
Join date : 28/08/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Phát biểu bài toán sản xuất – tiêu thụ để minh họa 1 hệ thống có nhiều tiến trình cộng tác song song đồnh hành cùng chia sẻ tài nguyên.

Bài gửi  BuiPhamAnBinh(I12A) on 7/3/2012, 22:37

Có 2 loại tiến trình trong bài toán
thứ nhất là tiến trình nhà sản xuất(buffer)
tiến trình tạo ra sản phẩm
thứ hai là tiến trỉnh nhà tiêu thụ(consumer)
sử dụng sản phẩm
với cách thức hoạt động như sau: với sản phấm vào trước thì được lấy ra tiêu thụ trước , sản phẩm 2 vào sau thì được lấy ra tiêu thụ sau, nếu trong công việc của Producer phải đồng bộ với Consumer: Không được đưa sản phẩm vào khi Buffer đầy, Không được lấy ra khi chưa có


[img] [/img]

Tiến trình sản xuất (PRODUCER):
item nextProduced;
while (1)
{
while(((in+1)%BUFFER_SIZE)==out); //quẩn tại đây khi buffer đầy.
buffer[in] = nextProduced;
in = (in+1)%BUFFER_SIZE;
}
Tiến trình tiêu thụ (CONSUMER):
item nextConsumed;
while (1)
{
while(in==out); //quẩn khi buffer rỗng
nextConsumed = buffer[out];
out = (out+1)%BUFFER_SIZE;
}

BuiPhamAnBinh(I12A)

Tổng số bài gửi : 20
Join date : 16/02/2012
Age : 28

Xem lý lịch thành viên

Về Đầu Trang Go down

CÁC ĐẶC ĐIỂM CỦA TIẾN TRÌNH

Bài gửi  trinhvanminh_11h1010077 on 7/3/2012, 22:38

Điều phối hoạt động của các tiến trình là một vấn đề rất phức tạp, đòi hỏi hệ điều hành khi giải quyết phải xem xét nhiều yếu tố khác nhau để có thể đạt được những mục tiêu đề ra. Một số đặc tính của tiến trình cần được quan tâm như tiêu chuẩn điều phối :
a) Tính hướng xuất / nhập của tiến trình ( I/O-boundedness):
Khi một tiến trình nhận được CPU, chủ yếu nó chỉ sử dụng CPU đến khi phát sinh một yêu cầu nhập xuất ? Hoạt động của các tiến trình như thế thường bao gồm nhiều lượt sử dụng CPU , mỗi lượt trong một thời gian khá ngắn.
b) Tính hướng xử lý của tiến trình ( CPU-boundedness):
Khi một tiến trình nhận được CPU, nó có khuynh hướng sử dụng CPU đến khi hết thời gian dành cho nó ? Hoạt động của các tiến trình như thế thường bao gồm một số ít lượt sử dụng CPU , nhưng mỗi lượt trong một thời gian đủ dài.
c) Tiến trình tương tác hay xử lý theo lô :
Người sử dụng theo kiểu tương tác thường yêu cầu được hồi đáp tức thời đối với các yêu cầu của họ, trong khi các tiến trình của tác vụ được xử lý theo lô nói chung có thể trì hoãn trong một thời gian chấp nhận được.
d) Độ ưu tiên của tiến trình :
Các tiến trình có thể được phân cấp theo một số tiêu chuẩn đánh giá nào đó, một cách hợp lý, các tiến trình quan trọng hơn ( có độ ưu tiên cao hơn) cần được ưu tiên hơn.
e) Thời gian đã sử dụng CPU của tiến trình :
Một số quan điểm ưu tiên chọn những tiến trình đã sử dụng CPU nhiều thời gian nhất vì hy vọng chúng sẽ cần ít thời gian nhất để hoàn tất và rời khỏi hệ thống . Tuy nhiên cũng có quan điểm cho rằng các tiến trình nhận được CPU trong ít thời gian là những tiến trình đã phải chờ lâu nhất, do vậy ưu tiên chọn chúng.
f) Thời gian còn lại tiến trình cần để hoàn tất :
Có thể giảm thiểu thời gian chờ đợi trung bình của các tiến trình bằng cách cho các tiến trình cần ít thời gian nhất để hoàn tất được thực hiện trước. Tuy nhiên đáng tiếc là rất hiếm khi biết được tiến trình cần bao nhiêu thời gian nữa để kết thúc xử lý. scratch
avatar
trinhvanminh_11h1010077

Tổng số bài gửi : 90
Join date : 15/02/2012
Age : 32
Đến từ : tphcm

Xem lý lịch thành viên

Về Đầu Trang Go down

Phân biệt điều phối chậm với nhanh

Bài gửi  LeThanhTung (I11C) on 7/3/2012, 22:40

+ Điều phối chậm:
- Chọn tiến trình từ Job Queue để đưa vào Ready Queue.
- Kiểm soát độ đa chương (Số tiến trình trong bộ nhớ).
- Do có nhiều thời gian (vài phút), loại Scheduler này có điều kiện để lựa chọn kỹ các tiến trình cần nhằm phối hợp cân đối hai loại tiến trình:
Hướng CPU (CPU-Bound): Tính toán nhiều, Ít I/O.
Hướng I/O(I/O-Bound): Tính toán ít, Nhiều I/O.
- Mục đích: Cân bằng tải cho toàn hệ thống.
+ Điều phối nhanh:
- Còn gọi là Điều phối CPU.
- Chọn tiến trình từ Ready Queue để cấp CPU (đưa sang trạng thái Running).
- Có tần suất công việc cao. Thường cứ 100ms lại tốn 10ms để xác định tiến trình kế tiếp cần chuyển sang Running.

LeThanhTung (I11C)

Tổng số bài gửi : 50
Join date : 28/08/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Thảo luận Bài 4

Bài gửi  tranvanthien27(I12C) on 7/3/2012, 22:50

NguyenXuanTri28 đã viết:Job Queue: là hàng chờ công việc, chứa các tiến trình chờ được vận hành.
Ready Queue: là hàng chờ sẵn sàng, chứa các tiến trình chờ được cấp CPU.
Giống nhau:- Đều là các hàng chờ chứa các tiến trình cần vận hành.
- Đều cần thuật giải điều phối để sắp xếp các tiến trình.
Khác nhau:- Đều là các hàng chờ chứa các tiến trình cần vận hành.
- Đều cần thuật giải điều phối để sắp xếp các tiến trình.
Khác nhau:
- Dùng giải thuật điều phối chậm(Long - term Scheduler) để đưa các tiến trình từ Job Queue vào Ready Queue.
- Dùng giải thuật điều phối nhanh(Short - term Scheduler) chọn các tiến trình trong Ready Queue để cấp CPU.
VD: thầy giáo gọi tên 5 bạn trong lớp để lên danh sách chuẩn bị lên bảng làm bài tập ( điều phối chậm, 5 bạn được đưa từ job Queue ( danh sách lớp ) vào Read Queue ( danh sách làm bài ). Sau đó thầy gọi từng bạn trong danh sách đó lên bảng làm bài ( điều phối nhanh )

tranvanthien27(I12C)

Tổng số bài gửi : 62
Join date : 15/02/2012
Age : 27
Đến từ : Tuy Hòa - Phú Yên

Xem lý lịch thành viên

Về Đầu Trang Go down

Process control Block (PCB)- khối điều khiển tiến trình

Bài gửi  LeLamThang (113A) on 7/3/2012, 22:55

vothingocthuy87(I11C) đã viết:PCB là một cấu trúc dữ liệu được hệ điều hành duy trì cho mỗi tiến trình dùng để chứa các thông tin cần thiết về tiến trình đó. PCB chứa " Bản sao công việc của tiến trình".
Cụ thể hơn :

Đại diện cho một process trong HĐH là khối điều khiển process (PCB). PCB là một cấu trúc dữ liệu chứa những thông tin quan trọng về process và có thể khác nhau trong các hệ thống khác nhau, trong đó thường có:
• Trạng thái hiện tại của process
• ID (Identifier) duy nhất cho process
• Độ ưu tiên (priority) của process
• Thông tin về bộ nhớ
• Thong tin về các process đang sử dụng
• Vùng để cho các thanh ghi
PCB là đối tượng quan trọng, nhờ nó HĐH có thể có được toàn bộ thông tin cơ bản nhất về một process. Khi HĐH chuyển (switch) BXL từ đang phục vụ process này sang phục vụ process khác, nó dùng vùng cho các thanh ghi trong PCB lưu thông tin giá trị các thanh ghi của hệ thống để có thể tiếp tục thực hiện process mỗi khi process đến lược được sử dụng BXL.
Tóm lại, PCB là đối tượng chính đại diện cho process đối với HĐH. Vì HĐH phải có khả năng thực hiện các thao tác với các PCB khác nhau một cách nhanh chóng, trong nhiều hệ thống có những thanh ghi đặc biệt luôn chỉ tới PCB của running process. Và cũng có những lệnh cài đặt ngay trong phần cứng để đảm bảo nhanh chóng ghi thông tin trạng thái vào PCB và tiếp theo là nhanh chóng đọc các thông tin đó.

LeLamThang (113A)

Tổng số bài gửi : 35
Join date : 15/02/2012

Xem lý lịch thành viên

Về Đầu Trang Go down

Lọi ích của công nghệ đa luồng.

Bài gửi  DoanNgocDan(I12A) on 7/3/2012, 22:59

  • Khả năng đáp ứng (Responsiveness) tốt hơn, khi 1 luồng bị treo hoặc quá bận thì luồng khác vẫn làm việc bình thường (Luồng chính của người dùng vẫn tương tác tốt với người dùng trong khi vẫn lấy được dữ liệu về).

Ví dụ: Các cô ở tổng đài 188 là một ví dụ minh họa của đa luồng. Khi khách hàng điện thoại đến 188 hỏi, nếu chỉ có 1 cô phải trực 10 máy điện thoại thì sẽ không trả lời tốt khi có khoảng 3 cuộc điện thoại trở lên, nếu chỉ có 1 cuộc điện thoại gọi đến thì cô sẽ trả lời tố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 Như vậy 1 cô trực tổng đài phục vụ khách hàng khi gọi đến gọi là đơn luồng, nhiều cô trực tổng đài gọi là đa luồ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 cùng một đị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à có ti vi, tủ lạnh, điều hòa,…. Mọi người trong nhà có thể dùng chung các vật dụng đó.
  • 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 thì ghi, ai cần thì chụp 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.

  • Lập trình đa luồng dễ hơn lập trình đa tiến trình (tạo mới luồng dễ hơn, chia sẻ tài nguyên dễ hơn.)
avatar
DoanNgocDan(I12A)

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

Xem lý lịch thành viên

Về Đầu Trang Go down

Tại sao phải cộng tác giữa các tiến trình????

Bài gửi  TranThiMyKhanh(I12A) on 7/3/2012, 23:02

Chia sẻ thông tin (Information Sharing): Một tiến trình sử dụng thông tin do tiến trình khác cung cấp.
Tăng tốc tính toán (Computation Speedup): Các tiến trình cùng làm việc song song trên1 hoặc nhiều máy để giải quyết bài toán chung.
Đảm bảo tính đơn thể (Modularity): Chương trình được chia thành các đơn thể chức năng vận hành trong các tiến trình hoặc luồng khác nhau.
Đảm bảo tính tiện dụng (Convenience): Người dùng có nhu cầu làm nhiều việc một lúc: Soạn thảo, In ấn, Duyệt Web, Lấy file về, Biên dịch chương trình, Kiểm tra chính tả....
avatar
TranThiMyKhanh(I12A)

Tổng số bài gửi : 24
Join date : 02/03/2012
Age : 27

Xem lý lịch thành viên

Về Đầu Trang Go down

Ví Dụ về Đa Luồng Và Đa Tiến Trình:

Bài gửi  DoanNgocDan(I12A) on 7/3/2012, 23:04

Ví Dụ Về Đa luồng:Trên 1 con đường có thể phân ra nhìu luồng xe khác nhau Nhưng các luồng dùng chung một tài nguyên là Mặt Đường
Ví Dụ về Đa Tiến Trình: Mỗi con đường là 1 tiến trính: 2 con đường không thể dùng chung một mặt đường vì nếu thế thì 2 thành 1
  • Lập trình đa luồng dễ hơn lập trình đa tiến trình giống như xây 1 con đường phân ra nhìu luồng xe chạy dễ hơn là xây nhìu con đường

Ví Dụ Về Đa luồng: Trong một ngôi nhà phân ra 2 luồng phòng khác nhau, có chung trần nhà, không tách biệt lập với nhau. Nhưng 2 luồng phòng này dùng chung một tài nguyên là máy điều hòa.
Ví Dụ về Đa Tiến Trình: Mỗi phòng trong nhà là 1 tiến trình, 2 phòng tách biệt nhau, 2 phòng không thể dùng chung một máy điều hòa.
  • Từ đó ta thấy lập trình đa luồng dễ hơn lập trinh đa tiến trình giống như một máy điều hòa chia ra nhìu luồng phòng tiết kiệm hơn là mỗi phòng 1 máy điều hòa.
avatar
DoanNgocDan(I12A)

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

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Thảo luận Bài 4

Bài gửi  Sponsored content


Sponsored content


Về Đầu Trang Go down

Trang 2 trong tổng số 15 trang Previous  1, 2, 3 ... 8 ... 15  Next

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang


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