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 72 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

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

Nội dung

LỜI NÓI ĐẦUBài báo cáo được thực hiện trong quá trình tìm hiểu, học tập và triển khai bài tập lớn về Pintos của môn Hệ điều hành.. Hiển thị chuỗi “system call!”.1.2 Syscall liên quan đến

Trang 1

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

Trang 2

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

Trang 3

LỜI NÓI ĐẦU

Bài báo cáo được thực hiện trong quá trình tìm hiểu, học tập và triển khai bài tập lớn

về Pintos của 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 để có thể hoàn thành bài tập lớn lần này

Trang 5

MỤC LỤC

DANH MỤC HÌNH VẼ i

CHƯƠNG 1 SYSTEM CALL 1

1.1 Argument Passing 1

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 5

CHƯƠNG 2 KẾT QUẢ 7

KẾT LUẬN 9

TÀI LIỆU THAM KHẢO 10

Trang 6

DANH MỤC HÌNH VẼ

Hình 1 Chương trình echo.c 1

Hình 2 Kết quả trả về syscall number 2

Hình 3 Gỡ lỗi sử dụng hàm printf() 2

Hình 4 Hiển thị chuỗi “system call!” 2

Hình 5 Syscall number 3

Hình 6 Hiển thị syscall number của SYSWRITE và SYSEXIT 5

Hình 7 Gỡ lỗi với printf trong syscall_hander 5

Hình 8 Kết quả so sánh với mã nguồn ban đầu 7

Hình 9 Kết quả “make check” 7

i

download by : skknchat@gmail.com

Trang 7

CHƯƠNG 1 SYSTEM CALL

Tổng quan về Pintos, cách triển khai về System call em đã đề cập trong báo cáo chung Ở chương này, em tập chung triển khai chi tiết vào trong 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 mới Vì vậy em thực hiện thêm phân tích cú pháp của tên file truyền vào và cấu trúc lại Stack

Sau đó gọi nó trong hàm process_execute() và chạy lệnh pintos -q run ‘echo x’ với echo là 1 chương trình để in tham số ra màn hình

Hình 1 Chương trình echo.c

Như vậy, sau khi chạy thì hệ điều hành đã thực hiện đến hàm syscall_hander() nằm trong src/userprog/syscall.c và in ra màn hình chuỗi “system call!”

Trang 8

Hình 2 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(), một tham số struc intr_frame *f được truyền vào Ta đi

tìm hiểu đó là gì, tìm tới src/threads/interrupt.h Nhận thấy nếu intr_frame trỏ đến esp,

Hình 3 Gỡ lỗi sử dụng hàm printf().

Hình 4 Kết quả trả về syscall number.

2

download by : skknchat@gmail.com

Trang 9

ta sẽ nhận được một system call number Ta gỡ lỗi bằng printf() để xem system call number mà hệ thống đang gọi tới là bao nhiêu

Vậy số 9 là gì, ta quan sát trong src/lib/syscall-nr.h Số 9 là SYS_WRITE và echo.c

là một chương trình sử dụng để in ra và do đó hệ thống đã gọi SYS_WRITE Ta sẽ sử dụng các số còn lại để tương ứng với syscall tiếp theo

Hình 5 Syscall number.

Tiếp theo, ta triển khai các trường hợp mà hệ thống có thể gọi tới syscall Thực hiện thay đổi trong src/userprog/syscall.c Ta cần cộng thêm một số hợp lý cho tham số để

có thể trỏ tới đúng syscall number trong Stack

Trước tiên thực hiện với SYS_EXIT và SYS_WRITE:

Trang 10

trong đó hàm exit() được viết là:

Với SYS_WRITE

Trong đó hàm write() được viết là:

Thêm một dùng printf() trong hàm syscall_hander() để quan sát được những gì bên

trên ta vừa thay đổi:

4

download by : skknchat@gmail.com

Trang 11

Hình 6 Gỡ lỗi với printf trong syscall_hander.

Chạy thử lại, em nhận được kết quả:

Hình 7 Hiển thị syscall number của SYSWRITE và SYSEXIT.

Còn đối với SYS_HALT, đơn giản ta chỉ cần gọi hàm shut_power_off() Như vậy ta

đã sửa đổi và triển khai các syscall liên quan đến quản lý tiến trình

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

Để thực hiện các lệnh syscall liên quan đến tệp, cấu trúc dữ liệu cho phép quản lý các tệp được khai báo trong src/threads/thread.h

- open(const char *file)

Một đối tượng file_desc mới được tạo ra Tại thời điểm này, vùng bộ nhớ được phân bổ cho page của user program

Return its fd

Mở tệp thông qua filesys_open(), trong trường hợp mở không thành công, tài nguyên được giải phóng và -1 được trả về

Trang 12

Thông qua fd được đưa ra như một đối số, entry file desc được tìm thấy trong file desc table

Đóng tệp đã mở file_close(), xóa tệp khỏi danh sách và giải phóng bộ nhớ

Straightforward: filesys_create() và filesys_remove() được ủy quyền

thực thi

Vì fd được nhận như một đối số, entry file desc cũng được tìm trong danh sách và object file được truy xuất Nó được xử lý bằng cách sử dụng API file system

Nếu một fd không chính xác được cung cấp, một lỗi có thể được tạo ra

và chương trình kết thúc Nó được xử lý để trả về -1 thay cho kết quả

mà không có kết thúc

Đầu tiên, nó được kiểm tra xem buffer trong user memory có đúng hay không

Khi fd = 0, bộ đệm được lấp đầy bởi các 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.

Tương tự, kiểm tra xem buffer có chính xác hay không

Nếu fd = 1, hàm putbuf() được sử dụng để xuất nội dung buffer ra bàn

điều khiển

Nếu không, tìm table file desc và object file bằng fd, và ghi nội dung

của buffer vào file thông qua hàm file_write().

6

download by : skknchat@gmail.com

Trang 14

CHƯƠNG 2 KẾT QUẢ

Sau khi triển khai các syscall bên trên, em thực hiện kiểm tra những gì mình đã thay đổi so với mã nguồn ban đầu mà Pintos cung cấp

Hình 8 Kết quả so sánh với mã nguồn ban đầu.

Thực hiện “make check” trong src/userprogram sau khi đã được thay đổi, kết quả thu được như sau:

Hình 9 Kết quả “make check”.

8

download by : skknchat@gmail.com

Trang 15

Kết quả thu được, các test case cho halt, exec, wait của syscall quản lý tiến trình và create, remove, open, filesize, read, write, seek, tell, close của syscall quản lý tập tin

cơ bản đều PASS Những trường hợp FAIL còn lại, em sẽ tiếp tục khắc phục

Trang 16

KẾT LUẬN

Qua bài tập lớn Hệ điều hành Pintos, em đã được tìm hiểu và học hỏi nhiều kiến thức, kỹ năng liên quan đến hệ điều hành Từ đó, bản thân em cảm thấy mình trau dồi được thêm nhiều kiến thức bổ ích cũng như rèn luyện kĩ năng cần thiết khác trong học tập và cả trong 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 có thể hoàn thành

đè tài

10

download by : skknchat@gmail.com

Trang 17

TÀI LIỆU THAM KHẢO

Hyperlink: juytu/NguyenDuyTu_2848_DoXuanVu_2892 (github.com)

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

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

w