Thảo luận Bài 4

Trang 1 trong tổng số 13 trang 1, 2, 3 ... 11, 12, 13  Next

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

Thảo luận Bài 4

Bài gửi  Admin on 1/8/2011, 16:02

Thảo luận những vấn đề liên quan đến Bài 4

Admin
Admin

Tổng số bài gửi : 294
Join date : 18/02/2009

Xem lý lịch thành viên http://hedieuhanh.forumvi.net

Về Đầu Trang Go down

Vai trò của khối kiểm soát tiến trình (Process control block) trong việc quản lý tiến trình của Hệ điều hành

Bài gửi  TruongHanhPhuc (I11C) on 15/9/2011, 19:42

  • Trước khi CPU chuyển từ thực thi tiến trình này sang tiến trình khác, do các tiến trình cần phải sử dụng bộ nhớ để xử lý công việc của chúng, nên hệ điều hành cần phải chuyển toàn bộ dữ liệu của tiến trình đang xử lý trên bộ nhớ sang một vùng nhớ tạm trước khi chuyển sang xử lý tiến trình tiếp theo. Đây chính là chức năng chính của khối kiểm soát tiến trình.

  • Các thông tin hệ điều hành cần lưu lại trước khi chuyển sang xử lý tiến trình khác bao gồm:
    • Credentials (user ID, group ID, effective ID,...)
    • Trạng thái process : new, ready, running, waiting…
    • Program counter: địa chỉ của lệnh kế tiếp sẽ thực thi
    • Các thanh ghi CPU
    • Thông tin dùng để định thời CPU: priority,...
    • Thông tin bộ nhớ: base/limit register, page tables…
    • Thông tin thống kê: CPU time, time limits…
    • Thông tin trạng thái I/O: danh sách thiết bị I/O được cấp phát, danh sách các file đang mở,...
    • Con trỏ (pointer) đến PCBs khác.


TruongHanhPhuc (I11C)

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

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

Về Đầu Trang Go down

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

Bài gửi  tannamthanh(I11C) on 15/9/2011, 19:47

_ Đ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ì

tannamthanh(I11C)

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

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

Về Đầu Trang Go down

Phân tích vai trò của khối kiểm soát tiến trình.

Bài gửi  NgoLeYen48(I11C) on 15/9/2011, 21:29

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".
Nó lưu lại trạng thái của tiến trình tại thời điểm đang xét . Trạng thái này bao gồm (các địa chỉ liên kết của tiến trình & dữ liệu, số hiệu tiến trình, bộ đếm lệnh, nội dung các thanh ghi, giới hại bộ nhớ của tiến trình, danh sách các file đang mở, các thông tin về thời gian thống kê tiến trình hiện tại).
Vd: Dùng chung 1 bảng, bạn thứ 2 lên bảng sửa bài thì phải xóa bài của bạn thứ 1 đã viết>> Phải viết vào vở để nội dung không bị mất khi người khác xóa.
avatar
NgoLeYen48(I11C)

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

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

Về Đầu Trang Go down

Lý do cộng tác giữa các tiến trình (Cooperation Reasons).

Bài gửi  NgoLeYen48(I11C) on 15/9/2011, 21:35

- 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 làm việc song song trên cùng một hoặc nhiều máy tính để 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 riê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ó khả năng làm nhiều việc cùng một lúc: Soạn thảo, In ấn, Lấy file về,...
VD:Nhu cầu nối mạng internet của chúng ta.
avatar
NgoLeYen48(I11C)

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

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

Về Đầu Trang Go down

mục tiêu điều phối tiến trình

Bài gửi  tranvantoan83(I11c) on 15/9/2011, 21:40


Bộ điều phối không cung cấp cơ chế, mà đưa ra các quyết định. Các hệ điều hành xây dựng nhiều chiến lược khác nhau để thực hiện việc điều phối, nhưng tựu chung cần đạt được các mục tiêu sau :

a) Sự công bằng ( Fairness) :

Các tiến trình chia sẻ CPU một cách công bằng, không có tiến trình nào phải chờ đợi vô hạn để được cấp phát CPU

b) Tính hiệu qủa (Efficiency) :

Hệ thống phải tận dụng được CPU 100% thời gian.

c) Thời gian đáp ứng hợp lý (Response time) :

Cực tiểu hoá thời gian hồi đáp cho các tương tác của người sử dụng

