首页 > 其他分享 >关于实现操作系统中一些操作的注意事项【随时更新】

关于实现操作系统中一些操作的注意事项【随时更新】

时间:2023-09-15 22:11:53浏览次数:56  
标签:right 操作系统 buffer 注意事项 int thisnum 随时 close left

  总结一些最近做MIT.S081 OS遇到的一些问题

  1)在使用pipe时,应注意到对资源的释放问题,比如说在primes这个实验中遇到了当使用了pipe[1]对管道进行写入时,如果最后没有将pipe的写资源释放,可能导致资源持续被占用,进程无法正常结束的问题;

附上source code

#include "kernel/stat.h"
#include "kernel/types.h"
#include "user/user.h"

void sieve(int left[2]) 
{
    int thisnum;
    int right[2];
    close(left[1]);
    read(left[0], &thisnum, sizeof(thisnum));
    // printf("prime %d\n", thisnum);
    if(thisnum == -1) {
        close(left[0]);
        exit(0);    
    }
    printf("prime %d\n",thisnum);
    //err situation
    if(pipe(right) < 0) {
        printf("create right queue err\n");
        exit(-1);
    }
    int pid = fork();
    // printf("pid:%d\n",pid);
    if(pid < 0) {
        // printf("create child process err\n");
        close(right[1]);
        close(right[0]);
        close(left[0]);
        exit(-1);
    }
    //normal situation
    else if(pid == 0) {
        //child
        // printf("this is a child\n");
        close(right[1]);
        close(left[0]);
        sieve(right);   
    }
    else {
        //parent
        close(right[0]);
        int buffer = 0;
        while(read(left[0], &buffer, sizeof(buffer))) {
            if(buffer % thisnum) {
                write(right[1], &buffer, sizeof(buffer));
            }
        }
    }
    int buffer = -1;
    write(right[1], &buffer, sizeof(buffer));
    close(right[1]);
    close(left[0]);
    // close(left[1]);
    wait(0);
    exit(0);
}

void init(int q[2])
{
    for (int i = 2; i <= 35; ++i) {
        // printf("this num is:%d\n",i);
        write(q[1], &i, sizeof(i));
    }
    int temp = -1;
    write(q[1], &temp, sizeof(temp));
    sieve(q);
}

void create_pipe() 
{
    int que[2];
    if(pipe(que) < 0) {
        printf("create pipe err\n");
        exit(-1);
    }
    init(que);
    exit(0);
}

int main(int args, char *argv[]) 
{
    create_pipe();
    exit(0);
}
View Code

 

标签:right,操作系统,buffer,注意事项,int,thisnum,随时,close,left
From: https://www.cnblogs.com/orangeko/p/17706011.html

相关文章

  • 银河麒麟操作系统安装人大金仓数据库--九五小庞
    一、环境要求硬件:内存512M以上,磁盘空间10G以上软件:主流Linux操作系统,本机使用kylin-v10安装包准备:官网下载数据库文件镜像以及授权文件https://www.kingbase.com.cn/rjcxxz/index.htm 二、配置内核参数vim/etc/sysctl.conf#加入以下行fs.aio-max-nr=1048576fs.f......
  • vue3videplayer播放m3u8视频流注意事项
    前言使用vue3开发项目时,碰上需要做一个视频流列表的页面,最开始是想获取所有列表数据后创建对应的video标签,这样默认获取第一帧作为封面,同时暂停视频减轻不断请求的压力。但开发后发现视频就算暂停后也会继续请求视频流,多个视频反而会导致页面卡顿。方案手动获取视频的第一......
  • 银河麒麟--国产操作系统-九五小庞
    那么,我国国产操作系统现状到底如何呢?自1999年徐冠华部长一语点破我们的产业软肋之后,国产操作系统起步于国家“七五”计划期间,目前国产操作系统均是基于Linux内核进行的二次开发,中国国产操作系统进入Linux元年,后续陆续有新的品牌出现,已有品牌也在不断整合。2012年,国家设立重大专......
  • 【UOS操作系统】dd刻录镜像
    1、查看当前系统的磁盘分区(未插U盘)$lsblk NAME    MAJ:MINRM SIZEROTYPEMOUNTPOINTsda     8:0  0926.1G 0disk └─sda1    8:1  0926.1G 0part/media/uos/_dde_datanvme0n1  259:0  0238.5G 0disk ├......
  • UOS操作系统如何实现自动安装(二)
    使用pxe安装uos系统UOS操作系统如何实现自动安装(一)============================================================================本文介绍自动安装时磁盘自动分区策略1、在settings.ini中配置如下:skip_partition_page=true#跳过磁盘分区页partition_do_auto_part=true......
  • UOS服务器操作系统安装Zabbix-5.2.1
    需求描述:在UOS服务器系统中安装Zabbix,并添加监控主机。软件信息:   UOS系统版本:1030amdserver  Zabbix版本:5.2.1环境信息:   zabbix-server   192.168.26.110  zabbix-client    192.168.26.111安装Zabbix-server   #wgethttps://repo.zabbix.com/z......
  • 操作系统 1.3_1 操作系统的运行机制
    操作系统的运行机制内核程序和应用程序我们普通程序员写的程序就是“应用程序”。微软、苹果有一帮人负责实现操作系统。他们写的是“内核程序”,由很多内核程序组成了“操作系统内核”,或简称“内核(Kernel)”。内核是操作系统最重要的核心部位,也是最接近硬件的部分,甚至可以说,......
  • 中标麒麟--国产操作系统-九五小庞
    那么,我国国产操作系统现状到底如何呢?自1999年徐冠华部长一语点破我们的产业软肋之后,国产操作系统起步于国家“七五”计划期间,目前国产操作系统均是基于Linux内核进行的二次开发,中国国产操作系统进入Linux元年,后续陆续有新的品牌出现,已有品牌也在不断整合。2012年,国家设立重大专......
  • 操作系统2——进程
    进程的定义 QQ程序指令就是程序段,数据段就是程序运行过程中的产生的数据   线程   自己编写的许多线程库     刮起进程在外存中,阻塞还在内存中调度算法   进程同步互斥   策略 违背了空闲则进的原则,一个不让用......
  • 操作系统1 概述
    操作系统功能    操作系统的特性  虚拟异步中断  系统调用   凡是需要用到共享资源 整个过程需要三步,由陷入指令引发 由于所有的服务器都是运行在用户态,服务器与服务器之间采用消息传递通讯机制,因此当某个服务器出现错误时,不会影......