BÀI tập lớn môn học NGUYÊN lý hệ điều HÀNH đề tài nghiên cứu tìm hiểu về quản lý tiến trình trong hđh linux

32 6 0
BÀI tập lớn môn học NGUYÊN lý hệ điều HÀNH đề tài nghiên cứu tìm hiểu về quản lý tiến trình trong hđh linux

Đ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

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN - - BÀI TẬP LỚN MÔN HỌC NGUYÊN LÝ HỆ ĐIỀU HÀNH ĐỀ TÀI: Nghiên cứu tìm hiểu quản lý tiến trình HĐH Linux Giảng Viên : Ths.Nguyễn Tuấn Tú Nhóm Số : Nhóm Lớp : IT6025.6(006)K15 HÀ NỘI, 2022 TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN - - BÀI TẬP LỚN MÔN HỌC NGUYÊN LÝ HỆ ĐIỀU HÀNH ĐỀ TÀI: Nghiên cứu tìm hiểu quản lý tiến trình HĐH Linux Giảng Viên : Ths.Nguyễn Tuấn Tú Lớp : IT6025.6(006)K15 HÀ NỘI, 2022 MỤC LỤC Trang Lời mở đầu Những năm qua, Linux thực tạo cách mạng lĩnh vực máy tính Sự phát triển chúng mang lại cho máy tính thật đáng kinh ngạc: hệ điều hành đa nhiệm, đa người dùng Linux chạy nhiều vi xử lý khác như: Intel , Motorola , MC68K , Dec Alpha Nó tương tác tốt với hệ điều hành: Apple , Microsoft Novell Không phải ngẫu nhiên mà ngành công nghệ thông tin Việt Nam chọn Linux làm hệ điều hành cho chương trình ứng dụng chủ đạo kinh tế quốc phịng Với mã nguồn mở, sử dụng Linux an tồn ứng dụng Windows Linux đem đến cho lợi ích kinh tế với nhiều phần mềm miễn phí Mã nguồn mở hệ điều hành chương trình Linux tài liệu vô giá để học hỏi kỹ thuật lập trình vốn tài liệu khơng cơng bố ứng dụng Windows Trong đồ án này, tìm hiểu phần quan trọng hệ điều hành Linux là: quản lý tiến trình Linux Một hệ điều hành muốn chạy ổn định phải có chế quản lý tiến trình hiệu Cơ chế trình bày cách chi tiết đồ án có kèm theo chương trình minh họa Chương 1: GIỚI THIỆU VỀ HỆ ĐIỀU HÀNH LINUX 1.1 Tổng quan hệ điều hành 1.1.1 Khái niệm hệ điều hành Hệ điều hành phần mềm hệ thống dùng để điều hành, quản lí thiết bị phần cứng tài nguyên phần mềm máy tính Hệ điều hành đóng vai trị trung gian việc giao tiếp người sử dụng phần cứng máy tính, cung cấp môi trường cho phép người sử dụng phát triển thực ứng dụng họ cách dễ dàng Khi khởi động máy tính, phần mềm hệ điều hành khởi động đầu tiên, sau người sử dụng sử dụng chương trình ứng dụng khác thơng qua giao diện tương tác hệ điều hành cung cấp Nhiệm vụ hệ điều hành • Điều khiển vị quỏn lí trực tiếp phần cứng Thực số thao tác máy tính thao tác đọc, • viết tập tin, quản lí hệ thống tập tin kho liệu Cung cấp hệ thống giao diện sơ khai cho ứng dụng, thường thơng • qua hệ thống thư viện hàm chuẩn để điều hành phần cứng mà từ ứng dụng gọi tới Cung cấp hệ thống lệnh để điều hành máy Các lện gọi • lệnh hệ thống (system command) Hệ điều hành cung cấp số phần mềm ứng dụng như: trình • duyệt web, chương trình soạn thảo văn bản, chương trình nghe nhạc, chương trình chỉnh sửa ảnh 1.1.2 Các thành phần hệ điều hành • Hệ thống quản lí tiến trình: Tạo hủy tiến trình; lập lịch thực • tiến trình Hệ thống quản lí nhớ chính: Lưu giữ thơng tin vị trí • nhớ; định tiến trình nạp vào nhớ chính; cấp phát thu hồi nhớ cần thiết Hệ thống quản lí nhớ phụ: Quản lí vùng trống đĩa, định vị, • lưu trữ, lập lịch cho đĩa Hệ thống quản lí nhập xuất: Cung cấp chế làm việc thân thiện, dễ thao tác hơn, che dấu đặc thù phần cứng • Hệ thống quản lí tập tin: Hỗ trợ thao tác với tập tin tạo, xóa, khơi • phục, ánh xạ tập tin hệ thống phụ Hệ thống bảo vệ: Kiểm sốt q trình truy suất chương trình, tiến • trình người sử dụng với tài nguyên hệ thống Hệ thống dịch lệnh: Đọc thông dịch lệnh điều khiển 1.1.3 Phân loại hệ điều hành    Hệ điều hành đơn nhiệm người sử dụng: Là hệ điều hành cho phép thời điểm có chương trình thực thi, chương trình phải thực Hệ điều hành đa nhiệm người sử dụng: Cho phép người đăng nhập vào hệ thống kích hoạt cho hệ thống thực nhiều chương trình Hệ điều hành đa nhiệm nhiều người sử dụng: Cho phép nhiều người đăng nhập vào hệ thống thời điểm khác thực đồng thời nhiều chương trình Địi hỏi máy tính phải có xử lí mạnh nhớ lớn 1.2 Hệ điều hành linux  LỊCH SỬ: Vào năm 1991, theo học đại học Helsinki, ông Linus Torvalds bắt đầu nảy sinh ý tưởng cho hệ điều hành thay cho hệ điều hành cũ kỹ giáo dục Chính ơng bắt tay vào viết dòng lệnh Linux, đặt móng cho phát triển mạnh mẽ hệ điều hành Linux Hình 1.1 Linus Torvalds – Cha đẻ hệ điều hành Linux Ngày nay, Linux phân làm nhiều nhánh như: Ubuntu, Linux Mint, Fedora… thông dụng Ubuntu Ưu điểm     Bản quyền: Hiện nay, Việt Nam nói riêng tỷ lệ người sử dụng Windows lậu chiếm số cao Lợi Linux tảng mã nguồn mở miễn phí Nếu sử dụng Windows quyền Microsoft Office quyền bạn khoảng vài triệu Cịn Linux khơng, bạn bỏ xu mà sử dụng đầy đủ tính năng, ứng dụng văn phịng miễn phí OpenOffice LibreOffice Bảo mật: Nếu Windows bạn phải chật vật đối mặt với ngày nhiều virus, mã độc,… bạn lại an tồn sử dụng Linux, đơn giản, tất bọn chúng hoạt động tảng Công việc bạn xóa thấy bọn chúng USB hay ổ cứng di động Linh hoạt Trên Linux, bạn có nhiều hiểu biết nó, bạn dễ dàng chỉnh sửa theo ý mình, cịn Windows, khơng có chấp thuận Microsoft bạn khơng phép làm điều Hơn nữa, Linux cịn mang lại tương thích với nhiều môi trường khác môi trường lý tưởng cho lập trình viên nhà phát triển Hoạt động mượt mà máy tính có cấu hình yếu Khi Windows tung nâng cấp phiên bản, kéo theo nâng lên yêu cầu phần cứng, laptop có cấu hình khơng đủ, người dùng dừng lại phiên cũ khơng cịn Microsoft “chăm lo” phải nâng cấp cho phần cứng Cịn Linux không, hệ điều hành hoạt động mượt mà ổn định máy tính có cấu hình thấp nâng cấp, hỗ trợ thường xun từ cộng đồng lập trình Linux Nhược điểm Nói phải nói lại, dù có ưu điểm mạnh mẽ Linux tồn số nhược điểm đáng buồn Có lẽ nhược điểm mà Windows trở nên độc tôn    Số lượng ứng dụng hỗ trợ Linux cịn hạn chế Một số nhà sản xuất khơng phát triển driver hỗ trợ tảng Linux Khó làm quen, đặc biệt bạn quen thuộc với Windows chuyển sang Linux, bạn cần khoảng thời gian để làm quen Chương 2: KHÁI NIỆM VỀ TIẾN TRÌNH 2.1 Khái niệm tiến trình Tiến trình - process khái niệm hệ điều hành Một tiến trình định nghĩa thực thể chương trình chạy hệ thống Một web server chạy thiết bị tiến trình, chương trình soạn thảo văn chạy thiết bị tiến trình Một tiến trình trải qua trình người: Nó sinh ra, có đời ý nghĩa nhiều ý nghĩa, sinh nhiều tiến trình con, chí, có chết Điều khác biệt nhỏ là: tiến trình khơng có giới tính Mỗi tiến trình có tiến trình cha Khi tiến trình tạo ra, giống hệt tiến trình cha Tiến trình chép tồn khơng gian địa chỉ, thực thi mã nguồn tiến trình cha, bắt đầu chạy tiếp mã nguồn riêng cho tiến trình từ thời điểm gọi hàm tạo tiến trình Mặc dù tiến trình cha tiến trình chia sẻ sử dụng phần mã nguồn chương trình, chúng lại có phần liệu tách biệt (stack heap) Điều có nghĩa là, thay đổi liệu tiến trình khơng ảnh hưởng đến liệu tiến trình cha 2.2 Tiến trình hệ điều hành linux Trong hệ điều hành linux tiến trình phân thành parents process child process Một tiến trình thực lệnh fork() để tạo tiến trình đưọc gọi parents process Tiến trình tạo gọi child process Hình 2.1 Sơ đồ tiến trình hệ điều hành linux Một parents process có nhiều child process child process có parents process Khi quan sát thơng tin tiến trình, ngồi PID (Processes ID) ta cần để ý tới PPID (Parent Processes ID) Nó cho ta thơng tin parents process tiến trình 10 Ví dụ: kill -INT 2309 kill -2 2309 dùng gửi tín hiệu INT ngắt tiến trình có PID 2309 Nếu khơng định tên tín hiệu, tín hiệu TERM gửi để kết thúc tiến trình Lệnh fg: gửi tín hiệu CONT đến tiến trình, dùng đánh thức tiến trình tạm dừng tín hiệu TSTP trước Bằng hàm hệ thống kill(): Ví dụ : #include #include #include #include int main(void){ pid_t retVal; retVal = fork(); if(retVal > 0){ int i = 0; while(i++ < 5){ printf("in the parent process.\n"); sleep(1); } //hủy tiến trình kill(retVal, SIGKILL); } else if (retVal == 0){ int i = 0; //Không vượt 15, tiến trình cha hủy while(i++ < 15){ printf("In the child process.\n"); sleep(1); } } else { 18 printf("Something bad happened."); exit(EXIT_FAILURE); } return 0; } 5.5.2 Nhận xử lí tín hiệu : a Khi tiến trình nhận tín hiệu, xử theo cách sau : - Bỏ qua tín hiệu - Xử lý tín hiệu theo kiểu mặc định - Tiếp nhận tín hiệu xử lý theo cách đặc biệt tiến trình b Bộ xử lý tín hiệu mặc định Hệ thống dành sẵn hàm mặc định xử lý tín hiệu cho tiến trình Ví dụ: Bộ xử lý mặc định cho tín hiệu TERM gọi hàm exit() - chấm dứt tiến trình hành Bộ xử lý dành cho tín hiệu ABRT gọi hàm hệ thống abort() để tạo file core lưu xuống thư mục hành thoát chương trình Mặc dù số tín hiệu bạn cài đặt hàm thay xử lý tín hiệu mặc định hệ thống c Cài đặt xử lý tín hiệu : Có nhiều cách thiết lập xử lý tín hiệu (signal handler) thay cho xử lý tín hiệu mặc định Một cách ta gọi hàm signal() sigaction() Ví dụ: #include typedef void (*sighandler_t) (int); sighandler_t signal(int signum, sighandler_t handler); Hàm signal() gọi xử lý xác định với signum Bộ xử lý SIG_IGN (Bỏ qua tín hiệu), SIG_DFL (Đặt tín hiệu trở lại chế mặc định) xử lý người dùng xây dựng function address 19 Ngồi Linux cịn hỗ trợ cách dùng signal sigaction: #include int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact) 5.6 Liên lạc tiến trình 5.6.1 Shared memory a Khái niệm Shared memory (bộ nhớ chia sẻ) chế giao tiếp liên tiến trình (IPC) có sẵn Linux hệ thống giống Unix khác, nhớ chung sử dụng cho hai nhiều tiến trình khác Trong chế giao tiếp tiến trình khác pipe (đường ống) hay message queue (hàng đợi tin nhắn), cần thực bước gửi liệu từ tiến trình sang trình khác Tuy nhiên, shared memory, khơng có hành vi truyền liệu cần phải thực cả, tiến trình truy cập vào nhớ chung Và giao tiếp thực thông qua nhớ chia sẻ này, nơi thay đổi thực tiến trình xem tiến trình khác Hình 5.1 Quan hệ tiến trình nhớ chia sẻ Ở đây, tiến trình chia sẻ vùng nhớ vật lý thông qua trung gian không gian địa chúng Một vùng nhớ chia sẻ tồn độc lập với tiến trình, tiến trình muốn truy xuất đến vùng nhớ này, tiến trình phải kết gắn vùng nhớ chung vào khơng gian địa riêng tiến trình, thao tác vùng nhớ riêng b Sử dụng shared memory Linux cung cấp hàm hệ thống sử dụng để tạo sử dụng shared memory sau: 20 shmget () int shmget(key_t key, size_t size, int shmflg) Trong đó, đối số: key: khóa giúp nhận nhớ chia sẻ, giá trị tùy ý giá trị tạo từ hàm ftok () - hàm giúp tạo khóa size: kích thước phân đoạn nhớ chia sẻ shmflg: định cờ (flag/s) bắt buộc cho nhớ chia sẻ IPC_CREAT (tạo phân đoạn nhớ mới) IPC_EXCL (Được sử dụng với IPC_CREAT để tạo phân đoạn nhớ lời gọi hàm không thành công, phân đoạn tồn tại) Lưu ý đối số cần kèm với quyền truy cập vào nhớ chia sẻ, bạn cần đặt quyền phù hợp cho nhu cầu sử dụng Sau lệnh gọi hàm thực thành công, shmget () trả mã định danh cho phân đoạn nhớ chia sẻ shmat () void * shmat(int shmid, const void *shmaddr, int shmflg) Trong đó, đối số: shmid: định danh phân đoạn nhớ chia sẻ giá trị trả lệnh gọi hệ thống shmget () shmadrr: định địa để gắn phân đoạn nhớ Thường đặt NULL đó, mặc định hệ thống chọn địa phù hợp để gắn phân đoạn shmflg: định cờ (flag/s) bắt buộc cho nhớ chia sẻ chẳng hạn SHM_RND (làm tròn địa thành SHMLBA) SHM_EXEC (cho phép nội dung phân đoạn thực thi) SHM_RDONLY (đính kèm phân đoạn với mục đích đọc, theo mặc định đọc-ghi) SHM_REMAP (thay ánh xạ có phạm vi định shmaddr tiếp tục kết thúc phân đoạn) Sau lệnh gọi hàm thực cơng, trả địa mà phân đoạn nhớ chia sẻ gắn shmdt () int shmdt(const void *shmaddr) 21 Sau tiến trình bạn hồn thành với việc sử dụng nhớ chia sẻ bạn có cần tách khỏi nhớ chia sẻ Điều thực cách gọi hàm hệ thống shmdt() shmaddr địa phân đoạn nhớ chia sẻ tách shmctl () int shmctl(int shmid, int cmd, struct shmid_ds *buf) Lệnh gọi hệ thống giúp thực thao tác điều khiển cho phân đoạn nhớ chia sẻ với: shmid: ID định danh cho nhớ chia sẻ cmd: định lệnh sử dụng nhớ chia sẻ bao gồm: IPC_STAT - Sao chép thông tin giá trị thành phần cấu trúc struct shmid_ds vào cấu trúc trỏ buf Lệnh yêu cầu quyền đọc phân đoạn nhớ chia sẻ IPC_SET - Đặt ID người dùng, ID nhóm chủ sở hữu, quyền, v.v trỏ đến theo cấu trúc buf IPC_RMID - Đánh dấu phân đoạn bị hủy Phân đoạn bị phá hủy sau tiến trình cuối tách IPC_INFO - Trả thông tin giới hạn nhớ dùng chung tham số cấu trúc trỏ buf SHM_INFO - Trả cấu trúc shm_info chứa thông tin tài nguyên hệ thống tiêu thụ nhớ chia sẻ buf: trỏ đến cấu trúc nhớ dùng chung có tên struct shmid_ds Các giá trị cấu trúc sử dụng cho set get theo cmd Tất lệnh gọi hàm hệ thống trên, xảy lỗi không thành công trả cho giá trị -1 c Đánh giá việc sử dụng shared memory Ưu điểm việc sử dụng shared memory việc không cần đến truyền gửi liệu giúp tiết kiệm chi phí phương pháp nhanh giúp trao đổi tiến trình Nhược điểm phương pháp gây khó khăn định việc bảo đảm tồn vẹn liệu (coherence) , ví dụ : biết liệu mà tiến trình truy xuất liệu mà tiến trình 22 khác ghi ? Làm ngăn cản hai tiến trình đồng thời ghi liệu vào vùng nhớ chung ?…Rõ ràng vùng nhớ chia sẻ cần bảo vệ chế đồng hóa thích hợp Bên cạnh đó, shared memory khơng phải lựa chọn phù hợp hệ phân tán , để trao đổi thơng tin máy tính khác 5.6.2 Message queue a Khái niệm Message queue hay hàng đợi tin nhắn chế IPC có sẵn Linux Mỗi khối liệu truyền xác định kiểu (TYPE) cụ thể người nhận nhận liệu tùy theo kiểu liệu Trong nhiều trường hợp sử dụng, điều đem lại nhiều hiệu thay phải nhận liệu theo cách FIFO cách sử dụng pipe (đường ống) Hình 5.2 Minh họa sử dụng message queue 23 b Sử dụng message queue Tương tự với shared memory, để hỗ trợ chế giao tiếp tiến trình message queue, hệ điều hành cung cấp hàm IPC chuẩn (Interprocess communication) để thực giao tiếp tiến trình với message queue, hàm: msgget (): trả ID định danh cho message queue tạo trả định danh message queue tồn với giá trị khóa nhận dạng int msgget(key_t key, int msgflg) msgsnd (): Hàm hệ thống sử dụng để đưa liệu vào message queue int msgsnd(int msgid, const void *msgp, size_t msgsz, int msgflg) msgrcv (): Hàm hệ thống thống giúp lấy liệu khỏi môtj message queue int msgrcv(int msgid, const void *msgp, size_t msgsz, long msgtype, int msgflg) msgctl (): Hàm hệ thống giúp thực thao tác điều khiển message queue int msgctl(int msgid, int cmd, struct msqid_ds *buf) c Đánh giá việc sử dụng message queue Sử dụng message queue mang lại nhiều đặc điểm khác so với sử dụng shared memory hay phương pháp IPC khác như: Đơn vị truyền thông tin chế giao thiếp data block(hay thông điệp) có xác định kiểu, tiến trình trao đổi liệu dạng có cấu trúc Khi sử dụng shared memory, liệu có sẵn cho nhiều tiến trình truy cập Tuy nhiên, sử dụng message queue, tiến trình nhận liệu, khơng cịn sử dụng cho tiến trình khác Khơng giống pipe, message queue dựa thông điệp, đường ống dựa luồng byte message queue không thiết phải đọc trước trước Có nhược điểm message queue độ dài tối đa thông điệp bị giới hạn vòng đời message queue gắn liền với kernel 24 5.7 Lập lịch đa tiến trình Lập lịch đa tiến trình bản, bạn có tiến trình (main process), sau tiến trình đẻ tiến trình để làm việc Nhiệm vụ tiến trình đơn giản, khơng thể có lỗi, thường nhiệm vụ quản lý giao việc cho tiến trình trực tiếp xử lý cơng việc Ngắn gọn lại: Tạo tiến trình chính, tiến trình gọi tiến trình Tiến trình nhận nhiệm vụ (thường nhận nhiệm vụ thơng qua giao tiếp vs tiến trình chính), xử lý cơng việc liên tục Tiến trình quản lý tiến trình con, thằng chết/treo/hồn thành nhiệm vụ xử lý (chết tạo mới, treo stop, ) Để liên lạc tiến trình dùng Ống dẫn liên lạc Đó chế để liên lạc gián tiếp tiến trình , file đặc biệt (FIFO), thơng tin truyền đầu thoát đầu khác Các ống dẫn không cung cấp truyền thông theo cấu trúc Thao tác đọc độc lập với thao tác ghi cấp độ lệnh gọi hệ thống, người ta khơng thể biết kích cỡ, người gởi người nhận liệu chứa pipe Mặt khác, ưu điểm phương pháp truyền thông khả sử dụng liệu ghi nhiều lần để đọc lần Ống dẫn có đặc điểm - Các ống dẫn mang tính chất tạm thời, tồn thời gian thực tiến trình tạo - Muốn tạo ống dẫn phải bắt đầu lệnh đặc biệt: pipe().Hệ thống cung cấp cho ta hàm pipe() để tạo đường ống có khả đọc/ghi - Nhiều tiến trình viết đọc ống dẫn Tuy nhiên, khơng có chế để phân biệt thơng tin cho tiến trình đầu - Dung lượng ống dẫn bị hạn chế (khoảng 4KB) Do cố gắng viết ống dẫn bị đầy gặp phải trường hợp tắc nghẽn - Các tiến trình liên lạc qua ống dẫn phải có mối quan hệ họ hàng ống dẫn nối phải mở trước tạo tiến trình -Khơng thể tự thay đổi vị trí thơng tin ống 25 Tạo ống dẫn: int p_desc[2]; int pipe(p_desc); Giá trị trả thành công, -1 thất bại p_desc[0] : chứa số hiệu mơ tả nhờ đọc ống dẫn p_desc[1] : chứa số hiệu mơ tả nhờ viết ống dẫn Như việc viết p_desc[1] để truyền liệu ống việc đọc p_desc[0] để nhận chúng Ví dụ: #include #include main() { int i,ret, p_desc[2]; char c; pipe(p_desc); write(p_desc[1], "AB", 2); for (i=1; i

Ngày đăng: 29/12/2022, 18:47

Tài liệu cùng người dùng

Tài liệu liên quan