Tải bản đầy đủ (.pdf) (138 trang)

NGHIÊN CỨU LINUX TRÊN HỆ THỐNG NHÚNG VÀ ỨNG DỤNG

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (3.54 MB, 138 trang )

TRƯỜNG ĐẠI HỌC KỸ THUẬT CÔNG NGHỆ
KHOA CÔNG NGHỆ THÔNG TIN
CHUYÊN NGHÀNH MẠNG-MÁY TÍNH
………..YZ………..

KHÓA LUẬN TỐT NGHIỆP
ĐỀ TÀI:

NGHIÊN CỨU LINUX TRÊN HỆ
THỐNG NHÚNG VÀ ỨNG DỤNG

GVHD:THS HUỲNH HỮU THUẬN
SVTH: TRẦN QUANG THUẬN 104102130
PHAN BÁ MINH 103102110

TP Hồ Chí Minh-Tháng 3/2008


Lời cảm ơn
Đầu tiên chúng em xin gửi những lời cảm ơn sâu sắc đến Ban giám hiệu trường
Đại học Kỹ Thuật Công Nghệ,Khoa Công Nghệ Thông Tin đã tận tình giảng dạy,
truyền đạt cho chúng em những kiến thức quý báu. Bên cạnh đó, quý thầy cô đã tạo
cho chúng em những điều kiện tốt nhất trong học tập và rèn luyện nhân cách suốt
những năm học vừa qua.
Chúng em xin gửi những lời biết ơn đặc biệt và chân thành nhất đến thầy Th.s
Huỳnh Hữu Thuận vì sự hướng dẫn tận tình cùng sự quan tâm chu đáo để chúng em có
thể hoàn thành đề tài này một cách tốt đẹp.
Chúng con cũng xin gửi đến bố mẹ của chúng con những tình cảm và lòng tri
ân tận đáy lòng. Bố mẹ đã ở bên chúng con để động viên và giúp đỡ chúng con về mọi
mặt trong những giai đoạn khó khăn khi thực hiện đề tài.
Và cuối cùng xin được gửi lời cảm ơn đến tất cả các bạn bè trong và ngoài khoa


vì những sự giúp đỡ và tình cảm của các bạn trong những năm tháng nơi giảng đường
đại học thân yêu.

Sinh viên thực hiện
Trần Quang Thuận,Phan Bá Minh


Lời nói đầu.
Ngày nay,với sự phát triển của các linh kiện điện tử và công nghiệp sản xuất vi
mạch,hệ thống Linux nhúng đã xuất hiện hầu như ở khắp mọi khía cạnh trong cuộc
sống, từ các thiết bị điện tử dân dụng thông thường đến những thiết bị mạng cao cấp.
Nếu so sánh các thiết bị này với các hệ thống nhúng truyền thống thì mức độ phức tạp
và khả năng đáp ứng cao hơn rất nhiều.Việc tích hợp hệ điều hành lên hệ thống nhúng
làm đơn giản hóa quá trình nghiên cứu và phát triển các sản phẩm, rút ngắn thời gian
và chi phí xây dựng hệ thống vì các hệ thống này được thừa hưởng những tính chất ưu
việt của một hệ điều hành nói chung cũng như Linux nói riêng, như tính ổn định, nhỏ
gọn, thực thi nhanh và có khả năng can thiệp sâu vào phần cứng.
Hơn thế nữa, cùng với cộng đồng sử dụng Linux rộng lớn trên khắp thế giới và
các phần mềm mã nguồn mở đa dạng làm cho việc phát triển hệ thống Linux nhúng trở
thành một chiến lược được các công ty lựa chọn hàng đầu. Nhờ phần mểm mã nguồn
mở khiến cho việc tùy biến một ứng dụng phù hợp yêu cầu trở nên dễ dàng hơn. Nhận
thức được tầm quan trọng này, đề tài thực hiện việc tìm hiểu Linux cho các hệ thống
nhúng và các ứng dụng trên hệ thống nhúng. Phần cứng đề cập đến trong đề tài là kit
XUP Virtex-II Pro Development Syste Xilinx (XUPV2P). Cụ thể sẽ tiến hành việc cài
đặt hệ điều hành MontaVista Linux – một gói Linux chuyên dành cho các hệ thống
nhúng – lên kiến trúc vi xử lý PowerPC405 được tích hợp trên kit XUPV2P. Đồng thời
xây dựng các ứng dụng chạy trên hệ điều hành này. Ứng dụng trọng tâm là giao tiếp
truyền dữ liệu qua TCP/IP, với server là ứng dụng chạy trên hệ thống nhúng đã cài đặt
và client là ứng dụng chạy trên hệ điều hành Windows. Ứng dụng cung cấp khả năng
upload, download dữ liệu và có phân quyền với giao diện người dùng thân thiện.



Mục lục
Chương 1 Linux trên hệ thống nhúng................................................................7
1.1

Khái niệm cơ bản...................................................................................7

1.2

Hệ điều hành Linux nhúng (Embedded Linux).....................................8

1.3

Real-time Linux.....................................................................................9

1.4

Phân loại hệ thống Linux nhúng............................................................9

1.4.1 Kích thước .......................................................................................10
1.4.2 Khả năng đáp ứng theo thời gian ....................................................11
1.4.3 Khả năng kết nối .............................................................................11
1.4.4 Khả năng tương tác với người dùng................................................12
1.5

Kiến trúc tổng quát của một hệ thống Linux nhúng............................12

1.5.1 Khối Data Acquisition.....................................................................13
1.5.2 Khối Control....................................................................................14

1.5.3 Khối System management...............................................................15
1.5.4 Khối User interface .........................................................................16
1.6

Tổng quan về kernel của Linux/Unix ..................................................16

1.6.1 Mô hình process/kernel: ..................................................................16
1.6.2 Thi hành một process ......................................................................18
1.6.3 Tái thực thi các process ...................................................................18
1.6.4 Không gian địa chỉ các tiến trình: ...................................................20
1.6.5 Sự đồng bộ hóa và những vùng then chốt:......................................21
1.6.6 Việc giao tiếp tín hiệu và liên tiến trình ..........................................22
1.6.7 Quản lí tiến trình: ............................................................................23
1.6.8 Quản lý bộ nhớ ................................................................................25
1.6.9 Device Drivers.................................................................................28
Chương 2 Thiết kế một hệ thống Linux nhúng ...............................................30
2.1

Phần cứng hỗ trợ..................................................................................30

2.1.1 Kiến trúc CPU .................................................................................30
U

2.1.2 Bus và các chuẩn giao tiếp ..............................................................31


2.1.3 Các thiết bị lưu trữ...........................................................................31
2.1.4 Kết nối mạng ...................................................................................32
2.2


Các công cụ phát triển .........................................................................33

2.3

Chọn lựa và biên dịch Linux kernel ....................................................34

2.3.1 MontaVista Linux ...........................................................................37
2.3.2 uClinux ............................................................................................38
2.3.3 Cấu hình kernel ...............................................................................38
2.4

Xây dựng hệ thống thư mục gốc (root filesystem)..............................40

2.4.1 Hệ thống tập tin (File Systems).......................................................40
2.4.2 Các thư mục trên Linux...................................................................40
Chương 3 Kit XUPV2P và gói phần mềm phát triển của Xilinx ....................44
3.1

Kiến trúc phần cứng của Kit XUPV2P................................................44

3.1.1 Tổng quan........................................................................................44
3.1.2 Khối FPGA Virtex II Pro ................................................................46
3.1.3 System ACE ....................................................................................47
3.1.4 Ethernet adaptor ..............................................................................58
3.1.5 Cấu trúc MicroBlaze .......................................................................69
3.1.6 PowerPC..........................................................................................78
3.2

