1. Trang chủ
  2. » Công Nghệ Thông Tin

TÌM HIỂU CƠ CHẾ GIỮA CÁC TIẾN TRÌNH(INTERPROCESS COMMUNICATION) VÀ ĐỒNG BỘ HÓA MÔ PHỎNG BÀI TOÁN SLEEPING BABER PROBLEM

22 396 0

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

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 22
Dung lượng 1,22 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Hệ điều hành đóng vai trò trung gian trong việc giao tiếp giữa người sử dụng và phần cứng máy tính, cung cấp một môi trường cho phép người sử dụng phát triển Em xin chân thành cảm ơn thầ

Trang 1

TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA CÔNG NGHỆ THÔNG TIN

Trang 2

LỜI CẢM ƠN

Nguyên lý hệ điều hành và Lập trình mạng là những kiến thức căn bản là nền tảng

mà mỗi lập trình viên phải hiểu rõ để phục vụ cho những kiến thức cao hơn

Hệ điều hành là tập hợp các chương trình phần mềm chạy trên máy tính, dùng để điều hành, quản lý các thiết bị phần cứng và tài nguyên phần mềm trên máy tính

Hệ điều hành đóng vai trò trung gian trong việc giao tiếp giữa người sử dụng và phần cứng máy tính, cung cấp một môi trường cho phép người sử dụng phát triển

Em xin chân thành cảm ơn thầy cô khoa Công Nghệ Thông Tin đã tạo điều kiện để

em nghiên cứu kĩ hơn những kiến thức này, và đặc biệt là cô Nguyễn Thị Lệ

Quyên đã nhiệt tình theo dõi, hướng dẫn em trong quá trình thực hiện đề tài này

Vì kiến thức còn hạn hẹp, nên không thể tránh khỏi những sai sót trong quá trình làm đề tài, rất mong nhận được sự góp ý của thầy cô để sản phầm được hoàn thiện hơn Em xin chân thành cảm ơn

Sinh viên thực hiện

Dương Văn Trang

Trang 3

MỤC LỤC

PHẦN 1: NGUYÊN LÝ HỆ ĐIỀU HÀNH 5

I Cơ Chế Giao Tiếp Giữa Các Tiến Trình 5

1 Tiến Trình 5

2 Tương Tranh Giữa Các Process 5

II Đồng Bộ Hóa 6

1 Mục tiêu của đồng bộ 6

2 Miền găng 6

3 Nguyên tắc đồng bộ 6

4 Các giải thuật đồng bộ 7

4.1 Busy And Waiting 7

a Giải pháp phần mềm 7

b Giải pháp phần cứng 8

4.2 Sleep And Wakeup 9

a Semaphore s là một biến có các thuộc tính sau: 10

III Mô Phỏng Bài Toán Barber Sleeping Problem 12

1 Bài Toán 12

2 Phân tích 12

3 Sơ đồ bài toán 13

4 Triển Khai 14

5 Kết Quả 14

PHẦN 2: LẬP TRÌNH MẠNG 16

I Cơ sở lý thuyết 16

II Phân tích hệ thống 17

1 Mô hình ứng dụng 17

2 Mô hình use case ứng dụng 18

III Triển khai và đánh giá kết quả 18

1 Màn hình giao diện 18

IV Kết luận và hướng phát triển 21

1 Kết quả đạt được 21

Trang 4

2 Hướng phát triển 21

Trang 5

PHẦN 1: NGUYÊN LÝ HỆ ĐIỀU HÀNH

Đề tài: ‘Tìm hiều cơ chế giao tiếp giữa các tiến trình (Inter-process communication IPC)

và đồng bộ hóa mô phỏng bài toán Anh thợ cắt tóc ngủ gật”

I Cơ Chế Giao Tiếp Giữa Các Tiến Trình

1 Tiến Trình

Process trong hệ điều hành Khái niệm: process là một chương trình đang hoạt động (đang chạy, đã được tải lên bộ nhớ chính để hoạt động)

Một chương trình có thể có hai (hay nhiều) process đang chạy, nhưng chúng được coi là hai (hay nhiều) quá trình độc lập với nhau

