1. Trang chủ
  2. » Công Nghệ Thông Tin

Thực hành hệ điều hành UIT

120 312 1
Tài liệu đã được kiểm tra trùng lặp

Đ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 120
Dung lượng 8,07 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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

Trang 1

1

Trường Đại học Công nghệ thông tin (UIT)

LAB 1 : HƯỚNG DẪN CÀI ĐẶT UBUNTU VÀ CÁC LỆNH CƠ

BẢN CỦA SHELL

Hình 1 : Thực thi lệnh -ls ( ls viết tắt của List )

Trang 2

2

Hình 2 : Thực thi lệnh : ls -help

Hình 3 : Thực thi câu lệnh -cd

Trang 3

3

cd: Viết tắt của từ change directory, Lệnh này có thể được sử dụng để thay đổi thư mục mà

bạn đang làm việc Có rất nhiều lệnh cd có thể được sử dụng để đưa bạn đến các tệp hoặc thư mục cụ thể

cd /: Một thay thế cho một lệnh cơ bản cd, cd / lệnh có thể được sử dụng để đưa bạn đến thư mục gốc

cd : Lệnh này có thể được sử dụng để đưa bạn lên một cấp thư mục

cd – : Lệnh này có thể được sử dụng để điều hướng đến một thư mục trước

Hình 4 : Đường dẫn tuyệt đối

Trang 4

4

Hình 5 : Đường dẫn tương đối

Hình 6 : Thực hiện lệnh pwd ( Trả về thư muc hiện thời đang ở )

Trang 5

5

Hình 7 :Thực hiện lệnh -touch ( Tạo một tệp tin mới )

Trang 6

6

Hình 8 : Thực hiện lệnh – vi and -nano ( Lệnh đọc và chỉnh sửa văn bản )

Trang 7

7

Hình 9 : 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 và thực thi) trên các tệp

tin và thư mục )

Trang 8

8

Hình 11 : Lệnh -rm ( Lệnh dung để xóa dữ liệu )

Hình 12 : Lệnh -cp ( Sao chép dữ liệu )

Trang 9

9

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 một giá trị ra màn hình hoặc vào tệp tin )

Trang 10

10

Hình 15 : Lệnh -cat ( in ra màn hình hoặc vào tệp tin những dữ liệu từ một tệp tin )

Hình 16 : Các lệnh về quản lý user trên Linux

Trang 11

11

Hình 17 : Các lệnh về network

Trang 12

12

Hình 18 : Lênh -man

Trang 13

13

Bài tập ôn tâp

Bài tập 1

Trang 14

14

Bài tập 2

Bài tập 3

Bài tập 4

Trang 15

15

Bài tập 5

Bài tập 6

Trang 16

16

Bài tập 7

Trang 17

17

LAB 2 : LẬP TRÌNH TRONG MÔI TRƯỜNG SHELL CHUẨN BỊ THỰC HÀNH LAB 2 HỆ ĐIỀU HÀNH Yêu cầu : Viết lại các đoạn code theo hướng dẫn

2.1 Điều khiển shell từ dòng lệnh

Truy tìm và hiển thị nội dung của các tệp nguồn chứa chuỗi main()

Nhấn phím Up/Down thì shell có thể trả lại khối lệnh như sau:

$ for file in * ; do ; if grep -1 'main( )’ $file;

Trang 18

18

then ; more $file; fi; done

Thực thi nhiều lệnh cùng lúc ngay trên dòng lệnh :

$ mkdir myfolđer; cd myfolder;

2.2 Điều khiển shell bằng tập tin kịch bản (script file)

Soạn nội dung tập tin first.sh :

# ! /bin/ sh

# first.sh

# Script nay se tìm trong thư mục hiện hành các chuỗi mang nội dung

# main( ) , nội dung của fìle sẽ được hiển thị ra màn hình nếu tìm thấy for file in *

Trang 19

Chuyển thuộc tính thực thi (x) cho tập tin script bằng lệnh chmod :

$ chmod +x first.sh hoặc $ first.sh

Khắc phuucj khi có lỗi không tìm thấy lệnh :

$ PATH=$PATH:

Tạo thói quen đặt dấu / trước một tập tin để ám chỉ truy xuất ở thư mục hiện hành

Để ngăn script bị sửa đổi bởi người dùng khác :

Trang 20

20

xinchao=12+l

echo $xinchao

 Kết quả in ra màn hình: 12+1

Sử dụng lệnh read để đọc nhập liệu do người dùng đưa vào và giữ lại trong biến để sử dụng :

3.1.1 Các kí tự đặc biệt (Metalcharacters của Shell)

3.1.1.1 Chuyển hướng vào/ra

Ký hiệu Ý nghĩa (… tượng trưng cho đích đổi hướng)

> Đầu ra hướng tới …

>> Nối vào nội dung của …

< Lấy đầu vào từ < …

<< word Đầu vào là ở đây … 2> Đầu ra báo lỗi sẽ hướng vào … 2>> Đầu ra báo lỗi hướng và ghi thêm vào … Một vài vd :

$date > login.time

$cat < file1

$cat < file1 > file2

Trang 21

Ở đây EOF là dấu hiệu đánh dấu, hay còn gọi là thẻ bài (token) Điều đáng lưu ý là:

1 Cùng một dòng dữ liệu, phải được kết thúc

2 Token phải đứng ngay ở đầu dòng

3.1.1.2 Các kí tự đặc biệt kiểm soát tiến trình

1 & (Ampersand):

Ví dụ:

$sort huge.file > sorted.file & // huge.file là một file thật lớn

$ Bằng lệnh ps sẽ thấy lệnh sort đang chạy kèm với só ID của tiến tình đó Bằng lệnh

$ jobs [1]

sẽ thấy số hiệu của lệnh đang chạy ngầm

Để kết thúc thực thi, dùng

$ kill 1234 #1234 là ID của tiến trình sort

Trang 22

(Hãy xem kết xuất trên màn hình)

3 Dấu nháy ` ` (backquotes) (là dấu ở phím đi cùng với dấu ~)

Ví dụ:

$ echo Logged in `datè > login.time

echo Logged in Fri May 12:52:25 UTC 2004 > login.time

Tức là: 1 thực hiện date với kết quả Fri May 12:52:25 UTC 2004 không hiện ra stdout (màn

hình), nhưng sẽ là đầu vào của echo;

2 sau đó lệnh echo sẽ echo Logged in Fri May 12:52:25 UTC 2004, nhưng không đưa

ra màn hình (stdout) mà đổi hướng vào tệp login.time

Nếu gõ $ cat login.time, ta có kết xuất từ tệp này ra màn hình:

Logged in Fri May 12:52:25 UTC 2004

Trang 23

cmd & đặt lệnh cmd chạy nền (background)

cmd1 ; cmd2 chạy cmd1 trước, sau đó chạy cmd2

(cmd) thực hiện cmd trong một shell con (subshell)

`cmd` đầu ra của cmd sẽ thay cho đàu ra của lệnh trong dòng lệnh

cmd1 | cmd2 nối đầu ra của cmd1 vào đầu vào của cmd2

Trang 24

echo "message : $myvar"

echo 'message : $myvar'

echo "messgae : \$myvar"

echo Enter some text

Trang 26

26

Enter some text

Hello World

$myvar now equals Hello World

3.1.2 Biến môi trường (environment variable)

3.1.3 Biến tham số (parameter variable)

Trang 27

27

$echo "$*"

foo bar bam

Trang 28

echo "The first parameter was $1"

echo "The parameter list was $*"

echo "The user's home directory is $HOME"

echo "Please enter a new greeting"

Trang 30

30

-z stringl true nếu string1 rỗng (chuỗi null)

Kiểm tra điều kiện trên tập tin

-d file true nếu file là thư mục

-e file true nếu file tồn tại trên đĩa

-f file true nếu file là tập tin thông thường

-g file true nếu set-group-id được thiết lập trên file

-r file true nếu file cho phép đọc

-s file true nếu kích thước file khác 0

-u file true nếu set-ser-id được áp đặt trên file

-w file true nếu file cho phép ghi

-x file true nếu file được phép thực thi

3.3 Cấu trúc điều khiển

#chú ý khoảng trắng trước sau [ và trước ]

if [ $timeofday = "yes" ]; then

echo "Good morning"

else

Trang 32

32

read timeofday

if [ $timeofday = "yes" ]; then

echo "Good morning"

elif [ $timeofday = "no" ]; then

echo "Good afternoon"

Trang 33

33

echo -n "Is it morning? Please answer yes or no: "

read timeofday

if [ "$timeofday" = "yes" ]; then

echo "Good morning"

elif [ "$timeofday" = "no" ]; then

echo "Good afternoon"

else

echo "Sorry, $timeofday not recognized Enter yes or no"

exit 1

fi exit 0

3.3.4 Lệnh for

Cú pháp:

for variable in values

do

Trang 34

exit 0

Kết quả kết xuất sẽ là

Trang 36

while [ "$trythis" != "secret" ]; do

echo "Sorry, try again"

Trang 38

echo "Locate for user "

until who | grep "$1" > /dev/null

Trang 39

pattern [ | partten] ) statements;;

pattern [ | partten] ) statements;;

esac

Ví dụ 3-11 case1.sh

Trang 40

"yes") echo "Good Morning";;

"no" ) echo "Good Afternoon";;

"y" ) echo "Good Morning";;

"n" ) echo "Good Afternoon";;

* ) echo "Sorry, answer not recognised";;

esac

exit 0

Ví du 3-12 case2.sh

Trang 41

"yes" | "y" | "Yes" | "YES" ) echo "Good Morning";;

"n*" | "N*" ) echo "Good Afternoon";;

* ) echo "Sorry, answer not recognised";;

Trang 42

42

case "$timeofday" in

"yes" | "y" | "Yes" | "YES" )

echo "Good Morning"

echo "Up bright and early this morning?"

Trang 43

43

Trang 44

44

BÁO CÁO THỰC HÀNH LAB 2 HỆ ĐIỀU HÀNH Bài 1: Chạy tất các đoạn lệnh ví dụ trong file hướng dẫn ở phần 2.4 Chụp hình chạy các file script và

kết quả vào báo cáo ( Đã làm và nộp trong buổi thực hành thứ 2 )

Bài 2: viết chương trình cho phép nhập vào tên và mssv Kiểm tra nếu mssv đó không trùng với mình

thì bắt nhập lại In ra màn hình kết quả

Trang 45

45

Bài 3: viết chương trình cho phép nhập vào một số n Kiểm tra nếu n < 10 thì bắt nhập lại Tính tổng các

số từ 1-> n In kết quả ra màn hình

Trang 46

46

Bài 4: viết trình cho phép nhập vào một chuỗi Kiểm tra chuỗi đó có tồn tại trong một file text (ví dụ

test.txt) cùng thư mục hay không

Trang 47

47

LAB 3 : TIẾN TRÌNH VÀ TIỂU TRÌNH CHUẨN BỊ THỰC HÀNH LAB 3 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 bản vim

Cài đặt vim

Trang 48

48

3.3.2 Trình biên dịch gcc

Cài đặt trình biên dịch gcc

Chạy thử chương trình !!

Trang 50

50

3.3.4 Trình gỡ lỗi

Tạo file factorial.c

Trang 51

51

Chạy thử !!

3.4 Hướng dẫn thực hành

3.4.1.2 Tiến trình trong môi trường Linux

Kết quả sau khi thực hiện lệnh top

3.4.1.3 Tạo tiến trình

Trang 52

52

fork()

Trang 54

54

Tạo thread

Kết quả sau khi chạy chương trình

Trang 55

55

3.4.2.4 Dừng tiểu trình

Trang 56

56

Kết quả sau khi chạy chương trình

Trang 57

57

Trang 58

58

Kết quả sau chạy chương trình

3.4.2.5 Hợp và gỡ tiểu trình

Trang 59

59

Kết quả sau khi chạy

Trang 60

60

3.4.2.6 Truyền dữ liệu cho tiểu trình

Kết quả sau khi chạy chương trình

Trang 61

61

3.4.3 Signal (Truyền thông giữa các tiến trình)

Trang 62

62

BÁO CÁO THỰC HÀNH LAB 3 HỆ ĐIỀU HÀNH Câu 1 : Mối quan hệ cha-con giữa các tiến trình

a Vẽ cây quan hệ parent-child của các tiến trình bên dưới:

b Trình bày cách sử dụng lệnh ps để tìm tiến trình cha của một một tiến trình dựa vào PID của nó?

Ta dùng lệnh : ps -f -p <tên pid của tiến trình>

c Tìm hiểu và cài đặt lệnh pstree (nếu chưa được cài đặt), sau đó trình bày cách sử dụng lệnh này để tìm tiến trình cha của một tiến trình dựa vào PID của nó?

Ta dùng lệnh : pstree -s <tên pid của tiến trình>

Câu 2: Chương trình bên dưới in ra kết quả gì? Giải thích tại sao?

+ Chương trình sẽ chạy ra : I see 17 coconuts

Trang 63

63

//Tiến trình cha tiếp tục chạy và thực hiện lệnh printf

printf("I see %d coconuts!\n", num_coconuts);

exit(0);

Câu 3 : Trong phần thực hành, các ví dụ chỉ sử dụng thuộc tính mặc định của pthread, hãy tìm hiểu POSIX thread và trình bày tất cả các hàm được sử dụng để làm thay đổi thuộc tính của pthread, sau đó viết các chương trình minh họa tác động của các thuộc tính này và chú thích đầy đủ cách sử dụng hàm này trong chương trình (Gợi ý các hàm liên quan đến thuộc tính của pthread đều bắt đầu bởi: pthread_attr_*)

Trả lời :

Trang 64

64

Ví dụ minh họa : Chương trình truyền mssv và họ tên sinh viên cho tiểu trình và in ra màn hình

Trang 65

65

Kết quả sau khi chạy chương trình

4 Viết chương trình làm các công việc sau theo thứ tự:

a In ra dòng chữ: “Welcome to IT007, I am <your_Student_ID>!”

b Mở tệp abcd.txt bằng vim editor

c Tắt vim editor khi người dùng nhấn CRTL+C

d Khi người dùng nhấn CTRL+C thì in ra dòng chữ: “You are pressed CTRL+C! Goodbye!”

Trang 66

66

Trang 67

67

Kết quả sau khi chạy chương trình

Trang 68

68

LAB 4 : LẬP LỊCH TIẾN TRÌNH CHUẨN BỊ THỰC HÀNH LAB 4 HỆ ĐIỀU HÀNH 4.3.5 Câu hỏi chuẩn bị

1 Vẽ các sơ đồ giải thuật của các giải thuật lập lịch tiến trình :

a/ FCFS ( First Come First Served )

Trang 69

69

b RR ( Round Robin )

Trang 70

70

c SJF ( Sortest Job First )

Trang 71

71

d SRTF ( Shortest Remaining Time First )

Trang 72

72

2 Giải thích các thuật ngữ :

1 Arrival time Thời gian đến ( thời gian bắt đầu thực hiện )

3 Quantum time

( timeslice )

Thời gian được hệ điều hành cấp phát cho sử dụng CPU

4 Response time Thời gian đáp ứng

5 Waiting time Thời gian chờ trong Ready Queue

6 Turnaround time Thời gian tổng thực hiện một tiến trình

7 Average waiting time Thời gian đợi trung bình

8 Average rurnaround

time

Thời gian thực hiện trung bình

Trang 74

74

Kết quả chạy thuật toán FCFS Kết quả chạy với kết quả đề bài giống nhau

Thêm đoạn code trên để tính Average waiting time và Aveage Turn Around :

Kết quả sau khi chạy chương trình :

Trang 75

75

Trang 76

76

Trang 77

77

• Giải thích đoạn code bằng sơ đồ khối :

Trang 78

78

4.5 Bài tập ôn tập :

1/ Viết chương trình mô phỏng giải thuật SJF :

́

Kết quả sau khi chạy thuật toán SJF

* Code giải thuật SJF :

#include <stdio.h>

int pn[10], ready[10], Flag[10], lab[10];

int arr[10], bur[10], star[10], finish[10], tat[10], wt[10], k = 0, n;

int totwt = 0, tottat = 0, time = 0;

float AVGWT, AVGTAT;

printf("Enter the Process Name, Arrival Time & Burst Time: ");

scanf("%d%d%d", &pn[i], &arr[i], &bur[i]);

printf("\nPName ArrTime Burtime Start TAT Finish Waiting");

for (int i = 0; i < n; i++)

{

Trang 79

79

printf("\n%d\t%d\t%d\t%d\t%d\t%d\t%d", pn[i], arr[i], bur[i],

star[i], tat[i], finish[i], wt[i]);

printf("\nAverage waitng time : %f", AVGWT);

printf("\nAverage turn around time: %f\n", AVGTAT);

}

void Check()

{

for (int i = 0; i < n; i++)

if (Flag[i] == 0 && arr[i] <= time) {

ready[k] = i;

Flag[i] = 1;

k++;

} }

int Min()

{

int min = bur[ready[0]], t = ready[0], t1 = 0;

for (int i = 1; i < k; i++)

{

if (bur[ready[i]] < min) {

min = bur[ready[i]];

t = ready[i];

t1 = i;

} }

for (int i = t1; i < k - 1; i++)

wt[i] = star[i] - arr[i];

finish[i] = star[i] + bur[i];

tat[i] = finish[i] - arr[i];

Trang 80

80

3/ Viết chương trình mô phỏng giải thuật RR :

Kết quả sau khi chạy thuật toán RR

́* Code giải thuật RR :

#include <stdio.h>

int pn[10], ready[10], Flag[10];

int bur[10], star[10], finish[10], tat[10], wt[10], i, k = 0, n, qt;

int totwt = 0, tottat = 0, time = 0, str = 0;

int bur1[10], end[10];

float AVGWT, AVGTAT;

void Input()

{

printf("Enter the number of process, quantum time: ");

scanf("%d%d", &n, &qt);

for (i = 0; i < n; i++)

{

printf("Enter the Process Name & Burst Time: ");

scanf("%d%d", &pn[i], &bur[i]);

Trang 81

star[i] = time;

wt[i] = star[i];

} else if (bur1[i] < bur[i]) wt[i] += (time - end[i]);

if (bur1[i] <= qt) {

time += bur1[i];

finish[i] = time;

} else time += qt;

printf("\nAverage waitng time : %f", AVGWT);

printf("\nAverage turn around time: %f\n", AVGTAT);

return 0;

}

Trang 82

Kết quả sau khi chạy thuật toán SJF

* Code giải thuật SJF :

#include <stdio.h>

int pn[10], ready[10], Flag[10], lab[10];

int arr[10], bur[10], star[10], finish[10], tat[10], wt[10], k = 0, n;

int totwt = 0, tottat = 0, time = 0;

float AVGWT, AVGTAT;

printf("Enter the Process Name, Arrival Time & Burst Time: ");

scanf("%d%d%d", &pn[i], &arr[i], &bur[i]);

Flag[i] = 0;

}

}

Trang 83

83

void Output()

{

printf("\nPName ArrTime Burtime Start TAT Finish Waiting");

for (int i = 0; i < n; i++)

{

printf("\n%d\t%d\t%d\t%d\t%d\t%d\t%d", pn[i], arr[i], bur[i],

star[i], tat[i], finish[i], wt[i]);

printf("\nAverage waitng time : %f", AVGWT);

printf("\nAverage turn around time: %f\n", AVGTAT);

}

void Check()

{

for (int i = 0; i < n; i++)

if (Flag[i] == 0 && arr[i] <= time) {

ready[k] = i;

Flag[i] = 1;

k++;

} }

int Min()

{

int min = bur[ready[0]], t = ready[0], t1 = 0;

for (int i = 1; i < k; i++)

{

if (bur[ready[i]] < min) {

min = bur[ready[i]];

t = ready[i];

t1 = i;

} }

for (int i = t1; i < k - 1; i++)

wt[i] = star[i] - arr[i];

finish[i] = star[i] + bur[i];

tat[i] = finish[i] - arr[i];

time += bur[i];

Check();

Ngày đăng: 05/06/2021, 12:49

TỪ KHÓA LIÊN QUAN

w