Các gói phần mềm phát triển của Xilinx .............................................85


3.2.1 Xilinx EDK......................................................................................86
3.2.2 BSB Winzard (Base System Builder) .............................................86
Chương 4 Thiết kế hệ thống nhúng dùng Linux..............................................88
4.1

Những công cụ thực hiện.....................................................................88

4.1.1 Hardware .........................................................................................88
4.1.2 Software...........................................................................................88
4.2

Kiểm tra kit XUPV2P..........................................................................89

4.3

Thiết kế phần cứng cho hệ thống với Xilinx BSB ..............................90

4.3.1 Cấu hình sử dụng bộ xử lý PowerPC ..............................................90
4.3.2 Cấu hình các thiết bị ngoại vi..........................................................93
4.3.3 Cấu hình phần mềm.........................................................................96
4.4

Thiết lập môi trường biên dịch chéo....................................................98


4.5

Biên dịch nhân MontaVista Linux trên kiến trúc PowerPC405........100

4.5.1 Tải kernel source và chuẩn bị driver .............................................100

4.5.2 Cấu hình nhân................................................................................102
4.5.3 Tạo ACE file cấu hình cho FPGA và nạp ảnh kernel ...................105
4.5.4 Quá trình khởi động Linux trên kit XUPV2P ...............................107
4.6

Xây dựng cấu trúc thư mục gốc cho hệ điều hành ............................108

Chương 5 Lập trình ứng dụng Server chạy trên hệ thống nhúng và Client trên
Windows................................................................................................112
5.1

Mô tả hệ thống file server của uClinux .............................................112

5.2

Cấu trúc lập trình: ..............................................................................113

5.3

Lưu đồ thiết kế:..................................................................................114

5.4

Chương trình File Client MP3 trên Visual C++ MFC: .....................115

5.4.1 Giới thiệu :.....................................................................................115
5.4.2 Chương trình File Client MP3: .....................................................116
5.4.3 Giao diện File Client MP3: .............Error! Bookmark not defined.
Chương 6 Giới hạn của đề tài và hướng phát triển trong tương lai...............118
6.1


Tổng kết những phần đã thực hiện ....................................................118

6.2

Giới hạn .............................................................................................118

6.3

Hướng phát triển trong tương lai .......................................................118


Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.

Chương 1

Linux trên hệ thống nhúng

1.1 Khái niệm cơ bản
Linux là một từ thay thế cho nhân Linux, một hệ thống Linux hay một bản phân
phối Linux (Linux distribution). Khái niệm về Linux cũng có thể hiểu đơn giản là một
hệ điều hành. Chính xác thì Linux dùng để chỉ hạt nhân được Linus Tovalds phát triển
và duy trì. Mã nền tảng này chỉ bao gồm hạt nhân và không có một ứng dụng kèm theo
khác. Hạt nhân chỉ cung cấp cho phần lõi của hệ thống khả năng quản lý phần cứng dễ
dàng. Nó không phải là phần mềm đầu tiên được hệ thống thực thi, vì thực chất là
bootloader sẽ được thực thi trước. Tuy nhiên, một khi hạt nhân được thực thi, nó sẽ
không bao giờ thoát hay trao quyền điều khiển cả hệ thống cho đến khi hệ thống tắt.
Nó có tác dụng điều khiển tất cả phần cứng và cung cấp những khả năng quản lý ở cấp
độ logic cao, ví dụ như các tiến trình, sockets, tập tin và các ứng dụng khác chạy trên
hệ thống.

Linux cũng có thể dùng để thiết kế chuyên biệt cho một hệ thống phần cứng
cùng với nhiều ứng dụng khác. Một nhóm phát triển thường đề cập đến vấn đề họ sử
dụng Linux trong các sản phẩm mới của họ, họ muốn nói đến không chỉ là hạt nhân
Linux mà còn kèm theo các ứng dụng trên sản phẩm mới này. Điều này có ý nghĩa chỉ
một hệ thống Linux ngoài hạt nhân còn kèm theo một số lượng lớn các phần mềm
cùng chạy với hạt nhân. Thông thường là các phần mềm GNU, các thư viện C và các
tập tin nhị phân của ứng dụng . Cũng có thể bao gồm cả giao diện đồ họa và khả năng
đáp ứng real-time.
Hệ thống Linux có thể xây dựng theo tùy thích, hoặc có thể dựa vào các gói
phân phối của các nhà cung cấp. Nhóm phát triển nào đó có thể xây dựng một hệ
thống theo ý thích của họ, và ngược lại, bạn có thể dùng các phiên bản có giao diện đổ
họa và các tiện ích tiện lợi khác như gói Red Hat, Debian hay Fedora Core. Những hệ
thống Linux có nhiều mục đích sử dụng khác nhau, chạy những ứng dụng khác nhau
SVTH: Trần Quang Thuận – Phan Bá Minh.

-7-


Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
ngoại trừ phần hạt nhân có tác dụng không hề thay đổi trên các hệ thống. Các phân
phối như Red Hat, Mandrake, SuSE, Debian, Slackware, Caldera, MontaVista,
Embedix, BlueCat, PeeWeeLinux, và các phân phối Linux khác có thể khác nhau về
kích thước, giá cả, mục đích sử dụng nhưng lại có một điểm chung nhất: cung cấp cho
người dùng tập hợp file và những cách thức cài đặt để người dùng xây dựng hạt nhân
cùng các ứng dụng khác trên nhiều loại phần cứng tùy theo mục đích xác định. Cách
thức cài đặt có thể hoàn toàn tự động hoặc từng bước chi tiết trong tài liệu được cung
cấp tùy theo người dùng thông thường hay các nhà phát triển hệ thống.

1.2 Hệ điều hành Linux nhúng (Embedded Linux)
Thông thường bạn sẽ sử dụng một phiên bản Linux chính thức được cung cấp

bởi những hãng cung cấp phần mềm cho hệ thống của bạn. Nhưng đôi khi, bạn lại
muốn dùng một gói Linux được thiết kế với hạt nhân phù hợp với thiết bị đặc biệt hoặc
chỉ hỗ trợ chuyên biệt cho một ứng dụng nào đó. Các gói Linux cung cấp rất nhiều
nhân khác nhau, ví dụ như các nhân Linux thông thường không được tối ưu và kèm
các bản vá để hỗ trợ khả năng chạy các công cụ debug, chẵng hạn như công cụ debug
cho nhân. Điểm khác biệt chủ yếu là các nhân dùng cho hệ thống nhúng khác với dùng
cho các máy tính (workstation) hay máy phục vụ (server) ở cách cấu hình hạt nhân
khi biên dịch.
Thuật ngữ “hệ thống Linux nhúng” chỉ những hệ thống nhúng dựa trên nhân
Linux và bao hàm cả ý nghĩa sử dụng những thư viện đặc biệt và các công cụ người
dùng cùng với hạt nhân. Một gói cung cấp hệ điều hành Linux nhúng cũng có thể bao
gồm cả nhóm các gói công cụ phát triển (development framework), hoặc nhóm các
phần mềm được thay đổi để có thể sử dụng trên hệ thống nhúng hoặc cả hai.
Nhóm các gói công cụ phát triển bao gồm các phần mềm phục vụ cho việc dễ
dàng phát triển trên hệ thống nhúng. Như các trình duyệt mã nguồn (source browser),
các bộ biên dịch chéo, sửa lỗi, phần mềm quản lý dự án, tạo boot image…Gói công cụ
phát triển này sẽ được cài đặt trên máy host. Ngược lại, đối với nhóm các phần mềm
ứng dụng trên hệ thống nhúng sẽ được thực thi trên target là các hệ thống nhúng, như
các thư viện đặc biệt, các tập tin thực thi và các tập tin cấu hình, với giải pháp tổng