d) Thời gian lưu lại trong hệ thống ( Turnaround Time) :

Cực tiểu hóa thời gian hoàn tất các tác vụ xử lý theo lô.

e) Thông lượng tối đa (Throughput ) :

Cực đại hóa số công việc được xử lý trong một đơn vị thời gian.

Tuy nhiên thường không thể thỏa mãn tất cả các mục tiêu kể trên vì bản thân chúng có sự mâu thuẫn với nhau mà chỉ có thể dung hòa chúng ở mức độ nào đó.
avatar
tranvantoan83(I11c)

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

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

Về Đầu Trang Go down

các đặc tính của tiến trình

Bài gửi  tranvantoan83(I11c) on 15/9/2011, 21:41

Đ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ý.
avatar
tranvantoan83(I11c)

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

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  NguyenThanhTam (I11C) on 15/9/2011, 21:53

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.
avatar
NguyenThanhTam (I11C)

Tổng số bài gửi : 21
Join date : 25/08/2011
Age : 29

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

Về Đầu Trang Go down

Mô hình luân chuyển CPU giữa 2 tiến trình

Bài gửi  NguyenThanhTam (I11C) on 15/9/2011, 22:12

* Tiến trình P1: vào hàng đợi Job-Queue ở trạng thái New, sẽ đợi 1 khoảng thời gian của quá trình điều phối chậm (Scheduler Long Term) của hệ điều hành(HĐH) để chọn tiến trình, sau khi được O.S chọn, P1 chuyển sang hàng đợi reday quueue và ở trạng thái Ready. Lúc này P1 chỉ đợi cấp CPU và running.
* Sau một khỏang thời gian running, tiến trình P2 xuất hiện. Lúc này, hệ điều hành sẽ ghi lại thông tin của P1 vào thanh PCB1 bao gồm những thông tin: con trỏ, trạng thái của P1, số hiệu của tiến trình P1, Bộ đếm P1, nội dung của P1…Và chuyển P1 sang hàng đợi Waiting và chuyển trạng thái Ready. Lúc này, P2 sẽ được cấp CPU và running. Và sau một khỏang thời gian running, P2 cũng sẽ chuyển sang hàng đợi waiting và chuyển trạng thái ready, lúc này HĐH cũng ghi lại thông tin vào thanh ghi PCB2 như đã làm ở P1. Sau đó, HĐH sẽ load lại thông tin của PCB1 và P1 sẽ tiếp tục running. Quá trình này cũng sẽ lập lại cho P2. Đển khi P1 và P2 kết thúc.






Được sửa bởi NguyenThanhTam (I11C) ngày 15/9/2011, 22:30; sửa lần 2.
avatar
NguyenThanhTam (I11C)

Tổng số bài gửi : 21
Join date : 25/08/2011
Age : 29

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  ToThiThuyTrang (I11C) on 15/9/2011, 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
}
avatar
ToThiThuyTrang (I11C)

Tổng số bài gửi : 33
Join date : 25/08/2011
Age : 29
Đến từ : Bà Rịa-Vũng Tàu

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

Về Đầu Trang Go down

Ý Nghĩa Của Hàm Fork ()

Bài gửi  VoMinhHoang (I11C) on 15/9/2011, 22:25

Hàm fork() là hàm chỉ có trong HĐH Unix mà trong Windows không có . Fork tạo ra một process con (child process) là copy (nhân bản) của chính process tạo ra nó (parent process) (làm mình nhớ đến clone() để tạo copy một object trong OOP). Để phân biệt giữa parent process và child process chính là giá trị trả về của hàm fork. Ở parent process thì hàm fork sẽ trả về chính là processID của tiến trình con, còn ở child process thì fork sẽ trả về 0. Fork sẽ trả về 2 lần ở tiến trình cha và tiến trình con.

#include <sys/types.h>
#include <unistd.h>
pid_t fork(void);

