1. Trang chủ
  2. » Công Nghệ Thông Tin

Đồ án hệ điều hành GIAO TIẾP GIỮA CÁC TIẾN TRÌNH BẰNG SHARED MEMORY

17 2K 15

Đ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 17
Dung lượng 785,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Tạo phân đoạn nhớ chung Một tiến trình cấp phát vùng nhớ chung bằng cách sử dụng hàm shmget.. Nếu các tiến trình khác nhau gọi hàm shmget tạo phân đoạn nhớ chung với cùng khóa , chúng

Trang 1

Đồ Án Hệ Điều Hành

Đề Tài: GIAO TIẾP GIỮA CÁC TIẾN TRÌNH

BẰNG SHARED MEMORY

Trường Đại Học Bách Khoa

Đà Nẵng-Khoa CNTT

Giáo viên Hướng Dẫn: Mai Văn Hà

SV thực hiện : Sầm Văn Tài

Lớp :07T1

Trang 2

Nội Dung Chính

Phần 1 :Tổng Quan Đề Tài

1

Phần 2:Cơ Sở lý Thuyết

2

Phần 3 :Cài Đặt Chương Trình

3

Phần 4: Kết Quả Và Đánh Giá

4

Trang 3

Phần I:Tổng Quan Đề Tài

Bối Cảnh

Vấn đề đặt ra :

 Tìm hiểu về tiến trình throng Linux.

 Cơ chế giao tiếp giữa các tiến trình bằng

vùng nhớ chung.

 Viết chương trình minh họa.

Mục đích đề tài :

 Nghiên cứu lý thuyết

Kết quả mong muốn

Trang 4

Phần II:Cơ Sở Lý Thuyết

• Tổng quan về hệ điều hành Linux

Lịch sử ra đời

Các chức năng của Linux

• Tiến trình

Khái niệm tiến trình

Các trạng thái của tiến trình

Cấu trúc của tiến trình

Các kiểu giao tiếp giữa các tiến trình

trong giao tiếp giữa các tiến trình

Trang 5

Tạo phân đoạn nhớ chung

Một tiến trình cấp phát vùng nhớ chung bằng cách sử dụng hàm

shmget().

Cú pháp:

#include<sys/ipc.h>

#include<sys/shm.h>

int shmget(key_t key, size_t size, int shmflg);

Hàm shmget() sẽ tạo ra một vùng nhớ chia sẻ mới hoặc truy cập

đến một vùng nhớ chia sẻ nếu nó đã tồn tại

Trang 6

Giá trị trả về của hàm

Nếu thành công hàm shmget() trả về định danh ID của phân

đoạn để truy xuất đến vùng nhớ chung bởi các hàm tiếp theo

như shmat(), shmctl(),… Nếu các tiến trình khác nhau gọi

hàm shmget() tạo phân đoạn nhớ chung với cùng khóa ,

chúng sẽ tham chiếu đến cùng một trang nhớ chung với cùng

một định danh id do shmget() trả về.

Nếu không thành công hàm sẽ trả về giá trị -1

Trang 7

Kết gán và tháo rời

Kết gán

Sau khi đã tạo và phân bổ trang nhớ chung của hệ thống,

cần phải gọi hàm shmat() để kết gán vùng nhớ chung này vào

không gian địa chỉ của tiến trình hay hàm shmat() sẽ đưa trang

nhớ của hệ thống vào bảng quản lí trang nhớ của tiến trình Các

tiến trình con được tạo bằng hàm fork() kế thừa các phân đoạn

nhớ chung đã được kết gán với tiến trình cha Các tiến trình con

này có thể tháo bỏ phân đoạn nhớ chung này nếu chúng có nhu

cầu

a Cú pháp

#include<sys/shm.h>

#include<sys/types.h>

void *shmat(int shmid, const void *shmaddr, int shmflg);

Trang 8

Kết gán và tháo rời

Các tham số

- shmid là định danh id của vùng nhớ chung do shmget() trả về.