SVTH: Trần Quang Thuận – Phan Bá Minh.

-8-


Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
quát thì nó cũng sẽ bao gồm cả công cụ tạo ra cấu trúc thư mục gốc cho hệ thống (root
filesystem).
Như vậy đến đây chúng ta có 2 khái niệm host và target. Host sẽ dùng để chỉ
máy tính phát triển cho hệ thống nhúng, và target để chỉ các hệ thống nhúng.


Hình 1-1: Khái niệm host và target

1.3 Real-time Linux
Ban đầu, real-time Linux dùng để chỉ dự án RTLinux đưa ra vào năm 1996 của
Michael Barabanov dưới dự giám sát của Victor Yodaiken. Dự án nhằm cung cấp khả
năng đáp ứng thời gian chính xác trong môi trường Linux.
Tuy nhiên, ngày nay có rất nhiều dự án cung cấp khả năng đáp ứng real-time
trong môi trường hệ điều hành Linux. RTAI, Kurt hay Linux/RK đều cung cấp khả
năng real-time. Một số dự án cải tiến khả năng real-time bằng cách thêm một hạt nhân
thứ 2 vào trong hạt nhân Linux, một số khác cải thiện bằng các bản vá tối ưu hơn. Các
khái niệm về real-time có vẻ khó hiểu nhưng chúng ta cũng có thể hiểu đơn giản hơn,
đó là những hệ thống đảm bảo có thể hoạt động và đáp ứng gần như tức thời và có độ
tin cậy cao. Như các hệ thống audio stream hay các máy trong công nghiệp, đặc biệt
chú trọng những đáp ứng về thời gian. Chúng ta sẽ hiểu thêm khi đi vào phân loại các
hệ thống Linux nhúng.

1.4 Phân loại hệ thống Linux nhúng
Những hệ thống nhúng nào có thể sử dụng Linux? Vì sao lại chọn Linux?
Những vấn đề quan trọng nào phát sinh khi sử dụng Linux trên hệ thống nhúng? Hay
có bao nhiêu người thực sự dùng Linux trên hệ thống nhúng của họ? Và dùng như thế
nào? Có lẽ còn rất nhiều câu hỏi khác phát sinh khi làm quen với Linux trên hệ thống
nhúng. Đây có lẽ là những câu hỏi khó trả lời ở thời điểm này, phần này sẽ cố gắng
giúp bạn có cái nhìn tổng quát và phần nào tìm được câu trả lời.

SVTH: Trần Quang Thuận – Phan Bá Minh.

-9-



Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
Chúng ta có thể thấy đơn giản nhất là các thiết bị mạng thông dụng, như các
router hay máy in mạng cho phép người dùng cấu hình thông qua web-base. Chúng
đều được tích hợp một nhân Linux để có thể thực hiện những công việc đó. Nếu xem
xét thì trong rất nhiều lĩnh vực đều có sự hiện diện của Linux nhúng. Ở đây chúng ta
sẽ điểm qua bằng cách phân loại các hệ thống linux nhúng theo các tiêu chí: kích
thước, khả năng đáp ứng thời gian, kết nối và khả năng tương tác với bên ngoài.
1.4.1 Kích thước
Kích thước của các hệ thống Linux nhúng được xác định ở nhiều phương diện
khác nhau. Đầu tiên là kích thước thực bên ngoài đến những đơn vị kích thước của
máy tính như tốc độ CPU, dung lượng RAM và lưu trữ. Điều đáng chú ý ở đây là
Linux không thể chạy trên các hệ thống 16-bit 1 , nếu so sánh với các thiết bị nhúng
truyền thống thì hệ thống Linux nhúng có thể được coi là những hệ thống lớn.
Đối với những hệ thống nhỏ sử dụng những CPU tốc độ thấp, với chỉ khoảng
2MB ROM và 4MB RAM. Điều này không có nghĩa là Linux không thể chạy với
dung lượng RAM thấp hơn, nhưng sẽ khó thực hiện. Hiện tại vẫn có những phân phối
Linux chỉ cần lưu trữ trên duy nhất một đĩa mềm.
Những hệ thống trung bình được tích hợp các CPU có tốc độ tương đối và dùng
khoảng 32MB ROM và 64MB RAM. Hầu hết những sản phẩm tiêu dùng đều nằm ở
kích thước này. Như các máy PDA, máy chơi MP3 hay các hệ thống giải trí, thiết bị
mạng. Một số thiết bị còn có khả năng mở rộng lưu trữ trên các thẻ nhớ, CompactFlash
card, thậm chí cả đĩa cứng thông thường.
Các hệ thống lớn sử dụng bộ xử lý mạnh hoặc đa bộ xử lý, kết hợp với dung
lượng RAM và dung lượng lưu trữ lớn. Thông thường các hệ thống này được sử dụng
trong những môi trường cần xử lý khối lượng lớn các phép tính để thực hiện các tác vụ
chuyên biệt. Hệ thống chuyển mạch trong thông tin thoại, hay việc giả lập bay. Các hệ

1

Nói Linux không thể chạy trên hệ thống 16-bit không hoàn toàn chính xác, đã từng có dự án


Embeddable Linux Kernel Subset (ELKS), chạy Linux trên các hệ thống xử lý cũ như Intel 8086 hay 268.
Nhưng với sự phát triển hiện nay thì Linux trên các hệ thống cũ là giải pháp không hề khả thi.

SVTH: Trần Quang Thuận – Phan Bá Minh.

- 10 -


Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
thống này đặt chức năng lên hàng đầu và các yếu tố kích thước, giá thành và độ phức
tạp chỉ là thứ yếu.
1.4.2 Khả năng đáp ứng theo thời gian
Có hai mức độ đáp ứng theo thời gian cho hệ thống nhúng: nghiêm ngặt và
thông thường. Đối với hệ thống đòi hỏi đáp ứng nghiêm ngặt về thời gian, nó phải
phản ứng lại trong một thời gian xác định đưa ra, nếu không thì sẽ có những hậu quả
nghiêm trọng xảy ra. Giả sử trong một nhà máy, các công nhân giữ những vật liệu cần
được cắt bằng các máy cắt tự động. Vì lý do an toàn, các cảm biến quang được đặt
xung quanh các lưỡi dao của máy cắt để nhận dạng màu sắc găng tay của những công
nhân. Khi hệ thống báo tay của người công nhân đang trong vùng nguy hiểm, lập tức
các lưỡi dao phải ngừng hoạt động để bảo đảm an toàn. Hệ thống này không thể làm
tác vụ nào khác để giải phóng tài nguyên bộ xử lý. Đây là một hệ thống đòi hỏi đáp
ứng cực kỳ nghiêm ngặt về thời gian và độ tin cậy. Các hệ thống audio cũng phải có
đáp ứng thời gian nghiêm ngặt, những đoạn âm thanh trễ chỉ trong nhất thời có thể làm
người dùng rất khó chịu. Tuy nhiên hệ thống này cũng cần đáp ứng thời gian chính
xác nhưng mức độ không quan trọng như ở ví dụ trên.
Các hệ thống đáp ứng thời gian thông thường có rất nhiều ứng dụng nhất là
trong những ứng dụng mà vấn đề thời gian không quan trọng. Ví dụ như hệ thống trả
lời tự động cần đến 10 giây để chuyển đổi, hay các máy PDA cũng cần một thời gian
chờ để khởi động.

