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

16 28 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

lOMoARcPSD|11346942 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ú lOMoARcPSD|11346942 Giảng viên hướng dẫn: TS Phạm Văn Tiến Hà Nội, 12-2021 lOMoARcPSD|11346942 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 lOMoARcPSD|11346942 MỤC LỤC DANH MỤC HÌNH VẼ i CHƯƠNG SYSTEM CALL .1 1.1 Argument Passing 1.2 Syscall liên quan đến quản lý tiến trình .2 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 lOMoARcPSD|11346942 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 .5 Hình Kết so sánh với mã nguồn ban đầu Hình Kết “make check” i lOMoARcPSD|11346942 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!” lOMoARcPSD|11346942 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 lOMoARcPSD|11346942 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: lOMoARcPSD|11346942 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: lOMoARcPSD|11346942 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 nguyên giải phóng -1 trả - close(int fd) lOMoARcPSD|11346942  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() lOMoARcPSD|11346942 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” lOMoARcPSD|11346942 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 Downloaded by Quang Tr?n (tranquang141994@gmail.com) lOMoARcPSD|11346942 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 Downloaded by Quang Tr?n (tranquang141994@gmail.com) lOMoARcPSD|11346942 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 Downloaded by Quang Tr?n (tranquang141994@gmail.com) lOMoARcPSD|11346942 Downloaded by Quang Tr?n (tranquang141994@gmail.com) ... printf syscall_hander .5 Hình Kết so sánh với mã nguồn ban đầu Hình Kết “make check” i lOMoARcPSD|11346942 CHƯƠNG SYSTEM CALL Tổng quan Pintos, cách triển khai System call. .. 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... Hình Kết trả syscall number lOMoARcPSD|11346942 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

Ngày đăng: 10/02/2022, 06:02

Xem thêm:

TỪ KHÓA LIÊN QUAN

Mục lục

    DANH MỤC HÌNH VẼ

    1.2 Syscall liên quan đến quản lý tiến trình

    1.3 Syscall liên quan đến tập tin

    TÀI LIỆU THAM KHẢO

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

TÀI LIỆU LIÊN QUAN