TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀNTHÔNG VIỆT – HÀN KHOA KHOA HỌC MÁY TÍNH BÁO CÁO Học phần: Lập trình hệ thống Đồ án: Chương trình C minh họa quá trình tạm dừng và tiếp tục sử
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN
THÔNG VIỆT – HÀN KHOA KHOA HỌC MÁY TÍNH
BÁO CÁO Học phần: Lập trình hệ thống
Đồ án: Chương trình C minh họa quá trình tạm dừng và tiếp tục
sử dụng tín hiệu
Nhóm sinh viên thực hiện: 21IT326 – Nguyễn Quang Bảo
21IT589 – Nguyễn Thế Anh 21IT393 – Trần Văn Đức Anh 21IT396 – Trần Phạm Quốc Bảo
Giảng viên hướng dẫn: TS Hoàng Hữu Đức
Đà Nẵng, 10 tháng 10 năm 2023
Trang 2TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN
THÔNG VIỆT – HÀN KHOA KHOA HỌC MÁY TÍNH
BÁO CÁO Học phần: Lập trình hệ thống
Đồ án: Chương trình C minh họa quá trình tạm dừng và tiếp tục
sử dụng tín hiệu
Nhóm sinh viên thực hiện: 21IT326 – Nguyễn Quang Bảo
21IT589 – Nguyễn Thế Anh 21IT393 – Trần Văn Đức Anh 21IT396 – Trần Phạm Quốc Bảo
Giảng viên hướng dẫn: TS Hoàng Hữu Đức
Đà Nẵng, 10 tháng 10 năm 2023
Trang 3LỜI MỞ ĐẦU
Trong thời đại số hóa ngày nay, công nghệ thông tin và việc tin học hoá đang trở thành một trong những yếu tố quyết định quan trọng đối với chính phủ, tổ chức và doanh nghiệp Chúng đóng vai trò quan trọng trong việc thúc đẩy các bước tiến lớn và mang lại hiệu quả cao Sự phát triển nhanh chóng của kỹ thuật máy tính và mạng điện
tử đã đánh dấu sự ra đời liên tiếp của các công nghệ mới Bây giờ, việc truy cập thông tin đã trở nên dễ dàng hơn bao giờ hết, chỉ cần một chiếc điện thoại thông minh kết nối internet và nhập từ khoá liên quan đến vấn đề bạn quan tâm, bạn sẽ có ngay trước mắt toàn bộ thế giới về chủ đề đó, với đầy đủ thông tin, hình ảnh và thậm chí cả âm thanh nếu cần Thông qua internet, chúng ta đã thực hiện được nhiều công việc với tốc độ nhanh hơn và chi phí thấp hơn so với các phương thức truyền thống Một nền tảng phổ biến nhất hiện nay chính là các ứng dụng di động Có vô số lĩnh vực ứng dụng trên nền tảng di động như quản lý nhân sự, thương mại điện tử, y tế, giáo dục và đào tạo, giải trí và vui chơi, v.v.
Trong học phần này, với mục đích tìm hiểu về nền tảng Zabbix để giám sát và quản lý hệ thống và mạng, nhóm chúng em tìm hiểu và cấu hình thành công và quản lý trên nền tảng Zabbiz.
Trang 4LỜI CẢM ƠN
Để làm ra sản phẩm này, nhóm chúng em đã nhận được sự hỗ trợ, giúp đỡ rất nhiều từ giảng viên hướng dẫn – thầy TS, Hoàng Hữu Đức Với tình cảm sâu sắc, chân thành, cho phép em được bày tỏ lòng biết ơn sâu sắc đến thầy và tất cả các bạn trong nhóm đã cùng nhau giúp đỡ, cùng nhau nghiên cứu trong suốt quá trình thực hiện đồ án Với điều kiện thời gian cũng như kinh nghiệm còn hạn chế, bản báo cáo này không thể tránh khỏi những thiếu sót Chúng em rất mong nhận được sự chỉ bảo, đóng góp ý kiến từ các thầy cô, từ đó chúng em có thể bổ sung, nâng cao ý thức của mình, phục vụ tốt hơn cho các dự án sau này Nhóm chúng em xin chân thành cảm ơn!
Trang 5BẢNG PHÂN CÔNG NHIỆM VỤ
Trang 6MỤC LỤC
CHƯƠNG 1 GIỚI THIỆU 1
1.1 Tổng quan đồ án 1
1.1.1 Tên đồ án 1
1.1.2 Lý do chọn đồ án 1
1.1.3 Nội dung cần thực hiện 2
1.2 Cấu trúc báo cáo 3
CHƯƠNG 2 NGHIÊN CỨU TỔNG QUAN 4
2.1 Công cụ và hệ điều hành hỗ trợ 4
2.1.1 Công cụ hỗ trợ 4
2.1.2 Hệ điều hành hỗ trợ 5
2.2 Tìm hiểu về các công nghệ cần sử dụng 7
2.2.1 Giới thiệu về C 7
2.2.2 Ưu điểm và nhược điểm của C 8
2.2.3 Giới thiệu về Vim 10
2.3 Tìm hiểu về các tín hiệu 11
2.3.1 Tín hiệu SIGINT 11
2.3.2 Tín hiệu SIGTSTP 12
2.3.3 Tín hiệu SIGALRM 13
2.3.4 Tín hiệu SIGCONT 14
CHƯƠNG 3 XÂY DỰNG CHƯƠNG TRÌNH 16
3.1 Phân tích 16
3.1.1 Thuật toán 16
3.1.2 Mã nguồn 17
3.2 Kết quả chương trình 20
KẾT LUẬN 24 Kết quả chưa đạt được 24
Hướng phát triển 24
Bài học kinh nghiệm 25
Trang 7TÀI LIỆU THAM KHẢO 26
HÌNH ẢN
Trang 8Hình 1 Oracle VM VitualBox là gì? 4
Hình 2 Giao diện Ubuntu trông như thế nào 6
Hình 3 Ngôn ngữ C là gì 7
Hình 4 Giao diện Vim trông như thế nào 10
Hình 5 Biên dịch và thực thi chương trình 21
Hình 6 Giao diện minh họa ban đầu của chương trình 21
Hình 7 Giao diện khi nhận được tín hiệu tạm dừng 22
Hình 8 Giao diện khi nhận được tín hiệu tiếp tục 22
Hình 9 giao diện khi kết thúc chương trình 23
Trang 9CHƯƠNG 1 GIỚI THIỆU
- Học về xử lý tín hiệu trong C: Đồ án này giúp người học hiểu rõ hơn về cách xử
lý tín hiệu trong ngôn ngữ lập trình C Việc hiểu về tín hiệu là quan trọng trongviệc quản lý quá trình và tương tác giữa các tiến trình trong hệ thống
- Hiểu về tiến trình (process) và quản lý tiến trình: Để tạm dừng và tiếp tục mộttiến trình, bạn cần hiểu cách tiến trình hoạt động và cách chúng tương tác vớinhau Đây là một khía cạnh quan trọng của lập trình hệ thống
- Ứng dụng trong thực tế: Chức năng tạm dừng và tiếp tục tiến trình là quan trọngtrong việc quản lý tài nguyên hệ thống và đảm bảo tính ổn định của các ứngdụng Việc xây dựng chương trình minh họa giúp bạn thấy rõ tác dụng thực tếcủa việc này
- Nâng cao kỹ năng lập trình: Việc xây dựng một chương trình minh họa yêu cầubạn thực hành kỹ năng lập trình C của mình, từ việc xử lý tín hiệu đến quản lýtiến trình
Chọn đồ án này cũng giúp phát triển khả năng debugging và gỡ lỗi, vì việc làmviệc với tín hiệu có thể tạo ra nhiều vấn đề thú vị và phức tạp
Sử dụng tín hiệu là một phần quan trọng của việc quản lý tiến trình trong hệthống, và nó có vai trò quan trọng trong việc đảm bảo ổn định và hiệu quả củacác ứng dụng và hệ thống Chương trình này được chọn để giúp bạn hiểu rõ hơn
về cách sử dụng tín hiệu để kiểm soát các tiến trình và tạo ra các ứng dụng ổnđịnh trong môi trường Linux
Chúng ta sẽ bắt đầu bằng việc giới thiệu cơ bản về tín hiệu, sau đó thực hiệnmột số ví dụ cụ thể để minh họa cách sử dụng chúng để tạm dừng và tiếp tục
Trang 10các tiến trình Hy vọng rằng chương trình này sẽ giúp bạn nắm vững kiến thức
về việc sử dụng tín hiệu trong lập trình hệ thống
1.1.3 Nội dung cần thực hiện
- Chương trình C mà bạn đã cung cấp là một minh họa rất tốt về cách sử dụng tínhiệu để tạm dừng và tiếp tục quá trình thực hiện Mục tiêu chính của chươngtrình này là thể hiện cách:
Sử dụng tín hiệu SIGTSTP (Ctrl+Z) để tạm dừng và tiếp tục chương trình
Sử dụng tín hiệu SIGINT (Ctrl+C) để kết thúc chương trình
Sử dụng tín hiệu SIGALRM để tạo thông báo định kỳ và quản lý thời gian
- Dưới đây là mô tả chi tiết về cách chương trình thực hiện việc tạm dừng và tiếptục:
Chương trình bắt đầu bằng việc đăng ký xử lý tín hiệu SIGTSTP (Ctrl+Z) vàSIGINT (Ctrl+C) bằng cách sử dụng hàm signal() Nó cũng đăng ký hàm xử
lý tín hiệu SIGALRM để tạo thông báo định kỳ và quản lý thời gian
soát việc tiếp tục thực hiện hoặc kết thúc chương trình
Khi tín hiệu SIGALRM (được tạo ra bởi hàm alarm()) kích hoạt, hàmsig_alarm() được gọi Hàm này cập nhật trạng thái và hiển thị thông báo tùythuộc vào trạng thái hiện tại của chương trình
Hàm này kiểm tra trạng thái của chương trình và tạm dừng hoặc tiếp tục nótùy thuộc vào tình huống hiện tại
Hàm này kiểm tra trạng thái của chương trình và tạm dừng nó nếu nó đangchạy hoặc kết thúc nó nếu nó đang tạm dừng
Chương trình in ra bảng theo dõi trạng thái và tín hiệu, cung cấp một giao diệncho người dùng tương tác với chương trình bằng cách tạm dừng, tiếp tục hoặckết thúc nó Điều này minh họa cách tín hiệu có thể được sử dụng để kiểm soát
Trang 11quá trình chạy của một ứng dụng và tạo ra một giao diện tương tác với ngườidùng.
1.2 Cấu trúc báo cáo
Trang 12CHƯƠNG 2 NGHIÊN CỨU TỔNG QUAN2.1 Công cụ và hệ điều hành hỗ trợ
Phát triển và Kiểm tra ứng dụng đa nền tảng: Oracle VM VirtualBox cho phépbạn tạo các máy ảo chứa các hệ điều hành khác nhau (như Linux, Windows,
Trang 13macOS) trên cùng một máy tính vật lý Điều này giúp bạn phát triển và kiểm traứng dụng đa nền tảng mà không cần cài đặt thực tế trên các máy tính vật lýkhác nhau.
Môi trường kiểm tra an toàn: Bạn có thể tạo ra các máy ảo cô lập để kiểm tracác ứng dụng hoặc phần mềm độc hại mà không ảnh hưởng đến máy tính chínhcủa bạn Điều này giúp bảo vệ máy tính và dữ liệu của bạn khỏi các rủi ro
Tạo môi trường phát triển độc lập: VirtualBox cho phép bạn tạo các máy ảo cócấu hình độc lập, bao gồm phân bổ tài nguyên như CPU, RAM và bộ nhớ đệm
ổ cứng Điều này giúp bạn xây dựng môi trường phát triển tiêu chuẩn cho cácthành viên trong nhóm, đảm bảo tính đồng nhất trong quá trình phát triển
Hỗ trợ cho việc đảm bảo sẵn sàng và khôi phục dự phòng: Bạn có thể tạo bảnsao lưu của máy ảo và tạo các điểm dừng (snapshot) để đảm bảo sẵn sàng vàkhôi phục nhanh chóng trong trường hợp xảy ra sự cố
2.1.2 Hệ điều hành hỗ trợ
- Hệ điều hành được sử dụng để xây dựng chương trình là Ubuntu
- Ubuntu là một hệ điều hành máy tính dựa trên Debian GNU/Linux, một bảnphân phối các ứng dụng Linux Tên của nó bắt nguồn từ từ "ubuntu" trong tiếngZulu, có nghĩa là "tình yêu con người", mô tả triết lý ubuntu: "Tôi có thể làchính mình nhờ những người xung quanh", một khía cạnh tích cực của cộngđồng Mục đích của Ubuntu bao gồm việc cung cấp một hệ điều hành ổn định,cập nhật cho người dùng thông thường và tập trung vào việc dễ sử dụng và càiđặt Ubuntu được đánh giá là bản phân phối thông tin ứng dụng Linux tốt nhấtcho máy tính để bàn, chiếm khoảng 30% bản phân phối Linux được cài đặt trênmáy tính để bàn trong năm 2007
- Ubuntu là phần mềm mã nguồn mở và miễn phí, có nghĩa là người dùng có thể
tự do chạy, sao chép, phân phối, nghiên cứu, thay đổi và cải tiến phần mềm theocác điều khoản của giấy phép GNU GPL Ubuntu được tài trợ bởi Canonical Ltd (chủ sở hữu là Mark Shuttleworth người Nam Phi) Thay vì bán Ubuntu, Canonical tạo doanh thu bằng cách bán hỗ trợ kỹ thuật Bằng cách để Ubuntu tự
Trang 14làm và có nguồn mở, Canonical có thể tận dụng tài năng của các nhà phát triển bên ngoài trong các thành phần cấu trúc của Ubuntu mà không cần phải tự phát triển nó.
- Bản phát hành đầu tiên của Ubuntu là vào ngày 20 tháng 10 năm 2004, bắt đầu bằng việc tạo ra một nhánh tạm thời của dự án Debian Linux Điều này được thực hiện để phiên bản Ubuntu mới có thể được phát hành 6 tháng một lần, tạo
ra một hệ điều hành được cập nhật thường xuyên hơn Các bản phát hành Ubuntu luôn bao gồm phiên bản mới nhất của Gnome và dự kiến sẽ được phát hành sau Gnome khoảng một tháng Không giống như các nhánh có mục đích chung trước đây của Debian - chẳng hạn như MEPIS, Xandros, Linspire, Progeny và Libranet, nhiều nhánh trong số đó dựa vào phần mềm bổ sung để đóng mô hình kinh doanh Ubuntu giống triết lý của Debian hơn và luôn sử dụng phần mềm miễn phí (libre)
Hình 2 Giao diện Ubuntu trông như thế nào.
- Dưới đây là một số điểm quan trọng về Ubuntu:
Mã nguồn mở: Ubuntu là một hệ điều hành mã nguồn mở, điều này có nghĩa là
mã nguồn của nó có sẵn cho cộng đồng phát triển và sửa lỗi
Trang 15 Giao diện người dùng: Ubuntu có một số biến thể giao diện người dùng, trong
đó GNOME là môi trường giao diện mặc định của phiên bản chính thức Ngoài
ra, còn có các biến thể như Kubuntu (sử dụng KDE), Xubuntu (sử dụng Xfce)
và nhiều biến thể khác
Cửa hàng ứng dụng: Ubuntu Software Center (hoặc GNOME Software) là nơibạn có thể dễ dàng tìm kiếm và cài đặt các ứng dụng và phần mềm từ kho lưutrữ của Ubuntu
Hỗ trợ cộng đồng: Ubuntu có một cộng đồng lớn và nhiều nguồn tài liệu trựctuyến Người dùng Ubuntu có thể tìm kiếm thông tin, giải đáp câu hỏi và nhận
2.2 Tìm hiểu về các công nghệ cần sử dụng 2.2.1 Giới thiệu về C
- Ngôn ngữ lập trình C là một trong những ngôn ngữ lập trình cơ bản và quantrọng trong lĩnh vực lập trình hệ thống
Trang 16 Lịch sử: Ngôn ngữ C được tạo ra vào những năm 1970 bởi Dennis Ritchie tạiBell Labs Ban đầu, nó được phát triển để viết hệ điều hành UNIX, và sau đó đãtrở thành một trong những ngôn ngữ phổ biến nhất trong lĩnh vực lập trình hệthống và nhúng.
Mã nguồn mở: Ngôn ngữ C có bản chất mã nguồn mở, điều này có nghĩa là bất
kỳ người nào cũng có thể truy cập và sửa đổi mã nguồn của nó Điều này đã tạo
ra một cộng đồng phát triển mạnh mẽ và nhiều thư viện mã nguồn mở phongphú dành cho C
Hiệu năng: C là một ngôn ngữ gần gũi với máy tính và cung cấp kiểm soát tối
ưu về hiệu năng Điều này làm cho nó trở thành lựa chọn lý tưởng cho việc viếtcác ứng dụng yêu cầu hiệu năng cao như hệ điều hành, trình điều khiển, vàphần mềm nhúng
Tính di động: Chương trình viết bằng C có thể chạy trên nhiều nền tảng khácnhau mà không cần thay đổi mã nguồn Điều này làm cho C trở thành một công
cụ mạnh mẽ trong việc phát triển phần mềm đa nền tảng
Hệ thống lớn: Có thể viết hệ thống lớn và phức tạp bằng ngôn ngữ C, và nó đãđược sử dụng trong việc phát triển nhiều hệ điều hành nổi tiếng như Linux,Windows, và macOS
Trang 17 Tiêu chuẩn: Có một tiêu chuẩn chung cho ngôn ngữ C, gọi là "ANSI C" hoặc
"ISO C." Điều này đảm bảo tính di động và tương thích giữa các trình biên dịch
2.2.2 Ưu điểm và nhược điểm của C
- Ưu điểm của C:
Hiệu năng: C được thiết kế để hoạt động gần gũi với phần cứng, điềunày làm cho nó rất hiệu quả trong việc sử dụng tài nguyên máy tính Vớiquản lý bộ nhớ thủ công và truy cập trực tiếp vào phần cứng, C cho phéplập trình viên tối ưu hóa hiệu năng ứng dụng
Di động: Chương trình C có thể chạy trên nhiều nền tảng khác nhau màkhông cần sửa đổi mã nguồn Điều này làm cho C phù hợp cho việc pháttriển ứng dụng đa nền tảng
Kiểm soát cấp thấp: Cung cấp khả năng kiểm soát tối ưu về phần cứng
và tài nguyên hệ thống Điều này là quan trọng trong việc phát triển hệthống nhúng và hệ điều hành
Mã nguồn mở và thư viện phong phú: Có nhiều thư viện mã nguồn mở
và tiêu chuẩn cho C, giúp lập trình viên tiết kiệm thời gian và công sứctrong việc phát triển ứng dụng
Hệ thống lớn: Có thể sử dụng C để phát triển hệ thống lớn và phức tạpnhư hệ điều hành và các phần mềm nhúng
- Nhược điểm của C:
Trang 18 Phức tạp hơn cho ứng dụng đơn giản: Có thể cần nhiều dòng mã hơn đểthực hiện các tác vụ cơ bản so với một số ngôn ngữ khác Điều này cóthể dẫn đến mã nguồn phức tạp hơn cho các ứng dụng đơn giản.
Quản lý bộ nhớ thủ công: Trong C, bạn phải quản lý bộ nhớ thủ công,bao gồm cả việc phân bổ và giải phóng bộ nhớ Điều này có thể dẫn đếnlỗi như rò rỉ bộ nhớ hoặc lỗi trỏ
Khó khăn trong bảo mật: C không cung cấp cơ chế bảo mật tích hợp, vàviệc quản lý bảo mật có thể phức tạp hơn đối với các ứng dụng lớn vàphức tạp
Khả năng thấp trong xử lý chuỗi và văn bản: C không cung cấp nhiềutính năng tích hợp cho xử lý chuỗi và văn bản, điều này có thể làm choviệc làm việc với dữ liệu văn bản phức tạp hơn so với một số ngôn ngữkhác
Khó hiểu và dễ gây lỗi: Có thể dễ dàng gặp lỗi như tràn bộ đệm, truyxuất đối tượng không hợp lệ, và lỗi trỏ trong C, và việc gỡ lỗi có thểphức tạp hơn
2.2.3 Giới thiệu về Vim
- Vim là một trình soạn thảo văn bản mạnh mẽ và phổ biến trong hệ điềuhành Linux và các hệ thống Unix Nó được thiết kế để làm việc với vănbản, mã nguồn, và tập tin văn bản khác Vim có nhiều tính năng mạnh mẽ
và được yêu thích bởi nhiều lập trình viên và quản trị hệ thống vì khảnăng tùy chỉnh cao và hiệu suất nhanh
- Vim là một trình soạn thảo văn bản mạnh mẽ trong Linux và hệ thốngUnix, và nó có thể được sử dụng để viết và chỉnh sửa mã nguồn C cũngnhư chạy code C
Trang 19- Dưới đây là một số chức năng của Vim khi bạn sử dụng nó để làm việcvới code C:
Soạn thảo và chỉnh sửa code: Vim cung cấp môi trường để bạn có thể soạn thảo
và chỉnh sửa mã nguồn C một cách dễ dàng Bạn có thể nhập và sửa code trongchế độ chỉnh sửa (insert mode) và di chuyển trong chế độ bình thường (normalmode)
Tô sáng cú pháp: Vim hỗ trợ tô sáng cú pháp cho nhiều ngôn ngữ lập trình, baogồm C Điều này giúp làm nổi bật cú pháp và cú pháp của code, làm cho code