1.4.3 Khả năng kết nối
Khả năng kết nối để chỉ các hệ thống có thể kết nối đến các thiết bị mạng khác.
Ngày nay chúng ta muốn mọi thứ có thể truy cập thông qua hệ thống mạng. Vì vậy, để
có khả năng đáp ứng điều này, những yêu cầu cơ bản cho một hệ thống dần được xây
dựng thêm. Một trong những nhân tố khiến mọi người chọn Linux làm hệ điều hành
cho hệ thống nhúng của họ, chính là ở khả năng kết nối của Linux. Giảm giá thành và
những thành phần đã chuẩn hóa của Linux càng khiến mọi người sử dụng nó. Đơn
giản như việc bạn có thể gắn một thiết bị kết nối không dây vào máy Compaq iPAD
bằng cách cắm một PCMCIA (Personal Computer Memory Card International
Association) vào khe cắm của máy, nó có thể sử dụng ngay lập tức.
SVTH: Trần Quang Thuận – Phan Bá Minh.

- 11 -


Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
1.4.4 Khả năng tương tác với người dùng
Mức độ tương tác với người dùng tùy theo từng hệ thống, Một số hệ thống như
các máy PDA tập trung vào các tính năng giao tiếp với người sử dụng bằng các màn
hình cảm ứng. Trong khi các hệ thống điều khiển công nghiệp khác chỉ cần các LED
hiển thị và các nút nhấn để giao tiếp với người dùng, còn có những hệ thống không hề
có giao tiếp nào cả, như một số thành phần của hệ thống tự lái trên các máy bay, chỉ
đơn thuần điều khiển an toàn cho cánh mà không cần giao tiếp với phi công.
Hệ thống

Lĩnh vực

Xe tự

Không


hành

gian

Thiết bị

Tiêu

trợ lý số

dùng

Kích thước

Đáp ứng thời
gian

Kết nối

Mức độ giao tiếp
với người dùng

Lớn

Nghiêm ngặt



Cao


Nhỏ

Thông thường

Không

Rất cao

Nhỏ

Thông thường



Thấp

Bộ định
tuyến

Mạng

(router)
Bảng 1-1: Các đặc điểm của hệ thống

1.5 Kiến trúc tổng quát của một hệ thống Linux nhúng
Để có thể giải thích đơn giản, chúng ta sẽ xem xét một hệ thống điều khiển các
tiến trình công nghiệp. Nó được thiết kế từ các máy tính kết nối mạng và tất cả đều sử
dụng Linux. Hình 1-2 thể hiện các khối đơn giản


Hình 1-2: Một kiến trúc ví dụ điển hình

Bên trong hệ thống, được xây dựng từ 4 thành phần khác nhau, mỗi thành phần
phục vụ cho một mục đích khác nhau: Data acquition (DAQ), Control, System
Management (SYSM) và User interface (UI). Kết nối bên trong giữa các thành phần sử
SVTH: Trần Quang Thuận – Phan Bá Minh.

- 12 -


Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
dụng các giao tiếp và các giao thức rất phổ biến TCP/IP trên Ethenet. Khối DAQ và
Control được cài đặt trên một đường truyền riêng, các UI cũng như vậy. Để có thể giao
tiếp với bên ngoài, khối SYSM có một kết nối với hệ thống mạng bên ngoài. Để điều
khiển một tiến trình, hệ thống luôn cần biết trạng thái của các tiến trình trong các thành
phần khác nhau. Lấy dữ liệu để làm gì, khi có dữ liệu, hệ thống có thể biết được làm
thế nào để quản lý tiến trình. Mọi lệnh điều khiển đều xuất phát từ khối Control. Chi
tiết về những tiến trình đang được điều khiển cần phải tương tác hoặc hiển thị với
người dùng, cũng phải có sự giao tiếp để vận hành những tiến trình này theo ý muốn,
điều này được thực hiện từ các khối UI. Để kết hợp tất cả những khối rời rạc này, tập
trung chỗ chứa các dữ liệu và quản lý các interface, khối SYSM được đặt ở trung tâm
đồng thời cho phép kết nối ra mạng bên ngoài. Chúng ta sẽ đi sâu vào từng khối để tìm
hiểu chi tiết hơn.
1.5.1 Khối Data Acquisition
Thành phần đầu tiên của quá trình đo lường là các bộ chuyển đổi. Các bộ
chuyển đổi là những thiết bị biển đổi các hiện tượng vật lý thành một tín hiệu điện.
Các bộ chuyển đổi này thường đặt trực tiếp ở những nơi cần theo dõi. Các tín hiệu
điện sinh ra từ các bộ chuyển đổi thường được khuyếch đại, lọc và cách ly trước khi đi
vào thiết bị DAQ cuối cùng.Thiết bị này thường là các DAQ card gắn vào máy tính để
lấy mẫu các tín hiệu tương tự, chuyển thành các giá trị số và lưu trữ trên các bộ đệm.

Dữ liệu số này có thể dùng để xác định các điều kiện hoặc thay đổi các thông số đáp
ứng cho tín hiệu, phản hồi lại khi nhận được tín hiệu.
Khối DAQ lưu trữ các dữ liệu nhận được trên các bộ đệm, tiến hành phân tích
trên các dữ liệu này hoặc có thể chuyển đến khối SYSM. Trong mọi trường hợp,
những dữ liệu quan trọng sẽ được chuyển tiếp đến khối SYSM để lưu trữ và hiển thị
trên các UI. Nếu các dữ liệu được phân tích trong khối DAQ, khối này sẽ thông báo
cho khối SYSM nếu như phát hiện những tình huống bất thường hay nguy hiểm,
ngược lại khối DAQ sẽ nhận lệnh từ khối SYSM. Những lệnh này có thể là việc thay
đổi tần số lấy mẫu, các thông số phân tích hoặc công việc của DAQ sẽ làm gì khi phân
tích dữ liệu xong. Đối với khối SYSM khi được DAQ thông báo, DAQ sẽ chuyển tiếp
thông báo trạng thái hoặc lỗi đến khối SYSM.

SVTH: Trần Quang Thuận – Phan Bá Minh.

- 13 -


Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
Khối DAQ thường khởi động từ flash trên khối và sử dụng RAM. Vì vậy nó dễ
dàng thay đổi nếu như hệ thống bị lỗi. Cấu hình phần mềm bao gồm một hạt nhân
được tạo riêng chỉ chạy trên một hệ thống (có thể là máy PC hay một hệ thống dùng
PowerPC) Khối DAQ không có giao tiếp với bên ngoài mà chỉ liên lạc với khối SYSM
DAQ cũng không phải hệ thống đa người dùng và không có giao tiếp với người dùng.
Khối DAQ chỉ cần thực thi một công cụ đo lường nào đó. Cũng giống như gói
BusyBox. Địa chị IP của khối DAQ được thiết kế cố định, vì vậy khối SYSM sẽ dễ
dàng kiểm tra DAQ còn hoạt động hay không.
1.5.2 Khối Control
Điều khiển các tiến trình truyền thống như PLC hay những hệ thống tương tự
rất mắc tiền và phải sử dụng những hệ điều hành riêng, đồng thời cũng phải có cách
vận hành riêng. Mặc dầu các phần cứng chuẩn công nghiệp cũng bắt đầu giảm giá