Một process (tiến trình) trong hệ điều hành có thể được tiến hành độc lập hoặc giao tiếp với nhau Process độc lập là khi process không ảnh hưởng hoặc bị ảnh hưởng bởi các process khác trong hệ thống, và không chia sẻ data với bất kì process nào Process giao tiếp khi process đó có thể ảnh hưởng hoặc bị ảnh hưởng bởi các process khác trong hệ thống, và sự chia

sẻ data có diễn ra

Các process cần phải giao tiếp với nhau vì:

 Giúp chia sẻ thông tin giữa các users

 Giúp speech up các tác vụ trong máy tính

 Giúp thuận tiện trong chạy nhiều tác vụ cùng một lúc

2 Tương Tranh Giữa Các Process

Inter Process communication (hay còn gọi là IPC) – giao tiếp giữa các process – là một phương thức không thể thiếu trong việc giúp các process trao đổi thông tin với nhau

Hai models chính của IPC là shared memory (chia sẻ bộ nhớ) – với nhiệm

vụ hình thành khu vực lưu trữ bộ nhớ chung – và message passing (truyền tin) – với nhiệm vụ truyền tải tin nhắn liên tục giữa các process

Trang 6

IPC sử dụng model shared memory sẽ cần những process tham gia mở một vùng nhớ chung Vùng nhớ chung này được tạo thành từ nhiều vùng nhớ riêng của mỗi process

Để sử dụng model shared memory, các process cần cho phép việc truy cập

bộ nhớ của nhau để có thể sử dụng và viết data trên vùng chia sẻ chung Các tiến trình sẽ quyết định kiểu data nào được chia sẻ và vùng chia sẻ chung ở đâu Tất nhiên chúng phải bảo đảm các vùng chia sẻ chung không

bị ghi đè lên nhau Để giải quyết vấn đề vùng chia sẻ chung không bị ghi đề lên nhau hướng giải quyết của vấn đề này là đồng bộ hóa (synchronising)

II Đồng Bộ Hóa

1 Mục tiêu của đồng bộ

 Đảm bảo truy xuất độc quyền

 Đảm bảo cơ chế phối hợp giữa các tiến trình

2 Miền găng

Đoạn code trong các tiến trình đồng thời, có tác động đến các tài nguyên có thể trở thành tài nguyên găng được gọi là đoạn găng hay miền găng Tức là, các đoạn code trong các chường trình dùng để truy cập đến các vùng nhớ chia sẻ, các tập tin chia sẻ được gọi là các đoạn găng

Để hạn chế các lỗi có thể xảy ra do sử dụng tài nguyên găng, hệ điều hành phải điều khiển các tiến trình sao cho, tại một thời điểm chỉ có một tiến trình nằm trong đoạn găng, nếu có nhiều tiến trình cùng muốn vào( thực hiện) đoạn găng thì chỉ có một tiến trình được vào, các tiến trình khác phải chờ, một tiến trình khi ra khỏi( kết thúc) đoạn găng phải báo cho hệ điều hành và/ hoặc các tiến trình khác biết để các tiến trình này vào đoạn găng,vv Các công tác điều khiến tiến trình được thực hiện đoạn găng của

hệ điều hành được gọi là điều độ tiến trình qua đoạn găng Để công tác điều

độ tiến trình qua đoạn găng được thành công, thì cần phải có sự phối hợp giữa vi xử lí, hệ điều hành và người lập trình Vi xử lí đưa các chỉ thị, hệ điều hành cung cấp các công cụ để người lập trình cây dựng các sơ đồ điều

độ hợp lý, để đảm bảo sự độc quyền trong việc sử dụng tài nguyên găng của tiến trình

3 Nguyên tắc đồng bộ

 Tại một thời điểm chỉ có một tiến trình trong miền găng

Trang 7

 Dùng biến lock: các tiến trình chia sẻ một biến dùng chung lock

- Một tiến trình muốn vào miền găng phải kiểm tra giá trị của biến lock

- Nếu lock = 0, tiến trình đặt lại giá trị cho lock = 1 và đi vào miền găng

- Nếu lock = 1, tiến trình phải chờ đến khi lock = 0

while (TRUE){ while (lock == 1); // wait

lock = 1;

critical-section ();

lock = 0;

Noncritical-section (); }

 Kiểm tra luân phiên: Hai tiến trình sử dụng chung biến turn

