1. Trang chủ
  2. » Luận Văn - Báo Cáo

Đồ án mẫu NGUYÊN LÍ HỆ ĐIỀU HÀNH ( khoa CNTT)

32 298 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 32
Dung lượng 1,05 MB

Nội dung

Đồ án mẫu Nguyên Lý Hệ Điều Hành khoa Công nghệ thông tin Đại học bách khoa................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................

Trang 1

ĐẠI HỌC BÁCH KHOA KHOA CÔNG NGHỆ THÔNG TIN

NHÓM :

Trang 2

Lời cảm ơn

Lần đầu thực hiện đồ án môn học, bước đầu làm quen với việc tự tìm hiểu tự nghiên cứu những kiến thức chuyên môn, em không tránh khỏi những bỡ ngỡ sai sót bước đầu Thành công của đồ án lần này ít nhiều có sự giúp đỡ trực tiếp và gián tiếp của thầy cô, gia đình và bạn bè

Trước hết em xin được cảm ơn cô Trần Hồ Thủy Tiên, người đã giúp đỡ em rất nhiều trong quá trình thực hiện đồ án Nhờ những buổi giảng dạy bộ môn trên lớp cùng những buổi thảo luận về đề tài đã mang lại cho em kiến thức nền tảng vững chắc

để thực hiện thành công đề tài lần này Nếu không có sự giúp đỡ quí giá đó, em khó lòng hoàn thiện đồ án đúng tiến độ

Em cũng xin cảm ơn các thầy cô ở ‘Khoa Công Nghệ Thông Tin’ – Trường Đại

Học Bách Khoa – Đại Học Đà Nẵng” đã mang đến các kiến thức bổ ích cho sinh

viên chúng em, góp phần gián tiếp cho thành công của đồ án

Em xin kính chúng cô Trần Hồ Thủy Tiên cùng các thầy cô dồi dào sức khỏe, tâm huyết tràn đầy để tiếp tục dẫn dắt sinh viên đến những thành công vang dội mới

Đà Nẵng, ngày 26 tháng 12 năm 2017

Sinh viên thực hiện (ký và ghi họ tên)

Trang 3

Nhận xét của giáo viên hướng dẫn

Đà Nẵng, ngày … tháng … năm 2017

Giáo viên hướng dẫn

(ký và ghi rõ họ tên)

ThS Trần Hồ Thủy Tiên

Trang 4

Nhận xét của giáo viên phản biện

Đà Nẵng, ngày … tháng … năm 2017

Giáo viên phản biện

(ký và ghi rõ họ tên)

Trang 5

Mục lục

Mục lục 1

Danh mục các hình vẽ 3

Mở Đầu 4

1 Mục đích của đồ án Nguyên lí Hệ điều hành: 4

2 Mục tiêu của đề tài: 4

3 Nội dung báo cáo: 4

Chương I TIẾN TRÌNH VÀ CƠ CHẾ LIÊN LẠC LIÊN TIẾN TRÌNH 5

1 Giới thiệu: 5

2 Tiến trình: 5

3 Hoạt động của tiến trình 6

3.1 Khởi tạo tiến trình: 6

3.2 Kết thúc tiến trình: 7

3.3 Thực thi chương trình: 7

4 Liên lạc giữa các tiến trình: 7

4.1 Nhu cầu liên lạc giữa các tiến trình và các vấn đề nảy sinh: 7

4.2 Tín hiệu (Signals): 8

4.3 Pipes: 8

4.4 Sockets: 9

4.5 Message Queues: 9

4.6 Semaphores: 10

4.7 Shared Memory: 11

Chương II PHƯƠNG PHÁP PIPE 12

1 Đường ống một chiều(Half-duplex): 12

1.1 Khái niệm cơ bản: 12

1.2 Tạo đường ống một chiều: 13

1.3 Một vài lưu ý: 14

2 Đường ống đặt tên (Named pipes): 15

2.1 Khái niệm cơ bản: 15

2.2 Tạo một FIFO: 15

Chương III MÔ PHỎNG ĐƠN GIẢN LỆNH “BC” TRONG SHELL 15