thành theo xu thế công nghệ. Với mục tiêu giảm giá thành những phần cứng ngày nay
trên thị trường tiêu dùng, dễ dàng nhận thấy các máy PC có ưu thế được dùng để quản
lý các quy trình.
Khối Control là một máy tính chuẩn công nghiệp kết nối với các phần cứng cần
được điều khiển. Máy tính này là một hệ thống nhúng kích cỡ trung bình với khả năng
đáp ứng nghiêm ngặt về thời gian và không có tương tác người dùng giống như khối
DAQ. Nó cũng được nối vào phần còn lại của cả hệ thống lớn qua đường truyền
Ethernet. Nhiệm vụ chính của khối Control là phát ra tín hiệu điều khiển phần cứng
kết nối với nó, đồng thời theo dõi hoạt động của phần cứng này để điều khiển hợp lý.
Các tín hiệu điều khiển xuất phát từ gốc là khối SYSM, là trung tâm đưa ra quyết định,
và SYMS sẽ quyết định dựa vào dữ liệu lấy từ khối DAQ. Khối Control sẽ đưa ra lệnh
cuối cùng gửi đến cho phần cứng dựa trên quyết định của SYSM và tình trạng của
phần cứng. Khi tác vụ điều khiển phần cứng đã hoàn thành, khối Control sẽ gửi một
thông báo trạng thái ngược về khối SYSM.
Khối Control cũng có thể boot từ flash và sử dụng RAM giống như DAQ, chỉ
khác là nó phải sử dụng một nhân Linux có khả năng đáp ứng nghiêm ngặt về thời
gian vì phải điều khiển những phần cứng phức tạp. Nó cũng có IP tĩnh và có thể bao
gồm gói BusyBox như DAQ.

SVTH: Trần Quang Thuận – Phan Bá Minh.

- 14 -


Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
1.5.3 Khối System management
Khối SYSM quản lý sự ảnh hưởng qua lại giữa các thành phần khác trong hệ
thống. Khối này gồm 3 giao tiếp với khối DAQ, Control và một kết nối ra mạng lưới
bên ngoài. SYSM là một hệ thống nhúng lớn có đòi hỏi đáp ứng thời gian nghiêm ngặt
và không có tương tác với người dùng.

Trên liên kết A (hình 1-2) SYSM nhận dữ liệu từ DAQ lưu trữ một phần dữ liệu
này và chuyển tiếp các dữ liệu thích hợp đến khối UI để tương tác với người dùng. Dữ
liệu được lưu trữ có thể sử dụng trong tương lai, và từ các dữ liệu này tích lũy những
kinh nghiệm cho hệ thống điều khiển. Khối SYSM có thể nhận dữ liệu đã phân tích ở
DAQ hoặc bản thân nó cũng có thể thực hiện công việc phân tích. SYSM sẽ đưa ra
những lệnh điều khiển khối Control dựa trên dữ liệu đã phân tích và từ đó khối Control
sẽ điều khiển phần cứng một cách chi tiết hơn. SYSM thực thi những chương trình nền
thực hiện các tác vụ liên lạc giữa DAQ và khối Control. SYSM cũng có IP tĩnh để các
khối DAQ và Control có dễ dàng liên lạc với nó.
Đối với liên kết ra mạng bên ngoài, khối SYSM cung cấp giao tiếp qua HTTP
và SSH. HTTP cung cấp khả năng theo dõi và cấu hình cho cả hệ thống thông qua các
trình duyệt web đơn giản. SSH cung cấp khả năng kết nối vào hệ thống nhúng thống từ
xa và có tính bảo mật cao để sửa lỗi và nâng cấp hệ thống. Một trong những cấu hình
quan trọng của SYSM là cách nó báo hiệu lỗi và không có khả năng xử lý lỗi này. Ví
dụ như thông báo bằng âm thanh, hay gửi các tín hiệu đến người vận hành hệ thống
hoặc đơn giản là hiển thị thông báo đến các UI. SYSM có thể dùng IP tĩnh hoặc nhận
IP từ một DHCP server.
Ở liên kết B (hình 1-2) SYSM có thể cung cấp địa chỉ động cho các UI, một khi
UI đã kết nối và xác nhân với SYSM, nó sẽ chuyển tiếp các thông báo, trạng thái hệ
thống. Người dùng có thể dựa vào đó để vận hành hệ thống.
SYSM là một hệ thống nhúng lớn vì vậy nó có thể phải boot từ hard disk và có
đầy đủ chức năng như một máy tính truyền thống. Tuy nhiên các chức năng của nó
đều rất quan trọng, cần thiết và phải đáp ứng các tác vụ song song. Hơn nữa là trung
tâm điều khiển nên phải hỗ trợ môi trường đa người dùng cùng các ứng dụng người
dùng. SYSM giống như một server hơn là các máy tính thông thường.

SVTH: Trần Quang Thuận – Phan Bá Minh.

- 15 -



Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
1.5.4 Khối User interface
UI đơn giản chỉ để tương tác với người dùng để có thể đưa ra quyết định quản
lý các tiến trình. UI thường là các hệ thống nhúng nhỏ với đáp ứng thời gian thông
thường. Hiển nhiên các khối UI này cũng có khả năng kết nối mạng. Các khối UI
thông thường sẽ boot từ bộ nhớ flash hay thông qua mạng. UI được cấu hình sẽ nhận
IP từ các DHCP server. Các UI tiện dụng thường phát triển trên dòng ARM hay MIPS
và chạy những kernel thông thường. UI cũng không cần đến những công cụ người
dùng, các tiện ích đồ họa phức tạp hay các thư viện.

1.6 Tổng quan về kernel của Linux/Unix
Kernel cung cấp môi trường cho các ứng dụng hoạt động. Kernel phải thực thi
một nhóm các dịch vụ và giao tiếp tương ứng. Mỗi ứng dụng sử dụng giao tiếp riêng
và tài nguyên phần cứng dành cho ứng dụng thường không ảnh hưởng trực tiếp lẫn
nhau.
1.6.1 Mô hình process/kernel:
Một CPU có thể hoạt động trong user mode hoặc kernel mode. Một số CPU có
thể có nhiều hơn 2 chế độ hoạt động. Ví dụ, bộ vi xử lý Intel 80x86 có 4 trạng thái
hoạt động khác nhau. Nhưng tất cả các kernel chuẩn của Unix chỉ sử dụng Kernel
mode và User mode.
Khi thực thi một chương trình trong User Mode thì chương trình này không thể
trực tiếp truy xuất những cấu trúc dữ liệu của kernel hoặc những chương trình của
kernel. Khi một ứng dụng chạy trong Kernel Mode thì những giới hạn này không còn
nữa. Mỗi loại CPU cung cấp những lệnh đặc biệt để chuyển từ User Mode sang Kernel
Mode và ngược lại. một chương trình chạy phần lớn thời gian ở User Mode và chỉ
chuyển sang Kernel Mode khi có yêu cầu một dịch vụ được cung cấp bởi kernel. Khi
kernel đã đáp ứng yêu cầu đó của chương trình thì kernel lại đưa chương trình đó trở
về trạng thái User Mode.
Processes là những quy trình động, có quãng thời gian tồn tại hữu hạn trong hệ

thống. Các tác vụ như tạo, loại trừ và đồng bộ những tiến trình đang tồn tại được ủy
thác cho một nhóm thường trình trong kernel.

SVTH: Trần Quang Thuận – Phan Bá Minh.

