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

Nội dung

LOGO Trường Đại Học Bách Khoa Đà Nẵng-Khoa CNTT Đồ Án Hệ Điều Hành Đề Tài: GIAO TIẾP GIỮA CÁC TIẾN TRÌNH BẰNG SHARED MEMORY Giáo viên Hướng Dẫn: Mai Văn Hà SV thực : Sầm Văn Tài Lớp :07T1 Company Logo Nội Dung Chính Phần :Tổng Quan Đề Tài Phần 2:Cơ Sở lý Thuyết Phần :Cài Đặt Chương Trình Phần 4: Kết Quả Và Đánh Giá Company Logo Phần I:Tổng Quan Đề Tài  Bối Cảnh  Vấn đề đặt :  Tìm hiểu tiến trình throng Linux  Cơ chế giao tiếp tiến trình 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 mong muốn Company Logo Phần II:Cơ Sở Lý Thuyết • • • Tổng quan hệ điều hành Linux Lịch sử đời Các chức Linux Tiến trình Khái niệm tiến trình Các trạng thái tiến trình Cấu trúc tiến trình Các kiểu giao tiếp tiến trình Shared memory cần thiết shared memory giao tiếp tiến trình Company Logo Tạo phân đoạn nhớ chung Một tiến trình cấp phát vùng nhớ chung cách sử dụng hàm shmget() Cú pháp: #include #include int shmget(key_t key, size_t size, int shmflg); Hàm shmget() tạo vùng nhớ chia sẻ truy cập đến vùng nhớ chia sẻ tồn Company Logo Giá trị trả hàm Nếu thành công hàm shmget() trả định danh ID phân đoạn để truy xuất đến vùng nhớ chung hàm shmat(), shmctl(),… Nếu tiến trình khác gọi hàm shmget() tạo phân đoạn nhớ chung với khóa , chúng tham chiếu đến trang nhớ chung với định danh id shmget() trả Nếu không thành công hàm trả giá trị -1 Company Logo Kết gán tháo rời Kết gán Sau tạo phân bổ trang nhớ chung hệ thống, cần phải gọi hàm shmat() để kết gán vùng nhớ chung vào không gian địa tiến trình hay hàm shmat() đưa trang nhớ hệ thống vào bảng quản lí trang nhớ tiến trình Các tiến trình tạo hàm fork() kế thừa phân đoạn nhớ chung kết gán với tiến trình cha Các tiến trình tháo bỏ phân đoạn nhớ chung chúng có nhu cầu a Cú pháp #include #include void *shmat(int shmid, const void *shmaddr, int shmflg); Company Logo Kết gán tháo rời Các tham số - shmid định danh id vùng nhớ chung shmget() trả - shmaddr trỏ đến địa nơi bắt đầu kết gán Nếu bạn đặt giá trị NULL hàm thực kết gán vùng nhớ nơi bắt đầu.Thường bạn khó tùy biến vùng địa kết gán khác cách tốt để hệ thống kết gán từ nơi bắt đầu vùng nhớ định shmget() thiết lập trước Ngược lại shmaddr trỏ NULL , địa trả phụ thuộc vào giá trị SHM_RND người gọi định cho đối số shmflag - shmflg : đối số người lập trình định, cờ cho phép cấp quyền truy cập ,quyền đọc/ghi vùng nhớ chia sẻ kết gán Nó bao gồm giá trị sau: + 0: bit cờ định + SHM_RND: định địa xác định cho tham số thứ hai nên làm tròn xuống thành bội số kích thước trang Nếu bạn không xác định cờ bạn phải thực canh trang đối số thứ hai cho hàm shmat() Company Logo Kết gán tháo rời + SHM_RDONLY: Theo mặc định vùng nhớ chia sẻ kết gán cho đọc ghi tiến trình gọi tiến trình cho phép đọc ghi vào vùng nhớ Khi giá trị SHM_RDONLY định phân đoạn nhớ chung đọc không ghi tiến trình Add Yourvậy Title,cờ truy cập SHM_RDONLY phải cho phép đọc vào đoạn nhớ.Như dùng chương trình cần truy cập đến vùng nhớ chia sẻ với mục đích dò tìm không thay đổi Khi cờ SHM_RDONLY cung cấp , chương trình ghi đè lên vùng nhớ chia sẻ trình bẫy lỗi làm cho chương trình bị bãi bỏ, trì tính toàn vẹn vùng nhớ chia sẻ Nếu tùy chọn phân đoạn vùng nhớ dùng chung kết gán chế độ đọc ghi Trong trường hợp hàm shmat() gọi thành công, hệ thống cập nhật thành phần cấu trúc shmid_ds kết nối vùng nhớ chia sẻ sau: - shm_attime : nhận ngày hành - shm_lpid : nhận pid tiến trình thời - shm_nattach: tăng lên giá trị Company Logo Tháo rời Để tiến hành tháo bỏ vùng nhớ dùng chung khỏi tiến trình ta sử dụng hàm shmdt() Hàm giải phóng phân đoạn nhớ chung bảng quản lý trang nhớ tiến trình Sau tháo bỏ kết gán, tiến trình bạn truy xuất đến vùng nhớ chung Bởi vùng nhớ không gắn với không gian địa tiến trình Tuy nhiên, vùng nhớ vật lý thực hệ thống nắm giữ tồn bạn gọi hàm shmat() để kết gán lại Hàm sử dụng tiến trình không truy cập đến vùng nhớ dùng chung Cú pháp #include #include Int shmdt(const void*shm_addr) Company Logo Chép liệu vào vùng nhớ dùng chung  Sau nhớ chung hệ thống vào vùng nhớ tiến trình Bạn đọc ghi vùng nhớ cách chuyển trỏ liệu đến địa vùng nhớ shmat() trả Giả sử ta ghi mảng cấu trúc vào vùng nhớ chung mô hình sau mô tả cách bố trí liệu: shm_addr *dem sv[0] Company Logo Hủy vùng nhớ dùng chung Khi tiến trình không cần sử dụng vùng nhớ chung bạn nên giải phóng Nhằm tránh xâm phạm đến giới hạn hệ thống tổng số phân đoạn nhớ chung Công việc thực hàm shmctl() Khác với hàm tháo kết gán shmdt() bỏ ánh xạ logic vùng nhớ vật lý không gian nhớ tiến trình.Hàm shmctl() với đối số IPC_RMID thật 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 vùng nhớ giải phóng không tiến trình đọc ghi vùng nhớ Vùng nhớ chung giải phóng tiến trình sau có kết gán với tháo bỏ kết gán Không riêng tiến trình tạo vùng nhớ chung, tiến trình có quyền ghi vùng nhớ chung có khả xóa Cú pháp #include #include int shmctl(int shmid,int cmd,struct shmid ds*buf); Company Logo Vấn Đề Đồng Bộ Tiến Trình Là phương pháp nhanh trao đổi tiến trình vấn đề đặt đồng hay nhiều tiến trình việc đọc ghi liệu chung vùng nhớ chung chia sẻ có hay nhiều tiến trình truy xuất dễ xảy tranh chấp giao tiếp tiến trình cấp ur Yo ur Yo t Tex t Tex t Tex ur Yo Company Logo Giải tranh chấp sử dụng chế Semaphone Đối tượng semaphore khởi đầu mang giá trị dương, tiến trình yêu cầu sử dụng tài nguyên thông báo với semaphore Semaphore kiểm tra giá trị mình, > tự động giảm giá trị cho phép tiến trình sử dụng tài nguyên Nếu giá trị semaphore [...]... 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ư... phép tiến trình sử dụng tài nguyên Nếu giá trị semaphore ... shmget() trả Nếu không thành công hàm trả giá trị -1 Company Logo Kết gán tháo rời Kết gán Sau tạo phân bổ trang nhớ chung hệ thống, cần phải gọi hàm shmat() để kết gán vùng nhớ chung vào không... dùng chung kết gán chế độ đọc ghi Trong trường hợp hàm shmat() gọi thành công, hệ thống cập nhật thành phần cấu trúc shmid_ds kết nối vùng nhớ chia sẻ sau: - shm_attime : nhận ngày hành - shm_lpid... chung bạn nên giải phóng Nhằm tránh xâm phạm đến giới hạn hệ thống tổng số phân đoạn nhớ chung Công việc thực hàm shmctl() Khác với hàm tháo kết gán shmdt() bỏ ánh xạ logic vùng nhớ vật lý không

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

TỪ KHÓA LIÊN QUAN