1 Mô tả vấn đề: 15

2 Lệnh “bc”: 16

3 Thuật toán: 16

4 Chương trình: 17

Trang 6

4.1 Các hàm chính sử dụng: 17

4.2 Cơ chế hoạt động của chương trình: 18

5 Thực thi và kết quả: 20

Chương IV KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 20

1 Kết luận 20

2 Hướng phát triển: 21

Tài liệu tham khảo 22

Phụ lục 23

Trang 7

Danh mục các hình vẽ

Hình I.1: Mô hình các tiến trình 5

Hình I.2: Cây phả hệ của tiến trình 7

Hình I.3: Các loại tín hiệu trong hệ thống 8

Hình I.4: Mô tả đường ống 9

Hình I.5: Mô tả Message Queue 10

Hình I.6: Mô tả Semaphore 11

Hình I.7: Mô tả Shared Memory 12

Hình II.1: Mô tả tiến trình và nhân sau khi một đường ống khởi tạo 12

Hình II.2: Liên lạc giữa tiến trình cha và con 13

Hình II.3: Sau khi đóng các cổng thích hợp 13

Hình III.1: Giao diện của lệnh bc 16

Hình III.2: Sau khi khởi tạo tiến trình và đường ống 18

Hình III.3: Sau khi đóng các cổng không cần thiết 20

Hình III.4: Tính toán đơn giản 20

Hình III.5: Biểu thị kí tự không hợp lệ 20

Trang 8

Mở Đầu

1 Mục đích của đồ án Nguyên lí Hệ điều hành:

Nguyên lí Hệ điều hành là môn học tập trung nghiên cứu chuyên sâu về quản lí và phân phối các tài nguyên máy tính cho các chương trình của người dùng Môn học chứa đựng nhiều kiến thức bổ ích cho sinh viên về các khía cạnh nằm ở lớp nền của một hệ thống máy tính bao gồm tiến trình và giao tiếp giữa các tiến trình, cấp phát tài nguyên, lưu trữ dữ liệu, giải quyết tắc nghẽn,… Đồ án này nhằm mục đích giúp cho sinh viên tiếp cận và hiện thực hóa các kiến thức liên quan đến môn học Nguyên lý

Hệ điều hành đồng thời tạo điều kiện rèn luyện nâng cao các kĩ năng:

 Tổng hợp các kiến thức đã học trên mọi phương diện

 Tính tự chủ và tinh thần trách nhiệm trong công việc

 Khả năng thiết kế và lập trình

 Khả năng báo cáo bằng luận văn

 Khả năng thuyết trình và bảo vệ đồ án

2 Mục tiêu của đề tài:

Từ khi các hệ điều hành hiện đại cung cấp khả năng đa chương trình, các tiến trình không thể hoạt động độc lập với nhau nữa và phải có những phương thức cho chúng liên lạc với nhau để đảm bảo sự toàn vẹn của hệ thống Một đề tài tìm hiểu về vấn đề này là cần thiết

Đề tài “Tìm hiểu cơ chế liên lạc đường ống PIPE giữa các tiến trình và mô

phỏng lệnh “bc” trong Shell của Linux” lần này mục tiêu chính là tiếp cận và đào

sâu các kiến thức nền tảng về Nguyên lí Hệ điều hành nói chung và tiến trình cũng như cơ chế liên lạc đường ống PIPE giữa các tiến trình nói riêng Qua đó, một chương trình mô phỏng nhỏ được tạo nên để giúp sinh viên nắm vững các kiến thức nêu trên, rèn luyện kĩ năng vận dụng và hiện thực hóa các kiến thức mình học hỏi và nghiên cứu được

3 Nội dung báo cáo:

Báo cáo này gồm 4 chương:

Chương I: Tiến trình và cơ chế liên lạc liên tiến trình giúp ta có cái nhìn tổng quan

về tiến trình, và giao tiếp giữa chúng trong hệ điều hành Linux

Chương II: Phương pháp PIPE làm rõ và đào sâu về cơ chế liên lạc bằng đường

