1. Trang chủ
  2. » Giáo Dục - Đào Tạo

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

21 0 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Nội dung

Trang 1

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

VIỆN ĐIỆN TỬ - VIỄN THÔNG

Trang 2

Hà Nội, 9-2021

Trang 3

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ẽ 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 4

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â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 đạovà 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 5

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ẾPNHẬ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

CHƯƠNG 5 TÀI LIỆU THAM KHẢO 14

ĐÁNH GIÁ BÁO CÁO 15

Trang 6

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

Trang 7

CHƯƠNG 1 GIỚI THIỆU CHỨC NĂNG, NHIỆM VỤ, CƠ CẤUCỦ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ể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 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 8

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áckỹ 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ếtkế 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 9

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 đượ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ìnhC 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 10

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

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);

-vi

Trang 12

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

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 13

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

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:- 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 17

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 “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 18

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ẫ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 19

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ú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 20

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 SystemProgramming Interfaces, Theory, And Practice

[3] in Linux.System.Programming

xv

Trang 21

ĐÁNH GIÁ BÁO CÁO

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

Ngày đăng: 11/07/2024, 15:52

w