CT178 – Nguyên lý hệ điều hành 1 Khoa Công nghệ Thông tin và Truyền thông, Đại học Cần Thơ GV Lâm Nhựt Khang PROJECT NGUYÊN LÝ HỆ ĐIỀU HÀNH Học kỳ 1 – 2022 2023 Máy ảo sử dụng Ubuntu VM Các file cần n[.]
Trang 1PROJECT - NGUYÊN LÝ HỆ ĐIỀU HÀNH
Học kỳ 1 – 2022-2023
Máy ảo sử dụng: Ubuntu VM
Các file cần nộp
- 01 báo cáo mô tả chi tiết cách giải quyết các vấn đề nêu lên trong project (kể cả hình ảnh minh họa
kết quả và các lệnh anh/chị thực hiện theo đúng trình tự) Tên file là CT178_MSSV_HoTen
- Tất cả code (cả mức kernel và user) có liên quan
Lưu ý:
- Không nén/share file khi nộp lên GG Classroom
- File báo cáo cần có Họ tên và MSSV và phần tuyên bố như bên dưới
- Code cần có chú thích rõ ràng, đầy đủ
HỌ VÀ TÊN:……….MSSV:………
Tuyên bố: Project này là do chính tôi, Họ và tên SV (MSSV:……….), tự thực hiện, không
sao chép của bất kỳ ai Nếu có bất cứ sao chép nào, tôi hoàn toàn chịu trách nhiệm
PHẦN 1: XÂY DỰNG LINUX KERNEL (2.0 điểm)
Thực hiện ở chế độ người dùng root (root user)
$su -
A CHUẨN BỊ LINUX KERNEL CODE (phần hướng dẫn dưới đây thực hiện trên CentOS Tuy nhiên, sinh viên cần thực hiện trên Ubuntu)
1 Download và cài đặt tool cần thiết vào hệ thống
Nếu thực hiện ở CentOS:
#yum install -y gcc ncurses-devel make wget
#yum apt-get install -y gcc openssl-devel
#yum apt-get install -y gcc elfutils-libelf-devel
#yum apt-get install bison
#yum apt-get install flex
Nếu thực hiện ở Ubuntu:
$sudo apt-get install -y gcc libncurses5-dev make wget
$sudo apt-get install -y gcc libssl-dev
$sudo apt-get install bison
$sudo apt-get install flex
Trang 2Kết quả sẽ có dạng như (đây chỉ là ví dụ minh họa, thực tế sẽ khác): 4.4.0-31-generic (Ubuntu)
Kết quả sẽ có dạng như (đây chỉ là ví dụ minh họa, thực tế sẽ khác): 3.10.0-693el7.x86-64 (CentOS)
3 Truy cập http://kernel.org hoặc https://cdn.kernel.org/pub/linux/kernel/ và download source code của kerenl hiện tại Kế tiếp, download kernel 5.9 và giải nén source code:
# wget http://www.kernel.org/pub/linux/kernel/v5.x/linux-5.9.tar.gz
# tar xvzf linux-5.9.tar.gz
(chú ý: thay đổi tên kernel phù hợp)
B CẤU HÌNH KERNEL MỚI
1 Đảm bảo đường dẫn hiện tại ở ~/linux-5.9 và “linux-5.9” ở top directory của kernel source
2 Tạo file cấu hình (config file)
# make menuconfig
Chú ý, không thay đổi thông tin gì cả Nhấn ESC để save và thoát khỏi menu cấu hình (configuration menu) File cấu hình sẽ được tạo ra
C BIÊN DỊCH KERNEL
1 Tại ~/linux-5.9, tạo kernel image nén (compressed kernel image)
# make –j4
2 Biên dịch kernel modules:
# make modules
D CÀI ĐẶT KERNEL
1 Cài đặt kernel modules
# make modules_install
2 Cài đặt the kernel
# make install
E THAY ĐỔI FILE CẤU HÌNH GRUB (GRUB CONFIGURATION FILE)
Thay đổi file cấu hình grub:
# vim /etc/default/grub
Thực hiện các thay đổi sau:
GRUB_DEFAULT=0
GRUB_TIMEOUT=25
F REBOOT VM
1 Reboot kernel mới:
# reboot
2 Sau khi boot, kiểm tra thông tin kernel mới có đúng chưa:
# uname -r
Kết quả sẽ có dạng: 5.9
Trang 3PHẦN 2: THÊM LỜI GỌI HỆ THỐNG VÀO LINUX KERNEL (2.0 điểm)
Thực hiện thêm lời gọi hệ thống helloworld vào Linux kernel Lời gọi hệ thống thực hiện in ra thông điệp
“Xin chao Ten toi la XXX ” vào syslog (XXX là tên và MSSV của anh/chị) Anh/chị cần cài đặt lời gọi hệ thống
ở mức kernel và viết một chương trình ở mức người dùng (user-level) để kiểm tra lời gọi hệ thống đã tạo Anh/chị tham khảo các tài liệu sau:
1 https://tldp.org/LDP/lkmpg/2.6/html/x181.html
2 https://brennan.io/2016/11/14/kernel-dev-ep3/
3 https://medium.com/@ssreehari/implementing-a-system-call-in-linux-kernel-4-7-1-6f98250a8c38
4 https://tssurya.wordpress.com/2014/08/19/adding-a-hello-world-system-call-to-linux-kernel-3-16-0/
PHẦN 3: ĐỊNH THỜI CPU (3.0 điểm)
Anh/chị viết chương trình tên MSSVdtcpu.c để thực hiện các thuật toán định thời CPU sau: FCFS, Priority trưng dụng, và Round Robin Chương trình MSSVdtcpu.c sẽ nhận vào các tham số của n tiến trình Mỗi bộ định thời sẽ tạo một biểu đồ Gantt thể hiện trạng thái của tiến trình (dạng chuỗi string): sử dụng R cho trạng thái running và W cho trạng thái waiting Cuối cùng, chương trình sẽ thực hiện tính toán các giá trị trung bình của
thời gian waiting time, respond time và turnaround time của mỗi bộ định thời tương ứng
Mô tả chương trình:
Chương trình sẽ cho phép người dùng nhập vào số lượng tiến trình n
Sau đó chương trình sẽ cho phép người dùng nhận vào (n x 2)+1 tham số
q x1 y1 x2 y2 … xn yn
trong đó q là giá trị quantum sử dụng cho định thời Round Robin, x i và y i lần lượt là thời gian đến hệ thống và
thời gian chiếm dụng CPU của tiến trình i
Output của chương trình có dạng như sau:
- Sử dụng 1 dòng “********************************” để phân tách giữa các bộ định thời
- Sử dụng 1 dòng để thông báo thuật toán định thời sử dụng Ví dụ “Dinh thoi FCFS”
- Mỗi tiến trình sẽ có 1 dòng trạng thái (chuỗi định thời) Ví dụ: RRRRRWWRRRR
- Dòng cuối cùng của mỗi thuật toán định thời là in ra các giá trị trung bình của waiting time (AVGW), respond time (AVGR) và turnaround time(AVGT)
Trang 4Ví dụ: người dùng nhập vào số lượng tiến trình n là 3 Kế tiếp chương trình cho phép người dùng nhập vào
các tham số của tiến trình, giả sử người dùng nhập là 1 0 2 1 3 2 2 Output sẽ như sau:
********************************
Dinh thoi FCFS
RR -
-WRRR
WWWRR
AVGW= 1.33 AVGR=1.33 AVGT=3.66
********************************
Dinh thoi SJF khong trung dung
………
PHẦN 4: QUẢN LÝ BỘ NHỚ (3.0 điểm)
Xét một hệ thống máy tính với không gian bộ nhớ thật 1KB, không gian bộ nhớ ảo cần 12 bit để biểu diễn Giả
sử kích thước của trang bằng với kích thước của khung và bằng 128 bytes Với bảng trang như dưới đây
Viết chương trình MSSVqlbn.c nhận vào một tham số (parameter) là filename Trong filename chứa một dãy
truy cập các địa chỉ luận lý, mỗi địa chỉ được lưu trữ dưới dạng 8bytes (unsigned long type) Chương trình
MSSVqlbn.c sẽ đọc và phân tích các địa chỉ, chuyển đổi địa chỉ trong file sang địa chỉ vật lý tương ứng và in
ra màn hình
*******************HẾT*******************