1. Trang chủ
  2. » Tất cả

LỜI CẢM ƠN

78 2 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

Thông tin cơ bản

Tiêu đề USB Driver trên hệ điều hành Linux Red Hat
Tác giả Phạm Tuấn Minh
Người hướng dẫn Thầy Nguyễn Ngọc Bình, Anh Nguyễn Đức Quỳnh
Trường học Đại học Bách Khoa Hà Nội
Chuyên ngành Công nghệ Thông tin
Thể loại Đồ án tốt nghiệp
Năm xuất bản 2004
Thành phố Hà Nội
Định dạng
Số trang 78
Dung lượng 479,21 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Cấu trúc

  • CHƯƠNG 1. GIỚI THIỆU KIẾN TRÚC BUS USB (6)
    • 1.1. GIỚI THIỆU CHUNG VỀ USB (6)
    • 1.2. CÁC ĐẶC ĐIỂM CỦA USB (6)
    • 1.3. SƠ LƯỢC VỀ KIẾN TRÚC BUS USB… (8)
      • 1.3.1. USB interconnect (8)
      • 1.3.2. Bus Topology (0)
      • 1.3.3. USB host (0)
      • 1.3.4. USB Devices (0)
      • 1.3.5. Quan hệ giữa USB devices và USB host (0)
      • 1.3.6. Physical Interface (0)
      • 1.3.7. Bus Protocol (0)
      • 1.3.8. Các loại luồng điều khiển (0)
      • 1.3.9. Cấu hình hệ thống (0)
      • 1.3.10. USB là một bus robustness (0)
      • 1.3.11. Các trạng thái của device (0)
  • CHƯƠNG 2. HỆ ĐIỀU HÀNH LINUX & LINUX KERNEL (16)
    • 2.1. LỊCH SỬ RA ĐỜI HỆ ĐIỀU HÀNH LINUX (16)
    • 2.2. CÁC ĐẶC ĐIỂM CƠ BẢN (17)
    • 2.3. QUẢN LÝ FILE (20)
    • 2.4. QUẢN LÝ TIẾN TRÌNH (25)
    • 2.5. QUẢN LÝ BỘ NHỚ (34)
    • 2.6. LINUX KERNEL (38)
  • CHƯƠNG 3. MỘT SỐ VẤN ĐỀ KHI PHÁT TRIỂNDRIVER (39)
    • 3.1. DRIVER LÀ GÌ (39)
    • 3.2. CÁC KHÓ KHĂN KHI PHÁT TRIỂN DRIVER (40)
    • 3.3. QUÁ TRÌNH PHÁT TRIỂN DRIVER (0)
    • 3.3. GIỚI THIỆU VỀ LINUX DRIVER (0)
  • CHƯƠNG 4. USB DRIVER (43)
    • 4.1. THIẾT BỊ KÝ TỰ VÀ THIẾT BỊ KHỐI (43)
      • 4.1.1. Thiết bị ký tự (0)
      • 4.1.2. Thiết bị khối (0)
    • 4.2. POLLING & INTERUPTS (44)
      • 4.2.1. Polling mode (44)
      • 4.2.2. Interrupt mode (45)
      • 4.2.3. Interrupt sharing (46)
      • 4.2.4. Bottom halvels (46)
      • 4.2.5. Task queues (46)
      • 4.2.6. DMA mode (46)
    • 4.3. USB TOPOGY (47)
    • 4.4. CÁC KIỂU LUỒNG ĐIỀU KHIỂN (47)
    • 4.5. CẤU HÌNH THIÊT BỊ (48)
    • 4.6. CÁC YÊU CẦU USB (54)
  • CHƯƠNG 5. USB DRIVER CHO FLASH MEMORY (56)
    • 5.1. GIỚI THIỆU VỀ FLASH MEMMORY (57)
    • 5.2. THUẬT TOÁN THỤC HIỆN TRÊN USB DRIVER CHO FLASH MEMMORY (0)
  • CHƯƠNG 6. TỔNG KẾT (63)
    • 6.1. PHÁT TRIỂN DRIVER TRÊN HỆ ĐIỀU HÀNH MÃ NGUỒN ĐÓNG VÀ HỆ ĐIỀU HÀNH MÃ NGUỒN MỞ (63)
    • 6.2. TỔNG KẾT (64)

Nội dung

LỜI CẢM ƠN Đồ án tốt nghiệp USB driver trên hệ điều hành Linux Red Hat LỜI CẢM ƠN Quãng thời gian sinh viên đại học không phải là dài nhưng là một thời gian sâu sắc và quan trọng trong mỗi chúng ta Tr[.]

Trang 1

LỜI CẢM ƠN

Quãng thời gian sinh viên đại học không phải là dài nhưng là một thời gian sâu sắc và quan trọng trong mỗi chúng ta Trong quãng thời gian sinh viên của mình, em đã nhận được sự dạy dỗ, chỉ bảo tận tình của các thầy, các

cô các cán bộ khoa học kỹ thuật trong trường đại học Bách Khoa Hà Nội Khoảng thời gian đó đã cho em những kiến thức chuyên môn cũng như

phương pháp làm việc khoa học Cùng với sự động viên giúp đỡ của gia đình, các anh chị đồng nghiệp, bạn bè, giờ đây em đã hoàn thành đồ án tót nghiệp đại học

Nhân dịp này em xin được gửi lời cảm ơn tới tất cả các thầy, các cô đã dạy dỗ chỉ bảo cho em trong suốt thời gian vừa qua Em xin cảm ơn các thầy, các cô trong khoa Công nghệ Thông tin, những người đã cho em những kiến thức quý báu, dìu dắt em những bước đầu tiên trong nghề nghiệp Em xin cảm ơn các thầy, các cô trpng bộ môn Công nghệ Phần mềm, đặc biệt là thầy Nguyễn Ngọc Bình Thầy đã nhiệt tình giúp đỡ và tạo mọi điều kiện, chỉ bảo

và hướng dẫn từng bước đi để em có thể hoàn thành đồ án tôt nghiệp này

Tôi xin được gửi lời cảm ơn chân thành tới công ty phần mềm FSOFT

đã tạo mọi điều kiện để tôi có thể hoàn thành đồ án tot nghiệp này, đặc biệt

là các anh Trần Xuân Khôi, Nguyễn Đức Quỳnh đã nhiệt tình chỉ bảo, hướng dẫn Cảm ơn các bạn đồng nghiệp đã giúp đỡ, động viên và đóng góp các ý kiến quý báu trong thời gian tôi thực hiện đồ án

Cuối cùng, tôi xin được gửi lời cảm ơn sâu sắc tới bố mẹ và gia đình, những người thân đã hết sức động viên, cổ vũ, giúp đõ tôi về vật chất cũng như tinh thần để tôi có thể hồan thành đồ án tốt nghiệp này

Phạm Tuấn Minh

Tháng 5 – Năm 2004

Trang 2

LỜI NÓI ĐẦU