- Khởi tạo turn = 0

- Nếu turn = 0, tiến trình A được vào miền găng

- Nếu turn = 1, tiến trình A đi vào một vòng lặp chờ đến khi turn nhận giá trị 0

- Khi tiến trình A rời khỏi miền găng, nó đặt turn = 1 cho phép tiến trình B đi vào miền găng

Trang 8

 Giải pháp của Peterson: Các tiến trình chia sẻ hai biến chung

- int turn; // đến lượt tiến trình nào

b Giải pháp phần cứng

 Cấm ngắt: cho phép tiến trình cấm tất cả các ngắt trước khi vào

thống có nhiều bộ xử lý, lệnh cấm ngắt chỉ có tác dụng trên bộ xử

lý đang xử lý tiến trình, còn các tiến trình hoạt động trên các bộ

xử lý khác vẫn có thể truy xuất đến miền găng

while (TRUE) {int j = 1-i; // j là tiến trình còn lại interesse[i]= TRUE;

Trang 9

Test-and-Setlock(boolean

target){

Test-and-Setlock = target; target = TRUE;

là FALSE Tiến trình phải kiểm tra giá trị của biến lock trước khi vào miền găng, nếu lock = FALSE, tiến trình có thể vào miền găng

Các giải pháp “busy waiting” buộc tiến trình phải liên tục kiểm tra điều kiện để phát hiện thời điểm thích hợp được vào miền găng Việc kiểm tra tiêu thụ rất nhiều thời gian sử dụng CPU, tiến trình đang chờ vẫn chiếm dụng CPU Xu hướng giải quyết vấn đề đồng bộ hóa là nên tránh các giải pháp “busy waiting”

4.2 Sleep And Wakeup

Một tiến trình chưa đủ điều kiện vào miền găng sẽ chuyển sang trạng thái blocked, từ bỏ quyền sử dụng CPU

 Một tiến trình chưa đủ điều kiện vào miền găng, nó gọi SLEEP

để tự block đến khi có một tiến trình khác gọi WAKEUP để giải phóng cho nó

 Một tiến trình gọi WAKEUP khi ra khỏi miền găng để đánh thức một tiến trình đang chờ

Trang 10

a Semaphore s là một biến có các thuộc tính sau:

 Một giá trị nguyên dương e(s)

 Một hàng đợi f(s) lưu danh sách các tiến trình đang bị khóa (chờ) trên semaphore s

 Hai thao tác được định nghĩa trên semaphore:

 Down(s): giảm s đi 1 đơn vị nếu e(s) > 0, và tiếp tục xử lý Ngược lại, nếu e(s) ≤ 0, tiến trình phải chờ đến khi e(s) >0

 Up(s): s lên 1 đơn vị Nếu có một hoặc nhiều tiến trình đang chờ trên semaphore s, bị khóa bởi thao tác Down, thì hệ thống

sẽ chọn một trong các tiến trình này để kết thúc thao tác Down và cho tiếp tục xử lý

 Có thể dùng semaphore để giải quyết vấn đề truy xuất độc quyền hay tổ chức phối hợp giữa các tiến trình

int busy;//busy=1 miền găng đang bị chiếm int blocked;// số tiến trình đang bị khóa while (TRUE){

if (busy){

blocked = blocked + 1;

sleep();

}else busy = 1;

}

Trang 11

status (Q) = ready;

enter(Q,ready-list);

}

b Monitor là đối tượng được cung cấp sẵn bởi hệ thống

Monitor là một cấu trúc đặc biệt bao gồm các thủ tục, các biến và cấu trúc dữ liệu có các thuộc tính sau :

- Trong monitor, ta có thể định nghĩa nhiều biến điều kiện Biến điều kiện chỉ có tên, không có kiểu và không có giá trị nên ta không dùng nó như biến bình thường Chỉ có 2 tác vụ định sẵn có thể truy xuất biến điều kiện :

- hàm wait(cond) : bắt process ngủ chờ trên biến điều kiện cond

- hàm signal(cond) : đánh thức các process đang ngủ chờ trên biến cond

- Về mặt điều khiển, Monitor chỉ cho phép tối đa 1 process được vào thi hành 1 tác vụ nào đó của Monitor tại từng thời điểm Nhờ tính chất này,

