Linux进程与线程

 

目录

 

线程

进程管理

PCB 

处理器管理级别

用户空间

进程状态

fork原理

exec原理

僵死进程Zombie和孤儿进程

进程间通信

pipe通道

fifo有名管道

mmap/munmap


线程

从内核里看进程和线程是一样的,都有各自不同的PCB,但是PCB中指向内存资源的三级页表是相同的,如下图所示。

进程负责整个资源,我们在进程内部创建的线程,资源共享,即用户空间共享,但是每个线程拥有不同的PCB,每个PCB会保存一个内核栈,用于保存当线程被cpu切换时保存寄存器内容,即保护处理现场。

用户空间: 除了线程栈之外,其他的用户空间都是共享的。线程栈内保存线程运行时定义的局部变量等信息。

 

进程管理

PCB 

​    进程控制块, 其结构大致如下图。我们的PCB中存在一个files struct, 对应就是一个int数组,数组的每个值都是一个文件描述符。当我们的程序fopen打开一个文件时,PCB会在当前files struct的数组结构中找一个最小且未被使用的描述符作为返回,并将其执行要打开的文件。

 

处理器管理级别

 

CPU有4个工作级别, 这里Linux就使用了0和3两个级别。3级对应用户态,0级对应内核态。处于3级的cpu只能访问0~3G的空间,也就是用户空间。当cpu处于0级,才有资格访问3G~4G这个内核空间。

从用户态到内核态怎么转换的呢?

就是调用系统调用。应用程序的printf底层调用sys_write。我们便从用户态3级变成了内核态0级。

 

用户空间

这里对系统分配给进程的虚拟空间0~3G空间的内容说明。

进程状态

时段1的时候cpu在执行a.out,当时段2的时候b.out程序要执行,这个时候cpu会保存处理器现场,也就是寄存器中的数据。当b.out执行完毕后,a.out又重新唤起执行,那么这个时候我们便需要恢复处理器现场。这个处理器现场是保存到当前pcb内核栈上。

 

fork原理

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值