- 16 -


Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
Bản thân kernel không phải là một process nhưng là một process manager. Mô
hình process/kernel cho rằng những process yêu cầu một dịch vụ kernel nào đó thì sử
dụng cấu trúc lập trình đặc biệt được gọi là lời gọi hệ thống (System call). Mỗi lời gọi
hệ thống thiết lập nhóm các thông số cho biết process yêu cầu và sau đó thực thi theo
lệnh CPU để chuyển từ User Mode sang Kernel Mode.
Bên cạnh những tiến trình của người dùng, hệ thống Unix bao gồm một vài tiến
trình đặc quyền được gọi là kernel thread với những đặc điểm:
• Tiến trình chạy trong Kernel Mode trong không gian địa chỉ kernel.
• Tiến trình không tương tác với người dùng, không cần thiết bị đầu cuối.
• Tiến trình thường được tạo ra khi hệ thống khởi động và vẫn còn hoạt
động cho đến khi tắt máy.
Nên chú ý, trên một hệ thống đơn, chỉ có một tiến trình có thể ở trong User
Mode hoặc Kernel Mode. Nếu chạy trong Kernel Mode, bộ vi xử lí sẽ thực thi một số
thủ tục của kernel. Hình 1-3 miêu tả một ví dụ về việc chuyển trạng thái giữa User
Mode và Kernel Mode. Tiến trình 1 trong User Mode đưa ra một lời gọi hệ thống, sau
đó tiến trình này chuyển qua trạng thái Kernel Mode và lời gọi này được phục vụ. Tiến
trình này sau đó trở về trạng thái thực thi ở User Mode cho đến khi xảy ra ngắt do
timer và lịch trình thực thi được kích hoạt trong trạng thái Kernel Mode. Tiến trình
khác được thay thế và tiến trình 2 bắt đầu thực thi trong User Model cho đến khi thiết
bị phần cứng phát ra ngắt. Kết quả của ngắt này là tiến trình 2 chuyển sang Kernel
Mode và phục vụ cho ngắt này.


Hình 1-3: sự chuyển trạng thái giữa User Mode và Kernel Mode

SVTH: Trần Quang Thuận – Phan Bá Minh.

- 17 -


Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
1.6.2 Thi hành một process
Để kernel có thể quản lý các tiến trình, mỗi tiến trình phải được mô tả bởi bằng
process descriptor (bao gồm thông tin về trạng thái hiện tại của tiến trình). Khi kernel
ngừng thực thi một tiến trình thì kernel phải lưu lại nội dung hiện tại của những thanh
ghi bộ xử lí khác nhau vào process descriptor bao gồm:
• Thanh ghi program counter và stack pointer.
• Thanh ghi mục đích chung.
• Thanh ghi float pointer.
• Thanh ghi trạng thái bộ xử lí (Processor Status Word)
• Thanh ghi quản lí bộ nhớ dùng để theo dõi việc sử dụng RAM của tiến
trình.
Khi kernel quyết định tái thực thi một tiến trình, kernel dùng process descriptor
tương ứng để nạp vào các thanh ghi CPU. Giá trị lưu lại của program counter trỏ đến
sau lệnh được thực hiện cuối cùng thì tiến trình trở lại thực thi từ nơi mà tiến trình bị
ngưng.
Khi một tiến trình tạm thời không thực thi trên CPU, nó đang đợi một số sự
kiện. kernel của Unix gọi từ nhiều trạng thái chờ khác. Việc này kiểm soát bởi hàng
đợi của process descriptor. Mỗi hàng đợi tương ứng một tập tiến trình đang chờ một số
sự kiện cụ thể nào đó.
1.6.3 Tái thực thi các process
Kernel của Unix có tính tái thực thi: nghĩa là trong cùng thời điểm, nhiều tiến

trình có thể thực thi trong Kernel Mode. Dĩ nhiên trên những hệ thống đơn vị xử lí chỉ
có một tiến trình chạy nhưng nhiều tiến trình có thể bị khóa trong Kernel Mode, đợi tài
nguyên CPU hoặc hoàn thành việc nhập xuất. Ví dụ như sau khi đưa ra yêu cầu đọc
đĩa, kernel sẽ để bộ điều khiển đĩa xử lí nó và trở về thực thi những tiến trình khác.
Một ngắt thông báo cho kernel biết khi thiết bị đã đáp ứng việc đọc này vì vậy có thể
trở lại thực thi tiến trình ban đầu.
Một phương pháp cung cấp khả năng tái thực thi là viết những hàm chỉ có thể
thay đổi các biến cục bổ và không làm thay đổi cấu trúc dữ liệu toàn cục. Các hàm như
vậy được gọi là những hàm tái thực thi (Reentrant functions). Nhưng kernel thì không
SVTH: Trần Quang Thuận – Phan Bá Minh.

- 18 -


Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
bị giới hạn như những hàm tái thực thi.. Thay vì vậy, kernel có thể gồm những hàm
không tái thực thi và sử dụng cơ chế khóa để chắc chắn rằng chỉ một tiến trình có thể
thi hành hàm không tái thực thi tại một thời điểm. Mỗi tiến trình trong Kernel Mode
chỉ hoạt động trên bộ nhớ của nó và không thể gây trở ngại với những tiến trình khác.
Nếu ngắt phần cứng xảy ra thì kernel có thể hoãn tiến trình đang chạy hiện tại
cho dù tiến trình đó đang ở trong Kernel Mode. Khả năng này có tính chất quan trọng
vì nó cải thiện tốc độ của bộ điều khiển thiết bị đã phát sinh ngắt. Khi một thiết bị sinh
ngắt, thiết bị đó đợi cho đến khi CPU trả lời. Nếu kernel trả lời một cách nhanh chóng
thì bộ điều khiển thiết bị có thể thực hiện những nhiệm vụ khác trong khi CPU xử lí
ngắt.
Kernel reentrancy ảnh hưởng lên việc tổ chức của kernel. Một kernel control
path chỉ rõ trình tự của tập lệnh được thực thi bởi kernel để xử lý một lời gọi hệ thống,
một ngoại lệ, hay một ngắt.
Trong trường hợp đơn giản nhất, CPU thực thi một kernel control path theo
tuần tự từ lệnh đầu tiên đến lệnh cuối cùng. CPU thêm vào những kernel control path

khi một trong những sự kiện dưới đây xảy ra:


Một tiến trình đang thực thi trong User Mode gọi một lời gọi hệ thống và
kernel control path tương ứng xác định không thể thỏa mãn yêu cầu này
ngay, sau đó nó sẽ gọi một lịch trình để chọn một tiến trình mới đưa vào
thực thi. Kết quả là việc chuyển trạng thái tiến trình xảy ra. Kernel
control path đầu tiên chưa hoàn thành và CPU tái thực thi những kernel
control path khác. Trong trường hợp này, hai control path được thực thi
với tư cách là 2 tiến trình khác nhau.

• CPU phát hiện một ngoại lệ, ví dụ có truy cập đến một page không có
trong RAM trong khi đang chạy một kernel control path. Control path
đầu tiên bị hoãn lại và CPU bắt đầu thực thi các thủ tục thích hợp. Thủ
tục này có thể định vị một page mới cho tiến trình và đọc nội dụng của
nó từ đĩa. Khi thủ tục kết thúc, control path đầu tiên được gọi lại. Trong
trường hợp này, hai control path được thực thi với tư cách là cùng một
tiến trình.

SVTH: Trần Quang Thuận – Phan Bá Minh.

- 19 -


Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
• Ngắt phần cứng xảy ra trong khi CPU đang chạy một kernel control path
với việc ngắt được cho phép. Kernel control path đầu tiên chưa hoàn
thành và CPU bắt đầu xử lí kernel control path khác để điều khiển ngắt.
kernel control path đầu tiên gọi lại khi bộ điều khiển ngắt kết thúc.
Trong trường hợp này hai kernel control path là sự thực thi của cùng một

tiến trình và tất cả thời gian thực thi đều được tính là của nó. Tuy nhiên,
bộ điều khiển ngắt không cần thiết hoạt động với tư cách một tiến trình.
Hình 1-4 minh họa vài ví dụ của việc chèn vào và không chèn vào kernel
control path. Xem xét ba trạng thái khác nhau của CPU:
• Thực thi một tiến trình trong trạng thái User Mode (User)
• Thực thi một ngoại lệ hoặc bộ điều khiển lời gọi hệ thống (Excp).
• Thực thi bộ điều khiển ngắt (Intr)

Hình 1-4: Việc chèn kernel control path

1.6.4 Không gian địa chỉ các tiến trình:

