温故——进程环境

进程启动和终止

内核–>启动例程–>C程序。

8种方式终止进程,其中5中正常终止。

_exit和_Exit立即进入内核,exit先执行一些清理处理,再返回内核。

atexit绑定一个函数,供exit退出前调用。调用顺序与注册顺序相反。同一函数可以注册多次,会调用多次。

内核使程序执行的唯一方法是调用一个exec函数。进程自愿终止的唯一方式是显示或者隐式调用_exit和_Exit。

理解UNIX系统环境中C程序的环境是理解UNIX系统进程控制特性的先决条件。

命令行和环境表

均是一个字符指针数组,其中每个指针包含一个以null结尾的C字符串的地址。

内核不会查看环境变量这些字符串,完全由应用程序自己解释。

虽然参数表和环境都不是由内核进行解释的,但内核起到了从exec的调用者将这两者传递给新进程的作用。

环境变量

使用getenv通过名称来访问环境变量,而不是使用全局变量environ。

putenv(char *str)和setenv(const char *name, const char *value, int rewirte)这两个函数的区别。putenv的参数是char * 而不是const char *,意味着它们的区别。

环境表和环境字符串通常放在进程存储空间的顶部(栈之上)。这意味着添加或者修改一个字符串会变得很麻烦,见P170。

存储空间布局

TEXT(只读),DATA,BSS,HEAP,STACK。0x08048000—->0xc0000000。

这里写图片描述

需要放在磁盘程序文件中的只有正文段和初始化数据段,未初始化数据段不需要存储,反正都会设置为0。

共享库减少了每个可执行文件的长度,但是增加了一些运行时间开销。共享库的另一个优点是可以用库函数的新版本代替老版本而无需对使用该库的程序重新链接编辑。

gcc -static 阻止gcc使用共享库。

malloc,calloc,realloc这三个分配函数所返回的指针一定是适当对齐的,使其可以用于任何数据对象。

内存泄漏:忘记调用free,那么该进程占用的存储空间就会持续增加,直指不再有空闲的空间,此时,由于过度的换页开销,会造成性能下降。

函数getrlimit和setrlimit

每一个进程都有一组资源限制,明白这个概念很重要。系统提供这两个函数进行查询和更改。

进程的资源限制通常是载系统初始化时由0进程建立的,然后由后续进程继承。资源的限制可以被继承,这个概念也很重要。资源限制影响到调用进程并由其子进程继承(注意,两者)。

资源限制明显不可以随意更改,应当遵循规则:
- 软限制小于或等于硬限制
- 硬限制可降低但必须大于或等于软限制
- 超级用户可以提高硬限制

函数setjmp和longjmp

还是直接看文档吧:

longjmp() and setjmp(3) are useful for dealing with errors and interrupts encountered in a low-level subroutine of a program.

setjmp() saves the stack context/environment in env for later use by longjmp(3). The stack context will be invalidated if the function which called setjmp() returns.

longjmp() restores the environment saved by the last call of setjmp(3) with the corresponding env argument. After longjmp() is completed, program execution continues as if the corresponding call of setjmp(3) had just returned the value val. longjmp() cannot cause 0 to be returned. If longjmp() is invoked with a second argument of 0, 1 will be returned instead.

longjmp() never return.

自动变量,寄存器变量和易失变量

如果你有一个自动变量,而又不想使其值回滚,则可定义其为具有volatile属性。声明为全局变量或者静态变量的值在执行longjmp时保持不变。

我的结果和书上的结果不一样。

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值