Cac khai niem trong linux
Mở đầuThe Linux Programming Interface - Phần 1: Các khái niệm cơ bảnChương này sẽ giới thiệu các khái niệm liên quan tới lập trình hệ thống Linux. Nó tập trng vào những bạn đang sử dụng hệ điều hành khác, hoặc có ít kinh nghiệm với Linux cũng như các bản UNIX implementation khác. Show
Lõi hệ điều hành: The KernelOperating system (hệ điều hành) được sử dụng với 2 nghĩa:
Thuật ngữ Kernel thường được sử dụng như từ đồng nghĩa với operating system cái mà chúng ta nói tới trong cuốn sách này. Mặc dù nó có thể chạy các chương trình trên một máy tính mà không cần kernel, Sự hiện diện của kernel đơn giản hóa việc viết và sử dụng các chương trình khác, và tăng tính mạnh mẽ và khả chuyển có sẵn phục vụ các lập trình viên. The kernel đã làm điều này để cung cấp một lớp phần mềm để quản lý các giới hạn tài nguyên của một máy tính The Linux kernel excutable có thể tìm thấy ở /boot/vmlinuz, hoặc đâu đó tương tự, Nói về lịch sử, Trước UNIX, the kernel được gọi là unix, Sau UNIX, cái mà đã có virtual memory, được đổi tên thành vmunix, Trên Linux tên này là ánh xạ của tên hệ thống với z thay thế x để nói rằng kernel là một bản compressed executable Các nhiệm vụ được thực thi bởi kernel:
Ngoài ra thì một hệ điều hành đa người dùng như Linux sẽ cung cấp một vài người dùng trừu tượng như một virtual private computer; Ví dụ mỗi user có một home directory. Kernel mode and user modeCác kiến trúc vi xử lý điển hình cho phép CPU tổ chức ít nhất 2 mode: user mode và kernel mode (supervisor mode). Chỉ thị phần cứng cho phép chuyển đổi giữa 2 cái. Tương ứng, vùng bộ nhớ ảo có thể đánh dấu là user space hoặc kernel space. Khi chạy với user mode, CPU có thể truy cập chỉ bộ nhớ được đánh dấu là user space; Khi chạy trên kernel mode, CPU có thể truy cập tới cả 2 user và kernel memory space. Một số hành động có thể được thực thi trong kernel mode. Ví dụ việc thực thi dừng hệ thống, truy cập vào các các vùng quản lý bộ nhớ, khởi tạo các thiết bị quản lý vào ra. Bằng cách tận dụng các thiết kế phần cứng để đặt hệ điều hành tỏng kernel space, các bản cài đặt hệ điều hành đảm bảo rằng các tiến trình người dùng không được phép truy cập các chỉ thị và các cấu trúc dữ liệu của kernel, hoặc để các hoạt động làm ảnh hưởng xấu tới hệ thống. Process vs kernel views of the systemTrong nhiều công việc lập trình ngày nay, chúng ta đã quen với việc nghĩ về chương trình như cách hướng tiến trình. Tuy nhiên, khi xem nhiều chủ đề trong cuốn sách này, nó có thể là hữu dụng khi có một cái nhìn khác, cái nhìn từ kernel. Để làm rõ hơn, chúng ta từ bây giờ sẽ xem xét mọi thư từ cách nhìn process viewpoint và sau đó là kernel viewpoint. Một chương trình điển hình có rất nhiều tiến trình. Với mỗi tiến trình có rất nhiều thứ xuất hiện bất đồng bộ. Mỗi một tiến trình thực thi không biết khi nào nó sẽ được làm việc tiếp, vì nó phụ thuộc vào việc lập lịch CPU. Việc chuyển các tín hiệu và giao tiếp giữa các tiến trình ngay lập tức hay ở thời điểm nào đó là do kernel. Một tiến trình không biết nó được cấp ở đâu trong bộ nhớ RAM.
The ShellMột Shell là một chương trình đặc biệt được thiết kế để đọc các lệnh được nhập từ người dùng và thực thi các chương trình thích hợp và phản hồi lại. Thỉnh thoảng được biết đến như một trình thông dịch. Thuật ngữ "login shell" để nói đến tiến trình được tạo để chạy một shell khi người dùng đăng nhập lần đầu. Trong khi một vài hệ điều hành tích hợp trình thông dịch vào kernel, trên UNIX, shell là một user process. Trên cùng máy tính, người dùng khác nhau có thể sử dụng các shell khác nhau. Một số shell nổi bật:
Các shell được thiết kế không chỉ đơn thuần để cho việc tương tác, mà còn có thể sử dụng để thông dịch shell scripts, là các text files bao gồm shell commands. Với mục đích này mỗi shell có các tiện ích như một ngôn ngữ lập trình: biến, vòng lặp, điều kiện, IO commands, và các hàm. Mỗi shells thực thi các tác vụ giống nhau, có thể cú pháp khác nhau. Hầu hết các ví dụ trong sách này yêu cầu một shell sử dụng bash, trừ khi được ghi chú, người đọc có thể giả sử rằng tất cả các ví dụ hoạt động cùng một cách với Bourne-type shells. Người dùng và nhómMôi người dùng tỏng hệ thống là duy nhất và một người dùng có thể thuộc vào nhiều nhóm. Người dùngMỗi người dùng trong hệ thống đều có một login name (username) và được có một user ID (UID). MỖi người dùng, được định nghĩa bởi một dòng trong password file /etc/passwd. Bao gồm các thông tin sau:
Mỗi password record cũng có thể bao gồm mật khẩu của người dùng, theo dạng mã hóa. Tuy nhiên vì lý do bảo mật, mật khẩu thường được lưu trữ trong các shadow password file, cái mà chỉ đọc cho những người dùng được cấp quyền. NhómVì lý do quản trị, điều khiển việc truy cập vào các file và tài nguyên hệ thống - nó là hữu dụng để tổ chức các người dùng vào các nhóm. Ví dụ, mọi người trong một đội có một dự án, và chia sẻ các tập tin. Trong các bản UNIX sớm hơn. một người dùng chỉ có thể là thành viên của chỉ 1 nhóm. BSD cho phép một người dùng thuộc về nhiều nhóm, một ý tưởng được đưa lên bởi các bản UNIX khác và trong chuẩn POSIX.1-1990. Mỗi nhóm được định danh bởi một dòng trong group file /etc/group, mỗi group bao gồm các thông tin dưới đây:
Superuser.Một người dùng là một superuser sẽ có các quyền đặc biệt trong hệ thống. Tài khoản super user ID là 0, và thông thường có tên đăng nhập là root. Trong hệ thống UNIX, superuser có thể bỏ qua tất cả các quyền được yêu cầu bởi hệ thống. Vì thế super user có thể truy cập bất kỳ tập tin nào, bất kỳ là tập tin đó yêu cầu quyền gì, có thể đọc các tín hiệu của bất kỳ process nào trong hệ thống. Người quản trị hệ thống sử dụng superuser account để thực thi rất nhiều các tác vụ quản trị trên hệ thống. Single Directory Hierarchy, Directories, Links, và files.The Kernel có một cây thự mục đơn tổ chức tất cả các file trong hệ thống. (Khác với Windows nơi mà mỗi đĩa sẽ có một cấu trúc thư mục). Gốc của cây này là root được đặt tên là / (slash). Tất cả các tập tin và thư mục là con cháu của nó. {% img [class names] /images/the-linux-command-line-interface/subset-of--the-linux-single-directory-hierarchy.png 'subset-of--the-linux-single-directory-hierarchy.png' 'subset-of--the-linux-single-directory-hierarchy.png' %} Các loại tập tinCó 2 loại tập tin thường được biết đến regular và plain. Các loại tập tin khác bao gồm devices, pipes, sockets, directories, symbolic links. Thuật ngữ file thường được sử dụng để ám chỉ một tập tin ở bất cứ loại nào, không chỉ là regular file. Directories và linksMột thư là một tập tin đặc biệt, nội dung của nó là một bảng các tên file với một refer tới tập tin tương ứng, Tên file + reference liên kết với nhau gọi là link, các file có thể có nhiều links, do đó có thể có nhiều tên, có thể cùng hoặc khác thư mục. Thư mục bao gồm nhiều link tới các tập tin và các thư mục khác. Links giữa các thư mục được thiết lập bởi cấu trúc cây như hình trên. Mỗi thư mục bao gồm ít nhất 2 đầu vào: . (dấu chấm), cái mà nối tới thư mục hiện tại và .. (chấm chấm) nối tới thư mục cha, thư mục bên trên nó trong cây. Mỗi thư mục trừ thư mục root, đều có cha. Symbolic links.Giống như một link bình thường, một symbolic link cung cấp một tên thay thế cho một tập tin. .... FilenamesPathnamesCurrent working directoryFile ownership and permissionsFile I/O ModelProgramsProcessesMemory MappingsStatic and Shared LibrariesInterprocess Communication and SynchronizationSignalsThreadsProcess Groups and Shell Job ControlSessions, Controlling Terminals, and Controlling ProcessesPseudoterminalsDate and TimeClient-Server ArchitectureRealtimeThe /proc File SystemTổng kếtTrong chương này, chúng ta đã khảo sát một tập các khái niệm cơ bản liên quan đế lập trình hệ thống Linux. Việt hiểu được các khái niệm đã được cung cấp với những người dùng còn ít kinh nghiệm là các nền tảng để bắt đầu học lập trình hệ thống. Kết bàiChương này dài quá mình sẽ dịch nốt trong ngày mai vẫn trong bài viết này. Việc viết được chương này cho dễ hiểu cũng cần phải có hiểu biết nhất định. Bài viết này sẽ còn được chỉnh sửa khi hiểu biết của mình khá hơn. Cảm ơn các bạn
Về bài tập các bạn hãy tiếp tục xem seri Bài số 6 của Arif Butt: https://www.youtube.com/watch?v=tuWDi53pomU&list=PL7B2bn3G_wfBuJ_WtHADcXC44piWLRzr8&index=7 |