Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 21

TRƯỜ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
Hà Nội, 9-2021
LỜ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ẽ. Khoa

họ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úng
ta

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ên

toà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ân
lự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ập
trau

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ất

quan 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ến

thứ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ài
liệu,
kĩ 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ân
mì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ên
nă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ện

cho 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!


MỤ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


DANH 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
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

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 trong
lĩ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ân
tạ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ín
dụ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ược
hoạ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ển
b) 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 tin
3) 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áy
hiện sóng, máy phân tích nguồn
b) 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ử, anten

2
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ăng
chế tạo và đo kiểm anten, sử dụng các máy phân tích phổ, máy phân tích
mạ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.

3
CHƯƠ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 được
trong 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âm
tớ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ạy
trê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ều
hành Linux lên đó. Linux embedded có những ưu điểm mà một hệ thống nhúng theo
dạ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ời
gian 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ủa
chú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ông
việ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ức
kiế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ạng
Unix-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.
Dự á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ác
cô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ảo
Emacs, công cụ biên dịch GNU Compiler Collection (GCC), bash và thư viện glibc
(GNU C library).

4
Nhân Linux được ra đời bởi Linus Tovard năm 1991 chính là mảnh ghép quan trọng
cò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ột
thông tin (printf) chỉ có thể thực thi và truy cập vùng nhớ ở tầng user mà không được
truy 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ầu
kernel 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ình
mớ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).

5
Hì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);

-
Hì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

6
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

Hình 2.4 Hàm tạo tiến trình


- Chạy chương trình mới

7
Hình 2.5 Hàm chạy chương trình
- Kết thúc tiến trình (Terminating a process)

Hình 2.6 Hàm kết thúc tiến trình


Các kiến thúc về lập lịch như:
- Phân loại tiến trình
- Process priority
- Scheduling Policy

2.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 server
củ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ột
lú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ều
thread. 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ột
thread chính (main thread); nếu không có thread nào được tạo thêm thì tiến trình đó
được gọi là đơn luồng (single-thread), ngược lại nếu có thêm thread thì được gọi là đa
luồng (multi-thread).

8
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ân
vùng stack riêng của mình, cụ thể như hình vẽ dưới đây:

Hì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:

9
- Tạo thread mới

Hình 2.9 Hàm tạo thread


- Kết thúc thread

Hình 2.10 Hàm kết thúc thread


- Thread Synchronization-Mutex
- 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ểm
chung về truy cập bộ nhớ của hầu hết các chương trình là locality of reference (dịch
nô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 ứng
vớ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.

10
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, …

Hì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 “Mapped
Memory” được ánh xạ đến 1 file thực trong hệ thống. Nhưng tiến trình không mapp
toàn bộ nội dung file, mà map 1 vùng nhớ kích thước “Length” bắt đầu từ “offset”
trong file.

11
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.

3.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ẫn gặ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 kit thự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.

12
CHƯƠ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úng
trê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ài
tậ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ình
nhú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 em
hoà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ững
kinh 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!

13
CHƯƠ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.

14
ĐÁ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

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,
5 1 2 3 4 5
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

Kỹ năng viết xuất sắc (cấu trúc câu chuẩn, văn phong khoa học,
6 1 2 3 4 5
lập luận logic và có cơ sở, từ vựng sử dụng phù hợp v.v.)

Điểm tổng /10

Điểm tổng quy đổi về thang 10

Nhận xét khác:

15

You might also like