ta dễ dàng giải quyết việc loại trừ tương hỗ giữa các process khi chúng truy xuất đồng thời 1 tài nguyên dùng chung nào đó bằng cách đặt mỗi đoạn CS vào 1 tác vụ riêng và đặt tất cả các tác vụ này trong một Monitor nào đó

c Message Passing giải pháp này dựa trên cơ sở trao đổi thông điệp với hai primitive Send

và Receive để thực hiện sự đồng bộ hóa:

Send(destination, message): gởi một thông điệp đến một tiến trình hay gởi vào hộp thư

Receive(source,message): nhận một thông điệp thừ một tiến trình hay từ bất kỳ một tiến trình nào, tiến trình gọi sẽ chờ nếu không có thông điệp nào để nhận

Có nhiều cách thức để thực hiện việc truy xuất độc quyền bằng cơ chế trao đổi thông điệp Đây là một mô hình đơn giản: một tiến trình kiểm soát việc sử dụng tài nguyên và nhiều tiến trình khác yêu cầu tài nguyên này Tiến trình có yêu cầu tài nguyên sẽ gởi một thông điệp đến tiến trình kiểm soát và sau đó chuyển sang trạng thái blocked cho đến khi

Trang 12

nhận được một thông điệp chấp nhận cho truy xuất từ tiến trình kiểm soát tài nguyên.Khi sử dụng xong tài nguyên , tiến trình gởi một thông điệp khác đến tiến trình kiểm soát để báo kết thúc truy xuất Về phần tiến trình kiểm soát , khi nhận được thông điệp yêu cầu tài nguyên, nó

sẽ chờ đến khi tài nguyên sẵn sàng để cấp phát thì gởi một thông điệp đến tiến trình đang bị khóa trên tài nguyên đó để đánh thức tiến trình này

while (TRUE) { Send(process controler, request message);

Receive(process controler, accept message);

critical-section ();

Send(process controler, end message);

Noncritical-section ();

} Các primitive semaphore và monitor có thể giải quyết được vấn đề truy xuất độc quyền trên các máy tính có một hoặc nhiều bộ xử lý chia sẻ một vùng nhớ chung Nhưng các primitive không hữu dụng trong các hệ thống phân tán, khi mà mỗi bộ xử lý sỡ hữu một bộ nhớ riêng biệt và liên lạc thông qua mạng Trong những hệ thống phân tán như thế, cơ chế trao đổi thông điệp tỏ ra hữu hiệu và được dùng để giải quyết bài toán đồng bộ hóa

III Mô Phỏng Bài Toán Barber Sleeping Problem

1 Bài Toán

Một tiệm hớt tóc có 1 phòng đợi n ghế, và phòng cắt tóc với 1 ghế cắt tóc Nếu không các khách thì người thợ đi ngủ Nếu một khách mới vào và không còn ghế trống thì người khách rời tiệm Nếu người thợ đang cắt tóc,

và vẫn còn ghế trống thì khách hàng chọn 1 ghế ngồi đợi Nếu người thợ ngủ, thì khách hàng đánh thức anh ta Viết chương trình để đồng bộ khách hàng và thợ cắt tóc

2 Phân tích

Tiệm có lúc vắng, lúc nhiều khách Thợ nên ngủ khi không có khách

Nếu được đánh thức, thợ sẽ mời từng khách đến ghế cắt và cắt tóc cho khách cho đến khi hết khách, thợ lại tiếp tục ngủ

Khi đến tiệm, nếu thấy còn ghế chờ, khách sẽ ngồi vào 1 ghế, đánh

Trang 13

thức thợ rồi ngủ ngay Khi nào thợ đánh thức và mời đến ghế cắt thì khách thức dậy và đến ngồi vào ghế cắt rồi ngủ chờ thợ cắt xong, trả tiền và ra về

(Hình 1 minh họa Sleeping Barber Problem)

3 Sơ đồ bài toán

(Hình 2 Mô hình bài toán thợ cắt tóc)

Trang 14

4 Triển Khai

Class Barber.java class tạo các tiến trình của thợ cắt tóc

Class Customer.java class tạo các tiến trình của customer

