Professional Documents
Culture Documents
);
Trong đó , tham số thứ nhất là HANLDE hFile , do yêu cầu của chương trình
không yêu cầu lưu lại chat-log , để đơn giản cho chương trình , ta đưa vào giá trị
INVALID_HANDLE_VALUE , nghĩa là thay vì tạo ra một file-mapping Object
lên 1 file trên Disk , ta sẽ tạo một file-mapping Object lên Paging-File trong bộ
nhớ .
Với dòng lệnh trên ta tạo ra một File Mapping Object được xác định bởi
MapObjName , được chia sẻ với thuộc tính PAGE_READWRITE.
Bước 2 :
This document is a part of Open Source Project from a UIT’s Student – 08520604 .
You can you this for any purpose as you want , but make sure it’s is legal in laws .
Contact : trantoanagm@hotmail.com Page 2
The University of Information Technology – VNU
);
Kết quả là hàm sẽ trả về 1 con trỏ tới tới đầu block bộ nhớ của mapping view .
Con trỏ pBuf sau này sẽ được ta dùng để ghi và đọc thông điệp từ vùng nhớ chia
sẻ .
Bước 3 :
Chương trình bước vào vòng lặp vô cùng while(1) với hai thao tác đọc thông tin từ
vùng nhớ chia sẻ , in lên màn hình và ghi thông tin lên vùng nhớ chia sẻ .
Việc đọc thông tin và ghi thông tin của tiến trình P0 và P1 được điều khiển bởi
vùng nhớ chia sẻ thứ hai trong chương trình mà đại diện cho giá trị của vùng nhớ
là biến turn . Trong vòng lặp while(1) bên trong vòng lặp while(1) lớn , ta liên tục
thực hiện việc kiểm tra xem đã tới lượt P0 thực hiện đọc thông trong vùng nhớ chia
sẻ ra và in thông tin đó lên màn hình hay chưa :
while(1)
{
CopyMemory((void *)BufferOut , (PVOID)pFlag , 10);
turn = atoi(BufferOut);
if(turn == 0)
{
CopyMemory((void*)inb ,(PVOID)pBuf , BUF_SIZE );
if(inb != "")
printf(inb);
break;
}
...
Chỉ khi thỏa điều kiện biến turn mang giá trị 0 thì P0 mới thực hiện việc đọc
thông tin của mình . Với giá trị biến turn bằng 0 nghĩa là P1 đã thực hiện xong
việc ghi thông điệp vào vùng nhớ chia sẻ .
Bước 5 :
Sau khi thực hiện xong việc đọc thông tin từ vùng nhớ chia sẻ và in lên màn hình ,
tới lượt P0 được truyền đi thông điệp của nó .Chương trình thực thi câu lệnh
This document is a part of Open Source Project from a UIT’s Student – 08520604 .
You can you this for any purpose as you want , but make sure it’s is legal in laws .
Contact : trantoanagm@hotmail.com Page 3
The University of Information Technology – VNU
fgets() có tác dụng lấy nội dung phím gõ vào từ vùng đệm bàn phím và lưu vào
trong đệm outb .Nếu chuỗi nhập vào là “exit\n” thì chương trình sẽ thoát khỏi quá
trình giao tiếp .Ta thực hiện việc ghi thông tin lấy từ vùng đệm bàn phím lên
vùng nhớ chia sẻ .
Để đảm bảo thông điệp sau khi được P0 cập nhập thì ta phải được P1 “ phát hiện”
ra và in lên màn hình , ta sử dụng một cơ chế đồng bộ riêng sẽ được mô tả chi tiết
ở phần tiếp theo của báo cáo này .
Ta thực hiện việc cập nhật vùng nhớ điều khiển sau khi đã tiến hành ghi thông tin
lên vùng nhớ chia sẻ .
Các thao tác kết thúc chương trình bao gồm UnmapViewOfFile và CloseHandle để
tránh memory-leakage .
b. Tiến trình P1 :
Về cơ bản thì các cài đặt trong P1 tương tự như P0 , ta sẽ lượt sơ qua các
thao tác chính để thấy sự giống nhau này :
Trong vòng lặp while(1) , chương trình sẽ lần lượt thực hiện qua các thao
tác sau đây .
This document is a part of Open Source Project from a UIT’s Student – 08520604 .
You can you this for any purpose as you want , but make sure it’s is legal in laws .
Contact : trantoanagm@hotmail.com Page 4
The University of Information Technology – VNU
Bước 2 : Tạo một view lên vùng nhớ chia sẻ , giá trị trả về là 1 con trỏ , trỏ
tới địa chỉ đầu tiên trong vùng nhớ chia sẻ . Với thao tác này ta đã map vùng
nhớ của P1 tới vùng nhớ chia sẻ chung giữa P0 và P1.
Bước 3 : Tương tự như P0 , ta cũng lần lượt thực hiện hai thao tác , đó là
đọc thông tin trong vùng nhớ chia sẻ lên màn hình và ghi thông tin lên vùng nhớ
chia sẻ thông qua bộ đệm bàn phím .
Cuối cùng là các thao tác kết thúc chương trình để tránh Memory-leakage .
Với vùng nhớ chia sẻ được tạo ra này , ta thực hiện cập nhật 2 giá trị 0 và 1
tùy theo P1 hay P0 .Với giá trị tương ứng của vùng nhớ mà đại diện là biến turn ,
ta có thể quyết định việc đọc thông điệp và ghi thông điệp lên màn hình , cũng như
gửi thông điệp giao tiếp là thuộc về tiến trình nào ? P0 hay P1 .
This document is a part of Open Source Project from a UIT’s Student – 08520604 .
You can you this for any purpose as you want , but make sure it’s is legal in laws .
Contact : trantoanagm@hotmail.com Page 5
The University of Information Technology – VNU
Trước tiên , P0 tạo ra vùng nhớ chia sẻ này , nhưng ta muốn rằng P1 phải là
tiến trình đầu tiên thực hiện việc gửi thông điệp cho P0 , ta gán giá trị cho vùng
nhớ ban đầu là 1 .
//Khoi gan luot doc thong tin dau tien la cua Process 1.
itoa(1 , BufferIn , 10);
CopyMemory((PVOID)pFlag , (void*)BufferIn , 10);
Như vậy khi P0 bắt đầu vòng lặp kiểm tra việc đọc thông tin trong vùng nhớ
chia sẻ và ghi lên màn hình , nó sẽ bị kẹt trong vòng lặp đó .
while(1)
{
CopyMemory((void *)BufferOut , (PVOID)pFlag , 10);
turn = atoi(BufferOut);
if(turn == 0)
{
CopyMemory((void*)inb ,(PVOID)pBuf , BUF_SIZE );
if(inb != "")
printf(inb);
break;
}
Chỉ đến khi nào turn có giá trị là 0 , và việc in thông điệp ra màn hình được thực
thi thì P0 mới thoát khỏi vòng lặp này .(Tại đây nảy sinh vấn đề lãng phí tài
nguyên mà ta sẽ nói tới sau .)
Sau khi P0 thực hiện việc ghi thông điệp vào vùng nhớ chia sẻ , nó sẽ thay đổi giá
trị trong vùng nhớ điều khiển , như vậy P1 trong khi chạy liên tục vòng lặp kiểm
tra biến turn để kiểm tra tới lượt P1 chưa sẽ “phát hiện” ra sự thay đổi giá trị biến
turn trong P1 , nó sẽ tiến hành đọc thông điệp lên màn hình , sau đó lại ghi thông
This document is a part of Open Source Project from a UIT’s Student – 08520604 .
You can you this for any purpose as you want , but make sure it’s is legal in laws .
Contact : trantoanagm@hotmail.com Page 6
The University of Information Technology – VNU
điệp lên vùng nhớ chia sẻ , rồi lại thay đổi giá trị trong vùng nhớ điều khiển .Cứ
như vậy quá trình giao tiếp diễn ra .
This document is a part of Open Source Project from a UIT’s Student – 08520604 .
You can you this for any purpose as you want , but make sure it’s is legal in laws .
Contact : trantoanagm@hotmail.com Page 7