Xem phần vùng data stack heap của process linux
Show Đã đăng vào thg 9 15, 2021 3:29 CH 5 phút đọc 1. Giới thiệuTrong bài viết này, chúng ta sẽ cùng nhau tìm hiểu về các khái niệm cơ bản xoay quanh Process (Tiến trình). Tập trung vào cách tổ chức bộ nhớ của nó và các ví dụ để thu được góc nhìn một cách trực quan. 2. Phân biệt Process với ProgramTrích từ cuốn "The Linux Programming Interface" , ta có khái niệm về tiến trình (Process) và chương trình (Program) như sau:
Chương trình và tiến trình là hai thuật ngữ có liên quan tới nhau. Sự khác biệt chính giữa chương trình và tiến trình đó là chương trình một nhóm các câu lệnh để thực hiện một nhiệm vụ cụ thể trong khi đó tiến trình là một chương trình đang được thực thi . Lấy một ví dụ, ta có một chương trình nghe mp3 với tên là music, đây là một file nằm đâu đó trên ổ cứng. Khi ta chạy chương trình này để chơi nhạc, lúc này ta có được tiến trình music. Tiến trình music lúc này đang được thực thi và sử dụng các tài nguyên của hệ thống như ram, cpu vv... 3. Process IDMỗi một process có một mã dùng để định danh gọi là process ID (PID), đây là số nguyên dương và duy nhất cho mỗi process trên hệ thống. Sử dụng command top trong terminal. Ta có thể thấy các giá trị PID được liệt kê trong cột ngoài cùng bên trái. 4. Memory layout của một ProcessBộ nhớ cấp phát cho mỗi một process được chia thành nhiều phần khác nhau. Thông thường chúng được gọi là các segments - Các phân đoạn vùng nhớ. 4.1. Text segment
4.2. Initialized data segment
4.3. Uninitialized data segment
4.4. Stack segment
4.5. Heap segment
Note: Initialized data segment và uninitialized data segment có thể gọi chung là data segment. 4.6. Ví dụ1Đoạn mã sau đây là một ví dụ thể hiện việc ánh xạ giữa các biến trong C với các segments trong process.
5. Command-line ArgumentsMỗi một chương trình đều bắt đầu khởi chạy từ hàm main(). Khi chạy chương trình các command-line arguments (tham số môi trường) sẽ được truyền qua 2 arguments của hàm main().
5.1. Ví dụ2Để rõ ràng hơn chúng ta xét ví dụ sau.
Biên dịch chương trình trên và chạy ta thu được kết quả như sau: Ta có thể thấy số lượng command-line truyền vào ở đây là 4: ./exam, hello, linux, programming. Bao gồm cả tên của chương trình. 6. Kết luận
All rights reserved |