• 【僵尸进程和文件系统调用】


    虚拟空间物理空间

    内存与磁盘的运行速度1:20
    x86 32位 4G–> 物理内存:寻址能力4G
    4G供内核1G,用户态的3G,
    虚拟空间4G,虚拟空间可以通过页表映射到物理内存上,理论上可以通过虚拟空间将物理内存占满,但是实际上是占不满的。因为跑个程序一般占几十个页面,也就是几十K,所以3~4个G一般占不完。(虚拟内存实际上是不存在的)
    页表信息在哪查看?
    一个进程的信息都在PCB中保存,所以一个进程的页表信息也在PCB中保存,(一个进程的创建先出现PID,接着才会出现进程实体。一个进程的结束,进程实体先消失,紧接着PID才会消失)。

    僵尸进程

    僵尸进程产生

    僵尸进程:子进程先于父进程结束,父进程没有回收子进程,子进程进入僵尸进程。子进程的退出,父进程未获取子进程的退出码,所以子进程进入僵尸进程。
    僵尸进程代码举例:

    #include
    #include
    #include
    int main(){
    int n=0;
    char *s=NULL;
    pid_t pid=fork();
    if(pid==0){//子进程
    n=3;
    s="child";
    }else{//父进程
    n=7;
    s="parent";
    }
    for(int i=0;i<n;i++){
    printf("pid=%d,ppid=%d,s=%s\n",getpid(),getppid(),s);//getpid()获取当前进程pid,getppid()获取当前进程父进程的pid
    sleep(1);
    }
    return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    通过ps命令查看
    在这里插入图片描述

    僵尸进程的解决

    子进程结束之后父进程获取子进程的退出码便不会出现僵尸进程。
    父进程通过wait命令等待子进程结束之后获取子进程的退出码然后父进程运行。
    代码:
    在这里插入图片描述

    孤儿进程

    孤儿进程:父进程先于子进程结束,子进程的父进程由init进程接管子进程。
    代码举例:

    #include
    #include
    #include
    int main(){
    int n=0;
    char *s=NULL;
    pid_t pid=fork();
    if(pid==0){//子进程
    n=7;
    s="child";
    }else{//父进程
    n=3;
    s="parent";
    }
    for(int i=0;i<n;i++){
    printf("pid=%d,ppid=%d,s=%s\n",getpid(),getppid(),s);//getpid()获取当前进程pid,getppid()获取当前进程父进程的pid
    sleep(1);
    }
    return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    ps -f命令查看
    在这里插入图片描述

    文件系统调用

    程序调用库函数,比如./main程序调用printf库函数,也就是系统调用wrinte,需要从用户空间嵌入内核空间,取得内核支持,从而打印到屏幕(硬件设备)上。
    也有一部分函数不需要内核的支持比如:strlen …strcmp…

    创建打开文件:
    在这里插入图片描述

  • 相关阅读:
    第三章 内存管理 十一、虚拟内存的基本概念
    JS-Bom-while(计算闰年)
    SQL 文本函数
    python自动化之(django)(2)
    阿里云EasyExcel读写excel表数据
    探究MYSQL之索引
    ubuntu2104 atp
    文章摘要智能提取【基于BERT技术】
    每天五分钟机器学习:如何解决过拟合问题?
    hdu 3549 Flow Problem(简单网络流Dinic)
  • 原文地址:https://blog.csdn.net/m0_56246173/article/details/127886040