Linux系统编程(一)


一、进程和程序

程序:是指编译好的二进制文件,存储在磁盘中,不占用系统资源。

进程:是系统进行资源分配的基本单位,进程是活跃的程序,占用系统资源。在内存中执行。

两者关系:程序运行的时候,会产生进程。

二、内存布局

在这里插入图片描述

内存分为两个区域,一个是内核空间,另一个就是用户空间。

内核空间

进程陷入内核态后才能够访问的空间。内核中有一块PCB进程控制块,主要负责维护进程相关的信息。栈内存的申请和释放都由编译器自动完成,并且栈容量由系统预先定义的。栈从高地址到低地址增长。

用户空间

:栈用来存放临时创建的局部变量,如函数的参数、内部变量等。每调用一次函数,就会将参数压入进程调用栈中,调用结束后也会被返回栈中。同时,每调用一个函数就会创建一个新的栈,所以递归函数的时候会导致栈溢出
文件映射段:也叫共享区,文件映射段主要包括共享内存、动态链接库等共享资源,从低地址向高地址增长。
:堆用来存放动态分配的内存。堆内存由用户申请分配和释放,从低地址向高地址增长。
BSS:BSS段用来存放程序中未初始化的全局变量和静态变量。
数据段:数据段用来存放程序中已初始化全局变量与静态变量。
代码段:代码段用来存放程序执行代码,也可能包含一些只读的常量。这块区域的大小在程序运行时就已经确定,并且为了防止代码和常量遭到修改,代码段被设置为只读。

三、进程状态

进程基本的状态有5种。分别为初始态,就绪态,运行态,挂起态与终止态。其中初始态为进程准备阶段,常与就绪态结合来看。
在这里插入图片描述

四、环境变量

环境变量,是指在操作系统中用来指定操作系统运行环境的一些参数
例如:ls实际上也是一个程序,但是为什么我们不需要加入完整的路径名/bin/ls呢?当我们执行的ls的时候,操作系统会现在环境变量中查找ls命令所在的目录/bin,然后执行该目录下的程序。

五、进程共享

fork函数

在这里插入图片描述
父子之间的共享遵循读时共享写时复制的原则,使用全局变量并不能进行父子进程间的数据共享。全局变量是存在data段的,父进程修改全局变量和子进程修改全局变量是在data段的不同内存空间修改的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chenshida_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值