ống PIPE giữa các tiến trình

Chương III: Mô phỏng đơn giản lệnh “bc” trong Shell vận dụng các kiến thức tìm

hiểu được để xây dựng chương trình mô phỏng ứng dụng

Chương IV: Kết luận và hướng phát triển nêu ra các thành quả đạt được và phương

hướng sắp tới của đề tài

Trang 9

Chương I TIẾN TRÌNH VÀ CƠ CHẾ LIÊN LẠC LIÊN TIẾN TRÌNH

1 Giới thiệu:

Tiến trình là một trong những khái niệm trừu tượng lâu đời và quan trọng nhất của

hệ điều hành Chúng cung cấp khả năng thực thi (ảo) cùng một lúc nhiều thao tác dù chỉ có một CPU (central processing unit), biến CPU đó thành nhiều CPU ảo Nếu không có khái niệm này, hệ điều hành hiện đại đã không tồn tại

Khi các máy tính còn sử dụng các hệ điều hành cũ, công việc được xử lí tuần tự : Người dùng thực hiện từng câu lệnh trên màn hình cửa sổ chính, hệ điều hành liên tục thực thi các lệnh đó cho đến khi nó thực hiện xong hay buộc phải ngừng lại khi

có yêu cầu tự chương trình buộc người dùng phải nhập vào câu lệnh hoặc thông tin mới Những lúc như vậy, khi nào người dùng còn chưa nhập vào, thì CPU vẫn dừng hoạt động theo đúng nghĩa đen của nó Không một chương trình nào khác có thể thực thi, mọi yêu cầu khác từ hệ điều hành hoặc máy chủ đều phải đợi chừng nào con trỏ lệnh vẫn còn nhấp nháy Điều này tạo ra một sự phí phạm lớn khi tốc độ xử lí của CPU ngày càng nhanh khiến thời gian đợi người người dùng nhập vào như hàng thiên niên kỉ so với thời gian CPU xử lí các công việc

Trong các hệ thống đa chương trình (multiprogramming) một CPU, CPU chuyển đổi việc thực thi giữa các tiến trình rất nhanh, dành khoảng vài chục đến vài trăm mili-giây cho mỗi tiến trình Vì khoảng thời gian thực thi này rất ngắn, nên trong một giây, nhiều công việc có thể được xử lí, tạo ra một ảo giác về thực thi song song Trái ngược với ảo giác này là các hệ thống với nhiều CPU chia sẻ chung một bộ nhớ vật

lí để tạo ra một sự song song thật sự Việc nắm bắt nhiều hoạt động, chương trình cùng diễn ra một lúc rất khó khăn nên qua nhiều năm, một mô hình khái niện(tiến trình tuần tự) đã hình thành và phát triển để giúp thực thi song song dễ hiểu hơn

2 Tiến trình:

Trong các hệ điều hành hiện đại như Linux, mọi chương trình có thể thực thi trên máy tính và thỉnh thoảng bao gồm cả hệ điều hành được chia thành các tiến trình tuần

tự hay nói ngắn gọn là tiến trình

Tiến trình là thực thể (instance) của các chương trình đang thực thi, chứa đựng

trong đó là các giá trị của bộ đếm chương trình (program counter), của thanh ghi (registers) và biến Nếu như các chương trình chỉ là những dòng lệnh và dữ liệu được lưu trữ trên máy tính, thì tiến trình có thể được xem như là chính chương trình ấy đang xử lí

Hình I.1: Mô hình các tiến trình

Trang 10

Hình (a) là một chương trình đa chương trình gồm 4 chương trình trong bộ nhớ Hình (b) là 4 tiến trình với mỗi tiến trình có một bộ đếm chương trình logic riêng của

nó Do vậy chúng thực thi hoàn toàn độc lập so với nhau Tuy nhiên chỉ có môt bộ đếm chương trình vật lí, nên khi thực thi bộ đếm chương trình logic sẽ được nạp bộ đếm vật lí Khi tiến trình thực thi xong (tạm thời), thì bộ đếm vật lí được lưu trữ vào

