Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 26 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
26
Dung lượng
1,06 MB
Nội dung
BỘ CÔNG THƯƠNG 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 Giáo viên: Th.s Nguyễn Tuấn Tú MÔN NGUYÊN LÝ HỆ ĐIỀU HÀNH NHÓM LỚP ĐH KHMT 3-K9 TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO BÀI TẬP LỚN MÔN HỌC NGUYÊN LÝ HỆ ĐIỀU HÀNH Đề tài: Quản lý tiếntrình hệ điều hành Linux Giáo viên hướng dẫn: ThS Nguyễn Tuấn Tú Lớp: ĐH KHMT3-K9 STT Sinh viên thực Mã SV Trần Văn Trịnh 0941060223 Hoàng Văn Tiến 0941060253 Trần Thị Mai Hương 0941060252 Nguyễn Tiến Dũng 0941060212 Nguyễn Việt Phương 0941060197 MỤC LỤC Lời mở đầu Vài năm qua, Linux thực sự 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 các 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 các 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 toàn các ứ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 các chương trìnhLinux 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ố đối với các ứng dụng Windows Trong đồ án này, tìm hiểu phần quantrọng hệ điều hành Linux là: quản lý nhớ Linux Một hệ điều hành muốn chạy ổn định phải có chế quản lý nhớ hiệu Cơ chế trình bày cách chi tiết đồ án có kèm theo các chương trình minh họa Giới thiệu về hệ điều hành linux 1.1Tổng quan về hệ điều hành Phần mềm máy tính chia làm hai loại: các phần mềm hệ thống, quảnlí hoạt động thân máy tính, các chương trình ứng dụng, giải các yêu cầu người dùng Phần tất các phần mềm hệ thống gọi Hệ điều hành Hệ điều hành phần mềm chạy máy tính, dùng để điều hành, quảnlí các thiết bị phần cứng các tài nguyên phần mềm máy tính Hệ điều hành đóng vai trò trung gian giao tiếp người sử dụng với phần cứng máy tính, cung cấp môi trường cho người sử dụng phát triển các ứng dụng họ cách dễ dàng Hệ điều hành phần quantrọng hầu hết các hệ thống máy tính Hệ điều hành chạy môi trường đặc biệt, gọi chế độ nhân (Kernel mode hay Supervisor mode) Chế độ chạy hỗ trợ biển kiến trúc CPU( các lệnh máy đặc biệt) ngăn người dùng truy cập vào phần cứng ( quảnlí phần cứng chuẩn xác cho nhiều người dùng đồng thời, gọi chế độ bảo vệ (protect mode)) Chức chủ yếu hệ điều hành là: Quảnlí chia sẻ tài nguyên (CPU, nhớ trong, nhớ ngoài…) Giả lập máy tính mở rộng Ngoài chia chức hệ điều hành theo bốn chức là: + Quảnlí quá trình (Proccess manament) + Quảnlí nhớ (Memory manament) + Quảnlí hệ thống lưu trữ + Giao tiếp với người dùng (User interaction) Nhiệm vụ hệ điều hành: + Điều khiển quảnlí trực tiếp các phần cứng bo mạch chủ, bo mạch đồ họa bo mạch âm thanh… + Thực số thao tác máy tính các thao tác đọc , viết tập tin, quảnlí hệ thống tập tin (file system) các kho liệu + Cung ứng hệ thống giao diện sơ khai cho các ứng dụng thường thông qua hệ thống thư viện hàm chuẩn để hệ diều hành các phần cứng mà từ các ứng dụng gọi tới + Cung ứng hệ thống lệnh để điều hành máy Các lệnh gọi lệnh hệ thống ( system command) + Ngoài hệ điều hành, vài trường hợp, cung cấp các dịch vụ cho các phần mềm ứng dụng thông thường chương trình duyệt web hay soạn thảo văn bản… Các thành phần hệ điều hành bao gồm: + Hệ thống quảnlítiếntrình + Hệ thống quảnlí nhớ + Hệ thống quảnlí nhập xuất + Hệ thống quảnlí tập tin + Hệ thống bảo vệ + Hệ thống dịch lệnh + Quảnlí mạng 1.2 Hệ điều hành linux - Linux hệ điều hành mô Unix, xây dựng phần nhân (kernel) các gói phần mềm mã nguồn mở Linux công bố dưới quyền GPL (General Public Licence) - Linux hệ điều hành cho nhiều máy tính khác trước tiên cho PC Intel Đó hệ điều hành có hàng trăm nhà lập trình tham gia thiết kế xây dựng, với mục tiêu tạo giống UNIX hoàn toàn không lệ thuộc vào phần mềm có đăng kí tác quyền giới sử dụng thoải mái - Thành phần Linux hạt nhân Linux ( thường gọi nhân Linux-Linux kernel), nhân hệ điều hành phát triển Linus Torvalds công bố lần vào 9/1991 với phiên 0.0.1 - Ngày 5/4/1991, Linus Torvalds, chàng sinh viên trường Đại học Helsinki, Phần Lan bắt tay vào viết dòng lệnh Linux Hình 1.1:Torvalds – Người “cha đẻ” Linux Linus Tháng 9/1991 phiên Linux 0.0.1 , phiên Torvalds công bố với 10239 dòng lệnh Phiên 0.0.2 công bố tháng sau Năm 1992, Torvalds cho phát hành Linux dưới dạng mã nguồn mở giấy phép GPL, cho phép người download để xem mã nguồn mở để chung tay phát triển Năm 1993, Slackware, hệ điều hành phát triển dựa mã nguồn mở Linux đời Phiên mới Slackware phát hành 5/2010 14/3/1994 Sau năm làm việc, Torvalds cho mắt phiên hoàn thiện đầu tiên, Linux 1.0 đời với 176.250 dòng lệnh Sau năm, phiên 1.2 đời với 310.950 dòng lệnh Ngày 3/11/1994 Red Hat Linux, phiên 1.0 giới thiệu Đây phiên thương mại hóa dựa Linux Năm 1996, hình ảnh chim cánh cụt lấy làm biểu tượng Linux Năm 1998, Linux IBM, Compaq, Oracle quan tâm đầu tư phát triển… Năm 2007, các hãng máy tính HP, ASUS., Dell… bắt đầu bán các sản phẩm laptop cài sẵn Linux 1/2009, số người dùng Linux đạt tới số 10 triệu người Hiện sau 20 năm tồn phát triển, Linux đông đảo người biết đến sử dụng, vốn từ hệ điều hành 10 ngàn câu lệnh, phiên mới 2.6.38 phát hành với 14.294.493 dòng lệnh đánh dấu chặng đường tồn phát triển Linux Khái niệm tiếntrình - Tiếntrình chương trình xử lí, sở hữu trỏ lệnh, tập các ghi các biến Để hoàn thành nhiệm vụ mình, các tiếntrình yêu cầu số tài nguyên hệ thống CPU, nhớ các tập tin các thiết bị nhập/xuất - Để hỗ trợ hoạt động đa nhiệm, hệ thống máy tính cần phải có khả thực nhiều tác vụ xử lí đồng thời việc điều khiển hoạt động song hành cấp độ phần cứng khó khăn Vì các nhà thiết kế hệ điều hành đề xuất mô hình song hành giả lập cách chuyển đổi xử lí qua lại các chương trình để trì hoạt động nhiều chương trình thời điểm mô hình này, các chương trình hệ thống tổ chức thành các tiếntrình (process) Tiếntrình (process) trạng thái tức thời chương trình chạy máy tính Nó bao gồm nhớ cần thiết để chạy chương trình (không gian địa Tiến trình) khả kiểm soát trạng xử lý Tiếntrình thực thi chương trình (tiến trình điều khiển Tiến trình) Luồng (thread) tương tự Tiếntrình bao gồm tiếntrình điều khiển Nhiều luồng sử dụng không gian địa Tiếntrình -Có loại tiến trình: + Tiếntrình có tương tác (Interactive processes) : tiếntrình khởi động quản lý shell, kể tiếntrình forthground background + Tiếntrình batch (Batch processes) : Tiếntrình không gắn liền đến terminal nằm hàng đợi để thực + Tiếntrình ẩn nhớ (Daemon processes) : Là các tiếntrình chạy dưới (background) Các tiếntrình thường khởi động từ đầu Đa số các chương trình Các trạng thái tiếntrình Hình 3.1:các bước tiếntrìnhTrong môi trường hệ điều hành Linux, tiếntrình có các trạng thái sau: + Runnable: tiếntrình trạng thái sẵn sàng để chạy Nó cấp phát đầy đủ các tài nguyên đợi tới phiên cấp CPU chạy + Sleeping: tiếntrình đợi sự kiện xảy ra, sự kiện xảy duyệt chờ cấp phát CPU để chạy Ví dụ: tiếntrình đợi thao tác đọc/ghi file hoàn tất tiếntrình dịch vụ mạng đợi có yêu cầu từ phía client các tiếntrình sleeping Trong trường hợp đặc biệt, có số tiếntrình rơi vào tình trạng đánh thức sự kiện Những tiếntrình kí hiệu D (uninterruptible process) + Zoombie: tiếntrình kết thúc không xóa khỏi RAM tiếntrình cha của không nhận thông báo việc kết thúc Nhìn chung các tiếntrình zoombie không gây hại Nếu muốn dọn dẹp các tiếntrình này, cách khởi động lại máy + Traced/Stopped: Những tiếntrình bị buộc dừng lại Tiếntrình rơi vào trạng thái nhận signal STOP TSTP chạy lại nhận signal CONT người dùng cho chạy chế độ background/ foreground lệnh bg/fg - Running(đang chạy): Tiếntrình chiếm quyền xử lí CPU dùng tính toán hay thực thi các công việc - Waiting(chờ): Tiếntrình bị HĐH tước quyền xử lí CPU chờ đến lượt cấp phát khác - Suspend(tạm dừng): HĐH tạm dừng tiến trình, tiếntrình đưa vào trạng thái ngủ ( sleep), cần thiết có nhu cầu HĐH đánh thức(wake up) hay nạp lại mã lệnh tiếntrình vào nhớ, cấp phát tài nguyên CPU để tiếntrìnhtiếntrình hoạt động Nếu tiếntrình chạy tiền cảnh bạn muốn đưa chúng vào hậu cảnh, bạn thực công việc cách nhấn tổ hợp phím Ctrl + Z Khi nhận tín hiệu Ctrl+Z tiếntrình b ị t ạm dừng đưa vào hậu cảnh Tuy nhiên bạn chưa biết chương trình dừng chưa chuyển vào hậu cảnh chưa Lệnh jobs hiển thị trạng thái tất các tiếntrình chạy hậu cảnh: - Hàm fork() để nhân tiếntrình - Hàm system() để tạo lập tiếntrình mới - Hàm exec() dùng để thay tiếntrình hành Quan hệ tiếntrình Các tiếntrình hoạt động hệ thống tồn mối quan hệ: độc lập hợp tác(song hành * Quan hệ độc lập: tiếntrình gọi độc lập hoạt động không gây ảnh hưởng không bị ảnh hưởng các tiếntrình khác hoạt động hệ thống Tiếntrình độc lập có đặc trưng sau: - Trạng thái không bị chia sẻ với tiếntrình khác - Việc thực tiếntrình đơn định(kết phụ thuộc vào đầu vào) - Tiếntrình tái hiện(lặp lại) - Tiếntrình dừng bắt đầu lại mà không gây ảnh hưởng tới các tiếntrình khác hệ thống * Quan hệ hợp tác: Tiếntrình gọi hợp tác(song hành) hoạt động gây ảnh hưởng bị ảnh hưởng các tiếntrình khác hoạt động hệ thống Tiếntrình hợp tác có đặp trưng sau: - Trạng thái bị chia sẻ cho các tiếntrình khác 10 5.2 Cấu trúc tiếntrình Cách thúc quản lý tiếntrình linux: +Hai user niel rick đăng nhập chạy chương trình grep đồng thời HĐH lúc quản lý nạp mã truy cập chương trình grep vào hai vùng nhớ khác gọi phân vùng tiếntrình Hình 5.1 người dùng neil chạy chương trình grep tìm chuỗi “abc” tập tin trec.txt người dùng rick chạy chương trình grep tìm chuỗi “cde”trong tập tin somefile.doc Hình 5.1 tiếntrìnhquản lý HĐH 12 -Dùng lệnh ps cho phép xem thông tin các tiếntrình mà linux kiểm soát (có thể sử dụng thêm tham số “-af “ để lieettj kê chi tiết thông tin các tiến trình): -Mỗi tiếntrình gán cho định danh gọi PID(Process Identifier) -PID số nguyên dương có giá trị từ 2-32768 -Tiến trình init gọi chạy ta khởi động HĐH.Đây tiếntrìnhquản lý tạo tiếntrình khác Có PID -Cách thức gán PID :khi tiếntrình mới yêu cầu khởi động ,HĐH chọn lấy giá trị số nguyên khoảng 2-32768 (số nguyên naỳ chưa bị tiếntrình chạy chiếm giữ) cấp phát cho tiếntrình Khi tiếntrình chấm dứt HĐH thu lại số PID để cấp phát cho tiếntrình khác lần sau -Trên Unix/Linux, thư mục /proc chứa các file lưu trữ thông tin tiếntrình chạy -Theo quy ước,mỗi tiếntrình hoạt động không gian địa ảo độc lập hệ thống cấp phát 4Gb 5.3 5.4 Tạo tiếntrình int fork() tạo tiếntrình Giá trị trả lại cho tiếntrình dấu hiệu pid cho tiếntrình cha Giá trị -1 không tạo tiếntrình mới Theo nguyên tắc hệ thống, tiếntrình cha có đoạn mã Đoạn liệu tiếntrình mới chép xác đoạn liệu tiếntrình cha Tuy nhiên tiếntrình vẫn khác tiếntrình cha pid, thời gian xử lý, Giám sát điều khiển tiếntrình Một program file thực thi hệ thống Ví dụ: /sbin/shutdown,/sbin/init Process instance program thực thi (ví dụ ta chạy lúc nhiều sổ Word, cửa sổ instance ứng dụng Word) Process gọi task Lấy thông tin trạng thái các tiến trình: sử dụng câu lệnh ps, top 13 1.4.1 Lệnh PS + Lệnh ps, thông số: - e: hiển thị thông tin tiếntrình - l: hiển thị thông tin đầy đủ tiếntrình - f: hiển thị thông tin tiếntrình cha - a: hiển thị tất các tiếntrình - aux: liệt kê danh sách các tiếntrình chạy các thông tin Hình 5.2 Mỗi tiếntrìnhLinux mang số ID các thao tác liên quan đến tiếntrình thông qua số PID Gạch nối – trước bash để thông báo shell khởi động người sử dụng login Để hiển thị tất các process, ta sử dụng lệnh ps –a Một người sử dụng hệ thống bình thường thấy tất các tiến trình, điều khiển các tiếntrình tạo Chỉ có superuser mới có quyền điều khiển tất các tiếntrình hệ thống Linux người khác Lệnh ps –aux cho phép hiển thị tất các tiến trình, tiếntrình không gắn liền đến có bàn điều khiển (tty) Chúng ta coi các tiếntrình chạy với dòng lệnh đầy đủ để khởi động tiếntrình ps –aux 14 Chủ nhân tiếntrình (owner) Mã số nhận diện tiếntrình (PID) Mức sử dụng CPU (%CPU) Mức chiếm dụng nhớ tiếntrình (%MEM) VSZ - lượng nhớ ảo (phần đĩa cứng giả làm RAM) mà tiếntrình sử dụng, tính theo byte RSS - lượng nhớ RAM mà tiếntrình sử dụng, tính theo byte TTY - terminal mà tiếntrình khởi tạo Dấu hỏi ? thể tiếntrình daemon không liên kết với terminal nào? trạng thái tiếntrình (STAT) thời điểm khởi chạy (START) 10.thời gian chạy (TIME) các thông tin khác 5.4.2 Lệnh Top Giống lệnh ps danh sách các process update liên tục Các thông số CPU, RAM thể Update Tham sô –d (delay: khoảng thời gian refresh lần), -n (number: chạy n lần ngưng) 15 Hình 5.3 5.5 Dừng tiếntrình Lệnh kill Shell dùng để chấm dứt hoạt động tiếntrình + Lệnh kill: # kill Gởi tín hiệu cho tiếntrình chạy + Lệnh kill: # kill 16 Hình 5.4: Ý nghĩa số lệnh Lệnh kill gởi tín hiệu signal tới tiến trình, theo mặc định gởi tín hiệu 15, TERM (là tín hiệu kết thúc chương trình) Lệnh kill -9 PID: ngừng thi hành tiếntrình mà không bị các tiếntrình khác can thiệp (tín hiệu 9, KILL) Super-user mới có quyền dừng tất các tiến trình, người sử dụng dừng các tiếntrình Các signal thường dùng lệnh kill bao gồm: Tên Giá trị Tác động - SIGHUP - Hangup (gọi lại tiến trình) - SIGINT - Ngắt từ bàn phím (Ctrl+C) - SIGKILL - Hủy tiếntrình - SIGTERM 15 - Kết thúc tiếntrình - SIGSTOP 17,19,23: - Dừng tiếntrình Khi kết thúc tiếntrình hay chuỗi các tiến trình, thông thường nên tiến hành thử với tín hiệu gây nguy hiểm nhất, SIGTERM, không mới sử dụng các tín hiệu INT hay KILL Ví dụ muốn dừng tiếntrình 234 ta dùng lệnh: kill 234 C có lệnh kill sau: int kill(pid, sig); int pid; dấu hiệu nhận biết tiếntrình int sig; tín hiệu giao tiếp tiếntrình 17 5.6 Chạy tiếntrình trạng thái foreground trạng thái background Quá trình chạy chế đọ tiến hành theo các bước sau: Thực quá trình , nhân tiếntrình cha (trong trường hợp thực thi các lệnh,đó tiếntrình shell) Thực quá trình , đưa tiếntrình cha vào trạng thái ngủ (sleep) Thực quá trình , thực thi tiếntrình Sau tiếntrình thực thi xong, tín hiệu gửi tới tiếntrình cha Do quá trình chạy =>trong quá trình thực tiếntrình con, người sử dụng tương tác với tiếntrình cha Quá trình chạy chế độ ngầm cho phép thực thi tiếntrình cha tiếntrình cách độc lập Ví dụ: $ emacs& Sau thực lệnh trên,emacs chạy chế đọ ngầm, người sử dụng tiếp tục sử dụng console để thực thi các lệnh khác 5.7 Độ ưu tiêntiếntrình (Priority) Sử dụng lệnh nice, renice + Tất các tiếntrình có độ ưu tiên ban đầu ngầm định + Mức độ ưu tiêntiếntrình dao động khoảng từ -19 đến +19 Chỉ người sử dụng có quyền rút mới giảm giá trị biểu diễn độ ưu tiêntiếntrình Một người sử dụng thông thường làm giảm độ ưu tiêntiếntrình thông qua việc tăng giá trị biểu diễn độ ưu tiên Sử dụng lệnh nice, renice để thay đổi độ ưu tiên + Nice: cho phép thay đổi độ ưu tiêntiếntrình bắt đầu thực tương ứng với tiếntrình # nice [–n number] [command] 18 Ví dụ: # nice –n -10 vi /root/data.txt + Renice: cho phép thay đổi độ ưu tiêntiếntrình sau chạy # renice priority PID [[- group] [[-u] user] Ví dụ: # renice -2 203 Set nice number is -2 to PID=203 Can thiệp vào hoạt động &: Cho job hoạt động background Ví dụ: # ls –l –R / > /root/list.txt & Ứng dụng ls chạy bên dưới Giao tiếp tiếntrình Việc giao tiếp các tiếntrình thực thông qua các tín hiệu chuẩn hệ thống Tín hiệu sự ngắt quãng logic gửi đến các tiếntrình hệ thống để thông báo cho chúng sự việc không bình thường môi trường hoạt động chúng (như lỗi nhớ, lỗi vào ra) Nó cho phép các tiếntrình liên lạc với Một tín hiệu (trừ SIGKILL) xem xét theo ba cách khác nhau: Tiếntrình bỏ qua: Ví dụ chương trình bỏ qua sự ngắt quãng người sử dụng hệ thống (đó sự bỏ qua tiếntrình sử dụng phần Tiếntrình thực hiện: Trong trường hợp này, nhận tín hiệu, việc thực tiếntrình chuyển quy trình người sử dụng xác định trước, sau trở lại nơi bị ngắt Lỗi tiếntrình trả sau nhận tín hiệu này.Dưới số tín hiệu thường gặp: SIGHUP Tín hiệu phát đến các tiếntrình vào lúc cuối mà tự ngắt.Nó phát đến tiếntrình có tiếntrình tự ngắt SIGINT Tín hiệu phát đến các tiếntrình ta lệnh ngắt SIGQUIT Tương tự ta gõ vào ^D SIGILL Lệnh không hợp lệ, tín hiệu phát phát lệnh không 19 cấp độ vật lý (ví dụ tiếntrình thực lệnh mà máy tính chông có lệnh này) SIGTRAP Tín hiệu phát sau lệnh trường hợp tiếntrình có sử dụng lệnh ptrace() SIGIOT Bẫy phát có các vấn đề vật lý SIGEMT Bẫy lệnh phát, phát có lỗi vật lý thực SIGFPE Được phát có lỗi tính toán số có dấu phẩy nối có định dạng không hợp lý Gần lỗi lập trình SIGKILL Trang bị để kết thúc tiếntrình Không thể bỏ qua cắt tín hiệu SIGBUS Được phát gặp lỗi bus SYSGEGV Được phát gặp lỗi phân đoạn sự truy cập liệu bên phân đoạn liệu cấp phát cho tiếntrình SIGSYS Đối số không cho hệ thống gọi SIGPIPE Viết ống dẫn không mở để đọc SIGALRM Phát đồng hồ tiếntrình ngừng lại Đồng hồ hoạt động lệnh alrm() SIGTERM Được phát tiếntrình kết thúc bình thường Cũng dùng để dừng hệ thống để kết thúc tất các tiếntrình hoạt động Liên lạc hai tiếntrình Từ chương trình đơn giản dưới sử dụng các lệnh phát nhận tín hiệu, sau giúp liên lạc hai tiếntrình Nội dung ví dụ sự liên lạc tiếntrình cha tiếntrình thông qua các tín hiệu trình bày phần trước #include #include 20 void fils_atc() { printf(" Tientrinh bi loai bo !!!\n"); kill(getpid(), SIGINT); } /***********************************/ void fils() { signal(SIGUSR1, fils_atc); printf(" Hinh tientrinh moi Nhung chuan bi loai bo tientrinh !!\n"); while(1); } /******************************/ main() { int ppid, pid; if ((pid = fork())==0) fils(); else { sleep(3); printf(" Chap nhan !! Tientrinh se bi loai bo.\n"); kill(pid, SIGUSR1); } } 21 Trong ví dụ trên, tiếntrình có sử dụng hàm signal(SIGUSR1, fils_atc) Hàm có tác dụng tiếntrình nhận tín hiệu SIGUSR1 hàm fils_atc() thực thi Như ví dụ tiếntrình tạo lại không muốn tiếp tục tồn Do sau tạm dừng lại sleep(3), tiếntrình cha gởi đến cho tiếntrình tín hiệu SIGUSR1 lệnh: kill(pid, SIGUSR1); Ở tiếntrình con, tín hiệu SIGUSR1 gán với hàm fils_atc() Hàm thông báo báo hiệu tiếntrình chết tự gởi đến (tiến trình con) tín hiệu SIGINT, tín hiệu ngắt tiếntrình Và tiếntrình chết kill(getpid(), SIGINT); Một số nhược điểm liên lạc trực tiếp tín hiệu: - Một tín hiệu bị bỏ qua, kết thúc tiếntrình bị chặn lại Đó lý đưa các tín hiệu không thích ứng để tiến hành liên lạc các tiếntrình Một thông điệp điệp dưới hình thức tín hiệu bị nhận lúc loại tín hiệu tạm thời bị bỏ qua - Một vấn đề khác các tín hiệu có quyền lớn, đến chúng làm ngắt quãng công việc Ví dụ việc nhận tín hiệu tiếntrình đợi sự kiện (mà đến sử dụng các lệnh open(), read(), ) làm cho việc thực thi hàm bị chệch hướng Khi trở lại, lệnh bị ngắt gởi lại thông điệp báo lỗi mà hoàn toàn không xử lý Ngoài việc liên lạc trực tiếp ví dụ trên, cho phép phương pháp liên lạc các tiếntrình khác, liên lạc qua "đường ống" Lập lịch đa tiếntrình 8.1 Ống dẫn liên lạc Ống dẫn chế để liên lạc gián tiếp tiếntrình Đó file đặc biệt (FIFO), thông tin truyền đầu thoát đầu khác Một số đặc điểm "ống dẫn": 22 - Các ống dẫn mang tính chất tạm thời, tồn thời gian thực tiếntrình tạo - Muốn tạo ống dẫn phải bắt đầu lệnh đặc biệt: pipe() - Nhiều tiếntrình viết đọc ống dẫn Tuy nhiên, chế để phân biệt thông tin cho tiếntrì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ếntrì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ếntrình - Không thể tự thay đổi vị trí thông tin ống 8.2 Thao tác với ống dẫn liên lạc 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 các số hiệu mô tả nhờ đọc ống dẫn p_desc[1] : chứa các 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); 23 write(p_desc[1], "AB", 2); for (i=1; i