Ngày nay, sự phát triển nhanh chóng của Công Nghệ Thông Tin cùng với các ứng dụng của nó tác động mãnh mẽ đến mọi lĩnh vực của đời sống kinh tế xã hội, nhu cầu của con người cũng ngày càng trở nên phức tạp Trong bối cảnh ấy, máy tính ngày càng được sử dụng trong nhiều ứng dụng khác nhau…

Với mục đích hiểu sâu thêm về hệ điều hành nguồn mở Linux và quá trình giao tiếp giữa thiết bị phần cứng với phần mềm, quá trình xây dựng một

driver được sự giới thiệu của anh Nguyễn Đức Quỳnh ở công ty phần mềm

FPT-SOFT và giúp đỡ tận tình của thầy giáo tiến sỹ Nguyễn Ngọc Bình, em

đã lựa chọn đề tài:

“USB driver trên hệ điều hành Linux Red Hat ”Trong đò án tốt nghiệp này, em đi vào nghiên cứu các vấn đề về kiến trúc bus USB, USB driver trên hệ điều hành Linux Đồ án được chia thành 6 chương và ba phụ lục

Chương 1 Giới thiệu kiến trúc bus USB

Chương 2 Hệ điều hành Linux & LinuxKernel

Chương 3 Một số vấn đề khi phát triển driver

Chương 4 Linux Driver

Chương 5 USB driver cho flash memmory

Chương 6 Tổng kết

Phụ lục A Các thuật ngữ

Phụ lục B Mô tả các hàm dùng trong USB driver cho flash memmory Phụ lục C Các tài liệu tham khảo

Trang 3

MỤC LỤC

CHƯƠNG 1 GIỚI THIỆU KIẾN TRÚC BUS

1.1 GIỚI THIỆU CHUNG VỀ

1.2 CÁC ĐẶC ĐIỂM CỦA

1.3 SƠ LƯỢC VỀ KIẾN TRÚC BUS

1.3.1 USB

1.3.2 Bus

1.3.3 USB

1.3.4 USB

1.3.5 Quan hệ giữa USB devices và USB host

1.3.6 Physical

1.3.7 Bus

1.3.8 Các loại luồng điều khiển

1.3.9 Cấu hình hệ

1.3.10 USB là một bus

1.3.11 Các trạng thái của device

…… ……….…… … -14-CHƯƠNG 2 HỆ ĐIỀU HÀNH LINUX & LINUX

2.1 LỊCH SỬ RA ĐỜI HỆ ĐIỀU HÀNH

2.2 CÁC ĐẶC ĐIỂM CƠ

2.3 QUẢN LÝ FILE

2.4 QUẢN LÝ TIẾN

2.5 QUẢN LÝ BỘ

2.6 LINUX

Trang 4

KERNEL……… ……….…… … -38-CHƯƠNG 3 MỘT SỐ VẤN ĐỀ KHI PHÁT TRIỂNDRIVER

3.1 DRIVER LÀ

3.2 CÁC KHÓ KHĂN KHI PHÁT TRIỂN

3.3 QUÁ TRÌNH PHÁT TRIỂN DRIVER

3.3 GIỚI THIỆU VỀ LINUX

DRIVER ……….…… … -41-CHƯƠNG 4 USB

4.1 THIẾT BỊ KÝ TỰ VÀ THIẾT BỊ

4.1.1 Thiết bị ký

4.1.2 Thiết bị

4.2 POLLING &

4.2.1 Polling

4.2.2 Interrupt

4.2.3 Interrupt

4.2.4 Bottom

4.2.5 Task

4.2.6 DMA

4.3 USB

4.4 CÁC KIỂU LUỒNG ĐIỀU

4.5 CẤU HÌNH THIÊT BỊ

4.6 CÁC YÊU CẦU

USB……… ……….…… … -55-CHƯƠNG 5 USB DRIVER CHO FLASH

5.1 GIỚI THIỆU VỀ FLASH

5.2 THUẬT TOÁN THỤC HIỆN TRÊN USB DRIVER CHO FLASH MEMMORY

Trang 5

5.3 CÁC CẤU TRÚC DỮ LIỆU DÙNG TRÊN USB DRIVER CHO

FLASH

MEMMORY……….……… ……….…… … -59-CHƯƠNG 6 TỔNG

6.1 PHÁT TRIỂN DRIVER TRÊN HỆ ĐIỀU HÀNH MÃ NGUỒN

ĐÓNG VÀ HỆ ĐIỀU HÀNH MÃ NGUỒN 6.2 TỔNG KẾT ……… ……….…… … -64-

MỞ……….…….… -64-Phụ lục A Các thuật ngữ

Phụ lục B Một số hàm cung cấp bởi kernel cho USB flash memmory driver Phụ lục C Các tài liệu tham khảo

Trang 6

CHƯƠNG 1 GIỚI THIỆU VỀ KIẾN TRÚC BUS USB

1.1 GIỚI THIỆU CHUNG VỀ USB

USB được xác định như một chuẩn công nghiệp mở rộng kiến trúc của

PC tập trung ở Computer Telephony Integration (CTI), sự giao tiếp, và hiệu quả của ứng dụng Một kiến trúc USB phải đáp ứng các tiêu chuẩn sau:

- dễ sử dụng cho việc mở rộng các thiết bị PC

- tích hợp với các công nghệ kỹ thuật nổi tiếng

- hỗ trợ cho các cấu hình PC khác nhau và các thiết bị số

- cung cấp giao tiếp chuẩn cho phép triển khai nhanh trên các sản phẩm

- cho phép tham số hoá cho các loại PC khác nhau

1.2 CÁC ĐẶC ĐIỂM CỦA USB

Các đặc trưng của USB cung cấp một sự lựa chọn các thuộc tính để đạt được các mức giá thành và hiệu năngn khác nhau

Sự tích hợp các điểm có thể cho phép các chức năng với các mức hệ thống và thanhg phần khác nhau

Các đặc điểm được xếp theo các loại sau:

+ Dễ sử dụng cho người sử dụng cuối

- Có một mẫu cho cáp và kết nối

Trang 7

- Các mức chi tiết về nguồn điện được phân tách từ người sử dụng

- Tự xác định các thiết bị, tự động kết nối với các hàm chức năng trong driver, và cấu hình

- Kết nối động và cấu hình lại các thiết bị

+ Phạm vi rộng môi trường làm việc và ứng dụng

- thích hợp cho các dải thông từ vài kb/s đến vài Mb/s

- hỗ trợ cả truyền thông đồng bộ và dị bộ qua một loại dây

- hỗ trợ xử lý tranh chấp (nhiều kết nối, nhiều thiết bị)

- hỗ trợ tới 127 thiết bị kết vật lý kết nối đồng thời

- hỗ trợ truyền thông đa luồng giữa máy tính (host) và các thiết bị

- hỗ trợ các thiết bị phức hợp (một thiết bị phức hợp bao gồm nhiều chức năng)

+ Dải thông đồng bộ

- đảm bảo dải thông và góc trễ thấp thích hợp cho telephony, audio,

- dùng đồng bộ có thể sử dụng toần bộ dải thông bus

- kỹ thuật xử lý lỗi và khôi phục được xây dựng triong giao thức

- thêm và tháo gỡ các thiết bị động tuỳ theo người sử dụng theo thời gian

