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

BÁO CÁO BÀI TẬP LỚN HỆ ĐIỀU HÀNH Đề tài Project 1 Alarm clock và Project 2 System Calls

49 74 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 49
Dung lượng 766,3 KB

Nội dung

Đề tài: Project 1: Alarm clock và Project 2: System Calls 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 HỆ ĐIỀU HÀNH Đề tài: Project 1: Alarm clock và Project 2: System Calls Đề tài: Project 1: Alarm clock và Project 2: System Calls 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 HỆ ĐIỀU HÀNH Đề tài: Project 1: Alarm clock và Project 2: System Calls Đề tài: Project 1: Alarm clock và Project 2: System Calls 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 HỆ ĐIỀU HÀNH Đề tài: Project 1: Alarm clock và Project 2: System Calls Đề tài: Project 1: Alarm clock và Project 2: System Calls 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 HỆ ĐIỀU HÀNH Đề tài: Project 1: Alarm clock và Project 2: System Calls

Đề tài: Project 1: Alarm clock Project 2: System Calls 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 HỆ ĐIỀU HÀNH Đề tài: Project 1: Alarm clock Project 2: System Calls Sinh viên thực : Nguyễn Đình Hùng 20182555 : Nguyễn Anh Đức 20182433 : Phạm Huy Hoàng 20182545 Đề tài: Project 1: Alarm clock Project 2: System Calls Giảng viên hướng dẫn : TS Phạm Văn Tiến Đề tài: Project 1: Alarm clock Project 2: System Calls PHẠM NGỌC LÂM 20182628 Hà Nội, 12-2021 Đề tài: Project 1: Alarm clock Project 2: System Calls LỜI NÓI ĐẦU Hiện nay, khoa học kĩ thuật giới ngày phát triển mạnh mẽ Khoa học kĩ thuật đóng vai trị khơng thể thiếu đời sống đại ngày diện sản phẩm, vật dụng mà sử dụng hàng ngày Vì việc học tập đạo tạo, kế thừa phát triển thành tựu khoa học cho hệ ngày vô quan trọng đặc biệt hệ sinh viên Việc tiếp cận cần phải tiếp cận mặt lí thuyết lẫn thực hành, việc học tập đào tạo đạt hiệu tốt nhất, đáp ứng cho xã hội nguồn nhân lực khoa học kĩ thuật chất lượng cao Trong trình học tập học phần Hệ điều hành thầy Phạm Văn Tiến giảng dạy chúng em hướng dẫn, trợ giáo để hoàn thành việc thực hành dự án khóa học hệ điều hành Pintos Sau trải qua khoảng thời gian, nhóm chúng em hồn thành việc lập trình để hiểu hệ điều hành Pintos, giải vấn đề hệ điều hành Trong báo cáo này, nhóm chúng em trình bày cụ thể làm tuần vừa qua thông qua chương sau: Chương 1: Giới thiệu hệ điều hành Pintos Chương 2: Alarm Clock Chương 3: System Calls Chương 4: Kết luận Nhóm xin chân thành cảm ơn TS Phạm Văn Tiến tận tâm hướng dẫn chúng em trình tìm hiểu hồn thiện báo cáo này! Đề tài: Project 1: Alarm clock Project 2: System Calls MỤ C LỤ C DANH MỤC HÌNH VẼ i BẢNG PHÂN CÔNG CÔNG VIỆC ii CHƯƠNG GIỚI THIỆU HỆ ĐIỀU HÀNH PINTOS 1.1 Tổng quan Pintos 1.2 Cây thư mục nguồn 1.3 Tổng quan Threads CHƯƠNG ALARM CLOCK 2.1 Vấn đề Alarm Clock 2.2 Mô tả mục tiêu 2.3 Phương pháp giải 2.4 Triển khai mã nguồn 2.5 Mô tả mã nguồn sửa đổi, bổ sung 2.6 Kết CHƯƠNG SYSTEM CALLS 10 3.1 Đặt vấn đề 10 3.2 Mô tả mục tiêu 11 3.3 Yêu cầu triển khai 12 3.4 Triển khai mã nguồn 15 3.5 Sửa đổi mã nguồn bổ sung 16 3.6 Kết 19 CHƯƠNG KẾT LUẬN 20 TÀI LIỆU THAM KHẢO 21 Đề tài: Project 1: Alarm clock Project 2: System Calls DANH MỤC HÌNH VẼ Hình Sơ đồ FSM threads Hình Sơ đồ hàm chuyển trạng thái threads Hình Mơ tả chức hàm thread_yield() Hình Cơ chế sleep and wake up Hình Kết sau make check test alarm-clock Hình Sơ đồ tương tác chương trình người dùng OS 10 Hình Cấu trúc thành phần layout Virtual Memory 11 Hình Sơ đồ xử lí gọi hệ thống 12 Hình Sơ đồ luồng điều khiển 14 Hình 10 Kết sau make check test system calls 19 Đề tài: Project 1: Alarm clock Project 2: System Calls i Đề tài: Project 1: Alarm clock Project 2: System Calls Các vấn đề Alarm Nguyễn Đình Hùng Nguyễn Anh Đức Phạm Huy Hoàng - Triển khai chế sleep - Phân tích chức Clock and wake up - Bổ sung biến hàm - Sửa mã nguồn chạy thử nghiệm cuối (đã pass hết) hàm cần sửa đổi mã nguồn - Triển khai chế sleep and wake up - Sửa mã nguồn chạy thử nghiệm (đã pass ) System Calls - Phân tích chức năng, chỉnh sửa mã nguồn, kiểm thử hàm liên - Phân tích chức năng, chỉnh sửa mã nguồn kiểm thử hàm liên - Phân tích chức năng, chỉnh sửa mã nguồn kiểm thử hàm liên quan đến tiến trình process: halt, exit, exec, wait(đã pass hết) quan đến filesystem: create, remove, open, filesize (đã pass hết) quan đến filesystem: read, write, seek, tell, close (đã pass hết) BẢNG PHÂN CÔNG CÔNG VIỆC Đề tài: Project 1: Alarm clock Project 2: System Calls ii Đề tài: Project 1: Alarm clock Project 2: System Calls CHƯƠNG GIỚI THIỆU HỆ ĐIỀU HÀNH PINTOS Chương giới thiệu tổng quan hệ điều hành Pintos tổng quan thư mục nguồn hệ điều hành Pintos 1.1 Tổng quan Pintos Pintos khung hệ điều hành đơn giản cho kiến trúc 80x86 Nó hỗ trợ kernel threads, loading running user programs file system, thực tất điều cách đơn giản Các chế có nhiều vấn đề cần khắc phục để hệ điều hành chạy cách tối ưu Stanford đưa Project dựa hệ điều hành Pintos: Project 1: Threads – Luồng Project 2: User Programs – Chương trình người dùng Project 3: Virtual Memory – Bộ nhớ ảo Project 4: File Systems – Hệ thống file Ngoài Stanford đưa CS140 Problem Set 0: Synchronization – Đồng hóa để sinh viên làm quen với mã nguồn Pintos Khi người dùng triển khai thành công (PASS TEST) nội dung đề này, hệ điều hành Pintos hoạt động hiệu quả, hiệu suất cao, tiết kiêm tài nguyên nhớ, lượng thời gian máy tính Trong báo cáo sử dụng QEMU trình mơ 1.2 Cây thư mục nguồn Quan sát vào bên mã nguồn Đây cấu trúc thư mục “…/pintos-anonmaster/src” “threads/” Mã nguồn sở kernel, mà bạn thay đổi từ Project “userprog/” Mã nguồn cho trình tải chương trình người dùng, mà bạn sửa đổi từ Project “vm/” Một thư mục gần trống rỗng Bạn triển khai nhớ ảo Project “filesys/” Đề tài: Project 1: Alarm clock Project 2: System Calls 15 Đề tài: Project 1: Alarm clock Project 2: System Calls có fd độc lập Các tiến trình khơng kế thừa fd từ tiến trình cha Khi file mở nhiều lần, dù mở tiến trình hay nhiều tiến trình lần mở trả fd Có thể có nhiều fd khác cho file giúp việc gọi lệnh đóng file độc lập tách biệt mà file mở nhiều tiến trình) System call: int filesize (int fd): Trả kích thước file tính theo byte Đối số đầu vào filesize() fd file cần tính kích thước System call: int read (int fd, void * buffer, unsigned size): Đọc byte kích thước từ file mở ( dựa vào fd để xác định file mở cần đọc) vào đệm Trả số bytes thực đọc (0 cuối file) -1 file đọc Với fd =0 thực đọc kí tự từ bàn phím System call: int write (int fd, const void * buffer, unsigned size): Ghi kích thước bytes từ đệm buffer vào file mở Trả số bytes ghi (có thể nhỏ kích thước có số byte không ghi được) Nếu ghi vào phần cuối file làm mở rộng kích thước file (trước sửa đổi mã nguồn, việc mở rộng file hệ thống file (file system) mã nguồn gốc không thực được) Nhiệm vụ lệnh write ghi nhiều bytes tốt vào cuối file trả số lượng byte thực tế ghi trả không ghi byte Với fd =1 ghi liệu console , cần đảm bảo kích thước ghi khơng lớn vài trăm byte Nếu đệm lớn thực chia nhỏ, khơng, dịng văn xuất từ tiến trình khác bị xen kẽ console, gây nhầm lẫn cho người đọc gây lỗi thực lệnh System call: void seek (int fd, unsigned position): Lệnh gọi tìm kiếm seek, đối số đầu vào fd file vị trí cần tìm kiếm file Thực cách thay đổi byte đọc ghi file mở thành vị trí xác định byte Vị trí tính vị trí bắt đầu file Nếu vị trí tìm kiếm cần tìm nằm ngồi liệu cuối file thu bytes, ta hiểu vị trí cuối file Việc ghi sau gây mở rộng file, khoảng trằng cuối file lấp đầy số ( Tại project ta khơng thay đổi file Pintos file có độ dài cố định, muốn sau project hoàn thành thực ) System call: unsigned tell (int fd): Trả vị trí byte đọc ghi file mở, vị trí trả tính theo bytes (tính từ đầu file 0) System call: void close (int fd): Đóng file fd Việc kết thúc tiến trình đóng tất fd mở Đề tài: Project 1: Alarm clock Project 2: System Calls 16 Đề tài: Project 1: Alarm clock Project 2: System Calls 3.4 Triển khai mã nguồn Các hàm biến triển khai file: threads/thread.c thread.h userprog/process.c userprog/syscall.c syscall.h 3.5 Sửa đổi mã nguồn bổ sung Các biến hàm thêm vào threads/thread.h: struct thread *parent: Mơ tả tiến trình cha struct list fd_list: Mô tả danh sách file thuộc thread struct list child_status: Danh sách trạng thái tiến trình con, để tiến trình cha nhận trạng thái quy trình sau quy trình kết thúc struct child_process_status *relay_status: Biểu thị trạng thái tiến trình chuyển tiếp đến tiến trình cha struct semaphore sema: Tiến trình đợi semaphore struct child_process_status: Danh sách trạng thái tiến trình gồm thành phần sau: - int ret_status: Biến trả trạng thái tiến trình - int tid: Biến id tiến trình - bool finish: Kiểm tra tiến trình chạy xong chưa - bool iswaited: Trả true process parent chờ đợi tiến trình cách gọi system call wait() - int loaded: Biến xem tiến trình tải thành công hay chưa - struct list_elem elem: Danh sách thành phần thread child Các hàm chỉnh sửa threads/thread.c: Hàm tid_t thread_create(): thêm trạng thái tiến trình process_child void thread_unblock(): thêm chức trả tên tiến trình khởi chạy Đề tài: Project 1: Alarm clock Project 2: System Calls void thread_exit(): thêm chức xóa thread đặt trạng thái thành kết thúc lên lịch cho tiến trình khác static void init_thread(): thêm chức khởi tạo semaphore, khởi tạo file khởi tạo danh sách trạng thái process_child Chỉnh sửa khung hàm cấp sẵn: userprog/process.c: 17 Đề tài: Project 1: Alarm clock Project 2: System Calls process_execute(): Tiến trình cha đợi biết tiến trình tạo thành cơng file nhị phân tải thành cơng Sau khởi tạo Samaphore đầu tiên, gọi sema_down để đợi tải file thành cơng tiến trình start_process(): Mục đích thread tải tiến trình người dùng khởi động nó, tải eip esp user process, esp ngăn xếp Sau tải xong process child trình tải khơng thành cơng đánh thức process parent sau process parent lấy thơng tin việc liệu process child có tải thành cơng hay khơng process_wait(): Lệnh gọi hệ thống wait(pid) tìm pid tiến trình tiến trình đợi kết thúc Các quy trình luồng (tiến trình) lưu trữ danh sách gọi danh sách con, cách duyệt qua danh sách Các biến hàm thêm vào userprog/syscall.c: struct lock file_lock: Xác định khóa tệp để hạn chế nhiều thread sửa đổi tệp lúc typedef int pid_t: Xác định số để nhận dạng thread int fd_num: Xác định mô tả tệp với số nguyên không âm struct_fd: Xác định cấu trúc để biểu diễn cho file Các hàm thêm vào userprog/syscall.c: find_fd_by_num(): hàm để thuận lợi cho việc kiểm tra sau hệ thống gọi hàm bool char pointer_valid()/bool pointer_valid(): hai hàm giúp kiểm tra giá trị trỏ truyền vào lời gọi hệ thống có chức khác nên giá trị trỏ truyền vào khác void close_all_fd(): hàm đóng tất tệp chạy syscall_init(): hàm để chọn chức xử lý ngắt vào ghi syscall_handle(): hàm cho phép gọi lời gọi hệ thống thông qua trỏ intr_frame *f trỏ đến số nguyên tương ứng với lời gọi hệ thống Các hàm syscall_halt(), syscall_exit(), syscall_exec(), syscall_wait(), syscall()_create(), syscall_remove(), syscall_open(), syscall_filesize(), syscall_read(), syscall_write(), syscall_seek(), syscall_tell(), syscall_close(): dùng trỏ intr_frame *f để xác định gọi system call kiểm tra giá trị Đề tài: Project 1: Alarm clock Project 2: System Calls trỏ f tuyền vào có hợp lệ không thông qua hàm bool char pointer_valid()/bool pointer_valid() void halt (void): Sử dụng hàm shutdown_power_off(void) kết thúc pintos 18 Đề tài: Project 1: Alarm clock Project 2: System Calls void exit (int status): Thốt tiến trình ta cần sử dụng hàm void thread_exit(void) pid_t exec (const char * cmd_line): Tạo tiến trình con, khơng thể quay lại tiến trình tạo (hoặc không tạo thành công ) Tạo thành cơng tiến trình hồn thành file thực thi sẵn sàng chạy Vậy cần return process_execute(cmd_line) int wait (pid_t pid): (): Lệnh gọi hệ thống wait(pid) tìm pid tiến trình tiến trình đợi kết thúc Các quy trình luồng (tiến trình) lưu trữ danh sách gọi danh sách con, cách duyệt qua danh sách bool create (const char * file, unsigned initial_size): Tạo file với kích thước initial_size , sử dụng hàm: bool filesys_create(const char *name, off_t initial_size), trả giá trị true thành công false thất bại bool remove (const char * file): Xoá file ,ta sử dụng hàm :bool filesys_remove(const char *name), kết trả true thành công false thất bại Sau thực gọi lệnh file bị xố dù mở hay đóng int open (const char * file): Thực mở file tương ứng với đường dẫn tới file ,trả fd Ta sử dụng hàm : struct file *filesys_open(const char *name) int filesize (int fd): Trả kích thước (tính theo byte) file cần tính tính kích thước, sử dụng hàm : off_t file_length(struct file *file) int read (int fd, void * buffer, unsigned size): Đọc byte kích thước từ file fd mở vào đệm Trả số bytes thực đọc (0 cuối file) file đọc Nếu fd =0 đọc từ bàn phím hàm unit8_t input_getc(void), cịn đọc từ file sử dụng hàm : off_t file_read(struct file *file, void *buffer, off_t size) int write (int fd, const void * buffer, unsigned size): Sử dụng hàm để thực nhiệm vụ ghi:  void put_buf(const char *buffer, size_t n)  off_t file_write(struct file *file, const void *buffer, off_t size) Đề tài: Project 1: Alarm clock Project 2: System Calls 19 Đề tài: Project 1: Alarm clock Project 2: System Calls Ghi kích thước bytes từ đệm buffer vào file fd mở trả số bytes ghi Nếu fd = ghi console dùng hàm putbuf() ,còn ghi file ta sử dụng hàm file_write() void seek (int fd, unsigned position): Thực cách thay đổi byte đọc ghi file mở thành vị trí xác định byte Tại dùng hàm :void file_seek(struct file *file, off_t new_pos) unsigned tell (int fd): Sử dụng hàm ;off_t file_tell(struct file *file) để trả vị trí byte đọc ghi file fd mở void close (int fd): Đóng file fd chọn cách sử dụng hàm void file_close(struct file *file) 3.6 Kết Sau kiểm tra lệnh make check pass: Hình 10 Kết sau make check test system calls Đề tài: Project 1: Alarm clock Project 2: System Calls 20 Đề tài: Project 1: Alarm clock Project 2: System Calls CHƯƠNG KẾT LUẬN Sau tìm hiểu đưa giải pháp, vấn đề “Alarm Clock” Project Pintos giải Vòng lặp “busy waiting” thay chế sleeping and wake up Trong Project 2, nhóm em thực hàm lời gọi hệ thống mà Pintos chưa hỗ trợ Về vấn đề System Calls nhóm em hồn thành chạy thử nghiệm thành công Sau kết thúc môn học, có nhiều thời gian hơn, chúng em có gắng dùng kiến thức tính luỹ từ mơn học để hồn thành project cịn lại dự án Pintos Chúng em xin chân thành cảm ơn thầy Phạm Văn Tiến hướng dẫn chúng em để hoàn thành dự án Đề tài: Project 1: Alarm clock Project 2: System Calls 21 Đề tài: Project 1: Alarm clock Project 2: System Calls TÀI LIỆU THAM KHẢO https://web.stanford.edu/~ouster/cgi-bin/cs140-spring20/pintos/pintos_2.html#SEC15 https://www.scs.stanford.edu/21wi-cs140/pintos/pintos_2.html Hyperlink project: https://github.com/DinhHung2555-AnhDuc2433-HuyHoang2545/pintos-project1 https://github.com/DinhHung2555-AnhDuc2433-HuyHoang2545/pintos- project_2 Đề tài: Project 1: Alarm clock Project 2: System Calls 22 .. .Đề tài: Project 1: Alarm clock Project 2: System Calls Giảng viên hướng dẫn : TS Phạm Văn Tiến Đề tài: Project 1: Alarm clock Project 2: System Calls PHẠM NGỌC LÂM 2 018 26 28 Hà Nội, 12 -20 21 Đề. .. hệ thống (System Calls) ta kích hoạt chương trình tương tác với hệ điều hành Đề tài: Project 1: Alarm clock Project 2: System Calls 11 Đề tài: Project 1: Alarm clock Project 2: System Calls Hình... 10 Kết sau make check test system calls 19 Đề tài: Project 1: Alarm clock Project 2: System Calls i Đề tài: Project 1: Alarm clock Project 2: System Calls Các vấn đề Alarm Nguyễn Đình Hùng Nguyễn