Ngay khi hàm fork được gọi thì ngay lập tức phải suy nghĩ song song 2 process. Tất cả những instruction tiếp theo sau lệnh fork đều được thực hiện ở cả hai process (parent and child). Nghĩa là mã lệnh thực thi của cả 2 tiến trình là giống nhau. Hai tiến trình này có không gian địa chỉ riêng rẽ (virtual memory 4G bộ nhớ), stack riêng rẽ, vùng dữ liệu riêng mà. Ở tiến trình con thì sẽ có thêm PPID (parent processID) chính là processID của tiến trình cha.
pid_t childpid;
childpid = fork();
switch (childpid) {
case -1: // Can not fork new process
break;
case 0: // Child process
break;
default: // Parent process
break;
}
Thế nếu muốn nhân bản nhiều child process thì làm thế nào. Khi ấy sẽ không thể suy nghĩ rằng hãy đặt các lệnh fork liên tiếp( fork(); fork() ). Vì ngay sau khi thực hiện lệnh fork thì tiến trình cha đã được nhân bản và tiến trình con cũng sẽ thực hiện lệnh fork tiếp và nhân bản chính tiến trình con đó. Khi ấy ta sẽ có một cây nhị phân tăng theo cấp số nhân 2. Thay vì đó ta hãy đặt lệnh fork tạo process con tiếp theo ở đoạn mã của tiến trình cha.

switch (childpid) {
. . .
default: // Parent process
newchildpid = fork(); // Tạo new child process của tiến trình cha ở đây
switch ( newchildpid )
. . .
break;
}
Tạo các con theo cùng bậc thì chúng ta lại code theo “chiều dọc” (các đoạn switch lồng nhau).

Phần tiếp theo về các vấn đề liên quan đến fork() như khi nào cần sử dụng fork, hay việc chờ đợi tiến trình con hay IPC (inter process communication) và multi-process programming sẽ được đề cập khi nào có dịp.
Đây là mình tìm hiểu trên Net và nghe thầy giáo giảng trên lớp. Mong nhận được những ý kiến đóng góp của các bạn về hàm này. Còn đoạn mã code của thày giáo về hàm này mình sẽ post lên sau
avatar
VoMinhHoang (I11C)

Tổng số bài gửi : 26
Join date : 08/09/2011
Age : 32
Đến từ : Tp Tan An - Long An

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

Về Đầu Trang Go down

Chuyển ngữ cảnh

Bài gửi  ToThiThuyTrang (I11C) on 15/9/2011, 22:29


-Tất cả các tiến trình mới tạo lập đều được chuyển sang trạng thái NEW – trạng thái đầu tiên , sau đó đưa vào hàng đợ job queue, hệ điều hành sẽ sử dụng điều phối chậm (long-term scheduler) và không tiếm quyền để lựa chọn một tiến trình thích hợp nhất trong hàng đợi job queue để chuyển nó sang trang thái Ready và đưa tiến trình này vào hàng đợi Ready Queue.
-Những tiến trình đang ở trạng thái sẵn sang Ready được sếp vào hàng đợi Ready Queue, ở trạng thái này hệ điều hành sẽ sử dụng trình điều phối nhanh(Short- Term scheduler) và có tiếm quyền để lựa chọn tiến trình thích hợp giao CPU cho nó và chuyển nó sang trạng thái Runing. Tiến trình sau khi giao CPU thì rời khỏi hàng đợi Ready queue (tiến trình đó vẫn có thể quay trở lại hàng đợi này nếu nó chưa thục thi xong).
-Tiến trình được giao CPU nếu đã thực thi hoàn tất thì kết thúc và chuyển sang trạng thái terminated sau đó trả lại CPU cho hệ thống , việc chuyển trạng thái này được hệ điều hành sử dụng trình điều phối chậm không tiềm quyền.
-Tiến trình được giao CPU nhưng chưa thực thi xong công việc và bị tiếm quyền thì sẽ bị chuyển từ trạng thái Runing sang trạng thái Ready và quay trở về cuối hàng đợi Ready queue để đợi đến lượt giao CPU kế tiếp , tiến trình chuyển trạng thái xong trả lại CPU cho hệ điều hành.
-Tiến trình được giao CPU nhưng chưa hoàn tất công việc của mình vì phải chờ đợi sự xuất hiện của sự kiện hay IO nào đó thì sẽ được hệ điều hành chuyển sang trạng thái waiting và chuyển nó vào hàng đợi Waiting queue , việc chuyển sang trạng thái này được hệ điều hành sử dụng trình điều phối chậm không tiếm quyền.
-Những tiến trình ở trạng thái Waiting(nằm trong hàng đợi Waiting queue) sau khi sự kiện hay IO mà nó chờ xuất hiện thì lập tức nó được hệ điều hành chuyển nó sang trạng thái sẵn sàng Ready và đưa nó vào hàng đợi Ready queue để sẵn sàng cho lần cấp CPU kế tiếp.
avatar
ToThiThuyTrang (I11C)