Trang 8

- hỗ trợ phát hiện lỗi của thiết bị

+ Đồng vận với công nghiệp PC (Synergy with PC industry)

- giao thức dơn giản để thực hiện và tích hợp

- thống nhất với kiến trúc PC plug-and-play

- Cộng tác với một số hệ thống giao tiếp đã tồn tại

+ Giá thành thực hiện rẻ Low-cost implementation

- giá thành rẻ với kênh phụ ở 1.5Mb/s

- tối ưu cho tích hợp các thiết bị phần cứng với PC (host)

- thích hợp cho phá triển các thiết bị giá thành rẻ

- cáp và bộ phận kết nối giá thành rẻ

- Sử dụng các công nghệ phổ biến

1.3 SƠ LƯỢC VỀ KIẾN TRÚC USB

Một hệ thống USB được mô tả bao gồm ba phần chính :

+ Bus Topology: Mô hình kết nối giữa USB devices và host

+ Inter-layer Relationships: Là stack chứa các USB tasks được thực hiện ở từng lớp của hệ thống

+ Data Flow Models: Cách thức mà dữ liệu được chuyển trong hệ thống qua USB giữa các nhà sản xuất và người sử dụng

Trang 9

+ USB Schedule: USB cung cấp một chia sẻ kết nối Truy cập vào kết nối này được xác định với mục đích hỗ trợ truyền thông đồng bộ và loại trừ chi phí phân xử.

1.3.1 Bus Topology

1.3.2 USB host

Bất kỳ hệ thống USB nào cũng chỉ có một host Giao tiếp USB tới PC host được xác định thông qua Host Controller Host Controller có thể được thực hiện nhờ sự kết hợp của phần cứng, vi chương trình, hay phần mềm Một root hub được tích hợp với host system để cung cấp một hoặc hoặc một vài điểm truy cập

1.3.3 USB Devices

USB devices là một trong các loại sau:

- Hubs cugn cấp một vài điểm truy cập tới USB

Trang 10

- Các chức năng, cung cấp một vài khả năng cho hệ thống như kết nối ISDN , a digital joystick, hoặc speakers.

USB devices đặt ra một chuẩn giao tiếp USB dưới dạng:

- bao gồm giao thức USB của chúng

- các trả lời cho các thao tác chuẩn USB của chúng như cấu hình và khởi tạo

- Các thông tin mô tả khả năng của chúng

1.3.4 Quan hệ giữa USB devices và USB host

USB Host và USB Device là hai lớp đối lập giao tiếp với nhau

Trang 12

1.3.6 Bus Protocol

USB là một bus thăm dò Host Controller khởi đầu tất cả các trao đổi

dữ liệu Tất cả các giao tác liên quan đến sự truyền thông dữ liệu được phân chia thành 3 gói Mỗi giao tác được bắt đầu khi Host Controller, được lập lịch từ trước, gửi một USB packet môt tả kiểu và hướng của giao tác, địa chỉ của thiết bị và số điểm cuối packet này được gọi là “token packet.” USB device được xác định địa chỉ kích hoạt chính nó bằng cách giải mã trường địa chỉ thích hợp Trong giao tác, dữ liệu được truyền tải từ host đến a device hoặc từ a device tới host Hướng truyền dữ liệu được xác định trong token packet Nguồn của giao tác sau đó gửi một data package hoặc chỉ ra rằng không có dữ liệu để truyền Nơi nhận sẽ trả lời bằng một “handshake packet” chỉ ra rằng dữ liệu đã đwocj truyền thành công

Mô hình truyền dữ liệu giữa nguồn và đích trên host và endpoint trên device được gọi là một đường ống pipe Có hai loại pipe: luồng và thông điệp (stream and message) luồng dữ liệu không có cấu trúc USB trong khi thông điệp thì có cấu trúc Ngoài ra, các pipes có sự kết hợp của dải thông dữ liệu(data bandwidth), kiểu dịch vụ truyền(transfer service type) như đồng bộ,dị bộ và các đặc điểm của endpoint như like hướng và kích thước bộ đệm Hầu hết các pipes hình thành khi một USB device được cấu hình Một message pipe, Default Control Pipe được hình thành khi device được cugn cấp nguồn để cung cấp truy cập tới cấu hình thiết bị, trạng thái và thông tin điều khiển

Trang 13

Các giao tác được lập lịch cho phép điều khiển một vài luồng pipes Ở mức phần cứng, bằng cách sử dụng NAK handshake như bộ điều chỉnh tỉ lệ

dữ liệu để ngăn các bộ đệm khỏi các tình huống underrun or overrun Khi có NAKed, một giao tác được thử lại một lần nữa khi thời gian bú cho phép Kỹ thuật điều khiển luồng cho phép thành lập một lịch phức tạp phù hợp với dịch

vụ tương tranh của các luồng phức tạp Theo cách đó, nhiều stream pipes có thể được phục vụ giữa các khoảng thời gian và các gói với kích thước khác nhau

1.3.7 Các loại luồng điều khiển (Data Flow Types)

+ Control Transfers: Được sử dụng để cấu hình thiết bị lúc gắn kết và

có thể sử dụng cho các mục đích khácbao gồm cả diều khiển các pipes của thiết bị Truyền theo phương pháp này thì an toàn, dữ liệu không bịi mất

+ Bulk Data Transfers: sử dụng khi truyền dữ liệu không chặt chẽ về rang buộc như máy in, sanner… tuỳ thuọc vào tình trang bus mà việc truyền

có hiệu qua không

+ Interrupt Data Transfers: được sử dụng cho các mục đích của người

sử dụng hoặc có thông tin phản hồi

+ Isochronous Data Transfers: gọi là truyền luồng theo thời gian ( streaming real time transfers) như âm thanh, hình ảnh

1.3.8 Cấu hình hệ thống

+ Gắn kết một USB device

+ Gỡ bỏ một USB device

+ Đánh chỉ số cho USB device

Việc cầu hình hệ thống cho USB được thực hiện tự động bởi trình quản lý PnP

1.3.9 USB là một bus robustness:

Trang 14

+ Tín hiệu được kiểm tra toàn vẹn trên nhiều drivers, nhiều device, và được bảo vệ

+ dùng mã CRC để bảo vệ các trường dữ liệu, cho phép kiểm soát và

Trang 15

Các trạng thái của device USB

Trang 16

CHƯƠNG 2

HỆ ĐIỀU HÀNH LINUX & LINUX KERNEL

2.1 LỊCH SỬ RA ĐỜI HỆ ĐIỀU HÀNH LINUX

Linux bắt nguồn từ một hệ điều hành lớn hơn có tên là UNIX Hệ điều hành UNIX được phát triển tại phòng thí nghiệm Bell của công ty AT&T vào khong năm 1969 Vào thời điểm đó, các máy tính thường hoạt động theo chế

độ đn nhiệm phục vụ một người dùng, người lập trình vào dữ liệu cho mày tính theo một dạng nào đó (chẳng hạn bìa đục lỗ) sau đó cho máy tính chạy

