C_Linux编程_进程通信笔记

MMU的作用:

  • 虚拟内存和物理内存的映射

进程控制块PCB

  • 一个结构体
  • 进程的基本状态:初始、就绪、运行、挂起、终止。
  • 环境变量:
    • 获取环境变量:char *getenv(const char *name)
  • 进程API:
    • 创建一个新的进程:
      • pid_t fork(void)创建一个进程
        • 失败返回 -1
        • 成功返回两次
          • 父进程返回子进程的id
          • 子进程返回 0
    • 获取进程id
      • pid_t getpid(void)获得当前进程
      • pid_t getppid(void)获取当前进程父进程的id
  • 查看进程:
    • ps aux 、
    • ps ajx(查看血缘)
    • kill 杀死进程
  • sleep()让程序进入挂起态,就不在抢占cpu,再次获取资源就可以进入就绪态
  • 进程共享
    • 代码和数据都是共享的
    • 不同:未决信号集,定时器不同
    • 子进程和父进程:读时共享,写时复制(在物理内存上新开辟一块内存)

exec族函数

  • 执行其他函数
    • execl():执行程序时,使用PATH变量,不需要文件路径
    • execlp():需要文件路径,代码段替换

孤儿进程和僵尸进程

  • 孤儿:父亲死了,子进程被int进程领养
  • 僵尸:子进程死了,父进程没有回收子进程的资源(PCB)pcb残留
    • 杀死父进程,init领养僵尸,进行回收
  • 回收僵尸
    • 作用:
      • 阻塞等待
      • 回收子进程资源
      • 查看死亡原因
    • wait(int *staus)
      • status 传出参数
      • 死亡原因:
        • 正常死亡
        • 非正常:信号杀死
    • waitpid(pid_t pid,int *staus,int option)
      • pid:选择回收的进程
      • option:如果配置为WNOHANG,没有子进程退出立刻返回
      • 返回值:如果配置了WNOHANG:
        • 如果没有子进程退出,返回0
        • 如果有子进程退出,返回退出的pid
      • 返回失败输出-1

IPC

  • IPC:进程间通信,通过内核提供的缓冲区进行数据交换的机制
  • IPC的通信方式:
    • 常见的通信方式:
      • 单工:广播
      • 半双工:同一个时刻数据,数据一个方向流(对讲机)
      • 全双工:电话
    • pipe 管道 --最简单(有血缘关系的半双工通信)
      • 父子进程一个写,一个读
      • 创建子进程之前pipe
      • int pipe(int pipefd[2]);
        • pipefd 读写文件描述符,0-代表读,1-代表写
        • 返回值:失败返回-1,成功返回0
      • 尽量兄弟进程间互相通信,易于回收
    • fifo 有名管道
      • 创建一个fifo伪文件
        • mkfifo myfifo 终端命令创建
        • int mkfifo(const char *pathname,mode_t mode)
      • 内核会针对fifo文件开辟缓冲区:实际上就是文件读写
    • mmap 文件映射共享IO --速度最快
      • void *mmap(void *addr, size_t length, int prot, int flag, int fd, off_t offset);
        • addr:NULL
        • length:映射区长度
        • prot
          • PROT_READ 可读
          • PROT_WRITE 可写
        • flags
          • MAP_SHARED 共享的
          • MAP_PRIVATE 私有的
        • fd 文件描述符,open打开一个文件
        • offset 偏移量(必须是4k的整数倍)
        • 返回值
          • 成功返回地址
          • 失败返回MAP_FAILED
      • 释放映射区:int munmap(void *addr, size_t length);
    • 本地socket --最稳定
    • 信号 --携带信息量最小
    • 共享内存
    • 消息队列
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值