Ngày đăng: 26/03/2022, 19:15

HÌNH ẢNH LIÊN QUAN

BẢNG PHÂN CÔNG CÔNG VIỆC - BÁO CÁO BÀI TẬP LỚN HỆ ĐIỀU HÀNH Đề tài Project 1 Alarm clock và Project 2 System Calls
BẢNG PHÂN CÔNG CÔNG VIỆC (Trang 8)
Hình 1 Sơ đồ FSM của một threads - BÁO CÁO BÀI TẬP LỚN HỆ ĐIỀU HÀNH Đề tài Project 1 Alarm clock và Project 2 System Calls
Hình 1 Sơ đồ FSM của một threads (Trang 14)
Các hàm chuyển đổi giữa các trạng thái của luồng được mô tả ở hình dưới. Chúng được khởi tạo trong “src/threads/thread.c” - BÁO CÁO BÀI TẬP LỚN HỆ ĐIỀU HÀNH Đề tài Project 1 Alarm clock và Project 2 System Calls
c hàm chuyển đổi giữa các trạng thái của luồng được mô tả ở hình dưới. Chúng được khởi tạo trong “src/threads/thread.c” (Trang 14)
Hình 3 Mô tả chức năng của hàm thread_yield(). - BÁO CÁO BÀI TẬP LỚN HỆ ĐIỀU HÀNH Đề tài Project 1 Alarm clock và Project 2 System Calls
Hình 3 Mô tả chức năng của hàm thread_yield() (Trang 20)
Hình 4 Cơ chế sleep and wake up. - BÁO CÁO BÀI TẬP LỚN HỆ ĐIỀU HÀNH Đề tài Project 1 Alarm clock và Project 2 System Calls
Hình 4 Cơ chế sleep and wake up (Trang 22)
Hình 5 Kết quả sau khi make check test alarm-clock - BÁO CÁO BÀI TẬP LỚN HỆ ĐIỀU HÀNH Đề tài Project 1 Alarm clock và Project 2 System Calls
Hình 5 Kết quả sau khi make check test alarm-clock (Trang 26)
Hình 7 Cấu trúc thành phần của layout Virtual Memory - BÁO CÁO BÀI TẬP LỚN HỆ ĐIỀU HÀNH Đề tài Project 1 Alarm clock và Project 2 System Calls
Hình 7 Cấu trúc thành phần của layout Virtual Memory (Trang 28)
Hình 6 Sơ đồ tương tác giữa chương trình người dùng và OS - BÁO CÁO BÀI TẬP LỚN HỆ ĐIỀU HÀNH Đề tài Project 1 Alarm clock và Project 2 System Calls
Hình 6 Sơ đồ tương tác giữa chương trình người dùng và OS (Trang 28)
Hình 8 Sơ đồ xử lí các cuộc gọi hệ thống - BÁO CÁO BÀI TẬP LỚN HỆ ĐIỀU HÀNH Đề tài Project 1 Alarm clock và Project 2 System Calls
Hình 8 Sơ đồ xử lí các cuộc gọi hệ thống (Trang 32)
Hình 9 Sơ đồ luồng điều khiển - BÁO CÁO BÀI TẬP LỚN HỆ ĐIỀU HÀNH Đề tài Project 1 Alarm clock và Project 2 System Calls
Hình 9 Sơ đồ luồng điều khiển (Trang 34)
Hình 10 Kết quả sau khi đã make check test system calls - BÁO CÁO BÀI TẬP LỚN HỆ ĐIỀU HÀNH Đề tài Project 1 Alarm clock và Project 2 System Calls
Hình 10 Kết quả sau khi đã make check test system calls (Trang 44)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

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

TÀI LIỆU LIÊN QUAN

w