Tổng số bài gửi : 33
Join date : 25/08/2011
Age : 29
Đến từ : Bà Rịa-Vũng Tàu

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

Về Đầu Trang Go down

Hướng I/O và Hướng CPU

Bài gửi  VoMinhHoang (I11C) on 15/9/2011, 22:31

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....
avatar
VoMinhHoang (I11C)

Tổng số bài gửi : 26
Join date : 08/09/2011
Age : 32
Đến từ : Tp Tan An - Long An

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  TranThiMyTien18(i11c) on 15/9/2011, 22:31

* 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;
}





TranThiMyTien18(i11c)

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

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

Về Đầu Trang Go down

Các câu hỏi bài 4 thầy đưa ra trên lớp, bạn nào ko biết thì xem để thi giữa kỳ + cuối kỳ nhé

Bài gửi  DaoVanHoang (I11C) on 15/9/2011, 22:38

Câu 1: Nắm vững được khái niệm tiến trình là gì. Trình bày mô hình chuyển trạng thái của tiến trình.

Câu 2: Phân tích vai trò của khối kiểm soát tiến trình trong công việc quản lý tiến trình của HDH.

Câu 3: Trình bày mô hình luân chuyển CPU giữa 2 tiến trình P0 và P1

Câu 4: Phân tích vai trò của các loại hàng chờ được HDH duy trì trong quản lý tiến trình. Phân biệt điều phối chậm với điều phối nhanh. Cho các ví dụ minh hoạ. Phân biệt Job Queue với Ready Queue.

Câu 5: Phân tích vai trò của chuyển ngữ cảnh trong điều phối tiến trình.

Câu 6: Trình bày những lý do phải cộng tác giữa các tiến trình.

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

DaoVanHoang (I11C)

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

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  NgoDucTuan (I11C) on 15/9/2011, 22:41

* Đ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, như vậy 10/(100 10)=9% thời gian CPU để điều phối công việc.
avatar
NgoDucTuan (I11C)

Tổng số bài gửi : 52
Join date : 31/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  BuiVanHoc(I11C) on 15/9/2011, 22:43

Bài viết của bạn hay quá, thanks bạn nhiều nhéSmile
TruongHanhPhuc (I11C) đã viết:
  • Trước khi CPU chuyển từ thực thi tiến trình này sang tiến trình khác, do các tiến trình cần phải sử dụng bộ nhớ để xử lý công việc của chúng, nên hệ điều hành cần phải chuyển toàn bộ dữ liệu của tiến trình đang xử lý trên bộ nhớ sang một vùng nhớ tạm trước khi chuyển sang xử lý tiến trình tiếp theo. Đây chính là chức năng chính của khối kiểm soát tiến trình.

  • Các thông tin hệ điều hành cần lưu lại trước khi chuyển sang xử lý tiến trình khác bao gồm:
    • Credentials (user ID, group ID, effective ID,...)
    • Trạng thái process : new, ready, running, waiting…
    • Program counter: địa chỉ của lệnh kế tiếp sẽ thực thi
    • Các thanh ghi CPU
    • Thông tin dùng để định thời CPU: priority,...
    • Thông tin bộ nhớ: base/limit register, page tables…
    • Thông tin thống kê: CPU time, time limits…
    • Thông tin trạng thái I/O: danh sách thiết bị I/O được cấp phát, danh sách các file đang mở,...
    • Con trỏ (pointer) đến PCBs khác.

avatar
BuiVanHoc(I11C)

Tổng số bài gửi : 32
Join date : 26/08/2011
Age : 34
Đến từ : Ho Chi Minh City

Xem lý lịch thành viên http://csc.com.vn

Về Đầu Trang Go down

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

Bài gửi  NgoDucTuan (I11C) on 15/9/2011, 22:49

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".
Bạn nào có ý kiến xin góp ý nhé. thanks !!! farao
avatar
NgoDucTuan (I11C)

Tổng số bài gửi : 52
Join date : 31/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  TranHaDucHuy (I11c) on 15/9/2011, 22:50

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.

TranHaDucHuy (I11c)

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

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

