1. Trang chủ
  2. » Thể loại khác

Nhom2 quan li tien trinh trong HDH linux

26 430 0

Đ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

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ảntiến trì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ì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ố đối với các ứ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ý 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ản 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ản 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 quan trọ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ản 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ản 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ản quá trình (Proccess manament) + Quản nhớ (Memory manament) + Quản 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ản 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ản 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ản tiến trình + Hệ thống quản nhớ + Hệ thống quản nhập xuất + Hệ thống quản tập tin + Hệ thống bảo vệ + Hệ thống dịch lệnh + Quản 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ến trình - Tiến trì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ến trì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ử đồ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ử 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ến trình (process) Tiến trì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ến trì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ến trình bao gồm tiến trình điều khiển Nhiều luồng sử dụng không gian địa Tiến trình -Có loại tiến trình: + Tiến trình có tương tác (Interactive processes) : tiến trình khởi động quản lý shell, kể tiến trình forthground background + Tiến trình batch (Batch processes) : Tiến trình không gắn liền đến terminal nằm hàng đợi để thực + Tiến trình ẩn nhớ (Daemon processes) : Là các tiến trình chạy dưới (background) Các tiến trình thường khởi động từ đầu Đa số các chương trình Các trạng thái tiến trình Hình 3.1:các bước tiến trình Trong môi trường hệ điều hành Linux, tiến trình có các trạng thái sau: + Runnable: tiến trì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ến trì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ến trình đợi thao tác đọc/ghi file hoàn tất tiến trình dịch vụ mạng đợi có yêu cầu từ phía client các tiến trình sleeping Trong trường hợp đặc biệt, có số tiến trình rơi vào tình trạng đánh thức sự kiện Những tiến trình kí hiệu D (uninterruptible process) + Zoombie: tiến trình kết thúc không xóa khỏi RAM tiến trình cha của không nhận thông báo việc kết thúc Nhìn chung các tiến trình zoombie không gây hại Nếu muốn dọn dẹp các tiến trình này, cách khởi động lại máy + Traced/Stopped: Những tiến trình bị buộc dừng lại Tiến trì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ến trình chiếm quyền xử CPU dùng tính toán hay thực thi các công việc - Waiting(chờ): Tiến trình bị HĐH tước quyền xử 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ến trì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ến trình vào nhớ, cấp phát tài nguyên CPU để tiến trình tiến trình hoạt động Nếu tiến trì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ến trì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ến trình chạy hậu cảnh: - Hàm fork() để nhân tiến trình - Hàm system() để tạo lập tiến trình mới - Hàm exec() dùng để thay tiến trình hành Quan hệ tiến trình Các tiến trì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ến trì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ến trình khác hoạt động hệ thống Tiến trình độc lập có đặc trưng sau: - Trạng thái không bị chia sẻ với tiến trình khác - Việc thực tiến trình đơn định(kết phụ thuộc vào đầu vào) - Tiến trình tái hiện(lặp lại) - Tiến trình dừng bắt đầu lại mà không gây ảnh hưởng tới các tiến trình khác hệ thống * Quan hệ hợp tác: Tiến trì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ến trình khác hoạt động hệ thống Tiến trình hợp tác có đặp trưng sau: - Trạng thái bị chia sẻ cho các tiến trình khác 10 5.2 Cấu trúc tiến trình Cách thúc quảntiến trì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ến trì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ến trình quảnHĐH 12 -Dùng lệnh ps cho phép xem thông tin các tiến trìnhlinux 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ến trì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ến trình quản lý tạo tiến trình khác Có PID -Cách thức gán PID :khi tiến trì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ến trình chạy chiếm giữ) cấp phát cho tiến trình Khi tiến trình chấm dứt HĐH thu lại số PID để cấp phát cho tiến trì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ến trình chạy -Theo quy ước,mỗi tiến trì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ến trình int fork() tạo tiến trình Giá trị trả lại cho tiến trình dấu hiệu pid cho tiến trình cha Giá trị -1 không tạo tiến trình mới Theo nguyên tắc hệ thống, tiến trình cha có đoạn mã Đoạn liệu tiến trình mới chép xác đoạn liệu tiến trình cha Tuy nhiên tiến trình vẫn khác tiến trình cha pid, thời gian xử lý, Giám sát điều khiển tiến trì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ến trình - l: hiển thị thông tin đầy đủ tiến trình - f: hiển thị thông tin tiến trình cha - a: hiển thị tất các tiến trình - aux: liệt kê danh sách các tiến trình chạy các thông tin Hình 5.2 Mỗi tiến trình Linux mang số ID các thao tác liên quan đến tiến trì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ến trình tạo Chỉ có superuser mới có quyền điều khiển tất các tiến trì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ến trình không gắn liền đến có bàn điều khiển (tty) Chúng ta coi các tiến trình chạy với dòng lệnh đầy đủ để khởi động tiến trình ps –aux 14 Chủ nhân tiến trình (owner) Mã số nhận diện tiến trình (PID) Mức sử dụng CPU (%CPU) Mức chiếm dụng nhớ tiến trình (%MEM) VSZ - lượng nhớ ảo (phần đĩa cứng giả làm RAM) mà tiến trình sử dụng, tính theo byte RSS - lượng nhớ RAM mà tiến trình sử dụng, tính theo byte TTY - terminal mà tiến trình khởi tạo Dấu hỏi ? thể tiến trình daemon không liên kết với terminal nào? trạng thái tiến trì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ến trình Lệnh kill Shell dùng để chấm dứt hoạt động tiến trình + Lệnh kill: # kill Gởi tín hiệu cho tiến trì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ến trình mà không bị các tiến trì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ến trì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ến trình - SIGTERM 15 - Kết thúc tiến trình - SIGSTOP 17,19,23: - Dừng tiến trình Khi kết thúc tiến trì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ến trì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ến trình int sig; tín hiệu giao tiếp tiến trình 17 5.6 Chạy tiến trì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ến trình cha (trong trường hợp thực thi các lệnh,đó tiến trình shell) Thực quá trình , đưa tiến trình cha vào trạng thái ngủ (sleep) Thực quá trình , thực thi tiến trình Sau tiến trình thực thi xong, tín hiệu gửi tới tiến trình cha Do quá trình chạy =>trong quá trình thực tiến trình con, người sử dụng tương tác với tiến trình cha Quá trình chạy chế độ ngầm cho phép thực thi tiến trình cha tiến trì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ên tiến trình (Priority) Sử dụng lệnh nice, renice + Tất các tiến trình có độ ưu tiên ban đầu ngầm định + Mức độ ưu tiên tiến trì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ên tiến trình Một người sử dụng thông thường làm giảm độ ưu tiên tiến trì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ên tiến trình bắt đầu thực tương ứng với tiến trình # nice [–n number] [command] 18 Ví dụ: # nice –n -10 vi /root/data.txt + Renice: cho phép thay đổi độ ưu tiên tiến trì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ến trình Việc giao tiếp các tiến trì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ến trì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ến trì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ến trì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ến trình sử dụng phần Tiến trình thực hiện: Trong trường hợp này, nhận tín hiệu, việc thực tiến trì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ến trì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ến trình vào lúc cuối mà tự ngắt.Nó phát đến tiến trìnhtiến trình tự ngắt SIGINT Tín hiệu phát đến các tiến trì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ến trì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ến trì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ến trì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ến trì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ến trình ngừng lại Đồng hồ hoạt động lệnh alrm() SIGTERM Được phát tiến trì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ến trình hoạt động Liên lạc hai tiến trì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ến trình Nội dung ví dụ sự liên lạc tiến trình cha tiến trì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(" Tien trinh bi loai bo !!!\n"); kill(getpid(), SIGINT); } /***********************************/ void fils() { signal(SIGUSR1, fils_atc); printf(" Hinh tien trinh moi Nhung chuan bi loai bo tien trinh !!\n"); while(1); } /******************************/ main() { int ppid, pid; if ((pid = fork())==0) fils(); else { sleep(3); printf(" Chap nhan !! Tien trinh se bi loai bo.\n"); kill(pid, SIGUSR1); } } 21 Trong ví dụ trên, tiến trình có sử dụng hàm signal(SIGUSR1, fils_atc) Hàm có tác dụng tiến trình nhận tín hiệu SIGUSR1 hàm fils_atc() thực thi Như ví dụ tiến trì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ến trình cha gởi đến cho tiến trình tín hiệu SIGUSR1 lệnh: kill(pid, SIGUSR1); Ở tiến trì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ến trình chết tự gởi đến (tiến trình con) tín hiệu SIGINT, tín hiệu ngắt tiến trìnhtiến trì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ến trì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ến trì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ến trì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ến trình khác, liên lạc qua "đường ống" Lập lịch đa tiến trình 8.1 Ống dẫn liên lạc Ống dẫn 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 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ến trình tạo - Muốn tạo ống dẫn phải bắt đầu lệnh đặc biệt: pipe() - Nhiều tiến trình viết đọc ống dẫn Tuy nhiên, 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 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

Ngày đăng: 16/04/2017, 12:19

TỪ KHÓA LIÊN QUAN

w