Mỗi tiến trình chạy trong không gian địa chỉ riêng của nó. Một tiến trình chạy
trong trạng thái User Mode sử dụng vùng stack, dữ liệu và code riêng. Khi chạy trong
Kernel Mode, tiến trình lại định vị địa chỉ vùng kernel data, vùng code và sử dụng
vùng stack khác. Vì kernel có tính tái thực thi, những kernel control path khác nhau –
mỗi cái liên quan đến một tiến trình khác nhau có thể được thực thi lần lượt. Trong
trường hợp này, mỗi kernel control path qui cho vùng stack kernel riêng.
Mỗi tiến trình khi thực thi truy cập vào không gian địa chỉ riêng, đôi khi một
phần của không gian địa chỉ được chia sẻ giữa các tiến trình. Trong một số trường hợp
sự chia sẻ này được yêu cầu bởi các tiến trình, một số khác thì được thực hiện tự động
bởi kernel để giảm bớt việc sử dụng bộ nhớ.
SVTH: Trần Quang Thuận – Phan Bá Minh.

- 20 -


Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
Nếu nhiều user cần dùng cùng một chương trình cùng lúc thì chỉ nạp chương
trình vào bộ nhớ một lần và những lệnh đó có thể được chia sẻ bởi tất cả các user nào

cần nó. Dữ liệu dĩ nhiên không được chia sẻ bởi vì mỗi user có những dữ liệu riêng
biệt. Kiểu chia sẻ không gian địa chỉ được thực hiện một cách tự động bởi kernel để
tiết kiệm bộ nhớ.
Những tiến trình cũng chia sẻ một phần không gian bộ nhớ là loại giao tiếp giữa
các tiến trình với nhau sử dụng kĩ thuật bộ nhớ chia sẻ được giới thiệu trong System V
và được hỗ trợ bởi Linux.
Cuối cùng, Linux hỗ trợ lời gọi hệ thống mmap(), là lời gọi cho phép một phần
của tập tin hay bộ nhớ trên một thiết bị được ánh xạ là một phần của không gian địa
chỉ tiến trình. Việc ánh xạ bộ nhớ cung cấp sự lựa chọn đọc và ghi thông thường cho
việc truyền dữ liệu. nếu nhiều tiến trình khác nhau cũng chia sẻ một tập tin thì không
gian địa chỉ của mỗi tiến trình mà chia sẻ tập tin sẽ bao gồm việc ánh xạ bộ nhớ.

1.6.5 Sự đồng bộ hóa và những vùng then chốt:
Thi hành một reentrant kernel cần thiết sự đồng bộ hóa: nếu một kernel control
path bị hoãn trong khi tác động lên cấu trúc dữ liệu của kernel thì không một kernel
control path nào sẽ được cho phép tác động lên cấu trúc dữ liệu này trừ khi nó được
xác lập lại một trạng thái nhất định nào đó. Nếu không thì việc ảnh hưởng của hai
control path có thể làm hỏng thông tin được lưu trữ.
Ví dụ, giả sử có một biến toàn cục V chứa số mục tin có sẵn của tài nguyên hệ
thống. Kernel control path A đầu tiên đọc biến và quyết định rằng chỉ có một mục tin
có sẵn. tại thời điểm đó, một kernel control path B khác được kích hoạt và cũng đọc
biến này, biến này vẫn chứa giá trị 1. Do đó B giảm một giá trị V và bắt đầu sử dụng
mục tin tài nguyên này. Sau đó A trở lại sự thực thi; bởi vì nó đã đọc giá trị của V rồi,
A cho rằng A có thể giảm V và lấy mục tin tài nguyên mà B đã sử dụng rồi. Kết quả
cuối cùng V chứa -1, và hai kernel control path đang sử dùng cùng mục tin tài nguyên
với sai sót tiềm tàng.
Trong ví dụ trước, việc hỏng dữ liệu sẽ không xảy ra nếu hai control path đọc
và giảm V với quá trình hoạt động đơn lẻ, không gián đoạn. Tuy nhiên kernel bao gồm
rất nhiều cấu trúc dữ liệu mà không thể truy xuất chỉ bằng một hành động đơn lẻ. Ví
SVTH: Trần Quang Thuận – Phan Bá Minh.


- 21 -


Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
dụ, không thể gỡ bỏ một phần tử từ một danh sách liên kết bằng một hành động đơn lẻ,
bởi vì kernel cần truy xuất ít nhất hai con trỏ cùng một lúc. Bất cứ đoạn code cần phải
được hoàn thành trước tiến trình khác bắt đầu được gọi là vùng then chốt (Critical
region).
Những vấn đề xảy ra không những giữa các kernel control path mà còn giữa
các tiến trình chia sẻ dữ liệu chung. Những kĩ thuật đồng bộ hóa khác nhau vẫn được
chấp nhận.
1.6.6 Việc giao tiếp tín hiệu và liên tiến trình
Tín hiệu Linux/Unix cung cấp cơ chế để thông báo những tiến trình của những
sự kiện trong hệ thống. Mỗi sự kiện có số tín hiệu của riêng nó ví dụ như SIGTERM.
Có 2 loại sự kiện hệ thống:
Thông báo bất đồng bộ: ví dụ, một người dùng có thể gửi tín hiệu ngắt
SIGTERM đến một tiến trình bằng cách nhấn mã phím ngắt (thường là CTRL-C) ở
thiết bị đầu cuối.
Những ngoại lệ hay lỗi đồng bộ: ví dụ, kernel gửi tín hiệu SIGSEGV đến một
tiến trình khi nó truy xuất vị trí bộ nhớ ở địa chỉ không hợp lệ.
Chuẩn POSIX định nghĩa khoảng 20 tín hiệu khác nhau, hai trong số đó là
người dùng định nghĩa và có thể được sử dụng như là cơ chế ban đầu cho việc giao
tiếp và đồng bộ giữa các tiến trình trong User Mode. Nhìn chung, một tiến trình phải
phản ứng lại tín hiệu thu nhận bằng hai cách:
• Lờ đi tín hiệu.
• Không đồng bộ thực thi một thủ tục riêng biệt (bộ điều khiển tín hiệu).
Nếu tiến trình không định rõ một trong những tùy chọn này, kernel sẽ thực hiện
hành động mặc định dựa trên số tín hiệu. Năm hành động mặc định có thể có là:
• Kết thúc tiến trình

• Ghi nội dung thực thi và nội dung của không gian địa chỉ vào tập tin
(core dump) và kết thúc tiến trình.
• Lờ đi tín hiệu.
• Hoãn tiến trình.
• Gọi lại sự thực thi của tiến trình nếu nó bị ngưng.
SVTH: Trần Quang Thuận – Phan Bá Minh.

- 22 -


Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
Xử lí tín hiệu kernel khá phức tạp vì POSIX cho phép những tiến trình ngăn tín
hiệu tạm thời. Hơn nữa, một vài tín hiệu như SIGKILL không thể xử lí trực tiếp bởi
tiến trình và không thể phớt lờ.
Chia sẻ bộ nhớ cung cấp cách nhanh nhất cho những tiến trình trao đổi và chia
sẻ dữ liệu. một tiến trình bắt đầu bằng cách đưa ra một lời gọi hệ thống shmget() để tạo
bộ nhớ chia sẻ mới có kích thước theo yêu cầu. Sau khi có được định danh tài nguyên
IPC, tiến trình này triệu gọi lời gọi hệ thống shmat()sẽ trả về địa chỉ bắt đầu của vùng
mới trong không gian địa chỉ tiến trình. Khi tiến trình muốn gỡ bỏ bộ nhớ chia sẻ từ
không gian địa chỉ của nó, nó gọi shmdt(). Sự thi hành chia sẻ bộ nhớ dựa trên việc
kernel thực thi không gian địa chỉ tiến trình như thế nào.
1.6.7 Quản lí tiến trình:
Linux/Unix phân biệt rõ ràng giữa tiến trình và chương trình nó đang thực thi.
Để kết thúc, lần lượt sử dụng lời gọi hệ thống fork() và exit() để tạo một tiến trình mới
và kết thúc nó, trong khi gọi exec() để nạp một chương trình mới. Sau đó thực thi lời
gọi hệ thống, tiến trình trở về thực thi với một không gian địa chỉ hoàn toàn mới chứa
chương trình đã nạp.
Tiến trình gọi fork() là tiến trình cha (parent) trong khi tiến trình mới là tiến
trình con (child). Parent và child có thể tương tác với nhau vì cấu trúc dữ liệu mô tả
mỗi tiến trình bao gồm một con trỏ chỉ đến parent và những con trỏ chỉ đến child ngay.