Class Display.java: class xây dựng giao diện

Class App.java: class tạo đối tượng chạy chương trình

5 Kết Quả

(Hình 3 Giao diện chương trình )

Trang 15

IV Kết luận và hướng phát triển

2 Hướng phát triển

Giải quyết bài toán Sleeping Barber Problem bằng các giải pháp đồng bộ khác

Trang 16

PHẦN 2: LẬP TRÌNH MẠNG

Đề tài: Xây dựng ứng dụng chat đa phương tiện

Giới thiệu: Ngày nay, những ứng dụng realtime như mạng xã hội, chat, game online,… đang ngày càng phát triển thì công nghệ realtime luôn được ưa chuộng hơn bao giờ hết Một trong những công nghệ phục vụ realtime mạnh mẽ nhất trong

đó phải kể đến NodeJs và Socket.io Trong phạm vi đồ án em đã xây dựng một ứng dụng chat realtime nhỏ trên Android

V Cơ sở lý thuyết

Node.js Socket.io NodeJS là ngôn ngữ lập trình mã nguồn mở, ngôn ngữ lập trình phía server, bắt đầu được phát triển từ năm 2009, là nền tảng cho việc xây dựng các ứng dụng web Mặc dù NodeJS không phải là một JavaScript framework nhưng hầu hết các module của nó được viết bằng JavaScript

Hoạt động với một luồng duy nhất và có khả năng asynchronous (bất đồng bộ)

(Hình 4 Mô hình hoạt động của Server Node.js)

Socket.io cung cấp cho lập trình viên các đặc trưng như event, room và tự động phục hồi lại kết nối

Khi client muốn kết nối tới Socket.io server, nó sẽ gửi cho server một

“handshake HTTP request” Server sẽ phân tích request đó với những thông tin cần thiết trong suốt quá trình kết nối Nó sẽ tìm cấu hình của

middleware mà đã được đăng ký với server và thực thi chúng trước khi đưa

ra sự kiện kết nối Khi kết nối thành công thì connection event listener được

Trang 17

thực thi, tạo ra một instance mới của socket có thể coi như định danh của client mà mỗi một client kết nối tới sẽ có 1 định danh

(Hình 5 Mô hình chat realtime sử dụng socket.io)

Trang 18

2 Mô hình use case ứng dụng

(Hình 7 Sơ đồ usecase ứng dụng)

Các chức năng của ứng dụng:

Gửi tin nhắn dạng văn bản, hình ảnh, âm thanh

Người dùng có thể biết tên user người gửi tin nhắn đến, và trạng thái đang

gõ bàn phím

Tất cả dữ liệu gửi lên server và gửi về client đều ở dạng JSONObject Với dữ liệu dạng hình ảnh, máy client sẻ chuyển dữ liệu ảnh sang dạng byte sau đó đóng gói vào một JSONObject rồi gửi lên server Máy nhận sẻ giải

mã ngược dạng byte sang dạng bitmap và hiển thị ra màn hình

Với dữ liệu âm thanh máy gửi sẻ chuyển dữ liệu mp3 sang byte trước khi gửi lên server Máy nhận sẻ giải mã sang dạng mp3 rồi phát lên cho người dùng

VII Triển khai và đánh giá kết quả

1 Màn hình giao diện

Trang 19

Màn hình login, có thể đăng nhập với một username bất kì

(Hình 8 Giao diện Login)

Trang 20

Màn hình sau khi Login

(Hình 9 Giao diện chat)

Sau khi gửi ảnh

(Hình 10 Kết quả gửi ảnh)

Trang 21

Giao diện nhập tin nhắn âm thanh

Sau khi người gửi,gửi tin nhắn âm thanh, bên máy nhận lập tức sẻ phát âm thanh ra

(Hình 11 Giao diện gửi âm thanh)

VIII Kết luận và hướng phát triển

gõ tin nhắn, biết được tên username gửi tin nhắn

Tuy nhiên còn nhiều mặt hạn chế như:

- Ứng dụng chưa có chức năng gửi emotion, ảnh động gif, gửi nhận video

- Giao điện chưa bắt mắt, sơ sài…

2 Hướng phát triển

Ngày đăng: 27/01/2019, 03:07

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w