bộ đếm logic của tiến trình tương ứng trong bộ nhớ Còn trong hình (c), nếu xét trong một khoảng thời gian dài thì mọi tiến trình đều thực hiện công việc, nhưng trong chỉ

có một chương trình được thực thi tại một thời điểm bất kì Dù sử dụng mô hình nào, trong một thời điểm bất kì chỉ có một tiến trình thực thi

Luồng(Thread) là một bộ phận của tiến trình Nó là các tiểu trình (microprocess)

nằm bên trong các tiến trình để đảm nhiệm các nhiệm vụ khác nhau của tiến trình Các luồng tuy có vùng nhớ riêng nhưng những luồng trong cùng một tiến trình thì sử dụng chung vùng nhớ Điều này cho phép các luồng sử dụng bất cứ tài nguyên nào nằm trong vùng nhớ đó

Các lợi ích của luồng:

 Một số tiến trình phải xử lí nhiều công việc cùng một lúc Các công việc này thường chặn lẫn nhau Chia nhỏ tiến trình thành các tiểu trình đảm nhiệm các công việc riêng biệt khiến việc lập trình trở nên đơn giản hơn

 Cơ chế liên lạc đơn giản hơn tiến trình khiến việc chuyển đổi ngữ cảnh giữa các luồng tốn ít chi phí hơn

 Khi các hệ thống trở nên nhanh và mạnh hơn, luồng khiến các công việc có thể chạy chồng lên nhau Điều này tăng cao hiệu năng của toàn bộ hệ thống

 Đồng thời luồng cũng dễ dàng khỏi tạo và phá hủy hơn tiến trình Khi công việc không còn cần nữa, việc phá hủy luồng đơn giản và ít ảnh hưởng hơn tiến trình

3 Hoạt động của tiến trình

3.1 Khởi tạo tiến trình:

Tiến trình chỉ có thể khởi tạo bằng một tiến trình khác Ta gọi tiến trình khởi tạo

là tiến trình cha và tiến trình được khởi tạo là tiến trình con Khi hệ thống (Linux) khởi động, chỉ có một tiến trình được tạo ra Tiến này liên tục tạo ra các tiến trình khác bằng các lời gọi hệ thống như fork(), vfork(), clone(), wait() và exec() để thực thi các công việc rồi sau đó quay trở về trạng thái nghỉ(idle) Tùy thuộc vào lời gọi hàm, các tiến trình con nhận các nội dung giống với các tiến trình cha và chia sẻ một

số tài nguyên, điểm khác duy nhất là PID của chúng và vị trí chúng được lưu trong

bộ nhớ, riêng đối với exec() thì tiến trình con nhận luôn PID của cha

Trang 11

Hình I.2: Cây phả hệ của tiến trình

Có bốn thời điểm chính khi tiến trình được khởi tạo:

 Khởi động hệ thống

 Thực thi các lời gọi hệ thống để tạo tiến trình thông qua một tiến trình khác đang

chạy

 Yêu cầu của người dùng

 Khởi động của khối công việc (batch job)

3.2 Kết thúc tiến trình:

Sau khi được khởi tạo, tiến trình bắt đầu vận hành và làm các nhiệm vụ của nó

Tuy nhiên sớm hay muộn tiến trình sẽ phải kết thúc, thường là do các điều kiện sau:

 Thoát bình thường (tự nguyện)

 Thoát lỗi (tự nguyện)

 Lỗi định mệnh (không tự nguyện)

 Bị tắt bởi tiến trình khác (không tự nguyện)

Hầu hết tiến trình kết thúc bởi nó đã thực hiện xong công việc của mình Lúc này

tiến trình báo cho hệ điều hành biết nó đã làm xong việc thông qua một lời gọi hàm

Lí do thứ hai là khi tiến trình phát hiện ra một lỗi định mệnh, ví dụ như tìm không

thấy file hay cúp điện

Lí do thứ ba là lỗi gây nên bởi tiến trình thường do bởi lênh lỗi của chương trình

như tham chiếu tới vùng nhớ không tồn tại hay chia cho không

