Phần 2: Nêu và trình bày về các trạng thái của một tiến trình trong hệ điều hành Linux.. Phần 3: Trình bày về các mối quan hệ cuả các tiến trình hoạt động trong hệ thống.. Phần 4: Trình
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
ﻣKHOA CÔNG NGHỆ THÔNG TIN ﻣ
BÀI TIỂU LUẬN MÔN: NGUYÊN LÝ HỆ ĐIỀU HÀNH
ĐỀ TÀI: NGUYÊN CỨU, TÌM HIỂU VỀ QUẢN LÝ TIẾN TRÌNH TRONG
HỆ ĐIỀU HÀNH LINUX
Giáo viên hướng dẫn: Ths.Nguyễn Thanh Hải
Lớp: Hệ thống thông tin 1 – K8
Nhóm số: 2
Trang 2Hà Nội - 2015 TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI ﻣKHOA CÔNG NGHỆ THÔNG TIN ﻣ
BÀI TIỂU LUẬN MÔN: NGUYÊN LÝ HỆ ĐIỀU HÀNH
Trang 3ĐỀ TÀI: NGUYÊN CỨU, TÌM HIỂU VỀ QUẢN LÝ TIẾN TRÌNH TRONG
Trang 4MỤC LỤC
LỜI NÓI ĐẦU 1
1 KHÁI NIỆM VỀ TIẾN TRÌNH 2
2 CÁC TRẠNG THÁI CỦA MỘT TIẾN TRÌNH 2
3 QUAN HỆ GIỮA CÁC TIẾN TRÌNH 3
4 QUẢN LÝ TIẾN TRÌNH TRÊN LINUX 4
4.1 Lệnh PS 4
4.2 Tạo một tiến trình – lệnh fork 5
4.3 Dừng một tiến trình 5
4.3.1 Lệnh kill 6
4.3.2 Lệnh Top 6
4.4 Giám sát và điều khiển các tiến trình ( cây hiển thị) 7
4.4.1 Lệnh PS 7
4.4.2 Lệnh Pstree 9
4.4.3 Lệnh Top 10
4.5 Gửi tín hiệu cho một tiến trình đang chạy 10
4.6 Độ ưu tiên của các tiến trình (Priority) 11
4.7 Chạy tiến trình ở trạng thái foreground và trạng thái background 12
4.8 Ngưng và tạm ngưng Job 12
5 GIAO TIẾP VÀ LIÊN LẠC GIỮA CÁC TIẾN TRÌNH 13
5.1 Giao tiếp giữa các tiến trình 13
5.2 Liên lạc giữa hai tiến trình 14
5.3 Liên lạc giữa tiến trình cha và tiến trình con 16
6 LẬP LỊCH ĐA TIẾN TRÌNH 17
6.1 Ống dẫn liên lạc 18
6.2 Thao tác với ống dẫn liên lạc 18
TÀI LIỆU THAM KHẢO 20
Trang 5LỜI NÓI ĐẦU
Vài năm qua, Linux đã thực sự tạo ra một cuộc cách mạng trong lĩnh vực máy tính Sự phát triển và những gì chúng mang lại cho máy tính thật đáng kinh ngạc: một hệ điều hành đa nhiệm, đa người dùng.Với mã nguồn mở, sử dụng Linux an toàn hơn các ứng dụng Windows Linux đem đến cho chúng ta lợi ích về kinh tế với rất nhiều phần mềm miễn phí Mã nguồn mở của hệ điều hành và của các chương trình trên Linux là tài liệu vô giá để chúng ta học hỏi về kỹ thuật lập trình vốn là những tài liệu không được công bố đối với các ứng dụng Windows.
Qua đề tài này, chúng tôi hi vọng mang lại cho độc giả có thể hiểu thêm kiến thức
cơ bản về quản lý tiến trình trong HDH Linux Với những đặc thù riêng của HDH Linux nhóm chúng tôi biên soạn theo các phần kèm theo đó là các hình ảnh minh họa để độc giả dễ hình dung hơn.
Bài tiểu luận gồm 6 phần:
Phần 1: Nêu khái niệm về tiến trình, giúp đọc giả hiểu được như thế nào là một tiến trình trong hệ điều hành.
Phần 2: Nêu và trình bày về các trạng thái của một tiến trình trong hệ điều hành Linux.
Phần 3: Trình bày về các mối quan hệ cuả các tiến trình hoạt động trong hệ thống.
Phần 4: Trình bày về việc quản lý tiến trình trong linux: việc quản lý các tiến trình được thực hiện thông qua các lệnh: xem các tiến trình hiện có trong hệ thống-lệnh
PS, tạo một tiến trình-lệnh fork, dừng một tiến trình-lệnh kill….
Phần 5: Trong phần này, việc giao tiếp và liên lạc giữa các tiến trình sẽ được trình bày và phân tích thông qua ví dụ cụ thể.
Phần 6: Trình bày về lập lịch đa tiến trình: ống dẫn liên lạc và thao tác với ống dẫn liên lạc.
Chúng tôi xin bày tỏ long biết ơn chân thành tới Ths.Nguyễn Thanh Hải– giảng viên Khoa Công Nghệ Thông Tin, Trường Đại học Công nghiệp Hà Nội cùng các thầy cô trong khoa đã động viên, góp ý và giúp đỡ chúng tôi để hoàn thành nội dung đề tài Mặc dù đã rất cố gắng rất nhiều, nhưng không tránh khỏi những thiếu sót, chúng tôi rất mong nhận được những ý kiến, đóng góp của bạn đọc để bài tiểu luận ngày càng tốt hơn Thư góp ý xin gửi về địa chỉ nhom2httt1k8haui@gmail.com
Nhóm 2
Trang 61 KHÁI NIỆM VỀ 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ả năng thựchiện nhiều tác vụ xử lí đồng thời những việc điều khiển hoạt động song hành ở cấp độphần cứng là rất khó khăn Vì vậy các nhà thiết kế hệ điều hành đề xuất một mô hìnhsong hành giả lập bằng cách chuyển đổi bộ xử lí qua lại giữa các chương trình để duytrì hoạt động của nhiều chương trình tại cùng một thời điểm Trong mô hình này, cácchương trình trong hệ thống được tổ chức thành các tiến trình (process)
- Tiến trình là một chương trình đang xử lí, nó sở hữu một con trỏ lệnh, tập cácthanh ghi và các biến Để hoàn thành nhiệm vụ của mình, các tiến trình có thể con yêucầu một số tài nguyên hệ thống như CPU, bộ nhớ và các thiết bị
- Tiến trình là một đơn vị công việc trong một hệ điều hành phân chia thời gian
hiện đại.
2 CÁC TRẠNG THÁI CỦA MỘT TIẾN TRÌNH
Hình 2.1: Sơ đồ trạng thái trong HDH Linux
Trong môi trường hệ điều hành Linux, một 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 cấp phát đầy
đủ các tài nguyên và chỉ đợi tới phiên được cấp CPU thì sẽ chạy
Trang 7+ Sleeping: tiến trình đang đợi một sự kiện nào đó xảy ra, khi sự kiện đó xảy ra
nó sẽ được duyệt chờ cấp phát CPU để chạy Ví dụ: một tiến trình đang đợi một thaotác đọc/ghi file nào đó hoàn tất hoặc một tiến trình dịch vụ mạng đang đợi có yêu cầu
từ phía client đều là các tiến trình sleeping Trong trường hợp đặc biệt, có một số tiếntrình rơi vào tình trạng không thể đánh thức nó bằng một sự kiện nào được Nhữngtiến trình này được kí hiệu là D (uninterruptible process)
+ Zoombie: tiến trình đã kết thúc nhưng nó không được xóa sạch sẽ khỏi RAM
và tiến trình cha của của nó không nhận được thông báo về việc nó đã kết thúc Nhìnchung các tiến trình zoombie không gây hại gì Nếu muốn dọn dẹp các tiến trình này,cách duy nhất là 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àotrạng thái này do nhận được signal STOP hoặc TSTP và chỉ có thể chạy lại khi nhậnđược signal CONT hoặc khi người dùng cho nó chạy trong chế độ background/foreground bằng lệnh bg/fg
+ Running (đang chạy): Tiến trình chiếm quyền xử lí CPU dùng tính toán haythực thi các công việc của mình
+ Waiting (chờ): Tiến trình bị HĐH tước quyền xử lí CPU và chờ đến lượt cấpphát khác
+ Suspend (tạm dừng): HĐH tạm dừng tiến trình, tiến trình được đưa vào trạngthái ngủ (sleep), khi cần thiết và có nhu cầu HĐH sẽ đánh thức (wake up) hay nạp lại
mã lệnh của tiến trình vào bộ nhớ, cấp phát tài nguyên CPU để tiến trình tiến trình cóthể hoạt động
Tại dòng lệnh có thể bấm Ctrl –Z để tạm dừng một tiến trình sau đó dùng lệnh
“pg” để đưa vào hậu trường để sau đó dùng “fg” để chuyển lên mặt trước
3 QUAN HỆ GIỮA CÁC TIẾN TRÌNH
Các tiến trình hoạt động trong hệ thống tồn tại 2 mối quan hệ: độc lập và hợptác (song hành)
- Quan hệ độc lập
Tiến trình được gọi là độc lập nếu hoạt động của nó không gây ảnh hưởng hoặc không
bị ảnh hưởng của các tiến trình khác cũng đang hoạt động của hệ thống
* Tiến trình độc lập có những đặc trưng sau:
+ Trạng thái của nó không bị chia sẻ với bất kì tiến trình nào khác
+ Việc thực hiện tiến trình là đơn định (kết quả chỉ phụ thuộc vào đầu vào)
Trang 8+ Tiến trình có thể tái hiện (lặp lại).
+ Tiến trình có thể dừng hoặc bắt đầu lại mà không gây ảnh hưởng tới các tiến trìnhkhác trong hệ thống
- Quan hệ hợp tác
Tiến trình được gọi là hợp tác (song hành) nếu hoạt động của nó gây ảnh hưởng hoặc
bị ảnh hưởng bởi các tiến trình khác cũng đang hoạt động trong hệ thống
* Tiến trình hợp tác có những đặp trưng sau:
+ Trạng thái của nó bị chia sẻ cho các tiến trình khác
+ Việc thực hiện tién trình là không đơn định (kết quả phụ thuộc dãy thực hiện tươngứng và không dự báo trước)
+ Tiến trình không thể tái hiện
4 QUẢN LÝ TIẾN TRÌNH TRÊN LINUX
4.1 Lệnh PS
+ Lệnh ps, thông số:
- e: hiển thị thông tin về mỗi tiến trình
- l: hiển thị thông tin đầy đủ tiến trình
- f: hiển thị thông tin về tiến trình cha
- a: hiển thị tất cả các tiến trình
- aux: liệt kê danh sách các tiến trình đang chạy cùng các thông tin của nó
Hình 4.1: Lệnh PS và thông số
Trang 9Mỗi tiến trình của Linux đều mang một số ID và các thao tác liên quan đến tiếntrình đều thông qua số PID này Gạch nối – trước bash để thông báo đó là shell khởiđộng khi người sử dụng login.
Để hiển thị tất cả các process, ta có thể sử dụng lệnh ps –a Một người sử dụng hệthống bình thường có thể thấy tất cả các tiến trình, nhưng chỉ có thể điều khiển đượccác tiến trình của mình tạo ra Chỉ có superuser mới có quyền điều khiển tất cả cáctiến trình của hệ thống Linux và của người khác Lệnh ps –aux cho phép hiển thị tất cảcác tiến trình, ngay cả những tiến trình không gắn liền đến có bàn điều khiển (tty).Chúng ta có thể coi các tiến trình đang chạy cùng với dòng lệnh đầy đủ để khởi động
tiến trình này bằng ps –aux
1 Chủ nhân của tiến trình (owner)
2 Mã số nhận diện tiến trình (PID)
3 Mức sử dụng CPU (%CPU)
4 Mức chiếm dụng bộ nhớ của tiến trình (%MEM)
5 VSZ - lượng bộ nhớ ảo (phần đĩa cứng giả làm RAM) mà tiến trình sử dụng, tínhtheo byte
6 RSS - lượng bộ nhớ RAM mà tiến trình sử dụng, tính theo byte
7 TTY - terminal mà tiến trình được khởi tạo trên đó Dấu hỏi “?” thể hiện tiến trìnhnày là một daemon và nó không liên kết với một terminal nào?
8 Trạng thái tiến trình (STAT)
9 Thời điểm khởi chạy (START)
10 Thời gian đã chạy (TIME) và các thông tin khác
4.2 Tạo một tiến trình – lệnh fork
Lệnh int fork() tạo ra một tiến trình con Giá trị trả lại là 0 cho tiến trình con và
dấu hiệu “pid” cho tiến trình cha Giá trị sẽ là -1 nếu không tạo được tiến trình mới.Theo nguyên tắc cơ bản của hệ thống, tiến trình con và cha sẽ có cùng đoạn mã Đoạn
dữ liệu của tiến trình mới là một bản sao chép chính xác đoạn dữ liệu của tiến trìnhcha Tuy nhiên tiến trình con vẫn khác tiến trình cha ở “pid”, thời gian xử lý…
4.3 Dừng một tiến trình
Trong nhiều trường hợp, một tiến trình có thể bị treo, một chương trình servercần nhận cấu hình mới, card mạng cần thay đổi địa chỉ IP …, khi đó chúng ta phảidừng tiến trình đang có vấn đề Linux có lệnh kill để thực hiện các công tác này
Trang 10Điều kiện dừng tiến trình:
Trước tiên bạn cần phải biết PID của tiến trình cần dừng thông qua lệnh PS.Chỉ có super-user mới có quyền dừng tất cả các tiến trình, còn người sử dụng chỉ đượcdừng các tiến trình của mình
SIGKILL - Hủy tiến trình kill -9
SIGTERM - Kết thúc tiến trình kill -15 (mặc định với lệnh kill)SIGSTOP: - Dừng tiến trình kill -17,19,23
Muốn hủy tiến trình gõ:
kill -9 <PID của tiến trình>:
Tham số –9 là gửi tín hiệu dừng không điều kiện chương trình Chú ý nếu bạnlogged vào hệ thống như root, nhập số PID chính xác nếu không bạn có thể dừng mộttiến trình khác Không nên dừng các tiến trình mà mình không biết vì có thể làm treomáy hoặc dịch vụ
Một tiến trình có thể sinh ra các tiến trình con trong quá trình hoạt động củamình Nếu bạn dừng tiến trình cha, các tiến trình con cũng sẽ dừng theo, nhưng khôngtức thì Vì vậy phải đợi một khoảng thời gian và sau đó kiểm tra lại xem tất cả các tiếntrình con có dừng đúng hay không Trong một số hãn hữu các trường hợp, tiến trình
có lỗi nặng không dừng được, phương pháp cuối cùng là khởi động lại máy
4.3.2 Lệnh Top
Hiển thị sự hoạt động của các tiến trình, đặc biệt là các thông tin về tài nguyên
hệ thống cũng như việc sử dụng tài nguyên đó của từng tiến trình Với lệnh đơn giảntop, ta sẽ có:
u11:09am up 46 days, 17:44, 2 users, load average: 0.08, 0.03, 0.01 u63 processes: 61sleeping, 2 running, 0 zombie, 0 stopped uCPU states: 0.1% user, 0.0% system, 0.0%nice, 99.8% idle uMem: 126644K av, 121568K used, 5076K free, 0K shrd, 25404Kbuff uSwap: 136544K av, 9836K used, 126708K free 36040K cached u u PID USERPRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND u27568 tuanna
Trang 1111 0 1052 1052 836 R 0.1 0.8 0:00 top u 1 root 0 0 124 72 68 S 0.0 0.0 0:25 init u 2root 8 0 0 0 0 SW 0.0 0.0 0:00 kevent
Số % máy rảnh (idle) in đậm trên là rất quan trọng Một máy rảnh dưới 50% làmột máy quá tải và cần được xem xét Lệnh top còn cho phép theo dõi xem có tiếntrình nào chiếm dụng quá nhiều thời gian CPU cũng như truy cập đĩa không Ngoài ra,một số lệnh khác như: vmstat, mpstat, sar, iostat cũng cho phép xem xét với cácmục đích khác nhau hoạt động của máy chủ
4.4 Giám sát và điều khiển các tiến trình (cây hiển thị)
Một program là một file thực thi trong hệ thống
Ví dụ: /sbin/shutdown/sbin/init
Process là một instance của một program đang thực thi (ví dụ khi ta chạy cùnglúc nhiều của sổ Word, mỗi cửa sổ là một instance của ứng dụng Word) Process đôikhi còn được gọi là task
Lấy thông tin trạng thái của các tiến trình: sử dụng câu lệnh ps, pstree, top
4.4.1 Lệnh PS
#ps <option>
Option:
f: thể hiện các process dưới dạng tree
l: thể hiện dưới dạng long list
w: thể hiện dưới dạng wide output
x: Xem cả các process không gắn với terminal (daemon)
a: process của các user khác
U: user xem process của một user cụ thể
u: thể hiện dưới dạng “user format”
Hình 4.2: Thông tin trạng thái của tiến trình khi sử dụng lệnh ps
Trang 12Hình 4.3: Ý nghĩa các trường
Trang 144.4.3 Lệnh Top
Giống lệnh ps nhưng danh sách các process được update liên tục Các thông số
về CPU, RAM cũng được thể hiện và Update Tham sô –d (delay: khoảng thời gianrefresh giữa 2 lần), -n (number: chạy n lần và ngưng)
Hình 4.5: Thông tin trạng thái của tiến trình khi sử dụng lệnh top
4.5 Gửi tín hiệu cho một tiến trình đang chạy
Trang 15Hình 4.6: Ý nghĩa các trường
4.6 Độ ưu tiên của các tiến trình (Priority)
Sử dụng lệnh nice, renice
+ Tất cả các tiến trình đều có độ ưu tiên ban đầu được ngầm định là 0
+ Mức độ ưu tiên của một tiến trình dao động trong khoảng từ -19 đến +19
- Chỉ người sử dụng có quyền rút mới có thể giảm giá trị biểu diễn độ ưu tiên củatiến trình Một người sử dụng thông thường chỉ có thể làm giảm độ ưu tiên củatiế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 của một tiến trình ngay khi bắt đầu thực hiện
tương ứng với tiến trình
# nice [–n number] [command]
Ví dụ: # nice –n -10 vi /root/data.txt
+ Renice: cho phép thay đổi độ ưu tiên của một tiến trình sau khi đã chạy.
# renice priority PID [[-g] group] [[-u] user]
Ví dụ: # renice -2 203 Set nice number is -2 to PID=203
3.3 Can thiệp vào hoạt động
&: Cho một job hoạt động ở background
Ví dụ: # ls –l –R / > /root/list.txt & Ứng dụng ls sẽ chạy nền bên dưới
Trang 164.7 Chạy tiến trình ở trạng thái foreground và trạng thái background
Quá trình chạy ở chế đọ hiện sẽ tiến hành theo các bước sau:
- Thực hiện quá trình <<fock>>, nhân bản tiến trình cha (trong trường hợp thựcthi các lệnh, đó sẽ là tiến trình shell)
- Thực hiện quá trình <<wait>>, đưa tiến trình cha vào trạng thái ngủ (sleep)
- Thực hiện quá trình <<exec>>, thực thi tiến trình con Sau khi tiến trình conthực thi xong, một tín hiệu <<đánh thức>> sẽ được gửi tới tiến trình cha
- Do quá trình chạy như trên =>trong quá trình thực hiện tiến trình con, người sửdụng không thể 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 và tiến trình conmột cách độc lập
Ví dụ: $ emacs&
Sau khi thực hiện lệnh trên, emacs sẽ chạy ở chế đọ ngầm, người sử dụng có thể tiếptục sử dụng console để thực thi các lệnh khác
4.8 Ngưng và tạm ngưng Job
+ Ctrl C: Ngưng job đang thực thi Sau khi ấn Ctrl C ta có thể dùng câu lệnh jobs đểhiển thị trạng thái của các tiến trình đang chạy
+ Ctrl Z: Tạm ngừng job đang thực thi Sau khi ấn Ctrl Z ta có thể dùng 2 câu
lệnh:
+ bg: tiếp tục job vừa ngừng ở trạng thái background
+ fg: tiếp tục job vừa ngừng ở trạng thái foreground