日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux 操作系统课程设计

發布時間:2024/8/1 linux 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux 操作系统课程设计 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Linux操作系統課程設計


中國地質大學(武漢)計算機學院計算機科學與技術專業本科生《操作系統概論》課程設計(作記錄)。

1. 課程設計要求

  • 按時參加上機實習,不得曠課、遲到、早退。
  • 每個學生需在 Linux 下用 C 語言完成六道上機實習題。
  • 每個學生需獨立完成上機實習,不得相互抄襲。如發現抄襲者和被抄襲者成績均不及格。
  • 每個學生需在實習結束一周內將實習報告和源程序提交到班級學習委員,再由學習委員打包發到老師的郵箱,用于檢查是否存在抄襲現象,郵件中請注明學生的班級和姓名。
  • 每個學生需在實習結束一周內提交紙質實習報告一份。應包括如 下內容: 1)課程設計題目 2)程序功能及設計思路 3)數據結構及算法設計 4)程序運行情況 5)編程中遇到的困難及解決方法、實習心得或良好建議。
  • 2. 評分

  • 考勤占 20%,上機驗收占 40%,實習報告占 40%。
  • 抄襲程序者和被抄襲程序者,課程設計成績不及格。
  • 抄襲報告者和被抄襲報告者,課程設計成績不及格。前六次上機每次完成一道實習題,最后兩次上機組織驗收。
  • 3. 上機時間地點

    • 17 周 (12 月 25-29 日)周二下午、周四下午、周五上午,晚上。
    • 18 周 (元月 1-5 日)周二下午、周三下午,晚上 。
    • 前 7 次地點:12 班在 313 機房(Fedora) 34 班在 413 機房(Ubuntu)
    • 最后一次上機: 12 班:18 周周四 晚上 34 班:18 周周五 晚上

    地點:313 機房(Fedora) 上午 8:30-11:30 下午 2:00-5:00 晚上 6:30-9:30

    開機時進入 Linux 系統,默認使用用戶名:suer,密碼:123456。若默認密碼登錄不了,可能是被同學修改過了,換一臺電腦使用。請同學們千萬不要修改系統登錄密碼。若有同學自己的筆記本電腦已經裝了 Linux,歡迎自帶電腦上機實習。

    4. 每次上機實習前先自學預備知識,并在作業本上編寫初步的源程序。

    5. 課程設計題目課程設計分六個實驗,具體如下

    5.1 實驗 1:作業調度

    5.1.1 實驗目的

  • 對作業調度的相關內容作進一步的理解。
  • 明白作業調度的主要任務。
  • 通過編程掌握作業調度的主要算法。
  • 5.1.2 實驗內容

    1、假設系統中可同時運行兩道作業,給出每道作業的到達時間和運行時間,如下表所示:

    作業名ABCDEFGHIJ
    到達時間0257121546810
    運行時間10203040882010127

    2、分別用先來先服務算法、短作業優先和響應比高者優先三種算法給出作業的調度順序。

    3、計算每一種算法的平均周轉時間及平均帶權周轉時間并比較不同算法的優劣。

    5.1.3 預備知識

  • 響應比=等待時間/運行時間+1

  • 周轉時間=完成時間-到達時間 帶權周轉時間=周轉時間/運行時間

  • 5.1.4 源代碼

    #include <iostream> #include <string> #include <fstream> #include <vector>using namespace std;struct Work {char name;//作業名稱double arrive;//到達時間點double run;//運行時間Work() {}Work(char n, double a, double t) :name(n), arrive(a), run(t) {}Work operator =(const Work &rhs){this->name = rhs.name;this->arrive = rhs.arrive;this->run = rhs.run;return *this;} };vector<Work> gWork;//存放所有的作業信息 double sum_turn, sum_dturn;//總的周轉時間和帶權周轉時間void ReadFile();//從txt文本中讀取作業調度信息 void Output();//輸出結果 void Dispatch();//調度過程中的數據處理 void Fcfs();//先來先服務算法 void Sjf();//短作業優先算法 void Hrf();//高響應比優先算法int main() {ReadFile();cout << "先來先服務算法:" << endl;Fcfs();cout << "短作業優先算法:" << endl;Sjf();cout << "高響應比算法:" << endl;Hrf();return 0; }//從文本中讀取作業調度信息 void ReadFile() {ifstream ifile;ifile.open("/home/jason/文檔/OS/Pro_1/data.txt");if (!ifile){cout << "文件打開失敗!" << endl;return;}char name;double arrive;double run;while (ifile >> name >> arrive >> run){gWork.push_back(Work(name, arrive, run));}ifile.close(); }//輸出結果 void Output() {cout << "作業調度順序:";for (unsigned i = 0; i < gWork.size(); ++i)cout << gWork[i].name << " ";cout << endl;cout << "平均周轉時間:" << sum_turn / gWork.size() << endl;cout << "平均帶權周轉時間:" << sum_dturn / gWork.size() << endl;cout << endl; }//調度過程中的數據處理 void Dispatch() {unsigned n = static_cast<unsigned>(gWork.size());double t1 = 0, t2 = 0;//同時運行兩個作業,設置兩個時間軸以記錄各個作業完成情況sum_turn = 0;//初始化sum_dturn = 0;for (unsigned i = 0; i < n; ++i){if (t1 > t2)//表明t1有作業時t2空閑{if (t2 < gWork[i].arrive)t2 += gWork[i].arrive;t2 = t2 + gWork[i].run;sum_turn = sum_turn + t2 - gWork[i].arrive;sum_dturn = sum_dturn + (t2 - gWork[i].arrive) / gWork[i].run;}else{if (t1 < gWork[i].arrive)t1 += gWork[i].arrive;t1 = t1 + gWork[i].run;sum_turn = sum_turn + t1 - gWork[i].arrive;sum_dturn = sum_dturn + (t1 - gWork[i].arrive) / gWork[i].run;}} }//先來先服務算法 void Fcfs() {unsigned n = static_cast<unsigned>(gWork.size());//按照來到的時間點排序,升序Work temp;for (unsigned i = 0; i < n; ++i){for (unsigned j = 0; j < n - i - 1; ++j){if (gWork[j].arrive > gWork[j + 1].arrive){temp = gWork[j + 1];gWork[j + 1] = gWork[j];gWork[j] = temp;}}}Dispatch();Output(); }//短作業優先算法 void Sjf() {unsigned n = static_cast<unsigned>(gWork.size());//按照作業運行時間的長短排序,升序Work temp;for (unsigned i = 0; i < n; ++i){for (unsigned j = 0; j < n - i - 1; ++j){if (gWork[j].run > gWork[j + 1].run){temp = gWork[j + 1];gWork[j + 1] = gWork[j];gWork[j] = temp;}}}Dispatch();Output(); }//高響應比優先算法 void Hrf() {int n = static_cast<int>(gWork.size());//按照來到的時間點排序,升序Work temp;for (int i = 0; i < n; ++i){for (int j = 0; j < n - i - 1; ++j){if (gWork[j].arrive > gWork[j + 1].arrive){temp = gWork[j + 1];gWork[j + 1] = gWork[j];gWork[j] = temp;}}}vector<Work> temp_work;for (int i = 0; i < n; ++i)temp_work.push_back(gWork[i]);gWork.clear();sum_turn = 0;//初始化sum_dturn = 0;double t1 = 0, t2 = 0;//同時運行兩個作業,設置兩個時間軸以記錄各個作業完成情況int i = 0, flag = 0;n = static_cast<int>(temp_work.size());double max_rate = 0, rate = 0;//運行第一個作業for (i = 0; i < n; ++i){//rate = wait / run + 1rate = (temp_work[n - 1].arrive - temp_work[i].arrive) / temp_work[i].run + 1;if (max_rate < rate){max_rate = rate;flag = i;}}t1 = temp_work[flag].arrive + temp_work[flag].run;sum_turn = t1 - temp_work[flag].arrive;sum_dturn = (t1 - temp_work[flag].arrive) / temp_work[flag].run;gWork.push_back(temp_work[flag]);temp_work.erase(temp_work.begin() + flag);//已經運行的作業要刪去//運行剩下的作業while (!temp_work.empty()){n = static_cast<int>(temp_work.size());flag = 0;max_rate = 0;rate = 0;if (t1 > t2)//表明t1有作業時t2空閑{//運行第二個作業if (t2 == 0){for (i = 0; i < n; ++i){//rate = wait / run + 1rate = (temp_work[n - 1].arrive - temp_work[i].arrive) / temp_work[i].run + 1;if (max_rate < rate){max_rate = rate;flag = i;}}t2 = temp_work[flag].arrive + temp_work[flag].run;sum_turn = t2 - temp_work[flag].arrive;sum_dturn = (t2 - temp_work[flag].arrive) / temp_work[flag].run;gWork.push_back(temp_work[flag]);temp_work.erase(temp_work.begin() + flag);//已經運行的作業要刪去continue;}for (i = 0; i < n; ++i){if (temp_work[i].arrive <= t2){rate = (t2 - temp_work[i].arrive) / temp_work[i].run + 1;if (max_rate < rate){max_rate = rate;flag = i;}}elsebreak;}t2 += temp_work[flag].run;sum_turn = sum_turn + t2 - temp_work[flag].arrive;//turn = finish - arrivesum_dturn = sum_dturn + (t2 - temp_work[flag].arrive) / temp_work[flag].run;gWork.push_back(temp_work[flag]);temp_work.erase(temp_work.begin() + flag);//已經運行的作業要刪去}else{for (i = 0; i < n; ++i){if (temp_work[i].arrive <= t1){rate = (t1 - temp_work[i].arrive) / temp_work[i].run + 1;if (max_rate < rate){max_rate = rate;flag = i;}}elsebreak;}t1 += temp_work[flag].run;sum_turn = sum_turn + t1 - temp_work[flag].arrive;//turn = finish - arrivesum_dturn = sum_dturn + (t1 - temp_work[flag].arrive) / temp_work[flag].run;gWork.push_back(temp_work[flag]);temp_work.erase(temp_work.begin() + flag);//已經運行的作業要刪去}}Output(); }

    數據:

    A 0 7 B 2 10 C 5 20 D 7 30 E 12 40 F 15 8 G 4 8 H 6 20 I 8 10 J 10 12

    5.2 實驗 2:磁盤調度

    5.2.1 實驗目的

  • 對磁盤調度的相關知識作進一步的了解,明確磁盤調度的原理。
  • 加深理解磁盤調度的主要任務。
  • 通過編程,掌握磁盤調度的主要算法。
  • 5.2.2 實驗內容

  • 對于如下給定的一組磁盤訪問進行調度:
  • 請求服務到達ABCDEFGHIJKLMN
    訪問的磁道號5010018020901507080101601204011030
    請求服務到達ABCDEFGHIJKLMN
  • 要求分別采用先來先服務、最短尋道優先以及電梯調度算法進行調度。
  • 要求給出每種算法中磁盤訪問的順序,計算出平均移動道數。
  • 假定當前讀寫頭在 90 號,向磁道號增加的方向移動。
  • 5.2.3 源代碼

    #include <iostream> #include <fstream> #include <vector> #include <cmath> #include <stdlib.h>using namespace std;struct Disk {char name;//請求服務到達序號int number;//訪問的磁道號Disk() {}Disk(char n, int num):name(n), number(num){}Disk operator =(const Disk& rhs){this->name = rhs.name;this->number = rhs.number;return *this;} };const int StartNum = 90;//開始磁道號為90vector<Disk> gDisk;//存儲請求服務到達的序列 vector<char> track;//磁道訪問順序 vector<int> MoveDistance;//移動距離 //int FindOrder[MaxNumber];//尋號序列 double TotalDistance;//總共尋到長度 bool direction;//方向,true為向外,false為向內void Readfile();//從txt文件中讀取請求服務信息 void Sortnum();//根據磁盤號進行排序,升序 void Fcfs();//先來先服務算法 void Sstf();//最短尋道優先算法 void Scan();//電梯調度算法,也是掃描算法 void Output();//輸出結果int main() {Readfile();Fcfs();Sstf();Scan();return 0; }void Readfile() {ifstream ifile;ifile.open("/home/jason/文檔/OS/Pro_2/data.txt");if(!ifile){cout << "文檔打開失敗!" << endl;exit(1);}char name;int num;while(ifile >> name >> num)gDisk.push_back(Disk(name, num));ifile.close(); } void Sortnum() {int i(0), j(0);int n = static_cast<int>(gDisk.size());Disk temp;for(i = 0; i < n; ++i){for(j = 0; j < n - i - 1; ++j){if(gDisk[j].number > gDisk[j + 1].number){temp = gDisk[j + 1];gDisk[j + 1] = gDisk[j];gDisk[j] = temp;}}} }//先來先服務算法 void Fcfs() {int tempNum = StartNum;//尋道當前所在磁道號track.clear();MoveDistance.clear();int n = static_cast<int>(gDisk.size());//提出的申請數for(int i = 0; i < n; ++i){MoveDistance.push_back(abs(gDisk[i].number - tempNum));track.push_back(gDisk[i].name);tempNum = gDisk[i].number;}cout << "###############先來先服務算法:###############" << endl;Output(); } //最短尋道優先算法 void Sstf() {int tempNum = StartNum;//尋道當前所在磁道號track.clear();MoveDistance.clear();vector<Disk> temp_disk;int MinNum = 9999;//最短尋道數int flag = 0;//做標記int n = static_cast<int>(gDisk.size());//提出的申請數for(int i = 0; i < n; ++i){temp_disk.push_back(gDisk[i]);}while(!temp_disk.empty()){MinNum = 9999;int num = 0;//臨時存儲尋道數flag = 0;n = static_cast<int>(temp_disk.size());for(int i = 0; i < n; ++i){num = abs(temp_disk[i].number - tempNum);if(MinNum > num){MinNum = num;flag = i;}}track.push_back(temp_disk[flag].name);//記錄第一個尋道號tempNum = temp_disk[flag].number;MoveDistance.push_back(MinNum);//記錄第一個尋道距離temp_disk.erase(temp_disk.begin() + flag);//已訪問的刪去}cout << "###############最短尋道優先服務算法:###############" << endl;Output(); }//電梯調度算法 void Scan() {track.clear();MoveDistance.clear();//按磁道號進行排序,升序Sortnum();int n = static_cast<int>(gDisk.size());vector<Disk> temp_disk;for(int i = 0; i < n; ++i)temp_disk.push_back(gDisk[i]);int tempNum = StartNum;int flag(0);for(int i = 0; i < n; ++i){if(temp_disk[i].number < tempNum)continue;else{flag = i;break;}}//最開始是向外尋道for(int i = flag; i < n; ++i){track.push_back(temp_disk[i].name);MoveDistance.push_back(temp_disk[i].number - tempNum);tempNum = temp_disk[i].number;}//然后向里尋道for(int i = flag - 1; i >= 0; --i){track.push_back(temp_disk[i].name);MoveDistance.push_back(tempNum - temp_disk[i].number);tempNum = temp_disk[i].number;}cout << "###############電梯調度算法:###############" << endl;Output();} //輸出結果 void Output() {int n = static_cast<int>(gDisk.size());//提出的申請數TotalDistance = 0;cout << "尋道序號:" << " " << "尋道長度:"<<endl;for(int i = 0; i < n; ++i){cout << track[i] << " "<< MoveDistance[i] << endl;TotalDistance += MoveDistance[i];}cout << "平均尋道長度:" << (static_cast<double>(TotalDistance) / n) << endl;cout << endl; }

    數據:

    A 30 B 50 C 100 D 180 E 20 F 90 G 150 H 70 I 80 J 10 K 160 L 120 M 40 N 110

    5.3 實驗 3:熟悉 linux 文件系統調用

    5.3.1 實驗目的

  • 掌握 linux 提供的文件系統調用的使用方法;
  • 熟悉文件系統的系統調用用戶接口;
  • 了解操作系統文件系統的工作原理和工作方式。
  • 5.3.2 實驗內容

    使用文件系統調用編寫一個文件工具 filetools,使其具有以下功能:

    1.創建新文件 2.寫文件 3.讀文件 4.修改文件權限 5.查看當前文件權限 0.退出

    提示用戶輸入功能號,并根據用戶輸入的功能選擇相應的功能。 文件按可變記錄文件組織,具體記錄內容自行設計。

    5.3.3 預備知識

    用戶在針對文件進行操作之前時一定要先打開它,這是由于系統需要根據用戶提供的參數來查找文件 的目錄項,并由目錄項找到文件的磁盤 i 結點,再將它調到內存 i 結點,才能建立用戶進程與該文件之間的聯系。

    同樣,在文件操作完畢后要關閉文件,以切斷用戶進程與文件的聯系,釋放相關資源。

    Open 系統調用

    int open(const char *path, int flags); int open(const char *path, int flags,mode_t mode);

    一般情況下使用兩個參數的格式,只有當打開的文件不存在時才使用 3 個參數的格式。參數:

    • Path 指向所要打開的文件的路徑名指針。
    • Flag 標志參數,用來規定打開方式,必須包含以下 3 個之一:
      • O_RDONLY 只讀方式
      • O_WRONLY 只寫方式
      • O_RDWR 讀寫方式
    • 利用按位邏輯或“|”對下列標志進行任意組合:
      • O_CREAT 如果文件不存在則創建該文件,若存在則忽略。
      • O_TRUNC 如果文件存在則將文件長度截為 0,屬性和所有者不變。
      • C_EXECL 如果文件存在且O_CREAT 被設置則強制 open 調用失敗。
      • O_APPEND 每次寫入時都從文件尾部開始。
    • Mode 是文件的訪問權限,分為文件所有者、文件用戶組和其他用戶。

    Close 系統調用

    對于一個進程來說可以同時打開的文件是有限的,為了使文件標識符能夠及時釋放,系統必須提供關閉文件操作。

    Int close(int fd)
    • Fd 為打開文件時系統返回的文件標識符。
    • 系統執行該系統調用時,根據 fd 值在該進程的進程打開文件表中找到 fd 標識,根據指針找到系統打開 文件表,再找到內存i 結點表中相應的 i 結點,對其i_count 進行減 1 操作, 然后釋放系統打開文件表中的表項和進程打開文件表的表項。
    • 結果:調用成功返回 0。

    5.3.4 源代碼

    #include <string.h> #include <unistd.h> #include <stdio.h> #include <fcntl.h>//flag標志參數 #include <sys/stat.h>//文件權限標志位 #include <sys/types.h>#define MAX 10000 int fd;//打開文件時系統返回的文件標識符 char *FileName;//要創建的文件名void Menu();//顯示主界面菜單 void CreateFile();//創建新文件 void WriteFile();//寫文件 void ReadFile();//讀文件 void ModifyPermission();//修改文件權限 void ShowPermission();//查看文件權限int main() {int select = 0;printf("########歡迎使用文件工具FileTools#######\n");while(1){Menu();scanf("%d", &select);switch (select) {case 0:close(fd);return 0;case 1:CreateFile();break;case 2:WriteFile();break;case 3:ReadFile();break;case 4:ModifyPermission();break;case 5:ShowPermission();break;default:printf("輸入有誤!請重新輸入:\n");}}return 0; }void Menu() {printf("########################################\n");printf("########1.創建新文件####################\n");printf("########2.寫文件########################\n");printf("########3.讀文件########################\n");printf("########4.修改文件權限##################\n");printf("########5.查看文件權限##################\n");printf("########0.安全退出######################\n");printf("請選擇:\n"); }//創建新文件 void CreateFile() {char name[32];printf("請輸入要創建的文件名:\n");scanf("%s", name);FileName = name;//O_RDWR:讀寫方式//O_TRUNC:如果文件存在則將文件長度截為0,屬性和所有者不變//O_CREAT:如果文件不存在則創建該文件,若存在則忽略fd = open(FileName, O_RDWR|O_TRUNC|O_CREAT, 0750);if(fd < 0)perror("Create");else{printf("文件創建成功!\n");printf("fd =%d\n", fd);//打印文件的fdclose(fd);//關閉文件} }//寫文件 void WriteFile() {char name[32];printf("請輸入要寫入信息的文件名:\n");scanf("%s", name);FileName = name;char buffer[MAX];//存取寫入的信息fd = open(FileName, O_WRONLY|O_APPEND);if(fd < 0){perror("Write");return;}printf("請輸入要寫入的信息:\n");int num = read(0,buffer, MAX);//讀取輸入信息,0表示標從鍵盤標準輸入write(fd, buffer, num);//將讀入的信息寫入文件printf("文件寫入成功!\n");close(fd);//關閉文件 }//讀文件 void ReadFile() {char buffer[MAX];char name[32];printf("請輸入要讀取的文件名:\n");scanf("%s", name);FileName = name;fd = open(FileName,O_RDONLY);if(fd < 0){perror("Wrong");return;}int num = read(fd, buffer, MAX);printf("\n");write(1, buffer, num);//向顯示屏輸出,1表示標準輸出printf("\n文件讀取成功!\n");close(fd); }//修改文件權限 void ModifyPermission() {char name[32];printf("請輸入要修改權限的文件名:\n");scanf("%s", name);FileName = name;fd = open(FileName, O_RDONLY);if(fd < 0){perror("Modify");return;}printf("0.所有者用戶讀寫執行\n");printf("1.所有者用戶只可讀\n");printf("2.所有者用戶只可寫\n");printf("3.所有者用戶只可執行\n");printf("4.用戶組讀寫執行\n");printf("5.用戶組只可讀\n");printf("6.用戶組只可寫\n");printf("7.用戶組只可執行\n");printf("請選擇0-7:");int select;scanf("%d", &select);switch (select){case 0:chmod(FileName, S_IRWXU);break;//文件所有者讀寫執行權限case 1:chmod(FileName, S_IRUSR);break;//文件所有者讀權限case 2:chmod(FileName, S_IWUSR);break;//文件所有者寫權限case 3:chmod(FileName, S_IXUSR);break;//文件所有者執行權限case 4:chmod(FileName, S_IRWXG);break;//文件所屬組讀寫執行權限case 5:chmod(FileName, S_IRGRP);break;//文件所屬組讀權限case 6:chmod(FileName, S_IWGRP);break;//文件所屬組寫權限case 7:chmod(FileName, S_IXGRP);break;//文件所屬執行權限default:printf("錯誤選擇!\n");}close(fd); }//查看文件權限 void ShowPermission() {//stat();獲取文件信息char name[32];printf("請輸入要修改權限的文件名:\n");scanf("%s", name);FileName = name;char *path = "/bin/ls";char *argv[4] = {"ls", "-l", FileName, NULL};execv(path, argv); }

    5.4 實驗 4:進程管理

    5.4.1 實驗目的

  • 理解進程的概念,明確進程和程序的區別。
  • 理解并發執行的實質。
  • 掌握進程的同步、撤銷等進程控制方法。
  • 5.4.2 實驗內容

    • 父進程使用系統調用 pipe() 建立一個管道,然后使用系統調用 fork() 創建兩個子進程:子進程1和子進程2。

    • 子進程1每隔1秒通過管道向子進程2發送數據:I send message x times.(x 初值為1,以后發送一 次后做加一操作)子進程 2 從管道讀出信息,并顯示在屏幕上。

    • 父進程用系統調用 signal() 來捕捉來自鍵盤的中斷信號(即按Ctrl+C 鍵);當捕捉到中斷信號后,父進程用系統調用 kill() 向兩個子進程發出信號,子進程捕捉到信號后分別輸出如下信息后終止: Child Process 1 is killed by Parent! Child Process 2 is killed by Parent!。

    • 父進程等待兩個子進程終止后,釋放管道并輸出如下的信息后終止 Parent Process is Killed!。

    5.4.3 源代碼

    #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <signal.h>#include <sys/types.h> #include <sys/wait.h>pid_t child1, child2;//兩個子進程 int fd[2]; void SignalHandler1(int iSignNo);//信號處理 void SignalHandler2(int iSignNo);int main() {int Count = 1;char buffer[40];char info[40];pid_t getpid();printf("Process Parent PID:%d\n", getpid());//創建無名管道,只能在父子或兄弟進程間通信//fd[0]只能用于讀,fd[1]只能用于寫if(pipe(fd) < 0){printf("管道創建失敗!\n");return -1;}//設置軟中斷信號SIGINT,終端輸入Ctrl+C,進程終止signal(SIGINT, SignalHandler1);//創建子進程1,2child1 = fork();if(child1 == 0) //子進程1{printf("Child Process 1 PID:%d\n", getpid());//設置忽略信號,如果不設置,在子進程運行過程直接Ctrl+C,會造成進程終止,//產生僵尸進程,因此需要在子進程中屏蔽,等子進程被父進程kill之后,再在//父進程中Ctrl+C使進程完全結束,就不會產生僵尸進程了signal(SIGINT, SIG_IGN);//設置信號SIGUSR1signal(SIGUSR1, SignalHandler2);while(1){close(fd[0]);sprintf(info, "I send message %d times", Count);//管道長度受到限制,管道寫滿時寫入操作將被阻塞,直到管道中的數據被讀取write(fd[1], info, 30);//發送數據至管道數據++Count;//計數器+1sleep(1);//睡眠1s}}else if(child1 > 0)//返回父進程{child2 = fork(); //父進程創建子進程2if(child2 == 0) //子進程2{printf("Child Process 2 PID:%d\n", getpid());//設置忽略信號signal(SIGINT, SIG_IGN);//設置信號SIGUSR1signal(SIGUSR2, SignalHandler2);while(1){close(fd[1]);//當數據被讀取后,數據將自動被管道清除//接受管道數據read(fd[0], buffer, 40);//顯示管道數據printf("%s\n", buffer);}}else //返回父進程{//等待子進程1,2退出waitpid(child1, NULL, 0);//printf("Child Process 1 is over!\n");waitpid(child2, NULL, 0);//printf("Child Process 2 is over!\n");//關閉管道close(fd[0]);close(fd[1]);printf("Parent Process is Killed!\n");}}return 0; }void SignalHandler1(int iSignNo) {printf("\nParent recive signal Ctrl+C\n");if(iSignNo == SIGINT)//傳遞SIGUSR信號給子進程{//SIGUSR1和SIGUSR2是用戶自定義信號,進程終止kill(child1, SIGUSR1);kill(child2, SIGUSR2);} }void SignalHandler2(int iSignNo) {close(fd[0]);close(fd[1]);if(child1 == 0 && iSignNo == SIGUSR1){printf("Child Process 1 is killed by Parent!\n");exit(0);}if(child2 == 0 && iSignNo == SIGUSR2){printf("Child Process 2 is killed by Parent!\n");exit(0);} }

    5.5 實驗 5:請求分頁系統中的置換算法

    5.5.1 實驗目的

  • 了解虛擬存儲技術的特點;
  • 掌握請求分頁系統的頁面置換算法。
  • 5.5.2 實驗內容

    1、通過如下方法產生一指令序列,共 320 條指令。

    A. 在[0,319]的指令地址之間隨機選取一起點 M;
    B. 順序執行一條指令,即執行地址為 M+1 的指令;
    C. 在前地址[0,M+1]中隨機選取一條指令并執行,該指令的地址為 M1;
    D. 順序執行一條指令,其地址為 M1+1;
    E. 在后地址[M1+2,319]中隨機選取一條指令并執行,該指令的地址為 M2;
    F. 順序執行一條指令,其地址為 M2+1;
    G. 重復A—F,直到執行 320 次指令。

    2、指令序列變換成頁地址流,設 :

    (1)頁面大小為1K;
    (2) 用戶內存容量為 4 頁到 32 頁,步長為 1;
    (3)用戶虛存容量為 32K。在用戶虛存中,按每頁存放10 條指令排列虛存地址,即 320 條指令在虛存中的存放方式為: 第0條—第9條指令為第0頁(對應虛存地址為[0,9]);第10條—第19條指令為第1頁(對應虛存地址為[10,19]) ; …………………… 第310條—第319條指令為第31頁(對應虛存地址為[310,319]) ;

    按以上方式,用戶指令可組成 32 頁。

    3、計算并輸出下述各種算法在不同內存容量下的命中率。

    A. 先進先出(FIFO)頁面置換算法
    B. 最近最久未使用(LRU)頁面置換算法–最近最少使用算法
    C. 最佳(Optimal)頁面置換算法

    5.5.3 源代碼

    #include<iostream> #include<ctime> #include<cstdlib>using namespace std;int N = 3;//內存 int Process[320];//頁面隊列 int Memory[32];//塊數 int OPTQueue[320];//OPT算法的隊列 int FIFOQueue[320];//FIFO算法隊列 int LRUQueue[320];//LRU算法隊列 int ttime[320];//設置的一個時間標志,FIFO算法時判斷哪個是最先進來的 int flag[320];//設置一個標志,LUR算法判斷哪個是最近最久未使用的 int ProcessNum;//頁面數 int id[320];//320個進程序列 int address[320];//zhilingzidian int Size = 0; int Randf(int l, int r) { return (rand() % (r - l + 1) + l); }void CreateProcess() {srand(static_cast<unsigned>(time(NULL)));Size = 0;for (int i = 0;i < 64;++i){int m = Randf(0, 319);id[Size++] = m + 1;m = Randf(0, m + 1);id[Size++] = m;id[Size++] = m + 1;m = Randf(m + 2, 319);id[Size++] = m;id[Size++] = m + 1;}cout << "指令序列:" << endl;for (int i = 0;i < Size;++i)cout << id[i] << " ";cout << endl; }//OPT算法找到最長未使用的 int longest(int start) {int i;int count[320];for (int i = 0;i < 320;++i)count[i] = 0;for (int j = 0;j < N;++j){for (i = start + 1;i < ProcessNum;i++){if (Memory[j] != OPTQueue[i])count[j]++;if (Memory[j] == OPTQueue[i])break;}}int ti = -1, mmax = -1;for (int i = 0;i < N;++i){if (mmax < Memory[i]){mmax = Memory[i];ti = i;}}return ti; } //OPT 算法 void OPT() {int i, j, k;int num = N;for (i = 0;i < ProcessNum;i++){OPTQueue[i] = Process[i];}for (i = 0;i < N;i++){Memory[i] = OPTQueue[i];}for (i = N;i < ProcessNum; ++i){for (j = 0;j < N;j++){if (Memory[j] == OPTQueue[i])break;}if (j == N){k = longest(i);Memory[k] = OPTQueue[i];num++;}}cout << "命中次數:" << ProcessNum - num << endl;float str;str = (float)(ProcessNum - num) / ProcessNum;cout << "命中率=" << str * 100 << "%" << endl; } //FIFO算法找到最早進來的那個 int MaxTime() {int ti = -1, mmin = 100000;for (int i = 0;i<N;++i){if (mmin > ttime[i]){mmin = ttime[i];ti = i;}}return ti; } //FIFO算法 void FIFO() {int i, j, k;int num = N;for (i = 0;i<ProcessNum;i++){FIFOQueue[i] = Process[i];}for (i = 0;i<N;i++){Memory[i] = FIFOQueue[i];ttime[i] = i;}for (i = N;i<ProcessNum;i++){for (j = 0;j<N;j++){if (Memory[j] == FIFOQueue[i])break;}if (j == N){k = MaxTime();ttime[k] = i;Memory[k] = FIFOQueue[i];num++;}}cout << "命中次數:" << ProcessNum - num << endl;float str;str = (float)(ProcessNum - num) / ProcessNum;cout << "命中率=" << str * 100 << "%" << endl; } //LRU算法找到最近最久未使用的 int MinFlag() {int ti = -1, mmin = 100000;for (int i = 0;i < N;++i){if (mmin > flag[i]){mmin = flag[i];ti = i;}}return ti; } //LRU算法 void LRU() {int i, j, k;int num = N;for (i = 0;i<ProcessNum;i++){LRUQueue[i] = Process[i];}for (i = 0;i<N;i++){Memory[i] = LRUQueue[i];flag[i] = i;}for (i = N;i<ProcessNum;i++){for (j = 0;j<N;j++){if (Memory[j] == LRUQueue[i]){flag[j] = i;break;}}if (j == N){k = MinFlag();flag[k] = i;Memory[k] = LRUQueue[i];num++;}}cout << "命中次數:" << ProcessNum - num << endl;float str;str = (float)(ProcessNum - num) / ProcessNum;cout << "命中率=" << str * 100 << "%" << endl; } int main() {int i;while (N != 0) {cout << "-------------------頁面置換算法-------------------------" << endl;cout << "進程數:320" << endl;ProcessNum = 320;CreateProcess();//生成320個指令序列cout << "指令序列生成完畢" << endl << endl;for (i = 0;i < ProcessNum; ++i)Process[i] = id[i] / 10;N = 4;while (N != 1 && N != 0) {cout << "請輸入內存容量:[4-32]\n1 for 重新生成指令序列\n0 for 退出程序" << endl;cin >> N;if (N == 0 || N == 1)break;cout << "OPT最佳置換算法" << endl;OPT();cout << endl;cout << "FIFO先進先出頁面置換算法" << endl;FIFO();cout << endl;cout << "LRU最近最久未使用置換算法" << endl;LRU();cout << endl;}}return 0; }

    5.6 實驗 6:進程通信

    5.6.1 實驗目的

  • 理解管道機制、消息緩沖隊列、共享存儲區機制進行進程間的通信;
  • 理解通信機制。
  • 5.6.2 實驗內容

    編寫一主程序可以由用戶選擇如下三種進程通信方式:

  • 使用管道來實現父子進程之間的進程通信:子進程向父進程發送自己的進程標識符,以及字符串 is sending a message to parent。父進程則通過管道讀出子進程發來的消息,將消息顯示在屏幕上,然后終止。

  • 使用消息緩沖隊列來實現 client 進程和 server 進程之間的通信:server 進程先建立一個關鍵字為 SVKEY(如75)的消息隊列,然后等待接收類型為REQ (例如 1)的消息;在收到請求消息后,它便顯示字符串 serving for client 和接收到的 client 進程的進程標識數,表示正在為 client 進程服務;然后再向 client 進程發送應答消息, 該消息的類型是 client 進程的進程標識數,而正文則是 server 進程自己的標識 ID。client 進程則向消息隊列發送類型為 REQ 的消息(消息的正文為自己的進程標識 ID) 以取得 sever 進程的服務,并等待 server 進程發來的應答;然后顯示字符串 receive reply from 和接收到的 server 進程的標識 ID。

  • 使用共享存儲區來實現兩個進程之間的進程通信:進程 A 創建一個長度為 512 字節的共享內存,并顯示寫入該共享內存的數據;進程 B 將共 享內存附加到自己的地址空間,并向共享內存中寫入數據。

  • 5.6.3 源代碼

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <wait.h>#include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> #include <sys/msg.h>struct msgform {long mtype;char mtext[250]; }msg;int msgqid, pid, *pint; void Menu(); void UsePipe();//使用管道實現父子進程之間的進程通信 void MessageDeque();//使用消息緩沖隊列實現C/S進程之間的通信 void Client(); void Server(); void ShareMemory();//使用共享存儲區來實現兩個進程之間的進程通信 void A(); void B(); int main() {printf("######歡迎使用“進程通信系統”######\n");while (1) {Menu();int select = 0;scanf("%d", &select);switch (select) {case 0:return 0;case 1:UsePipe();break;case 2:MessageDeque();break;case 3:ShareMemory();break;default:printf("您輸入的選擇無效,請重新輸入!\n");break;}}return 0; }void Menu() {printf("##################################\n");printf("1.管道實現父子進程通信\n");printf("2.消息隊列C/S進程通信\n");printf("3.共享存儲區的進程通信\n");printf("0.安全退出\n");printf("請選擇通信方式:\n");}void UsePipe() {int fd[2];//fd[0]用于讀,fd[1]用于寫pid_t child;pid_t parent = getpid();printf("Process Parent PID:%d\n", parent);if(pipe(fd) < 0){printf("管道創建失敗!\n");return;}child = fork();if(child == 0)//進入子進程{char info[40];close(fd[0]);sprintf(info, "PID:%d is sending a message to parent", getpid());write(fd[1], info, 40);sleep(1);//休眠1sexit(0);}else //返回主進程{close(fd[1]);char buffer[40];read(fd[0], buffer, 40);printf("%s\n", buffer);close(fd[0]);close(fd[1]);waitpid(child, NULL, 0);printf("Process child is over!\n");} }void MessageDeque() {int i = 0;while((i = fork()) == -1);//創建進程1if(!i)Server();while((i = fork()) == -1);//創建進程2if(!i)Client();wait(0);wait(0); } void Client() {msgqid = msgget(75, 0400);//打開75消息隊列pid = getpid();pint = (int *)msg.mtext;*pint = pid;msg.mtype = 1;//消息類型為1msgsnd(msgqid, &msg, sizeof(int), 0);//發送消息msgrcv(msgqid, &msg, 250, pid, 0);//接收消息printf("(client):reveice reply from pid=%d\n", *pint);exit(0); } void Server() {msgqid = msgget(75, 0400|IPC_CREAT);//創建75消息隊列msgrcv(msgqid, &msg, 250, 1, 0);//接收消息//把正文的內容傳給pint,并強制轉換類型pint = (int *)msg.mtext;pid = *pint;//獲得client進程標識數printf("(server):serving for client pid=%d\n", pid);msg.mtype = pid;//消息類型為client*pint = getpid();msgsnd(msgqid, &msg, sizeof(int), 0);//發送消息exit(0); }void ShareMemory() {//需要包含頭文件<sys/types.h>,<sys/ipc.h>,<sys/shm.h>//shmget函數創建或打開一個新區,返回一個共享存儲區ID//int shmget(key_t key, int size, int shmflg)//key:共享存儲區的名字,關鍵字,int型//size:共享存儲區的大小(以字節計)//shmflg:用戶設置的標志,如IPC_CREAT//IPC_CREAT 表示若系統中尚無指名的共享存儲區,//則由核心建立一個共享存儲區;如系統中已有共享存儲區,便忽略IPC_CREAT//成功返回共享內存的標識符;不成功返回-1,errno 儲存錯誤原因。pid_t a = 0;while ((a = fork()) == -1);if(!a)A();while ((a = fork()) == -1);if(!a)B();wait(0);wait(0); } void A() {int shmid = shmget(100, 512, 0777|IPC_CREAT);//創建共享存儲區char *addr = shmat(shmid, 0, 0);//獲取首地址printf("get:%s\n", addr);if(shmdt(addr) == 0)printf("A斷開鏈接成功!\n");exit(0); } void B() {int shmid = shmget(100, 512, 0777|IPC_CREAT);//打開共享存儲區char *message[] = {"B writes something!"};char *addr = shmat(shmid, 0, 0);//獲得共享存儲區首地址memset(addr, '\0', 512);//addr內容初始化strncpy(addr, message[0], 512);//向內存中寫信息if(shmdt(addr) == 0)printf("B斷開鏈接成功!\n");exit(0); }

    6. 課程設計報告及源代碼

    https://download.csdn.net/download/diligent_lee/85015283

    總結

    以上是生活随笔為你收集整理的Linux 操作系统课程设计的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    久久国产一区二区三区 | 久久激情五月婷婷 | 午夜精品福利在线 | av在线免费播放网站 | 国产免费久久精品 | 婷婷四房综合激情五月 | 久久看视频 | 久久久久久久国产精品 | 亚洲理论片在线观看 | 中文字幕久久精品一区 | 午夜性生活片 | 欧美老人xxxx18 | 成人av电影免费观看 | www.色的| 精品a级片| 午夜av免费观看 | 午夜男人影院 | 四虎国产精品永久在线国在线 | 日韩精品一区二区三区在线播放 | 免费av 在线 | 成年人天堂com | 国产欧美久久久精品影院 | 国内精品久久久久久久久久久久 | 亚洲一区精品二人人爽久久 | 激情五月婷婷丁香 | 337p日本欧洲亚洲大胆裸体艺术 | 国产美女精品 | 免费视频你懂得 | 999久久久精品视频 日韩高清www | 免费视频一级片 | 欧美精品一二三 | 天天干婷婷 | 最新av网址大全 | 免费瑟瑟网站 | 久久激五月天综合精品 | 视频福利在线 | 在线视频 91| 在线看v片成人 | 日韩大片在线免费观看 | 亚洲精品一区中文字幕乱码 | 国产黄色a | 99热精品在线 | 日韩精品免费在线视频 | 国产精品人人做人人爽人人添 | 人人草在线视频 | 免费在线国产精品 | 中文字幕影视 | 久久久国产精品亚洲一区 | 福利网在线 | 视频一区二区国产 | 免费色视频在线 | av成人动漫 | 在线韩国电影免费观影完整版 | 国产精品18久久久久久首页狼 | av东方在线| 色偷偷888欧美精品久久久 | 国产精品一区二区三区视频免费 | 免费在线国产视频 | 在线视频福利 | 久久69精品 | 国产中文字幕视频 | 亚洲免费av片 | 在线看欧美 | 欧美成人a在线 | 国产精品自产拍在线观看桃花 | 久久99国产精品视频 | 天天干天天拍天天操天天拍 | 精品久久久久久亚洲综合网站 | 午夜手机电影 | 最近中文字幕免费av | 久久久精品网站 | 久久国产精品99精国产 | 狠狠的干 | 天天做天天看 | 中文字幕一区二区三区四区 | 亚洲免费av片 | 91最新国产 | 97人人模人人爽人人喊中文字 | 最近中文字幕免费av | 99久久99久久精品国产片 | 草莓视频在线观看免费观看 | 国产成人精品一区二区 | 国产自产在线视频 | a色视频 | 精品乱码一区二区三四区 | 精品一区电影国产 | 久久成人精品视频 | av五月婷婷 | 在线观看91网站 | 韩国av一区二区 | 国产美女精品视频免费观看 | 中文字幕电影高清在线观看 | 久久 国产一区 | 欧美在线视频第一页 | 久草视频视频在线播放 | 精品一区二三区 | 国产精品久久久久久av | 国产色拍拍拍拍在线精品 | 国产精品成久久久久三级 | 精品国产乱码久久久久久1区2匹 | 午夜精品一区二区三区四区 | 一区 二区电影免费在线观看 | 99热最新地址 | 亚洲国产av精品毛片鲁大师 | 在线黄色观看 | 热久久在线视频 | 丰满少妇高潮在线观看 | 久久久免费看片 | 2018好看的中文在线观看 | 久久精品国产一区二区电影 | 久久精品亚洲综合专区 | 国产精品久久久777 成人手机在线视频 | 一二三精品视频 | 麻豆精品视频在线 | 亚洲精品国产精品国自产在线 | 欧美日韩一区二区免费在线观看 | 日韩欧美网站 | 免费国产在线视频 | 国产一区自拍视频 | 性色xxxxhd | 国产成在线观看免费视频 | 午夜精品久久久久久99热明星 | 亚洲精品视频在线观看免费 | 911免费视频 | 日韩欧美第二页 | 女女av在线| 国产黄色大片免费看 | 久久999精品 | 天天干天天怕 | 综合国产在线观看 | 亚洲色影爱久久精品 | 二区三区精品 | 色老板在线视频 | 精品一区欧美 | 欧美aaaxxxx做受视频 | 狠狠色狠狠色综合系列 | 91日韩精品视频 | 麻豆91精品视频 | 日韩精品视频在线观看网址 | 91视频网址入口 | 国产精品视频永久免费播放 | 激情片av | 日韩伦理片一区二区三区 | 人人看人人爱 | 亚洲黄色网络 | 国产成人精品一区在线 | 亚洲午夜久久久综合37日本 | 国产剧情一区二区 | 国产成人精品av | 国产精品18久久久久久首页狼 | 一区二区视频欧美 | 成人免费观看完整版电影 | 成人一区二区三区中文字幕 | 夜夜看av | 国产特级毛片aaaaaa | 国产成人精品福利 | 在线成人一区 | 亚洲艳情 | 国产中文字幕视频在线观看 | 国产在线探花 | 亚洲精品乱码久久久一二三 | 麻豆传媒在线免费看 | 亚洲电影图片小说 | 黄色日批网站 | 欧美一级片免费 | 欧美性大胆 | 日韩欧美xxx | www.五月婷婷 | 婷婷夜夜 | 99视频导航 | 色综合天天综合 | 黄色av免费 | 国产精品一区二区三区在线免费观看 | 99精品视频观看 | 久保带人 | 91av成人| 色综合亚洲精品激情狠狠 | 久久av电影 | 综合黄色网 | 91av电影网| 久久麻豆视频 | 成人精品福利 | 久久国产精品免费一区 | 综合色站 | 亚洲女欲精品久久久久久久18 | 国产一级性生活 | 免费av片在线 | 中文字幕在线看视频国产 | 国产精品一区在线观看你懂的 | 91精品999 | 国产一区二区三区网站 | 1024在线看片 | 国产成人一区二区三区在线观看 | 91丝袜美腿 | 久久精品中文字幕 | a v在线视频| 高清在线一区二区 | 国产成人精品国内自产拍免费看 | 天天摸日日操 | 国产护士hd高朝护士1 | 最新国产精品拍自在线播放 | 在线性视频日韩欧美 | 欧美美女视频在线观看 | 国产中文字幕国产 | 精品久久电影 | 免费在线观看av网站 | 久久久久国产视频 | 国产精品久久久久久久久久久免费 | 最近2019中文免费高清视频观看www99 | 欧美精品亚洲精品 | 国产在线观看a | 成人av电影免费 | 国产精品成人一区二区三区吃奶 | 天堂在线视频中文网 | 亚洲国产经典视频 | www91在线观看 | 免费a v观看 | 久久免费视频一区 | 欧美日韩一区三区 | 国产视频1 | 麻豆精品视频在线 | 日日躁你夜夜躁你av蜜 | 成人黄色影片在线 | 亚洲在线高清 | 日本久久免费视频 | 中文字幕资源在线观看 | 一区中文字幕在线观看 | 国产中文字幕亚洲 | 青青草久草在线 | 久久精品艹 | 91丨九色丨勾搭 | 成人一级免费电影 | 97超碰在线资源 | 18做爰免费视频网站 | 国产不卡在线视频 | 能在线观看的日韩av | 91精品国产99久久久久久红楼 | 五月婷婷激情六月 | 婷婷丁香在线视频 | 国产精品专区在线 | 久久久久久久久久网 | 狠狠gao | 国产精品1区| 成人av电影免费在线播放 | 亚洲一区二区视频在线播放 | 亚洲桃花综合 | 欧美激情视频三区 | 91在线播放综合 | 精品久久久久久久久久久院品网 | 亚洲狠狠婷婷综合久久久 | 黄色成人毛片 | 波多野结衣在线播放一区 | av中文在线观看 | 日韩videos| 911亚洲精品第一 | 在线免费观看一区二区三区 | 日韩毛片在线一区二区毛片 | 成人av在线直播 | 久久免费看毛片 | 欧美在线视频一区二区三区 | 久久99亚洲热视 | 91日韩免费 | 欧美日韩不卡在线观看 | 在线观看岛国片 | 欧美专区日韩专区 | 亚洲va综合va国产va中文 | 久久久五月天 | 精品电影一区二区 | 亚洲精品乱码久久久久久蜜桃91 | 日韩理论片在线 | 精品国产乱码一区二区三区在线 | 久久国产精品99精国产 | 久草在线中文视频 | 在线国产中文字幕 | 精品久久久久久国产偷窥 | 亚州av网站大全 | 黄色三级免费观看 | 欧美视频在线二区 | 97在线精品 | 色在线免费 | 国产精品自在线拍国产 | 在线精品视频免费播放 | 激情五月播播久久久精品 | 激情在线网址 | 91麻豆国产福利在线观看 | 久久久高清免费视频 | 国产美女精品视频 | 欧美一级免费片 | 国产精品18久久久久久久久 | 久久精选 | 国产一区影院 | 日韩免费看的电影 | 国产精品不卡在线观看 | 久久人操| 国产一级免费av | 91精品久久久久久粉嫩 | 久久精品中文字幕少妇 | 美女黄视频免费看 | 91色在线观看视频 | 成人国产精品 | 亚洲综合情 | 91喷水 | 欧美日韩精品影院 | 精品国产人成亚洲区 | 国产成人精品午夜在线播放 | 国产黄色一级片 | 亚洲男男gaygay无套 | www.com操| 精品超碰 | www四虎影院 | 麻豆影视网| 亚洲精品www久久久久久 | 9免费视频 | 中文字幕资源网 国产 | 99精品福利视频 | 青草视频在线免费 | av大全在线免费观看 | 九七视频在线 | 国产成人在线观看 | 97国产情侣爱久久免费观看 | 久草精品视频在线观看 | 国产福利资源 | 国产成人综合精品 | 久久国产精品一国产精品 | 亚洲精品午夜久久久久久久 | 狠狠狠狠狠狠 | 国产午夜精品一区二区三区嫩草 | 丁香视频全集免费观看 | 中文字幕一区二区三区久久 | 亚洲精品男人的天堂 | 久久午夜国产 | 干干日日| 一区二精品 | 91免费日韩 | 久久精品高清视频 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 国产永久免费 | 在线精品视频免费播放 | 亚洲视频 视频在线 | 成人aaa毛片| 91理论片午午伦夜理片久久 | 国产精品一区在线观看你懂的 | 黄网站免费久久 | 激情久久久久久久久久久久久久久久 | 美女久久一区 | 国产成人精品一区二区三区 | 国产精品久久久久国产精品日日 | 日韩精品一区二区三区免费观看视频 | 欧美国产在线看 | 久久成电影 | 国产精品va在线 | 国产99久久| 欧美成人免费在线 | av电影在线观看完整版一区二区 | 日韩在线精品视频 | 久久视频这里有久久精品视频11 | 日韩网站在线免费观看 | 正在播放一区二区 | 91精品啪在线观看国产线免费 | 中文字幕av日韩 | 久久这里只有精品23 | 午夜男人影院 | 日韩特级毛片 | 成人性生交大片免费看中文网站 | 日本大尺码专区mv | 99热官网 | 日日夜精品 | 欧美疯狂性受xxxxx另类 | av东方在线 | 视频在线播放国产 | 99久久精品免费看国产一区二区三区 | 午夜视频免费 | 精品视频在线免费观看 | 国产专区第一页 | 亚洲成年人在线播放 | 成人在线观看免费 | 久久精品久久国产 | 欧美视频xxx| av电影在线观看 | 四虎影视久久久 | 久久官网 | 四虎海外影库www4hu | 欧美aa一级 | 久久久久久久久久久久久9999 | 国产经典三级 | 色在线观看网站 | 亚洲欧洲成人精品av97 | 国产精品久久久久久久久搜平片 | 99久久久久免费精品国产 | 成人免费一区二区三区在线观看 | 91九色最新地址 | 久久中文网 | 在线免费91| 国产在线国偷精品产拍免费yy | 中文字幕高清在线 | 九九九在线观看视频 | 丁香婷婷激情国产高清秒播 | 亚洲 欧洲 国产 日本 综合 | 精品夜夜嗨av一区二区三区 | 久久久激情网 | 亚洲va男人天堂 | 欧美日韩中| 亚洲精品午夜国产va久久成人 | 久久婷婷五月综合色丁香 | 天天色天天草天天射 | 久久国产视频网站 | 午夜免费在线观看 | 黄色av影视 | 日日弄天天弄美女bbbb | 区一区二区三区中文字幕 | 亚洲一级电影在线观看 | 久久亚洲欧美 | 亚洲欧洲精品久久 | 九九视频精品在线 | 国产高清视频在线播放一区 | 黄色片视频在线观看 | 亚洲精品午夜久久久久久久久久久 | 国产精品久久久久国产精品日日 | 精品国产99国产精品 | 久久久久久激情 | 国产精品自产拍在线观看网站 | 国产99久久久欧美黑人 | 99久久影院 | 日本一区二区免费在线观看 | 日韩一二区在线 | 久草免费在线视频观看 | 亚洲精品国产精品乱码在线观看 | 99r精品视频在线观看 | 久久99精品久久只有精品 | 欧美性成人| 久久久久成人精品免费播放动漫 | 中文字幕中文字幕在线中文字幕三区 | 精品在线小视频 | 久草在线免费在线观看 | 国产成人精品一二三区 | 狠狠狠狠狠干 | 五月av在线 | 视频在线99re | 黄色毛片大全 | 狠狠伊人 | 中文字幕高清免费日韩视频在线 | 天天爽天天摸 | 有没有在线观看av | 狠狠网亚洲精品 | 99日精品 | 国产精品久久久久久久毛片 | 成人黄色电影视频 | 久久综合婷婷国产二区高清 | 又污又黄网站 | 日韩视频在线播放 | 国产精品24小时在线观看 | 久久久久亚洲精品成人网小说 | 国产黄色成人 | 国产黄色精品网站 | 久久字幕精品一区 | 最近日韩免费视频 | 国产不卡免费 | 国产精在线 | 亚洲黄电影| 成人97视频一区二区 | 欧美黑吊大战白妞欧美 | 欧美国产不卡 | 亚洲一区精品二人人爽久久 | 99免费国产 | 一区二区久久久久 | 久久国产品 | 精品视频资源站 | 人人狠狠综合久久亚洲婷 | 日韩激情一二三区 | 天天操天天舔天天干 | 四虎成人精品在永久免费 | 国精产品999国精产品岳 | 欧美色图亚洲图片 | 激情综合电影网 | 丝袜美腿亚洲综合 | 国产精品免费观看久久 | 久久久久久久久久久久影院 | 国产经典av | 五月婷婷香蕉 | 在线看黄色的网站 | 成年免费在线视频 | 黄色三级免费观看 | 精品视频 | 97国产一区二区 | 精品 激情| 国产视频观看 | 久久有精品 | 亚洲精选视频在线 | 欧美一级小视频 | 国产日韩在线看 | 国产亚洲综合性久久久影院 | 亚洲二区精品 | 国产精品久久久久久吹潮天美传媒 | 亚洲免费av一区二区 | 亚洲视频中文 | 黄色电影在线免费观看 | 婷婷资源站 | 国产免费一区二区三区网站免费 | 激情婷婷六月 | 91中文字幕永久在线 | 色欧美88888久久久久久影院 | 婷婷精品国产一区二区三区日韩 | av大片免费 | 一区二区成人国产精品 | 日韩试看| 亚洲精品电影在线 | 日韩久久久久久久 | 四虎影视成人 | 婷婷av网站 | 高清免费av在线 | 国产女做a爱免费视频 | 91麻豆精品国产91久久久久久久久 | 国产在线观看a | 欧美一级网站 | 国产在线观看你懂的 | 日日操日日插 | 天天操天天操天天操天天操天天操天天操 | 97国产大学生情侣白嫩酒店 | 午夜精品久久久久久久99婷婷 | 激情开心网站 | 亚洲国产福利视频 | 国产一区二区视频在线播放 | 中文字幕在线观看免费高清完整版 | 国产乱对白刺激视频在线观看女王 | 中文在线www | 亚洲成人av在线电影 | 精品影院一区二区久久久 | 久久亚洲人| 色在线亚洲 | 六月丁香综合 | 国产精品久久久久久久午夜片 | 91重口视频 | 天天综合网在线观看 | 中文网丁香综合网 | 成人黄色在线看 | 国产电影黄色av | 色爽网站 | 久久成视频| 97色视频在线 | 99热都是精品 | 99re国产 | 激情综合色综合久久综合 | 六月丁香综合网 | av电影免费| 国产精品系列在线 | 日韩精品一区二区三区视频播放 | 日韩欧美综合在线视频 | 精品一区二区在线免费观看 | 欧美日韩国产一区二区在线观看 | 免费网站观看www在线观看 | 国产成人精品一区二 | 91久久久久久久一区二区 | 国产精品嫩草影院99网站 | 深夜福利视频在线观看 | 日韩高清一区二区 | 精品国产乱码一区二区三区在线 | 天天插综合| 91精品视频一区 | 欧美一级性视频 | 欧美日韩一区二区三区在线观看视频 | 我要看黄色一级片 | 日本久久久亚洲精品 | 日批视频在线观看免费 | 日韩专区中文字幕 | 国产伦理精品一区二区 | www.夜夜操.com | 伊人影院在线观看 | 国内精品久久久久久久久久久久 | 亚洲一级片在线看 | 欧美视频在线观看免费网址 | 91成人精品一区在线播放 | 欧美激情视频在线免费观看 | 日韩天天综合 | 亚洲国产中文字幕 | 国产综合精品一区二区三区 | 插插插色综合 | 麻豆成人精品 | 人人玩人人添人人 | 久久精品综合 | av在线免费网 | 久久久久久久久久久精 | 国产免码va在线观看免费 | 久久久久久麻豆 | 天堂视频中文在线 | 亚洲视频www | 中文字幕久久精品一区 | 欧美国产不卡 | www.色爱| 亚洲综合黄色 | 久久综合久久综合久久 | 亚洲三级在线 | 日本韩国欧美在线观看 | 久久久999精品视频 国产美女免费观看 | 日韩精品欧美视频 | 五月天婷婷在线视频 | 欧美精品在线视频观看 | 激情综合网五月激情 | 99视频在线精品国自产拍免费观看 | av在线播放国产 | 国产第页 | 国产最新网站 | 91看毛片| 狠狠色噜噜狠狠狠合久 | 首页av在线 | 国产精品国内免费一区二区三区 | 日韩久久精品一区二区三区下载 | 欧美孕妇视频 | 国产亚洲字幕 | 超碰成人免费电影 | 蜜桃麻豆www久久囤产精品 | 日日草天天草 | 久久人人爽人人爽人人 | 91视频下载 | 久久亚洲综合国产精品99麻豆的功能介绍 | 日韩精品中文字幕有码 | 日韩免费视频播放 | 久草在线电影网 | 国产一级性生活 | 国产精品久久免费看 | 午夜精品电影 | 色搞搞| 国产日韩欧美在线播放 | 亚洲 欧美 变态 国产 另类 | 天天操天天添天天吹 | 免费情趣视频 | 国产九九九精品视频 | 热久久国产 | .国产精品成人自产拍在线观看6 | 国产视频一区在线播放 | 亚洲电影一区二区 | 国产精品毛片一区视频 | 国产操在线 | 在线看污网站 | 激情婷婷综合 | 国产精品久久久久久久午夜片 | 91大神电影 | 国产美女精品 | 欧美最猛性xxxxx亚洲精品 | 国产精品一区二区在线播放 | 精品欧美在线视频 | 午夜精品久久 | 国内精品99 | 欧美日韩在线视频一区二区 | 国产高清视频免费观看 | 欧美资源在线观看 | 欧美成年黄网站色视频 | 国产精品日韩欧美一区二区 | 久久免费国产电影 | 日韩免费在线网站 | 欧美日韩高清在线一区 | 久草电影在线观看 | 久久高清视频免费 | 欧美一区二区在线免费观看 | 999男人的天堂 | 日一日操一操 | 菠萝菠萝蜜在线播放 | 88av色| a天堂一码二码专区 | 丁香午夜婷婷 | 国产流白浆高潮在线观看 | 欧美日韩精品在线视频 | 天天操夜夜逼 | 视频一区在线播放 | 正在播放国产一区 | 国产又粗又猛又黄又爽视频 | 99在线免费观看视频 | 国产中文字幕一区二区三区 | 激情五月婷婷综合网 | 欧美激情精品久久久久久免费 | 97人人澡人人添人人爽超碰 | 日本一区二区三区免费观看 | 精品亚洲va在线va天堂资源站 | 手机av看片 | 日韩久久精品一区二区三区下载 | 99国产精品| 最新av免费在线 | 手机看片中文字幕 | 国产福利av在线 | 国内精品美女在线观看 | 国产精品久久久久久久毛片 | 欧美一二区在线 | 欧美一区二区精品在线 | 午夜精品99久久免费 | 欧美成人视 | 九九久久久 | 亚洲女欲精品久久久久久久18 | 超碰最新网址 | 亚洲精选在线观看 | 久久手机免费观看 | 又黄又刺激的网站 | 成人福利在线观看 | 欧美精品v国产精品 | 欧美日韩在线视频免费 | 国产精品久久久久久久久久久久久久 | 日日夜夜天天久久 | 日本大尺码专区mv | 男女免费视频观看 | 久久亚洲二区 | 国际精品久久久 | 麻豆视频免费在线观看 | 国产精品ⅴa有声小说 | 国产精品videossex国产高清 | 国产精品午夜在线 | 天天操夜夜操夜夜操 | 亚洲综合爱 | 国产在线观看91 | 婷婷精品 | 日韩在线一区二区免费 | 日韩精品国产一区 | av免费在线看网站 | 国产91免费观看 | 成人av免费看| 日韩精品一区二区三区外面 | 天天操天天干天天 | 国产精品欧美久久 | 欧美精品一二 | 国产精品久久中文字幕 | 中文字幕国产亚洲 | av资源免费在线观看 | 精品一区二区三区在线播放 | 综合网在线视频 | 丁香5月婷婷 | 国产精品每日更新 | 日b视频国产 | 国产精品一区二区在线观看免费 | 国产一区二区三区免费观看视频 | 国产一级大片在线观看 | 亚洲少妇自拍 | 最新真实国产在线视频 | 国产一区二区在线播放 | av解说在线观看 | 亚洲视频1区2区 | 九九免费在线观看 | 一区二区三区免费播放 | 黄色片免费在线 | 成人在线视频免费看 | 国产在线无 | a资源在线 | 亚洲黄色成人网 | 亚洲免费高清视频 | 亚洲欧美视频一区二区三区 | 精品夜夜嗨av一区二区三区 | 色久综合 | 亚洲日本黄色 | 国产又粗又猛又黄 | 国产vs久久| 91爱看片| 美女黄频在线观看 | 超碰97在线资源站 | wwwww.国产| 久久福利 | 中文字幕2021 | www.国产毛片 | 日韩精品在线视频 | a亚洲视频| www色片| 麻豆精品传媒视频 | 91高清在线 | 97成人免费 | 99精品国产成人一区二区 | 美女视频a美女大全免费下载蜜臀 | 久香蕉| 国产精品一区二区在线观看免费 | 亚洲欧美在线观看视频 | 亚洲精品动漫久久久久 | www黄色大片| 999超碰 | 久久久999| 国产欧美综合在线观看 | 国产国产人免费人成免费视频 | 91成人精品在线 | 久久久午夜精品福利内容 | 日韩在线视频国产 | 欧美精品一区二区蜜臀亚洲 | 狠狠狠干| 四虎在线永久免费观看 | 欧美国产日韩在线视频 | 日本黄色大片免费 | 国内精品久久久久久 | 久久久久久久久电影 | 国产精品18毛片一区二区 | av超碰在线观看 | 久久草在线视频国产 | 免费看片色 | 在线三级中文 | 久草免费电影 | 五月婷婷中文字幕 | 精品国产区在线 | 青草视频免费观看 | 国产亚洲精品久久久久久无几年桃 | 国产精品18久久久久久久 | 麻豆影视网站 | 婷婷激情在线观看 | 久久视频在线免费观看 | 狠狠88综合久久久久综合网 | 五月婷婷开心中文字幕 | 91av电影在线 | 成人av电影免费在线观看 | 91热这里只有精品 | 天天操操操操操 | 色综合天天狠天天透天天伊人 | 欧美一二三在线 | 中文乱码视频在线观看 | 天天操天天操天天干 | 国产精品无av码在线观看 | 久久99精品久久久久久久久久久久 | 九九免费在线观看视频 | 手机看片99 | 亚洲精品久久久久久久蜜桃 | 久久婷婷一区二区三区 | 99久久精品国产观看 | 久久精品3 | 蜜臀av夜夜澡人人爽人人桃色 | 国产精品一区二区久久精品爱微奶 | 久久手机免费观看 | 91精品综合| 亚洲国产中文字幕在线视频综合 | 九色最新网址 | 狠狠色丁香婷婷综合久小说久 | 久久久美女 | 亚洲另类视频在线 | 一区二区三区 中文字幕 | 亚洲国产高清在线 | 久久久精品亚洲 | 99精品视频在线播放免费 | 日韩网站中文字幕 | 色婷婷午夜 | 91色偷偷| av一二三区 | 日本99干网 | 免费看一及片 | 99草在线视频 | 中文字幕免费不卡视频 | 国产亚洲欧美一区 | 久久久久久看片 | 一区三区在线欧 | 久久国精品 | 久久精品免费 | 最近字幕在线观看第一季 | 国产午夜在线观看视频 | 色婷婷99| 欧美日韩3p | 日本中文一区二区 | 国产精品不卡视频 | 69av国产| 涩涩爱夜夜爱 | 色网站在线看 | 国产精品1区2区3区 久久免费视频7 | 精品久久久国产 | 国产精品欧美久久久久天天影视 | 久久免费毛片视频 | 黄色特一级 | 手机av在线不卡 | 日女人免费视频 | 久久韩国免费视频 | 五月综合久久 | 一区二区三高清 | 91大神在线观看视频 | 日韩精品久久久 | 日韩电影在线观看一区 | 成人永久免费 | 日日干美女 | 在线观看视频国产一区 | 久久私人影院 | 亚洲闷骚少妇在线观看网站 | 国内少妇自拍视频一区 | 亚洲精品视频偷拍 | av中文在线 | 日本中文字幕在线一区 | 天天天天射 | 国产精品毛片一区二区 | 国产精品久久久久久久久搜平片 | 99久久夜色精品国产亚洲96 | 一级片黄色片网站 | www.国产精品| 欧美日韩不卡一区二区三区 | 久久免费国产电影 | 在线黄色av | 国产精品理论片 | 精品视频中文字幕 | 免费在线播放av电影 | 一区二区欧美日韩 | 日韩欧美网址 | 久久久精品电影 | 黄色电影网站在线观看 | 黄av免费 | 亚洲精品色视频 | 日韩一片| 亚洲国产精品成人综合 | 欧美日韩中文字幕视频 | 日本黄色黄网站 | 久久激情片| av在线网站免费观看 | 国产精品国内免费一区二区三区 | 在线91视频| 国产精品久久一区二区无卡 | 婷婷五月在线视频 | 久色免费视频 | a天堂最新版中文在线地址 久久99久久精品国产 | 午夜黄色一级片 | 国产免费又爽又刺激在线观看 | 国产精品 日本 | 98精品国产自产在线观看 | 国产高清小视频 | 成年人免费在线观看 | 国产日产精品久久久久快鸭 | 国产免费观看久久 | 午夜精品电影 | 视频一区二区国产 | 98超碰在线| 日韩精品久久久久久久电影99爱 | 美女视频是黄的免费观看 | 91最新地址永久入口 | 久久国产精品一区二区三区四区 | 国产精品久久久久久欧美 | 久久久久久免费视频 | 日韩视频1| 久草精品视频在线看网站免费 | 中文字幕高清 | 亚洲欧洲成人 | 久久激情视频免费观看 | 91av短视频 | 久久99国产精品自在自在app | 日韩精品第一区 | 九九视频这里只有精品 | 字幕网av| 网址你懂的在线观看 | 精品人人爽 | 久久久久99精品国产片 | 亚洲激情av | 亚洲精品在线观看不卡 | 香蕉精品视频在线观看 | 亚洲精品玖玖玖av在线看 | 一区二区三区四区免费视频 | 黄色激情网址 | 国产最顶级的黄色片在线免费观看 | 成人av免费在线播放 | 91久久在线观看 | 黄色综合 | 三级a毛片 | 久久女教师 | 福利二区视频 | 免费日韩一区二区三区 | 91精品视频播放 | 亚洲性xxxx| 99热都是精品 | 99久久精品国产一区 | 美女黄网久久 | 日韩av成人在线观看 | 日本视频精品 | 黄色福利视频网站 | 国产主播99| 午夜精品一二三区 | 五月花婷婷 | 国产精品福利无圣光在线一区 | 免费在线观看日韩视频 | 国产黄色一级片在线 | 超碰在线观看av.com | 欧美日韩视频在线观看免费 | 黄色软件在线观看视频 | 国产一级二级三级在线观看 | av电影在线播放 | 免费视频在线观看网站 | a√天堂中文在线 | 国产成人777777 | 婷婷激情在线 | 成人在线视频免费 | 亚洲色图美腿丝袜 | 国产精品理论视频 | 在线亚洲小视频 | 丁香婷婷久久 | 欧美一区二区三区在线视频观看 | 毛片a级片| 亚洲一区二区麻豆 | 国产护士hd高朝护士1 | 香蕉在线视频观看 | 六月激情丁香 | 日韩欧美在线观看一区 | 国产在线超碰 | 久久久久成 | 麻豆成人精品 | 国产成人一区二区三区在线观看 | 久久综合给合久久狠狠色 | 五月婷婷伊人网 | 精品国产_亚洲人成在线 | 精品视频资源站 | 日韩高清精品一区二区 | 久久亚洲精品国产亚洲老地址 | 欧美日韩亚洲在线观看 | 很黄很污的视频网站 | 日韩一区二区三区免费视频 | 97av视频| 人人狠 | 国产在线观看 | 欧美日韩高清一区二区 国产亚洲免费看 | 国产一区二区精品久久 | 久久综合综合久久综合 | 婷婷日 |