Tài liệu thực hành hệ điều hành UIT cho các bạn tham khảo Okk okk okk okk okk ook nhá nhá nhá nhá nhá. Ok nhá Ok nhá Ok nhá Ok nhá Ok nhá Ok nhá Ok nhá Ok nhá Ok nhá Ok nhá Ok nhá. First Come First Served Sortest Job First Shortest Remaining Time First Arrival time Bust time Quantum time Response time Waiting time
Trường Đại học Công nghệ thông tin (UIT) LAB : HƯỚNG DẪN CÀI ĐẶT UBUNTU VÀ CÁC LỆNH CƠ BẢN CỦA SHELL Hình : Thực thi lệnh -ls ( ls viết tắt List ) Hình : Thực thi lệnh : ls -help Hình : Thực thi câu lệnh -cd cd: Viết tắt từ change directory, Lệnh sử dụng để thay đổi thư mục mà bạn làm việc Có nhiều lệnh cd sử dụng để đưa bạn đến tệp thư mục cụ thể cd /: Một thay cho lệnh cd, cd / lệnh sử dụng để đưa bạn đến thư mục gốc cd : Lệnh sử dụng để đưa bạn lên cấp thư mục cd – : Lệnh sử dụng để điều hướng đến thư mục trước Hình : Đường dẫn tuyệt đối Hình : Đường dẫn tương đối Hình : Thực lệnh pwd ( Trả thư muc thời ) Hình :Thực lệnh -touch ( Tạo tệp tin ) Hình : Thực lệnh – vi and -nano ( Lệnh đọc chỉnh sửa văn ) Hình : Lệnh -mkdir (Tạo thư mục) Hình 10 : Lệnh -chmod ( mẫu lệnh dùng để thiết lập quyền (xem, sửa thực thi) tệp tin thư mục ) Hình 11 : Lệnh -rm ( Lệnh dung để xóa liệu ) Hình 12 : Lệnh -cp ( Sao chép liệu ) Hình 13 : Lệnh -mv ( Lệnh dùng để di chuyển vè đổi tên cho thư mục ) Hình 14 : Lệnh -echo ( trả cho ta giá trị hình vào tệp tin ) Hình 15 : Lệnh -cat ( in hình vào tệp tin liệu từ tệp tin ) Hình 16 : Các lệnh quản lý user Linux 10 BÁO CÁO THỰC HÀNH LAB HỆ ĐIỀU HÀNH 6.4 Hướng dẫn thực hành FIFO: 106 OPT: 107 LRU: 108 CODE : #include #include int defaultInput[11] = { 1, 7, 5, 2, 0, 3, 7, 8, 0, 0, 7}; int Find(int **_input, int _key, int _page, int _col) { int i = 0; for (i = 0; i < _page; i++) { if (_input[i][_col] == _key) break; } return i; } int FindMax(int *_input, int _n) { int max = 0; int i = 0; for (; i < _n; i++) { if (_input[i] > _input[max]) max = i; } return max; } int FindMin(int *_input, int _n) { int = 0; int i = 0; for (; i < _n; i++) if (_input[i] < _input[min]) = i; return min; } void AddQueue(int *_queue, int _key, int _n) { int i; for (i = 0; i < _n; i++) { if (_queue[i] == _key) return; if (_queue[i] == -1) { _queue[i] = _key; return; } } } int DeleteEle(int *_queue, int _n) { int i; int num = _queue[0]; 109 for (i = 0; i < _n - 1; i++) _queue[i] = _queue[i + 1]; return num; } void Initator(int **_input, int _n, int _page) { int col; int row; for (row = 0; row < _page; row++) for (col = 0; col < _n; col++) _input[row][col] = -1; } int CheckPage(int **_input, int _page, int _col, int _key) { int i = 0; for (; i < _page; i++) if (_input[i][_col] == _key) return 0; return 1; } void Copy(int **_input, int _col, int _row, int _n) { int i = 0; if (_col < _n - 1) { for (; i < _row; i++) _input[i][_col + 1] = _input[i][_col]; } } void PrintResult(int *_input, int **_result, int _col, int _page) { int r; int c; int count = 0; for (c = 0; c < _col; c++) printf("%3d", _input[c]); printf("\n"); for (r = 0; r < _page; r++) { for (c = 0; c < _col; c++) { if (_result[r][c] == -1) printf(" "); else printf("%3d", _result[r][c]); } printf("\n"); } for (c = 0; c < _col; c++) { if (_result[_page][c] == -2) { printf(" *"); count++; } else printf(" "); } 110 printf("\nNumber of Page Fault: %3d ", count); printf("\n"); } int LRU(int *_input, int **_result, int _n, int _page) { int *_valid = (int*)malloc(_page * sizeof(int)); int i; for (i = 0; i < _n; i++) _valid[i] = -1; int _fault = 0; int col = 0; int row = 0; int tracker = 0; int = 0; int IsFull = 0; for (; col < _n; col++) { if (!IsFull) { if (CheckPage(_result, _page, col, _input[col])) { _result[row][col] = _input[col]; row++; } Copy(_result, col, row, _n); if (row == _page) IsFull = 1; _fault++; _result[_page][col] = -2; } else { if (CheckPage(_result, _page, col, _input[col])) { for (i = 0; i < _page; i++) { for (tracker = col - 1; tracker > 0; tracker ) { if (_input[tracker] == _result[i][col]) { _valid[i] = tracker; break; } } } = FindMin(_valid, _page); _result[min][col] = _input[col]; _fault++; _result[_page][col] = -2; } Copy(_result, col, row, _n); } } return _fault; } int OPT(int *_input, int **_result, int _n, int _page) { int *_valid = (int*)malloc(_page * sizeof(int)); int i; for (i = 0; i < _n; i++) 111 _valid[i] = -1; int int int int int int for { _fault = 0; col = 0; row = 0; tracker = 0; max = 0; IsFull = 0; (; col < _n; col++) if (!IsFull) { if (CheckPage(_result, _page, col, _input[col])) { _result[row][col] = _input[col]; row++; } Copy(_result, col, row, _n); if (row == _page) IsFull = 1; _fault++; _result[_page][col] = -2; } else { if (CheckPage(_result, _page, col, _input[col])) { for (i = 0; i < _page; i++) { for (tracker = col + 1; tracker < _n; tracker++) { if (_input[tracker] == _result[i][col]) { _valid[i] = tracker; break; } } if (i < _page && tracker == _n) _valid[i] = tracker; } max = FindMax(_valid, _page); _result[max][col] = _input[col]; _fault++; _result[_page][col] = -2; } Copy(_result, col, row, _n); } } return _fault; } int FIFO(int *_input, int **_result, int _n, int _page) { int *_queue = (int*)malloc(_n * sizeof(int)); int i; for (i = 0; i < _n; i++) _queue[i] = -1; int _fault = 0; int col = 0; int row = 0; int tracker = 0; int IsFull = 0; for (; col < _n; col++) 112 { AddQueue(_queue, _input[col], _n); if (!IsFull) { if (CheckPage(_result, _page, col, _input[col])) { _result[row][col] = _input[col]; row++; } Copy(_result, col, row, _n); if (row == _page) IsFull = 1; _fault++; _result[_page][col] = -2; } else { if (CheckPage(_result, _page, col, _input[col])) { tracker = Find(_result, _queue[0], _page, col); DeleteEle(_queue, _n); _result[tracker][col] = _input[col]; _fault++; _result[_page][col] = -2; } Copy(_result, col, row, _n); } } return _fault; } int main() { printf(" Page Replacement Algorithm \n"); printf(" Chuoi tham chieu mac dinh\n"); printf(" Nhap chuoi tham chieu bang tay\n"); int **result; int *input; int n; int i; int page; int option; scanf("%d", &option); if (option == 2) { printf("Nhap dai chuoi truy van : "); scanf("%d", &n); } else n = 12; printf("Nhap so khung trang : "); scanf("%d", &page); input = (int*)malloc(n * sizeof(int)); result = (int**)malloc((page + 1) * sizeof(int*)); for (i = 0; i < page + 1; i++) result[i] = (int *)malloc(n * sizeof(int)); if (option == 2) { printf("Nhap chuoi truy van :\n"); for (i = 0; i < n; i++) { printf("input[%d] = ", i); 113 scanf("%d", &input[i]); } } else { for (i = 0; i < n; i++) input[i] = defaultInput[i]; } Initator(result, n, page + 1); printf(" Page Replacement Algorithm \n"); printf(" FIFO\n"); printf(" OTP (optimal)\n"); printf(" LRU\n"); scanf("%d", &option); switch (option) { case 1: FIFO(input, result, n, page); PrintResult(input, result, n, page); break; case 2: OPT(input, result, n, page); PrintResult(input, result, n, page); break; case 3: LRU(input, result, n, page); PrintResult(input, result, n, page); break; default: printf("Nhap sai lua chon!\n"); break; } return 0; } 114 BÁO CÁO BÀI TẬP THỰC HÀNH LAB HỆ ĐIỀU HÀNH 6.5 Bài tập ôn tập Bài 1: Nghịch lý Belady gì? Sử dụng chương trình viết để chứng minh nghịch lý Nghịch lý Belady : Số lượng lỗi trang xảy tăng lên số lượng khung trang sử dụng tăng 115 116 Bài 2: Nhận xét mức độ hiệu tính khả thi giải thuật FIFO, OPT, LRU ❖ Giải thuật bất khả thi nhất? Vì sao? ❖ Giải thuật phức tạp nhất? Vì sao? - Giải thuật bất khả thi OPT Thuật toán bảo đảm số lượng lỗi trang phát sinh thấp , khơng gánh chịu nghịch lý Belady, nhiên, thuật tốn khơng khả thi thực tế, khơng thể biết trước chuỗi truy xuất tiến trình! - Giải thuật phức tạp LRU Thuật toán LRU phải dùng thời điểm cuối trang truy xuất – dùng khứ gần để dự đốn tương lai Thuật tốn địi hỏi phải chế phần cứng hỗ trợ để xác định thứ tự cho trang theo thời điểm truy xuất cuối Có thể cài đặt theo hai cách : Sử dụng đếm: Thêm vào cấu trúc phần tử bảng trang trường ghi nhận thời điểm truy xuất nhất, thêm vào cấu trúc CPU đếm Mỗi lần có truy xuất 117 nhớ, giá trị counter tăng lên Mỗi lần thực truy xuất đến trang, giá trị counter ghi nhận vào trường thời điểm truy xuất phần tử tương ứng với trang bảng trang Thay trang có giá trị trường thời điểm truy xuất nhỏ Sử dụng stack: Tổ chức stack lưu trữ số hiệu trang Mỗi thực truy xuất đến trang, số hiệu trang xóa khỏi vị trí hành stack đưa lên đầu stack Trang đỉnh stack trang truy xuất gần nhất, trang đáy stack trang lâu chưa sử dụng FIFO : 118 OPT : 119 LRU : 120 ... esac exit 42 43 BÁO CÁO THỰC HÀNH LAB HỆ ĐIỀU HÀNH Bài 1: Chạy tất đoạn lệnh ví dụ file hướng dẫn phần 2.4 Chụp hình chạy file script kết vào báo cáo ( Đã làm nộp buổi thực hành thứ ) Bài 2: viết... Bài tập 16 LAB : LẬP TRÌNH TRONG MƠI TRƯỜNG SHELL CHUẨN BỊ THỰC HÀNH LAB HỆ ĐIỀU HÀNH Yêu cầu : Viết lại đoạn code theo hướng dẫn 2.1 Điều khiển shell từ dịng lệnh Truy tìm hiển thị nội dung tệp... file text (ví dụ test.txt) thư mục hay khơng 46 LAB : TIẾN TRÌNH VÀ TIỂU TRÌNH CHUẨN BỊ THỰC HÀNH LAB HỆ ĐIỀU HÀNH Yêu cầu : Chuẩn bị mục 3.3: 3.3.1 Trình soạn thảo văn vim Cài đặt vim 47 3.3.2 Trình