版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
OperatingSystemPrinciple,OS《操作系统原理实验(1)》参考教材:《操作系统原理》,苏曙光编著,人民邮电出版社,2022年Linux+Windows综合版本参考教材:《操作系统原理》,苏曙光编著,人民邮电出版社,2022年实验一:第3实验一:第3一、实验目的(1)(2)理解并应用操作系统,二、实验内容1)在Linux(建议麒麟版本)下裁剪和编译Linux(其他发行版本也可以)建议麒麟版本)内核中增加3)下,编写“算命大师.batLinux脚本,显示系统信息(CPU5三、实验要求任务1是基础,任务234四、实验指南1)在Linux(建议麒麟版本)下裁剪和编译Linux(其他发行版本也可以)提示1:若使用VMWARE3G,建议4G。提示2(!)提示3:在rootapt-getinstallgccgdbbisonflexlibncurses5-devlibssl-devlibidn11build-essential提示4引导程序sudoupdate-grub2ubuntu高级选项”,内含新内核。实验一:第3实验一:第3四、实验指南•GetPID//ID;GetCMD建议麒麟版本)下为内核增加3)提示1:intMax(int,int,int);intGetPIDchar*GetCMD(提示21.提示4:主目录下建NewCall目录并在其中新建MyNewcall.c文件和相应的makefile文件。c文件含有系统调用的实现函数。makefile文件内容:obj-y:=MyNewcall.o提示4:主目录下建NewCall目录并在其中新建MyNewcall.c文件和相应的makefile文件。c文件含有系统调用的实现函数。makefile文件内容:obj-y:=MyNewcall.o提示5:将提示5:将NewCall目录添加到主makefile中的特定位置:core-y+=kernel/mm/fs/ipc/security/crypto/block/NewCall/提示6:在syscall_64.tbl和syscalls.h中分别定义编号和声明函数。int nRet=syscall(549,20,18,4); //nRet=20int nRet=int nRet=syscall(549,20,18,4); //nRet=20实验一:第3实验一:第3四、实验指南下,编写“算命大师.bat提示1:注意年月日的格式提示2提示3提示4Linux提示1:注意年月日的格式提示2提示3提示4提示5四、实验指南Linux脚本,显示系统信息(CPU5四、实验指南Linux脚本,显示系统信息(CPU5提示1:系统基本信息系统名称从/etc/os-releaseuname命令内核版本Linux内核版本号运行时间系统连续运行的时间当前用户当前登录用户及UIDCPU信息CPU型号、核心数、架构内存信息提示2:进程监控CPU占用最高的5个进程按CPU使用率排序显示前5个内存占用最高的5个进程5个显示信息PID、用户名、CPU%、内存%OperatingSystemPrinciple,OS《操作系统原理实验(2)》参考教材:《操作系统原理》,苏曙光编著,人民邮电出版社,2022年Linux+Windows综合版本参考教材:《操作系统原理》,苏曙光编著,人民邮电出版社,2022年实验二:第4章进程管理,第实验二:第4章进程管理,第5章死锁一、实验目的理解进程/理解进程/二、实验内容1)在Linux/Windows下创建2个线程A和B2)在Linux下创建一对父子进程,实验wait同步函数。3)在Windows下利用线程实现并发画圆画方。4)在Windows或Linux下利用线程实现“生产者-5)在Linux下利用信号机制实现进程通信。6)在Windows或Linux7)研读Linux内核并用printk三、实验要求1,2,4,6必做,其余任选1。四、实验指南1)在Windows/Linux下创建2个线程A和B提示1:使用pthread线程库B1000-1)提示3A或BA:1000A:0999B:0001A:0998B:0002……实验二:第4章进程管理,第实验二:第4章进程管理,第5章死锁四、实验指南1)在Windows/Linux下创建2个线程A和B提示1:使用CreateThread创建线程B1000-1提示3A或BA:1000A:0999B:0001A:0998B:0002……提示1:子进程休眠5exit提示1:子进程休眠5exit提示2:父进程调用wait提示3四、实验指南3)在Windows提示1提示2提示3:建议使用VS和MFC或QT四、实验指南4)在Windows或Linux下利用线程实现“生产者-1:使用数组(10个元素)2(随机数)存到数组中;3提示2Windows使用临界区对象和使用互斥锁对象和()提示4:生产者1的数据:1000-1999(每个数据随机间隔100ms-1s),生产者2的数据:2000-2999 (每个数据随机间隔100ms-1s)提示5:消费者每休眠100ms-1s提示6:屏幕打印()四、实验指南5)在Linux下利用信号机制实现进程通信提示1提示2:子进程每隔2秒输出”IamChildProcessalive!\n”提示3:父进程询问用户”ToterminateChildProcess.YesorNo?\n”要求用户从键盘回答Y或N.若用户回答N,延迟2秒后再提问.提示4:若用户回答Y用户信号提示5”Bye,Wolrd\n”提示6:函数:kill(),signal(),利用用户信号,编写信号处理函数四、实验指南6)在Windows或Linux提示1提示2Windows尝试使用互斥锁(pthread_mutex_lockpthread_mutex_unlock)提示3Windows尝试使用WaitForMultipleObjects,WaitForSingleObject和互斥量对象ReleaseMutex等相关函数)Linux尝试使用互斥锁pthread_mutex_lock,pthread_mutex_trylock等函数。提示4:[可选]7)研读Linux内核并用printkHello.c,调用forkPCBHello.cfork(),打印出父子进程的ID号;提示2(do_fork用printk输出“当前正创建的进程对应cmd,进程ID和父进程ID”等调试信息。do_fork函数Hello程序中调用forkboolflag和系统调用SetDebug(bool),或false。在Hello程序中的调用fork函数前后,分别调用SetDebug(true)和SetDebug(false)修改flag。在printk调试信息时检查flagprintkiinclude <stdio.h>非include<stdlib.h>iinclude 4iinclude <pthread.h>iinclude <sernaphore.h>78 using 迎eces td;9idefine BUFFER LENGHT 32 int iBuffer [ BUFNGHT ];//互斥锁pthread x t r =PD U1X II'TILIR;//口亏sem ts emFull;s es emEmpty;17
II信号量:数据的个数II信号量:空槽的个数int nBufferWritePos = O;t nBuffread,=0;20
//队 尾//队 头21 void* threadProducer void* ar g)22 {2324_ ,25262728293031323334353637383940
while(tr ue){s eait (s epty);//若空槽个数低千0阻塞pthreatex lock(&rnutexBuffer );II准备数据sr and(tirne(O));int iRand =r and( ) / 1000 ;(写入位置:nBufferWritePos)iBuffer [nBuffer WritePos] = iRand;II更新写入位置:nuffrritePsnBufferWritePos = (nBuffer WritePos + 1) %BUFFER LENGHT;pthreadtexnlock(&mutexBuffer );s epost (s emFull);}return (void*)O;41 l}3 void* t hr eado,n s ur (void* 1s kPran)44 {4546 ,_
e(r,{
u e)47//pr intf ("consumer is preparing a\);48s eit &semFull//0阻塞49pthread x l,c k(&utexuffr );50读出数据(位置:nBufferReadPos)51pritf(11iuffr [%Sd] = 垒d\n11, nuffr ead,,,52iBuffer [nBuffer ReadPos] );更新读出位置:nuffreadPosnuffr eado,s= (nuffr eads+l) 咕 FR E1H1T;55pthr eadtexnlock(&mutexBuffer );s e,}58}59
s t (s epty);r r et.urn(void*)0;int n(it rgc, char *rgv)4 早{67890167890123456789016666777777777788snit(&sety, 0, BUFFERL);pthread t threadHandleProducer[2];pthread t threadHandleConsur[3];int nErrThread =O;nrThreadnErrThreadnErrThreadnErrThreadnErrThread
pthreaeate(&threadHandleProducer[O],- pthreadreate(&threadHandleProducer[l],pthreaeate(&threadHandleConsu[O],pteaeate(&threadHandleConsu[l],pthreaeate(&threadHandleConsu[2],
NULL,threadProducer,NULL);NULL,threadProducer,NULL);NULL,threadConsu,NULL);NULL,threadConsu,NULL);NULL,threadConsu,NULL);8283_ ,84858687
int nThreadNo =O;for ( neadNo =O;nThreadNo <3; nThreadNo++ ){pthread—join(teadHandleConsu[nThreadNo], NULL);}for( neadNo =O;nThreadNo <2; nThreadNo++ )88_ ,8990
{pthread—join(teadHandleProducer[nThreadNo], NULL);}9192 I}
returnO;
竺线程-线程-互斥锁-信号量非include<stdio.h非include<unistd.h>非include<sys/shm.h>非defineSIZE 4
共享内存11189012
int main()6 {13 ,一14
int ShaMernID ;int *ShaMernAddr ;int pid ;ShaernID = shget(IRIE, SIE, IC ATIO600 ) ;pid = fork( ) ;if ( pid == 0 ){printf("CHild PID = 沧d.\n 11,getpid()) ;15edr = (int*hmat( ShaMemID,NULL,0) ;16(*ShaMemAd) = etpid () ;17s hmdt( ShaMemAd) ;18return O;19}20else if ( pid >0)21 ,一22232425262728
{sleep(3 ) ;ShaMemAd= (int *)s hmat(ShaMemID, NULL, 0 ) ;printf("CHild PID = 沧d (ShaMemAddr).\n", *ShaMemAd) ;printf("Parent PID = 沧d\n" , getpid()) ;shmdt( ShaMemAd) ;shmctl(ShaMemID, IPC RMID, NULL) ;}2930 l}
return O ;共享内存共享内存信号机制:父进程发信号信号机制:父进程发信号KILL子进程信号机制:父进程发信号信号机制:父进程发信号KILL子进程子进程把PID如何给父进程PS查看子进程PID,父进程运行时输入子进程PID子进程自打印出PID,父进程运行时输入子进程PID共享内存8 void er(int arg)9101112 L}13
printf("Bye, Wor ld \n");exit(O);程进子/”;!。_中ri=pfd't=- Pdd(iifPP工.:巳67890123程进子/”;!。_中ri=pfd't=- Pdd(iifPP工.:巳678901234111122222reldnah用调会生发号言1;当eld,数a函巾调reldnah用调会生发号言1;当eld,数a函巾调R回)信号ut册a叭lg1/lh/sw{_: ::::::::::巳26}27 -}
printf("Child Process AlivePID = 疮d.\n" ,getpid()) ;sl(2);28else if (pi28else if (pid >0)29 ,_{i七ChildPID;3233 sleep(4);34printf("PLeaseInput Child Process PID:");scanf("号d", &ChildPID);;』 hil (trne)39 - : {40 I I sleep(5); //睡 2 秒I I printf("To Termina七eChild Process %ct, Yes or No: \n",ChildPID);scanf("%c", 釭 nput);43 I I i,f((input == 'Y') 11 (input == 'y'))44 -
I: I {, kill(ChildPID,SIGUSRl);• , , t(LL); 等待回收子进程的资源I, br eak II }i }50 }51 return O;52 }OperatingSystemPrinciple,OS《操作系统原理实验(3)》参考教材:《操作系统原理》,苏曙光编著,人民邮电出版社,2022年Linux+Windows综合版本参考教材:《操作系统原理》,苏曙光编著,人民邮电出版社,2022年实验三:第7实验三:第7一、实验目的(1)理解页面淘汰算法原理,编写程序演示页面淘汰算法。(2)验证虚拟地址转化为物理地址的机制二、实验内容(1)Windows/Linux模拟实现OPT,FIFO,LRU等淘汰算法。下利用/proc/pid/pagemap计算变量或函数虚拟地址对应的物理地址等信息。三、实验要求1,2必做。实验三:第7实验三:第7四、实验指南(1)Windows/Linux模拟实现OPT,FIFO,LRU等淘汰算法。[以下模拟过程仅供参考,不是唯一方案!网络参考其他方案!]提示1:程序指令执行过程采用遍历数组的操作来模拟;提示2:用1个较大数组A(例如2400个元素)模拟进程,数组里面放的是随printf将其打印出来,模仿指令的执行。数组A的大小必须是设定的页大小(例如10个元素或16个元素等等)的整数倍。提示3:用3-8个小数组(例如数组B,数组C,数组D等)模拟分得的页框。小数组的大小等于页大小(例如10条指令的大小,即10的元素)。小数组里面复制的是大数组里面的相应页面的内容(自己另外构建页表,描述大数组的页与小数组序号的关系)。提示4:利用不同的次序访问数组A,次序可以是:顺序,跳转,分支,循环,或随机,自己构建访问次序。不同的次序也一定程度反映程序局部性。提示6:实验中进程的页面大小,页框数,访问次序,淘汰算法都应可调整。提示7:至少实现2个淘汰算法。提示5rand()提示6:实验中进程的页面大小,页框数,访问次序,淘汰算法都应可调整。提示7:至少实现2个淘汰算法。实验三:第7实验三:第7思考:(思考:(1)同的物理地址。(2)如何通过扩充实验验证不同进程的共享库具有
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030家电出口贸易壁垒应对策略与国际标准认证研究
- 儿童戏剧教育对情商发展的量化影响研究
- 能源生物能行业市场现状供需分析及投资评估规划分析研究报告
- 中国前庭测试系统行业市场发展趋势与前景展望战略研究报告
- 中国悬浮式拼装地板行业风险预警及发展趋势规划建议研究报告
- 量子计算行业投资风险趋势分析及投资融资策略研究报告
- 中国硅外延片竞争风险与前景营销模式分析研究报告版
- 2025-2030东南亚数字经济政策比较研究与平台经济监管趋势报告
- 攀枝花市中级人民法院2026年公开招聘聘用制书记员(4人)笔试参考试题及答案详解
- 2026四川内江市隆昌市见习岗位招聘8人笔试参考试题及答案详解
- 刘润年度演讲2024
- 人教版九年级上册-历史全册课件(课件)【部编教材】
- 中建三局项目目标责任成本测算培训资料
- 手术患者的转运交接2
- 心理健康教育国内外研究现状
- JBT 7901-2023 金属材料实验室均匀腐蚀全浸试验方法 (正式版)
- 车棚安装服务流程
- 75首古诗英文版
- 出货检验报告 A
- Invoice商业发票模板
- 不锈钢雕塑施工组织设计方案
评论
0/150
提交评论