và in ra kết qu ra Trong một môi trường làm việc như vậy người sử dụng không tận dụng hết kh năng của bộ vi xử lý, không chia sẻ được tài nguyên của máy và rất khó khăn trong việc liên hệ giữa các thành viên của một dự án phát triển lớn

Hệ điều hành UNIX ra đời trong bối cảnh đó, các tác giả đầu tiên của UNIX là những người có nhu cầu được hỗ trợ lẫn nhau trong việc phát triển

dự án của mình UNIX là hệ điều hành đa nhiệm, bằng phưng pháp phân chia thời gian (time sharing) một cách thích hợp nó cho phép một nhóm người trong cùng một dự án chia xẻ thông tin ( như dữ liệu hay chương trình) đồng thời vẫn đm bo tính độc lập của từng thành viên Sự ưu việt của UNIX so với các hệ điều hành đưng thời thể hiên ở các điểm sau:

• Phục vụ nhiều người dùng đồng thời

• Cho phép người dùng dễ dàng liên lạc với máy tính thông qua các thiết

bị cuối

• Cho phép người dùng chia sẻ thông tin

Vào năm 1975, khi UNIX đã trở lên quen thuộc với người sủ dụng, mã nguồn của hệ này được cung cấp cho các trường đại học và cao đẳng nhằm mục đích

Trang 17

phổ biến hệ điều hành này Tại trường đại học Berkeley (University of

California at Berkeley) một phiên bản của UNIX được phát triển và trở thành một trong hai bản được phổ biến nhất có tên là BSD ( Berkeley Software Distribution) UNIX Bản kia do AT&T phát triển và được biết đến với tên UNIX System V Đầu tiên hệ UNIX được cài đặt cho các máy mini, nhưng với sự phát triển nhanh chóng của kỹ thuật vi xử lý, giá thành bộ nhớ và các thiết bị lưu trữ giảm cho phép các nhà cung cấp đưa ra các bản UNIX chạy trên các máy micro cụ thể là máy PC

Nhân hệ điều hành Linux được Linus Torvalds phát triển từ năm 1991 như một nhân hệ điều hành mã nguồn mở, từ đó đến nay đã co rất nhiều thanh viên tham gia phát triển Linux Ngày nay Linux đã có một cộng đồng người sử dụng và phát triển đông đảo

Cấu trúc của LINUX gồm:

Kernel : là hạt nhân của hệ điều hành, nó cung cấp một loạt các dịch

vụ về quản lý tệp, bộ nhớ, quản lý CPU và các thiết bị vào ra cho chương trình ứng dụng

Shell : là chương trình nằm giữa người sử dụng và kernel, thông

thường nó là một bộ biên dịch dòng lệnh từ người sử dụng ở các thiết bị cuối (cũng có thể từ tệp) và thực hiện chúng Không những thế, trong UNIX shell còn là một ngôn ngữ lập trình thực sự với đầy đủ các cú pháp cần thiết như câu lệnh điều kiện, vòng lặp, các chương trình con, thủ tục

Utilities : UNIX có hàng trăm các chương trình tiện ích được xem như

các câu lệnh của hệ điều hành để phục vụ cho người sử dụng Các tiện ích này bao gồm các chương trình soạn tho, xử lý văn bản, các chương trình biên dịch, các tiện ích thông tin trên mạng

2.2 CÁC ĐẶC ĐIỂM CƠ BẢN

Trang 18

Hệ điều hành LINUX có một số đặc điểm sau:

— User B: chương trình biên dịch

— User C: gửi thư

Hệ điều hành LINUX quản lý những người sử dụng theo cấu trúc phân cấp, người sử dụng có thể giao tiếp với nhau theo các nhóm Người sử dụng cao nhất (super user) có thể can thiệp đến các người sử dụng khác nếu cần

Đa chương

Tại một thời điểm một người sử dụng có thể thực hiện đồng thời nhiều tác vụ Với hệ điều hành đơn chương như MS-DOS một lệnh thực hiện sẽ chiếm toàn bộ thời gian CPU xử lý, bạn chỉ có thể thực hiện lệnh kế khi lệnh trước đó đã được thực hiện xong Còn trong hệ điều hành LINUX bạn có thể đặt lệnh chạy ở chế độ nền (background) đồng thời khi đó có thể thực hiện các lệnh kế

Trang 20

ORACLEmount => /- LIB

BINUSR- ETC

- ORACLE

Độc lập phần cứng

Vì hệ điều hành LINUX được viết bằng ngôn ngữ cấp cao cho nên nó rất dễ cài đặt trên các cấu hình phần cứng khác Hơn nữa với cách tổ chức các thiết bị là các tập tin đặc biệt nên việc thêm vào hay loại bỏ các thiết bị rất dễ dàng

Trang 21

đường dẫn của file sẽ được mở và tham số thứ hai xác định file được mở để đọc , ghi hay cả đọc và ghi Hệ thống sẽ kiểm tra xem file có tồn tại hay không và nếu có nó sẽ kiểm tra các bít bản quyền để xem người gọi có được quyền thâm nhập đến file theo cách ra lệnh hay không Nếu sự truy nhập là được phép hệ thống sẽ trar lại một số nguyên dương nhỏ gọi là số một file (file descriptor) để nhận diện file cho người gọi Nếu sự truy nhập bị cấm (hay file không tồn tại) -1 sẽ được trả lại để chỉ ra một lỗi Lời gọi để đọc hay ghi file sẽ sử dụng số một file để nhận diện file

Khi một quá trình bắt đầu nó luôn , nó luôn luôn có 3 số mô t file : 0 cho thiết bị vào chuẩn , 1 cho thiết bị ra chuẩn và 2 cho thiết bị thông báo lỗi chuẩn File được mở đầu tiên có số mô t file là 3 , file tiếp theo là 4 Khi file được đóng số mô t file của nó được giải phóng và có thể được cấp phát cho lần mở file sau đó

Có hai cách để xác định tên file trong LINUX Cách thứ nhất là sử dụng đường dẫn tuyệt đối nghĩa là chỉ ra cách tìm đến file bắt đầu từ thư mục gốc Một ví dụ của đường dẫn tuyệt đối là /usr/ast/book/chl

Đường dẫn tuyệt đối thưng dài và bất tiện Vì lí do đó LINUX cho phép người dùng lựa chọn thư mục đang làm việc như là thư mục bắt đầu Ví

dụ thư mục đang làm việc là /usr/ast/book thì lệnh

Trang 22

cho vấn đề này bằng cách cho phép tạo một thư mục vào mới chỉ đến một file đang tồn tại Mỗi điểm vào được gọi là một kết nối

Một ví dụ được mô tả như hình trên Fred và Lisa cùng làm việc trong một nhóm và mỗi người đều thường xuyên truy nhập đến các file của người kia Nếu Fred có /usr/fred như là thư mục làm việc anh ta có thể tham kho tới file

x trong thư mục của Lisa là /usr/lisa/x Fred có thể tạo một điểm vào mới trong thư mục của mình như hình dưới sau đó anh ta có thể sử dụng x như là phưng tiện /usr/lisa/x

Trong ví dụ trên ta thấy trước khi liên kết thì cách duy nhất cho Fred tham kho đến file x của Lisa là sử dụng đường dẫn tuyệt đối

