Ngoài yêu cầu dùng chung tài nguyên để tiết kiệm chi phí, người sử dụng còn cần phải chia sẻ thông tin, tài nguyên phần mềm lẫn nhau.Giả lập một máy tính mở rộng: Hệ điều hành làm ẩn đi các chi tiết phần cứng, người sử dụng được cung cấp một giao diện đơn giản, dễ hiểu, dễ sử dụng và không phụ thuộc vào thiết bị phần cứng cụ thể.Ngoài ra có thể chia chức năng của hệ điều hành theo bốn chức năng sau:+ Quản lý tiến trình+ Quản lý bộ nhớ+ Quản lý hệ thống lưu trữ giao tiếp với người dùng 2.Tìm hiểu tiến trình là gì? Trong khoa học máy tính, tiến trình là một thực thể điều khiển đoạn mã lệnh có riêng một không gian địa chỉ, có ngăn xếp riêng rẽ, có bảng chứa các số miêu tả tệp được mở cùng tiến trình và đặc biệt là có một định danh (PID) duy nhất trong toàn bộ hệ thống vào thời điểm tiến trình đang chạy. Một tiến trình là một chương trình đang được thực thi. Nhưng một chương trình không phải là một tiến trình. Vì chương trình là một tệp, hay một thư mục bị động nằm trên máy. Trong khi đó, một tiến trình là một chương trình đang hoạt động, đang chạy và đã đượ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) tiến trình đang chạy, nhưng chúng được coi là hai (hay nhiều) quá trình độc lập với nhau. Các thay đổi trạng thái của một tiến trình được trình bày ở sơ đồ trạng thái sau: Hình 2: Sơ đồ trạng thái của một tiến trình+ New: tiến trình mới được tạo.+ Running: tiến trình đang được thực thi chạy.+ Waiting: tiến trình đợi IO hoặc tín hiệu nào đó.+ Ready: tiến trình sẵn sàng được CPU chạy.+ Terminated: tiến trình hoàn thành việc. Những tiến trình của một chương trình cần phải tải lên bộ nhớ chính trước khi được CPU nhận và thực hiện những yêu cầu của chương trình.Các bước chuyển quá trình của tiến trình:(1) Những tiến trình được chương trình tạo ra, được sắp vào “hàng chờ” (2) Tiến trình được CPU thấy và thực thi.(3) Khi trình quá lớn, CPU phải nhả để thực hiện tiến trình khác(4) Khi tiến trình đã được thực hiện xong.(5) Khi tiến trình đang thực hiện và yêu cầu IO hay các tín hiệu khác. Ví dụ:Cần in ra một tệp văn bản, tiến trình sẽ phải nói cho CPU, CPU gửi tín hiệu cho máy in, máy in in ra rồi báo lại CPU. Trong thời gian đó, để tiết kiệm thời gian, tiến trình này sẽ được chuyển qua trạng thái chờ, cho tiến trình khác vào thực hiện.(6) Sau khi IO hay tín hiệu đã đến, tiến trình được sắp lại vào “hàng chờ”, chờ thực thi.a)Cấu trúc tiến trình:Một tiến trình được đặc trưng bởi nhiều thuộc tính do hệ thống duy trì như:Trạng thái của nó.Định danh của nó.Các giá trị của các thanh ghi, bao gồm cả bộ đếm chương trình.Mã định danh người sử dụng có tên mà tiến trình đang thực hiện.Thông tin được kernel sử dụng để thiết lập lịch biểu của các tiến trình.Thông tin về không gian địa chỉ của tiến trình.Thông tin về các nhậpxuất được tiến trình thực hiện.Tính tương thích thông tin tổng kết các tài nguyên do tiến trình sử dụng.b)Các loại tiến trình:Tiến trình tuần tự (MS_DOS) là các tiến trình mà điểm khởi tạo của nó là điểm kết thúc của tiến trình trước đó.Tiến trình song song là các tiến trình mà điểm khởi tạo của tiến trình này nằm ở thân của các tiến trình khác, tức là có thể khởi tạo một tiến trình mới khi các tiến trình trước đó chưa kết thúc.Trong này tiến trình song song được chia thành nhiều loại.+ Tiến trình song song độc lập: Các tiến trình hoạt động song song nhưng không có quan hệ thông tin với nhau.+ Tiến trình song song có quan hệ thông tin : Trong quá trình hoạt động các tiến trình trao đổi thông tin với nhau. + Tiến trình song song phân cấp : Trong qua trình hoạt động một tiến trình có thể khởi tạo các tiến trình khác hoạt động song song với nó, tiến trình khởi tạo được gọi là tiến trình cha, tiến trình được tạo gọi là tiến trình con.+ Tiến trình song song đồng mức: Là các tiến trình hoạt động song song sử dụng chung tài nguyên theo nguyên tắc lần lượt, mỗi tiến trình sau một khoảng thời gian chiếm giữ tài nguyên phải tự động trả lại tài nguyên cho tiến trình kia. CHƯƠNG 2: PHÂN TÍCH VÀ THIẾT KẾ BÀI TOÁN1.Yêu cầu bài toán: Giả sử khi có một tài nguyên chia sẻ đang được truy cập bởi nhiều tiến trình khác nhau. Đó là Writer và Reader. Việc các tiến trình writer cùng thực hiện việc ghi dữ liệu hoặc một tiến trình reader đọc dữ liệu và một tiến trình writer ghi dữ liệu cũng thực hiện cùng một lúc thì sẽ dẫn đến xung đột dữ liệu. Tóm lại vấn đề chú ý ở đây: Sự xung đột dữ liệu, dữ liệu không nhất quán.2.Mô tả bài toán: Chúng ta sẽ xây dựng một chương trình đơn giản mô phỏng sự truy cập dữ liệu đồng thời của các tiến trình Mỗi tiến trình đọc dữ liệu từ tài nguyên sẽ không làm thay đổi dữ liệu nên sẽ cho chép các tiến trình kiểu này truy cập đồng thời. Đối với mỗi tiến trình ghi dữ liệu từ tài nguyên sẽ thực hiện một thay đổi khác nhau của dữ liệu. Nên việc cho phép truy cập đồng thời truy cập dữ liệu để ghi sẽ làm xung đột dữ liệu. Vậy các tiến trình ghi dữ liệu sẽ phải thực hiện tuần tự. Mặt khác, khi việc cho phép nhiều tiến trình đọc dữ liệu và một tiến trình ghi dữ liệu cũng xảy ra trường hợp dữ liệu không nhất quán. Nên trường hợp này cũng buộc phải không được xảy ra.3.Sơ đồ hoạt động Hình 3: Sơ đồ hoạt động CHƯƠNG 3: TRIỂN KHAI VÀ ĐÁNH GIÁ1.Môi trường triển khaiHệ điều hành MacOSNgôn ngữ Java, IDE Eclipse2.Triển khaiBước 1: Khởi tạo các tiến trình reader và writerTienTrinhReader reader1 = new TienTrinhReader(reader 1, 1200, 150);TienTrinhReader reader2 = new TienTrinhReader(reader 2, 1200, 150);TienTrinhReader reader3 = new TienTrinhReader(reader 3, 1200, 150);…TienTrinhWriter writer1 = new TienTrinhWriter(writer 1, 1200, 150);TienTrinhWriter writer2 = new TienTrinhWriter(writer 2, 1200, 150);TienTrinhWriter writer3 = new TienTrinhWriter(writer 3, 1200, 150);…(TienTrinhReader, TienTrinhWriter là đã được định nghĩa, mô tả ở phụ lục)Bước 2: Khởi tạo giá trị ban đầu của dữ liệu chia sẽ dùng chungMoPhongDuLieu dulieu = new MoPhongDuLieu(950+200, 200);tailieu.content=Nội dung ban đầu;(Lớp MoPhongDuLieu là đã được định nghĩa, mô tả ở phụ lục)Bước 3: Biểu diễn ngẫu nhiên sự truy cập của các tiến trìnhVòng lặpRandom rd = new Random();Sleep(rd.nextInt(5)1000);Tiến trình writer yêu cầu ghiKết thúc vòng lặp...Vòng lặpRandom rd = new Random();Thread.sleep(rd.nextInt(5)1000);Tiến trình reader yêu cầu đọc dữ liệuKết thúc vòng lặp Bước 4: Quan sát kết quả thu được, sửa lỗi, bổ sung 3.Thiết kế giao diệna)Giao diện tiến trình writer: Hình 4: Tiến trình tiến hành ghi khi không có reader nào Hình 5: Tiền trình bị block do đang cố gắng ghi khi có reader đang đọc dữ liệub)Giao diện tiến trình reader: Hình 6. Tiến trình tiến hành đọc khi không có writer nào Hình 7. Tiến trình bị block do đang cố gắng ghi khi có writer đang ghi dữ liệu4.Kết quả chạy chương trìnha)Kết quả khi có một tiến trình writer đang truy cập:Khi có một tiến trình writer đang truy cập, tất cả những tiến trình khác cố gắng truy cập sẽ bị tạm block. Hình 8. Mô phỏng quá trình writer đang ghi dữ liệub)Kết quả khi có nhiều tiến trình reader truy cập để đọc dữ liệuKhi có nhiều tiến trình reader đang đọc dữ liệu, những tiến trình writer nào cố gắng truy cập để ghi sẽ bị tạm block Hình 9. Mô phỏng quá trình những reader đang đọc dữ liệu5.Đánh giá:Chương trình đã thỏa mãn yêu cầu bài toán đặt ra về việc giải quyết xung đột giữa các tiến trình khi cùng truy cập vào một vùng nhớ được chia sẻ tại cùng một thời điểm.KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN1.Kết luậnViệc tìm hiểu cách giải quyết xung đột giữa các tiến trình khi cùng truy cập vào một vùng nhớ được chia sẻ tại cùng một thời điểm đã giúp em hiểu rõ hơn về đặc điểm cũng như cách tiếp cận giải quyết các vấn đề khác tương tự. 2.Hướng phát triểnĐồ án chỉ dừng lại trong phạm vi mô phỏng giải pháp giải quyết bài toán Readers Writer PHẦN II: LẬP TRÌNH MẠNGTIÊU ĐỀ: XÂY DỰNG ỨNG DỤNG ANDROID NHẬN THÔNG BÁO TỪ TRANG HỆ THỐNG THÔNG TIN SINH VIÊN SỬ DỤNG MÔ HÌNH CLIENT SERVER CHƯƠNG 1: CƠ SỞ LÝ THUYẾT1.Giao thức HTTP:a) Định nghĩaHTTP (HyperText Transfer Protocol Giao thức truyền tải siêu văn bản) là một trong các giao thức chuẩn về mạng Internet, được dùng để liên hệ thông tin giữa Máy cung cấp dịch vụ (Web server) và Máy sử dụng dịch vụ (Web client), là giao thức Client Server dùng cho World Wide Web – WWW HTTP là một giao thức ứng dụng của bộ giao thức TCPIP (các giao thức nền tảng cho Internet). Hình 10. Giao thức HTTP b) Phương thức hoạt động của giao thức HTTP?HTTP hoạt động dựa trên mô hình Client – Server. Trong mô hình này, các máy tính của người dùng sẽ đóng vai trò làm máy khách (Client). Sau một thao tác nào đó của người dùng, các máy khách sẽ gửi yêu cầu đến máy chủ (Server) và chờ đợi câu trả lời từ những máy chủ này. Hay nói cách khác, yêu cầu hiện tại không biết những gì đã hoàn thành trong yêu cầu trước đó. HTTP cho phép tạo các yêu cầu gửi và nhận các kiểu dữ liệu, do đó cho phép xây dựng hệ thống độc lập với dữ liệu được chuyển giao. Hình 11. Sơ đồ hoạt động của HTTP c) Các thành phần chính của HTTP:HTTP Request:HTTP Request Method là phương thức để chỉ ra hành động mong muốn được thực hiện trên tài nguyên đã xác định.Cấu trúc của một HTTP Request:+ Một Request line = Phương thức + URI–Request + Phiên bản HTTP. Giao thức HTTP định nghĩa một tập các giao thức GET, POST, PUT,…+ Có thể có hoặc không các trường header.+ Một dòng trống để đánh dấu sự kết thúc của các trường Header.+ Request Header Fields: Các trường header cho phép client truyền thông tin bổ sung về yêu cầu, và về chính client, đến server. Một số trường:AcceptCharset, AcceptEncoding, AcceptLanguage, Authorization, Expect, From, Host,…+ Tùy chọn một thông điệp Hình 12. Các phương thức của giao thức HTTP HTTP Responses: Cấu trúc của một HTTP response:+ Một Statusline = Phiên bản HTTP + Mã trạng thái + Trạng thái+ Có thể có hoặc không có các trường header+ Một dòng trống để đánh dấu sự kết thúc của các trường header+ Tùy chọn một thông điệp Mã trạng thái: Thông báo về kết quả khi nhận được yêu cầu và xử lí bên server cho client.Các kiểu mã trạng thái:1xx: Thông tin (100 > 101)2xx: Thành công (200 > 206) 3xx: Sự điều hướng lại (300 > 307) 4xx: Lỗi phía Client (400 > 417) 5xx: Lỗi phía Server (500 > 505)2.Mô hình ClientServer:Mô hình client server là một mô hình nổi tiếng trong mạng máy tính, được áp dụng rất rộng rãi và là mô hình của mọi trang web hiện có. Ý tưởng của mô hình này là máy con gửi một yêu cầu để máy chủ, máy chủ sẽ xử lý và trả kết quả về cho máy khách. Một mô hình ngược lại là mô hình master slaver, trong đó máy chủ sẽ gửi dữ liệu đến máy con bất kể máy con có cần hay không. Hình 13. Mô hình client server.a)Ưu điểm mô hình client server là gì?Ưu điểm của mô hình client server là với mô hình client server thì mọi thứ dường như đều nằm trên bàn của người sử dụng, nó có thể truy cập dữ liệu từ xa (bao gồm các công việc như gửi và nhận file, tìm kiếm thông tin,…) với nhiều dịch vụ đa dạng mà mô hình cũ không thể làm được. Mô hình client server cung cấp một nền tảng lý tưởng cho phép tích hợp các kỹ thuật hiện đại như mô hình thiết kế hướng đối tượng, hệ chuyên gia, hệ thông tin địa lý… b)Nhược điểm mô hình client server là gì?Một trong những vấn đề nảy sinh trong mô hình này đó là tính an toàn và bảo mật thông tin trên mạng. Do phải trao đổi dữ liệu giữa 2 máy ở 2 khu vực khác nhau cho nên dễ dàng xảy ra hiện tượng thông tin truyền trên mạng bị lộ.3.Tìm hiểu Firebase Realtime Database:Firebase Realtime database là một cloud hosted database hỗ trợ đa nền tảng: Android, IOS và Web. Tất cả dữ liệu được lưu trữ ở định dạng JSON và với bất kể một sự thay đổi dữ liệu nào thì có sự phản hồi ngay lập tức, hiển thị đồng bồ trên các nền tảng và các thiết bị. Hình 14. Mô hình hoạt động của Firebase Realtime Databasea)Dữ liệu được lưu trữ dạng Json:Firebase Realtime Database lưu trữ dữ liệu theo định dạng JSON. Về cơ bản thì toàn bộ dữ liệu là một cây JSON lớn cùng với nhiều điểm nút. Nên khi xây dựng dữ liệu, chúng ta cần chuẩn bị một cấu trúc json để dễ dàng cho việc truy cập tránh việc các nút con bị lồng nhau. Hình 15. Dữ liệu dạng JSONb) Realtime:Firebase Realtime Database sử dụng đồng bộ dữ liệu mối khi dữ liệu có thay đổi, mọi thiết bị được kết nối sẽ nhận được thay đổi trong vài mili giây. Hình 16. Sự đồng bộ dữ liệu giữa các thiết bịc)Dữ liệu offline:Khi người dùng ngoại tuyến, dữ liệu sẽ được lưu trên bộ nhớ cache của thiết bị và tự động đồng bộ khi thiết bị quay lại trực tuyến. Tất cả là tự động Hình 17. Dữ liệu ngoại tuyến được đồng bộ khi trực tuyến4.Tìm hiểu Firebase Cloud Messaging:a)Giới thiệu:Firebase Cloud Messaging (FCM) là một dịch vụ miễn phí của Google. Thông qua FCM, nhà phát triển ứng dụng có thể gửi thông điệp một cách nhanh chóng, an toàn tới các thiết bị cài đặt ứng dụng của họ.b)Cách thức hoạt động: Hình 18. Mô hình hoạt động Firebase Cloud MessagingTrên đây, hình 18 mô tả luồng hoạt động của Firebase Cloud Messaging.Server sẽ soạn thảo tin nhắn cần thông báo tới người sử dụng ứng dụng.Firebase sẽ chịu trách nhiệm gửi tới các thiết bị cài đặt ứng dụng.Như vậy, để các thiết bị có thể nhận được thông điệp, Firebase phải xác đinh thông qua một mã gọi là Token khi thiết bị cài đặt ứng dụng. CHƯƠNG 2: PHÂN TÍCH THIẾT KẾ HỆ THỐNG1.Yêu cầu bài toán Trang sv.dut.udn.vn (Hệ thống thông tin sinh viên Trường Đại học Bách Khoa Đại học Đà Nẵng), hiện tại có 4 vấn đề đang gặp phải:+Vấn đề về “Thông báo chung”: sự bất tiện của hệ thống này khi buộc sinh viên phải chủ động kiểm tra thông báo trên trang sv.dut.udn.vn. Đặc biệt vào mùa hè khi mà sinh viên vẫn đang nghỉ giải lao thì trường lại thông báo làm một số việc, khiến sinh viên bỏ lỡ.+Vấn đề về “TB lớp học phần”: Khi một giảng viên dạy bù hoặc nghỉ một buổi của học phần nào đó. Sẽ có thông báo trên trang đào tạo nhưng sinh viên chỉ chủ động liên tục kiểm tra ở trang web mới có thể biết được thông báo đó. Khắc phục nhược điểm trên giảng viên thường gửi mail đến lớp trưởng của lớp học đó. Nhưng đối với những sinh viên học trái lớp, học ghép, học vượt, … thì lại bị bỏ lỡ thông báo.+ Lịch học của các môn: Trang web thường xảy ra tình trạng không đăng nhập được. Nên rất khó xem lại lịch trong nhiều trường hợp.+ Tuần học hiện tại: Tuần học hiện là bao nhiêu thì rất mơ hồ. Chẳng hạn, thầy cô thường thông báo là tuần 34 thi giữa kỳ. Sinh viên không biết chắc chắn thời gian. Yêu cầu bài toán đặt ra: Khi trường thông báo một số công việc, thầy cô thông báo nghỉ học hoặc học bù, sinh viên không bỏ lỡ.2.Mô tả bài toánXây dựng ứng dụng Android thông báo từ việc lấy dữ liệu từ sv.dut.udn.vn:Xây dựng ứng dụng AndroidĐăng nhập và đăng xuấtNhận Thông báo chung”Nhận “Thông báo đến lớp học phần Xem lịch học các môn ngoại tuyếnLuôn hiển tuần học hiện tại là bao nhiêu, chính xác, ngoại tuyếnXem tổng hợp sơ bộ về kết quả học tập3.Thiết kế hệ thốngHệ thống gồm máy chủ và các máy điện thoại Android : Server :+ Xử lý thông báo: Mỗi thời gian 5 phút, sẽ thực hiện lấy dữ liệu thông báo sv.dut.udn.vn bằng giao thức HTTP+ Xử lý về tuần học: Mỗi 5 phút, lấy dữ liệu về tuần học từ dut.udn.vnLichTuan21 bằng giao thức HTTP+ Xử lý đăng nhập: Lấy thông tin đăng nhập của client gửi lên, gửi qua sv.dut.udn.vn để lấy thông tin và trả về kết quả đăng nhập.+ Lưu các dữ liệu vào Database MySQL về những thông báo, học phần sinh viên, điểm số của sinh viên, token của thiết bị,…+ Lưu các thông báo, tuần học, học phần của từng sinh viên trên Firebase Realtime Database để truy cập đồng thời nhiều sinh viên, đảm bảo thời gian truy cập ngắn+ Gửi thông điệp đến Firebase Cloud Messaging, để thông báo đẩy đến các thiết bị Android. Client (thiết bị Android) :+ Đăng nhập và đăng xuất: Gửi thông tin mã số sinh viên và mật khẩu lên server để yêu cầu đăng nhập.+ Nhận thông báo đẩy từ Firebase Cloud Messaging+ Xem thông báo, tuần học, học phần từ dữ liệu trên Firebase Realtime Database mà server đã đặt vào3.Sơ đồ hoạt độnga)Sơ đồ hoạt động Hình 19. Sơ đồ hoạt động của ứng dụngb) Mô tả sơ đồ: Quá trình đăng nhập:(1) Client gửi thông tin đăng nhập và token lên server(2) Server tiến hành lấy thông tin đăng nhập để lấy được thông tin sinh viên về thông tin cá nhân và học phần của sinh viên này(3.1) Lưu thông tin cá nhân, và học phần về cơ sở dữ liệu MySQL(3.2) Lưu học phần vào Firebase Realtime Database(3.3) Phản hồi kết quả đăng nhập Quá trình server xử lý thông báo:(4) Sau mỗi 30 phút, server tiến hành lấy dữ liệu thông báo từ trang sv.dut.udn.vn(5.1), (5.2) Dựa vào dữ liệu thông báo và dữ liệu sinh viên, tiến hành phân tích thông báo đến từng sinh viên(6.1) Lưu dữ liệu thông báo vào Firebase Realtime Database để client truy cập(6.2) Gửi thông báo và token lên Firebase Cloud Messaging(7) Firebase Cloud Messaging có nhiệm vụ phân phát thông báo đến clien dựa vào token Quá trình server xử lý dữ liệu về tuần học:(8) Sau mỗi 30 phút, server tiến hành lấy dữ liệu tuần học từ trang dut.udn.vnlichtuan21(9) Lưu dữ liệu tuần học về Firebase Realtime Database Quá trình client xem thông báo, lịch tuần và học phần:(10) Client lấy dữ liệu thông báo, lịch tuần và học phần dựa vào nút “Mã Sinh Viên“CHƯƠNG 3: TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT QUẢ1.Môi trường triển khaiHệ điều hành MacOS, AndroidNgôn ngữ: Java, XML, Javascript (Node JS) Trình soạn thảo: IDE Eclipse, Android Studio, Notepad++, WebStorm2.Các công việcTriển khai việc lấy dữ liệu từ trang sv.dut.udn.vn bằng giao thức HTTPTriển khai việc lấy dữ liệu tuần học từ dut.udn.vnLichTuan21Triển khai gửi thông tin đăng nhập từ client gửi qua sv.dut.udn.vn để đăng nhập, lấy thông tin sinh viên.Thiết kết cơ sở dữ liệu và triển khai kết nối cơ sở dữ liệu MySQL trên server để lưu thông tin về những thông báo, học phần sinh viên, điểm số của sinh viên, token của thiết bị,…Triển khai cấu hình Firebase Database Realtime để lưu các dữ liệu thông báo, học phần, tuần học. Qua đó, các thiết bị có thể truy cập đồng thời dữ liệu theo thời gian thực.Triển khai cấu hình các thông tin về Firebase Cloud Messaging trên server để đẩy các thông báo đẩy về cho các thiết bị. Mục đích để nhắc sinh viên có thông báo.3.Thiết kế giao diệna.Giao diện Client Giao diện đăng nhập: gồm ô nhập mã sinh viên, mật khẩu và nút đăng nhập Hình 20. Giao diện đăng nhậpGiao diện trang cá nhân, thống kê một số thông tin về sinh viên Hình 21. Giao diện xem thông tin cá nhânGiao diện thông báo chung: gồm các thông báo từ trường Hình 22. Giao diện xem danh sách thông báo chung và chi tiết một thông báo chungGiao diện thông báo từ thầy cô: bao gồm các thông báo từ lớp học phần Hình 23. Giao diện xem danh sách thông báo thầy cô và chi tiết một thông báo thầy côGiao diện xem học phần và tuần học: bao gồm một danh sách các học phần và một mục hiển thị số tuần hiện tại Hình 24: Giao diện xem học phần và tuần họcb.Giao diện ServerGiao diện: ghi lại nhật kí hoạt động của server Hình 25. Giao diện ghi nhật kí hoạt động của serverGiao diện các quan hệ trên cơ sở dữ liệu MySQL Hình 26. Cơ sở dữ liệu MySQL4.Kết quả chạy chương trìnhKhi trường có thông báo, thì server sẽ phân tích những thông báo nào thuộc đối tượng nào, sau để gửi thông điệp cho Firebase Cloud Messaging. Và kết quả là các thiết bị mà sinh viên đăng nhập sẽ nhận được thông báo như hình dưới đây. Hình 27. Kết quả chạy chương trình5.Đánh giáỨng dụng đã thông báo kịp thời những thông báo từ trường đăng lên, cũng như những thông báo của thầy côỨng dụng đã có thể xem lịch học ngoại tuyến khi trang sv.dut.udn.vn không truy cập được.Xem tuần học hiện tại là tuần thứ mấy ngoại tuyếnGiao diện ứng dụng dễ nhìn, dễ sử dụng.Đăng nhập còn khá chậm vì bước đăng nhập trải qua nhiều công đoạn (server lấy thông tin đăng nhập gửi lên lại sv.dut.udn.vn, nhận kết quả sau đó mới phản hồi về client)KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN1.Kết luận:Với việc phát triển ứng dụng này giúp em: Có thêm kinh nghiệm viết ứng dụng Android, hiểu rõ hơn về giao thức HTTP, cách mà để giao tiếp giữa các client và server. Cách kết nối MySQL và sử dụng MySQL để lưu trữ dữ liệu trên server. Nắm cơ bản về Firebase bao gồm Firebase Realtime Database và Firebase Cloud Messaging. Firebase Realtime Database thật sự rất thú vị khi mọi thứ lưu trữ trên nó điều có thể truy cập theo thời gian thực, tự động đồng bộ dữ liệu khi client đang ngoại tuyến quay lại trực tuyến. Nắm cơ bản về giao thức Websocket và thư viện Socket.io. Để giao tiếp giữa máy Android và server chạy bằng Nodejs. Mô hình clientserver là một mô hình nổi tiếng trong mạng máy tính, được áp dụng rất rộng rãi và là mô hình của nhiều ứng dụng di động hiện có. Vì vậy, được tìm hiểu về mô hình này là một điều rất thú vị và bổ ích cho em.2.Hướng phát triển: Cải tiến về giao diện đẹp hơn, thời gian đăng nhập ứng dụng nhanh hơn. Tối ưu hóa mã nguồn trên máy chủ, cải thiện các câu truy vấn trên MySQL. Bằng những trải nghiệm về việc học ở Trường Đại học Bách Khoa Đại học Đà Nẵng vào những thời còn lại cuối cùng của em, em có thể sẽ phát triển thêm một số tính năng mới để giúp sinh viên có thể có những trải nghiệm học tập tốt hơn.Ví dụ: Bổ sung ứng dụng thêm chức năng nhắn tin ngay trên ứng dụng cho những sinh viên cùng lớp học phần. Vì hiện tại những bạn học khác nhóm (học lại, học cải thiện) vào học chung thường rất thiệt thòi về việc thảo luận, chia sẽ tài liệu học tâp,...KẾT LUẬN CHUNG Việc tìm hiểu cách giải quyết xung đột giữa các tiến trình khi cùng truy cập vào một vùng nhớ được chia sẻ tại cùng một thời điểm đã giúp em hiểu rõ hơn về đặc điểm cũng như cách tiếp cận giải quyết các vấn đề khác tương tự. Việc xây dựng ứng dụng android hỗ trợ một phần nào đó nâng cao về trải nghiệm của sinh viên khi học tại trường, giúp sinh viên có thể theo dõi lịch học, lịch tuần, thông báo phòng đào tạo, thông báo từ lớp học phần mà không bỏ lỡ. Mô hình client server là một mô hình nổi tiếng trong mạng máy tính, được áp dụng rất rộng rãi và là mô hình của nhiều ứng dụng di động hiện có. Vì vậy, được tìm hiểu về mô hình này là một điều rất thú vị và bổ ích cho em.TÀI LIỆU THAM KHẢOPhần 1: Nguyên lý hệ điều hành1 Readers Writer Problem in OS | Studytonight(https:www.studytonight.comoperatingsystemreaderswriterproblem)2 Solution to Readerswriters problem using Binary semaphore(https:www.youtube.comwatch?v=Zdzp5k3eSYgt=844s)Phần 2: Lập trình mạng1 Beej Guide to Network Programming By www.LearnEngineering.in2 Tìm hiểu về HTTP HyperText Transfer Protocol(https:viblo.asiaptimhieuvehttphypertexttransferprotocolbJzKmgewl9N)3 Bài 18 Giới thiệu cơ bản về NodeJS(https:duythanhcse.wordpress.com20180621bai18gioithieucobanvenodejs)4 Hướng dẫn bắn notification bằng FCM (FireBase Cloud Messaging) API(https:viblo.asiaphuongdanbannotificationbangfcmfirebasecloudmessagingapi63vKj6yAK2R)5 Làm việc với Firebase Realtime Database(https:viblo.asiaplamviecvoifirebaserealtimedatabaseZjlvalVXkqJ)PHỤ LỤCPhần 1: Nguyên lý hệ điều hành:a)Lớp TienTrinhWriter:public class TienTrinhWriter extends JFrame implements Runnable {public Label l1;public Ref ref;public TaiLieu tailieu;public TienTrinhWriter(int name, int x, int y, Ref ref, TaiLieu tailieu) {this.ref = ref;this.tailieu = tailieu;this.setTitle(Writer: + name);this.setSize(400, 200);this.setDefaultCloseOperation(3);this.setLocation(x, y);this.getContentPane().setBackground(Color.decode(ffddb0));l1 = new Label();this.add(l1);this.show();}Overridepublic void run() {try {wait(ref.w);String nd =Nội dung + rd.nextInt(10000);l1.setText(Tôi đang ghi dữ liệu: +nd ); Thread.sleep(10000);tailieu.noidung = Nội dung + nd;this.hide();signal(ref.w);l1.setText();} catch (Exception e) {}}private void signal(Value a) {a.value=1;}private void wait(Value a) {try {if (a.value