欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    华工操作系统实验.docx

    • 资源ID:13509079       资源大小:22.06KB        全文页数:29页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    华工操作系统实验.docx

    1、华工操作系统实验一、实验步骤:1. 在linux下编写一个应用程序,命名为an_ch2_1b。这个程序不断地输出如下行:Those output come from child,系统时间另外写一个应用程序,命名为an_ch2_1a。这个程序创建一个子进程,执行an_ch2_1b。这个程序不断地输出如下行:Those output come from child,系统时间观察程序运行的结果,并对你看到的现象进行解释。2. 在linux环境下编写一个控制台应用程序,程序中有一个共享的整型变量shared_var,初始值为0;创建一个线程并使其立即与主线程并发执行。新创建的线程与主线程 均不断地循环

    2、,并输出shared_var 的值。主线程在循环中不断地对shared_var 进行加1操作,即每次循环shared_var 被加1;而新创建的线程则不断地对shared_var 进行减1 操作,即每次循环shared_var 被减1。观察程序运行的结果,并对你看到的现象进行解释。二、实验数据: an_ch2_1b.cpp文件:#include #include #include #include #include using namespace std;string getTime() /获取系统时间time_t timep;time(&timep);char tmp64;strftime(

    3、tmp,sizeof(tmp),%Y-%m-%d%H:%M:%S,localtime(&timep);return tmp;int main()while (true)string tmn = getTime();cout Those output come from child, tmn endl;sleep(1); /为了便于截屏使用sleep()函数延迟输出return 0;an_ch2_1a.cpp文件:#include #include #include #include #include using namespace std;int main()pid_t pid;pid = f

    4、ork();if (pid = -1) cout fail to create endl;else if (pid = 0) system(./an_ch2_1b);return 0;Consoleapp.c文件:#include #include #include #include int shared_var = 0;void * thread(void * arg)while (1)printf(in the thread shared_var:%dn, -shared_var);int main()pthread_t pt;int ret = pthread_create(&pt, N

    5、ULL, (void*)thread, NULL);if (ret != 0) printf(fail to create threadn);while (1)printf(in the main shared_var:%dn, +shared_var);pthread_join(pt, NULL);return 0;1. 生产者消费者问题(信号量)参考教材中的生产者消费者算法,创建5个进程,其中两个进程为生产者进程,3个进程为消费者进程。一个生产者进程试图不断地在一个缓冲中写入大写字母,另一个生产者进程试图不断地在缓冲中写入小写字母。3个消费者不断地从缓冲中读取一个字符并输出。为了使得程序的

    6、输出易于看到结果,仿照的实例程序,分别在生产者和消费者进程的合适的位置加入一些随机睡眠时间。可选的实验:在上面实验的基础上实现部分消费者有选择地消费某些产品。例如一个消费者只消费小写字符,一个消费者只消费大写字母,而另一个消费者则无选择地消费任何产品。消费者要消费的产品没有时,消费者进程被阻塞。注意缓冲的管理。2. 用线程实现睡觉的理发师问题,(同步互斥方式采用信号量或mutex方式均可)理发师问题的描述:一个理发店接待室有n张椅子,工作室有1张椅子;没有顾客时,理发师睡觉;第一个顾客来到时,必须将理发师唤醒;顾客来时如果还有空座的话,他就坐在一个座位上等待;如果顾客来时没有空座位了,他就离开

    7、,不理发了;当理发师处理完所有顾客,而又没有新顾客来时,他又开始睡觉。3. 读者写者问题教材中对读者写者问题算法均有描述,但这个算法在不断地有读者流的情况下,写者会被阻塞。编写一个写者优先解决读者写者问题的程序,其中读者和写者均是多个进程,用信号量作为同步互斥机制。1. 生产者消费者问题(pro_con.c)#include #include #include #include #include #include #include #define N 10 /缓冲区大小为100char *buffer;int capacity = N;sem_t mutex, empty, full;void

    8、 * produce_1() while (1) sem_wait(&empty); sem_wait(&mutex); int r1 = rand() % 26; int ju = 0; for(int i = 0; i N; i+) if (bufferi = 0) bufferi = A + r1; printf(生产者1号生产一个产品 : %c 剩余容量为:%dn, bufferi, -capacity); ju = 1; break; if(ju = 0)printf(没有足够容量!n); sem_post(&mutex); sem_post(&full); usleep(r1 *

    9、100000); void * produce_2() while (1) sem_wait(&empty); sem_wait(&mutex); int r2 = rand() % 26; int ju = 0; for(int i = 0; i N; i+) if (bufferi = 0) bufferi = a + r2; printf(生产者2号生产一个产品 : %c 剩余容量为:%dn, bufferi, -capacity); ju = 1; break; if(ju = 0)printf(没有足够容量!n); sem_post(&mutex); sem_post(&full);

    10、 usleep(r2 * 100000); void * consume_1() while (1) sem_wait(&full); sem_wait(&mutex); int ju = 0; for (int i = 0; i = A&bufferi = Z) printf(消费者1号消费一个产品 : %c 剩余容量为:%dn, bufferi, +capacity); bufferi = 0; ju = 1; break; if (ju = 0)printf(没有消费者1号所需的产品!n); sem_post(&mutex); sem_post(&empty); int r3 = ran

    11、d() % 26; usleep(r3 * 100000); void * consume_2() while (1) sem_wait(&full); sem_wait(&mutex); int ju = 0; for (int i = 0; i = a&bufferi = z) printf(消费者2号消费一个产品 : %c 剩余容量为:%dn, bufferi, +capacity); bufferi = 0; ju = 1; break; if (ju = 0)printf(没有消费者2号所需的产品!n); sem_post(&mutex); sem_post(&empty); int

    12、 r4 = rand() % 26; usleep(r4 * 100000); void * consume_3() int ju = 0; while (1) sem_wait(&full); sem_wait(&mutex); int ju = 0; for (int i = 0; i = A & bufferi = a & bufferi = z) printf(消费者3号消费一个产品 : %c 剩余容量为:%dn, bufferi, +capacity); bufferi = 0; ju = 1; break; if (ju = 0)printf(没有产品可以消费!n); sem_po

    13、st(&mutex); sem_post(&empty); int r5 = rand() % 26; usleep(r5 * 100000); int main() buffer = (char*)malloc(N * sizeof(char*); for (int i = 0; i N; i+) bufferi = 0; sem_init(&mutex, 1, 1); sem_init(&empty, 0, N); sem_init(&full, 0, 0); srand(time(0); pthread_t tid5; pthread_attr_t attr; pthread_attr_

    14、init(&attr); pthread_create(&tid0,&attr,produce_1,NULL); pthread_create(&tid1,&attr,produce_2,NULL); pthread_create(&tid2,&attr,consume_1,NULL); pthread_create(&tid3,&attr,consume_2,NULL); pthread_create(&tid4,&attr,consume_3,NULL); for(int i=0;i5;i+) pthread_join(tidi,NULL); return 0;2. 用线程实现睡觉的理发师

    15、问题(barber.c)#include #include #include #include #include #include #define N 5sem_t customer,barber;int chairs,waiting = 0,work = 0;pthread_mutex_t mutex;void * Barber ( ) printf(无顾客,理发师睡觉n); while (1) sem_wait(&customer); pthread_mutex_lock(&mutex); chairs+; pthread_mutex_unlock(&mutex); work = 1; p

    16、rintf ( 理发师正在给一名顾客理发. %d 个顾客正在接待室等待。n, -waiting); sleep(2); printf ( 一名顾客理发完成。n ); work = 0; sem_post(&barber); if(waiting = 0)printf(无顾客,理发师睡觉n); void * Customer ( void* arg ) int *p = (int*) arg; int x = *p; pthread_mutex_lock(&mutex); if ( chairs 0 ) chairs-; sem_post(&customer); if(waiting = 0 &

    17、 work = 0) printf( 第 %d 个顾客进来 , 唤醒理发师.n , +x); waiting+; else printf ( 第 %d 个顾客进来 , %d 个顾客正在接待室等待.n , x+1 , +waiting ); pthread_mutex_unlock(&mutex); sem_wait(&barber); else pthread_mutex_unlock(&mutex); printf ( 第 %d 个顾客进来,没有座位而离开!n , x+1 ); int main ( ) sem_init (&customer , 0 , 0 ); sem_init (&ba

    18、rber , 0 , 1 ); chairs = N; pthread_t bar; pthread_t cusN*100; int cus_idN*100; pthread_create ( &bar , NULL , Barber , NULL ); int i; srand(time(0); for ( i = 0 ; i N*100 ; i + ) usleep(100000*(rand() % 30); cus_idi = i; pthread_create ( &cusi , NULL , Customer , &cus_idi ); pthread_join ( bar , NU

    19、LL ); for ( i = 0 ; i N*100 ; i+ ) pthread_join ( cus_idi , NULL ); 3. 读者写者问题(reader_writer.c)# include # include # include # include # include # include # include # include sem_t RWMutex, mutex1, mutex2, mutex3, wrt;int writeCount, readCount;struct data int id; int lastTime;void* Reader(void* param

    20、) int id = (struct data*)param)-id; int lastTime = (struct data*)param)-lastTime; printf(读进程 %d 等待读入n, id); sem_wait(&mutex3); sem_wait(&RWMutex); sem_wait(&mutex2); readCount+; if(readCount = 1) sem_wait(&wrt); sem_post(&mutex2); sem_post(&RWMutex); sem_post(&mutex3); printf(读进程 %d 开始读入,%d 秒后完成n, i

    21、d, lastTime); sleep(lastTime); printf(读进程 %d 完成读入n, id); sem_wait(&mutex2); readCount-; if(readCount = 0) sem_post(&wrt); sem_post(&mutex2); pthread_exit(0);void* Writer(void* param) int id = (struct data*)param)-id; int lastTime = (struct data*)param)-lastTime; printf(写进程 %d 等待写入n, id); sem_wait(&m

    22、utex1); writeCount+; if(writeCount = 1) sem_wait(&RWMutex); sem_post(&mutex1); sem_wait(&wrt); printf(写进程 %d 开始写入,%d 秒后完成n, id, lastTime); sleep(lastTime); printf(写进程 %d 完成写入n, id); sem_post(&wrt); sem_wait(&mutex1); writeCount-; if(writeCount = 0) sem_post(&RWMutex); sem_post(&mutex1); pthread_exit

    23、(0);int main() pthread_t tid; pthread_attr_t attr; pthread_attr_init(&attr); sem_init(&mutex1, 0, 1); sem_init(&mutex2, 0, 1); sem_init(&mutex3, 0, 1); sem_init(&wrt, 0, 1); sem_init(&RWMutex, 0, 1); readCount = writeCount = 0; int id = 0; srand(time(0); while(1) int role = rand() % 100; int lastTim

    24、e = rand() % 10; id+; struct data* d = (struct data*)malloc(sizeof(struct data); d-id = id; d-lastTime = lastTime; if(role = 50) /写 printf(创建写进程,PID : %dn, id); pthread_create(&tid, &attr, Writer, d); sleep(rand() % 8); return 0; 1. 实现一个“difftree”命令,其功能是比较两个目录下的文件结构和文件信息。当在命令行方式下执行“difftree ”命令时,能够比

    25、较目录dir1和 目录dir2是否具有相同的结构,对相同的部分,进一步比较相同文件名的文件内容。列出比较的文件系统结构图。本实验是对单个文件比较的扩展,设计中需要考虑目录操作。difftree.c#include #include #include #include #include #include #include int filelevel1 = 0, filelevel2 = 0;char DIRNAME1256, DIRNAME2256;void my_error(const char *strerr) perror(strerr); exit(1);void findfile(ch

    26、ar fileName1, char direntName1, char direntName2) char command512 = diff ; DIR *p_dir = NULL; struct dirent *p_dirent = NULL; p_dir = opendir(direntName2); if(p_dir = NULL) my_error(opendir error); while(p_dirent = readdir(p_dir) != NULL) char *backupDirName = NULL; if(p_dirent-d_name0 = .)continue; int i; if(p_dirent-d_type = DT_DIR) int curDirentNameLen = strlen(dirent


    注意事项

    本文(华工操作系统实验.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开