Unix系统编程笔记:2、程序、进程、线程
程序员文章站
2022-05-07 17:52:38
...
1、程序怎么转换成进程
程序(program)是为了完成特定的任务而准备好的一个指令序列。
c编译器将每个源文件翻译成一个目标文件,然后编译器将这些单个的目标文件同必须的一些库相链接,形成一个可执行模块(executable module),
程序运行或执行时,操作系统将可执行模块拷贝到主存储器的程序映象(program image)中去。
进程(process)是一个正在执行的程序实例。每个实例都有自己的地址空间和执行状态。
每个实例都有自己的地址空间和执行状态。
当操作系统向内核数据结构中添加了适当的信息,并为运行程序代码分配了必要的资源之后,程序就变成了进程。
2、线程和执行线程
程序执行时,由进程程序计数器的值来决定下面该执行哪一条进程指令。得到的指令流被称为执行线程(thread of execution)
线程是代表了进程内执行线程的一种抽象数据类型,线程有自己的执行栈、程序计数器值、寄存器组和状态。
3、程序映像的布局
加载之后,可执行程序看起来占据了一个连续的内存体,这个连续的内存块被称为程序映像
4、库函数调用
必须要处理所有的错误,而不仅仅是那些必须检测的错误
perror输出一个对应error当前值的错误消息
#include <stdio.h>
void perror(const char *s);
5、函数返回值和错误
错误处理是编写可靠系统程序中的一个关键问题。
处理unix程序中的错误的标准方法有:
a)打印出错消息并退出程序
b)返回-1或NULL,并设置errno这样的错误指示符
c)返回错误码
6、参数数组
参数数组(argment array)是一个指向字符串的指针数组
mine -c 10 2.0
argv[0] = mine
argv[1] = -c
argv[2] = 10
argv[3] = 2.0
argv[4] = NULL
上一篇: Unix环境高级编程笔记:9、进程关系
下一篇: malloc、free与内存碎片