- shmaddr là con trỏ đến địa chỉ nơi bắt đầu kết gán Nếu bạn

đặt giá trị NULL hàm sẽ thực hiện kết gán vùng nhớ tại nơi bắt

đầu.Thường bạn rất khó tùy biến vùng địa chỉ kết gán khác cho nên

cách tốt nhất là hãy để hệ thống kết gán từ nơi bắt đầu của vùng

nhớ chỉ định do shmget() thiết lập trước đó.

Ngược lại nếu shmaddr không phải là con trỏ NULL , địa

chỉ trả về phụ thuộc vào giá trị SHM_RND được người gọi chỉ định

cho đối số shmflag.

- shmflg : đối số này do người lập trình chỉ định, là cờ cho phép

cấp quyền truy cập ,quyền đọc/ghi trên vùng nhớ chia sẻ đã được

kết gán Nó bao gồm các giá trị sau:

+ 0: không có bit cờ nào được chỉ định

+ SHM_RND: chỉ định rằng địa chỉ được xác định cho tham

số thứ hai nên được làm tròn xuống thành bội số của kích thước

trang Nếu bạn không xác định cờ này thì bạn phải thực hiện canh

trang đối số thứ hai cho hàm shmat().

Trang 9

Kết gán và tháo rời

Add Your Title

+ SHM_RDONLY: Theo mặc định thì vùng nhớ chia sẻ được kết gán

cho cả đọc và ghi bởi tiến trình đang gọi nếu tiến trình cho phép đọc và

ghi vào vùng nhớ Khi giá trị SHM_RDONLY được chỉ định thì phân

đoạn nhớ chung này chỉ được đọc chứ không được ghi và tiến trình

phải cho phép đọc vào đoạn nhớ.Như vậy ,cờ truy cập SHM_RDONLY

được dùng khi một chương trình cần truy cập đến vùng nhớ chia sẻ với

mục đích dò tìm chứ không thay đổi nó Khi cờ SHM_RDONLY cung

cấp , nếu chương trình ghi đè lên vùng nhớ chia sẻ thì trình bẫy lỗi sẽ

làm cho chương trình đó bị bãi bỏ, do đó duy trì tính toàn vẹn của vùng

nhớ chia sẻ Nếu không có tùy chọn này thì phân đoạn vùng nhớ dùng

chung sẽ được kết gán trong chế độ đọc và ghi

Trong trường hợp hàm shmat() gọi thành công, hệ thống cập nhật những thành phần của cấu trúc shmid_ds kết nối vùng nhớ chia

sẻ như sau:

- shm_attime : nhận ngày hiện hành.

- shm_lpid : nhận pid của tiến trình hiện thời

- shm_nattach: được tăng lên một giá trị

Trang 10

Tháo rời

Để tiến hành tháo bỏ vùng nhớ dùng chung ra khỏi tiến trình ta sử dụng

hàm shmdt() Hàm này sẽ giải phóng phân đoạn nhớ chung trong bảng

quản lý trang nhớ của tiến trình Sau khi tháo bỏ kết gán, tiến trình của bạn

không thể truy xuất đến vùng nhớ chung nữa Bởi vì vùng nhớ này không

còn gắn với không gian địa chỉ của tiến trình Tuy nhiên, vùng nhớ vật lý

thực sự do hệ thống nắm giữ vẫn tồn tại và bạn có thể gọi hàm shmat() để

kết gán lại

Hàm này được sử dụng khi một tiến trình không còn truy cập đến vùng nhớ dùng chung nữa

Cú pháp

#include<sys/types.h>

#include<sys/shm.h>

Int shmdt(const void*shm_addr)

Trang 11

chung

Sau khi nhớ chung của hệ thống vào vùng

nhớ của tiến trình Bạn đọc ghi trên vùng

nhớ này bằng cách chuyển con trỏ dữ liệu

đến địa chỉ vùng nhớ do shmat() trả về

Giả sử ta ghi một mảng cấu trúc vào vùng nhớ chung này thì mô