Lời gọi hệ thống exit() kết thúc tiến trình. Kernel xử lí lời gọi hệ thống bằng
cách giải phóng các tài nguyên mà tiến trình làm chủ và gửi tiến trình parent một tín
hiệu SIGCHLD tín hiệu này mặc định bị lờ đi.
1.6.7.1

Zombie process
Làm cách nào một tiến trình parent biết thông tin kết thúc của children? Lời gọi

hệ thống wait() cho phép một tiến trình đợi cho đến khi một trong những children của
nó kết thúc, nó trả về định danh tiến trình (PID) của child đã kết thúc.
Khi thực thi lời gọi hệ thống này, kernel kiểm tra một child đã kết thúc hay
chưa. Trạng thái tiến trình đặc biệt zombie được giới thiệu để đại diện cho những tiến
trình đã kết thúc: một tiến trình còn trong trạng thái đó cho đến khi tiến trình parent
của nó thực thi một lời gọi hệ thống wait() lên nó. Bộ xử lý lời gọi hệ thống trích một

SVTH: Trần Quang Thuận – Phan Bá Minh.

- 23 -


Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
số dữ liệu về việc sử dụng tài nguyên từ những trường miêu tả tiến trình, sinh ra một
mô tả tiến trình khi dữ liệu được thu thập. Nếu không có tiến trình child nào đã kết
thúc khi lời gọi hệ thống wait() được thi hành thì kernel thường đặt tiến trình trong
trạng thái chờ cho đến khi một child nào đó kết thúc.
Nhiều kernel cũng thực thi lời gọi hệ thống waitpid() cho phép một tiến trình
đợi một tiến trình child cụ thể. Kernel giữ thông tin trên tiến trình của child cho đến
khi parent cấp phát lời gọi wait(), nhưng giả sử tiến trình của parent kết thúc mà không
gọi wait()? Thông tin quan trọng lấy ở bộ nhớ có thể được sử dụng để phục vụ cho
những tiến trình đang hoạt động. Ví dụ, nhiều shell cho phép user thực hiện lệnh ở

background rồi sau đó log out. Tiến trình đang chạy trên shell kết thúc, nhưng children
của nó vẫn tiếp tục hoạt động.
Giải pháp dựa vào tiến trình hệ thống đặc biệt được gọi là init được tạo ra trong
suốt việc khởi tạo hệ thống. Khi một tiến trình kết thúc, kernel thay đổi con trỏ mô tả
tiến trình thích hợp của tất cả children đang tồn tại của tiến trình đã kết thúc để làm
chúng trở thành children của init. Tiến trình này theo dõi sự thực thi của tất cả children
của nó và thông thường cấp phát lời gọi hệ thống wait(),điều đó có nghĩa là tống khứ
tất cả các zombie.
1.6.7.2 Nhóm tiến trình và phiên đăng nhập:
Những hệ điều hành Unix mới giới thiệu khái niệm của process group để trình
bày khái niệm “job”. Ví dụ, để thực thi câu lệnh
$ ls | sort | more

Shell phải hỗ trợ tiến trình nhóm như là bash, tạo một nhóm mới cho ba tiến
trình tương ứng với ls, sort và more. Shell đóng vai trò trên ba tiến trình như thể chúng
là những thực thể đơn lẻ. Mỗi bộ mô tả tiến trình bào gồm một trường process group
ID. Mỗi nhóm của các tiến trình có một group leader là tiến trình có PID trùng với
process group ID. Một tiến trình được tạo mới thì được chèn vào nhóm tiến trình của
parent của nó.
Kernel Unix cũng giới thiệu phiên đăng nhập. Một phiên đăng nhập chứa tất cả
tiết trình con của tiến trình bắt đầu một phiên làm việc trên terminal. Tất cả tiến trình
trong một nhóm tiến trình phải cùng phiên đăng nhập. Một phiên đăng nhập có nhiều
nhóm tiến trình đang hoạt động cùng lúc, một trong những nhóm tiến trình này luôn
SVTH: Trần Quang Thuận – Phan Bá Minh.

- 24 -


Nghiên cứu Linux trên hệ thống nhúng và ứng dụng.
luôn trong foreground, nghĩa là nó truy xuất terminal. Những nhóm tiến trình đang

hoạt động khác ở background. Khi một tiến trình background cố gắng truy xuất
terminal, nó nhận một tín hiệu SIGTTIN hay SIGTTOUT. Trong nhiều câu lệnh shell,
sử dụng lệnh nội trú bg và fg để đặt nhóm tiến trình hoặc là ở background hay ở
foreground.
1.6.8 Quản lý bộ nhớ
1.6.8.1 Bộ nhớ ảo
Tất cả các hệ thống Linux gần đây cung cấp khái niệm hữu ích được gọi là bộ
nhớ ảo. Bộ nhớ ảo đóng vai trò như là tầng logic giữa yêu cầu bộ nhớ ứng dụng và đơn
vị quản lí bộ nhớ (MMU) phần cứng. Bộ nhớ ảo có rất nhiều mục đích và ưu điểm:
• Những tiến trình khác nhau có thể được thực thi đồng thời.
• Có thể chạy những ứng dụng mà nhu cầu bộ nhớ lớn hơn bộ nhớ vật lí.
• Tiến trình có thể chạy một chương trình mà có code chỉ được nạp một
phần vào bộ nhớ.
• Cho phép mỗi tiến trình truy xuất tập hợp con của bộ nhớ vật lí có sẵn.
• Những tiến trình chia sẻ ảnh bộ nhớ đơn của một thư viện hay chương
trình.
• Có thể đặt lại vị trí cho những chương trình ở bất cứ vị trí nào trong bộ
nhớ vật lý.
• Người lập trình viết code độc lập với máy vì họ không cần hiểu biến
nhiều về tổ chức bộ nhớ vật lý
Thành phần chính của hệ thống bộ nhớ ảo là khái niệm không gian bộ nhớ ảo.
Các tham chiếu bộ nhớ mà một tiến trình có thể sử dụng khác với địa chỉ bộ nhớ vật lý.
Khi một tiến trình sử dụng địa chỉ ảo, kernel và MMU hợp tác định vị địa chỉ vật lí của
bộ nhớ được yêu cầu.
Các CPU ngày nay bao gồm cả mạch phần cứng tự động dịch địa chỉ ảo thành
địa chỉ vật lý. Chia RAM thành nhiều page 4KB hay 8 KB và các page table chi tiết để
xác định rõ sự tương ứng giữa địa chỉ ảo và địa chỉ vật lý. Những mạch này làm cho
việc định vị bộ nhớ đơn giản hơn bởi vì mỗi yêu cầu cần một khối địa chỉ ảo liên tiếp

SVTH: Trần Quang Thuận – Phan Bá Minh.


- 25 -


×