2022操作系统实验


作业1

1

之前就玩过虚拟机,所以直接vscode上ssh远程连接来写

没有或者不用vscode的话也可以直接在虚拟机上vim来写,只不过黑框框可能用得比较难受

2 sleep

1
2
3
4
5
6
7
8
9
10
11
#include "kernel/types.h"
#include "kernel/stat.h"
#include "user/user.h"

int main(int argc,char **argv){
if(argc<2){
printf("usage: sleep <ticks>\n");
}
sleep(atoi(argv[1]));
exit(0);
}

3 pingpong

单开一个管道的话,有可能我刚写进去就被自己读到了

所以开两个来进行操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include "kernel/types.h"
#include "kernel/stat.h"
#include "user/user.h"

signed main(int argc,char **argv){
int pp2c[2],pc2p[2];
pipe(pp2c);
pipe(pc2p);
if(fork()==0){
char buf;
read(pp2c[0],&buf,1);
printf("%d: received ping\n",getpid());
write(pc2p[1],&buf,1);
}
else{
write(pp2c[1], "!",1);
char buf;
read(pc2p[0], &buf,1);
printf("%d: received pong\n",getpid());
wait(0);
}
exit(0);
}

在这里插入图片描述

4 prime

先写一个线性筛对比跑出来的结果

main塞完全部数字后塞入-1,如果读到-1就exit

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include "kernel/types.h"
#include "kernel/stat.h"
#include "user/user.h"

const int N=36;

#define N 36

int a[N],n,st[N];
int id=1;
void prime(){
for(int i=2;i<N;i++){
if(!st[i])a[++n]=i;
for(int j=1;a[j]*i<=N;j++){
st[a[j]*i]=1;
if(i%a[j]==0)break;
}
}
}

void dfs(int l[2]){
int p;
read(l[0],&p,sizeof p);
if(p==-1)exit(0);
printf("NO.%d prime is %d\n",id++,p);

int r[2];
pipe(r);
if(fork()==0){
close(l[0]);
close(r[1]);
dfs(r);
}
else{
close(r[0]);
int buf;
while(read(l[0],&buf,sizeof (buf))&&id<n){
if(buf%p==0)continue;
write(r[1],&buf,sizeof (buf));
}
write(r[1],&buf,sizeof buf);
close(l[0]);
wait(0);
exit(0);
}
}

signed main(){
prime();
for(int i=1;i<=n;i++)printf("NO.%d :%d\n",i,a[i]);
// puts("");
printf("-----------------------------------\n");
int input_pipe[2];
pipe(input_pipe);
if(fork()==0){
close(input_pipe[1]);
dfs(input_pipe);
exit(0);
}
else{
close(input_pipe[0]);
for(int i=2;i<=35;i++){
write(input_pipe[1],&i,sizeof(i));
}
// write(input_pipe[1],-1,sizeof (-1));
int x=-1;
write(input_pipe[1],&x,sizeof (x));
}
wait(0);
exit(0);
}
在这里插入图片描述

5 总结

这段时间ccpc预选赛和icpc预选赛所以很晚才开始写,不过之前在acwing上写过小项目所以对vim很熟悉(虽然很久很久没用过了)

在朋友的推荐下尝试了vscode来操作,确实更快而且更人性化

作业2


文章作者: 胡耀文
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 胡耀文 !
  目录