Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 30 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
30
Dung lượng
159,47 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 HỆ ĐIÊU HANH Đề tài: Project 1: Alarm clock Project 2: System Calls Sinh viên thực Giảng viên hướng dẫn Nguyễn Đình Hùng 20182555 20182433 Nguyễn Anh Đức 20182545 Phạm Huy Hoàng TS Phạm Văn Tiến PHẠM NGỌC LÂM 20182628 Hà Nội, 12-2021 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 q trình tìm hiểu hồn thiện báo cáo này! 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 .4 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 .8 2.6 Kết .9 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 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 Các vấn đề Alarm Clock System Calls Nguyễn Đình Hùng - Triển khai chế sleep and wake up - Bổ sung biến hàm - Sửa mã nguồn chạy thử nghiệm cuối (đã pass hết) - 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) Nguyễn Anh Đức - Phân tích chức hàm cần sửa đổi mã nguồn Phạm Huy Hoàng - Triển khai chế sleep and wake up - Sửa mã nguồn chạy thử nghiệm (đã pass ) - Phân tích chức năng, chỉnh sửa mã nguồn kiểm thử hàm liên quan đến filesystem: create, remove, open, filesize (đã pass hết) - Phân tích chức năng, chỉnh sửa mã nguồn kiểm thử hàm liên quan đến filesystem: read, write, seek, tell, close (đã pass hết) BẢNG PHÂN CÔNG CÔNG VIỆC 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ịn 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/” Mã nguồn cho hệ thống tệp Bạn sử dụng tệp bắt đầu với Project 2, bạn khơng sửa đổi Project “devices/” Mã nguồn cho giao tiếp thiết bị I/O: bàn phím, đếm thời gian, đĩa, Bạn sửa đổi việc triển khai hẹn Project “lib/” Đây tập thư viện C chuẩn, biên dịch vào kernel chương trình người dùng chạy nó, Project Tiêu đề thư mục đưa vào #include “lib/kernel/” Các phần thư viện C có kernel Pintos Bao gồm số kiểu liệu: bitmap, linked list, hash table “lib/user/” Các phần thư viện C có chương trình người dùng “tests/” Các test cho dự án Bạn sửa đổi mã giúp bạn kiểm tra nội dung mình, chúng tơi thay mã gốc trước test thử nghiệm “examples/” Ví dụ cho chương trình người dùng sử dụng Project “misc/” “utils/” Những files hữu ích bạn định thử làm việc với Pintos máy tính riêng Nếu khơng bỏ qua chúng 1.3 Tổng quan Threads Các trạng thái tiến trình mơ tả hình Hình Sơ đồ FSM threads Trong Pintos, trạng thái luồng khai báo cấu trúc “ enum threadstatus” • THREADRUNNING: Luồng chiếm CPU làm việc CPU • THREAD READY: Luồng sẵn sàng làm việc chưa đưa vào CPU, đặt hàng đợi ready queue chờ đến lượt • THREADBLOCKED: Luồng chờ kiện xảy tiếp tục làm việc Khi luồng đưa vào trạng thái THREAD BLOCKED để nhường CPU cho luồng khác ready queue làm việc • THREAD DYING: Luồng thực xong việc TERMINATED Nó tiêu hủy Các hàm chuyển đổi trạng thái luồng mơ tả hình Chúng khởi tạo “src/threads/thread.c” Hình Sơ đồ hàm chuyển trạng thái threads hungnguyen1804@HUNG-PC: ~/Projects/HDH/pintos-project1/src/threads/build* • • File Edit View Search Terminal Help hungnguyenl804@HUNG-PC;~/Projects/HDH/pintos-projectl/src/threads/build$ make ch eck pass tests/threads/alarm-stngle pass tests/threads/atarn-muLtiple pass tests/threads/atarm-stnuLtaneous FAIL tests/threads/aLarn-priortty pass tests/threads/alarm-zero pass tests/threads/alarm-negattve FAIL tests/threads/priortty-change FAIL tests/threads/priority-donate-one FAIL tests/threads/priortty-donate-multtpte FAIL tests/threads/prtortty-donate-multtple2 FAIL tests/threads/priortty-donate-nest FAIL tests/threads/priortty-donate-sema FAIL tests/threads/priority-donate-'Lower FAIL tests/threads/priortty-ftfo FAIL tests/threads/prtortty-preempt FAIL tests/threads/priori.ty-sema FAIL tests/threads/priority-condvar FAIL tests/threads/priority-donate-Chain FAIL tests/threads/inLfqs-load-l FAIL tests/threads/mlfqs-load-60 FAIL tests/threads/mtfqs-toad-avg FAIL tests/threads/ntfqs-recent-1 pass tests/threads/nLfqs-fatr-2 pass tests/threads/mtfqs-fatr-20 FAIL tests/threads/mtfqs-ntce-2 FAIL tests/threads/mtfqs-ntce-10 FAIL tests/threads/ntfqs-btock 20 of 27 tests fatled / /tests/Make.tests:26: rectpe for target 'check' failed make: *** [check] Error hungnguyenl804@HUNG-PC:~/Projects/HDH/pintos-projectl/src/threads/buil.d$ I Hình Kết sau make check test alarm-clock CHƯƠNG SYSTEM CALLS Chương mô tả mục tiêu, phương pháp, triển khai mã nguồn, mô tả mã nguồn sửa đổi, bổ sung giải vấn đề System Calls Project Pintos 3.1 Đặt vấn đề Khi làm việc Pintos với phần hệ thống mà cho phép chạy chương trình người dùng, ta nhận thấy mã nguồn hệ thống hỗ tải chạy chương trình người dùng lại khơng thể thực tương tác thiết lập vào I/O Do cần thơng qua các gọi 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 Hình Sơ đồ tương tác chương trình người dùng OS Để cài đặt system call, trước hết cần tìm hiểu thao tác đọc ghi cách an tồn liệu có khơng gian nhớ ảo tiến trình cấp độ người dùng Các tham số system call nằm stack tiến trình người dùng, bên trỏ stack Hình Cấu trúc thành phần layout Virtual Memory Chú ý rằng, trỏ stack không hợp lệ chương trình gọi system call, nhân hệ điều hành bị crash Một số tham số system call trỏ đến buffer bên không gian địa tiến trình người dùng, buffer khơng hợp lệ lúc nên cần phải cẩn thận thực thao tác với chúng Cần phải xử lý trường hợp system call không thực thi trọn vẹn lỗi truy cập nhớ khơng hợp lệ Các lỗi bao gồm trỏ null, trỏ không hợp lệ (trỏ đến vùng nhớ chưa ánh xạ) trỏ vùng nhớ nhân hệ điều hành Đặc biệt, xảy trường hợp vùng nhớ byte chứa byte nhớ hợp lệ byte nhớ không hợp lệ, vùng nhớ nằm biên bảng phân trang Khi xảy trường hợp này, cần phải chấm dứt (terminate) tiến trình người dùng 3.2 Mơ tả mục tiêu Ban đầu, lời gọi hệ thống hệ điều hành Pintos chưa xây dựng sẵn Mục tiêu sau sửa đổi lại gọi chức hệ thống để cung cấp phục vụ cho người sử dụng Pintos như: • Các lời gọi hệ thống liên quan đến tiến trình (process): halt, exit, exec, wait • Các lời gọi hệ thống liên quan đến tệp tin (file): create, remove, open, filesize, read, write, seek, tell, close Giao diện tạo để cung cấp dịch vụ hệ điều hành, cho phép chế độ người dùng sử dụng tính kernel 3.3 Yêu cầu triển khai Mã nguồn Pintos có sẵn trình xử lí gọi hệ thống (system calls handler) dạng ngắt 0x30 nằm userprog/syscall.c Khi gọi gọi hệ thống trình xử lí sử dụng số gọi hệ thống (system call number) Sau kiểm tra tính hợp lệ trỏ danh sách tham số đầu vào, trỏ chỏ tới vùng người dùng hợp lệ Theo quy ước gọi, system call gọi bới giá trị byte trỏ trỏ esp Nó lấy cách tham chiếu đến đến giá trị stack user (địa esp + 4, esp + 8, ) Cuối trình xử lí gọi hệ thống chép đối số user stack vào kernel lưu kết lệnh gọi hệ thống ghi EAX Các gọi hệ thống định nghĩa src/lib/syscall_nr.h p intos/src/userprog/syscall.c p i ntos/s rc/l i b/sys ca 11 n r h sysca l_tiaiKil.c r ( intr_íraine *f) { switch(number) case SYSHALT : halt case SYSEXIT : exit () case SYS_EXEC : exec() _ Hình Sơ đồ xử lí gọi hệ thống Theo yêu cầu vấn đề System Calls (project Pintos) đề , ta cần phải xây dựng lệnh system calls cho hệ thống với yêu cầu cụ thể cho lệnh gọi sau : • • • • System Call: void halt (void): Lệnh system call để kết thúc Pintos System Call: void exit (int status): Chấm dứt chương trình người dùng tại, trả lại trạng cho kernel Nếu có tiến trình cha (parent process) chờ trả trạng thái, trạng thái cho biết thành cơng cịn giá trị khác khơng cho biết có lỗi System Call: pid_t exec (const char * cmd_line): Tạo tiến trình (child process) thực thi chương trình tương ứng với cmd_line Chuyền vào giá trị đối số nhận kết trả pid (process's program id/Kết trả phải pid -1, khơng pid khơng hợp lệ, ngun nhân chương trình khơng thể tải khơng chạy lí Khi ấy, tiến trình cha khơng thể trả từ trình thực thi tiến trình chưa thực thi xong System call: int wait (pid_t pid): Chờ tiến trình xử lí pid trả trạng thái pid đến exit Nếu pid chưa kết thúc, cần đợi kết thúc thơi Sau đó, trả trạng thái mà pid hồn thành để Nếu pid khơng gọi exit () để thoát, bị kernel kết thúc (có thể ngoại lệ xảy ra), wait (pid) trả -1 Một tiến trình cha gọi đợi tiến trình kết thúc trả trạng thái exit tiến trình biết tiến trình bị kết thúc kernel wait () thất bại trả -1 nếu: + pid khơng tham chiếu trực tiếp tới tiến trình chuỗi gọi + Tiến trình cần gọi wait vốn gọi wait() thành công pid Lưu ý: Tất tài nguyên tiến trình, bao gồm struct thread , phải giải phóng cho dù tiến trình cha có đợi hay khơng việc tiến trình trước hay sau tiến trình cha Hình Sơ đồ luồng điều khiển • • • • • • 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 q 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 (intfd, unsignedposition): 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 (intfd): 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 (intfd): Đóng file fd Việc kết thúc tiến trình đóng tất fd mở 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 listfd_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 - boolfinish: 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 processchild • void thread_unblock(): thêm chức trả tên tiến trình khởi chạy • 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 processchild Chỉnh sửa khung hàm cấp sẵn: userprog/process.c: • 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 q 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 intpid_t: Xác định số để nhận dạng thread • intfd_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()/boolpointer_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 1f 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ị trỏ f tuyền vào có hợp lệ khơng thơng qua hàm bool char pointer_valid()/bool pointer_valid() 1void halt (void): Sử dụng hàm shutdown_power_ off(void) kết thúc pintos • void exit (int status): Thốt tiến trình ta cần sử dụng hàm void threadexit(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 fĩle 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 (intfd): 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 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: " voidput_buf(const char *buffer size_t n) " off_t file_write(struct file *file, const void *buffer off_t size) 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, unsignedposition): 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 :voidfile_seek(struct file *file, off_t new _po)) • unsigned tell (intfd): Sử dụng hàm ;off_tfile_tell()tructfile *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 voidfile_clo)e()tructfile *file) 3.6 Kết Sau kiểm tra lệnh make check pass: hungnguyen1804@HUNG-PC: ~/Projects/HDH/pintos-project_2/src/userprog/build< File Edit View Search Terminal Help pass tests/userprog/rox-chi-ld pass tests/userprog/rox-multichild pass tests/userprog/bad-read pass tests/userprog/bad-write pass tests/userprog/bad-read2 pass tests/userprog/bad-write2 pass tests/userprog/bad-jump pass tests/userprog/bad-jump2 pass tests/userprog/no-vm/multi-oom pass tests/filesys/base/lg-create pass tests/filesys/base/lg-full pass tests/íilesỵs/base/lg-random pass tests/filesys/base/lg-seq-btock pass tests/íilesys/base/lg-seq-random pass tests/filesys/base/sm-create pass tests/filesys/base/sm-full pass tests/filesys/base/sm-randopi pass tests/filesys/base/sm-seq-block ipass tests/ti.lesys/base/sm-seq-random pass tests/filesys/base/syn-read pass tests/filesys/base/syn-remove pass tests/filesys/base/syn-write Alt 80 tests passed hungnguyenl804gHUNG-PC:~/Projects/HDH/pintos-project_2/src/userprog/bui'ld$ I i Hình 10 Kết sau make check test system call) 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 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 LIỆU THAM KHẢO • https ://web stanford edu/~ouster/cgi-bin/cs 140-spring20/pintos/pintos html#SEC 15 • 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-A nhDuc2433-HuyHoang2545/pintosproject • System Call: bool create (const char * file, unsigned initial_size): Tạo file với đối số đầu vào tên file kích thước khởi tạo ban đầu ( đơn vị byte) Kết trả true thành công, trả false thất bại Việc tạo file không theo kèm việc mở file Mở file tạo thao tác riêng biệt yêu cầu lệnh gọi hệ thống mở • System call: bool remove (const char *file): Thực xoá file ,đối số đầu vào tên file cần xoá Kết trả sau gọi hàm true thành công, trả false thất bại Một file bị xóa mở hay đóng việc xóa file mở khơng đóng file Xem xóa file mở để biết chi tiết • System call: int open (const char *file): Thực mở file Trả giá trị nguyên không âm gọi "file descriptor" (fd) trả -1 mở file (Các fd đánh số thể cho điều khiển: fd (STDIN_FILENO) đầu vào tiêu chuẩn, fd (STDOUT_FILENO) đầu tiêu chuẩn Lệnh gọi hệ thống mở file không trả fd hay fd Mỗi tiến trình ... 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 .4 CHƯƠNG ALARM CLOCK 2 .1 Vấn đề Alarm Clock. .. 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... 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