Nhiều máy tính có hai hay nhiều ổ đĩa Ngay c các máy tính các nhân cũng

có hai ổ đĩa : một ổ đĩa cứng và một ổ đĩa mềm Khi có nhiều ổ đĩa thì một câu hỏi ny sinh là làm cách nào để điều khiển chúng

Một giải pháp là dặt một file hệ thống bao gồm các thông tin về bản thân lên mỗi đĩa và giữ chúng riêng biệt Ví dụ được mô t bởi hình sau

Trang 23

Ta thấy một đĩa cứng gọi là H và một đĩa mềm gọi là gọi là D Mỗi đĩa đều

có thư mục gốc và các file của mình Với giải pháp này người dùng phải xác định c thiết bị và file khi làm việc gì đó khác với ngầm định Ví dụ để copy một file x sang thư mục d ( ổ H là ngầm định ) người dùng có thể gõ

cp D:/x /a/d/x

Giải pháp của LINUX cho phép một đĩa được đặt lên cấu trúc cây thư mục trong một đĩa khác Trong ví dụ này chúng ta đặt đĩa mềm lên thư mục /b Khi đó dòng lệnh trên sẽ trở thành :

cp /b/x /a/d/x

Một kh năng thú vị khác của hệ thống LINUX là khoá (locking) Trong một vài ứng dụng hai hay nhiều quá trình có thể sử dụng cùng một file ở cùng một thời điểm , đIều nàu có thể dẫn đến các tình trạng chạy đua Một giải pháp là chương trình của ứng dụng có những vùng giới hạn Tuy nhiên nếu các quá trình thuộc về những người dùng độc lập , hộ thậm chí không biết về nhau thì giải pháp ngang hành nói chung là bất tiện

Trang 24

Ví dụ hãy xem một CSDL bao gồm nhiều file trong một hay nhiều thư mục được truy nhập bởi những người không liên quan Để có thể chắc chắn liên kết một dấu hiệu với mỗi thư mục hay file và thực hiện loạI trừ lẫn nhau bằng cách có một quá trình thực hiện một thao tác DOWN trên một dâú hiệu dành riêng trước khi truy nhập dữ liệu Tuy nhiên đIều bất lợi là sau đó toàn bộ thư mục hay file được làm cho không thể truy nhập được thậm chí chỉ là một bản ghi

Vì lí do đó POSIX cung cấp một c chế mềm dẻo và đúc kết cho mỗi quá trình

có thể khoá từ một byte riêng lẻ đến toàn toàn bộ file trong một thao tác

không thể phân chia C chế khoá đòi hỏi người gọi phải xác định file được khoá , byte bắt đầu và số lượng các byte Nếu thao tác là thành công hệ

thống sẽ tạo một bảng vào thông báo những byte nào được khoá Có hai loại khoá được cung cấp là chia sẻ và loại trừ Nếu một phần của file đã bao gồm một khoá chia sẻ thì lần thứ hai đặt lên một khoá chia sẻ khác là được phép nhưng một cố gắng đặt một khoá loại trừ lên phần đó sẽ thất bại Nếu một phần của file bao gồm một khoá loại trừ thì mọi cố gắng đặt một khoá lên bất

kì lên bất bì phần nào của nó sẽ thất bạI cho đến khi khoá được giải phóng

Để đặt khoá thành công thì mọi byte trong vùng được khoá phải khả dụng Khi đặt một khoá một quá trình phải xác định xem nó có muốn ngăn cản hay không việc không thể đặt được khoá đặt khoá Nếu nó chọn ngăn cản thì khoá đang tồn tại sẽ được rời đi , quá trình sẽ không ngăn cản và khoá sẽ được đặt Nếu quá trình chọn không khi nó không đặt được khoá thì hệ thống

sẽ trả lại ngay mã trạng thái xem khoá có thành công hay không

Các vùng được khoá có thể đè lên nhau Như hình dưới (a) ta thấy process A đặt một khoá chia sẻ lên các byte từ 4 đến 7 của file Sau đó process B đặt một khoá chia sẻ lên các byte từ 6 đến 9 Cuối cùng process C khoá các byte

từ 2 đến 9 Vì các khoá là được chia sẻ lên chúng có thể cùng tồn tại

Trang 25

Bây giờ hãy xem điều gì sẽ xảy ra nếu một quá trình cố gắng đặt một khoá loại trừ vào byte 9 của file vời yêu cầu ngăn cản nếu khoá thất bại Ngay khi hai khoá trớc đó bao phủ vùng này thì lời gọi sẽ bị ngăn cản và sẽ tiếp tục bị ngăn cản cho đến khi cả hai quá trình B và C giải phóng khoá của chúng

2.4 QUẢN LÝ TIẾN TRÌNH

Chỉ có các thực thể hoạt động trong một hệ thống LINUX mới là các quá trình LINUX xử lí rất giống với các quá trình xử lí tuần tự mà chúng ta được nghiên cứu ở phần trước Mỗi quá trình chạy một chương trình đơn lẻ

và có một dòng điều khiển riêng Ngoài ra có một chương trình khác gọi là chương trình đếm (counter) là chương trình sẽ lưu dữ dấu vết hay địa chỉ của chỉ thị tiếp theo sẽ được thi hành

LINUX là một hệ thống đa chương trình vì vậy sẽ có nhiều quá trình độc lập cùng chạy ở cùng một thời điểm Mỗi người dùng có thể có một vài quá trình hoạt động ở cùng một thời điểm vì vậy với một hệ thống lớn có thể

có hàng trăm thậm chí hàng nghìn quá trình cùng chạy Trong thực tế đối với phần lớn những nhóm người dùng đơn lẻ thì ngay cả khi người dùng vắng mặt cũng có hàng tá các quá trình ở mặt sau được gọi các chương trình thông minh (daemons) đang chạy Các chương trình dạng này được tự động bắt đầu khi hệ thống khởi động

Trang 26

Một chương trình điển hình thuộc loại này là chương trình cron

daemon Nó sẽ tự động được thi hành sau mỗi phút để kiểm tra xem có công việc nào dành cho nó hay không Nếu có nó sẽ thực hiện công việc đó Sau

đó nó sẽ ẩn vào mặt sau ngừng hoạt động cho đến lần kiểm tra tiếp theo Chương trình thông minh này là cần thiết bởi vì trong LINUX các hoạt động

có thể xy ra sau vài phút , vài giờ , vàI ngày hay thậm chí vàI tháng Ví dụ một người dùng có công việc cần đến gặp một nha sĩ vào thứ ba tuần sau thì anh ta có thể thiết lập các dữ liệu đầu vào cho chương trình thông minh này

để nó nhắc nhở anh ta bằng cách bật chuông vào lúc 2 giờ 30 Khi ngày và giờ đó tới chương trình thông minh cron sẽ xem xem nó có công việc gì hay không và nó sẽ thi hành chương trình bật chuông như là một nhiệm vụ mới

