Hệ thống máy tính là một hệ thống kết hợp cả thiết bị phần cứng và vấn đề điều khiển, phân phối công việc trong toàn hệ thống. Để giải quyết bài toán này, không thể sử dụng một phương pháp thủ công mà cần có một cơ chế tự động hóa, tức là cần có một chương trình điều khiển hoạt động của hệ thống máy tính. Chương trình đó được gọi là hệ điều hành một thành phần quan trọng của hệ thống máy tính. Các thành phần của hệ điều hành bao gồm: + Hệ thống quản lí tiến trình. + Hệ thống quản lí bộ nhớ. + Hệ thống quản lí nhập xuất. + Hệ thống quản lí tập tin. + Hệ thống bảo vệ. + Hệ thống dịch lệnh. + Quản lí mạng. Các chức năng cơ bản của hệ điều hành. Chức năng chủ yếu của hệ điều hành đó là: Quản lí chia sẻ tài nguyên (CPU, bộ nhớ trong, bộ nhớ ngoài…) và Giả lập một máy tính mở rộng. Ngoài ra còn có thể chia chức năng của hệ điều hành theo bốn chức năng là: + Quản lí quá trình (Proccess manament) + Quản lí bộ nhớ (Memory manament) + Quản lí hệ thống lưu trữ + Giao tiếp với người dùng (User interaction). Nhiệm vụ của hệ điều hành: + Điều khiển quản lí trực tiếp các phần cứng như bo mạch chủ, bo mạch đồ họa và bo mạch âm thanh…. + Thực hiện một số thao tác cơ bản trong máy tính như các thao tác đọc , viết tập tin, quản lí hệ thống tập tin (file system) và các kho dữ liệu. + Cung ứng một hệ thống giao diện sơ khai cho các ứng dụng thường là thông qua một 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 có thể gọi tới. + Cung ứng một hệ thống lệnh cơ bản để điều hành máy. Các lệnh này gọi là lệnh hệ thống ( system command). + Ngoài ra hệ điều hành, trong vài trường hợp, cũng cung cấp các dịch vụ cơ bản cho các phần mềm ứng dụng thông thường như chương trình duyệt web hay soạn thảo văn bản….
BÀI TẬP LỚN MÔN 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 trọng HĐH Linux Giảng viên hướng dẫn: Ths Nguyễn Tuấn Tú Nhóm sinh viên thực nhóm 2- CNTT2- K10 Bùi Quang Đông Nguyễn Quốc Cường Lại Lâm Phi Lê Văn Dũng Đỗ Trọng Thế MỤC LỤC Trang Chương 1: GIỚI THIỆU VỀ HỆ ĐIỀU HÀNH LINUX 1.1 Tổng quan hệ điều hành .2 1.2 Hệ điều hành linux Chương: KHÁI NIỆM VỀ TIẾN TRÌNH 2.1 Khái niệm tiến trình Chương 3: CÁC TRẠNG THÁI CỦA MỘT TIẾN TRÌNH .6 3.1 Các trạng thái tiến trình .6 Chương 4: QUAN HỆ GIỮA CÁC TIẾN TRÌNH .6 4.1 Quan hệ tiến trình .6 Chương 5: QUẢN LÝ TIẾN TRÌNH LINUX .7 5.1 Các loại tiến trình Linux .7 5.2 Tại phải quản lý tiến trình 5.3 Tạo tiến trình 5.4 Dừng tiến trình 5.5 Giao tiếp tiến trình 10 5.6 Liên lạc hai tiến trình 12 5.7 Lập lịch đa tiến trình 14 5.8 Liên lạc tiến trình cha tiến trình 17 5.9 Giám sát điều khiển tiến trình 19 Chương GIỚI THIỆU VỀ HỆ ĐIỀU HÀNH LINUX 1.1 Tổng quan hệ điều hành Hệ thống máy tính hệ thống kết hợp thiết bị phần cứng vấn đề điều khiển, phân phối cơng việc tồn hệ thống Để giải tốn này, khơng thể sử dụng phương pháp thủ cơng mà cần có chế tự động hóa, tức cần có chương trình điều khiển hoạt động hệ thống máy tính Chương trình gọi hệ điều hành - thành phần quan trọng hệ thống máy tính Các thành phần hệ điều hành bao gồm: + Hệ thống quản lí tiến trình + Hệ thống quản lí nhớ + Hệ thống quản lí nhập xuất + Hệ thống quản lí tập tin + Hệ thống bảo vệ + Hệ thống dịch lệnh + Quản lí mạng Các chức hệ điều hành Chức chủ yếu hệ điều hành là: Quản lí chia sẻ tài nguyên (CPU, nhớ trong, nhớ ngồi…) Giả lập máy tính mở rộng Ngồi cịn chia chức hệ điều hành theo bốn chức là: + Quản lí q trình (Proccess manament) + Quản lí nhớ (Memory manament) + Quản lí 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 lí trực tiếp 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 thao tác đọc , viết tập tin, quản lí hệ thống tập tin (file system) kho liệu + Cung ứng 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 để hệ diều hành phần cứng mà từ ứ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 dịch vụ cho 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… 1.2 Hệ điều hành Linux Linux hệ điều hành máy tính dựa Unix phát triển phân phối qua mơ hình phần mềm tự mã Linux nguồn mở Thành phần tạo nên Linux nhân linux, nhân hệ điều hành đời vào tháng năm 1991 Linus Torvalds Nhiều người gọi Linux GNU/Linux, lý thân linux phần nhân hệ điều hành Rất nhiều phần mềm, ứng dụng khác hệ thống đồ họa, trình biên dịch, soạn thảo, công cụ phát triển cần gắn vào nhân để tạo nên HĐH hoàn chỉnh Hầu hết phần mềm phát triển cộng đồng GNU Phiên Linux Linus Torvalds viết vào năm 1991, lúc ơng cịn sinh viên Đại học Helsinki Phần Lan Ông làm việc cách hăng say vòng năm liên tục cho đời phiên Linux 1.0 vào năm 1994 Bộ phận chủ yếu phát triển tung thị trường quyền GNU General Public License Khởi đầu Linux phát triển cho dòng vi xử lý 386 Hiện hệ điều hành hỗ trợ số lượng lớn siêu thị máy tính thiết bị nhúng máy điện thoại di động Ban đầu, Linux phát triển sử dụng người say mê Tuy nhiên, Linux có hỗ trợ công ty lớn IBM Hewlett-Packard, đồng thời bắt kịp phiên phiên Unix độc quyền chí thách thức thống trị Microsoft Windows số lĩnh vực Sở dĩ Linux đạt thành cơng cách nhanh chóng nhờ vào đặc tính bật so với hệ thống khác: chi phí phần cứng thấp, tốc độ cao (khi so sánh với phiên Unix độc quyền) khả bảo mật tốt, độ tin cậy cao (khi so sánh với Windown) đặc điểm giá thành rẻ, không bị phụ thuộc vào nhà cung cấp Một đặc tính trội phát triển mơ hình phát triển phần mềm nguồn mở hiệu Tuy nhiên, số lượng phần cứng hỗ trợ Linux khiêm tốn so với Windown trình điều khiển thiết bị tương thích với Window nhiều Linux Nhưng tương lai số lượng phần cứng hỗ trợ cho Linux tăng lên Hiện nay, Linux có nhiều bảnphân phối khác nhau, phần bời mã nguồn mở Chương KHÁI NIỆM VỀ TIẾN TRÌNH 2.1 Khái niệm tiến trình Để 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ì 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 chương trình để trì hoạt động nhiều chương trình thời điểm mơ hình này, chương trình hệ thống tổ chức thành tiến trình (process) - Vậy tiến trình (TT) thời gian thực (instance of execution) chương trình việc thực hiện xảy khoản thời gian định (gọi slice time) - Tiến trình biến đổi từ trạng thái sang trạng thái khác tác động chương trình - Tiến trình chương trình có khả thi hành thi hành máy tính Chương CÁC TRẠNG THÁI CỦA MỘT TIẾN TRÌNH 3.1 Các trạng thái tiến trình Tại thời điểm, tiến trình nhận trạng thái sau: - Khởi tạo (New): Tiến trình tạo lập - Sẵn sang (Ready): Tiến trình chờ cấp phát CPU để xử lý - Thực (Running): Tiến trình xử lí - Đợi (Waiting): Tiến trình phải dừng thiếu tài nguyên chờ kiện - Kết thúc (Halt): Tiến trình hồn tất cơng việc xử lí Chương QUAN HỆ GIỮA CÁC TIẾN TRÌNH 4.1 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 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 (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 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 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 tiến trình khác - Việc thực tién trình khơng đơn điệu (kết tuến trình phụ thuộc vào dãy thực tương ứng không dự báo trước) - Việc thực tiến trình khơng đơn định (kết tiến trình không giống với giá trị đầu vào) Chương QUÁN LÝ TIẾN TRÌNH LINUX 5.1 Các loại tiến trình Linux - Tiến trình với đối thoại (Interactive processes): tiến trình khởi động quản lý shell, kể tiến trình foreground background - Tiến trình batch (Batch processes): Tiến trình khơng gắn liền đến bàn điều khiển (terminal) nằm hàng đợi để thực - Tiến trình ẩn nhớ Daemon processes Daemon processes Là tiến trình chạy background Đa số server cho dịch vụ chạy theo phương thức Đây chương trình sau gọi lên nhớ, đợi thụ động yêu cầu từ client để trả lời sau port xác định Hầu hết dịch vụ Internet email, Web, DNS chạy theo nguyên tắc Các chương trình gọi chương trình daemon tên thường kết thúc ký tự “d” named, inetd Ký tự “d” cuối phát âm rời “đê “ Tiếng Việt 5.2 Tại phải quản lý tiến trình - Trong hệ thống ln tồn nhiều luồng tiến trình - Mặt khác hệ thống có tài nguyên hữu hạn khả phục vụ khoảng thời gian có nhiều tiến trình muốn sử dụng tài ngun => Dẫn đến xung đột, bế tắc xảy ra, giao thông máy bị đình trệ -> treo máy Vì cần quản lý tiến trình Nhiệm vụ quản lý tiến trình: - Tạo lập, hủy bỏ tiến trình - Tạm dừng, tái kích hoạt tiến trình - Tạo chế thơng tin liên lạc tiến trình - Tạo chế đồng hóa tiến trình Mục tiêu: - Hạn chế tối đa xung đột bế tắc xảy ra, đưa giải pháp xảy tình - Tận dụng tối đa khả CPU (bài tốn lập lịch) Tiến trình môi trường thực hiện, bao gồm phân đoạn lệnh phân đoạn liệu Cần phân biệt với khái niệm chương trình gồm tập hợp lệnh Trên hệ điều hành Linux, tiến trình nhận biết thơng qua số hiệu tiến trình, gọi pid Cũng user, nằm nhóm Vì để phân biệt ta nhận biết qua số hiệu nhóm gọi PRGP Một số hàm C cho phép lấy thông số này: int getpid() : trả giá trị int pid tiến trình int getppid() : trả giá trị int pid tiến trình cha tiến trình int getpgrp() : trả giá trị int số hiệu nhóm tiến trình int setpgrp() : trả giá trị int số hiệu nhóm tiến trình tạo 5.3 Tạo tiến trình int fork() tạo tiến trình Fork() cho phép tiến trình lập nó, trừ định dạng tiến trình Tiến trình gốc tự nhân gọi tiến trình cha tạo gọi 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 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 chép xác đoạn liệu tiến trình cha Tuy nhiên tiến trình khác tiến trình cha pid, thời gian xử lý, 5.4 Dừng tiến trình Lệnh kill thường sử dụng để ngừng thi hành tiến trình kill [signal] - Signal: số hay tên tín hiệu gởi tới tiến trình PID: mã số nhận diện tiến trình muốn dừng 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ị tiến trình khác can thiệp (tín hiệu 9, KILL) 10 Super-user có quyền dừng tất tiến trình, cịn người sử dụng dừng 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 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 sử dụng tín hiệu INT hay KILL 5.5 Giao tiếp tiến trình Việc giao tiếp tiến trình thực thơng qua tín hiệu chuẩn hệ thống Tín hiệu ngắt quãng logic gửi đến tiến trình hệ thống để thơng báo cho chúng 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 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 ngắt quãng người sử dụng hệ thống (đó 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 11 - 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 tiến trình vào lúc cuối mà tự ngắt Nó phát đến tiến trình có tiến trình tự ngắt SIGINT: Tín hiệu phát đến 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 cấp độ vật lý (ví dụ tiến trình thực lệnh mà máy tính khơ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ó 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 tốn số có dấu phẩy nối có định dạng khơng hợp lý Gần ln 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 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 12 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 tiến trình hoạt động 5.6 Liên lạc hai tiến trình - Từ chương trình đơn giản sử dụng 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ụ liên lạc tiến trình cha tiến trình thơng qua tín hiệu trình bày phần trước #include #include 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 13 { sleep(3); printf("Chap nhan !! Tien trinh se bi loai bo.\n"); kill(pid, SIGUSR1); } } 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ình Và tiế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 tín hiệu khơng thích ứng để tiến hành liên lạc tiến trình Một thơng điệp điệp 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 tín hiệu có quyền lớn, đến chúng làm ngắt qng cơng việc Ví dụ việc nhận tín hiệu tiến trình đợi kiện (mà đến sử dụng lệnh open(), 14 read(), ) làm cho việc thực thi hàm bị chệchhướng Khi trở lại, lệnh bị ngắt gởi lại thơng điệp báo lỗi mà hồn tồn khơng xử lý Ngoài việc liên lạc trực tiếp ví dụ trên, cịn cho phép phương pháp liên lạc tiến trình khác, liên lạc qua "đường ống" 5.7 Lập lịch đa tiến trình Ố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 đầu khác Một số đặc điểm "ống dẫn": - 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 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 15 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], A " B", 2); for (i=1; i