Lí do thứ tư khiến chương trình kết thúc là khi một chương trình thực hiện các lời

gọi hàm như kill() để chấm dứt các tiến trình khác Khi một tiến trình bị chấm dứt,

các tiến trình con của nó nhận một tiến trình cha mới hoặc nhận nuôi bởi tiến trình

init

3.3 Thực thi chương trình:

Trong Linux, cũng giống UNIX, chương trình và lệnh được thực thi bởi một trình

thông dịch lệnh Trình thông dịch đó cũng là một tiến trình, gọi là shell Shell thực

thi các chương trình bằng cách tạo ra các chương trình con nhận nó làm cha qua lời

gọi fork(), các chương trình con sau đó thay thế nội dung của mình bằng nội dung

của chương trình cần thực thi

4 Liên lạc giữa các tiến trình:

4.1 Nhu cầu liên lạc giữa các tiến trình và các vấn đề nảy sinh:

Trong hệ điều hành hiện đại đa chương trình như Linux, không một tiến trình nào

hoạt động hoàn toàn độc lập Chúng vẫn có nhu cầu liên lạc với nhau:

Trang 12

 Chia sẻ thông tin: nhiều tiến trình có thể cùng quan tâm đến những dữ liệu nào

đó, do vậy hệ điều hành cần cung cấp một môi trường cho phép sự truy cập đồng thời đến các dữ liệu chung

 Hợp tác hoàn thành tác vụ: đôi khi để đạt được một sự xử lý nhanh chóng, người

ta phân chia một tác vụ thành các công việc nhỏ có thể tiến hành song song Như vậy, trong một hệ thống mà các tiến trình tác động lẫn nhau, đầu vào của tiến trình này có thể là đầu ra của tiến trình khác, thì cần có những cơ chế liên lạc hiệu quả và cấu trúc tốt hơn việc sử dụng các ngắt (interupts) đẻ giao tiếp giữa các tiến trình với nhau Tuy nhiên, khi các tiến trình có những cơ chế liên lạc, ảnh hưởng tới tiến trình khác thì xung đột là không thể tránh khỏi

Một số vấn đề nảy sinh khi liên lạc giữa các tiến trình:

 Cách các tiến trình liên lạc với nhau

 Tránh xung đột giữa các tiến trình

 Sắp xếp tuần tự thực thi của các tiến trình khi chúng có những phụ thuộc vào nhau

Linux cung cấp một số các cơ chế để các tiến trình liên lạc lẫn nhau và liên lạc với nhân(kernel)

4.2 Tín hiệu (Signals):

Tín hiệu là một trong những phương thức liên lạc liên tiến trình lâu đời nhất được

sử dụng bởi Unix Chúng được sử dụng để phát tín hiệu về các sự kiện không đồng

bộ, sự kiện mà tiến trình nhận không biết trước thời điểm nhận, đến một hoặc nhiều các tiến trình Một tín hiệu có thể được tạo ra bởi một ngắt bàn phím hoặc một điều kiện lỗi như một tiến trình cố gắng truy nhập một vị trí không tồn tại trong bộ nhớ ảo của nó Một nhược điểm của tín hiệu là chúng hoàn toàn không có ưu tiên thừa kế tương đối(inherent relative priority).Nếu hai tín hiệu được tạo ra cùng lúc thì chúng

có thể được đưa đến hoặc xử lí bởi tiến trình theo thứ tự bất kì Cơ chế để xử lí nhiều tín hiệu cùng một kiểu cũng không hề tồn tại, một tiến trình không thể biết số lượng tín hiệu giống nhau mình nhận Cuối cùng, các tiến trình chỉ có thể thông báo cho nhau về một biến cố nào đó, mà không trao đổi dữ liệu theo cơ chế này được

Hình I.3: Các loại tín hiệu trong hệ thống

4.3 Pipes:

Cũng là một trong những cơ chế cũ và đơn giản nhất trong liên lạc giữa các tiến trình Liên lạc bằng pipe là một cơ chế liên lạc một chiều (unidirectional), nghĩa là

Trang 13

Hình I.4: Mô tả đường ống

