TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘIVIỆN ĐIỆN TỬ - VIỄN THÔNG BÁO CÁO THỰC TẬP KĨ THUẬT Chủ đề: Tìm hiểu về hệ điều hành Linux và lập trình C trên hệ điều hành Linux Cơ sở thực tập: Công ty
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN ĐIỆN TỬ - VIỄN THÔNG
BÁO CÁO THỰC TẬP KĨ THUẬT
Chủ đề:
Tìm hiểu về hệ điều hành Linux và lập trình C trên
hệ điều hành Linux
Cơ sở thực tập: Công ty cổ phần G-Innovation Việt Nam
Sinh viên thực tập: Phạm Đình Doanh
Mã số sinh viên: 20182910
Lớp: CTTT Điện tử 01
Trang 2Hà Nội, 9-2021
Trang 3LỜI NÓI ĐẦU
Hiện nay khoa học kĩ thuật trên thế giới đang ngày càng phát triển mạnh mẽ Khoahọc kĩ thuật đóng vai trò không thể thiếu trong đời sống hiện đại ngày nay của chúngta
nó hiện diện trong từng sản phẩm, từng vật dụng mà chúng ta sử dụng hàng ngày Tốc
độ phát triển của khoa học kĩ thuật ngày nay có thể tính theo từng ngày từng giờ trêntoàn cầu và Việt Nam chúng ta cần phải rất nỗ lực để có thể bắt kịp tốc độ phát triểnđó
Vì vậy việc học tập và đạo tạo, kế thừa và phát triển những thành tựu khoa học cho thế
hệ mới ngày nay là vô cùng quan trọng đặc biệt là thế hệ sinh viên Việc tiếp cận đócần
phải tiếp cận cả về mặt lí thuyết lẫn thực hành ngoài thực tế, như vậy việc học tập vàđào tạo mới có thể đạt được hiệu quả tốt nhất, đáp ứng được cho xã hội nguồn nhânlực
khoa học kĩ thuật chất lượng cao Nhờ đó em nhận thức được việc cần phải học tậptrau
dồi không chỉ là kiến thức trên giảng đường mà còn phải áp dụng những kiến thức đóvào thực tế Do đó việc tổ chức thực tập ở các doanh nghiệp cho sinh viên từ sớm rấtquan trong là một lợi thế rất lớn cho sinh viên sau khi ra trường có thể đáp ứng ngayđược nhu cầu nhân lực chất lượng của doanh nghiệp
Trong quá trình thực tập, em học được rất nhiều kiến thức, không chỉ có những kiếnthức chuyên môn đơn thuần mà còn nhiều những kĩ năng khác mà một người kĩ sưtương
lai nhất định phải có như: kĩ năng làm việc nhóm, kĩ năng trình bày, kĩ năng viết tàiliệu,
Trang 4kĩ năng giải quyết vấn đề khi gặp khó khăn,… Từ đó giúp em hoàn thiện bản thânmình
hơn, làm quen với môi trường làm việc ngoài doanh nghiệp
Khi thực tập tại doanh nghiệp trong thời điểm dịch bệnh, em gặp khá nhiều khókhăn khi tiếp cận môi trường mới cùng với hạn chế về mặt kiến thức của sinh viênnăm 3 Nhờ sự quan tâm hướng dẫn tận tình của thầy cô, sự giúp đỡ của các anh chịtrên công ty đã tạo điều kiện giúp em hoàn thanh tốt nhiệm vụ thực tập của mình
Em xin chân thành cảm ơn Ban lãnh đạo Viện Điện tử - Viễn thông đã tạo điều kiệncho chúng em có thể thực tập thực tế ở các doanh nghiệp Em xin cảm ơn ban lãnh đạo
và các anh chị Công ty cổ phần GInnovations Việt Nam đã tận tình hướng dẫn và hỗtrợ
em trong quá trình thực tập giúp em hoàn thành tốt đợt thực tập này
Em xin chân thành cảm ơn!
Trang 5MỤC LỤC
DANH MỤC HÌNH VẼ i
CHƯƠNG 1 GIỚI THIỆU CHỨC NĂNG, NHIỆM VỤ, CƠ CẤU CỦA ĐƠN VỊ TIẾP NHẬN 2
1.1 Cơ cấu tổ chức của đơn vị tiếp nhận 2
1.2 Hướng nghiên cứu 3
CHƯƠNG 2 NỘI DUNG THỰC TẬP 4
2.1 Đặt vấn đề 4
2.2 Mô tả đề tài 4
2.3 Nội dung kiến thức đã được tìm hiểu 4
2.3.1 Giới thiệu về hệ điều hành linux 4
2.3.2 System call 5
2.3.3 File Input/Output 6
2.3.4 Quản lý tiến trình 6
2.3.5 Thread trong linux 8
2.3.6 Quản lý bộ nhớ 10
CHƯƠNG 3 NHẬN XÉT VÀ ĐỀ XUẤT 12
3.1 Ưu điểm 12
3.2 Nhược điểm 12
3.3 Đề xuất 12
CHƯƠNG 4 KẾT LUẬN 13
CHƯƠNG 5 TÀI LIỆU THAM KHẢO 14
ĐÁNH GIÁ BÁO CÁO 15
Trang 6DANH MỤC HÌNH VẼ
Hình 2.1 hàm sys_open() trong /fs/open.c 5
Hình 2.2 Vị trí các đối số SEEK_X trong lseek() 6
Hình 2.3 Cấu trúc bộ nhớ của một tiến trình 7
Hình 2.4 Hàm tạo tiến trình 7
Hình 2.5 Hàm chạy chương trình 8
Hình 2.6 Hàm kết thúc tiến trình 8
Hình 2.7 Tiến trình single-thread và multi-thread 9
Hình 2.8 Tổ chức bộ nhớ của tiến trình có 4 thread (Linux/x86-32) 9
Hình 2.9 Hàm tạo thread 10
Hình 2.10 Hàm kết thúc thread 10
Hình 2.11 Page Table của một tiến trình 11
Hình 2.12 File memory mapping 11
i
Trang 7CHƯƠNG 1 GIỚI THIỆU CHỨC NĂNG, NHIỆM VỤ, CƠ CẤU
CỦA ĐƠN VỊ TIẾP NHẬN
1.1 Cơ cấu tổ chức của đơn vị tiếp nhận
Công ty cổ phần G-Innovations Việt Nam là công ty công nghệ cao hoạt động tronglĩnh vực nghiên cứu phát triển các thiết bị và giải pháp IoT, bảo mật và trí tuệ nhântạo Công ty đang triển khai các giải pháp bảo mật dữ liệu cá nhân, chấm điểm tíndụng cá nhân và các giải pháp IoT
Công ty cổ phần G-Innovations bao gồm các phòng ban chức năng như sau:
1) Ban giám đốc chịu trách nhiệm điều hành chung và đưa ra các chiến lượchoạt động cho công ty
2) Bộ phần nghiên cứu phát triển gồm các phòng ban:
a) Phòng nghiên cứu phát triểnb) Phòng thiết kế phần cứng c) Phòng phát triển phần mềm d) Phòng thiết kế kiểu dáng và cơ khí e) Phòng thí nghiệm an toàn thông tin3) Bộ phận back office bao gồm các phòng ban:
a) Phòng mua hàng b) Phòng tài chính kế toán c) Phòng hỗ trợ phát triển con người Các vị trí công việc trong công ty, yêu cầu chuyên môn, kỹ năng của từng vị trí.Tại công ty Ginnovation ngoài các vị trí trong bộ phận hỗ trợ hoạt động (back-office), các vị trí kĩ thuật hoạt động trong lĩnh vực nghiên cứu phát triển là:
a) Kỹ sư thiết kế phần cứng: yêu cầu các kiến thức cơ bản về mạch điện tử, kỹnăng sử dụng các phần mềm thiết kế mạch, kỹ năng sử dụng các công cụdụng cụ trong sửa chữa gỡ lỗi mạch như mỏ hàn, đồng hồ vạn năng, máyhiện sóng, máy phân tích nguồn
ii
Trang 8b) Kỹ sư phát triển phần mềm: Yêu cầu các kiến thức về thuật toán, cấu trúc dữliệu, kiến trúc máy tính, vi xử lý, hệ điều hành nhúng (Linux, Android) Các
kỹ năng sử dụng các phần mềm biên dịch xuyên nền tảng, cấu hình hệ thống,
gỡ lỗi phần mềm Các quy trình phát triển phần mềm Agile, Scrum,
c) Kỹ sư thiết kế anten: Yêu cầu các kiến thức cơ bản về trường điện tử, antenvà
truyền sóng Có các kỹ năng sử dụng các phần mềm thiết kế anten, kỹ năngchế tạo và đo kiểm anten, sử dụng các máy phân tích phổ, máy phân tíchmạng vector
d) Kỹ sư thiết kế cơ khí: Yêu cầu các kiến thức về kết cấu vật liệu, kết cấu cơkhí
Kỹ năng sử dụng các phần mềm thiết kế cơ khí Hiểu biết về gia công cơ khí,
có khả khả năng sử dụng các công cụ, dụng cụ trong lắp ráp cơ khí
1.2 Hướng nghiên cứu
Công ty Ginnovations hoạt động trong lĩnh vực điện tử viễn thông, thực hiện việc thiết
kế mạch điện tử, phát triển phần mềm nhúng và phần mềm PC, sản xuất các thiết bịđiện tử viễn thông
iii
Trang 9CHƯƠNG 2 NỘI DUNG THỰC TẬP
Chương này trình bày tổng quan về đề tài thực hành, những nội dung đã làm đượctrong quá trình thực tập
2.1 Đặt vấn đề
Bên cạnh sự phát triển khoa học công nghệ nói chung thì một công nghệ không thểthiếu, nằm trong hầu hết các sản phẩm công nghệ hiện nay, cần phải đặc biệt quan tâmtới đó là lập trình nhúng, và đang trở nên phổ biến hơn là nhúng trên các thiết bị chạytrên hệ điều hành linux
Linux embedded là gì? Đó là những hệ thống embedded mà người ta chạy hệ điềuhành Linux lên đó Linux embedded có những ưu điểm mà một hệ thống nhúng theodạng code thuần vi điều khiển không có Tính năng của nó đa dạng hơn rất nhiều, thờigian phát triển ứng dụng nhanh, được hỗ trợ nhiều từ các thư viện có sẵn trên mạng.Khả năng multi media mạnh, có khả năng tái sử dụng giữa các platform khác nhau.Hiện tại ở Việt Nam ước tính có khoảng 1 đến 2 nghìn người làm về Linux embedded,nhưng phần lớn mọi người đều tập trung ở tầng application Cái này do khả năng củachúng ta vẫn chưa đáp ứng được cho việc lập trình dưới tầng kernel Số người có côngviệc chính là lập trình dưới tầng kernel chỉ khoảng 10% con số trên
2.2 Mô tả đề tài
Trong thời gian thực tập em được làm quen với hệ điều hành linux, thực hiện lập trình
C trên hệ điều hành linux, làm các bài tập liên quan đến lập trình C, học các kiến thứckiến thức basic về hệ điều hành như file system, lập lịch, virtual memory
2.3 Nội dung kiến thức đã được tìm hiểu
2.3.1 Giới thiệu về hệ điều hành linux
Linux là một hệ điều hành máy tính mã nguồn mở (open source) và tự do (free) dạngUnix-like (giống kiểu hệ điều hành Unix) được xây dựng trên nền của nhân Linux(Linux kernel).Để hiểu rõ hơn về quá trình phát triển và tinh thần phát triển của Linux,chúng ta sẽ điểm qua một chút về lịch sử của Linux, bắt đầu từ dự án GNU
iv
Trang 10Dự án GNU tuy không thể tạo ra được một kernel chạy hoàn chỉnh, nhưng đã tạo rađược rất nhiều chương trình, công cụ hữu ích chạy cho hệ điều hành Unix-like Cáccông cụ nổi tiếng của GNU mà được dùng phổ biến hiện nay như trình soạn thảoEmacs, công cụ biên dịch GNU Compiler Collection (GCC), bash và thư viện glibc(GNU C library).
Nhân Linux được ra đời bởi Linus Tovard năm 1991 chính là mảnh ghép quan trọngcòn thiếu có thể kết hợp với dự án GNU để trở thành một hệ điều hành hoàn chỉnh vàlớn mạnh như ngày nay
Các tiêu chuẩn Unix và Linux:
- POSIX
- Single UNIX Specification (SUS)
- Linux Standard Base (LSB)
2.3.2 System call
Trong kiến trúc Linux, không gian bộ nhớ được chia thành hai phần là user space vàkernel space Theo đó, cũng tồn tại hai chế độ (mode) là user mode và kernel mode.Các chỉ lệnh được gọi từ chương trình như đóng mở file (fopen, fclose), hoặc in mộtthông tin (printf) chỉ có thể thực thi và truy cập vùng nhớ ở tầng user mà không đượctruy cập vùng nhớ của kernel
System call là một cửa ngõ vào kernel, cho phép tiến trình trên tầng user yêu cầukernel thực thi một vài tác vụ cho mình Những dịch vụ này có thể là tạo một tiến trìnhmới (fork), thực thi I/O (read, write), hoặc tạo ra một pipe cho giao tiếp liên tiến trình(IPC)
v
Trang 11Hình 2.1 hàm sys_open() trong /fs/open.c
2.3.3 File Input/Output
Các thao tác file trong linux:
- int open (const char *pathname, int flags, mode_t mode);
- int close(int fd);
- ssize_t read(int fd, void *buffer, size_t count);
- ssize_t write(int fd, void *buffer, size_t count);
- off_t lseek(int fd, off_t offset, int whence);
-vi
Trang 12Hình 2.2 Vị trí các đối số SEEK_X trong lseek()
2.3.4 Quản lý tiến trình
Khái quát về tiến trình, không gian của bộ nhớ tiến trình
Hình 2.3 Cấu trúc bộ nhớ của một tiến trình
Các thao tác với tiến trình:
- Tạo tiến trình mới
vii
Trang 132.3.5 Thread trong linux
Thread là một cơ chế cho phép một ứng dụng thực thi đồng thời nhiều công việc(multi-task) Ví dụ một trường hợp đòi hỏi multi-task sau: một tiến trình web servercủa một trang web giải trí phải phục vụ hàng trăm hoặc hàng nghìn client cùng mộtlúc
Thread là một thành phần của tiến trình, một tiến trình có thể chứa một hoặc nhiềuthread Hệ điều hành Unix quan niệm rằng mỗi tiến trình khi bắt đầu chạy luôn có mộtthread chính (main thread); nếu không có thread nào được tạo thêm thì tiến trình đó
viii
Trang 14được gọi là đơn luồng (single-thread), ngược lại nếu có thêm thread thì được gọi là đaluồng (multi-thread).
Hình 2.7 Tiến trình single-thread và multi-thread
Thread sử dụng chung vùng nhớ toàn cục (global memory) nhưng mỗi thread có phânvùng stack riêng của mình, cụ thể như hình vẽ dưới đây:
ix
Trang 15Hình 2.8 Tổ chức bộ nhớ của tiến trình có 4 thread (Linux/x86-32)
Các hàm hay thực hiện với thread:
- Tạo thread mới
Trang 16- Thread cancellation
2.3.6 Quản lý bộ nhớ
Linux sử dụng 1 kỹ thuật được gọi là quản lý bộ nhớ ảo (virtual memory management)nhằm mục đích sử dụng hiệu quả cả CPU và RAM Kỹ thuật này khai thác 1 đặc điểmchung về truy cập bộ nhớ của hầu hết các chương trình là locality of reference (dịchnôm na là tham chiếu vùng), được biểu hiện qua 2 đặc tính:
- Spatial locality
- Temporal locality
Để ánh xạ giữa các trang của không gian bộ nhớ ảo đến các frame của bộ nhớ vật lý,kernel tạo ra 1 bảng trang (page table) cho mỗi tiến trình Mỗi entry của page table ứngvới 1 trang của bộ nhớ ảo cho phép chỉ ra vị trí của trang đó trong RAM hoặc chỉ ra nóđang nằm ở phân vùng swap của ổ cứng
Hình 2.11 Page Table của một tiến trình
Các kiến thức về cấp phát bộ nhớ, memory mapping, …
xi
Trang 17Hình 2.12 File memory mapping
Để ý trong hình vẽ trên, tiến trình tạo ra 1 vùng nhớ ảo trong không gian “MappedMemory” được ánh xạ đến 1 file thực trong hệ thống Nhưng tiến trình không mapptoàn bộ nội dung file, mà map 1 vùng nhớ kích thước “Length” bắt đầu từ “offset”trong file
CHƯƠNG 3 NHẬN XÉT VÀ ĐỀ XUẤT
3.1 Ưu điểm
Ưu điểm khi thực tập tại G-innovation:
- Giúp em có thể làm quen được với môi trường làm việc trong lĩnh vực kỹ thuật,các tác phong cần có trong công việc
- Có thêm kinh nghiệm để cải thiện các kỹ năng mềm như làm việc nhóm, kỹnăng thuyết trình, đọc tài tiệu chuyên ngành, viết báo cáo,…
- Có những anh chị chuyên môn cao nhiệt tình giúp đỡ và chỉ bảo khi gặp khókhăn
xii
Trang 183.2 Nhược điểm
Do thực tập trong thời điểm giãn cách xã hội, chủ yếu là qua online, thi thoảng vẫngặp một số hạn chế về giao tiếp, đồng nghĩa với việc chưa được thực hành trên các kitthực tế
3.3 Đề xuất
Mong rằng khóa học này sẽ được mở rộng tới tất cả các sinh viên trong viện Điện tửviễn thông nói riêng và các bạn đam mê về lập trình nhúng Linux số nói chung
xiii
Trang 19CHƯƠNG 4 KẾT LUẬN
Sau một tháng thực tập tại G-innovation, em đã được học khóa học về lập trình nhúngtrên các thiết bị chạy hệ điều hành Linux Do dịch bệnh nên em mới chỉ làm các bàitập mô phỏng Tuy nhiên em cũng đã có được những kiến thức cơ bản nhất về lập trìnhnhúng trên thiết bị Linux
Em xin chân thành cảm ơn Ban lãnh đạo Viện Điện tử - Viễn thông đã sắp xếp cho emhoàn thành học phần Thực tập kỹ thuật trong hè này
Em cũng xin trân thành cảm ơn các các anh chị, các bạn tại công ty G-innovation, đãtạo điều kiện để cho em được thực tập tại đây, được học hỏi những điều bổ ích, nhữngkinh nghiệm quý giá giúp em tiến bộ hơn về mặt chuyên môn cũng như kỹ năng mềm
để em có thể trở thành một kỹ sư tốt trong tương lai
Em xin trân thành cảm ơn!
xiv
Trang 20CHƯƠNG 5 TÀI LIỆU THAM KHẢO
[1] Vimentor, "Vimentor Linux," [Online] Available: https://vimentor.com/vi
[2] in Hands-On System Programming With Linux_ Explore Linux System Programming Interfaces, Theory, And Practice
[3] in Linux.System.Programming
xv
Trang 21ĐÁNH GIÁ BÁO CÁO
Rất kém (1); Kém (2); Đạt (3); Giỏi (4); Xuất sắc (5)
Kỹ năng viết
5
Báo cáo trình bày đúng mẫu quy định với cấu trúc các chương
logic và đẹp mắt (có tiêu đề, có căn lề, dấu cách sau dấu chấm,
dấu phẩy v.v), có mở đầu chương và kết luận chương, có liệt kê
tài liệu tham khảo và có trích dẫn đúng quy định
6 Kỹ năng viết xuất sắc (cấu trúc câu chuẩn, văn phong khoa học,
lập luận logic và có cơ sở, từ vựng sử dụng phù hợp v.v.) 1 2 3 4 5
Điểm tổng /10 Điểm tổng quy đổi về thang 10
xvi