linux-05-进程和管道

  1. 进程
    程序:二进制文件,占用磁盘空间
    进程:启动的程序,占用内存空间,cpu
    ps au 显示依赖终端的进程
    ps aux 显示包括不依赖终端的进程
    ps aux | grep 内容
    ps ajx 显示包括PPID PID PGID SID
    如果抓到形成,至少会有两条显示
    ps -9 PID 无条件杀死一个进程

    孤儿进程:爹死了,孩子(孤儿)活着的进程,被init进程领养。子进程可以释放用户区空间,由父进程释放pcb。
    僵尸进程:孩子(僵尸)死了,父亲不释放子进程pcb。

PCB:进程控制块,位于内核区记录进程信息的结构体。
包括:进程id,进程5种状态之一,需要恢复CPU寄存器的信息,虚拟地址空间信息,当前工作目录,用户id和组id,会话和进程组,进程可以使用的资源上限。
初始态:刚生出的进程。
就绪态:有执行资格,没有执行权(等待CPU)。
运行态:有执行资格,有执行权(获得CPU)。
挂起态:sleep后,没有执行资格,没有执行权。
终止态:死亡的进程。

进程是由进程通过fork创建。
线程是由进程通过pthread_create创建。 linux下线程就是轻量级的进程。 进程成为主线程,和子线程共用同一块地址空间和PID。但在内核区有独立的pcb。用户去的堆,栈,.text,.bss,.data,动态库加载区,环境变量,命令行参数中唯一不共享的就是栈。所以多线程之间可以共享全局变量,堆。如果有5个线程,8M的栈会被平分,更节约资源。
查看LWP查看线程ID,ps -Lf PID
多进程共享:代码,文件描述符,内存映射区。
多线程共享:堆,全局变量。
守护进程:后台进程,独立于终端,周期性执行某任务

  1. 进程的虚拟地址空间

虚拟地址空间通过页表映射到物理内存,页表由操作系统维护。linux中,内核进程和用户进程所占比1:3。
这里写图片描述

a.栈向低地址扩展(即”向下生长”),是连续的内存区域,先进后出不会存在内存碎片;
b.堆向高地址扩展(即”向上生长”),程序员管理,是不连续的内存区域,碎片多可能会效率低下。
c.环境变量
d.命令行参数
e.数据区—该区又分为bss段,rodata段和data段: bss段(block start by symbol)—保存未初始化或者初始化为0的全局变量 rodata段—用于保存常
f.代码区—存放函数体的二进制代码

线程同步思想:多线程访问共享资源,需要加锁进行同步。并行-〉串行。
1.互斥锁。
读写都互斥,串行,效率低。
2.读写锁。
可以并行读取A读,B读,独占进行写A读,B阻塞。
适合读比较多的场景。

3.管道
本质上是缓冲区,有读端,写端两个部分,对应两个文件描述符。
查看缓冲区大小:ulimit -a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值