Về Đầu Trang Go down

Tạo lập tiến trình trong Windows.

Bài gửi  NgoDucTuan (I11C) on 15/9/2011, 22:51

Các hàm API dùng tạo mới tiến trình và khởi động chương trình tương ứng:
CreateProcess, CreateProcessWithLogon
WinExec
ShellExecute, ShellExecuteEx
Arrow Arrow Arrow
avatar
NgoDucTuan (I11C)

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

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

Về Đầu Trang Go down

Phân biệt tiến trình hệ thống và tiến trình người dùng

Bài gửi  DaoVanHoang (I11C) on 15/9/2011, 23:01

Tiến trình hệ thống là các tiến trình phục vụ hệ thống.
Còn tiến trình người dùng là các tiến trình phục vụ các chương trình của người sử dụng.

Câu trả lời của mình nghe có vẻ đơn giản quá nhỉ Smile . Các bạn góp ý thêm cho mình với Smile

DaoVanHoang (I11C)

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

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

Về Đầu Trang Go down

Cộng Tác Giữa Các Tiến Trình(Cooperatinh Processes)

Bài gửi  lamhuubinh(I91C) on 15/9/2011, 23:04

Những Lý Do Cộng Tác(Cooperating Processes):

-Chia sẽ thông tin(Information Reasons): 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ên 1 hoặc nhiếu máy để giải quyeết bài toán chung.
-Đảm bảo tính đơn thể(Modularity): Chương trình được chia làm 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ả,.....
-Tốc độ tăng lên đáng kể, phục vụ khách hàng tốt hơn.
-Nâng tính đơn thể của hệ điều hành lên cao.

Ví dụ: Học nhóm

lamhuubinh(I91C)

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

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 điều phối nhanh

Bài gửi  DaoVanHoang (I11C) on 15/9/2011, 23:14

Đ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), có 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) 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 ko cần sử dụng đến ô tô (I/O). 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 DaoVanHoang (I11C) ngày 16/9/2011, 00:07; sửa lần 1.

DaoVanHoang (I11C)

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

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

Về Đầu Trang Go down

Các Hàm API Dùng Trong Hướng Dẫn Lập Trình C#

Bài gửi  lamhuubinh(I91C) on 15/9/2011, 23:24

API: Một giao diện lập trình ứng dụng (tiếng anh Application Programming Interface hay API) là một giao diện mà một hệ thống máy tính hay ứng dụng cung cấp để cho phép các yêu cầu dịch vụ có thể được tạo ra từ các chương trình máy tính khác, và/hoặc cho phép dữ liệu có thể được trao đổi qua lại giữa chúng. Chẳng hạn, một chương trình máy tính có thể (và thường là phải) dùng các hàm API của hệ điều hành để xin cấp phát bộ nhớ và truy xuất tập tin. Nhiều loại hệ thống và ứng dụng hiện thực API, như các hệ thống đồ họa, cơ sở dữ liệu, mạng, dịch vụ web, và ngay cả một số trò chơi máy tính. Đây là phần mềm hệ thống cung cấp đầy đủ các chức năng và các tài nguyên mà các lập trình viên có thể rút ra từ đó để tạo nên các tính năng giao tiếp người- máy như: các trình đơn kéo xuống, tên lệnh, hộp hội thoại, lệnh bàn phím và các cửa sổ. Một trình ứng dụng có thể sử dụng nó để yêu cầu và thi hành các dịch vụ cấp thấp do hệ điều hành của máy tính thực hiện. Hệ giao tiếp lập trình ứng dụng giúp ích rất nhiều cho người sử dụng vì nó cho phép tiết kiệm được nhiều thời gian tìm hiểu các chương trình mới, do đó khích lệ mọi người dùng nhiều ứng dụng hơn.

Để khai báo API trong C#, chúng ta sử dụng cú pháp sau:

using System.Runtime.InteropServices;
....
[DllImport(DLL_FileName) ]
[public|private] static extern Return_Type Function_Name([type parameter,... ]);
Chúng ta bắt đầu với một hàm API đơn giản là hàm MessageBox trong C#. Mở một form C# mới, thêm vào đó một button. Kế tiếp chúng ta thêm vào không gian tên (namespace):

1.using System.Runtime.InteropServices;

Sau đó khai báo thêm dòng

1.[DllImport('User32.dll')]
2.public static extern int MessageBox(int a, string b, string c, int type);