Chương trình cũng được sử dụng để thực hiện các công việc mang tính tuần tự như việc sao lưu đĩa vào lúc 4 giờ sáng hay nhắc nhở người dùng Một vàI chương trình thông minh khác có thể gửi và nhận thư điện tử , kiểm tra xem có đủ bộ nhớ rỗi hay không Các chương trình thông minh này làm cho các công việc trong LINUX trở nên dễ dàng vì mỗi chương trình là một quá trình riêng biệt độc lập với mọi quá trình khác

ar Xây dựng và duy trì các file backup và các file thư viện

awk So sánh mẫu ngôn ngữ

basenam

e

Loại bỏ các tiền tố và hậu tố khỏi một tên file

cat Kết nối ccá file và ghi chúng ra thiết bị ra chuẩn

cc Dịch một chương trình C

chmod Thay đổi chế độ bo vệ đối với một file

cmp So sánh hai file để xem chúng có đồng nhất hay không

Comm Hiển thị các dòng chung của 2 file được chọn

Trang 27

cp Thực hiện việc copy một file

Cut Thực hiện ghi mỗi cột của một văn bản ra một file riêng

date Hiển thị ngày tháng và thời gian

Dd Copy tất c hay một phần của file để thực hiện những sự chuyển đổi

khác nhau

Diff Hiển thị mọi sự khác nhau giữa hai file

Echo Hiển thị các tham số ( được sử dụng chủ yếu trong hệ thống scripts )

ed Soạn tho văn bản

find Tìm tất c các file tho mãn một điều kiện nào đó

Grep Tìm file có các dòng chứa đựng một khuôn mẫu nào đó

Head Hiển thị một vài dòng đầu tiên của một hay nhiều file

kill Gửi một mệnh lệnh tới một quá trình

Ln Tạo một kết nối với một file

ls Liệt kê các file và thư mục

Make Dịch lại một vài phần của một chương trình lớn được có sự thay đổimkdir Tạo một thư mục

Mv Chuyển hay thay đổi tên của một file

Od Đưa ra nội dung của một file ở dạng bát phân

paste Kết hợp nhiều file lại như là các cột của một file duy nhất

Pr Định dạng một file để in

pwd Hiển thị thư mục đang làm việc

Rm Xóa một file

Rmdir Xóa một thư mục

sed Sửa chữa các dòng vào / ra

sh Lenh chay mot shell script

sleep Ngừng hoạt động sau một số giây định trước

Stty Thiết lập các tuỳ chọn đầu cuối như các kí thự dành cho việc sửa chữaSort Sắp xếp một file bao gồm các dòng ASCII

tail Hiển thị một vài dòng cuối cùng của một file

Trang 28

Tee Copy từ thiết bị vào chuẩn sang thiết bị ra chuẩn và cũng sang một file

Tr Dịch các mã kí tự

Uniq Xoá các dòng kế tiếp trùng nhau trong một file

Wc Đếm số kí tự , số từ và số dòng trong một file

Các quá trình được tạo ra trong LINUX là ở trong một trường hợp cụ

thể nào đó Lời gọi hệ thống FORK sẽ tạo một bản sao chính xác với quá

trình nguyên thủy Quá trình này được gọi là quá trình cha còn quá trình mới được gọi là quá trình con Mỗi quá trình cha và con sẽ sở hữu và có các hình

nh riêng về bộ nhớ Nếu sau đó quá trình cha thay đổi bất kì một biến nào đó của nó thì sự thay đổi này là không hiện hữu đối với quá trình con và ngược lại

Mở các file là được chia sẻ giữa quá trình cha và con Nghĩa là nếu

một file được mở trong quá trình cha trước FORK thì file này vẫn tiếp tục

được mở trong c quá trình cha và con Mọi thay đổi với file bởi một quá

trình nào đó sẽ có nh hưởng đến các quá trình khác Cách xử lí này chỉ có lí

do những thay đổi này cũng hiện hữu đối với mọi quá trình sau đó mà file

này cũng được mở

Trong thực tế hình nh bộ nhớ , các biến , các thanh ghi và mọi thứ khác

là đồng nhất trong quá trình cha và con , điều này dẫn đến một khó khăn nhỏ

là làm thế nào để các quá trình biết được là cái nào có thể chạy trong các lệnh của cha và cái nào có thể chạy trong các lệnh của con Điều này được giải

quyết là hệ thống sẽ tr lại 0 cho quá trình con và một trị khác 0 được biết đến

là pid (prcess identifier - Số nhận diện quá trình ) cho cha C hai quá trình

đơn gin là kiểm tra trị trả lại và hành động tưng ứng Ví dụ :

pid = fork( ) /* if the fork succeeds , pid > 0 in the parent */

Trang 29

dụ khi quá trình con kết thúc quá trình cha sẽ nhận được pid của quá trình con vừa mới kết thúc Đây có thể là một điều quan trọng vì một quá trình cha có thể có nhiều quá trình con Hơn nữa một quá trình con cũng có thể có các quá trình con dưới nữa , như vậy từ một quá trình ban đầu có thể xây dựng nên một cây ph hệ các quá trình

Kh năng tạo khuôn dạng cho một cây các quá trình là chìa khoá để tìm

ra cách chia sẻ thời gian làm việc trong LINUX Khi hệ thống khởi động , một quá trình sẽ gọi init để khởi tạo thủ công bằng bộ phận nòng cốt Quá trình này sau đó sẽ đọc file /ect/ttys có bao nhiêu đầu cuối trong hệ thống và cung cấp các thông tin cần thiết miêu t mỗi đầu cuối đó Sau đó Init sẽ phân

ra mỗi quá trình con cho mỗi đầu cuối và đi vào trạng thái ngủ cho đến khi một đầu cuối nào đó kết thúc

Trang 30

Mỗi đầu cuối chạy chương trình login để in ra dòng :

login :

trên màn hình của thiết bị đầu cuối và cố gắng đọc tên người dùng từ bàn phím Khi một ai đó cung cấp tên thì chương trình login sẽ hỏi password , lưu trữ nó và kiểm tra với password được được lưu trữ trong file password

là /etc/passwd Nếu mật khẩu được cung cấp là đúng thì login sẽ tự che phủ bản thân nó bởi hệ thống của người dùng , hệ thống này sẽ đợi nhận yêu cầu đầu tiên Nếu mật khẩu là không đúng , login sẽ hỏi một tên người dùng mới

C chế này được giải thích dưới hình sau với một hệ thống gồm 3 đầu cuối Quá trình login đang chạy ở đầu cuối số 0 vẫn đang đợi đầu vào Còn quá trình ở đầu cuối số 1 được thành công và hệ thống của người dùng đang đợi lệnh Quá trình login cũng được thành công ở đầu cuối số 2 và ở đây chương trình cp được được người dùng thi hành , chương trình này như là một con của hệ thống và hệ thống sẽ bị chặn lại cho đến khi quá trình con này kết thúc Nếu người dùng ở đầu cuối số 2 nhập cc thay cho cp thì chương trình chính của bộ dịch C sẽ được thi hành

At start up , Init reads this file

login Shell

login

login Shell

Trang 31

