2022操作系统实验李丁丁


title: 2022操作系统实验
date: 2022-09-30 17:29:31
author: “胡耀文”
categories: 操作系统


作业1

1

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

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

2 sleep

#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

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

所以开两个来进行操作

#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

#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

猜你喜欢

转载自blog.csdn.net/supreme567/article/details/127127052