1、 public void produce() synchronized (object) /*只有list为空时才会去进行生产操作*/ try while(!list.isEmpty() System.out.println(生产者+Thread.currentThread().getName()+ waiting); object.wait(); int value = 9999; list.add(value); Runnable object.notifyAll();/然后去唤醒因object调用wait方法处于阻塞状态的线程 catch (InterruptedException e)
2、 e.printStackTrace();public class Consumer /用list存放生产之后的数据,最大容量为1 public Consumer(Object object,ArrayListp; pbcp pIterator = pbca- while (pIterator!= NULL) if (pItem-pri pri&pIterator-time != 0) pItem = pIterator; pIterator = pIterator- if (pItem-time -= 1) = 0) pItem-cputime += 1;pri -= 1; strcpy(p
3、Item-status, finish else run pIterator = pbca- while (pIterator ! if (pIterator-cputime != 0&pIterator!=pItem&time!=0) pIterator- strcpy(pIterator-ready printPbc(pbca);运行结果:(1)处理机调度的目的?主要还是为了优化软件的运行。(2)你实现优先权调度算法的思想?遍历一次,取出优先权最高的,判断该进程是否还要运行,要允许就运行它。实验三 存储管理模拟分页式存储管理中硬件的地址转换和产生缺页中断。用先进先出(FIFO)页面调度算法
4、处理缺页中断。int paper_table75 /7乘5的页表char *oper_char12 /每次操作int oper_table122 /指令序列的单元号和操作存储int fifo_table4 / 先进先出表,记录那几个在内存中int static count = 0; /记下哪个先来的核心代码:void scheduler(void) int i, page, page_block, page_move; for (i = 0; i12; i+) page = *(oper_table + i); printf(-%d-n, i); if (*(*(paper_table + p
5、age) + 1) = 1) /在页表中 page_block = *(*(paper_table + page) + 2); page_move = *(*(oper_table + i) + 1); printf(在内存中,块号:%d;偏移量:%d;物理地址:%dn, page_block, page_move, page_block * 128 + page_move); *(*(paper_table + count) + 4) = 1;/修改变为1 fifo_print(); else if (*(*(paper_table + fifo_tablecount % 4) + 4) =
6、 1) printf(缺页中断,被替换的页号为:页修改存入硬盘n, fifo_tablecount); *(*(paper_table + fifo_tablecount % 4) + 4) = 0; else 页被直接替换n *(*(paper_table + page) + 1) = 1;/移入内存,改变在内存中的标志为1 *(*(paper_table + fifo_tablecount) + 1) = 0;/改变在内存中的标志为0 *(*(paper_table + page) + 2) = *(*(paper_table + fifo_tablecount) + 2);/重置页表里的
7、主存块号值 *(*(paper_table + fifo_tablecount) + 2) = 0; fifo_tablecount % 4 = *(*(oper_table + i) + 0);/更新fifo表换入内存成功,块号:n count+; count = count % 4; 思考题:(1)先进先出页面调度算法的思想?基本思想:先进入内存的页面先淘汰,后进入内存的后淘汰(2)最近最少用(LRU)页面调度算法思想?最近用的最少的最先淘汰。(3)比较两种调度算法的效率(哪种调度算法使产生缺页中断的次数少)? 答:从作业题我感觉最近最少使用优于先进先出。(4)分析在什么情况下采用哪种调度
8、算法更有利?如果页访问高度随机的话,不见得LRU好,LRU是根据最近最少使用的来决定哪个页表被替换,但过去很多时候不能代表未来。实验四 文件系统 用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。struct TYPE_UFD /主文件目录 string File_Name; /文件名 bool Read; /是否可读可写可执行 bool Write; bool Execute; int Length_File; /文件长度;struct TYPE_MFD /用户文件目录 string User_Name; /用户名 TYPE_UFD *Pointer;struct TYPE_A
9、FD /打开文件目录,即运行文件目录 int File_ID; /文件ID int Pointer;class TYPE_FILE_SYSTEM /文件系统类public: void Initial(void); void Start(void);private: int _Number_Users; /用户数 int _Number_Files; /文件数 int _MaxNumber_Open_Files; /最大打开文件数 TYPE_MFD *_MFD; TYPE_UFD *_UFD; TYPE_AFD *_AFD;void TYPE_FILE_SYSTEM:Start(void) in
10、t User_ID; int i, temp_int; string temp; char choice; int Number_Open_Files; string Command; TYPE_UFD *UFD; do do cout User_Name; for (User_ID = 0; User_ID_Number_Users; User_ID+) if (_MFDUser_ID.User_Name = User_Name) break; if (User_ID = _Number_Users) cout 用户名错误,请再次输入 . endl; while (User_ID = _Nu
11、mber_Users); cout 欢迎登录 , User_Name ! UFD = _MFDUser_ID.Pointer; for (i = 0;_MaxNumber_Open_Files; _AFDi.File_ID = -1; Number_Open_Files = 0;C: Command; if (Command = dir)打开用户 的文件 tStatetLengthtFile name for (i = 0;_Number_Files; if (UFDi.Length_File != -1) cout if (UFDi.Read = true) cout R else- if
12、(UFDi.Write = true)W if (UFDi.Execute = true)E UFDi.Length_File; UFDi.File_Name else if (Command = diropenOpen File name if (_AFDi.File_ID ! if (_AFDi.Read = true) if (_AFDi.Write = true) if (_AFDi.Execute = true) UFD_AFDi.File_ID.File_Name create if (UFDi.Length_File = -1) break; if (i = _Number_Fi
13、les) cout Error: 已有名为 _Number_Files temp; UFDi.File_Name = temp;文件权限 :Read (y/n): do choice = getch(); while (choice != y & choice !n if (choice = UFDi.Read = true; else UFDi.Read = false;Write (y/n): UFDi.Write = true; UFDi.Write = false;Execute (y/n): UFDi.Execute = true; UFDi.Execute = false;Leng
14、th : temp_int; if (temp_int 0) UFDi.Length_File = temp_int;新文件 已建立!delete请输入文件名 : cin if (UFDi.Length_File != -1) & (UFDi.File_Name = temp)文件名错误,请再次输入 . UFDi.Length_File = -1;文件 已删除 .open if (Number_Open_Files = _MaxNumber_Open_Files) 你已经打开了 Number_Open_Files 文件.请输入文件名: for (i = 0; if (UFDi.Length_File ! break; if (i = _Number_Files)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1