Các quá trình trong LINUX có thể liên lạc với nhau bằng việc sử dụng một khuôn dạng các thông báo (message ) gửi đi Nó có thể tạo ra một loại kênh giữa hai quá trình theo đó một quá trình có thể ghi một dãy các byte cho một quá trình khác sẽ đọc nó Các kênh này được gọi là các ống dẫn Sự đồng

bộ phải là hợp lí vì nếu một quá trình đọc một ống dẫn rỗng thì nó sẽ bị ngừng lạI cho đến khi có dữ liệu kh dụng

Các đường ống hệ thống này sẽ được thi hành băng các ống dẫn Khi

hệ thống gặp một lệnh có dạng :

Sort < f | head

nó sẽ tạo ra hai quá trình , sort và head và thiết lập một ống dẫn giữa chúng theo cách thiết bị ra chuẩn của sort được nối voứi thiết bị vào chuẩn của head Theo cách này các dữ liệu sẽ được quá trình sort ghi trực tiếp ra đầu vào của quá trình head thay thế cho việc phải ghi ra file Nếu ống dẫn bị đầy thì hệ thống sẽ ngừng việc chạy sort cho đến khi head đọc hết dữ liệu khỏi ống dẫn

Các quá trình cũng có thể liên lạc với nhau theo một cách khác : thông qua các ngắt mềm Một quá trình có thể gửi đi một cái được gọi là cờ báo ( signal ) đến một quá trình khác Các quá trình có thể bo hệ thống những gì

nó muốn thực hiện khi một cờ báo đến Các cách lựa chọn là lờ cờ báo đó

đi , gọi nó hay ngăn cản dấu hiệu kết thúc quá trình ( ngầm định ) Nếu một quá trình lựa chọn là nắm giữ dáu hiệu hay cờ báo gửi đến nó thì nó phải xác định được thủ tục nắm giữ dấu hiệu ( các thủ tục ngắt ) Do đó khi cờ báo đến điều khiển có thể được chuyển đến cho chương trình ngắt Khi chương trình ngắt kết thúc thì điều khiển sẽ được tr lại ở ni được chuyển điều khiển tưng tự như các ngắt cứng vào / ra Một quá trình chỉ có thể gửi cờ báo đến các thành viên ở trong nhóm của nó là nhóm bao gồm các qúa trình ông bà tổ tiên , anh em và các con cháu

Trang 32

Các dấu hiệu cũng có thể được sử dụng cho các mục đích khác Ví dụ một quá trình làm việc với các số dấu phẩy động và tình cờ chia cho 0 thì nó

sẽ nhận được một cờ báo SIGFPE Các dấu hiệu được yêu cầu bởi POSIX được liệt kê ở bảng dưới Nhiều hệ thống LINUX có thêm các cờ báo phụ trợ khác nhưng các chương trình sử dụng chúng có thể không tưng thích với các versions khác của LINUX

Mỗi người dùng được nhận diện bởi một số nguyên gọi là uid ( user identification - mã nhận diện người dùng) chứa ở trong file password Chúng được xác định bởi người quản trị hệ thống Mọi quá trình sẽ tự động thu nhận số uid của người được tạo ra quá trình đó

Người dùng với uid là 0 là một người dùng đặc biệt và được gọi là superuser (hay root) Superuser có quyền đọc và ghi vào tất c các file trong

hệ thống , không có ai và điều gì có thể cẩn trở điều này Các quá trình với uid là 0 cũng có kh năng tạo ra một số lượng nhỏ các chức năng bo vệ để ngăn cản đối với những người dùng thông thường Bình thường chỉ có những người quản trị hệ thống mới biết được mật khẩu của superuser mặc dù nhiều sinh viên coi việc tìm ra các điểm yếu trong hệ thống bo mật của hệ thống như là một sở thích lớn vì vậy họ có thể thâm nhập như là một superuser mà không cần phải biết mật khẩu

Quyền lực của superuser bị lợi dụng theo một cách thông minh nào đó cho phép người dùng làm những điều chứa đựng những nguy c tiềm tàng trong cách điều khiển Ví dụ nhiều hệ thống LINUX có các chương trình cho phép người dùng biết dung lượng đĩa còn trống Thông tin này được lưu trữ trên mỗi đĩa ở block 0 nhưng thường thì các đĩa này được bo vệ để ngăn những người bình thường không được đọc những thông tin này Superuser

có thể tìm thấy các thông tin này một cách dễ dàng nhưng nói cho mọi người biết mật khau của superuser sẽ làm thất bại toàn bộ sự bo vệ của hệ thống

Trang 33

Thay vào đó LINUX có một bit liên kết với mỗi chương trình thi hành gọi là setuid bit

SIGABRT Gửi để bỏ qua quá trình và

SIGALRM Chuông đồng hồ tắt

SIGFPE Lỗi số dấu phẩy động ( như chia cho 0 )

SIGHUP Đường kết nối của quá trình bị treo

SIGILL Quá trình thi hành một chỉ thị không hợp lệ

SIGINT Người dùng ấn DEL để ngắt quá trình

SIGQUIT Người dùng ấn phím yêu cầu hệ thống

SIGKILL Bỏ quá trình

SIGPIPE Quá trình tham gia vào một ống dẫn thừa

SIGSEGV Quá trình tham kho đến một địa chỉ bộ nhớ không hợp lệ

SIGTERM Sử dụng để yêu cầu quá trình kết thúc

SIGUSR1 Giành cho các mục đích mà chương trình tự định nghĩa

SIGUSR2 Giành cho các mục đích mà chương trình tự định nghĩa

Bit này thực sự là một phần của từ lưu dữ chế độ bo vệ ( Phần lưu dữ chế độ

bo vệ chỉ sử dụng 9 bits vì thế một vài bít ở phía trái được sử dụng dành cho các mục đích khác ) Khi một chương trình với bit setuid tích cực được thi hành thì uid có nh hưởng tới quá trình là uid của người sở hưu file sẽ thay thế cho uid của người thực hiện Bằng cách làm cho chương trình báo cáo về lượng đĩa trống có chủ là superuser với bit setuid tích cực sẽ làm cho mọi người dùng được superuser cho phép đều có thể thi hành được nó

Theo cách này superuser có thể thiết lập đối với những người dùng bình thường một tập các chương trình sử dụng quyền của superuser nhưng

Trang 34

chỉ trong giới hạn và mục đích của chương trình Chạy một chương trình thông báo về lượng đĩa còn trống cho phép người đó có được quá trình của superuser nhưng không được phép đọc các file được bo vệ vì đó không phải

là một trong các chức năng của chương trình thông báo dung lượng đĩa Vì vậy chương trình này sẽ chỉ thông báo lượng đĩa trống và sau đó kết thúc C chế setuid bit được sử dụng rộng rãi trong suốt LINUX để tránh cho hệ thống phải gọi các khối dành cho các mục đích đặc biệt như cho phép người dùng đọc block 0

Đoạn văn bản (text) bao gồm các chỉ thị máy theo dạng mã của một chương trình thi hành Nó được tạo ra bởi các chương trình dich và được liên kết bằng việc dịch một chương trình C, Pascal hay một chương trình khác sang dạng mã máy Đoạn văn bản thường là một đoạn chỉ đọc Các chương trình tự sửa đổi đã không còn tồn tại từ những năm 50 bởi vì chúng quá khó