hình sau sẽ mô tả được cách bố trí dữ liệu:

*dem shm_add r

sv[0]

Trang 12

Hủy vùng nhớ dùng chung

Khi tiến trình không cần sử dụng vùng nhớ chung nữa bạn nên giải phóng

nó Nhằm tránh sự xâm phạm đến giới hạn hệ thống trên tổng số các phân

đoạn nhớ chung Công việc này được thực hiện bởi hàm shmctl() Khác với

hàm tháo kết gán shmdt() chỉ bỏ ánh xạ logic giữa vùng nhớ vật lý và

không gian nhớ của tiến trình.Hàm shmctl() với đối số IPC_RMID sẽ thật

sự giải phóng vùng nhớ vật lý toàn cục trả lại tài nguyên cho hệ thống Mỗi

khi vùng nhớ được giải phóng thì không còn tiến trình nào có thể đọc ghi

trên vùng nhớ này được nữa

Vùng nhớ chung chỉ được giải phóng khi tiến trình sau cùng có kết gán với nó tháo bỏ kết gán

Không riêng gì tiến trình đã tạo ra vùng nhớ chung, bất kì tiến trình nào có quyền ghi trên vùng nhớ chung đều có khả năng xóa nó

Cú pháp

#include<sys/ipc.h>

#include<sys/shm.h>

int shmctl(int shmid,int cmd,struct shmid ds*buf);

Trang 13

Vấn Đề Đồng Bộ Tiến Trình

Y ou

r T

ex t

Y ou

r T

ex t

Y ou

r T

ex t

Là phương pháp nhanh nhất trao đổi giữa các tiến trình nhưng

vấn đề đặt ra là đồng bộ giữa 2 hay nhiều tiến trình trong việc

đọc ghi dữ liệu chung tại vùng nhớ chung chia sẻ khi có 2 hay

nhiều tiến trình cùng truy xuất dễ xảy ra tranh chấp và không

thể giao tiếp giữa 2 tiến trình cùng cấp

Trang 14

Đối tượng semaphore khởi đầu mang giá trị

dương, khi một tiến trình yêu cầu sử dụng tài

nguyên thì nó sẽ thông báo với semaphore

Semaphore sẽ kiểm tra giá trị của mình, nếu còn >

0 sẽ tự động giảm giá trị đi 1 và cho phép tiến trình

sử dụng tài nguyên Nếu giá trị semaphore <= 0 hệ

thống sẽ tạm dừng tiến trình (đặt tiến trình vào

trạng thái chờ) Khi tiến trình đã sử dụng xong tài

nguyên nó sẽ trả lại quyền sử dụng tài nguyên cho

tiến trình khác.

Trang 15

Kết Quả Chạy Chương Trình

Trang 16

Nhận xét

1.Những kết quả đạt được:

•Nắm được các kiến thức cơ bản về cơ chế giao tiếp giữa

các tiến trình bằng Share memory.

•Viết và chạy được chương trình với bài toán đơn giản +, -, (, )

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

Đồ án chỉ dừng lại trong phạm vi tìm hiểu sự giao tiếp giữa các tiến trình bằng cơ chế Share memory và viết chương trình

mô phỏng đơn giản.

Share memory là chỉ một trong rất nhiều cơ chế giao tiếp giữa các tiến trình của Linux Ta có thể phát triển từ Share memory để có thể giải quyết bài toán này trên các kiểu giao tiếp khác như : Tín hiệu (Signal), Pipe, trao đổi thông điệp (Message), Sockets.

Ngày đăng: 30/01/2016, 14:43

HÌNH ẢNH LIÊN QUAN

Hình sau sẽ mô tả được cách bố trí dữ liệu: - Đồ án hệ điều hành GIAO TIẾP GIỮA CÁC TIẾN TRÌNH BẰNG SHARED MEMORY
Hình sau sẽ mô tả được cách bố trí dữ liệu: (Trang 11)

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w