Bài tập lớn bộ môn hệ điều hành đề tài system call và virtual memory

23 28 0
Bài tập lớn bộ môn hệ điều hành đề tài system call và virtual memory

Đ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

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI TRƯỜNG ĐIỆN ĐIỆN TỬ BÀI TẬP LỚN BỘ MÔN HỆ ĐIỀU HÀNH Đề tài System call và Virtual memory Giảng viên hướng dẫn TS Phạm Văn Tiến Sinh viên thực hiện Ngô Thế Anh 20192687[.]

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI TRƯỜNG ĐIỆN - ĐIỆN TỬ BÀI TẬP LỚN BỘ MÔN HỆ ĐIỀU HÀNH Đề tài: System call Virtual memory Giảng viên hướng dẫn: TS Phạm Văn Tiến Sinh viên thực hiện: Ngô Thế Anh 20192687 Nguyễn Hữu Linh 20192966 Phan Việt Nam 20193036 Hà Nội, 1-2023 LỜI NÓI ĐẦU Với chức phân phối quản lý tài nguyên hợp lý, đồng thời tạo giao diện thân thiện với người dùng, hệ điều hành phần then chốt khơng thể thiếu hệ thống máy tính điện tử Trong mơi trường xử lý đa nhiệm, xảy tình nhiều luồng đồng thời sẵn sàng để xử lý Điều yêu cầu hệ điều hành phải lựa chọn, xử lý luồng hàng đợi cách hợp lý hiệu Do đó, chức quan trọng khơng thể thiết hệ điều hành lập lịch cho CPU Chính vậy, nhóm chúng em lựa chọn, nghiên cứu đề tài “System Call” Virtual Mapped memory Nhóm chúng em xin gửi lời cảm ơn chân thành tới TS Phạm Văn Tiến hướng dẫn, đưa quy trình tìm hiểu đề tài cụ thể để nhóm chúng em hồn thành đề tài Trong q trình thực đề tài, khơng tránh khỏi thiết sót, chúng em mong nhận dẫn góp ý thầy để đề tài ngày hoàn thiện Em xin chân thành cảm ơn MỤC LỤC DANH MỤC KÝ HIỆU VÀ CHỮ VIẾT TẮT i DANH MỤC HÌNH VẼ ii DANH MỤC BẢNG BIỂU iii TÓM TẮT ĐỒ ÁN iv CHƯƠNG QUY ĐỊNH VỀ TRÌNH BÀY ĐỒ ÁN 1.1 Quy định chung định dạng văn 1.2 Quy định đánh số thứ tự 1.2.1 Đánh số trang 1.2.2 Đánh số chương mục 1.2.3 Đánh số hình vẽ bảng biểu 1.2.4 Đánh số phương trình .3 1.2.5 Đánh số định nghĩa, định lý, hệ 1.3 Thứ tự phần đồ án 1.3.1 Bìa đồ án 1.3.2 Mẫu nhận xét 1.3.3 Lời nói đầu .5 1.3.4 Lời cam đoan 1.3.5 Mục lục 1.3.6 Danh mục ký hiệu chữ viết tắt 1.3.7 Danh mục hình vẽ 1.3.8 Danh mục bảng biểu .7 1.3.9 Tóm tắt đồ án 1.3.10 Phần mở đầu 1.3.11 Nội dung .7 1.3.12 Kết luận 1.3.13 Tài liệu tham khảo 1.3.14 Phụ lục 1.4 Một số điều cần lưu ý trình bày 1.4.1 Lưu ý dấu câu 1.4.2 Lưu ý hình vẽ bảng biểu .11 CHƯƠNG CÁC QUY ĐỊNH KHÁC 13 2.1 Liệt kê tài liệu tham khảo 13 2.1.1 Cách liệt kê 13 2.1.2 Các loại tài liệu tham khảo 13 2.2 Trích dẫn tài liệu tham khảo 15 2.3 Nộp đồ án 16 2.3.1 Nộp cứng .16 2.3.2 Nộp mềm .16 2.4 Bản quyền kết nghiên cứu 17 KẾT LUẬN 18 Kết luận chung 18 Hướng phát triển 18 Kiến nghị đề xuất 18 TÀI LIỆU THAM KHẢO 19 PHỤ LỤC .20 Phụ lục Mẫu trang bìa đồ án 20 Phụ lục Mẫu trang bìa phụ đồ án 22 Phụ lục Mẫu nhận xét đồ án 24 DANH MỤC HÌNH VẼ VÀ BẢNG BIỂU Xem Mục Error: Reference source not found BẢNG PHÂN CƠNG NHIỆM VỤ Bài số Cơng việc 1: System Tìm hiểu chung System Call Call Hoạt động System Call Triển khai System Call: create, remove, read Triển khai System Call: halt, exit, exec Triển khai System Call: file, wait, filesize Tìm hiểu chung Virtual Memory Phân vùng nhớ ảo: Pages, Frames Phân vùng nhớ ảo: Page Tables, Swap slots Triển khai chương trình frame.c Triển khai chương trình frame.c Triển khai chương trình frame.c Người thực Thế Anh Việt Nam Thế Anh Việt Nam Hữu Linh Thế Anh Thế Anh Hữu Linh Thế Anh CHƯƠNG TỔNG QUAN VỀ HỆ ĐIỀU HÀNH 1.1 Hệ thống máy tính Các thành phần hệ thống máy tính minh họa Hình bên dưới, bao gồm: Phần cứng, hệ điều hành, chương trình ứng dụng/chương trình hệ thống, người sử dụng - Phần cứng: CPU, nhớ, thiết bị nhập/xuất, - Hệ điều hành: Điều khiển, phối hợp việc sử dụng phần cứng cho nhiều ứng dụng nhiều người sử dụng khác - Chương trình ứng dụng chương trình hệ thống: Là chương trình giải vấn đề người sử dụng chương trình dịch, trình duyệt, - Người sử dụng: Có thể người thân máy tính Hình 1: Thành phần hệ thống máy tính 1.2 Hệ điều hành 1.2.1 Hệ điều hành gì? Hệ điều hành chương trình đóng vai trị trung gian người sử dụng phần cứng máy tính Hệ điều hành che giấu phức tạp đa dạng phần cứng, giúp cho việc sử dụng máy tính trở nên đơn giản, hiệu Nhiệm vụ hệ điều hành quản lý tài nguyên máy tính, thực thi chương trình ứng dụng, hỗ trợ chức mạng… 1.2.2 Sự phát triển hệ điều hành - Giai đoạn ( từ 1945 – 1955): có máy tính lớn chưa có hệ điều hành Chỉ có người dùng thời điểm, họ làm việc trực tiếp với bảng điều khiển - Giai đoạn ( từ 1956 – 1965): Hệ thống xử lý theo lô - Giai đoạn 2: (1966 – 1980): Hệ thống xử lý đa chương trình – Multiprogramming system, hệ thống xử lý đa nhiệm – multitasking systems - Giai đoạn ( 1981 – nay): Hệ thống đa xử lý – multiprocessor systems, hệ thống xử lý phân tán – Distributed systems; hệ thống xử lý thời gian thực ( Real – time system), hệ thống nhúng ( Embedded systems) 1.2.3 Chức hệ điều hành Hầu hết chức hệ điều hành liên quan đến việc quản lý tài nguyền chia sẻ cách hiệu - Tính đa nhiệm: cho phép số tác vụ khác chia sẻ xử lý, tác vụ dường có máy riêng Để theo dõi thứ, tiến trình luồng phát triển - Quản lý nhớ: Giải vấn đề chia sẻ nhớ cho nhiều tiến trình khác - Quản lý thiết bị vào ra: Quản lý hoạt động hiệu quả, ví dụ nhiều thiết bị hoạt động đồng thời Quản lý tài nguyên chia sẻ giao diện mạng - Quản lý tệp: Cho phép nhiều nhiều tệp, cho nhiều người dùng khác nhau, chia sẻ không gian thiết bị lưu trữ (disk/ flash ) - Mạng: Cho phép nhóm máy tính làm việc - Bảo mật: Giải vấn đề bảo vệ thông tin cho phép tương tác với 1.3 Giới thiệu Pintos 1.3.1 Pintos gì? Pintos khung hệ điều hành đơn giản cho kiến trúc 8086, phát triển Đại học Stanford Ben Pfaff vào năm 2004 Pintos xây dựng để thay cho Not Another Completely Heuristic Operating System (Nachos) – hệ điều hành giáo dục thực tế Nó viết ngơn ngữ lập trình C, hỗ trợ kernel threads, tải chạy chương trình người dùng hệ thống tệp Tuy nhiên điều thực đơn giản, đủ thực tế để hiểu sâu sắc khái niệm hệ điều hành cốt lõi 1.3.2 Cấu trúc Pintos Pintos tổ chức thành thư mục sau: - “threads/”: Mã nguồn nhân (kernel) - “userprog/”: Đây thư mục chứa chương chình người dùng - “vm/”: Một thư mục gần trống rỗng Đây nơi chứa mã nguồn dành cho việc quản lý nhớ - “filesys/”: Mã nguòn cho hệ thống tệp - “devices/”: Thư mục chứa thư viện dành cho tác vụ nhập – xuất liệu: bàn phím, đĩa cứng, định thời, - “lib/”: Thư viện Pintos, tập thư viện C chuẩn Các mã nguồn thư mục biên dịch sử dụng cho nhân Pintos chương trình người dùng - “lib/kernel”: Các thư viện sử dụng cho nhân Pintos, không dùng cho user program Một số kiểu liệu cài đặt thư viện sử dụng làm việc với mã nguồn nhân Pintos: bitmaps, doubly linked list hash tables - “lib/user/: Các thư viẹn sử dụng cho chương trình người dùng, khơng dùng cho nhân Pintos - “test”/: thư mục chứa test dành cho tập/ - “examples/”: Thư mục chứa số chương trình mẫu dùng cho nội dung thực hành 2- ghi vào - “misc/”, “utils/”: Hai thư mục chứa số thư viện hỗ trợ cần thiết để Pintos thực thi Chú ý không thao tác với tập tin bên hai thư mục - “Makefile.build”: Tập tin mô tả cách thức để build nhân Pintos Chỉ chỉnh sửa tập tin muốn thêm mã nguồn CHƯƠNG SYSTEM CALL 2.1 System call gì? System call cho người dùng cách tiếp cận tiện ích/ dịch vụ hệ điều hành Mọi phương thức người dùng qua giao diện (GUI), tập lệnh (Batch) hay câu lệnh (command line, cmd window) có mục đích chung gọi system call, để yêu cầu hệ điều hành thực tác vụ cho Thơng thường, system call viết ngơn ngữ lập trình C C+ +, assemble, ngơn ngữ lập trình cấp thấp (low- level), tức có khả tiếp cận trực tiếp đến nhớ hay phần cứng máy tính 2.2 System call hoạt động nào? Giả sử có chương trình đơn giản có tác vụ đọc liệu file, chép qua file khác Để chương trình hoạt động bình thường, chương trình cần phải đọc tên file (system call 1: đọc file) Nếu có lỗi xảy ra, chương trình phải xuất dịng báo lỗi hình cho người dùng (system call 2: xuất hình) chương trình (system call 3: thốt) Nếu khơng có lỗi, đến vịng lặp liên tục mà chương trình phải đọc dịng bên file này, chép qua file (system call 4: chép) Nếu file đầu (file chép liệu đến) trùng tên file với file có sẵn thư mục, phải tự tạo tên đuôi khác cho file (system call 5: tạo tên đuôi) không cho phép chép Nếu ổ cứng có vấn đề việc đọc ghi, phải xuất tên lỗi cho người dùng (lại system call nữa) Khi chép thành cơng, phải xuất hình báo người dùng “đã thành công” Để hiểu rõ tranh tổng thể system call, vào chi tiết cách system call open() Trong Linux x86_32, open() có số system call 5, system call vector (arch/x86/entry/syscall/syscall_32.tbl), open system call entry thứ 5, tương ứng với system call routine sys_open Hình 2: Kết thu Từ đây, kernel gọi đến hàm sys_open() /fs/open.c để thực thi việc mở file hệ thông file system trả mô tả file fd cho user Cụ thể, xem hình vẽ chi tiết hình đây: Hình 3: 2.3 Triển khai dự án System Call Thực triển khai code thư mục userprog/syscall.c Gọi lệnh system call liệt kê thư viện lib/user/syscall.h System call numbers định nghĩa cho system call mục lib/syscall-nr.h: Hình 4:  System Call: void halt (void) : Chấm dứt Pintos cách gọi shutdown_power_off() (khai báo luồng/init.h)  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 thái hoạt động cho kernel  System Call: pid_t exec (const char *cmd_line): Chạy tệp thực thi có tên đặt cmd_line, chuyển đối số cho trả id chương trình (pid) quy trình Phải trả pid - 1, khơng pid khơng phải pid hợp lệ, chương trình khơng thể tải chạy lý Do đó, tiến trình mẹ khơng thể trả từ trình thực thi biết liệu quy trình tải thành cơng tệp thực thi hay chưa  System Call: int wait (pid_t pid): Chờ pid xử lý tiến trình truy xuất trạng thái Nếu pid tồn tại, đợi tiến trình kết thúc  System Call: bool create (const char *file, unsigned initial_size): Tạo tệp có kích thước số byte tệp ban đầu Trả true thành công, trả false không Tạo tệp không mở tệp: mở tệp 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): Xóa tệp gọi Trả true thành cơng, trả false khơng Một tệp bị xóa mở hay đóng việc xóa tệp mở khơng đóng tệp  System Call: int open (const char *file): Mở tệp gọi Trả xử lý số nguyên không âm gọi "bộ mô tả tệp" (fd) -1 mở tệp  System Call: int filesize (int fd): Trả kích thước, tính byte, tệp mở dạng fd  System Call: int read (int fd, void *buffer, unsigned size): Đọc byte kích thước từ tệp mở dạng fd vào đệm Trả số byte thực đọc (0 cuối tệp) -1 tệp đọc  System Call: int write (int fd, const void *buffer, unsigned size): Ghi kích thước byte từ đệm vào tệp mở fd Trả số byte thực ghi, nhỏ kích thước ghi lượng byte  System Call: void seek (int fd, unsigned position): Thay đổi byte đọc ghi tệp mở fd thành vị trí, biểu thị byte từ đầu tệp  System Call: unsigned tell (int fd): Trả vị trí byte đọc ghi tệp mở fd, biểu thị byte từ đầu tệp  System Call: void close (int fd): Đóng mơ tả tệp fd Việc thoát kết thúc tiến trình đóng tất mơ tả tệp mở nó, thể cách gọi hàm cho CHƯƠNG VIRTUAL MEMORY 3.1 Virtual Memory gì? Virtual memory kỹ thuật quản lý nhớ hệ điều hành sử dụng để quản lý quyền truy cập vào nhớ máy tính Hệ điều hành ánh xạ địa nhớ vật lý máy tính với loạt địa chì nhớ phần mềm nhất, gọi địa chì ảo Lược đồ ánh xạ khác hệ điều hành, Pintos, ánh xạ 1−1 nhớ hạt nhân, tức địa hạt nhân ảo ánh xạ xác đến địa chi vật lý Trong Pintos, nhớ ảo tách thành hai nhóm: nhớ người dùng nhớ hạt nhân Nhóm nhớ người dùng mở rộng từ x đến PHYS_BASE, nhóm nhớ nhân mở rộng từ PHYS_BASE đến cuối nhớ Địa vật lý nhân địa ảo nhân - PHYS_BASE Tuy nhiên, ánh xạ không thiết phải với nhớ người dùng Hình 5: 3.2 Phân vùng nhớ ảo Pintos 3.2.1 Cấu trúc nhớ ảo  Về mặt khái niệm, tiến trình tự bố trí nhớ ảo cho người dùng theo cách mà chọn Trong thực tế, nhớ ảo người dùng có cấu trúc sau:  Đoạn mã Pintos địa ảo người dùng 0x08048000, khoảng 128 MB từ cuối vùng địa 3.2.2 Trang (Pages) Một trang, gọi trang ảo, vùng liên tục nhớ ảo 4.096 byte (kích thước trang) theo chiều dài Một trang phải liên kết trang, nghĩa bắt đầu địa ảo chia cho kích thước trang Do đó, địa ảo 32 bit chia thành số trang 20 bit bù trang 12 bit (hoặc bù) Mỗi quy trình có trang độc lập trang người dùng (ảo), trang địa ảo Phys_base, thường 0xC0000000 (3 GB) Mỗi tiến trình có nhóm trang người dùng (ảo) Kernel truy cập trang người dùng trang nó, tiến trình người dùng truy cập trang người dùng mà thơi 3.2.3 Khung (Frames) Một khung, gọi khung vật lý khung trang, vùng liên tục nhớ vật lý Giống Pages địa vật lý, khung phải có kích thước trang liên kết trang Do đó, địa vật lý 32 bit chia thành số khung 20 bit độ lệch khung 12 bit 80x86 không cung cấp cách để truy cập trực tiếp nhớ địa vật lý Pintos hoạt động xung quanh điều cách ánh xạ nhớ ảo nhân trực tiếp vào nhớ vật lý: trang nhớ ảo kernel ánh xạ tới khung nhớ vật lý, trang thứ hai đến khung thứ hai, Do đó, khung truy cập thông qua nhớ ảo kernel 3.2.4 Bảng trang (page tables) Trong Pintos, bảng trang cấu trúc liệu mà CPU sử dụng để dịch địa ảo sang địa vật lý, nghĩa từ trang sang trang khác Định dạng bảng trang định kiến trúc 80x86 Pintos cung cấp mã quản lý bảng trang pagedir.c Sơ đồ minh họa mối quan hệ trang khung Địa ảo, bên trái, bao gồm số trang bù Bảng trang dịch số trang thành số khung, kết hợp với phần bù không sửa đổi để có địa vật lý, bên phải 3.2.5 Trao đổi khe (Swap slots) Một khe hốn đổi vùng liên tục, kích thước trang khơng gian đĩa phân vùng hốn đổi Mặc dù giới hạn phần cứng vị trí khe lỏng lẻo so với trang khung, khe hoán đổi nên liên kết với trang khơng có nhược điểm làm 3.3 Triển khai chương trình 3.3.1 Xử lý lỗi trang sửa hàm page_fault() (Xử lý tham chiếu không hợp lệ từ việc triên khai gọi hệ thơng) 3.3.2 Viết chương trình cho frame.c  init_frame_table: Khởi tạo frame table  frame_hash: Tính tốn trả giá trị băm cho frame  frame_less: Trả true frame thứ truyền vào đứng trước frame thứ  frame_alloc: phân bốkhung cho trang  frame free: Tìm khung để loại bỏ khỏi bảng khung Sử dụng thuật toán hồ quay  frame_acquire: khóa frame  frame_release: giải phóng frame ... máy tính Hình 1: Thành phần hệ thống máy tính 1.2 Hệ điều hành 1.2.1 Hệ điều hành gì? Hệ điều hành chương trình đóng vai trị trung gian người sử dụng phần cứng máy tính Hệ điều hành che giấu phức... cách gọi hàm cho CHƯƠNG VIRTUAL MEMORY 3.1 Virtual Memory gì? Virtual memory kỹ thuật quản lý nhớ hệ điều hành sử dụng để quản lý quyền truy cập vào nhớ máy tính Hệ điều hành ánh xạ địa nhớ vật... tiết cách system call open() Trong Linux x86_32, open() có số system call 5, system call vector (arch/x86/entry/syscall/syscall_32.tbl), open system call entry thứ 5, tương ứng với system call routine

Ngày đăng: 30/01/2023, 16:28

Tài liệu cùng người dùng

Tài liệu liên quan