để có thể hiểu và gỡ rối Vì vậy đoạn văn bản không phát triển mà cũng không giảm đi hay thay đổi bằng một cách nào đó

Đoạn dữ liệu lưu trữ các biến , các chuỗi , các mảng hay các dữ liệu khác của chương trình Nó có hai phần là các dữ liệu được khởi tạo và các

dữ liệu không được khởi tạo Do các nguyên nhân lịch sử mà phần dữ liệu không được khởi tạo được biết dưới cái tên BSS Phần được khởi tạo bao gồm các biến và các hằng mà chúng cần một giá trị khởi tạo khi chương trình

Trang 35

bắt đầu Ví dụ trong ngôn ngữ C có thể khai báo một chuỗi kí tự và khởi tạo

nó ở cùng thời điểm Khi chương trình bắt đầu nó coi chuỗi có một giá trị ban đầu Để thi hành quá trình này trình biên dịch sẽ đặt chuỗi vào một vị trí trong không gian địa chỉ và đm bo rằng khi chương trình bắt đầu vị trí này sẽ chứa chuỗi khởi tạo Dưới quan điểm của hệ điều hành thì chẳng có gì khác giữa phần dữ liệu được khởi tạo với phần văn bản chương trình , c hai chỉ bao gồm các mặt nạ bít được sn xuất bởi trình biên dịch và phải được nạp vào bộ nhớ khi chương trình bắt đầu

Process A Physical Memory Process B

Trang 36

Sự tồn tại của dữ liệu không được khởi tạo thực chất là một sự chuyển đổi Khi một biến toàn cục không được khởi tạo một cách rõ ràng thì hiểu theo nghĩa của ngôn ngữ C là nó được khởi tạo là 0 Do đó các biến toàn cục không được khởi tạo sẽ bằng 0 Nó có thể thực hiện một cách đn gin bằng cách có một vùng của file thi hành chính xác bằng số lượng byte dữ liệu và chúng đều được khởi tạo trong đó bao gồm các biến được khởi tạo ngầm định

là 0

Tuy nhiên lưu trữ không gian này trong file thi hành là không kh thi Thay vào đó file sẽ gộp tất c các biến được khởi tạo rõ ràng thành văn bản chương trình Các biến không được khởi tạo sẽ được gộp lại với nhau sau phần được khởi tạo vì vậy tất c các chương trình dịch đều đặt một từ ở đầu file để chỉ ra bao nhiêu byte được cấp phát

Để hiểu rõ hơn vấn đề này ta xem lại hình (a) trên Ta thấy văn bản chương trình dài 8K và như vậy dữ liệu được khởi tạo là 8K Dữ liệu không

Trang 37

được khởi tạo là 4K (BSS) Nhưng chương trình chỉ dài 16K cộng với một từ

ở đầu chỉ ra cho hệ thống cần cấp phát thêm 4K sau phần dữ liệu khởi tạo và xoá tất cả phần này về 0 trước khi bắt đầu chương trình Việc này đã bỏ qua việc phải lưu trữ 4K số 0 trong file thi hành cho các biến không khởi tạo

Không giống như đoạn văn bản (text segment) là không thể thay đổi , đoạn dữ liệu có thể thay đổi Các chương trình có thể thay đổi các biến của

nó ở mọi thời điểm Hơn nữa nhiều chương trình cần cấp phát bộ nhớ động trong khi thi hành LINUX làm điều này bằng cách cho phép đoạn dữ liệu phát triển hay co lại khi bộ nhớ được cấp phát hay giải phóng Một lời gọi hệ thống khởi động sẽ cho phép chương trình thiết lập kích thước của đoạn dữ liệu

Đoạn thứ ba là đoạn ngăn xếp Trên hầu hết các máy , nó bắt đầu ở đỉnh của không gian địa chỉ o và phát triển xuống Nếu stack phát triển dưới đáy của đoạn ngăn xếp thì thường xy ra lỗi phần cứng và hệ điều hành sẽ hạ thấp đáy của đoạn ngăn xếp xuống vài ngàn byte Các chương rình không quản lí một cách rõ ràng kích thước của ngăn xếp

Khi một chương trình bắt đầu ngăn xếp của nó không rỗng Thay vào

đó nó chứa đựng tất c các biến môi trường như dòng lệnh được gõ vào để hệ thống thi hành chương trình Theo cách này chương trình có thể biết các tham số dành cho nó Ví dụ khi dòng lệnh :

cp src dest

được gõ thì chương trình cp sẽ bắt đầu với chuỗi cp src dest trên ngăn xếp vì vậy nó có thể tìm ra tên của các file nguồn và đích Chuỗi được biểu hiện như là mảng các con trỏ đến các kí hiệu trong chuỗi làm cho việc phân tích ddược dễ dàng

Khi hai người cùng chạy một chương trình như editor thì sẽ không hiệu

qu nếu đặt hai bản sao của đoạn văn bản của chương trình trong bộ nhớ ở cùng một thời điểm Thay vào đó hầu hết các hệ thống LINUX hỗ trợ việc

Trang 38

chia sẻ các đoạn văn bản Trong hình trên phần (a) và (c) chúng ta thấy hai quá trình có cùng một đoạn văn bản Trong hình (b) ta có thể thấy s đồ của

bộ nhớ vật lí trong đó c hai quá trình cùng chia sẻ một phần của đoạn text

Sự sắp xếp này được hoàn thành bởi phần cứng bộ nhớ o

Các đoạn dữ liệu và stack không bao giờ được chia sẻ Nếu một đoạn nào đó cần phát triển mà lại không có đủ chỗ ở vị trí liền sát thì nó sẽ chuyển đến một nút nào đó trong bộ nhớ

Trên một vài máy phần cứng hỗ trợ các không gian địa chỉ rời rạc cho các chỉ thị và dữ liệu Khi điểm dặc trưng này là kh dụng thì LINUX có thể

sử dụng nó Ví dụ trên máy PDP - 11/45 các địa chỉ là 16 bít vì vậy chương trình chỉ có thể địa chỉ hoá được 64K bộ nhớ Tuy nhiên một chương trình có thể có 64K cho đoạn văn bản chương trình (text) và 64K thêm cho c đoạn dữ liệu và ngăn xếp Đoạn văn bản bắt đầu ở địa chỉ 0 và dài 64K , đoạn dữ liệu cũng bắt đầu ở địa chỉ 0 và phát triển lên còn đoạn ngăn xếp bắt đầu ở 64K và phát triển xuống Một bước nhy từ 0 sẽ tính với không gian của đoạn văn bản trong khi một sự dịch chuyển từ 0 sẽ tính trong không gian của đoạn dữ liệu Nét đặc trưng này cho phép nhân đôi kích thước lớn nhất của chương trình

Trang 39

CHƯƠNG 3 MỘT SỐ VẤN ĐỀ KHI PHÁT TRIỂN DRIVER

3.1 DRIVER LÀ GÌ

Ngày đăng: 04/01/2023, 11:22

w