Skip to the content.

Tìm hiểu kiến trúc hệ thống Linux

1.Cấu trúc hệ điều hành Linux

1.1.Kernel (nhân)

2. Command là gì và cách chúng tương tác với hệ thống?

2.1.Command là gì?

Lấy Input từ người dùng: Khi bạn nhập vào một lệnh, shell sẽ đọc dữ liệu nhập vào của bạn bằng cách sử dụng getline(). getline đọc dữ liệu từ STDIN- luồng dữ liệu đầu vào, và lưu trữ đầu vào ở một bộ nhớ đệm dưới dạng string. Bộ đệm sau đó được tách ra thành các token (các đoạn mã nhỏ hơn) và lưu trữ chúng vào một mảng. Ví dụ lệnh ls -l sẽ được lưu là {“ls”, “-l”, “NULL”}

Kiểm tra regex và alias Trước khi tìm kiếm lệnh, shell sẽ kiểm tra các ký tự đặc biệt mà cần được làm rõ(.,$,/,…) hay còn gọi là các regex. Shell cũng kiểm tra các alias (alias gần giống với phím tắt trên bàn phím). Ví dụ khi có một alias là alias apple="cat" thì khi gõ apple, shell sẽ hiểu đó là lệnh cat.

Kiểm tra builtin Nếu câu lệnh không phải là một alias, shell sẽ kiể tra nếu mà lệnh này có phải là một lệnh builtin hay không. Một lệnh builtin là một lệnh được tích hợp và chạy trong chính shell. Ví dụ: cd, echo, alias, help, read, type.

Kiểm tra PATH Nếu lệnh đó không phải là một lệnh builtin, shell sẽ kiểm tra lệnh đó trong biến môi trường, PATH. Đầu tiên, một bản sao của PATH sẽ được chia thành các phần phân cách nhau bằng dấu “:” với mỗi phần là một thư mục. shell sẽ nối thêm gạch chéo (“/”) + đầu vào vào cuối mỗi thư mục trong PATH để kiểm tra xem file có tồn tại hay không. Sau khi tìm qua mỗi phần trong PATH, sẽ có lôi nếu input không có file nào tương ứng.

Sao chép và chạy chương trình trong tiến trình con Sau khi tìm thấy lệnh trong PATH, shell sẽ chạy file đó bằng fork(). fork() là một system call để tạo một bản sao cho tiến trình hiện tại. Tất cả các tiến trình của người dùng trên linux đều là kết quả của fork(). Cả hai tiến trình sẽ chạy theo chỉ dẫn của fork(). Để phân biệt giữa hai tiến trình, fork() sẽ trả về id của tiến trình con về tiến trình cha, và trả về 0 trên tiến trình con, nếu trả về -1 là lỗi.

Sau khi hoàn thành, tiến trình con sẽ chấm dứt và trả quyền điều khiển về tiến trình cha. Bạn sẽ được chào đón với lời nhắc một khi lệnh trước đó đã được thực thi và bạn sẽ có thể nhập một câu lệnh mới. Ví dụ về lời nhắc(prompt):