4.4 Sockets:

Là một thiết bị truyền thông hai chiều tương tự như tập tin, chúng ta có thể đọc hay ghi lên nó, tuy nhiên mỗi socket là một thành phần trong một mối nối nào đó giữa các máy trên mạng máy tính và các thao tác đọc/ghi chính là sự trao đổi dữ liệu giữa các ứng dụng trên nhiều máy khác nhau Sử dụng socket có thể mô phỏng hai phương thức liên lạc trong thực tế: liên lạc thư tín (socket đóng vai trò bưu cục) và liên lạc điện thoại (socket đóng vai trò tổng đài)

4.5 Message Queues:

Hệ điều hành còn cung cấp một cơ chế liên lạc giữa các tiến trình không thông qua việc chia sẻ một tài nguyên chung, mà thông qua việc gửi thông điệp Để hỗ trợ cơ chế liên lạc bằng thông điệp, hệ điều hành cung cấp các hàm IPC (Inter Process Communication) chuẩn, cơ bản là hai hàm:

Send(message): gửi một thông điệp

Receive(message): nhận một thông điệp

Trang 14

Hình I.5: Mô tả Message Queue

4.6 Semaphores:

Ở dạng đơn giản nhất semaphores là một vị trí trong bộ nhớ mà giá trị của nó có thể được kiểm tra và thiết lập (test and set) bởi một hoặc nhiều tiến trình Quá trình kiểm tra và thiết lập là không thể dừng lại được Kết quả của quá trình này là tổng giá trị hiện tại của semaphore và giá trị thiết lập, có thể âm hoặc dương Phụ thuộc vào giá trị này, một tiến trình có thể phải đợi cho đến khi giá trị semaphore bị thay đổi bởi tiến trình khác Semephore có thể được sử dụng để cài đặt đoạn găng (critical regions), vùng chứa những đoạn code quan trọng mà chỉ một tiến trình tại một thời điểm thực thi nó

Trang 15

Hình I.6: Mô tả Semaphore

4.7 Shared Memory:

Đây là phương pháp nhanh nhất để trao đổi dữ liệu giữa các tiến trình Nhưng phương thức này cũng làm phát sinh các khó khăn trong việc bảo đảm sự toàn vẹn dữ liệu (coherence)

Ví dụ: làm sao biết được dữ liệu mà một tiến trình truy xuất là dữ liệu mới nhất mà tiến trình khác đã ghi? Làm thế nào ngăn cản hai tiến trình cùng đồng thời ghi dữ liệu vào vùng nhớ chung? … Rõ ràng vùng nhớ chia sẻ cần được bảo vệ bằng những cơ chế đồng bộ hóa thích hợp Một khuyết điểm của phương pháp liên lạc này là không thể áp dụng hiệu quả trong các hệ phân tán, để trao đổi thông tin giữa các máy tính khác nhau

Trang 16

Hình I.7: Mô tả Shared Memory

Chương II PHƯƠNG PHÁP PIPE

1 Đường ống một chiều(Half-duplex):

1.1 Khái niệm cơ bản:

Một cách đơn giản, đường ống là một phương thức để nối đầu vào của một tiến

trình này đến đầu ra của một tiến trình khác Đường ống là công cụ liên lạc lâu đời giữa các tiến trình, xuất hiện từ các phiên bản đầu tiên của UNIX, cha đẻ của Linux Chúng cung cấp phương thức liên lạc một chiều( nên mới có tên ống một chiều) giữa các tiến trình

Khi tiến trình tạo một đường ống, nhân (kernel) dựng lên hai bộ mô tả file (file descriptors) để đường ống sử dụng Một bộ dùng để cho phép một luồng các đầu vào vào trong đường ống (ghi), trong khi bộ kia dành cho việc lấy dữ liệu từ đường ống (đọc)

Hình II.1: Mô tả tiến trình và nhân sau khi một đường ống khởi tạo

Ta có thể dễ dàng thấy hai bộ mô tả được kết nối với nhau Nếu tiến trình gửi dữ

Ngày đăng: 24/06/2018, 20:02

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w