操作系统
全幼儿园最聪明
计算机专业硕士在读
展开
-
操作系统实践课程实验报告 总结篇
操作系统实践课程实验报告总结如下,欢迎交流~文件读写myecho.cmycat.cmycp.c多进程mysys.csh1.csh2.csh3.c多线程pi1.cpi2.csort.cpc1.cpc2.c原创 2021-10-07 20:23:39 · 2083 阅读 · 0 评论 -
多线程|pc2.c 使用信号量解决生产者、计算者、消费者问题
1.题目要求使用信号量解决生产者、计算者、消费者问题功能和前面的实验相同,使用信号量解决2.解决思路生产者、计算者、消费者三个线程的逻辑与上一题使用条件变量解决生产者、计算者、消费者问题相同,不同之处在于本题使用条件变量实现信号量sema_t,value记录了信号量的值。sema_wait函数如果信号量的值小于等于0,则等待条件变量将信号量的值减一。sema_signal函数将信号量的值加一,唤醒等待条件变量的线程。定义mutex_sema用于互斥访问共享缓冲区变量in/out,empty_bu原创 2021-10-03 16:28:00 · 766 阅读 · 0 评论 -
多线程|pc1.c 使用条件变量解决生产者、计算者、消费者问题
1.题目要求使用条件变量解决生产者、计算者、消费者问题系统中有3个线程:生产者、计算者、消费者系统中有2个容量为4的缓冲区:buffer1、buffer2生产者生产’a’、‘b’、‘c’、‘d’、‘e’、‘f’、‘g’、'h’八个字符,放入到buffer1计算者从buffer1取出字符,将小写字符转换为大写字符,放入到buffer2消费者从buffer2取出字符,将其打印到屏幕上2.解决思路 设置两个大小为4的共享缓冲区buffer1和buffer2,第一个为生产者和计算者共享,第二原创 2021-10-03 16:26:38 · 737 阅读 · 0 评论 -
多线程|sort.c 多线程排序
1.题目要求多线程排序主线程创建两个辅助线程辅助线程1使用选择排序算法对数组的前半部分排序辅助线程2使用选择排序算法对数组的后半部分排序主线程等待辅助线程运行结束后,使用归并排序算法归并子线程的计算结果本题要求 1: 使用线程参数,消除程序中的代码重复2.解决思路 创建辅助线程等整体的思路与上一题相同,关键在于实现选择排序算法与归并排序算法。 选择排序算法的思想是:如果有N个元素需要排序,首先从N个元素中找到最小的那个元素,然后与起始索引位置上的元素进行交换(如果没有比原来起始原创 2021-10-03 16:24:58 · 1004 阅读 · 0 评论 -
多线程|pi2.c 使用N个线程根据莱布尼兹级数计算PI
1.题目要求使用N个线程根据莱布尼兹级数计算PI与上一题类似,但本题更加通用化,能适应N个核心主线程创建N个辅助线程每个辅助线程计算一部分任务,并将结果返回主线程等待N个辅助线程运行结束,将所有辅助线程的结果累加本题要求 1: 使用线程参数,消除程序中的代码重复本题要求 2: 不能使用全局变量存储线程返回值2.解决思路 本题与上一题实现的功能相同,但在上一题中使用全局变量传递参数,且只有主线程与辅助工作线程两个线程,本题中使用线程参数,且主线程创建N个辅助线程。使用结构体struc原创 2021-10-03 16:23:00 · 612 阅读 · 0 评论 -
多线程|pi1.c 使用2个线程根据莱布尼兹级数计算PI
1.题目要求使用2个线程根据莱布尼兹级数计算PI莱布尼兹级数公式: 1 - 1/3 + 1/5 - 1/7 + 1/9 - … = PI/4主线程创建1个辅助线程主线程计算级数的前半部分辅助线程计算级数的后半部分主线程等待辅助线程运行结束后,将前半部分和后半部分相加2.解决思路 按照题目要求,首先需要实现主线程master和辅助线程work,二者分别用于计算莱布尼兹级数的前半部分和后半部分,莱布尼兹级数公式中有无穷项,需要定义程序中计算的项数N,比如设定为5000,在线程函数中功能的原创 2021-10-03 16:21:28 · 977 阅读 · 0 评论 -
多进程|sh3.c 实现管道
1.题目要求实现shell程序,要求在第2版的基础上,添加如下功能实现管道只要求连接两个命令,不要求连接多个命令不要求同时处理管道和重定向# 执行sh3$ ./sh3# 执行命令cat和wc,使用管道连接cat和wc> cat /etc/passwd | wc -l考虑如何实现管道和文件重定向,暂不做强制要求$ cat input.txt321321$ cat <input.txt | sort | uniq | cat >output原创 2021-10-03 16:14:45 · 995 阅读 · 0 评论 -
多进程|sh2.c 实现文件重定向
1.题目要求实现shell程序,要求在第1版的基础上,添加如下功能:实现文件重定向 # 执行sh2 $ ./sh2 # 执行命令echo,并将输出保存到文件log中 > echo hello >log # 打印cat命令的输出结果 > cat log hello2.解决思路在sh1.c的基础上,在创建子进程之后,需要判断当前键入的命令是否需要文件重定向,如果是需要实现文件重定向,反之按照之前的系统调用execvp装入程序执行。因此在结构体原创 2021-10-03 16:11:34 · 941 阅读 · 0 评论 -
多进程|sh1.c 取用户输入的命令,调用函数 mysys 执行用户的命令
1.题目要求该程序读取用户输入的命令,调用函数mysys(上一个作业)执行用户的命令,示例如下# 编译sh1.c$ cc -o sh1 sh1.c# 执行sh1$ ./sh # sh1打印提示符>,同时读取用户输入的命令echo,并执行输出结果> echo a b ca b c# sh1打印提示符>,同时读取用户输入的命令cat,并执行输出结果> cat /etc/passwdroot:x:0:0:root:/root:/bin/bashdaemon原创 2021-10-03 16:06:59 · 1275 阅读 · 0 评论 -
多进程|mysys.c 实现系统函数 system
1.题目要求实现函数mysys,用于执行一个系统命令,要求如下:mysys的功能与系统函数system相同,要求用进程管理相关系统调用自己实现一遍使用fork/exec/wait系统调用实现mysys不能通过调用系统函数system实现mysys测试程序#include <stdio.h>void mysys(char *command){ 实现该函数,该函数执行一条命令,并等待该命令执行结束}int main(){ printf("原创 2021-10-03 16:00:59 · 1029 阅读 · 0 评论 -
文件读写 | mycp.c 将源文件复制到目标文件
1.题目要求mycp.c的功能与系统cp程序相同将源文件复制到目标文件,例子如下:要求使用系统调用open/read/write/close实现$ cat /etc/passwdroot:x:0:0:root:/root:/bin/bashdaemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologinbin:x:2:2:bin:/bin:/usr/sbin/nologin...$ ./mycp /etc/passwd passwd.bak $原创 2021-07-11 16:21:28 · 1226 阅读 · 0 评论 -
文件读写 | mycat.c 将指定的文件内容输出到屏幕
1.题目要求mycat.c的功能与系统cat程序相同mycat将指定的文件内容输出到屏幕,例子如下:要求使用系统调用open/read/write/close实现$ cat /etc/passwd root:x:0:0:root:/root:/bin/bashdaemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologinbin:x:2:2:bin:/bin:/usr/sbin/nologin...$ ./mycat /etc/passwd ro原创 2021-07-11 16:17:42 · 880 阅读 · 0 评论 -
文件读写 | myecho.c 接受命令行参数,并将参数打印出来
1.题目要求myecho.c的功能与系统echo程序相同接受命令行参数,并将参数打印出来,例子如下:$ ./myecho xx$ ./myecho a b ca b c2.解决思路 main函数有两个参数,分别为int类型的argc表示命令行参数个数,和char ** 型的argv表示命令行参数,在命令行输入的字符串自动以空格作为分割符分割之后存储在字符串数组argv中。实现myecho的功能只需遍历字符串数组argv中的每一个字符串,再打印出来即可,需要注意的是./mye原创 2021-07-11 16:13:52 · 658 阅读 · 0 评论