1. Trang chủ
  2. » Giáo Dục - Đào Tạo

BÁO cáo bài tập lớn môn hệ ĐIỀUHÀNH đề tài TRIỂN KHAI SYSTEM CALL TRONG USER PROGRAM PINTOS

18 68 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 18
Dung lượng 371,85 KB

Nội dung

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN ĐIỆN TỬ - VIỄN THÔNG BÁO CÁO BÀI TẬP LỚN MÔN HỆ ĐIỀUHÀNH Đề tài: TRIỂN KHAI SYSTEM CALL TRONG USER PROGRAM PINTOS Sinh viên thực hiện: Nguyễn Duy Tú download by : skknchat@gmail.com Giảng viên hướng dẫn: TS Phạm Văn Tiến Hà Nội, 12-2021 download by : skknchat@gmail.com LỜI NÓI ĐẦU Bài báo cáo thực trình tìm hiểu, học tập triển khai tập lớn Pintos môn Hệ điều hành Cảm ơn thầy Phạm Văn Tiến giúp đỡ, hướng dẫn chúng em để hồn thành tập lớn lần download by : skknchat@gmail.com download by : skknchat@gmail.com MỤC LỤC DANH MỤC HÌNH VẼ i CHƯƠNG SYSTEM CALL 1.1 Argument Passing 1.2 Syscall liên quan đến quản lý tiến trình 1.3 Syscall liên quan đến tập tin CHƯƠNG KẾT QUẢ KẾT LUẬN TÀI LIỆU THAM KHẢO 10 download by : skknchat@gmail.com DANH MỤC HÌNH VẼ Hình Chương trình echo.c Hình Kết trả syscall number Hình Gỡ lỗi sử dụng hàm printf() Hình Hiển thị chuỗi “system call!” Hình Syscall number Hình Hiển thị syscall number SYSWRITE SYSEXIT Hình Gỡ lỗi với printf syscall_hander Hình Kết so sánh với mã nguồn ban đầu Hình Kết “make check” i download by : skknchat@gmail.com CHƯƠNG SYSTEM CALL Tổng quan Pintos, cách triển khai System call em đề cập báo cáo chung Ở chương này, em tập chung triển khai chi tiết vào mã nguồn 1.1 Argument Passing Hiện tại, mã nguồn Pintos, hàm process_execute() không hỗ trợ truyền tham số vào tiến trình Vì em thực thêm phân tích cú pháp tên file truyền vào cấu trúc lại Stack Sau gọi hàm process_execute() chạy lệnh pintos -q run ‘echo x’ với echo chương trình để in tham số hình Hình Chương trình echo.c Như vậy, sau chạy hệ điều hành thực đến hàm syscall_hander() nằm src/userprog/syscall.c in hình chuỗi “system call!” download by : skknchat@gmail.com Hình Hiển thị chuỗi “system call!” 1.2 Syscall liên quan đến quản lý tiến trình Tại hàm syscall_hander(), tham số struc intr_frame *f truyền vào Ta tìm hiểu gì, tìm tới src/threads/interrupt.h Nhận thấy intr_frame trỏ đến esp, Hình Gỡ lỗi sử dụng hàm printf() Hình Kết trả syscall number download by : skknchat@gmail.com ta nhận system call number Ta gỡ lỗi printf() để xem system call number mà hệ thống gọi tới Vậy số gì, ta quan sát src/lib/syscall-nr.h Số SYS_WRITE echo.c chương trình sử dụng để in hệ thống gọi SYS_WRITE Ta sử dụng số lại để tương ứng với syscall Hình Syscall number Tiếp theo, ta triển khai trường hợp mà hệ thống gọi tới syscall Thực thay đổi src/userprog/syscall.c Ta cần cộng thêm số hợp lý cho tham số để trỏ tới syscall number Stack Trước tiên thực với SYS_EXIT SYS_WRITE: download by : skknchat@gmail.com hàm exit() viết là: Với SYS_WRITE Trong hàm write() viết là: Thêm dùng printf() hàm syscall_hander() để quan sát bên ta vừa thay đổi: download by : skknchat@gmail.com Hình Gỡ lỗi với printf syscall_hander Chạy thử lại, em nhận kết quả: Hình Hiển thị syscall number SYSWRITE SYSEXIT Còn SYS_HALT, đơn giản ta cần gọi hàm shut_power_off() Như ta sửa đổi triển khai syscall liên quan đến quản lý tiến trình 1.3 Syscall liên quan đến tập tin Để thực lệnh syscall liên quan đến tệp, cấu trúc liệu cho phép quản lý tệp khai báo src/threads/thread.h - open(const char *file) Một đối tượng file_desc tạo Tại thời điểm này, vùng nhớ phân bổ cho page user program Return its fd Mở tệp thông qua filesys_open(), trường hợp mở không thành cơng, tài ngun giải phóng -1 trả - close(int fd) download by : skknchat@gmail.com Thông qua fd đưa đối số, entry file desc tìm thấy file desc table Đóng tệp mở file_close(), xóa tệp khỏi danh sách giải phóng nhớ - create(), remove() Straightforward: filesys_create() filesys_remove() ủy quyền thực thi - filesize(), tell(), seek() Vì fd nhận đối số, entry file desc tìm danh sách object file truy xuất Nó xử lý cách sử dụng API file system Nếu fd khơng xác cung cấp, lỗi tạo chương trình kết thúc Nó xử lý để trả -1 thay cho kết mà kết thúc - read(fd, buffer, size) Đầu tiên, kiểm tra xem buffer user memory có hay không Khi fd = 0, đệm lấp đầy size byte thông qua input_getc() Tại thời điểm này, sử dụng put_user() để kích hoạt kết thúc với lỗi segfault - write(fd, buffer, size) Tương tự, kiểm tra xem buffer có xác hay khơng Nếu fd = 1, hàm putbuf() sử dụng để xuất nội dung buffer bàn điều khiển Nếu khơng, tìm table file desc object file fd, ghi nội dung buffer vào file thông qua hàm file_write() download by : skknchat@gmail.com download by : skknchat@gmail.com CHƯƠNG KẾT QUẢ Sau triển khai syscall bên trên, em thực kiểm tra thay đổi so với mã nguồn ban đầu mà Pintos cung cấp Hình Kết so sánh với mã nguồn ban đầu Thực “make check” src/userprogram sau thay đổi, kết thu sau: Hình Kết “make check” download by : skknchat@gmail.com Kết thu được, test case cho halt, exec, wait syscall quản lý tiến trình create, remove, open, filesize, read, write, seek, tell, close syscall quản lý tập tin PASS Những trường hợp FAIL lại, em tiếp tục khắc phục download by : skknchat@gmail.com KẾT LUẬN Qua tập lớn Hệ điều hành Pintos, em tìm hiểu học hỏi nhiều kiến thức, kỹ liên quan đến hệ điều hành Từ đó, thân em cảm thấy trau dồi thêm nhiều kiến thức bổ ích rèn luyện kĩ cần thiết khác học tập làm việc nhóm Em xin chân thành cảm ơn thầy Phạm Văn Tiến hướng dẫn em hồn thành đè tài 10 download by : skknchat@gmail.com TÀI LIỆU THAM KHẢO [1] Pintos Projects: Project User Programs (stanford.edu) [2] Guide to x86 Assembly (virginia.edu) [3] Executable and Linkable Format - Wikipedia Hyperlink: juytu/NguyenDuyTu_2848_DoXuanVu_2892 (github.com) 11 download by : skknchat@gmail.com download by : skknchat@gmail.com ... CHƯƠNG SYSTEM CALL Tổng quan Pintos, cách triển khai System call em đề cập báo cáo chung Ở chương này, em tập chung triển khai chi tiết vào mã nguồn 1.1 Argument Passing Hiện tại, mã nguồn Pintos, ... skknchat@gmail.com LỜI NÓI ĐẦU Bài báo cáo thực trình tìm hiểu, học tập triển khai tập lớn Pintos môn Hệ điều hành Cảm ơn thầy Phạm Văn Tiến giúp đỡ, hướng dẫn chúng em để hoàn thành tập lớn lần download by... để in hệ thống gọi SYS_WRITE Ta sử dụng số lại để tương ứng với syscall Hình Syscall number Tiếp theo, ta triển khai trường hợp mà hệ thống gọi tới syscall Thực thay đổi src/userprog/syscall.c