Ở đây, thuộc tính DllImport được sử dụng để gọi hàm từ thư viện User32.dll, User32.dll là tên thư viện cần gọi, MessageBox là tên hàm trả về kiểu Int.
Thêm vào mã nguồn cho sự kiện Click của button

1.protected void button1_Click(object sender, System.EventArgs e)
2.{
3. MessageBox(0,'API Message Box','API Demo', 0);
4.}

Biên dịch và thực hiện project này, sau khi nhấn chuột trên button bạn sẽ thấy một hộp thoại được sử dụng hàm API. Sau đó bạn thay đổi tham số thứ 4 trong hàm MessageBox, bạn sẽ thấy sự khác biệt như thế nào.
Sử dụng các API có cấu trúc, hoặc cấu trúc lồng trong cấu trúc sẽ phức tạp hơn. Nhưng một khi bạn đã hiểu được cách thực hiện của các hàm API thì toàn bộ thế giới API sẽ nằm trong tay bạn.

lamhuubinh(I91C)

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

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

Về Đầu Trang Go down

Các hàm API cơ bản dùng để quản lí File và Folder

Bài gửi  lamhuubinh(I91C) on 16/9/2011, 00:44

Hàm truy xuất File

- GetLogicalDrives: Xác định các kí tự của tất cả ổ đĩa luận lí trên hệ thống.

Khai báo:
Declare Function GetLogicalDrives Lib "kernel32" Alias "GetLogicalDrives" ( ) As Long

-GetDriveType: Hàm này cho biết loại của một đĩa cụ thể cho trước. Sử dụng kèm với hàm GetLogicalDriveStrings để biết được loại của những đĩa do hàm GetLogicalDriveStrings tìm được.

Khai báo:
Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long

-FindFirstFile: Tìm File - Folder dựa trên tên File đã cho.

Khai báo:
Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long

-FindNextFile: Sử dụng kết hợp với hàm FindFirstFile để tìm File kế tiếp trong đường dẫn được chỉ ra trong hàm FindFirstFile. Hàm này tìm File kế tiếp ngay sau File đầu tiên hoặc File sau File được tìm thấy ở lần gọi hàm FindNextFile trước đó và được gọi lại nhiều lần cho đến khi tìm ra hết tất cả các File.

Khai báo:
Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long

-FindClose : Chấm dứt việc tìm File đã được gọi bởi hàm FindFirstFile.
Khai báo:
Declare Function FindClose Lib "kernel32" Alias "FindClose" (ByVal hFindFile As Long) As Long

-ExtractIcon: Lấy một Icon trong các File.ICO,.EXE,.DLL

Khai báo:
Declare Function ExtractIcon Lib "shell32.dll" Alias "ExtractIconA" (ByVal hInst As Long, ByVal lpszExeFileName As String, ByVal nIconIndex As Long) As Long

-GetDiskFreeSpace:lấy thông tin về sự tổ chức của đĩa và không gian còn trống.

Khai báo:
Private Declare Function GetDiskFreeSpace Lib "kernel32" Alias "GetDiskFreeSpaceA" (ByVal lpRootPathName As String, lpSectorsPerCluster As Long, lpBytesPerSector As Long, lpNumberOfFreeClusters As Long, lpTotalNumberOfClusters As Long) As Long

-GetFileAttributes: xác định thuộc tính của một File cụ thể.

Khai báo:
Private Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Long

-GetFileSize: Xác định kích cỡ của File.

Khai báo:
Private Declare Function GetFileSize Lib "kernel32" Alias "GetFileSize" (ByVal hFile As Long, lpFileSizeHigh As Long) As Long

-GetFileTime: Lấy thông tin thời gian của File đã được chỉ định.

Khai báo:
Private Declare Function GetFileTime Lib "kernel32" Alias "GetFileTime" (ByVal hFile As Long, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME) As Long

-GetLogicalDriveString: Lấy một chuỗi chứa đường dẫn ổ đĩa gốc của tất cả ổ đĩa luận lí tồn tại trên hệ thống.

Khai báo:
Private Declare Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long

lamhuubinh(I91C)

Tổng số bài gửi : 34
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  Sponsored content


Sponsored content


Về Đầu Trang Go down

Trang 1 trong tổng số 13 trang 1, 2, 3 ... 11, 12, 13  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