Ngày đăng: 25/04/2022, 08:51

HÌNH ẢNH LIÊN QUAN

Hình 1. Chương trình echo.c - BÁO cáo bài tập lớn môn hệ ĐIỀUHÀNH đề tài TRIỂN KHAI SYSTEM CALL TRONG USER PROGRAM PINTOS
Hình 1. Chương trình echo.c (Trang 7)
Hình 2. Hiển thị chuỗi “system call!”. - BÁO cáo bài tập lớn môn hệ ĐIỀUHÀNH đề tài TRIỂN KHAI SYSTEM CALL TRONG USER PROGRAM PINTOS
Hình 2. Hiển thị chuỗi “system call!” (Trang 8)
Hình 5. Syscall number. - BÁO cáo bài tập lớn môn hệ ĐIỀUHÀNH đề tài TRIỂN KHAI SYSTEM CALL TRONG USER PROGRAM PINTOS
Hình 5. Syscall number (Trang 9)
Hình 6. Gỡ lỗi với printf trong syscall_hander. - BÁO cáo bài tập lớn môn hệ ĐIỀUHÀNH đề tài TRIỂN KHAI SYSTEM CALL TRONG USER PROGRAM PINTOS
Hình 6. Gỡ lỗi với printf trong syscall_hander (Trang 11)
Hình 9. Kết quả “make check”. - BÁO cáo bài tập lớn môn hệ ĐIỀUHÀNH đề tài TRIỂN KHAI SYSTEM CALL TRONG USER PROGRAM PINTOS
Hình 9. Kết quả “make check” (Trang 14)
Hình 8. Kết quả so sánh với mã nguồn ban đầu. - BÁO cáo bài tập lớn môn hệ ĐIỀUHÀNH đề tài TRIỂN KHAI SYSTEM CALL TRONG USER PROGRAM PINTOS
Hình 8. Kết quả so sánh với mã nguồn ban đầu (Trang 14)

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w